diff --git a/src/main/java/com/urpsys/basefront/common/util/CommonUtil.java b/src/main/java/com/urpsys/basefront/common/util/CommonUtil.java index 7cb66dc3..2d4b4431 100644 --- a/src/main/java/com/urpsys/basefront/common/util/CommonUtil.java +++ b/src/main/java/com/urpsys/basefront/common/util/CommonUtil.java @@ -307,6 +307,12 @@ public class CommonUtil return (Long.valueOf(str).longValue()); } + public static int stoi(String str) + { + if(str == null ) return 0; + return (Integer.valueOf(str).intValue()); + } + /** 문자열을 중 특정 문자열을 변환시킨다. @version 1.0 diff --git a/src/main/java/com/urpsys/basefront/common/util/RestApiCallUtil.java b/src/main/java/com/urpsys/basefront/common/util/RestApiCallUtil.java index 4ba2b1ed..044c8bcb 100644 --- a/src/main/java/com/urpsys/basefront/common/util/RestApiCallUtil.java +++ b/src/main/java/com/urpsys/basefront/common/util/RestApiCallUtil.java @@ -146,7 +146,7 @@ public class RestApiCallUtil String strFullReturnData = returnObj.toString(); - log.info("전체 리턴값 => [{}]", returnObj.toString()); + // log.info("전체 리턴값 => [{}]", returnObj.toString()); // Map 변환처리 Map returnMap = null; diff --git a/src/main/java/com/urpsys/basefront/config/EgovConfigAppProperties.java b/src/main/java/com/urpsys/basefront/config/EgovConfigAppProperties.java index 7853fe4c..8e932619 100644 --- a/src/main/java/com/urpsys/basefront/config/EgovConfigAppProperties.java +++ b/src/main/java/com/urpsys/basefront/config/EgovConfigAppProperties.java @@ -52,7 +52,7 @@ public class EgovConfigAppProperties properties.put("Globals.fileUpload.Extensions.Images", ".gif.jpg.jpeg.png"); - long lMaxSize = (1024*1024)*10; // 10MB + long lMaxSize = (1024*1024)*100; // 100MB // String strMaxSize = String.valueOf(lMaxSize); properties.put("Globals.fileUpload.maxSize", lMaxSize+""); diff --git a/src/main/java/com/urpsys/basefront/controller/MainController.java b/src/main/java/com/urpsys/basefront/controller/MainController.java index dd4f2420..1267c06b 100644 --- a/src/main/java/com/urpsys/basefront/controller/MainController.java +++ b/src/main/java/com/urpsys/basefront/controller/MainController.java @@ -357,9 +357,7 @@ public class MainController request.getSession().setAttribute("list_headmenu", list_headmenu); request.getSession().setAttribute("list_menulist", list_menulist); - - log.info("한번 봅시다. [{}]", list_menulist.toString()); - + // log.info("한번 봅시다. [{}]", list_menulist.toString()); model.addAttribute("list_headmenu", list_headmenu); model.addAttribute("list_menulist", list_menulist); diff --git a/src/main/java/com/urpsys/itmsfront/cmm/controller/UserSearchController.java b/src/main/java/com/urpsys/itmsfront/cmm/controller/UserSearchController.java index dc67a8d2..c23f6044 100644 --- a/src/main/java/com/urpsys/itmsfront/cmm/controller/UserSearchController.java +++ b/src/main/java/com/urpsys/itmsfront/cmm/controller/UserSearchController.java @@ -64,8 +64,6 @@ public class UserSearchController log.info("strMultiUserSelectYn : {}", strMultiUserSelectYn); - - // Body Setting Start ------------------------------- searchVO.setPageUnit(propertyService.getInt("pageUnit")); searchVO.setPageSize(propertyService.getInt("pageSize")); @@ -91,6 +89,13 @@ public class UserSearchController paginationInfo.setTotalRecordCount(totCnt); + // 2025.11.19 나혁제 선잭조건이 없는경우 1 로 세팅 + if(searchVO.getSearchCondition() == null || searchVO.getSearchCondition().equals("")) + { + searchVO.setSearchCondition("1"); + } + + model.addAttribute("resultList" , resultList); model.addAttribute("resultCnt" , totCnt); model.addAttribute("paginationInfo" , paginationInfo); diff --git a/src/main/java/com/urpsys/itmsfront/pot/controller/PortletManageController.java b/src/main/java/com/urpsys/itmsfront/pot/controller/PortletManageController.java index a38b73ce..d1944d16 100644 --- a/src/main/java/com/urpsys/itmsfront/pot/controller/PortletManageController.java +++ b/src/main/java/com/urpsys/itmsfront/pot/controller/PortletManageController.java @@ -7,6 +7,7 @@ import java.util.Map; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.egovframe.rte.fdl.property.EgovPropertyService; import org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; @@ -14,11 +15,14 @@ import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.urpsys.itmsfront.bbs.domain.BoardVO; +import com.urpsys.itmsfront.srm.domain.ReportOtherVo; import com.urpsys.basefront.common.egov.util.EgovStringUtil; import com.urpsys.basefront.common.util.CommonUtil; import com.urpsys.basefront.common.util.ConvertUtils; @@ -27,6 +31,7 @@ import com.urpsys.basefront.domain.MemberVO; import com.urpsys.itmsfront.sys.domain.PrsnlPortletCreateVO; import com.urpsys.itmsfront.sys.domain.PrsnlPortletManageVO; +import kong.unirest.json.JSONArray; import lombok.extern.slf4j.Slf4j; /** @@ -98,23 +103,35 @@ public class PortletManageController { public ModelAndView insertUserPortlet( @ModelAttribute("prsnlPortletCreateVO") PrsnlPortletCreateVO prsnlPortletCreateVO , @RequestParam Map commandMap , HttpServletRequest request - , ModelMap model) throws Exception { + , ModelMap model) throws Exception + { + log.info(">>>>>>>>>>>>>>> /potl/insertUserPortlet.do <<<<<<<<<<<<<<<"); MemberVO memberVo = (MemberVO)SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - String userId=memberVo == null ? "" : EgovStringUtil.isNullToString(memberVo.getTokenInfo().getStrMEM_ID()); + String userId = memberVo == null ? "" : EgovStringUtil.isNullToString(memberVo.getTokenInfo().getStrMEM_ID()); prsnlPortletCreateVO.setFrstRegisterId(memberVo == null ? "" : EgovStringUtil.isNullToString(memberVo.getTokenInfo().getUniqId())); prsnlPortletCreateVO.setUserId(memberVo == null ? "" : EgovStringUtil.isNullToString(memberVo.getTokenInfo().getStrMEM_ID())); + Map bodyMap = new LinkedHashMap(); + + prsnlPortletCreateVO.setPrsnlId((String)commandMap.get("insPrnslIds")); + prsnlPortletCreateVO.setPortletSeq(CommonUtil.stoi((String)commandMap.get("insPrnslSeq"))); + prsnlPortletCreateVO.setUserId(userId); + // Body Setting Start --------------------------------- - bodyMap.put("insPrnslIds" , commandMap.get("insPrnslIds")); - bodyMap.put("userId", userId); - bodyMap.put("prsnlPortletCreateVO", ConvertUtils.convertToMapAll(prsnlPortletCreateVO)); + // 2025.11.12 나혁제 불필요코딩 삭제 + // bodyMap.put("insPrnslIds" , commandMap.get("insPrnslIds") ); + // bodyMap.put("insPrnslSeq" , commandMap.get("insPrnslSeq") ); // 2025.11.12 나혁제 포틀릿 순서 추가 + // bodyMap.put("userId" , userId); + + bodyMap.put("prsnlPortletCreateVO", ConvertUtils.convertToMapAll(prsnlPortletCreateVO)); // Body Setting End --------------------------------- Map returnMap = restApiCallUtil.RestApiCall(bodyMap, "/potl/insertUserPortlet.do"); + log.info("<<<<<<<<<<<<<<< /potl/insertUserPortlet.do >>>>>>>>>>>>>>>"); ModelAndView mav = new ModelAndView("jsonView"); @@ -651,7 +668,7 @@ public class PortletManageController { // Body Setting End --------------------------------- // RestApi Call Start --------------------------------- - returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getResouceTotalStat.do"); + returnMap = restApiCallUtil.RestApiCall(bodyMap, "/sta/getResouceTotalStat.do"); // RestApi Call End --------------------------------- // Return Data Setting Start -------------------------- @@ -660,6 +677,10 @@ public class PortletManageController { String potlId=(String) commandMap.get("prsnlId"); + + JSONArray jsonArr = ConvertUtils.getJsonFromList(resultList); + + model.addAttribute("resultJson", jsonArr.toString()); model.addAttribute("resultList", resultList); model.addAttribute("potlId", potlId); model.addAttribute("potlWidth" , potlWidth); @@ -669,6 +690,179 @@ public class PortletManageController { return "/itms/pot/MyResouceTotalStat"; } + + /** + * SR 현황 통계 포틀릿 + * @author urp 인프라본부 나혁제 + * 작성일 : 2025.11.11 + */ + @RequestMapping(value = "/potl/getIncidentStat.do") + public String getIncidentStat( HttpServletRequest request + , @RequestParam Map commandMap + , ModelMap model) throws Exception + { + log.info(">>>>>>>>>>>>>>> /potl/getIncidentStat.do <<<<<<<<<<<<<<<"); + + PrsnlPortletManageVO prsnlPortletManageVO = new PrsnlPortletManageVO(); + + prsnlPortletManageVO.setPrsnlId((String) commandMap.get("prsnlId")); + + // Body Setting Start --------------------------------- + Map bodyMap2 = ConvertUtils.convertToMapAll(prsnlPortletManageVO); + // Body Setting End --------------------------------- + // RestApi Call Start --------------------------------- + Map returnMap2 = restApiCallUtil.RestApiCall(bodyMap2, "/potl/selectPotlSize.do"); + // RestApi Call End --------------------------------- + + // Return Data Setting Start -------------------------- + Map resultList2 = (Map)returnMap2.get("resultList"); + // Return Data Setting End -------------------------- + + int potlWidth= (int) resultList2.get("portletWidth"); + int potlHeight= (int) resultList2.get("portletHeight"); + + String potlId=(String) commandMap.get("prsnlId"); + + model.addAttribute("potlId", potlId); + model.addAttribute("potlWidth" , potlWidth); + model.addAttribute("potlHeight", potlHeight); + + model.addAttribute("dtCurMonth" , CommonUtil.getKST("yyyy-MM")); // 조회일시 + + log.info("<<<<<<<<<<<<<<< /potl/getIncidentStat.do >>>>>>>>>>>>>>>"); + + return "/itms/pot/MyIncidentStat"; + } + + /** + * 월간 SR 현황 통계 조회 + * @author urp 인프라본부 나혁제 + * 작성일 : 2025.11.13 + */ + @ResponseBody + @RequestMapping(value="/potl/getIncidentMonStatus.do") + public LinkedHashMap getIncidentMonStatus( @RequestBody LinkedHashMap requestMap + , HttpServletRequest request + , HttpServletResponse response ) throws Exception + { + log.info(">>>>>>>>>>>>>>> /potl/getIncidentMonStatus.do <<<<<<<<<<<<<<<"); + + // api in/out map 정의 + Map bodyMap = new LinkedHashMap(); + Map returnMap = new LinkedHashMap(); + + // return 처리 + LinkedHashMap resBody = new LinkedHashMap(); // Response Map + + // Body Setting Start --------------------------------- + bodyMap.put("strSearchMon" , (String)requestMap.get("strSearchMon")); + // Body Setting End --------------------------------- + + // RestApi Call Start --------------------------------- + returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getIncidentMonStatus.do"); + // RestApi Call End --------------------------------- + + // Return Data Setting Start -------------------------- + List> resultList = (List>)returnMap.get("resultList"); + // Return Data Setting End -------------------------- + + JSONArray jsonArr = ConvertUtils.getJsonFromList(resultList); + + log.info("jsonArr [{}]", jsonArr.toString()); + + // resBody.put("resultList" , jsonArr.toString() ); + resBody.put("resultList" , resultList ); + + + log.info("<<<<<<<<<<<<<<< /potl/getIncidentMonStatus.do >>>>>>>>>>>>>>>"); + + return resBody; + } + + /** + * 월간 보고서 현황 통계 포틀릿 + * @author urp 인프라본부 나혁제 + * 작성일 : 2025.11.14 + */ + @RequestMapping(value = "/potl/getReportStat.do") + public String getReportStat( HttpServletRequest request + , @RequestParam Map commandMap + , ModelMap model) throws Exception + { + log.info(">>>>>>>>>>>>>>> /potl/getReportStat.do <<<<<<<<<<<<<<<"); + + PrsnlPortletManageVO prsnlPortletManageVO = new PrsnlPortletManageVO(); + + prsnlPortletManageVO.setPrsnlId((String) commandMap.get("prsnlId")); + + // Body Setting Start --------------------------------- + Map bodyMap2 = ConvertUtils.convertToMapAll(prsnlPortletManageVO); + // Body Setting End --------------------------------- + // RestApi Call Start --------------------------------- + Map returnMap2 = restApiCallUtil.RestApiCall(bodyMap2, "/potl/selectPotlSize.do"); + // RestApi Call End --------------------------------- + + // Return Data Setting Start -------------------------- + Map resultList2 = (Map)returnMap2.get("resultList"); + // Return Data Setting End -------------------------- + + int potlWidth= (int) resultList2.get("portletWidth"); + int potlHeight= (int) resultList2.get("portletHeight"); + + String potlId=(String) commandMap.get("prsnlId"); + + model.addAttribute("potlId", potlId); + model.addAttribute("potlWidth" , potlWidth); + model.addAttribute("potlHeight", potlHeight); + + model.addAttribute("dtCurMonth" , CommonUtil.getKST("yyyy-MM")); // 조회일시 + + log.info("<<<<<<<<<<<<<<< /potl/getReportStat.do >>>>>>>>>>>>>>>"); + + return "/itms/pot/MyReportStat"; + } + + /** + * 월간 보고서 현황 통계 조회 + * @author urp 인프라본부 나혁제 + * 작성일 : 2025.11.14 + */ + @ResponseBody + @RequestMapping(value="/potl/getReportMonStatus.do") + public LinkedHashMap getReportMonStatus( @RequestBody LinkedHashMap requestMap + , HttpServletRequest request + , HttpServletResponse response ) throws Exception + { + log.info(">>>>>>>>>>>>>>> /potl/getReportMonStatus.do <<<<<<<<<<<<<<<"); + + // api in/out map 정의 + Map bodyMap = new LinkedHashMap(); + Map returnMap = new LinkedHashMap(); + + // return 처리 + LinkedHashMap resBody = new LinkedHashMap(); // Response Map + + // Body Setting Start --------------------------------- + bodyMap.put("strSearchMon" , (String)requestMap.get("strSearchMon")); + // Body Setting End --------------------------------- + + // RestApi Call Start --------------------------------- + returnMap = restApiCallUtil.RestApiCall(bodyMap, "/srm/getReportMonStatus.do"); + // RestApi Call End --------------------------------- + + // Return Data Setting Start -------------------------- + List> resultList = (List>)returnMap.get("resultList"); + // Return Data Setting End -------------------------- + + resBody.put("resultList" , resultList ); + + log.info("<<<<<<<<<<<<<<< /potl/getReportMonStatus.do >>>>>>>>>>>>>>>"); + + return resBody; + } + + + diff --git a/src/main/java/com/urpsys/itmsfront/rem/domain/AdminServiceVo.java b/src/main/java/com/urpsys/itmsfront/rem/domain/AdminServiceVo.java index b873cef6..7660f1e9 100644 --- a/src/main/java/com/urpsys/itmsfront/rem/domain/AdminServiceVo.java +++ b/src/main/java/com/urpsys/itmsfront/rem/domain/AdminServiceVo.java @@ -26,12 +26,13 @@ public class AdminServiceVo */ private static final long serialVersionUID = 1L; - private String inServiceCode; - private String vcServiceName; - private String txServiceDesc; - private String inChargeUser; - private String vcChargeUser; - private String txDefaultForm; + private String inServiceCode ; + private String vcServiceName ; + private String txServiceDesc ; + private String inChargeUser ; + private String vcChargeUser ; + private String txDefaultForm ; + private String inSortSn ; // 2025.11.24 나혁제 추가 public String getInServiceCode() { return inServiceCode; @@ -69,6 +70,14 @@ public class AdminServiceVo public void setTxDefaultForm(String txDefaultForm) { this.txDefaultForm = txDefaultForm; } + public String getInSortSn() { + return inSortSn; + } + public void setInSortSn(String inSortSn) { + this.inSortSn = inSortSn; + } + + diff --git a/src/main/java/com/urpsys/itmsfront/srm/controller/ReportCheckController.java b/src/main/java/com/urpsys/itmsfront/srm/controller/ReportCheckController.java index 94da6dc1..9e7c55d9 100644 --- a/src/main/java/com/urpsys/itmsfront/srm/controller/ReportCheckController.java +++ b/src/main/java/com/urpsys/itmsfront/srm/controller/ReportCheckController.java @@ -121,6 +121,14 @@ public class ReportCheckController model.addAttribute("resultList" , resultList); model.addAttribute("paginationInfo" , paginationInfo); model.addAttribute("message" , egovMessageSource.getMessage("success.common.select")); + + // 2025.11.24 나혁제 그룹정보가 없는경우 메세지 처리 + TokenInfo tokenInfo = CommonUtil.getTokenInfo(); + if(tokenInfo.getStrGRP_ID() == null || tokenInfo.getStrGRP_ID().equals("")) + { + model.addAttribute("error_msg", "그룹지정이 안되어 있습니다. 시스템관리자에게 연락하여 그룹지정을 해주세요."); + } + log.info("<<<<<<<<<<<<<<< /srm/searchReportCheck.do >>>>>>>>>>>>>>>"); @@ -158,6 +166,14 @@ public class ReportCheckController // 결과값 추출 Start --------------------------------- Map resultReportCheck = (Map)returnMap.get("resultReportCheck"); + + // 2025.11.20 나혁제 기본정보가 없는경우 목록 화면으로 이동 + if(resultReportCheck == null) + { + model.addAttribute("error_msg", "기본정보가 삭제되었습니다."); + return "forward:/srm/searchReportCheck.do"; + } + List> resultSharings = (List>)returnMap.get("resultSharings"); List> resultAssets = (List>)returnMap.get("resultAssets"); List> resultApprovals = (List>)returnMap.get("resultApprovals"); @@ -877,6 +893,7 @@ public class ReportCheckController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); bodyMap.put("inReportSeq" , CommonUtil.getData(request, "inReportSeq" ) ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.17 나혁제 만족도 추가 bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- @@ -941,6 +958,7 @@ public class ReportCheckController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.17 나혁제 만족도 추가 bodyMap.put("inReportSeq" , CommonUtil.getData(request, "inReportSeq" ) ); bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- diff --git a/src/main/java/com/urpsys/itmsfront/srm/controller/ReportErrorController.java b/src/main/java/com/urpsys/itmsfront/srm/controller/ReportErrorController.java index fa18dfb6..85459b00 100644 --- a/src/main/java/com/urpsys/itmsfront/srm/controller/ReportErrorController.java +++ b/src/main/java/com/urpsys/itmsfront/srm/controller/ReportErrorController.java @@ -157,6 +157,14 @@ public class ReportErrorController // 결과값 추출 Start --------------------------------- Map resultReportError = (Map)returnMap.get("resultReportError"); + + // 2025.11.20 나혁제 기본정보가 없는경우 목록 화면으로 이동 + if(resultReportError == null) + { + model.addAttribute("error_msg", "기본정보가 삭제되었습니다."); + return "forward:/srm/searchReportError.do"; + } + List> resultSharings = (List>)returnMap.get("resultSharings"); List> resultAssets = (List>)returnMap.get("resultAssets"); List> resultApprovals = (List>)returnMap.get("resultApprovals"); @@ -870,6 +878,7 @@ public class ReportErrorController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); bodyMap.put("inReportSeq" , CommonUtil.getData(request, "inReportSeq" ) ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.17 나혁제 만족도 추가 bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- @@ -936,6 +945,7 @@ public class ReportErrorController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); bodyMap.put("inReportSeq" , CommonUtil.getData(request, "inReportSeq" ) ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.17 나혁제 만족도 추가 bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- diff --git a/src/main/java/com/urpsys/itmsfront/srm/controller/ReportIssueController.java b/src/main/java/com/urpsys/itmsfront/srm/controller/ReportIssueController.java index 5f28ae25..7b0f543f 100644 --- a/src/main/java/com/urpsys/itmsfront/srm/controller/ReportIssueController.java +++ b/src/main/java/com/urpsys/itmsfront/srm/controller/ReportIssueController.java @@ -157,6 +157,14 @@ public class ReportIssueController // 결과값 추출 Start --------------------------------- Map resultReportIssue = (Map)returnMap.get("resultReportIssue"); + + // 2025.11.20 나혁제 기본정보가 없는경우 목록 화면으로 이동 + if(resultReportIssue == null) + { + model.addAttribute("error_msg", "기본정보가 삭제되었습니다."); + return "forward:/srm/searchReportIssue.do"; + } + List> resultSharings = (List>)returnMap.get("resultSharings"); List> resultAssets = (List>)returnMap.get("resultAssets"); List> resultApprovals = (List>)returnMap.get("resultApprovals"); @@ -870,6 +878,7 @@ public class ReportIssueController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.17 나혁제 만족도 추가 bodyMap.put("inReportSeq" , CommonUtil.getData(request, "inReportSeq" ) ); bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- @@ -935,6 +944,7 @@ public class ReportIssueController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.17 나혁제 만족도 추가 bodyMap.put("inReportSeq" , CommonUtil.getData(request, "inReportSeq" ) ); bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- diff --git a/src/main/java/com/urpsys/itmsfront/srm/controller/ReportOtherController.java b/src/main/java/com/urpsys/itmsfront/srm/controller/ReportOtherController.java index f2356898..31bcc5a7 100644 --- a/src/main/java/com/urpsys/itmsfront/srm/controller/ReportOtherController.java +++ b/src/main/java/com/urpsys/itmsfront/srm/controller/ReportOtherController.java @@ -76,9 +76,9 @@ public class ReportOtherController CommonService commonService; /** - * 이슈보고서 목록을 조회한다. + * 기타보고서 목록을 조회한다. * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @RequestMapping("/srm/searchReportOther.do") public String searchReportOther( @ModelAttribute("searchVO") ReportOtherListVo searchVO @@ -131,9 +131,9 @@ public class ReportOtherController } /** - * 이슈보고서 상세조회 화면으로 이동한다. + * 기타보고서 상세조회 화면으로 이동한다. * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @RequestMapping(value = "/srm/getReportWithBodyOther.do") public String getReportWithBodyOther( @ModelAttribute("ReportOtherListVo") ReportOtherListVo reportOtherListVo @@ -160,6 +160,12 @@ public class ReportOtherController // 결과값 추출 Start --------------------------------- Map resultReportOther = (Map)returnMap.get("resultReportOther"); + // 2025.11.20 나혁제 기본정보가 없는경우 목록 화면으로 이동 + if(resultReportOther == null) + { + model.addAttribute("error_msg", "기본정보가 삭제되었습니다."); + return "forward:/srm/searchReportOther.do"; + } List> resultSharings = (List>)returnMap.get("resultSharings"); List> resultAssets = (List>)returnMap.get("resultAssets"); List> resultApprovals = (List>)returnMap.get("resultApprovals"); @@ -191,16 +197,15 @@ public class ReportOtherController model.addAttribute("resultAssets" , resultAssets ); // List model.addAttribute("resultApprovals" , resultApprovals ); // List - log.info("<<<<<<<<<<<<<<< /srm/getReportWithBodyOther.do >>>>>>>>>>>>>>>"); return "uritms-tiles2/srm/ReportOtherDetail"; } /** - * 이슈보고서 인쇄 화면으로 이동한다. + * 기타보고서 인쇄 화면으로 이동한다. * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @RequestMapping(value = "/srm/getReportWithBodyOtherPrint.do") public String getReportWithBodyOtherPrint( @ModelAttribute("ReportOtherListVo") ReportOtherListVo reportOtherListVo @@ -410,9 +415,9 @@ public class ReportOtherController } /** - * 이슈보고서 등록 처리를 한다. + * 기타보고서 등록 처리를 한다. * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @ResponseBody @RequestMapping(value="/srm/addReportOther.do") @@ -582,9 +587,9 @@ public class ReportOtherController } /** - * 이슈보고서 수정 처리를 한다. + * 기타보고서 수정 처리를 한다. * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @ResponseBody @RequestMapping(value="/srm/updateReportOther.do") @@ -770,9 +775,9 @@ public class ReportOtherController } /** - * 이슈보고서 삭제 처리를 한다. + * 기타보고서 삭제 처리를 한다. * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @ResponseBody @RequestMapping(value="/srm/deleteReportOther.do") @@ -806,9 +811,9 @@ public class ReportOtherController } /** - * 이슈보고서 승인요청 처리를 한다. + * 기타보고서 승인요청 처리를 한다. * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @ResponseBody @RequestMapping(value="/srm/procApprovalReportOther.do") @@ -858,9 +863,9 @@ public class ReportOtherController } /** - * 이슈보고서 승인 처리를 한다. + * 기타보고서 승인 처리를 한다. * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @ResponseBody @RequestMapping(value="/srm/approvalReportOther.do") @@ -881,6 +886,7 @@ public class ReportOtherController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); bodyMap.put("inReportSeq" , CommonUtil.getData(request, "inReportSeq" ) ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.20 나혁제 만족도 추가 bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- @@ -923,9 +929,9 @@ public class ReportOtherController } /** - * 이슈보고서 반려 처리를 한다. + * 기타보고서 반려 처리를 한다. * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @ResponseBody @RequestMapping(value="/srm/rejectReportOther.do") @@ -945,6 +951,7 @@ public class ReportOtherController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.17 나혁제 만족도 추가 bodyMap.put("inReportSeq" , CommonUtil.getData(request, "inReportSeq" ) ); bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- @@ -981,7 +988,7 @@ public class ReportOtherController /** * 서비스 정보 결재라인 조회 * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @ResponseBody @RequestMapping(value = "/srm/getSvcApprovalListOther.do") @@ -1022,7 +1029,7 @@ public class ReportOtherController /** * 보고서 양식 조회 * @author urp 인프라본부 나혁제 - * 작성일 : 2025.02.26 + * 작성일 : 2025.10.15 */ @ResponseBody @RequestMapping(value = "/srm/getReportFormOther.do") diff --git a/src/main/java/com/urpsys/itmsfront/srm/controller/SvcDeskController.java b/src/main/java/com/urpsys/itmsfront/srm/controller/SvcDeskController.java index 406934d2..13656da4 100644 --- a/src/main/java/com/urpsys/itmsfront/srm/controller/SvcDeskController.java +++ b/src/main/java/com/urpsys/itmsfront/srm/controller/SvcDeskController.java @@ -16,6 +16,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @@ -80,6 +81,7 @@ public class SvcDeskController * @author urp 인프라본부 나혁제 * 작성일 : 2025.02.08 */ + // @PostMapping("/srm/searchIncident.do") @RequestMapping("/srm/searchIncident.do") public String searchIncident( @ModelAttribute("searchVO") SvcDeskListVo searchVO , HttpServletRequest request @@ -289,7 +291,8 @@ public class SvcDeskController * @author urp 인프라본부 나혁제 * 작성일 : 2025.02.13 */ - @RequestMapping(value = "/srm/insertViewIncident.do") + // @RequestMapping(value = "/srm/insertViewIncident.do") + @PostMapping(value = "/srm/insertViewIncident.do") public String insertViewIncident( @ModelAttribute("searchVO") SvcDeskListVo searchVO , HttpServletRequest request , HttpServletResponse response @@ -331,7 +334,9 @@ public class SvcDeskController * @author urp 인프라본부 나혁제 * 작성일 : 2025.02.13 */ - @RequestMapping(value = "/srm/updateViewIncident.do") + // 2025.11.19 나혁제 호출방식 변경 + // @RequestMapping(value = "/srm/updateViewIncident.do") + @PostMapping(value = "/srm/updateViewIncident.do") public String updateViewIncident( @ModelAttribute("SvcDeskListVo") SvcDeskListVo svcDeskListVo , @ModelAttribute("searchVO") SvcDeskListVo searchVO , HttpServletRequest request @@ -899,6 +904,7 @@ public class SvcDeskController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); bodyMap.put("inIncidentSeq" , CommonUtil.getData(request, "inIncidentSeq" ) ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.17 나혁제 만족도 추가 bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- @@ -960,6 +966,7 @@ public class SvcDeskController // Body Setting Start --------------------------------- bodyMap.put("txComment" , CommonUtil.getData(request, "reqAppRejTxComment") ); bodyMap.put("inIncidentSeq" , CommonUtil.getData(request, "inIncidentSeq" ) ); + bodyMap.put("stsfdgCd" , CommonUtil.getData(request, "stsfdgCd" ) ); // 2025.11.17 나혁제 만족도 추가 bodyMap.put("inUserSeq" , tokenInfo.getUniqId() ); // Body Setting End --------------------------------- diff --git a/src/main/java/com/urpsys/itmsfront/sys/controller/DeptManageController.java b/src/main/java/com/urpsys/itmsfront/sys/controller/DeptManageController.java index 35d50454..39b23955 100644 --- a/src/main/java/com/urpsys/itmsfront/sys/controller/DeptManageController.java +++ b/src/main/java/com/urpsys/itmsfront/sys/controller/DeptManageController.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index 86e20bc6..2044471f 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -6,6 +6,7 @@ timeout: 120m cookie: name: BASEJSP_JSESSIONID + # ssl: # enabled: true #Spring Security를 사용하는 경우 HTTPS 요청만 허용하도록 해주는 설정 # key-store-type: PKCS12 diff --git a/src/main/resources/static/css/common.css b/src/main/resources/static/css/common.css index 5aef2f13..3f2ac2e3 100644 --- a/src/main/resources/static/css/common.css +++ b/src/main/resources/static/css/common.css @@ -54,7 +54,10 @@ select[disabled="disabled"] {background:#ebebeb;color:#959595;} /* form 요소 기본 스타일 지정 */ input {height:36px; margin:1px; padding:0px 8px;border:solid 1px #ccc;line-height:36px; font-size:14px; vertical-align:middle; border-radius: 4px;} +/* 2025.11.19 나혁제 높이변경 input[type="text"] {height:36px; margin:1px; padding:0px 8px;border:solid 1px #ccc;line-height:36px; font-size:14px; vertical-align:middle; border-radius: 4px;} +*/ +input[type="text"] {height:30px; margin:1px; padding:0px 8px;border:solid 1px #ccc;line-height:36px; font-size:14px; vertical-align:middle; border-radius: 4px;} input[type="submit"] {height:28px;line-height:28px;} input[type="radio"],input[type="checkbox"] {width:25px ()25px;height:25px ()25px;} textarea {min-height:80px;padding:3px 8px;border:solid 1px #ccc;line-height:25px;font-size: 14px;} diff --git a/src/main/resources/static/css/layout.css b/src/main/resources/static/css/layout.css index a2624e8b..a2ce6650 100644 --- a/src/main/resources/static/css/layout.css +++ b/src/main/resources/static/css/layout.css @@ -332,9 +332,14 @@ button[class^='btn-']:hover {text-decoration:none;} .bbs_view {position:relative; width:100%; border-top: 1px solid #334263;margin-bottom: 30px;} .tbl_form {width:100%; border:0; background-color: #fff; border-bottom: 0; table-layout:fixed; border-collapse: separate; margin-bottom:20px;} .tbl_form th, .tbl_form td {vertical-align: middle;} +/* 2025.11.19 나혁제 높이변경 38=>32 .tbl_form th {padding:6px 10px; height: 38px; text-align:center; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; background: #f3f5fd; font-size: 13.5px; font-weight: 500; color: #112469; letter-spacing:-0.5px;} -.tbl_form th.non_bg {background: #fff; } .tbl_form td {padding:6px 10px; height: 38px; text-align:left; font-size:14px; color:#333; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc;} +*/ +.tbl_form th {padding:6px 10px; height: 32px; text-align:center; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; background: #f3f5fd; font-size: 13.5px; font-weight: 500; color: #112469; letter-spacing:-0.5px;} +.tbl_form td {padding:6px 10px; height: 32px; text-align:left; font-size:14px; color:#333; border-right: 1px solid #ccc; border-bottom: 1px solid #ccc;} + +.tbl_form th.non_bg {background: #fff; } .tbl_form thead th:last-child, .tbl_form th:last-child, .tbl_form td:last-child {border-right: 0;} .tbl_form thead th {padding:2px 10px 2px 10px; height: 34px; text-align:center; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; background: #f3f5fd; font-size: 13.5px; font-weight: 500; color: #112469; letter-spacing:-0.5px;} .tbl_form td label {vertical-align:top;padding-right:10px;} @@ -567,10 +572,18 @@ td label.txt {margin: 0 5px;} .hidden {font-size: 0; width:0 !important; height: 0; line-height: 0; overflow: hidden; visibility: hidden; width: 0; position:absolute;} /* index */ +/* 2025.11.14 나혁제 변경*/ +.main_img {width: 100%; height: 140px; max-width: 1400px; margin: 0 auto 10px; position: relative; display: block; box-sizing: border-box; padding:30px 20px 30px 90px;border-radius: 38px 0 0 0; background: #3842a9 url('../images/main/main_img.png') no-repeat 93% 50%;} +.main_img:after {content:''; display:block; position:absolute; bottom:0; left:0; width:78px; height:137px; background:url('../images/main/main_img_left.png') no-repeat 0 100%;} +.main_img .l_txt {display:block;padding-top:50px; font-size: 45px; font-weight:700; color: #fff; line-height:1.8em;padding-left:50px;} +.main_img .m_txt {display:block;width: 100%; font-size: 22px; font-weight:400; color: #bfdfed; padding-left:50px;} + +/* .main_img {width: 100%; height: 280px; max-width: 1400px; margin: 0 auto 40px; position: relative; display: block; box-sizing: border-box; padding:30px 20px 30px 90px;border-radius: 38px 0 0 0; background: #3842a9 url('../images/main/main_img.png') no-repeat 93% 100%;} .main_img:after {content:''; display:block; position:absolute; bottom:0; left:0; width:160px; height:280px; background:url('../images/main/main_img_left.png') no-repeat 0 0;} .main_img .l_txt {display:block;padding-top:50px; font-size: 45px; font-weight:700; color: #fff; line-height:1.8em;padding-left:50px;} .main_img .m_txt {display:block;width: 100%; font-size: 22px; font-weight:400; color: #bfdfed; padding-left:50px;} +*/ /* 오늘의 할일, 업무공지 */ .week_news_wrap {padding:0;width:100%;max-width: 1400px;margin: 0 auto; box-sizing: border-box;} diff --git a/src/main/resources/static/images/main/main_img.png b/src/main/resources/static/images/main/main_img.png index 5f00d4c7..81043d3a 100644 Binary files a/src/main/resources/static/images/main/main_img.png and b/src/main/resources/static/images/main/main_img.png differ diff --git a/src/main/resources/static/images/main/main_img.png.20251114 b/src/main/resources/static/images/main/main_img.png.20251114 new file mode 100644 index 00000000..5f00d4c7 Binary files /dev/null and b/src/main/resources/static/images/main/main_img.png.20251114 differ diff --git a/src/main/resources/static/images/main/main_img_left.png b/src/main/resources/static/images/main/main_img_left.png index a156a375..a9d0ab59 100644 Binary files a/src/main/resources/static/images/main/main_img_left.png and b/src/main/resources/static/images/main/main_img_left.png differ diff --git a/src/main/resources/static/images/main/main_img_left.png.20251114 b/src/main/resources/static/images/main/main_img_left.png.20251114 new file mode 100644 index 00000000..a156a375 Binary files /dev/null and b/src/main/resources/static/images/main/main_img_left.png.20251114 differ diff --git a/src/main/resources/static/js/amcharts5/CHANGELOG.md b/src/main/resources/static/js/amcharts5/CHANGELOG.md new file mode 100644 index 00000000..3c384c48 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/CHANGELOG.md @@ -0,0 +1,3026 @@ +# amCharts 5 Changelog + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/). + +Please note, that this project, while following numbering syntax, it DOES NOT +adhere to [Semantic Versioning](http://semver.org/spec/v2.0.0.html) rules. + +## [5.14.4] - 2025-11-06 + +### Added +- Added `ariaLabel` setting to `ExportingMenu`. +- Added `autoDispose` (default: `false`) property to `Registry`. Set it to `true` to automatically dispose a `Root` element if it exists in the target container when a new `Root` element is being created. +- Added `exculdeFromAggregate` setting to `XYSeries`, mainly for performance. Use it to remove some data fields from calculation of their aggregate values. On a `StockChart` the setting is set to `["valueX"]`, since X values are not usually used in aggregates, but will save some processing time on large data sets. + +### Changed +- `date` tag added to `DateAxis`. +- `gapless` tag added to `GaplessDateAxis`. +- `turboMode` is now set to `true` on all `ColumnSeries`/`CandlestickSeries` by default on all `StockChart` indicator series. + +### Fixed +- Performance improvements. +- `zoomable` set on axis to false was ignored by stock chart. +- Adding an arrow or icon to `StockChart` would dispatch a `"drawingadded"` event with wrong `drawingId`. +- Focus elements in a scrollable container were sometimes being highlighted incorrectly. +- `Container` method `scrollToChild()` was not working properly. +- `DateRangeSelector` was displaying selectable days incorrectly whith some of the locales. + + +## [5.14.3] - 2025-10-13 + +### Fixed +- If an axis range was created on `CategoryAxis` and then data was changed which wouldn't have these categories anymore, elements of the axis range remained visible on the chart. +- Hovering over `Gantt` category labels caused background of the category item to unhover. +- `am5.type.toNumber()` function would go into dead loop if the parameter contained multiple dots or minus symbols. +- Stock chart's drawings were snapped to initial position if data update happened while dragging the drawing. +- Measure drawing tool in `StockChart` had colors inverted (red for positive, green for negative). +- Zooming an `XYChart` with mouse wheel really fast could result chart to be zoomed to a state where user could not zoom-out anymore. + + +## [5.14.2] - 2025-10-01 + +### Changed +- Minor tweaks to Gantt icons. +- The column for zero-length tasks on Gantt is now limited in size by default. + +### Fixed +- Pressing Shift-TAB when the first element of a series was focused and `focusableGroup` is set, would jump back two series back instead of one. + + +## [5.14.1] - 2025-09-30 + +### Added +- `editButton` added to `Gantt` chart. The button is hidden by default. Unhide to enable users toggle between edit and read-only modes. [More info](https://www.amcharts.com/docs/v5/charts/gantt/#Control_buttons). + +### Fixed +- Links were active in read-only mode (`editable: false`) of `Gantt` chart. +- Too many minor grid intervals could be drawn on a `DateAxis` if grid interval was `"year"`. + + +## [5.14.0] - 2025-09-30 + +### Added +- New chart type: `Gantt`. [More info](https://www.amcharts.com/docs/v5/charts/gantt/). +- Two new settings added to `HeatLegend`: `startOpacity` (default: `1`) and `endOpacity` (default: `1`). +- New plugin: `colorPicker`. +- New method to add debounced events: `events.onDebounced()`. [More info](https://www.amcharts.com/docs/v5/concepts/events/#Debounced_events). +- New setting added to `ColumnSeries`: `turboMode` (default: `false`). If set to `true`, the series will render columns directly on canvas, speeding up column-heavy charts. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/series/column-series/#Turbo_mode). +- New setting added to `DateAxis`: `skipFirstMinor` (default: `true`). If set to `true`, the axis will skip the first minor grid line and label. +- New setting added to `DateAxis`: `weekLabelLocation` (default: `true`). A relative location of weekly labels. +- New setting added to `Axis`: `minorAxisFillsEnabled` (default: `true`). +- New setting added to `Axis`: `zoomOut` (default: `true`). If set to `false`, the axis will not be zoomed out when the chart's zoom out button is pressed, and vice versa when axis is zoomed, it will not trigger the button to appear. +- New setting added to `LinePattern`: `angle` (default: `0`). Use `angle` instead of `rotation` for better perfomance and smaller pattern size. +- New accessor `systemTooltip` added to `Root`. Use this instance of `Tooltip` for generic tooltip needs. + +### Fixed +- If an axis range was added to `CategoryAxis` with catgegories not present in data, it was displayed over whole plot area. +- Line and column series were flickering a bit while scrolling without Animated theme. +- If `minBulletDistance` was set on a series with data gaps, bullets could be hidden if zoomed to a position where start or end item was on a missing item. +- When using valueYShow: `valueYChangeSelectionPercent`, line series could show a drawing bug under certain zoom conditions. +- Columns were drawn overlapped if `baseInterval` of `DateAxis` was set to 8 months. +- `CurveCursor` vertical position was inverted before. +- `index.js` in the compiled script version included `xy.js` stuff. It's fixed now. +- `zoomToValues()` method of `ValueAxis` was not working properly with auto-zoom enabled. +- `oversizedBehavior` was being ignored on composite bullet of the `ClusteredPointSeries`. + + +## [5.13.6] - 2025-08-27 + +### Fixed +- In some cases, `DurationFormatter` could display incorrect number of days. +- The selector tool in `StockChart`'s drawing mode was not working properly since `5.13.4`. + + +## [5.13.5] - 2025-08-05 + +### Fixed +- Labels with RTL direction and in-line formatting tags could be distorted. +- Dynamically changing `editOn` setting on an `EditableLabel` was not working. +- Volume indicator was not working properly with data grouping turned on. +- Vertically stacked multiple `ValueAxis` could crash the chart if `ChartCursor` behavior was set `zoomXY` and selection of a zoom included both axes. +- Points were not grouped until zoom level changed of a `ClusteredPointSeries` of a `MapChart` if data was set dynamically. + + +## [5.13.4] - 2025-07-23 + +### Added +- `contentWidth()` and `contentHeight()` methods added to Container. + +### Changed +- Removed stroke color selector from Fibonacci drawing tool. + +### Fixed +- Logarithmic `ValueAxis` was showing grid at wrong intervals in some cases. +- HTML labels were not being displayed if `autoResize` was set to `false` on a `Root`. +- Resetting `Label`'s `oevrsizedBehavior` to `"none"` would not reset the label visibility/scale if it was already affected via previous setting like `"hide"` or `"fit"`. +- Fixed 100% stacked area chart with all values of the same date/category equal to 0. +- `drawingSelectionEnabled` was being ignored if initially set on a `StockChart`. +- `GridLayout` used height of the highest cell for all other cells which went after it. +- Vertically stacked multiple `ValueAxis` could crash the chart if `ChartCursor` behavior was set `zoomXY`. + + +## [5.13.3] - 2025-06-07 + +### Fixed +- `drawingsUpdated` event was fired each time the chart was scrolled. + + +## [5.13.2] - 2025-06-06 + +### Added +- Event added to `SettingsModal`: `initstarted`. Use it to modify settings contents. [More info](https://www.amcharts.com/docs/v5/tutorials/modifying-series-indicator-settings-modal/). + +### Changed +- `StockChart`'s "Label" and "Callout" drawings now are draggable/selectable right after creation without the select tool. + +### Fixed +- Added `SuperTrend` to serializable class list. +- `StockChart`'s drawing selection rectangle sometimes remained visible when drawing mode was turned off. + + +## [5.13.1] - 2025-06-05 + +### Fixed +- Logarithmic `ValueAxis` was not showing grid at proper intervals in some cases (since `5.13.0`). + + +## [5.13.0] - 2025-06-05 + +### Added +- `exactLocationX` and `exactLocationY` added to `XYSeries`. If this is set to `true`, data items will ignore `locationX`/`locationY` setting but will place the data point at exact X/Y value. This will work only with `DateAxis`. If used on a `ColumnSeries`/`CandlestickSeries` it will affect its bullets only. +- `autoHidePanelControls` added to `StockChart`. +- `containStroke` added to `Rectangle`. If this is set to `true`, rectangle will be drawn in such a way that its stroke is contained within the rectangle's width and height. Useful if you have thicker `strokeWidth` for `ColumnSeries`. +- Super Trend indicator added to `StockChart`. +- `getFillGradientFromSprite` setting added to `Tooltip` (default: `false`). + +### Fixed +- Fixed unserialized drawings like doodles looking jagged (setitng `exactLocationX` to `true` by default on all drawings). +- Improved step calculation on a logarithmic `ValueAxis`. +- `Treemap` was not showing pointer cursor on active nodes. +- `IndicatorControl` no longer will insert a custom indicator created in its callback into `StockChart`'s indicator list if it was already inserted in the callback. + + +## [5.12.3] - 2025-05-30 + +### Added +- New setting on `DateRangeSelector`: `allowInput` (default: `true`). If set to `false`, date inputs will be disabled, but the dates will be selectable using arrow keys. +- `categoryToPosition()` method added to `CategoryAxis`. + +### Fixed +- With `strictMinMax` set to `true` the zoom out button was sometimes visible on initial chart load. +- Focusable bullets will no longer be focusable in legend's markers. +- After removing comaprison series with a separate `ValueAxis` from `StockChart` white space was not being removed. +- Changing stroke/fill on a `ColumnSeries` via `StockChart`'s settings modal was being ignored. + + +## [5.12.2] - 2025-05-09 + +### Fixed +- The tooltips on an `XYChart` would not get re-arranged if pointer was being moved moved slowly into chart area and stopped. +- Restored labels and callouts of a `StockChart` were initially dragable even when not in drawing mode. +- Resize tool was not hidden when exiting drawing mode on a `StockChart`. +- If data grouping on was enabled on a `DateAxis` and new data was set while the chart was being scrolled, it might show some ghost bullets in the plot area. + + +## [5.12.1] - 2025-04-14 + +### Fixed +- `SerpentineChart` could be displayed incorrectly if chart was very wide/tall and level count was small. +- `CurveChart` would not adjust all of its elements after resize. + + +## [5.12.0] - 2025-04-12 + +### Added +- Timeline chart type family added: `CurveChart`, `SerpentineChart`, `SpiralChart`. [More info](https://www.amcharts.com/docs/v5/charts/timeline/). + +### Changed +- Using `swap()` method on a `ListDispose` will not longer auto-dispose items being swapped, even if `autoDispose = true`. + +### Fixed +- `"drawingsupdated"` event of `StockChart` was being dispatched when drawing was selected. (wasn't exactly fixed in `5.11.3`) + + +## [5.11.3] - 2025-04-09 + +### Added +- A "text" field type support added to custom Indicator's `_editableSettings`. [More info](https://www.amcharts.com/docs/v5/tutorials/creating-custom-indicators-for-a-stock-chart/#Editable_settings). + +### Fixed +- `"frameended"` event would trigger indefinitely when a `Sprite` with `tooltipPosition: "pointer"` was being hovered, even if cursor was not moving. +- Changing series type on a `StockChart` would result in X-axis tooltip not to show date (since `5.11.2`). +- `"drawingsupdated"` event of `StockChart` was being dispatched when drawing was selected. + + +## [5.11.2] - 2025-03-21 + +### Added +- `strokeWidths` setting added to `SettingsModal`. +- `cornerRadiusTL`, `cornerRadiusTR`, `cornerRadiusBR`, `cornerRadiusBL` added to `FunnelSlice`. Use it to add rounded corner to funnel slices. + +### Changed +- Screen reader alerts were not being read out if the message was exact same text as the last one. +- All settings from `IAccessibilitySettings` have been moved to `ISpriteSettings`. + +### Fixed +- Fixed a prompt in Dutch (nl_NL) translation. +- A Horizontal Line drawing restored from serialized data was not visible until chart zoom. +- HTML content outside of a scrollable `Container` were still visible. +- `am5.type.toNumber()` could go into infinite loop with some non-numeric input values. +- Removing of an `XYSeries` from an `XYChart` with a `DateAxis` and data grouping enabled could cause newly added series to be wrongly grouped. + + +## [5.11.1] - 2025-02-25 + +### Added +- New setting `disableWeekDays` (array of numbers) in `DateRangeSelector`. E.g. set to `diasbleWeekDays: [0, 6]` to disable Sundays and Saturdays. + +### Fixed +- The value of a `Hierarchy` node with `toggleKey: "none"` would be reset to `"disabled"`, after data was appended to the node. +- `DurationFormatter` was not correctly rounding fractional numbers in some cases. +- `DateRangeSelector` was not correctly handling `firstDayOfWeek` value from locale. +- `XYCursor` lines were not focusable until cursor was shown for the first time. +- Setting `exclude` on a `MapSeries` would not re-enable previously excluded objects. +- Fixed issue with stacking of negative values. + + +## [5.11.0] - 2025-02-03 + +### Added +- New `Root` property: `entitiesById`. Contains all Entities belonging to this `Root` instance that have an `id` set. + +### Changed +- From now on, unique `id` for Entities will be enforced within Root scope, not global scope. +- `StockChart`'s indicators had axes tooltips and cursor horizontal line hardcoded with `forceHidden: true`. It was moved to a default theme, so now you can enable them using custom theme. + +### Fixed +- Overlapping interactive elements were ignoring `layer` setting. +- Improved handling of focusing of Series' elements. +- `toggleDrawing` of `StockChart` was not hiding/showing grips if called from outside until hovered over the chart. +- Changing stroke/fill drawing setting in `StockChart` drawing toolbar would update colors for existing Fibonacci drawings. + + +## [5.10.12] - 2025-01-23 + +### Fixed +- `useSelectionExtremes` (added in 5.10.11) was not working with vertical `ValueAxis`. +- In case `addChildData()` of a `Hierarchy` was used with `topLevel = 0`, newly added nodes were invisible. +- `DateFormatter` was not considering daylight savings of the timezone when formatting timezone offset related codes. +- If `Root` timezone was set and series were using hourly (or more granular) data, items could be placed incorrectly at the daylight-savings switch. + + +## [5.10.11] - 2025-01-13 + +### Added +- `useSelectionExtremes` added to `XYSeries` (default: `false`). If set to `true` series will use selection extremes when calculating min and max values of the axis scale. Useful for stacked series. + +### Changed +- Setting `fontSize` on an HTML `Label`, will now assume a "px" value instead of ignoring it altogether. +- Indicator names (both full and short) are now translatable via custom locales. + +### Fixed +- `DateRangeSelector` control on `StockChart` was not working correctly when `Root` had UTC enabled. +- In some cases, `Tooltip` HTML content would not get updated for series. + + +## [5.10.10] - 2024-12-30 + +### Fixed +- Fixed restoring serialized Heikin Ashi indicator. +- Heikin Ashi indicator formula fix. + + +## [5.10.9] - 2024-12-20 + +### Added +- Added way to determine if text label was autotruncated (`label.text._display.trunacted`). +- Heikin Ashi indicator added to `StockChart`. + +### Changed +- The following settings will carry over to `Label`'s HTML content if set: `fontFamily`, `fontSize`, `fontStyle`, `fontWeight`, `fontStyle`, `fontVariant`, `textDecoration`. +- When an `MapChart` is zoomed using mouse wheel it will no longer stop page scroll when its fully zoomed out. +- When arranging tooltips on an `XYChart`, will now pay attention to `tooltipContainerBounds.bottom` setting. + +### Fixed +- `ZoomableContainer` was not zooming out properly if `minZoomLevel` was `< 1`. +- `PicturePattern` was ignoring `colorOpacity` setting. +- `PicturePattern` with `fit: "pattern"` set would sometimes not show actual image. +- "Measure" drawing tool of `StockChart` was not including one volume bar value. +- If a timezone was set on a chart and browser's locale was set to some non-English language, weekly grid was shown incorrecly on a `DateAxis`. +- Changing `text` on a `Label` with `oversizedBehavior="fit"` would sometimes not revert to original scale even if the new text would fit into max width. + + +## [5.10.8] - 2024-11-21 + +### Added +- New setting `lineCap` (default `"butt"`) added to `Graphics`. Allows specifying how line ends should be drawn. Possible values: `"butt"` (default), `"round"`, `"square"`. +- New setting `clickAnnounceText` added to `Sprite`. If set will announce the text when focused element is triggered with a press of ENTER or SPACE. + +### Changed +- Pressing Shift-TAB while focus on non-first member of the focusable group will now jump to a previous group or focusable element, rather than current group's first element. +- When an `XYChart` is zoomed using mouse wheel it will no longer stop page scroll when its fully zoomed out or zoomed in. + +### Fixed +- HTML content was ignoring `dx`/`dy` position adjustment settings. +- Pressing the UP key was being ignored when navigating within a group of focusable objects. +- Last label of `GaplessDateAxis` was in wrong position when `baseInterval` was set to week and `minorGrid` was enabled. +- Setting data item's value to `null` (if previous was a valid number) did not remove the column of a `ColumnSeries`. +- The `maxWidth`/`maxHeight` recaculation of vertical labels was not correctly factoring in its padding. + + +## [5.10.7] - 2024-10-12 + +### Fixed +- In some cases disposing `Root` element could result in a "Template is disposed" error. + + +## [5.10.6] - 2024-10-11 + +### Added +- `hideDrawingGrips` setting (default: `false`) added to `StockChart`. If set to true, grips of drawings will be hidden when not in drawing mode. +- `toggleDrawing(enabled: boolean)` method added to `StockChart`. Toggles drawing mode on or off. +- `autoOpenSettings` setting (default: `true`) added to `Indicator`. If set to `false`, a settings modal will not pop up automatically when the indicator is added to chart via indicator control. + +### Changed +- On `StockChart` labels and icons are no longer draggable to avoid interfering with chart drag/zoom. +- Arrow position slightly changed in "Line Arrow" drawing tool on `StockChart`. Grip at the end of the arrow removed. +- Arrow tip size will not increased to reflect the line thickness of a "Line Arrow". +- "Volume Profile" indicator had its full name hardcoded for legend. It will now use its `shortName` (which is "Volume Profile", too, by default but can be changed to anything else). +- `Modal` content will now have its contents aligned to `start`, rather than `left`, to properly handle RTL direction. + +### Fixed +- "Line Arrow" drawing tool would not save its color when serialized. +- "Line Arrow" tip was not taking a color change. +- ES2025 examples involving `MapChart` were not correctly importing geodata. +- Using `clearDrawings()` was erroring if there was "Line Arrow" drawings added to `StockChart`. +- Rotated elements with HTML content were not being properly positioned in all cases. +- `scrollToChild` method of `Container` was not working properly. + + +## [5.10.5] - 2024-09-06 + +### Added +- `scrollToChild()` method added to `Container`. Scrolls the container to the target child element if the container is scrollable and the element is currently outside of view. +- New `StockChart` drawing tool added: "Line Arrow". + +### Changed +- When a selected drawing in a `StockChart` is inselected by clicking on a chart's plot area the new drawing will not be added anymore. + +### Fixed +- Keyboard-dragging of focusable elements was not working correctly in some cases. +- Sometimes label/callout drawing text was cut temporarily while editing them on `StockChart`. +- Editable labels/callouts would go into edit mode when unserialized. +- If auto-saving of drawings was enabled, editing text would not always save the latest version of the label/callout text. +- Dragging a `StockChart` drawing while other drawing was selected, would drag the selected drawing as well. + + +## [5.10.4] - 2024-08-30 + +### Changed +- Multiple clicks (or ENTER presses when focused) on an `showTooltipOn: "click"` elements will toggle tooltip, rather than keep it open. + +### Fixed +- Accessibility: A focusable element would display tooltip only once on ENTER press with NVDA reader. +- `"Horizontal Line"` and `"Horizontal Ray"` lines are now allow for longer overzoom / X-axis scope. +- Candles on a `GaplessDateAxis` could some time become too wide. + + +## [5.10.3] - 2024-08-23 + +### Fixed +- The chart would not allow overzooming using mouse wheel since `5.10.2`. It will now allow overzoom based on axis' `maxDeviation` setting. + + +## [5.10.2] - 2024-08-23 + +### Added +- `panSensitivity` added to `AxisRenderer` (default: `1`). +- `maxPanOut` added to `ZoomableContainer` (default: `0.4`). +- Method `addLine(tool, panel, point)` added `DrawingControl`. Allows adding line drawings via API. Supports (`"Horizontal Line"`, `"Horizontal Ray"`, `"Vertical Line"` tools). [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/drawing-control/#Adding_line_drawings). + +### Fixed +- Fast mouse wheel zooming of stock chart could cause browser to hang in some cases. +- `minBulletDistance` of a `XYSeries` was ignored when base axis was `CategoryAxis` and other axis was `DateAxis`. +- RTL labels with text-wrapping enabled were not being positioned properly. + + +## [5.10.1] - 2024-08-09 + +### Added +- `fillGradient` setting added to `Label`. + +### Changed +- Exporting a PDF will now check image size and will not scale it up to fit page size if it's smaller. It will still scale dowwn the image to fit in the page. + +### Fixed +- Memory leak with axis ranges on `LineSeries` fixed. +- `PieSeries` tick was not visible if pie had two equal slices. +- `root.nonce` was not being added to all dynamically-loaded stylesheets. +- A stack overflow could occur when auto-zooming a `ValueAxis` in some very rare cases. + + +## [5.10.0] - 2024-07-22 + +### Added +- A second parameter (`dataContext`) added to `Component`'s methods `pushDataItem` and `makeDataItem`, allowing to pass in a data context object related to the data item. +- New class `PatternSet` added. Allows serving patterns similarly to `ColorSet`. [More info](https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Pattern_sets). +- New setting `patterns` added to `Hierarchy`, `PercentSeries`, `Venn`, `SerialChart`, `FlowNodes`. [More info](https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Pattern_sets). +- New setting `fillPattern` added to `IFlowNodesDataItem`, `IHierarchyDataItem`, `IPercentSeriesDataItem`, `IVennDataItem`, `ISeriesSettings`. + +### Fixed +- `LinkedHierarchy` nodes were not clickable when children were added using `addChildData()` method. +- If there were no nodes at `topLevel` in `Hierarchy` chart, it would show nodes from upper levels. +- Not all event listeners were disposed when disposing a `ChartIndicator`. This could cause a memory leak. +- `Sprite`'s `hover()`/`unhover()` methods now check if the `Sprite` is not disposed. This fixes some potential errors when disposed items are being referenced. +- Adding in explicit d3 dependencies ([Issue 1567](https://github.com/amcharts/amcharts5/issues/1567)) +- `DurationFormatter` was not rounding fractional numbers properly in some cases. + + +## [5.9.13] - 2024-07-03 + +### Fixed +- If start and end values of a `HeatLegend` were the same, the tooltip was shown in the top/left corner of the chart. +- If a linked hierarchy had bullets on links, they remained visible when nodes and links were hidden. +- Zoom-out button could be visible initially with some specific setups. +- `ZoomableContainer` would not react to pans in some of its sections if its contents was panned outside the its bounds. + + +## [5.9.12] - 2024-06-12 + +### Changed +- `ClusteredPointSeries` now re-clusters points only when zoom level changes. This improves performance when paning/rotating the map. + +### Fixed +- `NumberFormatter` would incorrectly round numbers smaller than 0 due to floating point issue in some cases. +- An error could occur when enabling drawing mode if there were previously disposed chart indicators. +- Truncated or wrapped labels were not properly sizing underline and line-trhough decorations. +- While wheel-zooming bothg X and Y axes simultaneously, the chart could fully zoom out in some cases. + + +## [5.9.11] - 2024-05-30 + +### Added +- `clusterDelay` setting added to `ClusteredPointSeries`. Setting it to non-zero number will automatically debounce re-clustering of points, helping with performance when there are a lot of data items. + +### Changed +- `ZoomControl` buttons will now be automatically disabled whem max or min zoom level is reached. + +### Fixed +- "Zoom out" button was visible even the chart was not zoomed when `selectionStrictMinMax` was set to `true` (you still need to set `strictMinMax: true` for it to go away). +- `Venn` chart could produce JS error when slices were being hidden in rapid succession. +- Charts added to clustered point series bullets were not being rendered. + + +## [5.9.10] - 2024-05-23 + +### Fixed +- Serializing/saving ATR indicator was generating an error. +- Toggling a focused element with ENTER/SPACE will no longer trigger its hover. +- Reverting the empty canvas fix from `5.9.9` as Chrome seems to have fixed the issue. + + +## [5.9.9] - 2024-05-21 + +### Added +- "Average True Range" indicator added to `StockChart`. + +### Fixed +- Some recent versions of Chrome would sometimes clear canvas of a chart in an inactive tab after some time. +- Some events were not being disposed together with related object. +- Disposing an `XYChart` immediately after it was created would not dispose its `XYCursor` and related event handlers. +- `StockChart` method `unselectDrawings()` was not hiding resizer brackets. +- `SliceGrouper` would not update properly when series data was updated. + + +## [5.9.8] - 2024-05-10 + +### Added +- Two new settings for `Sprite` added: `ariaCurrent` (sets [`aria-current`](https://w3c.github.io/aria/#aria-current)) and `ariaSelected` (sets [`aria-selected`](https://w3c.github.io/aria/#aria-selected)). +- Two new methods for `MapPolygonSeries` added: `getPolygonByPoint()` and `getPolygonByGeoPoint()`. + +### Fixed +- Better positioning of `EditableLabel` when its `width` is set. +- `alwaysShow` setting of `XYCursor` was not working properly. + + +## [5.9.7] - 2024-05-07 + +### Fixed +- `ValueAxis` could go into infinite loop under the following conditions: `max` was set to a value which was smaller than a calculated minimum of the axis when `strictMinMax` set to `true`. + + +## [5.9.6] - 2024-05-07 + +### Added +- New `EditableLable` setting: `multiline` (default: `true`). If set to `false` will only allow label to be edited on a single line. +- `hsvToHsl()` and `hslToHsv()` color convertion functions added to `am5.utils` namespace. + +### Changed +- Accessibility: Both vertical and horizontal line elements of `XYCursor` now have their `role` set to `"slider"` by default. +- `EditableLabel` now supports `maxWidth` and `oversizedBehavior` settings. +- `EditableLabel` will now reset all available styles that might come from page-wide CSS to `"initial"` so its appearance is not affected by any outside CSS. + +### Fixed +- `EditableLabel` was not being properly positioned with `textAlign` set to anything else than `"left"`. +- `ValueAxis` in some rare cases (when `max` and `maxPrecision` was set) could get to infinite loop. +- Some drawing series on `StockChart` were not properly removing items of deleted drawings from their data/dataitems. + + +## [5.9.5] - 2024-05-02 + +### Added +- New `DrawingControl` setting: `scrollable` (default: `false`). If set to `true` will restrict tool list to the height of the target chart. +- New `Sprite` method: `compositeRotation()`. Returns element's rotation in degrees, taking into account all of its ancestors. +- New element `EditableLabel`. + +### Changed +- The drawing tool dropdown will now be fixed to the height of the target chart by default. You can disable it using `scrollable: false` on the `DrawingControl`. +- HTML content will now take `rotation` setting into account. +- Label and Callout drawing tools in `StockChart` will now use new `EditableLabel` element for smoother editing experience. The text is now editable. + +### Fixed +- A `ValueAxis` with logarightmic scale and very small numbers was sometimes displaying cluttered grid lines and overlapping labels. +- Volume Profile indicator could show previous data if user quickly scrolled to the range where no volume data was available. +- Switching type of `RadialLabels` from radial to circular was resulting in those labels positioned incorrectly. +- If a mouse pointer was over the chart when TAB key was used to focus an `XYCursor` line, series/axis' tooltip would disappear. + + +## [5.9.4] - 2024-04-26 + +### Fixed +- `StockChart` with `VolumeProfile` indicator was snapping scrollbar's left grip to the start. +- Logarithmic axis was not showing labels less than 10e-5. +- `Treemap`'s labels would sometimes not adjust its size (usually with a lot of data). + + +## [5.9.3] - 2024-04-23 + +### Added +- Added possibility to add bullets to links in a linked hierarchy charts, like Force-directed and Tree. [More info](https://www.amcharts.com/docs/v5/charts/hierarchy/hierarchy-link-bullets/). +- New `IndicatorControl` method: `clearIndicators()`. Allows clearing all indicators from the chart at once. + +### Changed +- `StockChart` will now automatically disable select mode when exitting drawing mode. +- `XYChart` background fill color and opacity have been moved to a default theme, so that it can be overridden by custom themes. + +### Fixed +- Resize bubbles on `StockChart`'s drawings were sometimes disabled when switching and drawing with another drawing tool. +- Resize bubbles on `StockChart`'s were not shown after Eraser was turned on and off. +- Resize bubbles on `StockChart`'s were not shown when drawing mode was toggled off and then back on. +- `PieChart` was not updating radius if resized very quickly. +- If an `XYSeries` was initially hidden, its tooltip was still visible on an `XYChart` with cursor. +- Clicking on a selected icon drawing in a `SockChart` would not unselect it. +- A perfectly vertical or horizontal line with `strokeGradient` set was invisible. +- Removing an indicator from `StockChart` could cause Y-axis to be auto-zoomed incorrectly. +- The centering of a scaled HTML content was not taking `centerX`/`centerY` into account. + + +## [5.9.2] - 2024-04-17 + +### Added +- Accessibility: Two new `Tooltip` settings added: `readerAnnounce` (boolean, default: `false`) and `labelAriaLabel`. If `readerAnnounce` is set to `true`, tooltip's contents (`labelAriaLabel` if set, or regular label text) will be read out by screen readers when tooltip is shown or its data item changes. +- Accessibility: New `Label` method: `getAccessibleText()`. Returns populated `arialLabel` text if set, or regular `text` content. +- New `Sprite` method: `compositeScale()`. Returns actual scale of an element, compounded based on scale of its own and all of its ancestors. +- Net global function `am5.getRootById(id)`. Returns `Root` instance stored in a `
` with specific id. +- 4 new `StockPanel` events added: `moved`, `closed`, `collapsed`, and `expanded`. [More details](https://www.amcharts.com/docs/v5/charts/stock/panels/#Events). +- 2 new `Entity` methods added: `off(key, callback?)` and `offPrivate(key, callback?)`. Allows removing setting/private setting value change events set via `on()`/`onPrivate()`. [More details](https://www.amcharts.com/docs/v5/concepts/events/#Removing). +- New `StockChart` setting: `erasingEnabled`. If set to `true`, the chart will go into "eraser" mode - same as clicking on an Eraser tool in stock toolbar. + +### Changed +- HTML content will now scale according to its "composite" `scale`. (Scale calculated all the way its ancestor tree). +- `StockChart` will now restore "selection mode" after briefly turning it off while drawing is being drawn. +- Improved dangling of circular labels with Arabic text. + +### Fixed +- HTML content was sometimes being incorrectly positioned if either `width` or `height` was set, but not both. +- Selecting a drawing on a `StockChart` was resulting in an error if there was no `DrawingControl` present in a chart's toolbar. +- `StockChart`'s eraser tool was not working properly since `5.9.1`. +- If a `StockPanel` was added to a zoomed `StockChart` it would not sync its zoom and would appear fully zoomed out. + + +## [5.9.1] - 2024-04-10 + +## Added +- New control in `StockChart`'s drawing toolbar: "Select". Allows toggling "selection" mode on and off. When it's on, clicking on any existing drawing will select it. Otherwise drawing will be initiated using currently selected tool. This allows drawing over existing drawings. Default: off. +- New `StockChart` setting: `drawingSelectionEnabled` (default: `false`). If set to `true`, all drawings will be selectable by clicking on them. + +### Changed +- Bundled `xlsx` library code updated to `0.20.2`. +- All drawings are not selectable by default (they were selectable since 5.9.0). To enable selection, use the newly introduced "Select" control, or via `StockChart`'s `drawingSelectionEnabled` setting. + +### +- Revisited fix to `tabindexOrder` with a safer approach. +- Arrow-navigating between grouped focusable items were not "jumping over" hidden items. +- `LineSeries`' axis ranges were not properly using `stroke`/`fill` templates from data. + + +## [5.9.0] - 2024-04-09 + +### Added +- `zoomToDataItems(dataItems, rotate)` method added to `MapPolygonSeries`. +- Bigger hit circle added to Stock charts drawings bullets, which becomes visible when hovered. +- A public method `markDirtyKey()` added. Could be used to trigger an adapter. +- A "Reset to default" link added to `StockChart`'s settings modal. +- New `StockChart`/`DrawingSeries` methods added related to drawing selection: `selectDrawing(id, keepSelection)`, `unselectDrawing(id)`, `unselectDrawings()`. +- New `StockChart`/`DrawingSeries` methods added related to drawing deletion: `deleteDrawing(id)`, `deleteSelectedDrawings()`. +- New `StockChart` events: `drawingadded`, `drawingremoved`, `drawingselected`, `drawingunselected`. +- New `DropdownListControl` methods: `getItemById(id)` and `setItemById(id)`. +- New `IconControl` methods: `getIconByPath(path)` and `setIconByPath(path)`. +- New drawing tools added to `StockChart`: "Triangle" and "Polyfill". + +### Changed +- Improved handling of moving lines of an `XYCursor`. It will now move by one cell automatically, or by 5 cells if pressed together with `CTRL`. +- Improved styling of a color picker control in `StockChart`'s toolbar and settings modals. +- Drawing functionality was completely revamped: all drawings are now selectable, editable, movable, and can be deleted by selecting them and pressing `DEL`. +- Accessibility: Pressing SPACE when element with `role="checkbox"` set is focused, will now toggle it just like pressing ENTER. +- `pdfmake` updated to `0.2.10`. + +### Fixed +- `Sprite` was not marking its bounds dirty when margins changed. It was causing layouts with margins not to be redrawn after margins changed. +- When drawing mode was enabled in a `StockChart` while in the percent scale, it used to reset scale to regular. +- `Tooltip` no longer overwrites user-provided `background`. +- `Treemap` was not redrawing when layout algorithm was changed dynamically. +- `Tooltip` position was not being updated when bounds of a `Sprite` changed. +- Moving line of an `XYCursor` with a keyboard press could result in an axis line to be out of sync with series tooltips. +- `tabindexOrder` was not working properly in some cases. +- Font family and font size controls were showing unnecessary "+" icon. +- In some rare cases setting value on an object / data item was not working. + + +## [5.8.7] - 2024-03-25 + +### Fixed +- If a `Label` with background was hidden due to `oversizedBehavior` rule, the background was still visible. +- Moving `XYCursor` with keyboard were not always properly updating adapter-populated tooltips. +- HTML-based tooltips were not being updated properly in some cases. +- Labels of a zero-value slices on a `Venn` diagram will not be displayed anymore. +- `Sankey` links were ignoring `dx` and `dy` settings set on nodes. +- A JS error could occur when loading on-demand data in some specific cases. +- Series range affected by an axis range was not using settings from its `tempalteField`. +- When data grouping was enabled on `DateAxis`, calling `zoomToDates()` (and `zoomToValues()`) could result zooming to slightly different dates. + + +## [5.8.6] - 2024-03-20 + +### Fixed +- `pancancelled` event of an `XYChart` was not being fired in some cases. +- When old series were removed from an `XYChart` and a new added, related `ValueAxis` was not zooming out to new data if Animated theme was not used. +- `Series.on("tooltipDataItem")` was not working in some setups since `5.8.3`. +- If a `ValueAxis` width `extraMin` and/or `extraMax` set was being synced with another axis (via `syncWith`) chart could go into an SO in some setups/cases. + + +## [5.8.5] - 2024-03-15 + +### Added +- `forceHidden` (default: `false`) setting added to `StockControl`. Enables forcing some `StockChart` controls to be always hidden. +- New `DateRangeSelector` event added: `"rangeselected"`. +- New `PriodSelector` event added: `"periodselected"`. + +### Fixed +- A JavaScript error was being triggered if a `Picture` was disposed before external image was finished loading (since 5.8.3). +- Inputs in `DateRangeSelector` were ignoring `Root`'s `timezone` and `utc` settings. +- Thicker stroke (`strokeWidth > 1`) was being ignored as a hit target for interactive elements. +- `Scrollbar` grips would not update their position according to `maxZoomCount`/`minZoomCount` setting in some cases. +- Hovering over the border of a `Treemap` node could result tooltip of some other node to appear. +- In some cases pointer over tooltip of a hovered `Treemap` node would remain on the same node, even if pointer would move to some other node. +- If a `{ timeUnit: "week", count: 2 }` (count > 1) was added to a `DateAxis`, labels were flickering while scrolling. +- Calling `zoomToDates()`/`zoomToValues()` on a `DateAxis` was resulting not exact dates when data grouping was enabled and grouping period would changed during zoom. + + +## [5.8.4] - 2024-02-22 + +### Added +- New `DrawingSeries` method: `getIndex(drawingId)`. Will return index of a drawing corresponding to a unique id, or `null` if not found. + +### Changed +- `PeriodSelector` will now zoom to last/first data items if `stockSeries` is set on `StockChart`. Previously it used to zoom to X-axis scale end/start, regardless of data. +- All `DrawingSeries` will now add a unique `drawingId` to all drawing data. +- Stock indicatos adjusted so that they could handle data with negative values, `0` volume values and all OHLC values being equal. + +### Fixed +- Scale of a `ValueAxis` was not adjusting properly if its height/width changed during zoom. +- Standalone `DrawingControl` (one that was not added to a toolbar) was erroring out when parent `Root` was disposed. +- HTML content in a `Label` (with `html` set) was not inheriting labels actual color (`fill`). +- Setting a `selectedDataItem` to a data item without children on a `Hierarchy` series was resulting in error. +- Heat rules were setting "neutral" color on the default state of a target even if it was undefined, resulting in some issues when value was not set. +- Heat rules were ignoring `customFunction` if value was not set. + + +## [5.8.3] - 2024-02-19 + +### Fixed +- `Picture`'s events "loaded" and "loaderror" were kicking in before actual picture was fully loaded/errored. +- `ClusteredPointSeries` of a `MapChart` were updating clustered bullets with delay and sometimes they remained in a wrong position. +- `StockChart`'s cursor used to freeze after chart was panned and it was not snapped to Y value (if snapping was enabled) (since `5.8.1`). + +## [5.8.2] - 2024-02-16 + +### Fixed +- `DateRangeSelector` was sometimes selecting an extra day on `GapplessDateAxis`. +- DSome leftover console debug messages removed. + + +## [5.8.1] - 2024-02-14 + +### Changed +- `VolumeProfile` indicator will now not let select an unreasonably small value for its "ticks per row" setting. + +### Fixed +- Using `DrawingControl` in standalone mode was resulting in error when trying to enable drawing tool from API. +- Volume profile indicator was taking one extra date which was out of selection in some cases. +- If `snapToSeries` was set on `XYCursor`, `tooltipDataItem` was set one extra time with incorrect value on `XYSeries`. +- `XYSeries` was not updating legend if `legendRangeValueText` text was set on series and range was changed from outside without animated theme enabled. + + +## [5.8.0] - 2024-02-01 + +### Added +- New container type `ZoomableContainer` added, which allows adding zoom capabilities to virtually any chart. [More info](https://www.amcharts.com/docs/v5/concepts/common-elements/containers/#Zoomable_container). +- New class `ZoomTools` added. Can be used to quickly add zoom support for elements compatible with `IZoomable` interface, e.g. `ZoomableContainer`. +- New read-only property of `DrawingControl`: `drawingSeries`. Contains an object where key is a drawing tool name and values are array with references to actual drawing series. + +### Changed +- Default value for `strokeOpacity` for the grid line of a `StockChart` changed from `0` to `0.4` so that it would differ from regular grid lines. + +### Fixed +- Resizing stock chart's panels after moving them up/down was not working properly. +- `Hierarchy.addChildData` was duplicating node's children which were added before. +- If `topDepth` was set to `1` on `Partition`, initially the chart was showing not all levels of nodes. +- When clicking on particular partitions of a `Partion` chart, zoom animation was not playing. +- `DateRangeSelector` was showing extra day in automatically-calculated end date. +- `DateRangeSelector` was zooming to the start of the selected day, instead of end. +- Tooltip background color passed to `HeatLegend.showValue(value, text, color)` was being ignored. +- `ClusteredPointSeries` was not showing charts if they were added to clustered bullets. +- Fixed issue with `DrawingControl` which was unnecessarily duplicating drawing series with each tool selection / API call. +- Using "1M" button in `PeriodSelector` was not always selecting full month. +- Restoring drawings with `DrawingControl.unserializeDrawings()` will now correctly update indexes of the restored drawings based on current drawing counter. +- In some cases `StockChart` was taking a data item which was just outside of zoom range when calculating aggregate values for its series, affecting percent change values and some other aggregates. +- Legend value was not being updated when series axis' range changed. This caused `legendRangeLabelText` to not being updated (if set) when chart was being zoomed-in/out. +- If a type of `StockChart` series was changed with data grouping enabled, some duplicate candlesticks or ohlc sticks were displayed until first zoom. +- In some rare cases chart would show incorrect last segment of a `LineSeries` when in percent mode. + + +## [5.7.7] - 2024-01-18 + +### Added +- New setting in `StockToolbar`: `focusable` (default: `false`). If set to `true`, will make all toolbar controls navigable/editable using keyboard. [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/#Accessibility). + +### Changed +- `ariaChecked` setting will be ignored if the element also has `role` set to one of these: `"checkbox"`, `"option"`, `"radio"`, `"menuitemcheckbox"`, `"menuitemradio"`, `"treeitem"`. + +### Fixed +- Paused animations no longer trigger a re-render. +- Mouse wheel events now work properly inside of shadow DOM. +- `minBulletDistance` was not being re-measured when size of a chart was changed. +- Volume Profile was ignoring color change in its settings dialog. +- Volume Profile when added on chart load was not properly setting count setting in modal when switching to "Ticks per row". + + +## [5.7.6] - 2024-01-05 + +### Fixed +- One of the underlying series was not being removed when disposing MACross indicator. +- Some of the newer indicators were not being restored. +- `autoSave: true` set on `DataSaveControl` was not working. + + +## [5.7.5] - 2024-01-04 + +### Added +- New `Annotator` setting: `markerStyleSettings`. Allows setting default settings for UI styles of `MarkerArea`. [More info](https://www.amcharts.com/docs/v5/concepts/exporting/annotator/#Configuring_UI). +- "Moving Average Cross" (MACross) and "Price Volume Trend" (PVT) indicators added to `StockChart`. +- `ZoomControl` now has a new property: `homeButton`. It holds an instance of a button which zooms out the map to its initial position. It is hidden by default, so if needed, needs to unhide it by setting `zoomControl.homeButton.set("visible", true)`. + +### Changed +- Settings dialog for a "Volume Profile" indicator will automatically update count field value to a more suitable one when switching count type. + +### Fixed +- Clearing data on a `ClusteredPointSeries` would not remove its bullets representing clusters. + + +## [5.7.4] - 2024-01-02 + +### Added +- New `Annotator` setting: `markerSettings`. Allows setting default settings for `MarkerArea`. [More info](https://www.amcharts.com/docs/v5/concepts/exporting/annotator/#Configuring_UI). + +### Changed +- Heat rules are now set on the default state of a target, too. + +### Fixed +- Changing data granularity on `StockChart` was not updating `baseInterval` on indicator's `DateAxis` resulting in indicator showing a wrong chart. +- If `exclude`/`include` was set on a `MapSeries` without GeoJSON set, setting it later later would result in a map not appearing. + + +## [5.7.3] - 2023-12-26 + +### Fixed +- `Scrollbar` background was being drawn shifted since `5.7.2`. + + +## [5.7.2] - 2023-12-22 + +### Added +- New setting on `Label`: `maxChars`. If set to a number, will truncate text to X characters with ellipsis, obeying `breakWords` and `ellipsis` settings. +- "Bull Bear Power" indicator added to `StockChart`. +- "Acceleration Bands" indicator added to `StockChart`. +- Standalone `registerClass(name, classRef)` added to Stock Chart package (global: `am5stock.registerClass()`). Allows registering own indicator class so that it gets properly serialized and restored. + +### Changed +- Improved min/max calculation of the `ValueAxis` when all the values of a series are the same. + +### Fixed +- "Volume Profile" was showing up in the `IndicatorControl`'s dropdown, even if `volumeSeries` was not set on the `StockChart`. +- Left-side `ValueAxis` on a `StockChart` (`opposite: false`) it was impossible to right-align axis labels to plot area. Scrollbar's width was also not adjusted to the width of the plot area. +- Some drawing tools in `StockChart` where not working when chart was in comparison mode. +- Drawings created when `StockChart` was in comparinson mode were not carried over correctly when switching to regular value mode. +- Some drawing tools ceized working when main `StockChart` series was updated. +- Searchable dropdown controls in `StockChart` were not clearing up the list of found items when the search field was cleared. + + +## [5.7.1] - 2023-12-18 + +### Fixed +- `DataSaveControl` was always clearing manually-saved drawings/indicators unless auto-save was enabled. +- Drawing tools eraser and clear would not always clear drawings loeaded by a `DataSaveControl`. +- `VolumeProfileIndicator` was not working if added via API. +- `VolumeProfileIndicator` was drawn detached from the Y-axis in some cases. +- Fixed `VWAP` indicator with data that contained zero-volume items. + + +## [5.7.0] - 2023-12-17 + +### Added +- New `Serializer` setting: `fullSettings`. Will ignore depth settings for keys listed in `fullSettings`. +- New `StockAxis` toolbar control: `DataSaveControl`. Allows to automatically or manually save all drawings and indicators to browser's local storage, as well as restore them across sessions. [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/data-save-control/). +- Added additional item in `SettingsControl`: Auto-save drawings and indicators. +- New setting in `SettingsControl`: `autoSave`. Enables user to toggle auto-saving of indicators/drawings via Settings dropdown. +- New setting in `DropdownList` and `DropdownListControl`: `exclude`. Can be set to an array of item IDs that should not appear in the list. Can be used to disable default list items. +- New property in `StockChart`: `spriteResizer`. Holdes an instance of `SpriteResizer` which is used among drawing tools. +- `zoomable` setting added to Axis. If set to false, calling axis.zoom() won't do anything, meaning that the axis won't be zoomed with scrollbars, wheel, cursor etc. + +## Changed +- `StockChart` will only sync zoom between X axes that are of the same type as the main axis. +- All drawing tools that allow selecting and resizing them (Label, Callout, Icons) will now use shared instance of `SpriteResizer`. +- `IndictorControl` is now searchable by default (`searchable: true`). + +### Fixed +- `PeriodSelector`'s buttons were not being reset when chart was zoomed manually. +- Dropdowns in `StockChart`'s control were not being positioned correctly in all cases on a page with RTL direction enabled. +- Drawings loaded from serialized data were not being deleted with eraser or clear tools. +- Elinated multiple calls to preparing data of `StockChart` indicators. +- On `StockChart`, indicator's panel X-axis was out of sync with the main panel's X-axis if the latter's scale was longer to some other series on the main panel. +- Italic toggle was being ignored in `StockChart` label drawing tools. +- `GaplessDateAxis` was not always including the first date when using `axis.zoomToDates(startDate, endDate)` method. +- When swiching to percent scale `StovkChart's main panel was showing wrong Y-axis numbers until first zoom. + + +## [5.6.2] - 2023-11-30 + +### Added +- Middle handles added to Parallel channel drawings so that the drawing could be resized vertically. + +### Changed +- Clicking on a last or any other bullet when drawing a polyline on a `StockChart` will terminate current polyline. The next click will start a new polyline. +- `extraMax` and `extraMin` settings now work on `GaplessDateAxis`. This allows adding extra space in front (or back) of your data. We recommend setting `maxDeviation` to `0` if you use `extraMax`. + +### Fixed +- In some rare cases (with a specific data count and `groupData` set to `true`) the chart was continously switching from monthly to weekly group interval causing the chart to flicker. +- Tick position was not always correct with `minorGridEnabled` set to `true`. +- On a `DateAxis` when `gridInterval` was set to `week`, it still showed minor grid lines even when `baseInterval` was also `week`. + + +## [5.6.1] - 2023-11-27 + +### Changed +- New default rule added to `ResponsiveTheme` that will hide minor axis labels below `XXL` (1000px) breakpoint. +- `IndicatorControl` will not list Indicators that rely on volume if chart's `volumeSeries` is not set. + +### Fixed +- Fixed stacking of bullets with varying `centerY`. +- `role` setting for `Root` element was being ignored. +- Setting `name` for a Series would not right away update labels of its related legend item. + + +## [5.6.0] - 2023-11-26 + +### Added +- `addBullet(dataItem, bullet)` method added to `Series`. Allows adding a `Bullet` directly to a particular data item instead of adding bullet function to the series. [More info](https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/#Adding_directly_to_data_item). +- `stacked` (available values: `"up"`, `"down"`, `"auto"`) setting added to `Bullet`. Allows enabling of automatically stacking bullets on an `XYSeries`. [More info](https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/#Stacked_bullets). +- `field` (available values: `"open"`, `"high"`, `"low"`, `"value"`) setting added to `Bullet`. Works with `XYSeries` only. Allows setting a particular data field where the bullet should displayed at. Note: `locationX``locationY` settings will be ignored if `field` is set. [More info](https://www.amcharts.com/docs/v5/concepts/common-elements/bullets/#By_data_field). +- New `Root` element setting: `focusPadding` (default: `2`). Allows specifying distance between focused element and the focus outline. +- Minor grid/labels added on `AxisRenderer` with new settings `minorGridEnabled` and `minorLabelsEnabled` (default: `false`). [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/axes/#Minor_grid). +- New setting `minorDateFormats` added to `DateAxis`. Allows setting different formats for minor grid labels. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/axes/date-axis/#Minor_grid_formats). + +### Changed +- When `DateAxis` is in weekly grid mode, it will now use `multiLocation` for labels instead of `location`. +- Placement of grid/labels is improved on `DateAxis` and `GaplessDateAxis`. + +### Fixed +- Truncating was not working properly on circular labels. +- Fixed potential conflict of responsive rules in `ResponsiveTheme`. +- Issues fixed with data items appearing in wrong place on a chart with data grouping enabled and timezone set. +- `DrawingControl.unserializeDrawings()` method was broken since `5.5.7`. + + +## [5.5.7] - 2023-11-17 + +### Added +- Two new settings on a `ClusteredPointSeries`: `scatterDistance` and `scatterRadius`. Allow exploding clusters of very close points when further zoom-in is no longer possible. [More info](https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/#Scatter_settings). + +### Fixed +- `PieSeries` was not issuing proper colors for its slices with some JSON config setups. +- In `StockChart` when percent mode was being switched off and related series toggled via legend, it would revert to percent mode. +- When updating data on a `PieSeries` its ticks could be displayed going all the way to the center briefly. +- Changing data on a main series in a `StockChart` was not updating related indicators properly. +- Legend marker for a `LineSeries` with bullets could display incorrectly if the whole chart was created before adding it to the `Root` container. + + +## [5.5.6] - 2023-11-10 + +### Added +- Each `` element in chart will now have its `class` set to reflect its layer/order, so it can be targeted with CSS. E.g. `am5-layer-0`. +- `ClusteredPointSeries` added. Allows automatically clustering closely-located bullets into groups. [More info](https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/). +- `zoomToDataItems()` method added to `MapPointSeries`. Can be used to zoom to a number of series data items so all of them are visible. + +### Fixed +- `DataProcessor` was not parsing timestamp-based string dates ('"x"') properly. +- `strokeGradient` set on an `AxisRenderer` was not being applied (since `5.5.5`). + + +## [5.5.5] - 2023-11-06 + +### Added +- SMA line added to Relative Strength Index indicator in `StockChart`. +- A possibility to draw a Parallel Channel added to `StockChart`. + +### Changed +- Removed dependency on the `regression` npm package. + +### Fixed +- Change of `minGridDistance` setting on `AxisRenderer` was not being applied until next redraw. +- Snapping of `StockChart` drawings sometimes worked incorrectly. +- Average line was drawn incorectly on a `StockChart` (since `5.5.2`). + + +## [5.5.4] - 2023-11-01 + +### Fixed +- All `StockChart` indicators with OverBought/Oversold ranges were zooming to the selected series range (they should not). + + +## [5.5.3] - 2023-11-01 + +### Added +- New indicator "Stochastic Momentum Index" added. +- All `StockChart` indicators with OverBought/Oversold ranges (Commodity Channel Index, Relative Strength Index, Stochastic Momentum Index, Stochastic Oscilator and Williams R) have now middle line between oversold/overbought. Also a draggable grip added to oversold/overbought ranges which allows user to change values by dragging these grips. +- New `StockChart` toolbar control: `DropdownControl`. Can use to add any content to be displayed in a dropdown when clicked. [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/dropdown-control/). + +### Changed +- Changed defaults on a `StockPanel`: `wheelY: "zoomX"`, `panX: true`, `panY: true`. Previously, those were hardcoded in `ChartIndicator`, which prevented a possibility to change them via a theme. +- Changed defaults on an `AxisRendererY`: `pan:"zoom"`. This adds zoom possibility for all Y axes of a `StockChart` (previously indicator Y axes where not zoomable). +- `IndicatorControl` now extends `DropdownListControl` for consistency. +- `IndicatorControl` has now `scrollable: true` set by default. +- Tweaked number formats for indicator legend items. +- Default ordering of indicators in `IndicatorControl` changed. + +### Fixed +- Returning empty string from `labelHTML` adapter on a `Tooltip` in some cases could result to an error. +- Timezone formatting with "z" codes in `DateFormatter` was not always correct. +- `XYChart` could flicker on Safari browser in some rare responsive CSS setups. + + +## [5.5.2] - 2023-10-27 + +### Added +- `customValue` added to `ISeriesDataItem` and `customValueField` to `Series`. Allows storing additional numeric information which could be used for heat rules and other purposes. +- A middle line between oversold and overbought added to `StockChart`'s RSI indicator. +- While drawing polygon in a `StockChart`, a line is drawn from the previous point to mouse pointer. +- New setting `scrollable` (default: `false`) added to `StockChart`'s `DropdownList` and `DropdownListControl` (as well as other controls that extend those, e.g. `ComparisonControl`). If set to `true`, will automatically limit dropdown height to fit into chart, and will show scrollbar if the contents do not fit. +- Measure tool added to `StockChart` (as a drawing item). +- `toolSettings` setting added to `DrawingControl`. Allows passing in default settings for each drawing tool. [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/drawing-control/#Tool_settings). + +### Changed +- Printing via `ExportingMenu` print functionality using "CSS" print method will now temporarily remove all margins and padding on `body` so that images that do not fit into single page do not produce a blank page. +- `StockChart`'s Fibonacci drawing tool now draws from initial click point to the mouse pointer instead of to the right of the plot area. +- `StockChart`'s Fibonacci drawing tool's click point is now at 1 value (was at 0). +- Most of drawing tools of `StockChart` now support snapping to data items. +- Snapping to data items in `StockChart` drawing tools is now turned off by default. + +### Fixed +- If an axis range was created for a `ColumnSeries` after series was inited, columns for the range were not being created. +- `GaplessDateAxis` valueToPosition method was returning wrong position if value was less than min value of the axis. +- Unserializing indicators and drawings that create separate panel in a `StockChart` would not restore drawings in indicator's panel. +- Hierarchy node was not taking "disabled" state when singleBranchOnly was true and another node was clicked. +- drawingId was not added to StockChart's PolylineSeries. +- Rapidly clicking on tree map nodes (when many and cpu is jammed) could result js error. +- Circle's and Rectangles strokeWidth was ignored when detecting if the element is hovered. +- If a Picture was disposed before loading finished, it resulted js error. + +## [5.5.1] - 2023-10-19 + +### Fixed +- Not all visual settings from columns were being copied to their legend markers. +- Data items with identical timestamps in data could sometimes be ignored when plotting series. +- `drawingsInteractive(false)` was not having an effect on some drawing tools (Vertical/Horizontal/Ray Line). +- `CategoryAxis`' elements (e.g. labels and grid) were ignoring `forceHidden` setting. +- Some line elements (e.g. grid) were being drawn somewhat blurry since `5.4.9`. + + +## [5.5.0] - 2023-10-17 + +### Added +- `zoomTo` (values: `"start"` and `"end"` (default)) added to `PeriodSelector`. If set to `"start"`, period buttons will selectg from the start of the data, not from the end. `"YTD"` will still select to the end. [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/period-selector/#Zoom_anchor_point). +- `PeriodSelector` now supports `"custom"` periods. [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/period-selector/#Custom_periods). +- New filter settings added to `Sprite`: `blur`, `brightness`, `contrast`, `saturate`, `sepia`, `invert`, `hue`. [More info](https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/filters/#Built_in_filters). **These filters are not supported by Safari browsers.** +- New `GrainPattern` added. Allows adding grainniness effect to any element. [More info](https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Grain_patterns). +- New private setting `trustBounds` added to `Sprite`. If set to `true`, the Sprite will check if a mouse pointer is within bounds of a Sprite before dispatching its pointer events. This helps to solve ghost tooltips problem which sometimes appears while moving the pointer over interactive objects. It is set to `true` by default on `Rectangle` and `Circle`. + +### Changed +- Previously elements only supported one fill at a time - either `fill` or `fillGradient` or `fillPattern`. Now `fill` or `fillGradient` will be drawn even if `fillPattern` is set. This allows combining +patterns with gradient fills. +- Gradients no longer inherit parent object's `fill`. +- It is now possible to draw annotations on a `StockChart` outside X-axis' min/max using axis overzoom. +- If a `forceHidden` for the tooltip is set to `true` the tooltip size won't be taken into account when arranging tooltips on an `XYChart`. + +### Fixed +- An error was being thrown when chart with focused element was being disposed. +- If a series had data items without value and axis was zoomed so that only these data items were in range, the series used its full min and max values resulting value axis to be fully zoomed out. +- Using `hide()`/`show()` methods on an axis data item would no hide its visual elements. +- Drawing annotations on a `StockChart` with timezone set was a bit wonky. + + +## [5.4.11] - 2023-10-10 + +### Fixed +- `SliceGrouper` would use first color in series for a "group" slice if series was using a color set with custom list of colors. +- Fixed a problem where no series was displayed after data with all 0 values was set (since `5.4.10`). +- `forceInactive` was not working on `Container`. +- `drawingsInteractive(value: bool)` method in `StockChart` was not working properly. + + +## [5.4.10] - 2023-10-06 + +### Fixed +- `StockChart` settings `stockPositiveColor` and `stockNegativeColor` was being ignored in some cases since `5.4.9`. + + +## [5.4.9] - 2023-10-06 + +### Added +- `drawingsInteractive(value: bool)` method added to `StockChart`. `false` will make current annotations (drawings) to be fully static (non-editable). + +### Fixed +- Zoom out button on `XYChart` was not focusable. +- Pulled out slices of a `PieSeries` could overlap with other slices if some slices were hidden. +- Pinch-zooming was not working properly in `XYChart`. +- Candlesticks on a `StockChart` were being colored based on previous period close value instead of current period open value. + + +## [5.4.8] - 2023-09-22 + +### Added +- Momentum indicator added to `StockChart`. + +### Fixed +- `"z"` date formatting codes were not respecting the `Root.timezone` setting. +- If a new data was loaded and `groupData` of `DateAxis` was changed from `true` to `false`, the chart was not displaying the newly-loaded data properly. +- Accessibility: togglable elements like legend items were not being toggled by ENTER and SPACE keys with some screen reaaders (JAWS, Narrator) active. +- RST indicator of `StockChart` was always using "close" value even if a different value was selected in the settings. +- In some case chart could freeze when selecting with an `XYCursor` and releasing outside plot area. +- If a new animation of the same setting was created right after previous animation finished (on `Animation`'s `"stopped"` event) the animation would not play. + + +## [5.4.7] - 2023-09-18 + +### Added +- `panelResizer` property added to `StockPanel`. Holds an instance of an element used as a grip for resizing a panel. +- `originalEvent` added to all `XYCursor` events. +- `selectcancelled` event added to `XYCursor`. + +### Fixed +- HTML axis label on a circular chart were causing unnecessary CPU usage in some setups. + + +## [5.4.6] - 2023-09-04 + +### Added +- When using the JSON parser, it's now possible to use a `"@series"` ref inside of a bullet to access the series of the bullet. +- When using the JSON parser, it's now possible to use `"#foo.get('bar')"` syntax to look up settings on the referenced object. + +### Fixed +- In some cases `DateAxis` could error out when using time zones. +- Canvas container had `aria-hidden` was set to incorrect value. +- Bullets now work correctly with the JSON parser. + + +## [5.4.5] - 2023-08-26 + +### Added +- New method `addChildData()` added to `Hierarchy`. [More info](https://www.amcharts.com/docs/v5/charts/hierarchy/hierarchy-api/#Dynamically_adding_child_nodes). + +### Fixed +- Vertical wheel-scrolling is no longer prevented if `wheelY: "none"` is set, regardless of the `wheelX` setting. + + +## [5.4.4] - 2023-08-18 + +### Added +- New setting on `Sankey`: `linkSort`. Set it to a custom function for sorting links, or to `null` to use link order from data. + +### Changed +- Data items with `null` values will be ignored altogether when grouping data. +- [Reverted] Accessibility: focus element of the non-visible focusable items (e.g. buttons) will now have `aria-hidden` attribute set, so they are not read out by screen readers. + +### Fixed +- In some setups month/year selectors were wrapping to two lines in a `DateRangeSelector`. +- Fixing issue with chart not showing up sometimes. +- `XYChartScrollbar` thumb area was not draggable since `5.4.3`. + + +## [5.4.3] - 2023-08-15 + +### Changed +- Accessibility: focus element of the non-visible focusable items (e.g. buttons) will now have `aria-hidden` attribute set, so they are not read out by screen readers. + +### Fixed +- Fixing chart being resized incorrectly inside of nested flexbox. ([Issue 1044](https://github.com/amcharts/amcharts5/issues/1044)) +- `SettingsModal` was not being disposed together with a `Root` with a `StockChart` in it. + + +## [5.4.2] - 2023-08-07 + +### Added +- New method on all axis renderers: `toGlobalPosition(position)`. Converts relative axis position taking into account its current zoom count. +- New setting on `FlowNodes`: `disabledField`. Allows pre-collapsing of nodes using data. + +### Fixed +- Fixing the JSON parser to work with `geoJSON`. +- Fixing the JSON parser to work with `stops`. +- Fixing the behavior of `calculateSize` when using `transform: scale`. + + +## [5.4.1] - 2023-07-18 + +### Added +- All Flow (Sankey, Chord and Arc) nodes can be toggled (on by default). [More info](https://www.amcharts.com/docs/v5/charts/flow-charts/#Node_toggling). +- New `Flow` settings added: `hiddenSize` and `minHiddenValue`. [More info](https://www.amcharts.com/docs/v5/charts/flow-charts/#Node_toggling). +- Deviation added to editable `BolingerBand` settings (`StockChart`). + +### Changed +- `Chord`'s default value of `"sort"` changed from `"descending"` to `"none"`. This change was necessary for the new feature of [toggling nodes](https://www.amcharts.com/docs/v5/charts/flow-charts/#Node_toggling). + +### Fixed +- `Label` with wrapping/truncation, containing only symbols like question mark could make the whole chart break in a dead loop. +- `exclude`/`include` settings on `MapSeries` was being ignored when new data was set for the series. +- `LineSeries` was not being included in the caluclation of min/max of the vertical `ValueAxis` if it did not have any data points in current zoom scope of the horizontal `DateAxis`. + + +## [5.4.0] - 2023-07-04 + +### Added +- New hierarchy-based series: Voronoi Treemap. [More info](https://www.amcharts.com/docs/v5/charts/hierarchy/voronoi-treemap/). +- New flow-based series: Arc Diagram. [More info](https://www.amcharts.com/docs/v5/charts/flow-charts/arc-diagram/). + +### Changed +- Label wrapping mechanism will now treat a [zero-width space](https://en.wikipedia.org/wiki/Zero-width_space) character as a word break. + + +## [5.3.17] - 2023-06-28 + +### Added +- `getTooltipText()` method on `Axis` has a second parameter `adjustPosition` (default: `true`). Affects only `DateAxis`. If set to `false` will not adjust position before formatting date by base interval. +- `Root` element now has three additional settings: `focusable`, `ariaLabel`, and `role` (all are empty by default). [More info](https://www.amcharts.com/docs/v5/concepts/accessibility/#Accessibility_of_Root_element). + +### Changed +- Accessibility: The `role` of the `
` element that holds focusable elements is changed to `graphics-document` (was `application`) to better reflect interactive element. [More info](https://www.w3.org/TR/graphics-aria-1.0/#graphics-document). +- Accessibility: `
` element that holds `` elements has now `aria-hidden="true"` set. +- If using `type` with the JSON plugin, it will now always replace the existing Entity instead of merging. + +### Fixed +- `ariaLabel` on horizontal scrollbar grips were being populated to a slightly wider range than actual range of the related `DateAxis`. +- `ExportingMenu` methods `open()` and `toggle()` were not working when attached to click events on external elements. +- Stock charts `DateRangeSelector` was allowing pickers to go outside selectable date range. +- The JSON plugin can now change properties on a `ListTemplate` (like `grid`). [More info](https://www.amcharts.com/docs/v5/concepts/serializing/#Templates). +- Tooltip was not always hidden when `sprite.hideTooltip()` was called. +- If a mouse pointer was over a `Sprite` and `tooltipPosition` was changed from `"fixed"` to `"pointer"`, it was not following mouse unless you unhovered and then hovered over sprite again. + + +## [5.3.16] - 2023-06-13 + +### Fixed +- Legend label's were losing their disabled state if labels were updated by moving cursor. +- `XYCursor` will no longre freeze when selecting and pointer moves out of plot area. +- `Treemap`'s focus navigation using arrow keys and `focusableGroup` was not working properly. +- `Annotator` plugin was sometimes retaining drawings after drawing was cancelled. + + +## [5.3.15] - 2023-06-01 + +### Fixed +- Dynamic updates to `geoJSON` on a `PolygonSeries` were not working since `5.3.13`. +- Updating data on a `PolygonSeries` was resetting map position. +- Memory leak when modifying `Legend` data fixed. + + +## [5.3.14] - 2023-05-30 + +### Fixed +- Interactive HTML tooltips with internal element structure were generating unohver events unnecessarily since `5.3.13`. + + +## [5.3.13] - 2023-05-30 + +### Added +- New setting `forceLTR` (default: `false`) on `NumberFormatter`. If set to `true`, will force all formatted numbers to be LTR, regardless of the direction settings on chart/page. +- `legend: true` added to `dataContext` of a legend bullet `DataItem` (bullets are created for LineSeries), just so it is possible to distinguish between bullets created for series and legend. + +### Fixed +- `Hierarchy` was not not keeping its node toggle state after resize. +- In some cases `DateRangeSelector` was generating an error when zooming `SotckChart`. +- Always-on / on-click `Tooltip` was not being disposed properly when `Root` element was disposed. +- Memory leak was happening when disposing a `Container` with `verticalScrollbar` enabled. +- `PieSeries` was erroring if its `stroke` setting was set. + + +## [5.3.12] - 2023-05-05 + +### Added +- New locale: Faroese (fo_FO). Thanks Martin Puge. + +### Changed +- The `min` and `max` settings are now optional for `IHeatRule` ([Issue 883](https://github.com/amcharts/amcharts5/issues/883)). +- Removed `xlsx` package (with vulnerability) from dependencies in favor of a bundled hard copy (version 0.19.3) due to their decision not to publish to NPM. ([Issue 897](https://github.com/amcharts/amcharts5/issues/897)). + +### Fixed +- Events now work properly with open shadow DOM (but not closed shadow DOM). +- Fixed export of data freezing in some cases where there are visual elements on the chart that are constantly being updated. +- Using parentheses in the in-line number formatting function was not working as needed. +- Tapping on a touch display outside chart was applying default state to elements that weren't being "touch-hovered". +- `getDataItemById()` method was not working properly on `Hierarchy` series. + + +## [5.3.11] - 2023-04-07 + +### Changed +- Possibly a breaking change! All HTML content in tooltips now has interactivity disabled. If you have buttons/links or other interactive elements, you need to explicitly set `tooltip.label.set("interactive", true)`. + +### Fixed +- HTML tooltips were flickering when moving pointer over them. +- Hierarchy drill-downs were broken in some cases (since 5.3.10). +- TAB-focusing of elements on the page might get stuck in a chart if tabbing started outside the document. + + +## [5.3.10] - 2023-04-06 + +### Added +- `homeRotationX` and `homeRotationY` settings added to `MapChart`. Allows setting home x and y rotations. The chart will rotate to provided values when `goHome()` method is called. + +### Fixed +- Accessibility: Legend item's ARIA labels will not contain "Press ENTER to toggle" message if the `clickTarget = "none"` is set. +- Further improvements in rendering/sizing of the HTML-based tooltips. + + +## [5.3.9] - 2023-03-31 + +### Added +- New `PeriodSelector` setting: `hideLongPeriods`. Indicates whether to hide buttons for periods that are longer than the actual data on chart. +- New `DrawingControl` methods: `clearDrawings()` and `setEraser(true | false)`. +- Methods `hide()` and `show()` will now properly hide and show any indicator. +- `MapChart` methods `zoomToGeoPoint()` and `zoomToGeoBounds()` now accepts `rotationX` and `rotationY` parameters. If provided, the map not only zoom to the provided point/bounds but will rotate so that this point/bounds would be in the center. Mostly usefull with `geoOrthographic` projection. +- `MapChart`'s `convert()` method now accepts `rotationX` and `rotationY` optional parameters. If provided, the calculations will be done as if map is rotated by provided values. +- `MapPolygonSeries` / `MapPointSeries` method `zoomToDataItem()` now accepts an optional boolean `rotate` parameter. If it's `true`, the map will rotate so that this point/polygon would be in the center. Mostly useful with `geoOrthographic` projection. + +### Changed +- Hiding a `StockPanel` via its `hide()` method will now animate it to size 0 before hiding completely. + +### Fixed +- The scale of the `StockChart` could become incorrect if there were compared series and the scale was switched back and forth between logarithmic and regular. +- HTML-based tooltips were sized incorrectly in some cases. +- Setting `pointerOrientation` on a `Tooltip` was not updating an already visible tooltip. + + +## [5.3.8] - 2023-03-24 + +### Changed +- Auto-hidden (as per `oversizedBehavior: "hide"` setting) `Label` elements will now trigger `boundschanged` events. +- Defaults of `marginTop` and `marginBottom` set to `1` on all `ZoomControl` buttons. + +### Fixed +- HTML-based tooltips were not being properly sized on first show unless Animated theme was enabled +- HTML-based tooltips were sometimes ignoring `keepTargetHover: true`. +- Tooltip positions were off when exporting a chart with `tooltipContainerBounds` set. +- `DrawingControl` can now be used completely standalone. [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/drawing-control/#Standalone_usage_API). +- Internal tweaks that were occasionally interfering with some drag-and-drop libs. +- Horizontal columns were not being properly highlighted when gaining focus. +- Old bullets of data item were not being cleared if `series.data.setIndex` was used to update old data (since 5.3.7). +- `zoomToValues()` (and `zoomToDates()` by extension) method on `GaplessDateAxis` was not working correctly with a date range outside of actual data range. + + +## [5.3.7] - 2023-03-09 + +### Added +- New `calculateSize` setting on `Root`. This is needed if you are using a `transform: scale(...)` CSS style. [More info](https://www.amcharts.com/docs/v5/getting-started/root-element/#Custom_sizing_function). +- New settings on `DateRangeSelector`: `minDate` and `maxDate`. Allows restricting date selection to specific date ranges. [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/date-range-selector/#Restricting_date_range). +- New events on `StockChart`: `drawingsupdated` and `indicatorsupdated`. Events kick in when drawings or indicators are added, updated, or removed. [More info](https://www.amcharts.com/docs/v5/charts/stock/serializing-indicators-annotations/#Events). + +### Changed +- `DateRangeSelector` will now limit dates to actual range of data. To disable set `minDate` and `maxDate` to `null`. [More info](https://www.amcharts.com/docs/v5/charts/stock/toolbar/date-range-selector/#Restricting_date_range). + +### Fixed +- `XYSeries` were creating `Bullet` objects even if distance between them was less than `minBulletDistance` which was not efficient and could slow the browser down. +- Fixed issue with mutating ES6 modules ([Issue 833](https://github.com/amcharts/amcharts5/issues/833)). +- Fixed more issues with `ghostLabel` obstructing interactivity for other labels. +- Bullet function was not being called when a single data item of the series was updated. + + +## [5.3.6] - 2023-02-27 + +### Added +- New `cors` setting for `Picture` (defaults to `"anonymous"`). +- `beginPath` method added to `CanvasGraphics`. + +### Fixed +- Theme states no longer override user states. +- In some specific cases with stacked axes series position could be shifted up. +- In some specific cases a hairline of a column of a `ColumnSeries` could remain visible on the plot area even if the whole column was out of visible axis bounds. +- A `ghostLabel` was causing some interfering issues with interactive labels of an axis. + + +## [5.3.5] - 2023-02-24 + +### Changed +- Reverting "Fixing bug where click event was not dispatched on tooltips outside of the chart boundaries" introduced in `5.3.4` as it was causing other issues. + +### Fixed +- Down state was changed to a default state if a draggable object was unhovered while dragging. + + +## [5.3.4] - 2023-02-20 + +### Added +- `cellWidth` read-only private setting added to `Axis`. Holds a distance in pixels between two grid lines. It might not be accurate as grid on `DateAxis` might not be at equal intervals. +- `getCellWidthPosition()` added to all axis types. Returns relative distance between two grid lines of the axis. + +### Fixed +- HTML-based tooltip might produce a funky animation if it was displayed very close to the edge of the chart. +- `StockChart`'s X-axes from all panels not always were syncing properly between data updates. +- Fixing bug where click event was not dispatched on tooltips outside of the chart boundaries. +- Changing a color for a `LineSeries` in with a `StockChart` control was not changing its tooltip color. +- `GaplessDateAxis` was not taking into account missing dates when using `zoomToDates()` or `zoomToValues()` methods. +- When data grouping was on and data was changed, `ValueAxis` was zooming to incorrect position. +- Radial labels sometimes could get reversed when updating their settings. + + +## [5.3.3] - 2023-02-08 + +### Added +- New method on `Language`: `addTranslationsAny()`. Allows adding custom translations to locale. [More info](https://www.amcharts.com/docs/v5/concepts/locales/creating-translations/#Extending_locale_with_custom_prompts). + +### Fixed +- In `StockChart` if "Reset" button was pressed when there were drawings present on the chart, it could freeze. +- Calling `dispose()` on a `StockToolbar` was not properly removing all DOM elements. +- `getCellWidthPosition()` method on a `CategoryAxis` was returning a wrong result. + + +## [5.3.2] - 2023-02-03 + +### Changed +- Panning/zooming with a right mouse button was disabled. + +### Fixed +- `StockChart`'s panels date axes could go out of sync if data range was different. Now all X-axes will sync their `min` and `max` to the axis of the main panel (one that contains `stockSeries`). +- `StockChart` could crash if the height of div was really small. +- Private settings `selectionMinFinal` and `selectionMaxFinal` were not being set on a `DateAxis`. + + +## [5.3.1] - 2023-01-31 + +### Added +- `mainDataItems` getter was added to `XYSeries`. Returns ungrouped data items array. + +### Changed +- `crisp` is now set to `true` by default in `Tick` elements. + +### Fixed +- If all values in a grouped period were null, series showed 0 instead of omiting data point when group value was set to "sum". +- Tooltip of a series with `maxTooltipDistance: -1` could be hidden when it should have been shown. +- Setting custom `stockSeries` on an indicator was not working (Chart was force-setting its own `stockSeries` on indicators). +- Fixing type error with `@types/d3-hierarchy`. + + +## [5.3.0] - 2023-01-27 + +### Added +- New plugin: `json`, which allows serializing and parsing serialized (JSON) configs into charts. [More info](https://www.amcharts.com/docs/v5/concepts/serializing/). +- New methods added to `StockChart`'s' `IndicatorControl` and `DrawingControl` used for serializing user-added indicators and annotations. [More info](https://www.amcharts.com/docs/v5/charts/stock/serializing-indicators-annotations/). +- `crisp` (default: `false`) setting added to `Sprite`. If set to `true`, will adjust `strokeWidth` to match screen zoom (retina) as well as its positions will be rounded up, so the lines look crisper. It's primarily meant for straight lines, but can work on other objects, too. Use with care, as coordinate rounding might produce overlapping or gaps between shapes that should be adjacent. +- New `Root` property: `accessible` (default: `true`). +- New `Root` property: `updateTick` (default: `true`). Set it to `false` to temporarily disable all rendering on `Root`. Reset back to `true` to resume rendering. Useful when need to do a bunch of async operations that might result in errors if rendering started before all of them finish. + +### Changed +- `crisp` is now set to `true` by default on elements that use straight lines, like grid, ticks, resize button icon, etc. +- Removed grid opacity setting from default `StockChart` theme. Now it will be the same as regular `XYChart`. +- The generated code now uses `es2015` target instead of `es5`. + +### Fixed +- Labels on a `GaplessDateAxis` might get hidden at some zoom levels. +- Eraser button on `StockChart` was not being unselected when other drawing tool was selected. +- `"YYYY"` (year of week) in date format was not working properly in all cases. +- Fixed two memory leak sources related to disposing of charts. + + +## [5.2.50] - 2023-01-20 + +### Fixed +- Maintenance release. + + +## [5.2.49] - 2023-01-20 + +### Added +- Bulgarian (bg_BG) locale added. + +### Fixed +- Treemap went into Stack owerflow error if initialized in a hidden div. + + +## [5.2.48] - 2023-01-17 + +### Added +- Slovak (sk_SK) locale added. + +### Fixed +- Grid was not being placed in correct place on a `DateAxis` with grid or grid interval in 30 minutes. +- Cursor tooltip was not being snapped to an `XYSeries` with `snapTooltip: true` when it was left of the first available data item. +- `PeriodSelector` was not properly zooming the X axis with a non-standard value in `firstDayOfWeek` locale. + + +## [5.2.47] - 2023-01-04 + +### Fixed +- `MapChart` with a legend could produce error (since 5.2.44). +- `ColumnSeries` with null values could display 1px height loose column on top of the plot container. + + +## [5.2.46] - 2023-01-02 + +### Fixed +- Setting `stockPositiveColor` and `stockNegativeColor` initially on a `StockChart` was not affecting colors of candlesticks. +- When `Tooltip` had `keepTargetHover: true` set, the portions of the tooltip outside the chart area were not being registered for hovers when the `Root` element had `tooltipContainerBounds` set. +- `DateAxis` with data grouping enabled could go into infinite loop of switching between period in some specific data setups. + + +## [5.2.45] - 2022-12-20 + +### Fixed +- `ZigZag` indicator was always using 5% deviation even if user set a different value. +- If data of a legend was updated, labels of a legend were not updated properly in all cases. +- A tooltip for a `ColumnSeries`/`CandlestickSeries` was not being hidden if a cursor was used and mouse was moved away from the chart. + + +## [5.2.44] - 2022-12-20 + +### Fixed +- If a `ForceDirected` node with `topDepth` set to `1` was clicked to hide children and then clicked again to reveal them, the clicked node was hidden. (since 5.2.42) +- `ValueAxis` with `min` and `max` set could result in an empty chart. (since 5.2.43) + + +## [5.2.43] - 2022-12-19 + +### Added +- An event `groupintervalchanged` added to `DateAxis`. Kicks in when data grouping is on, and current group interval changes, e.g. via zooming the chart. + +### Fixed +- Setting `min` and `max` on a `DateAxis` which was not base axis of a series could result in a stack overflow error in some specific cases. +- `PeriodSelector` was not always highlighting the period button when period was selected via `selectPeriod()` method. +- `PeriodSelector` was not selecting proper start position on some platforms when data grouping was on and `selectPeriod()` was called immediately after initialization of the chart. + + +## [5.2.42] - 2022-12-16 + +### Added +- `reverseGeodata` setting added to `MapPolygonSeries`. If set to `true`, will reverse direction of polygon corners in GeoJSON. +- `linechanged` event added to MapLine. + +### Fixed +- If a chart had multiple vertically stacked Y axes and `snapToSeries` was set, moving mouse to series in the bottom could cause chart cursor to disappear. +- A legend label for a `ZigZag` indicator was showning "NaN" instead of its `depth` value. +- Hierarchy series' `topDepth` setting was not working properly if set to `>1`. +- If a `Sprite` was hidden, it hid it's tooltip even if the tooltip at the moment was used by other element. This caused some wrong behavior with Axis tooltips, as all axis elements share the same tooltip. +- If a `MapLine` was changed and some `MapPoint` was assigned to this line, `MapPoint` was not always updating its position. +- Map with `geoAlbersUsa` projection was not working if `GraticuleSeries` was added to it. +- `MapLine` was showing tooltips in a wrong position (in case lines were not straight). +- `PeriodSelector` was not properly zooming whe data grouping was enabled. + + +## [5.2.41] - 2022-12-08 + +### Fixed +- Canvas left/top position was not set correctly (since 5.2.39). +- `Root`'s setting `tooltipContainerBounds` was not positioning itself outside of the chart if there was space in the chart itself (since 5.2.39). + + +## [5.2.40] - 2022-12-08 + +### Fixed +- `Root`'s setting `tooltipContainerBounds` was being ignored on an `XYChart` (since 5.2.39). +- HTML content was clipped to chart's dimensions even if `tooltipContainerBounds` was used. + + +## [5.2.39] - 2022-12-07 + +### Added +- `fillOpacity` setting added to `Label`. + +### Changed +- The whole under-the-hood implementation of the `Root`'s setting `tooltipContainerBounds`. The change should be transparent, but please inform us if the functionality broke in some way. + +### Fixed +- `GraticuleSeries` was not being redrawn if its `clipExtent` was being set after series was already rendered. +- `idField` was not being respected in some cases in a `MapSeries`. +- `MapPointSeries` was not setting map bounds properly if it did not contain any geometries (just points with lat/long). +- `keepTargetHover` on a `Tooltip` was not working when `tooltipContainerBounds` was used in `Root`. +- Some DOM elements were not being removed when element/Root was disposed. + + +## [5.2.38] - 2022-11-29 + +### Added +- `clipExtent` added to `GraticuleSeries`. If set to `true`, graticules will be drawn only within bounds of the polygons. + +### Fixed +- `ZoomControl` position was wrong sice 5.2.36. + + +## [5.2.37] - 2022-11-29 + +### Fixed +- `neutral` is now optional in `IHeatRule`. + + +## [5.2.36] - 2022-11-29 + +### Added +- `affectsBounds` setting added to `MapSeries`. Previously only `MapPolygonSeries` affected chart bounds. Now you can tell `MapPointSeries` or `MapLineSeries` to affect map bounds. Or turn off bound checking for some `MapPolygonSeries`, e.g. for background/water. +- `neutral` setting added to `IHeatRule`. If you set some value (color for example), it will be used for items that do not have any value. + +### Fixed +- If the last slice of a percent (pie) series slice was hidden, `valueSum` was calculated incorrectly (was using last items value instead of 0). +- `geoPoint()` method of `MapChart` was not working properly. +- `keepTargetHover: true` was not working on all `Hierarchy` charts. +- `ZoomControl` used to override its positional settings like `centerX`, `x`, etc. +- Fix for occasional "Value is not of type 'long'" error. + + +## [5.2.35] - 2022-11-24 + +### Fixed +- `exclude` and `include` were not working properly is set on a `MapLineSeries` or `MapPointSeries` (since last release only). + + +## [5.2.34] - 2022-11-24 + +### Added +- `backgroundOpacity` setting added to `Exporting`. +- `fixed` property added to `MapPointSeriesDataItem`. Allows sticking a point to screen coordinates, rather than to lat/long on the map. + +### Changed +- Various containers in amCharts 5 div (HTML content, tooltips, alerts) will now have class names applied (`"am5-html-container"`, `"am5-reader-container"`, `"am5-focus-container"`, `"am5-tooltip-container"`) so that they can be targeted via CSS, e.g. `.am5-html-container { z-index: -1 }`. +- amCharts will no longer fail if `StyleRule` is created with unparsable selector. + +### Fixed +- Labels on `Sunburst` full circle slices were not being properly truncated/sized. +- `startLocation` and `endLocation` was being ignored by `GaplessDateAxis`. +- Dynamically-added heat rules (after series was already created) were not working. + + +## [5.2.33] - 2022-11-18 + +### Added +- New pattern type `PathPattern`. Allows using SVG paths as patterns. [More info](https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/). + +### Changed +- Circular labels (`RadialLabel` with `textType: "circular"`) now have a limited support for `oversizedBehavior`. `"hide"` and `"truncate"` are now supported. The latter will not respect `breakWords` setting, though. + +### Fixed +- Hovering, clicking, and unhovering a `PieSeries` slice would not reset its size properly. +- `Label` background was not being sized properly when `fontWeight: bold` was set. +- Dynamically setting `include` or `exclude` on a `MapPolygonSeries` was not updating it until data was re-validated. +- Circular labels on a `Sunburst` diagram were not being positioned properly. + + +## [5.2.32] - 2022-11-15 + +### Added +- New global property `am5.registry.version` added. Contains the version of the library. +- `lineType` added to `IMapLineSeriesDataItem`. Allows setting `"straight"` or `"curved"` line type for each map line individually. + +### Fixed +- `Label` was ignoring individually-set formatters when formatting number/date/duration values in its text. +- Invoking `PeriodSelector` method `selectPeriod` will now properly highlight related button in selector. +- setting wheelY and WheelX to "none" after the map chart was initialized did not remove wheel behavior. +- Fixed flag bug with `A` and `a` commands in SVG paths. + + +## [5.2.31] - 2022-10-18 + +### Changed +- The logic behind `"pro"` tag in `CandlestickSeries` has been updated to more commonly accepted standards. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/series/candlestick-series/#Professional_candlesticks). +- "Pro Candlesticks" was renamed to "Hollow Candlesticks" in series type switcher in `StockChart`. + +### Fixed +- Stacked axis bullets were being positioned not right on the axis but somewhat higher, depending on the number of bullets. +- More ARIA errors fixed in `ExportingMenu`. +- Using arrows to move focused draggable elements was acting unpredictably if mouse was being used, too. +- Further improvements in cursor tooltip arrangement logic. + + +## [5.2.30] - 2022-10-14 + +### Added +- `"click"` option added to `showTooltipOn` setting. If set, tooltip will appear when clicking/tapping the element, rather than on hover. +- `ExportMenu` has two new private settings: `menuElement` and `listElement`. Holds actual DOM elements of the menu items. + +### Changed +- Disposing `Exporting` object, will now dispose related `ExportingMenu`, if set. +- `Legend`'s item containers will now have `role="checkbox"` set by default. +- Setting `focusable: true` on `XYCursor`'s `lineX` and/or `lineY` will enable moving them with keyboard's arrow keys. +- Better arrangement of tooltips on an `XYChart` with multiple tooltips on the same data point and an `XYCursor` (less chances tooltips going off-screen). + +### Fixed +- In some situations chart was not resizing correctly. +- If `sequencedAnimation` was set to `true` on a `LineSeries`, it was drawing line to 0 while animating series. +- `ExportMenu` was using a non-existent "aria" attribute. +- When `snapToSeries` was set on an `XYChart`, zooming to a selection with the cursor produced wrong zoom. +- `XYChart` with `DurationAxis` could freeze the browser in certain configurations and chart sizes. +- `LineSeries` used to draw a line to null values while series was animating (if `sequencedAnimation` was set to `true`). +- Eliminating warnings about `getImageData()` on the new Chrome. + + +## [5.2.29] - 2022-10-07 + +### Added +- Additional option for `Label`'s `oversizedBehavior` setting: `"wrap-no-break"`. If set, the labels will wrap to `maxWidth`, but will not brak words even if they do not fit. + +### Fixed +- If timezone was set in a chart with a `DateAxis` with `baseInterval` set to `"day"`, axis could show wrong date and axis tooltip could snap to a wrong date on a DLS switch. + + +## [5.2.28] - 2022-10-06 + +### Added +- `stacked` setting added to `AxisBullet`. If set to `true` and multiple data items (axis ranges) were added to the same date/category, bullets will be stacked on top of each other. + +### Fixed +- If a timezone was set and `baseInterval` was a `"month"`, tooltip could show incorrect date value on a month when DLS happened. +- If a new slice was added to `PercentChart` after the initial data was set, the new slice was using first color from colorset instead of the next one. +- Some sprites were not dispatching `boundschanged` event when their settings affecting the bounds were being changed. + + +## [5.2.27] - 2022-10-04 + +### Fixed +- `"average"` value of grouped data items was not being calculated properly. +- `WordCloud` was ignoring the `fill` value from label `templateField`. + + +## [5.2.26] - 2022-09-27 + +### Fixed +- Version bump. + + +## [5.2.25] - 2022-09-27 + +### Fixed +- Using `tooltipContainerBounds` could break layout for the whole document. + + +## [5.2.24] - 2022-09-27 + +### Added +- `lineType` (`"curved"`, `"straight"`) added to `MapLineSeries`. `"curved"` (default) connects points using shortest distance, which will result in curved lines based on map projection. `"straight"` connects points using visually straight lines, and will not cross the -180/180 longitude. +- `tooltipContainerBounds` added to `Root` settings. Allows defining margins around chart area for tooltips to go outside the chart itself. + +### Changed +- If `tooltipLocation: 0` on a `DateAxis`, it will snap to the closest position now. Previously it snapped to the date over which mouse pointer was, this was not user-friendly in some setups. The same logic now applies to the `CategoryAxis` as well. + +### Fixed +- WVAP indicator was showing ZigZag instead. +- Zoom-out button sometimes used to appear while initial animation was playing. Note: if `sequencedAnimation == true`, it will appear anyway. +- Fixed styles issue with date picker in `StockChart`. +- The last bullet of a series could become hidden if `baseInterval` was set to `"month"` on a related `DateAxis`. + + +## [5.2.23] - 2022-09-20 + +### Fixed +- On a chart with cursor and `tooltipText` set directly on series' columns, the tooltip was not being shown (since 5.2.19). +- On a chart with X axis `endLocation: 0`, Y axis was not autozooming properly. + + +## [5.2.22] - 2022-09-15 + +### Added +- ZigZag indicator added to `StockChart`. + +### Changed +- `"%"` number formatting modifier will now consider locale when choosing whether percent sign goes before or after the number. At this moment only `tr_TR` (Turkish) locale is placing percent sign before number. +- `StockChart` indicators, that were using black (`0x000000`) color as a default series color now use `alternativeBackground` color of a theme (they'll now be white if "Dark" theme is used). + +### Fixed +- Stock toolbar dropdown items will now display proper `title` attribute. +- HTML tooltips were flashing an unpositioned content briefly. +- The `"Z"` date formatting option was not taking into account Root element's `timezone` setting. +- If a timezone was set on a chart and data grouping was on, the grouping was not paying attention to the timezone. +- If a timezone which was not using DST was set on a chart, and user was in a timezone which used DST, the axis labels were shifted by 1 hour in some setups. +- `GaplessDateAxis` was not working properly with a timezone set. +- `DateAxis` fills that should have been visible were hidden in some cases. +- `StockChart` was incorrectly switching to percent mode when last of the compared series was removed. +- `"p"` number formatting modifier added. Works the same way as `"%"` except it treats numbers as absolute values and does not multiply them by 100. + + +## [5.2.21] - 2022-09-08 + +### Added +- Trix, Median Price, and Typical Price indicators added to `StockChart`. +- `valuePercent` was added to `Hierarchy` data items. Indicates percent value based on the value of its direct parent. + +### Fixed +- Using relative height of the chart container within a fixed-width wrapper could cause flickering or scrollbars. +- Period values in a `StockChart` indicators were shown with decimal values. +- Fixed a typo in `StockChart` list controls. +- `valuePercentTotal` was not working in `Hierarchy` data items. + + +## [5.2.20] - 2022-09-05 + +### Added +- All indicator series will now have `"indicator"` theme tag set. Detect indicator series via `series.hasTag("indicator")`. +- `autoZoom` added to `ValueAxis` (default: `true`). If set to `false`, the axis won't be auto-zoomed to a selection (this works only if the other axis is a `DateAxis` or a `CategoryAxis`). This setting will be ignored if both X and Y axes are a `ValueAxis`. +- `StandardDeviation` indicator added. + +### Changed +- Series edit modal on a `StockChart` would show incorrect controls if the main chart series was a `LineSeries`. + +### Fixed +- Initial sizing of HTML tooltips fixed (again). +- Exporting a chart in a `
` with `height: auto` was not working properly. +- If a point in a `LineSeries` was way out of bounds (million times further than the bounds of plot area), the line could disappear. +- In some cases, if chart was using loadable fonts, it could go into non-stop flickering mode. +- `StockChart` with drawing mode disabled could start drawing new objects if clicked on points of an old drawing. +- `PointedRectangle`, mostly used by a `Tooltip` was drawn incorrectly if its stem size was bigger than height. +- Removing a `QuadrantLineSeries` drawing from a `StockChart` resulted an error. +- It was impossible to delete `Fibonacci` or `FibonacciTimezone` drawings one by one after switching to another drawing tool. + + +## [5.2.19] - 2022-08-26 + +### Added +- `geoPoint()` method added to `MapChart`. Returns a geoPoint of the current the center of the map viewport. +- `pancancelled` event added to `XYChart`. It will kick in if pointer is pressed down and released without moving. `panended` event will still kick in. +- `originalEvent` added to `panstarted`, `panended`, and `pancancelled` events. + +### Fixed +- Tooltips were not working properly on an `XYChart` if they were placed in a separate root element. +- If an `XYChart` with a `CategoryAxis` had series with missing values, zooming to the part of a series with no data caused value axis not to zoom according to the selection. +- HTML-based tooltips were leaving a visible (albeit transparent) DOM element after tooltip was hidden. +- Clear and erase buttons were not clearing/erasing all the drawings of StockChart properly. + + +## [5.2.18] - 2022-08-24 + +### Added +- `disabled` key support added to `DropdownList` item interface. + +### Fixed +- Removed leftover debug code in `IndicatorControl`. +- `selected` event in `IndicatorControl` was not firing. +- Adding an adapter on Y-axis' labels could cause flickers on the chart. +- `maxWidth`/`maxHeight` of a `Container` was ignored when arranging objects by Horizontal or Vertical layout. +- `maxWidth`/`maxHeight` of a `Container` was ignored when drawing background. + + +## [5.2.17] - 2022-08-17 + +### Added +- `IndicatorControl` setting `indicators` now accepts objects. [More info](https://www.amcharts.com/docs/v5/tutorials/creating-custom-indicators-for-a-stock-chart/#Adding_to_toolbar). +- `getArea()` method added to `MapChart`. Returns area of a `MapPolygon` in square pixels. + + +## [5.2.16] - 2022-08-16 + +### Changed +- A clicked `PeriodSelector` button will now stay highlighted until other button is clicked, or chart is zoomed in any other way. +- `SpriteResizer` class moved to main package. It's now accessible via `am5.SpriteResize`. + +### Fixed +- Better initial sizing of HTML-content tooltips. +- `MapChart` pan bounds were incorrect after size of a chart's div changed significantly. +- If a panel with a volume series of `StockChart` or volume series itself was removed, adding indicators after this was resulting in an error. +- On a chart with a `CategoryAxis` and series with non-consistent data, some data items might become invisible in some cases. +- Removing a point from `MapPointSeries` was not affecting the `MapLineSeries` with lines that had this point in their `pointsToConnect` setting. +- A `Label` rotated at `-90` angle was not being properly hidden as per `oversizedBehavior: "hide"`. +- Opening a settings modal from `StockLegend` would cause chart to be panned/zoomed when modal was claused. + + +## [5.2.15] - 2022-08-06 + +### Added +- Added `PicturePattern` that allows using external images as patterns. [More info](https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Image_patterns). + +### Fixed +- Fixing issue where chart scrollbar would break when zooming. +- Fixing chart being too large and overflowing when zooming in ([Issue 471](https://github.com/amcharts/amcharts5/issues/471)). +- `pan:"zoom"` was not working on left-side Y Axis. +- Removing a panel from a `StockChart` was not removing indicator from charts `indicators` list. +- Zooming chart with custom timezone was resulting in errors in some cases. + + +## [5.2.14] - 2022-07-23 + +### Added +- New setting `keepTargetHover` added to `Tooltip` (default: `false`). If set to `true`, hovering the tooltip will be treated like hovering its target element itself. + +### Fixed +- Removing `verticalScrollbar` from a `Container` was causing some issues. +- Labels with HTML content and horizontal padding were not being sized/centered properly. +- Date formatting code "EEEE" was producing weekday's short version ("Tue") instead of full one ("Tuesday"). +- `Scrollbar` was not working after it was zoomed and clicked on a background to change position, if no animated theme was used. +- Paused animations will no longer obstruct chart export. + + +## [5.2.13] - 2022-07-19 + +### Fixed +- Only HTML content will be shown on a `Label` with both `text` and `html` set. +- HTML content will now respect `padding*` settings. +- `"click"` event now works on an element that uses HTML content. +- `snapToSeries` of `ChartCursor` was not working if target series had only one data item. +- Labels of a `PieSeries` were being arranged incorrectly when pie was a semi-circle and `alignLabels` was set to `true`. +- `ForcedDirected` and `Tree` charts were not working properly with `BreadcrumbBar` navigation. + + +## [5.2.12] - 2022-07-18 + +### Fixed +- HTML content in tooltips was not being resized properly. + + +## [5.2.11] - 2022-07-18 + +### Added +- A new setting `deactivateRoot` (default: `true`) added to `Modal`. Indicates if any interactivity on the underlying chart should be disabled when modal is open. +- A new setting `html` added to `Container`. Set it to a string with HTML to be used as container's content. Will work on any element inheriting from `Container`, e.g. `Label`. [More info](https://www.amcharts.com/docs/v5/concepts/common-elements/html-content/). +- A new setting `labelHTML` added to `Tooltip`. If set, will ne used as HTML content for the tooltip. [More info](https://www.amcharts.com/docs/v5/concepts/common-elements/html-content/). +- A new setting `tooltipHTML` added to `Sprite`. If set, will ne used as HTML content for the tooltip when element is hovered. [More info](https://www.amcharts.com/docs/v5/concepts/common-elements/html-content/). +- `wheelZoomPositionX` and `wheelZoomPositionY` added to `XYChart`. This value is not set by default, but you can use it to fix wheel zooming, to the end (if you set it to 1) or to the start (0) or middle (0.5). In `StockChart`, it is set to 1 by default, as this is common practice in financial charts. +- "Volume-Weighted Average Price (VWAP)" indicator added to `StockChart`. + +### Changed +- Setting `id` setting when creating an object will not register it in `am5.registry.entitiesById` immediatelly, without waiting for the next frame. + +### Fixed +- `RadialGradient`'s `x` and `y` settings were being ignored. +- Labels as bullets with `oversizedBehavior` set were not being displayed properly in some cases. +- `DateAxis` with `startLocation = 0.5` and `endLocation = 0.5` and single value only was showing a really big date range. +- Resizing `PieChart` to a very small size with a legend positioned on the left or right could cause some anomaly in layout. +- Updating `CategoryAxis` data with less items than there was originally was causing old columns/bullets to be shown. +- Setting `verticalScrollbar` on `Container` to `undefined` to remove a previously set scrollbar was not working. +- On some rare cases, when all values of the series were the same or the difference was very small, ValueAxis could go into stackowerflow and hang the browser. + +## [5.2.10] - 2022-06-28 + +### Added +- `lineJoin` setting added to `Graphics` (default: `"miter"`). Possible values: `"miter"`, `"round"`, and `"bevel"`. [More info](https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/lineJoin). + +### Fixed +- `GaplessDateAxis` with one data item was not showing date label at all. +- Setting `colors` on a `ColorSet` will now properly reset all iterators, so that new color generation is consistent. +- If `data.setAll()` was called on a `MapSeries` with `geoJSON` set previously, objects from geoJSON would disappear. +- `PieSeries` was not keeping active slice pulled out when it was hidden and then shown up again. +- PDF export was not taking page orientation into account when auto-fitting an image. + + +## [5.2.9] - 2022-06-21 + +### Added +- New properties on `Root`: `tapToActivate` (default: `false`) - if enabled, requires to tap on chart pefore gesture-based functionality (zoom/pan) works, and `tapToActivateTimeout` (default: `3000`) - milliseconds of inactivity before chart becomes "inactive" for touch gestures. [More info](https://www.amcharts.com/docs/v5/getting-started/root-element/#Touch_related_options). + +### Changed +- If there are no pan/zoom functionality set on charts, they should not prevent scrolling of the page by touch anymore. +- Bullets will no longer knock off user-set `maxWidth` on their `sprite` element. + +### Fixed +- `DateRangeSelector` was not updating its label correctly when dates were picked. +- `LineSeries` with `templateField` and a lot of data items could cause chart to crash. + + +## [5.2.8] - 2022-06-15 + +### Added +- Private (read-only) setting `tooltipPosition` added to `Axis`. +- `"line-through"` label decoration added. Works both via `Label`'s `textDecoration` setting, and in-line, e.g. `This is [line-through]a crossed out text[/]`. +- `autoScale` (default: `false`) setting added to `MapPointSeries`. If set to `true`, bullets will resize together with a map while zooming. +- `PieSeries` and `FunnelSeries` now properly support bullets. + +### Fixed +- Changing randius or innerRadius on a PieChart was not working. +- Changing legendValueText or legendLabel text on PercentSeries was not working. +- `exportfinished` event was not kicking in. +- Exporting plugin will now try to finish any ongoing rendering before genrating export image. +- Using mouse wheel on a non-chart element that is positioned over the chart works properly now. +- If some non-chart element was rendered over `Scrollbar`, doublicking on a thumb area would still zoom it out. +- Adding `click` event to an `XYChart` was causing it to pan a little when clicked. + + +## [5.2.7] - 2022-06-07 + +### Added +- `minDistance` to `LineSeries` (default: 0). If set, it will skip line points closer than X pixels, resulting in a smoother, less cluttery line. +- `isVisibleDeep()` method to `Sprite`. Check not only if `Sprite` itself is visible, but also its all ascendants. + +### Changed +- TAB press should now skip over focusable elements of hidden series. + +### Fixed +- Toggling `PieSeries` `alignLabels` after the chart was initialized was not working. +- Fixing bug where the wheel event would sometimes not trigger. +- When setting `stockSeries` with a new series on `StockChart` it was not inheriting `stockPositiveColor`/`stockNegativeColor` values. +- Tweaked default `StockToolbar` CSS to act better on pages with larger font sizes. +- DOM elements for focusable series items (columns, bullets, etc.) were being left behind when data for series was updated. +- Exporting chart to image was not inheriting document styles properly. +- If stock series increase/decrease colors were changed and then a series type was changed, new series used to reset colors and not use the ones user set. +- Dynamically changing page-wide font-related CSS (e.g. via media queries) could cause visual anomalies on the chart, especially on axes. + + +## [5.2.6] - 2022-05-25 + +### Added +- `nodePadding` added to `Pack`. +- `maxTooltipDistanceBy` with possible values `"x"`, `"y"`, and `"xy"` added. Indicates how distance from mouse pointer to the tooltip point should be measured when comparing with `maxTooltipDistance`. + +### Fixed +- Exporting chart image was creating leftover canvas elements in the body of the document. +- Further improvements in `DateAxis` performance with grouping and timezone enabled. + + +## [5.2.5] - 2022-05-19 + +### Fixed +- When timezone was set, grouping days into weeks could produce some unexpected results. +- `GaplessDateAxis` first date of a month sometimes could go before the grid of a month. +- Improved performance with data grouping enabled on `DateAxis`, especially when timezone was set. Please note that using timezones will still affect the performance significantly. + + +## [5.2.4] - 2022-05-17 + +### Added +- `handleWheel()` method added to `XYChart`. Use it to mirror the same behavior as if the wheel was used on plot area. +- `useDefaultCSS` (default: `true`) setting added to `DateRangeSelector`. +- `inversed` added to `Tree` series. If set to `true`, will flip the direction of the tree. + +### Fixed +- `StockToolbar` default CSS was using unnecessarily high `z-index` for its buttons. +- `StockToolbar` datepicker's style was off in some cases. +- `GaplessDateAxis` could display the same month name label two times in a row in some cases. + + +## [5.2.3] - 2022-05-12 + +### Changed +- Upgraded versions of `pdfmake` and `xlsx` dependencies. +- Reseting `x` and `y` of the `ForceDirectedSeries` data item will make the node be not ifxed anymore. +- Tweaked styles of `StockToolbar` controls to work better with theme colors. + +### Fixed +- Enclosing multi-word parameters in in-line styles were not working. +- `DateAxis` was producing an error if series had no initial data and timezone was set on a root element. +- Vertically-stacked Y-axes was incorrectly plotting related series with Y-axis set as base axis. + + +## [5.2.2] - 2022-05-03 + +### Fixed +- Style issue with stroke style selection button in `StockChart` drawing mode. + + +## [5.2.1] - 2022-05-03 + +### Added +- `centerMapOnZoomOut` setting added to `MapChart` (default: `true`). Means the map will center itself (or go to `homeGeoPoint` if set) when fully zoomed out. +- `getGroupInterval(duration)` method added to `DateAxis`. Returns a time interval axis would group data to for a specified duration. +- `getIntervalMax(interval)` and `getIntervalMin(interval)` methods added to `DateAxis`. These methods return `min` and `max` of a specified time interval. + +### Changed +- Axis fills on a `StockChart` are now not visible by default. +- All `Chart` elements now have `interactiveChildren: true` set by default, so that adding events on a chart does not automatically make all elements in it interactive. +- Zooming out `MapChart` using mouse wheel will now auto-center the map by default. Set `centerMapOnZoomOut: false` to bring back old behavior. + +### Fixed +- Changing `inside` and `opposite` of `AxisRendererX` or `AxisRendererY` after the axis was already initialized was not working properly. +- `StockChart`'s' period selection buttons were not zooming to exact dates when data grouping of an X-axis was turned on. +- `StockChart`'s' series type switcher was not switching series properly when data grouping was enabled. +- `StockChart`'s' series type switcher was not switching series properly when comparing mode was on. +- If a `StockChart` was in percent scale mode, adding an indicator which was not on a separate panel was resulting in the indicator using wrong scale. +- Fixed week number calculation (again). +- Fixed CSS of `StockToolbar` for FireFox. +- Pinch-zoom of `MapChart` was ignoring `minZoomLevel` and `maxZoomLevel` settings. + + +## [5.2.0] - 2022-04-29 + +### Added +- Initial (beta) version of `StockChart` added. Check [documentation](https://www.amcharts.com/docs/v5/charts/stock/) and [product info](https://www.amcharts.com/stock-chart/). + +### Fixed +- Week numbers for "leap weeks" were not being formated properly. +- Removing an axis range with a bullet was not removing the bullet itself. +- If one of the series had less data than another and their date axis had data grouping enabled, data of a series with less values could be not grouped. +- `ColumnSeries` was not coloring its legend marker initially if `useLastColorForLegendMarker` was `true`. +- Hovering on `ExportingMenu` was permanently disabling chart interactivity. + + +## [5.1.14] - 2022-04-22 + +### Fixed +- `ValueAxis` with a logarithmic scale was not showing some of the labels in some specific cases. +- Moved `zoomOutButton` of `XYChart` to `topPlotContainer` to solve unwanted zoom when cursor's `snapToSeries` was set. +- Initially-hidden series legend markers were not being dimmed out unless Animated theme was in use. +- When whole series was out of selected scope, its last or first value (depending on seleciton) was still included when calculating min and max, causing chart not to adjust min/max values to a visible series scope. +- `Annotator` was not disabling chart interactivite when activated in Firefox. + + +## [5.1.13] - 2022-04-15 + +### Added +- `useLastColorForLegendMarker` setting added to `BaseColumnSeries` (applicable to all column-based series like `ColumnSeries`, `CandlestickSeries`) +- `geodataNames` setting added to `MapSeries`. Allows setting translations to map features, e.g. countries. [More info](https://www.amcharts.com/docs/v5/charts/map-chart/map-translations/). +- Read-only private setting `gridInterval` added to `DateAxis`. + +### Fixed +- If geoJSON contained multipolygons with just one polygon, hovering over polygon was resulting in a JS error. +- `DateAxis` displayed wrong time when time was switching to DST, when a timezone was set on a `Root` element. + + +## [5.1.12] - 2022-04-07 + +### Fixed +- Rounding a Date during daylight saving hour could produce incorrect result in some specific cases. + + +## [5.1.11] - 2022-04-06 + +### Added +- `groupDataWithOriginals` and `groupDataCallback` settings added to `XYSeries`. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/axes/date-axis/#Custom_aggregation_functions). +- `strictMinMaxSelection` setting added to `ValueAxis`. When set to `true`, the axis won't round `min` and `max` of a selection to the nearest round values, but will use actual min and max (`extraMin` and `extraMax` will still be added if set). This is a good feature when your series displays not actual but derivative values, like `valueYChangeSelection` as it helps to avoid frequent jumping of series to adjusted min and max of the axis. + +### Changed +- Internal layout of `XYChart` containers was changed. `plotContainers` now goes to `yAxesAndPlotContainer`, and `plotContainer` and `topPlotContainer` goe into `plotContainers`. + +### Fixed +- If `XYChart` was used without animated theme, and scrollbar's background was clicked to zoom to some specific spot, it resulted in scrollbar not being updated anymore when zoomed with wheel or zoom-out button. +- Fixed and issue where nodes of `ForceDirected` series were flickering to 0,0 point when div of a chart was resized. +- Fixed potential XSS injection issue with the accessibility of tooltips. +- `container` setting in `ExportingMenu` was being ignored. +- In some specific cases not all series were included in min/max calculation of a `ValueAxis` resulting not all series to be visible. +- When whole series was out of selected scope, its last or first value (depending on seleciton) was still included when calculating min and max. +- Layouts were allocating space for margins of hidden items. + + +## [5.1.10] - 2022-03-30 + +### Added +- New in-line text formatting property `verticalAlign` added. Currently supports only `"super"` and `"sub"` values. E.g. `Copyright[fontSize: 8px; verticalAlign: super;]TM[\]`. + +### Changed +- Logarithmic scale on `ValueAxis` was revamped with a different approach. No changes from the configration, but might influence appearance/scale. +- When calculating derivative values for series, `low`, `high`, and `open` used previous `low`, `high`, and `open` values. Now they all use `value` instead. +- Updated to D3 v7. + +### Fixed +- In some cases, using a text placehodler, an empty string was shown insteaf of a zero. +- Some grid container masking issues fixed. +- Sometimes `valueAxis` was zoomed-in a bit on the first render of an `XYChart`. +- Axis ranges with `dRadius > 0` were not visible on `RadarChart`. +- Dynamic change of `value*Show` fields of an `XYSeries` was not working. +- Removing data from a legend could lead to JS errors in some particular cases. +- Ghost label was creating a gap in an `XYChartScrollbar` between scrollbar bottom an scrollbar series. + + +## [5.1.9] - 2022-03-17 + +### Fixed +- Fixed the issue with resizing a chart inside of a flexbox. ([Issue 311](https://github.com/amcharts/amcharts5/issues/311)) +- Fixed jumpy axis when panning an `XYChart` with mouse wheel. +- Panning XYChart with mouse wheel had incorrect direction if axis was inversed. +- If axis range had a gradient fill, gradient used to spread only through visible area, making it look icorrect. +- After pinch zooming and `XYChart` or zooming the chart with no animated theme used, CPU usage used to increase. +- `DateAxis` with `baseIntervals` `timeUnit` set to `"month"` could show incorrect month in the axis tooltip. +- If a `Graphics` had a gradient `fill`/`stroke` and initially was invisible, setting it to visible did not make the gradient to appear. +- While zooming `LineSeries`, a part of the line to the left of the first visible data point could disappear. + + +## [5.1.8] - 2022-03-10 + +### Added +- Settings `pinchZoomX` and `pinchZoomY` (defaults: `false`) added to `XYChart`. If set to `true` will allow pinch-zooming of a chart on touch devices. NOTE: these settings are not supported on `RadarChart`. +- `topPlotContainer` added to `XYChart`. It's a `Container` that can be used to place element over plot area. + +### Changed +- The types for adapters has been changed to be more intuitive and useful. ([Issue 312](https://github.com/amcharts/amcharts5/issues/312)) +- Tapping an element on a touch device will now generate `pointerover` event in addition to `click`. When tapped somewhere else, `pointerout` event will be triggered. + +### Fixed +- Fixing ES6 module detection by BundlePhobia again ([Issue 294](https://github.com/amcharts/amcharts5/issues/294)). +- Pinch-zooming of a `MapChart` was not working well in some cases. +- `maxHeight` setting in `Sprite` was not working. +- Change of `minWidth` was not being applied at once, only if some other changes triggered chart to be redrawn. +- Changing or not setting data on an existing `FlowChart` was resulting in a JS error. +- `maxPanOut` setting in `MapChart` was not working. + + +## [5.1.7] - 2022-02-28 + +### Fixed +- Grouping to periods where `timeUnit` was `"day"` and `count > 1` was not working properly. +- When tooltips of multiple series were pointing at the same point, series order was not being respected (FF only). +- If a scrollbar was added before axes, scrolling series could result series to be out of sync with bullets. +- Tweaked `nb_NO` locale to better correspond to Norwegian Bokm? date formats. + + +## [5.1.6] - 2022-02-23 + +### Fixed +- Totals were not calculated until some interaction with `XYChart` chart if data was grouped initially. +- When tooltips of multiple series were pointing at the same point, series order was not being respected. +- Reverting "Fixing ES6 module detection by BundlePhobia" from 5.1.5 which was causing issues. + + +## [5.1.5] - 2022-02-22 + +### Added +- `minSize` setting added to `Flow` (`Chord` and `Sankey`) series. It's a relative value to the sum of all values in the series. If set, this relative value will be used for small-value nodes when calculating their size. For example, if it's set to `0.01`, small nodes will be sized like their value is 1% of the total sum of all values in series. + +### Changed +- Direction of vertical panning with mouse wheel in an `XYChart` was inverted to make it consistent with OS native scrolling direction. + +### Fixed +- Fixing ES6 module detection by BundlePhobia ([Issue 294](https://github.com/amcharts/amcharts5/issues/294)). +- Parsing of dates using `"i"` format was not working properly when no milliseconds were supplied. +- Using `minZoomCount` and `maxZoomCount` on a `GaplessDateAxis` was not working properly. +- Sometimes vertical `XYChart` scrollbar was not reacting to chart's pan via mouse drag or wheel. +- Using mouse wheel on a chart that was setup to pan was also zooming in/out in addition to pan. +- In some cases grid on `GaplessDateAxis` was not being placed properly. Grid and Label placement improved. +- `ForceDirectedTree` could freeze when used with Animated theme in some cases. +- Changing of baseInterval on DateAxis was not properly working in some cases. +- In some cases, when no animated theme was used, a state on a Sprite was not applied. +- Setting data on `MapSeries` after `geoJSON` was updated was not working properly which resulted heat rules not to be applied. +- It was difficult to make a selection close to the start/end of plot area on `RadarChart`. +- When `XYChart` was fully zoomed in, using mouse wheel would start panning the chart instead of zoom. + + +## [5.1.4] - 2022-02-11 + +### Added +- `affectsMinMax` added to value axis range. +- `segments` property added to `Line` class. Allows passing multiple segments instead of continous line. +- `tooltipIntervalOffset` setting added to `DateAxis`. If not set, axis' tooltip will use value of the `-tooltipLocation` (cell start timestamp by default), so that tooltip would should rounded value, like 06:00 instead of 06:30 when interval is hourly. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/axes/date-axis/#Axis_tooltip). +- `tooltipDateFormats` setting added to `DateAxis`. Allows specifying axis' tooltip date formats for time each time unit, different from `dateFormats`. NOTE: `tooltipDateFormat` will override the format if set. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/axes/date-axis/#Axis_tooltip). +- `syncWith` setting added to `XYCursor`. Set it to an array of other `XYCursor` objects to automatically position them as the cursor moves. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/#syncing-cursors). + +### Changed +- Default tooltip date formats have changed slightly for `DateAxis`. Previously, it was using formats from `dateFormats`. Now it uses defaults/user values from newly-introduced `tooltipDateFormats` setting. + +### Fixed +- In some cases `DurationAxis` with "second" as its base duration was going to stack overflow. +- Background on a `ValueAxis` was not showing. +- Improved performance for charts with lots of stacked series with null. +- Fixing mouse position when using `transform: scale` or `zoom` ([Issue 258](https://github.com/amcharts/amcharts5/issues/258)). +- Some touch interactions were not working in iOS 12. + + +## [5.1.3] - 2022-02-03 + +### Added +- Added second parameter to `Root` constructor which contains settings object. For now, there's only one setting: `useSafeResolution` (default: `true`). [More info](https://www.amcharts.com/docs/v5/getting-started/root-element/#settings). + +### Fixed +- Dynamic data updates on `MapPolygonSeries` were not working in some cases. + + +## [5.1.2] - 2022-02-01 + +### Added +- `"x!"` and `"y!"` options added to `XYCursor`'s `snapToSeriesBy` setting. Setting it to `"y!"` will make cursor will choose the nearest data point to snap to by measuring only +vertical distance and looking at the data items which are at the current X axis position (date or category). The same applies for `"x!"`. +- `tooltipDataItem` setting added to `XYSeries`. It's a read-only reference to a data item which series tooltip currently uses. + +### Fixed +- `LineSeries` legend markers' stroke was not using series' color if `series.appear()` was called after series was initialized. +- `LineSeries` legend marker wasn't working properly if legend was using different `Root` element. +- Better disposing of `` elements to work around iOS Safari GC bug. + + +## [5.1.1] - 2022-01-31 + +### Added +- New method `remove(key)` on Template's adapaters. +- Each chart-type package now exports its default theme as `DefaultTheme`. E.g. `am5xy.DefaultTheme`, `am5flow.DefaultTheme`, etc. +- TypeScript: Settings interfaces for all objects are now being exposed via bundled re-export files like `index.ts`, `xy.ts`, etc. +- New class `am5.Modal`. +- New `Container` setting: `reverseChildren`. If set to `true`, will start rendering from the last child, effectively flipping the order in how children of the cotainer are laid out. Useful for [right-to-left setups]( +https://www.amcharts.com/docs/v5/concepts/locales/right-to-left-support/). + +### Changed +- Charts on iOS devices will now automatically use lesser resolution to work around canvas memory restriction introduced in iOS 15 Safari. +- Charts will now use less built-in layers, and thus less `` elements by default, reducing memory consumption. +- All low/high-related settings and fields moved from `CandlestickSeries` to `XYSeries`. Sometimes it could be useful to have low/high on other series even if they are not shown visually. + +### Fixed +- `XYCursor` was not being hidden when its `positionX` or `positionY` was changed to `undefined` and `alwaysShow` was set to `false`. +- Auto-wrapped right-aligned labels were being rendered in wrong position. +- Auto-wrapped labels were not being trimmed for whitespace on each line. +- `dropFromPrevious` and `riseFromPrevious` states on `ColumnSeries` were not working properly on a column after a gap in data in case previous data item was outside of selection. +- Emoji characters were not being displayed on circular labels. + + +## [5.1.0] - 2022-01-20 + +### Added +- New `Root` setting: `timezone`. E.g. `"America/Vancouver"`, `"Australia/Sydney"`, `"UTC"`. +- New export CSV option: `addBOM` (default: `true`). Indicates whether to add BOM characters at start of CSV output so that data viewer (e.g. Excel) knows we're exporting UTF-8 data. +- New methods for `Adapters`: `remove(key)`, `disable(key)`, and `enable(key)`. +- `GaplessDateAxis` added. It's a version of `DateAxis` that removes data-less intervals from its scale. `CategoryAxis` is being deprecated in favor of `GaplessDateAxis`. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/axes/gapless-date-axis/). +- Timezone support added. [More info](https://www.amcharts.com/docs/v5/getting-started/root-element/#Time_zone). +- New `Component` method: `markDirtyValues()`. Will re-evaluate elements of the component that are data-reliant, such as axis labels. + +### Fixed +- Clearing axis ranges from Axis and Series was not working properly. +- Slice with negative arc was ignoring `cornerRadius` property. +- `groupDataDisabled` on `XYSeries` was not working if set to `true`. +- Axis header was not updating its position if axes were stacked and size of an axis was updated. +- Disposing of charts with a lot of elements was quite slow. +- Series stacks with all-zero values could cause all stacks to disappear on zoom. + + +## [5.0.21] - 2022-01-11 + +### Added +- New `Sprite` setting: `forceInactive`. If set to `true`, it will override `interactive` setting as well as ignore any interaction events set on the element. +- `cursorhidden` event added to `XYCursor`. Dispatched when user rolls-out of the chart plot area and cursor is hidden. +- New `Component` method: `markDirtyValues()`. Forces a repaint of the element which relies on data. + +### Changed +- Value (4th parameter of the Heat rule's `customFunction`) will now receive actual value of the target data item, not interpolated calculated setting value. + +### Fixed +- Fixing bug when not passing the duration to the `animate` method ([Issue 181](https://github.com/amcharts/amcharts5/issues/181)). +- Horizontal and vertical layouts with `width`/`height` set in percents plus `minWidth`/`minHeight`/`maxWidth`/`maxHeight` set were arranging items incorrectly. +- Very small slices with `cornrerRadius > 0` were being drawn as a full circle. +- `SliceGrouper` with was not zooming out properly if there was no legend in chart. +- changing `groupData` from `false` to `true` on DateAxis was not working when doing so after the chart was built. + + +## [5.0.20] - 2021-12-30 + +### Fixed +- `SliceGrouper` with `clickBehavior = "zoom"` was not zooming out properly. +- `GridLayout` could leave empty gaps if some of the items in it were hidden. +- dragging sprites within rotated containers was not working properly. +- Null value was breaking stacking of columns in some cases. +- Fixing tooltips being broken inside of shadow DOM. ([Issue 166](https://github.com/amcharts/amcharts5/issues/166)) + + +## [5.0.19] - 2021-12-27 + +### Added +- `groupDataDisabled` setting added to XYSeries. If set to `false` will exclude series from data grouping mechanism, even if it is enabled on related `DateSeries`. +- New plugin `SliceGrouper`. Can be used to automatically group small slices on percent charts like Pie, Funnel, etc. [More info](https://www.amcharts.com/docs/v5/charts/percent-charts/grouping-slices/). + +### Fixed +- If data was added to percent series after initial data was already processed, the bew slices would get colors from the start of the color set. +- Multiple square bracket and apostrophe escaping was not working properly. +- A JS error could occur when changing `XYSeries` data with less data items then there were before. +- `PieSeries` were not arranging its labels properly in some cases. +- `XYCursor` taps were not working properly after chart zoom on touch devices. + + +## [5.0.18] - 2021-12-19 + +### Changed +- When auto-wrapping labels, text will no longer break on dots to prevent fractional numbers from wrapping. +- Scrollable `Container`'s scrollbar will auto-hide if contents fit in it without scrolling. + +### Fixed +- Disabling click-toggling of legend, was disabling hover events, too. +- `ResponsiveTheme`'s custom rules were not working properly. +- `Exporting` was not applying proper background color to exported images. +- `CategoryDateAxis` grid and labels placing algorithm improved. +- Sometimes bullets of XYChart were not being properly clipped by the bounds of the plot area. +- Memory leak related to: https://bugs.chromium.org/p/chromium/issues/detail?id=1279394 was fixed. + + +## [5.0.17] - 2021-12-15 + +### Fixed +- `WordCloud` was not coloring words even if colors ColorSet was set or data with colors was used. +- `WordCloud` was not showing anything if all words had the same weight. +- Adding `type` and `main` fields to `package.json`. +- Fixed scrollbar issue with non-animated theme where clicking on a background of a scrollbar would not move to target position. + + +## [5.0.16] - 2021-12-10 + +### Added +- `tooltipPositionX` and `tooltipPositionY` added to `XYSeries` (possible values: `"value"`, `"open"`, `"low"`, and `"high"`). Indicates which data item value tooltip should be anchored to. +- New settings added to `Exporting` for formatting durations: `durationFields`, `durationFormat`, and `durationUnit`. +- `showTooltipOn` (default: `"hover"`) added to `Sprite`. Another option is `"always"` which will show tooltip without any interaction with the element. [More info](https://www.amcharts.com/docs/v5/concepts/common-elements/tooltips/#Sticky_tooltips). + +### Changed +- `Hierarchy` will now set bottom-level node's `cursorOverStyle: "default"` via theme, instead of hardocding it, so that it can be overridden via node templates. + +### Fixed +- Stacked `XYSeries` with missing values and `valueYShow` set to `"valueYTotalPercent"` or `valueXShow` set to `"valueXTotalPercent"` were not showing columns/lines. +- Changing legend position from bottom/top to right/left was not arranging elements properly. +- If `Slice` of a `PieSeries` had a `templateField` set, legend marker was not using all the settings of that slice properly. +- Bullets were causing performance issues when data grouping was turned on. +- `Label` underline was not inheriting label's color properly. +- `Label` underline was not beign placed properly on center/right-aligned labels. + + +## [5.0.15] - 2021-12-07 + +### Added +- Experimental support for underlined text added. Can be enabled via `Label` setting `fontDecoration: "underline"`, or via in-line style block (`[underline]`). +- Three new accessibility settings added: `ariaControls`, `ariaValueMin`, and `ariaValueMax`. + +### Changed +- Focus elements used for accessibility are now enclosed in a container with `role="application"` which helps avoid "scan mode" in some screen readers. +- Tapping outside chart will now hide `XYCursor`. + +### Fixed +- Sometimes `XYCursor` would stay on pointer moved out of chart area quickly. +- Fixed memory leak. +- Arabic text (and possibly other RTL languages) was not being displayed right on circular labels, even with `direction = "rtl"` set. +- Arabic text (`direction = "rtl"`) was being misplaced in tooltips. +- New line was resetting current in-line text style. + + +## [5.0.14] - 2021-12-01 + +### Changed +- When setting `markerState` on `Annotator` it will now automatically render annotations without the need to open annotation mode. + +### Fixed +- Updating data dynamically on series in all-`ValueAxis` setups. +- Rmoving axis range was not working properly. +- Closing annotation mode would not make chart regain its interactivity. + + +## [5.0.13] - 2021-11-25 + +### Added +- `clickTarget` (possible vales: `"itemContainer"` (default), `"marker"`, and `"none"`) added to `Legend`. Use `clickTarget: "none"` to disable toggling of legend items. + +### Changed +- Setting `wheelX`/`wheelY` on `XYChart` or `MapChart` no longer marks their plot areas as `wheelable`. + +### Fixed +- In some cases using `oversizedBehavior = "wrap"` on labels in super small spaces the chart would hang. +- Updating data on a `ForcedDirectedTree` may cause JS errors. +- Hovering legend item of a hidden slice no longer tries to show the tooltip for it. +- Drill-down maps were displaying country in a wrong position after drill-down. + + +## [5.0.12] - 2021-11-24 + +### Added +- `latitudeField` and `longitudeField` added to `MapPointSeries` for an easier way to add data. + +### Changed +- Tooltip arrangement algorithm with many XY series was improved. + +### Fixed +- Axis fill rule of `DateAxis` sometimes skipped an interval or was drawn two fills in a row. Also, with months as interval between grids, the end of the fill was not at exact position where it should have been. +- When setting new data for a series, if new data has less items than series had before, a JS error could occur. + + +## [5.0.11] - 2021-11-23 + +### Added +- New `fps` property on `Root` which defines the maximum FPS that it will run at. Set it 30 or lower if performance is an issue. +- `"range"` theme tag is now added to all axis range elements (axisFill, grid, tick and label) so you could target specific theme rules. +- `"range"` and `"series"` theme tag is now added to all series axis range elements (axisFill, grid, tick and label) so you could target specific theme rules. + +### Changed +- A `axisFill` of an axis range will not be shown unless its `visible: true` setting is set. + +### Fixed +- Adapter for `text` of a `Label` was not kicking in when data item of its `Tooltip` (or other parent of a Label) was changed. +- Legend marker/label was not returning to a default state when clicked on a disabled item in some cases when Animated theme was not used. +- Axis range fill tooltip was being shown in a wrong position. + + +## [5.0.10] - 2021-11-22 + +### Fixed +- `LineSeries`' strokes in an axis range were using wrong template, which could result incorrect colors or other settings (since 5.0.9). +- When data was updated on a live chart and the chart was not fully zoomed-out, some unnecessary Y axis animation used to happen after data update. + + +## [5.0.9] - 2021-11-22 + +### Changed +- `maxTooltipDistance` in `XYCursor` now accepts `-1` value, which means that only single tooltip will be shown, even if multiple data items share the same value. + +### Fixed +- `GraticuleSeries` was broken. + + +## [5.0.8] - 2021-11-21 + +### Changed +- Trying to create a `Root` in a container that already contains a chart will result in a hard error now. +- All `XYSeries` now use both main template and axis range template (the latter has a priority) when decorating columns/lines/etc for the sections covered by axis range. + +### Fixed +- Axis fills were not working properly. +- Since 5.0.6: Map was zoomed to incorrect position in some specific cases when `goHome()` method was called. + + +## [5.0.7] - 2021-11-19 + +### Added +- New setting `pan` (default: `"none"`) added to `AxisRendererX` and `AxisRendererY`. If set to `"zoom"` will enable zoom of axis scale by dragging in axis label area. + +### Changed +- Heat rules will not longer apply setting value if target data item does not have any numeric value. +- Hovering legend item will now simulate hover on related item on some charts (e.g. `PieSeries`, `Hierarchy`, `Venn`). + +### +- `HeatLegend` was acting out when its `showValue()` method was called with non-numeric parameter. +- If series was pre-hidden before chart init, its status was not being correctly reflected in related legend item. +- Locales in script version were not working properly. + + +## [5.0.6] - 2021-11-18 + +### Added +- Accessibility: new setting on `Sprite`: `focusableGroup`. If set, TAB key will iterate through first elements of each focusable group, allowing user to select within group using arrow keys. [More info](https://www.amcharts.com/docs/v5/concepts/accessibility/#Grouping_focusable_elements). +- New `Root` setting: `autoResize` (default: `true`). If set to `false`, the chart will not automtically resize itself when width/height of its container change. Use `resize()` method to resize manually. +- New `Root` method: `resize()`. Resizes chart to fit container dimensions, if automatic resizing is disabled (`root.autoResize = false`). +- Global `am5.p0` shortcut function added which returns `Percent(0)`. +- All element will now have a read-only property `root` which holds their `Root` object. +- New `Sprite` events: `rightclick` and `middleclick`. Please note that adding `rightclick` event will not disable possible contextual menu on right-mouse click. +- New `XYCursor` setting: `snapToSeriesBy` (default: `"xy"`). Defines in which direction to look when searching for the nearest data item to snap to. Possible values: `"xy"` (default), `"x"`, and `"y"`. + +### Changed +- If set `wheel` event will now fire even if `wheelable = false`. This allows capturing wheel events on elements without interfering with scroll of the document. + +### Fixed +- `oversizedBehavior` on `Label` (still) was not handling `maxWidth` and `maxHeight` values properly (since `5.0.2`). +- Dynamically updating `geoJSON` on a `MapPolygonSeries` was not working properly in some cases. + + +## [5.0.5] - 2021-11-15 + +### Added +- New root element method: `moveDOM()` (accepts element id or reference as a parameter). Can be used to move whole chart to some other container within DOM. + +### Fixed +- `ExportingMenu` was interfering with functionality of form elements on the same page (e.g. select). +- Fixed issues with text kerning with styling blocks mid-word. +- Animating values of `width`/`height` settings using percent values was not working properly. + + +## [5.0.4] - 2021-11-12 + +### Added +- `panstarted`, `panended`, and `wheelended` events added to `XYChart`. + +### Fixed +- Fixed `RadarChart` issues when it was being created in hidden container. +- `XYCursor` and `snapToSeries` problems fixed: was not working with `ColumnSeries`, and was not working properly with stacked axes. +- Adding/changing data on a `DateAxis` with `groupData = true` was not working properly. +- If non-rounded dates were used in data, `XYCursor`'s tooltips were flickering while moving cursor over plot area. + + +## [5.0.3] - 2021-11-09 + +### Fixed +- Incorrect sizing of a label in a central `Sunburst` node. + + +## [5.0.2] - 2021-11-09 + +### Added +- `radius()` and `baseRadius()` methods added to `RadialLabel`. Return `radius`/`baseRadius` value in pixels, calculated based on all the other settings. +- Global function `am5.ready()` added. Accepts a function as a parameter, which is executed when DOM is ready. + +### Changed +- `baseRadius` of `RadialLabel` can now accept Percent values. Previously this property was set internally, now user can set it to a number or percent value. + +### Fixed +- Stacking line series with missing data on some series was incorrect. +- `oversizedBehavior` on `Label` was not handling `maxWidth` and `maxHeight` values properly. + + +## [5.0.1] - 2021-11-05 + +### Fixed +- `XYChart` with panning enabled an no Animated theme was flickering while panning. +- JS error could occur sometimes if data was updated while cursor was moving over the chart. + + +## [5.0.0] - 2021-11-02 + +### Changed +- First public release. + + +## [5.0.0-beta.44] - 2021-11-02 (release candidate) + +### Added +- `Triangle` class added. +- `labelText` setting added to `Tooltip`. If set the text will automatically be applied to tooltip's label. + + +## [5.0.0-beta.43] - 2021-11-02 + +### Fixed +- Image resolution could get choppy when resized (since previous version). + + +## [5.0.0-beta.42] - 2021-11-01 + +### Added +- If a `Bullet` has `dynamic: true` set, its sprite size will be marked as dirty each time the bullet updates its position. +- Axis name added to `AxisLabel` when created so it could be targeted by axis type in theme rules. + +### Changed +- Upgraded to `marker.js` 2.16.2. +- `Annotator` new setting: `markerState`. You can use it to pre-set annotations, or grab annotation data at any time. +- Default text of an `AxisLabel` for `CategoryAxis` set to `"{category}"`. + +### Fixed +- `Picture` was not working properly in containers in a non-default layer. +- `locationX` or `locationY` was being ignored on `RadarLineSeries` in some specific cases. +- `Tooltip` as not coloring its text properly with "Dark" theme enabled. + + +## [5.0.0-beta.41] - 2021-10-31 + +### Added +- `dRadius` and `dInnerRadius` settings added to `Slice` (default: `0`). Allows tweaking `radius`/`innerRadius` values in charts where these settings are set by the chart (`PieSeries`, circular/radial axis fills, etc.). +- `adjustBulletPosition` added to `BaseColumnSeries` (default: `true`). If set to `false`, bullets will be positioned relatively to whole width/height of the column, rather then the portion that is currently visible. + +### Fixed +- `RadarChart` with `RadarLineSeries` could result a JS error when zoomed. + + +## [5.0.0-beta.40] - 2021-10-30 + +### Fixed +- `Label` setting `oversizedBehavior` was not working properly when heigh/with was 0. +- `XYSeries` was not calculating `maxWidth`/`maxHeight` properly on data items with negative values. +- Data grouping was not being applied when data was being updated after chart init. + + +## [5.0.0-beta.39] - 2021-10-29 + +### Changed +- All `MapChart`-related zoom methods will now return `Animation` object. + + +## [5.0.0-beta.38] - 2021-10-28 + +### Added +- `"depthX"` (`depth0`, `depth1`, etc.) tags added to Hierarchy Nodes. This allows targeting node items via theme rules by the level. + +### Changed +- A function that returns a Bullet can choose to return nothing, effectively ommitting bullet for the data item. +- `Picture` elements will no inherit interactivity from its parents. If image needs to be interactive it needs to be set so directly via `interactive` setting. +- `Picture` will now use source file's dimensions if neither `width` and `height` is set, and will also maintain aspect ratio if just one from `width` or `height` is set. + +### Fixed +- Better color generation and step management in `ColorSet`. + + +## [5.0.0-beta.37] - 2021-10-26 + +### Added +- Dataviz, Kelly, Moonrise, Frozen, Material and Spirited themes added. +- `seriesTooltipTarget` setting added to `XYSeries` (possible values: `"series"` (default) and `"bullet"`). If set to `"bullet"`, first bullet of a data item will be used for as a tooltip target, making it inherit bullet's color rather than series. + +### Changed +- `Scrollbar` grip buttons will now have `exportable: false` set by default, so that they are not exported to chart snapshots. +- `WordCloud` words are now sorted by value if data was set using `series.data`. + +### Fixed +- First label of the `WordCloud` could overlap with other words afer the data update. +- `ColorSet` was ignoring values set in a theme. +- Bullets with `Rectangle` or `RoundedRectangle` as a `sprite` were not being shown on an `XYSeries`. +- `MapChart` was overriding width/height variables to 100%. + + +## [5.0.0-beta.36] - 2021-10-25 + +### Added +- New chart type: Venn. [More info](https://www.amcharts.com/docs/v5/charts/venn/). +- New chart type: WordCloud. [More info](https://www.amcharts.com/docs/v5/charts/word-cloud/). + +### Changed +- `XYSeries` will now automatically set the first bullet of a data item as the series' `tooltipTarget`. This will make the series tooltip background to change color to +the bullet's fill. + +### Fixed +- Code optimizations to reduce size of core package by 10%. +- If data was being set for a `CategoryAxis` not instantly but after some time, the chart was not rendered properly. +- `svgPath` with `A` or `a` commands was not being rendered properly. + + +## [5.0.0-beta.35] - 2021-10-15 + +### Added +- New axis type: `DurationAxis`. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/axes/duration-axis/). +- New formatter type: `DurationFormatter`. [More info](https://www.amcharts.com/docs/v5/concepts/formatters/formatting-durations/). +- New `Root` element property: `durationFormatter`. Holds a global instance of `DurationFormatter` which is used by `DurationAxis`. +- `Annotator` tool added to `Exporting` plugin. [More info](https://www.amcharts.com/docs/v5/concepts/exporting/annotator/). + +### Fixed +- Circular labels with `inside = true` where not properly handling line-breaks. + + +## [5.0.0-beta.34] - 2021-10-13 + +### Added +- It is now possible to pass a custom draw methods for classes like `Rectangle`, `RoundedRectangle`, `Candlestick`, etc. This allows implementing completely custom look for those elements. + +### Changed +- Bullets on a `ColumnSeries` are now positioned vertically relative to visible part of the column, not the whole column. + + +## [5.0.0-beta.33] - 2021-10-12 + +### Fixed +- In-line data placeholder formatting functions were not being applied when referring directly to keys in data. +- If settings on a `DataProcessor` were set after it was created, they were being ignored when parsing data. +- In some cases tooltips were losing their background/outline unless Animated theme was enabled. +- In some cases tooltips for a hidden series were still showing. + + +## [5.0.0-beta.32] - 2021-10-08 + +### Changed +- `Exporting` plugin now imports minified version of `xlsx` library for XSLX data exports. +- Axis tooltips have now `animationDuration: 200` set automatically by Animated theme, so there's no need to set it in code anymore. + +### Fixed +- Charts with `CategoryAxis` + `DateAxis` were zooming incorrectly in some cases. + + +## [5.0.0-beta.31] - 2021-10-07 + +### Changed +- Axis will automatically add relative `themeTags` (e.g. `"axis"`, `"y"`, etc.) to a `Tooltip` when it is added. Setting `themeTags` manually is not required anymore. + +### Fixed +- An adapter for a setting was not being invoked if source value was `undefined`. +- Tooltips on vertically or horizontally stacked axes were being shown in wrong positions. +- Tooltip background displayed some artifact in some rare cases. + + +## [5.0.0-beta.30] - 2021-10-05 + +### Added +- `shadow*` settings are now available on `Label` as well. +- `arrangeTooltips` (default: `true`) setting added to `XYChart`. If set to `false` will disable tooltip overlap check algo. + +### Fixed +- Fixed type errors when importing maps (especially in Angular). +- Fixed `templateField` to override `template`. + + +## [5.0.0-beta.29] - 2021-10-01 + +### Added +- Wherever date or number format can be set (`DateFormatter`, `NumberFormatter`, `DateAxis`, `ValueAxis`, `Exporting`) it can now be set as `Intl.DateTimeFormatOptions` (for date format) or `Intl.NumberFormatOptions` (for number format) object in additional to string-based format. [More info](https://www.amcharts.com/docs/v5/tutorials/formatting-date-time-and-numbers-using-intl-object/). +- New list type `ListAutoDispose` added. + +### Changed +- `XYCursor` will now ignore mouse movement if chart is obstructed by other element, unless zoomin/panning. +- `series`, `xAxes`, and `yAxes` on an `XYChart` are now `ListAutoDispose`, which means that removing items from those lists will automatically dispose them. Set `autoDispose = false` on those lists if you are planning on removing and reusing items. + +### Fixed +- `Sunburst` nodes were shown on drill-down when they were not supposed to in some cases. +- `Hierarchy` node elements were ignoring `templateField`. +- It was impossible to move `XYChart` scrollbars to some other container. +- Fixed memory leaking when scrolling `LineSeries`, and when disposing series or other items. +- `XYCursor` was not firing `selectended` event if `behavior` was set to `"selectX"`, `"selectY"`, or `"selectXY"`. +- `XYCursor` was hiding selection when when behavior was set to `"selectX"`, `"selectY"`, or `"selectXY"`. +- `SerialChart.series.clear()` was not working properly. + + +## [5.0.0-beta.28] - 2021-09-28 + +### Added +- Two new settings in `Pattern`: `strokeDasharray` and `strokeDashoffset`. +- `Graphics` and `Picture` can now have shadows with additional settings: `shadowColor`, `shadowBlur`, `shadowOffsetX`, `shadowOffsetY`, and `shadowOpacity`. [More info](https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/shadows/). +- New setting in `ListTemplate`: `autoDispose` (default: `true`). If set to `true` will dispose items removed from the list. + +### Changed +- `width` and `height` settings in `Pattern` are now optional. + +### Fixed +- Fixed the priority of `template` and `templateField`. +- It's now possible for the user to override the `template` of the `ListTemplate`. +- Fixed a memory leak where series' entities were not properly disposed. +- `DataProcessor` was not parsing dates as `Date` objects unless `dateFormat` was also set (which is completely not needed). +- `setRaw` and `setPrivateRaw` no longer trigger events if the value didn't change. + + +## [5.0.0-beta.27] - 2021-09-27 + +### Added +- Root element now has publicly-accessible property: `dom`. Holds a reference to chart container (div). + +### Fixed +- Gradient/pattern fills were not working on some elements (since 5.0.0-beta.18). + + +## [5.0.0-beta.26] - 2021-09-24 + +### Fixed +- `MapLineSeries` with line geometry inside GeoJSON was not working properly. + + +## [5.0.0-beta.25] - 2021-09-24 + +### Added +- New `Entity` setting: `userData`. Use it to store any kind of proprietary data with any object in amCharts 5 that extends `Entity`. + +### Changed +- Series axis range will now have `visible: false` set for all axis elements (grid, fill, label, tick) by deafult. If you need to enable them, set `visible: true` on a respective range element. [More info](https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-ranges/#Elements_on_a_series_range). + +### Fixed +- Improperly closed in-line text style blocks could cause label palcement issues. +- Using `\n\n` in text was not resulting in empty line. +- Horizontal `Sankey` bullets were not using their `locationX` as it should. + + +## [5.0.0-beta.24] - 2021-09-23 + +### Added +- `autoRotate` and `autoRotateAngle` settings added to `Bullet`. Works on `Flow` and `MapPointSeries` (when `MapPoint` is attached to a `MapLine`). + +### Changed +- `Sankey` bullets will now check `locationY` if series is vertical, and `locationX` of its a horizontal series. It was using `positionY` for all orientations previously. + +### Fixed +- In some cases labels with `oversizedBehavior: "fit"` were not being resized when available space was changed. +- `autoRotate` + + +## [5.0.0-beta.23] - 2021-09-23 + +### Fixed +- Scrollbar was doing some unneeded animations when grip was released while axis was still animating. +- Double-clicking on scrollbar thumb did not always result full zoomout. +- Clicking on Scrollbar background did not always result in animating to the clicked position. +- `stroke` & `fill` set on `ColumnSeries`' `columns.template` was being overriden by series `stroke` and `fill`. +- Not all settings of `columns.template` were copied to `ColumnSeries`' legend marker. + + +## [5.0.0-beta.22] - 2021-09-22 + +### Added +- `PercentSeries`, `FlowNodes`, and `Hierarchy` now have `fillField` setting. It can be used to specify slice/node fill color via data. If not set, colors will be assigned automatically from series' `colors` (`ColorSet`). + +### Changed +- The way values of nodes in `Hierarchy` is counted updated to be consistent. There are two options now: a) set values on lowest nodes (no children) so that each node's value is a sum of all its descendants; b) set values for **each** node. Using any other approach might produce unpredictangle results. +- `colors` of the `PercentSeries`, `FlowNodes`, and `Hierarchy` will be reset every time new data is set. + +### Fixed +- Charts now will update their resolution when zooming. That fixes blurriness when page is zoomed in. +- In some cases, axis' or series' tooltip was showing correct value but was not positioned in the right position. +- If a `templateField` was set on `FlowNodes`' `rectangles`, the `fill` of the rectangle set in the field was ignored. + + +## [5.0.0-beta.21] - 2021-09-21 + +### Fixed +- Compared `XYSeries` with `valueYShow: "valueYChangeSelectionPercent"` were redrawn no taking current zoom into account when mouse cursor left plot area when panning chart. + + +## [5.0.0-beta.20] - 2021-09-21 + +### Added +- `toFront()` and `toBack()` methods added to `Sprite`. +- `"above"` setting added to `AxisDataItem`. Allows putting `AxisRange` grid and fill elements above the series. +- New setting `ignoreFormatting` for `Label` added. If set to `true`, it will ignore square-bracketed style blocks and will display text as it is. + +### Fixed +- Elements in chart will not generate hover events if they are obstructed by some other DOM element anymore. +- `XYSeries` with a vertical axis range was fully visible, even the part covered by an axis range. +- Axis bullets were not being hidden when axis data item was hidden. +- Labels in `BreadcrumbBar` were sometimes misaligned in Safari browser. +- Legend item of an initially-hidden series/slices/columns was being shown as enabled. + + +## [5.0.0-beta.19] - 2021-09-18 + +### Fixed +- Removing an axis from `xAxes` or `yAxes` was not working properly in some cases. +- If a `templateField` was set on some child of a bullet's `sprite`, it was being ignored. + + +## [5.0.0-beta.18] - 2021-09-17 + +### Added +- `areLinked()` method added to `LinkedHierarchy`. +- `unlinkDataItems()` method added to `LinkedHierarchy`. +- Global function `am5.disposeAllRootElements()` added. Disposes all charts. +- `am5.registry.rootElements` added which holds an array with instances of all active `Root` elements. +- `seriesGraphics` property added to `PictorialStackedSeries`. It's a `Graphics` which shows `svgPath` shape under all slices. Useful when `startLocation`/`endLocation` is used to make slices not occupy whole shape area. + +### Changed +- `maxPanOut` of `MapChart` is temporarily disabled until we figure out proper behavior for it. + +### Fixed +- Linking nodes with `linkDataItems` of `LinkedHierarchy` was not working if called after the data was set. +- `Micro` theme was not removing padding from charts. +- Adding in `@types/geojson` as a dependency. +- Map could jump to unpredictable position after the chart's container size changed and user zoomed or panned the map. +- In some cases `Label` with `oversizedBehavior = "fit"` could be incorrectly positioned. +- Removing series and axes from a serial chart was not working properly. + + +## [5.0.0-beta.17] - 2021-09-15 + +### Changed +- Default for `Treemap` setting `layoutAlgorithm` changed to `"squarify"`. +- Providing value in Hierarchy node's data will override sum of its children (except for `Pack`). + +### Fixed +- `ForceDirected` nodes were linked to invisible top node even though `topDepth` was set to `1` meaning top node should not be visible. This was causing issues with the layout of such nodes. + + +## [5.0.0-beta.16] - 2021-09-14 + +### Fixed +- Fills for axis ranges could go out of plot area bounds. +- Tooltip of Y axis could be displayed out of bounds in some cases. + + +## [5.0.0-beta.15] - 2021-09-14 + +### Added +- `dynamic` setting added to `Bullet`, for the bullets that need their `sprite` element redrawn when related series changes in any way. +- `ClockHand` now supports negative radius value (distance from the target axis outer radius in pixels). +- `syncWithAxis` added to `ValueAxis`. If enabled, will sync grid between the axes. + +### Changed +- If legend items container toggle key is set to `"none"`, clicking on the legend item will not do anything now. +- In `MapLineSeries`, if a data item had `pointsToConnect` set, map line now first looks at the point's longitude/latitude setting and then at the geometry. + +### Fixed +- Play button was not chaning to default state instantly. +- Change of `curveFactory` of `LineSeries` was not forcing redraw of the series. +- `StepLineSeries` was not drawn properly when both X and Y axes were `ValueAxis`. +- `StepLineSeries` was not showing tooltip when it was set as a `snapToSeries` on chart Cursor. +- Theme rules now have the correct priority no matter where they are defined. + + +## [5.0.0-beta.14] - 2021-09-10 + +### Fixed +- `Scrollbar` grips' theme tags modified so that a correct color would be used. +- `XYCursor` with multiple entried in `snapToSeries` was causing multiple tooltips to show at all times. + + +## [5.0.0-beta.13] - 2021-09-09 + +### Added +- `Star` now supports inner radius set in percent. + +### Fixed +- Tooltips for radar series were not show with `RadarCursor`. +- In some cases, Scrollbars were not being updated when zoomed-in with cursor. +- Clicking on scrollbar's background resulted in scrollbar animation, but the scrollbar did not update its axis. +- Dynamically changing `geoJSON` on a `MapSeries` was not working + + +## [5.0.0-beta.12] - 2021-09-08 + +### Added +- `AxisRendererCircular` now supports negative radius values. + +### Changed +- When a template state is changed, it now automatically updates related `Entity`'s state as well. + +### Fixed +- `LineSeries` was not working properly with `templateField` set on `strokes` or `fills`. +- `LineSeries` could stop drawing line while zooming if there were gaps in the data. + + +## [5.0.0-beta.11] - 2021-09-08 + +### Changed +- `fill` and `stroke` settings moved from `XYSeries` to `Series`, so that all series like `MapSeries` could be shown in Legend. +- Text of a tooltip text will now adaptively change color based on current background color. + +### Fixed +- `"click"` event is no longer fired on right-click. +- Changing data dynamically on map-related series was not working properly. +- Switching projection on a zoomed-in/translated map was resulting in new map to be in a wrong position. + + +## [5.0.0-beta.10] - 2021-09-07 + +### Fixed +- A quick flash of chart position fixed (introduced in `5.0.0-beta.9`). +- MapChart.goHome() method fixed. + + +## [5.0.0-beta.9] - 2021-09-06 + +### Added +- `id` setting to all entities. If set, will also appear in `am5.registry.entitiesById`. +- `show()` and `hide()` methods of `DataItem` now accept duration param. + +### Fixed +- Stacking of horizontal bars was not working properly. +- Children of a `Container` were not being disposed properly together with the container itself. +- Tooltip for a series close to the top/bottom of a plot area sometimes was not being displayed. +- `PieSeries` was overriding label `textType` setting. +- `XYChart` and `MapChart` were taking over mouse wheel action even when `wheelY` and `wheelX` were set to `"none"`. +- `XYCursor` was not showing series tooltips if Y axis was not a `ValueAxis`. +- `XYCursor` was showing previous data point tooltip if currently hovered position did not have data item or value was null. +- Percent chart could go to SO if there were no values in data. +- Changing `layer` value dynamically was not working properly. + + +## [5.0.0-beta.8] - 2021-09-02 + +### Added +- `deltaPosition` added to data item of a `CategoryAxis`. Can be used for sorting series columns without modifying data order. +- `resetExtremes()` method added to `XYSeries`. Resets series extremes to `undefined`. Can be used when values of a series are changed from outside. + + +## [5.0.0-beta.7] - 2021-08-31 + +### Added +- New `themeTagsSelf` setting for Entity which is the same as `themeTags` except it doesn't apply to the children. +- `clipBack` setting added to `MapLineSeries`. + +### Changed +- Tooltips and Cursor are now `exportable: false` by default (meaning they won't be included in exported images). + +### Fixed +- Sometimes plot container of an `XYChart` was not registering pointerout event. +- Accessibility: Not-measured items (e.g. columns) were not being properly outlined when focused. +- Zoom out button only zoomed out axes but not scrollbars. +- If a zoom out button was over columns or other interactive element, it was not working. +- `goHome()` method of `MapChart` was not working properly. +- Fixed fill style for `Scrollbar` grips. + + +## [5.0.0-beta.6] - 2021-08-29 + +### Fixed +- Hiding chart container or setting its width/height to zero was resulting in error. +- State setting values set in theme rules/templates were not being applied. +- Improved arrangement of multiple tooltips on a `XYChart`. +- Improved alignment of Legend labels improved. +- Huge numbers in `layer` setting were resulting in severe degration of performance. + + +## [5.0.0-beta.5] - 2021-08-27 + +### Fixed +- Fixed `RadarCursor` issues. + + +## [5.0.0-beta.4] - 2021-08-27 + +### Fixed +- Initial bugfixes. + + +## [5.0.0-beta.3] - 2021-08-25 + +### Fixed +- Initial bugfixes. + + +## [5.0.0-beta.2] - 2021-08-16 + +### Fixed +- Initial bugfixes. + + +## [5.0.0-beta.1] - 2021-08-13 + +### Added +- Initial preview release diff --git a/src/main/resources/static/js/amcharts5/LICENSE b/src/main/resources/static/js/amcharts5/LICENSE new file mode 100644 index 00000000..b55d5e8d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/LICENSE @@ -0,0 +1,35 @@ +## Free amCharts license + +This amCharts software is copyrighted by Antanas Marcelionis. + +This amCharts software is provided under linkware license, conditions of which are outlined below. + +### You can + +* Use amCharts software in any of your projects, including commercial. +* Modify amCharts software to suit your needs (source code is available at [here](https://github.com/amcharts/amcharts5)). +* Bundle amCharts software with your own projects (free, open source, or commercial). + +### If the following conditions are met + +* You do not disable, hide or alter the branding link which is displayed on all the content generated by amCharts software. +* You include this original LICENSE file together with original (or modified) files from amCharts software. +* Your own personal license does not supersede or in any way negate the effect of this LICENSE, or make the impression of doing so. + +### You can't + +* Remove or alter this LICENSE file. +* Remove any of the amCharts copyright notices from any of the files of amCharts software. +* Use amCharts software without built-in attribution (logo). Please see note about commercial amCharts licenses below. +* Sell or receive any compensation for amCharts software. +* Distribute amCharts software on its own, not as part of other application. + +### The above does not suit you? + +amCharts provides commercial licenses for purchase for various usage scenarios that are not covered by the above conditions. + +Please refer to [this web page](https://www.amcharts.com/online-store/) or [contact amCharts support](mailto:contact@amcharts.com) for further information. + +### In doubt? + +[Contact amCharts](mailto:contact@amcharts.com). We'll be happy to sort you out. \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/LICENSE-3RD-PARTY.md b/src/main/resources/static/js/amcharts5/LICENSE-3RD-PARTY.md new file mode 100644 index 00000000..835cde00 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/LICENSE-3RD-PARTY.md @@ -0,0 +1,29 @@ +# 3rd-party libraries used in amCharts 5 + +## Used in Core package + +|Package|Copyright (c)|License| +|-------|-------------|-------| +|d3|Mike Bostock|[License](https://github.com/d3/d3/blob/master/LICENSE)| +|d3-chord|Mike Bostock|[License](https://github.com/d3/d3-fchord/blob/master/LICENSE)| +|d3-geo|Mike Bostock|[License](https://github.com/d3/d3-geo/blob/master/LICENSE)| +|d3-geo-projection|Mike Bostock|[License](https://github.com/d3/d3-geo-projection/blob/master/LICENSE)| +|d3-force|Mike Bostock|[License](https://github.com/d3/d3-force/blob/master/LICENSE)| +|d3-sankey|Mike Bostock|[License](https://github.com/d3/d3-sankey/blob/master/LICENSE)| +|d3-selection|Mike Bostock|[License](https://github.com/d3/d3-selection/blob/main/LICENSE)| +|d3-transition|Mike Bostock|[License](https://github.com/d3/d3-transition/blob/main/LICENSE)| +|d3-voronoi-treemap|LEBEAU Franck|[License](https://github.com/Kcnarf/d3-voronoi-treemap/blob/master/LICENSE)| +|flatpickr|Gregory Petrosyan|[License](https://github.com/flatpickr/flatpickr/blob/master/LICENSE.md)| +|polylabel|Mapbox|[License](https://github.com/mapbox/polylabel/blob/master/LICENSE)| +|seedrandom|David Bau|[License](https://github.com/davidbau/seedrandom?tab=readme-ov-file#license-mit)| +|svg-arc-to-cubic-bezier|Colin Meinke|[License](https://github.com/colinmeinke/svg-arc-to-cubic-bezier/blob/master/LICENSE.md)| +|tslib|Microsoft|[License](https://github.com/microsoft/tslib/blob/master/LICENSE.txt)| + + +## Used in optional plugins + +|Package|Copyright (c)|License| +|-------|-------------|-------| +|pdfmake|bpampuch|[License](https://github.com/bpampuch/pdfmake/blob/master/LICENSE)| +|SheetJS js-xlsx|SheetJS LLC|[License](https://github.com/SheetJS/js-xlsx/blob/master/LICENSE)| +|marker.js 2|Alan Mendelevich|[License](https://github.com/ailon/markerjs2/blob/master/LICENSE)| diff --git a/src/main/resources/static/js/amcharts5/README.md b/src/main/resources/static/js/amcharts5/README.md new file mode 100644 index 00000000..19ff85f3 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/README.md @@ -0,0 +1,72 @@ +## amCharts 5 + +amCharts 5 is the fastest, most advanced amCharts data vizualization library, ever. + +For a short overview of features, visit [amCharts website](https://www.amcharts.com/). + + +### Important notice about support + +amCharts support is guaranteed for holders of amPlus subscription service. +GitHub issues is not usually monitored by amCharts support staff and may not be +answered. If you do have a license/subscription, you +may [contact us directly](https://www.amcharts.com/support/support-info/priority-support/) +for support. If you don't, here are +[a few options](https://www.amcharts.com/support/support-info/free-support/) +for you. + + +### Documentation + +For extensive documentation, including getting started tutorials, as well +as class reference visit [amCharts 5 documentation website](https://www.amcharts.com/docs/v5). + + +### amCharts 5 is available as + +* [NPM package](https://www.npmjs.com/package/@amcharts/amcharts5) +* [GitHub repository](https://github.com/amcharts/amcharts5) +* [ZIP download & CDN info](https://www.amcharts.com/download/) + + +### Related packages + +This package inlcudes `MapChart` (geographical maps) functionality. However, +it does not include geodata itself (map files) needed to instantiate the maps. + +Those are available via separate package: + +* [NPM package](https://www.npmjs.com/package/@amcharts/amcharts5-geodata) +* [GitHub repository (geodata)](https://github.com/amcharts/amcharts5-geodata) +* [ZIP download](https://www.amcharts.com/download/download/) + + +### License + +If you have a commercial amCharts 5 license, this software is covered by your +license, which supersedes any other license bundled with this package. + +If you don't have a commercial license, the use of this software is covered by +a freeware license. Refer to included LICENSE file. The license is also +[available online](https://github.com/amcharts/amcharts5/blob/master/packages/shared/LICENSE). + + +### Creating translations + +Please refer to [this tutorial](https://www.amcharts.com/docs/v5/concepts/locales/creating-translations//). + + +### Changelog + +* [amCharts 5 Changelog](https://github.com/amcharts/amcharts5/blob/master/CHANGELOG.md) +* [Documentation Changelog](https://www.amcharts.com/docs/v5/changelog/) + + +### Questions? + +[Contact amCharts](mailto:contact@amcharts.com). + + +### Found a bug? + +Open an [issue](https://github.com/amcharts/amcharts5/issues). diff --git a/src/main/resources/static/js/amcharts5/deps/markerjs2.js b/src/main/resources/static/js/amcharts5/deps/markerjs2.js new file mode 100644 index 00000000..b1e76f11 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/deps/markerjs2.js @@ -0,0 +1,3 @@ +/*! For license information please see markerjs2.js.LICENSE.txt */ +"use strict";(self.webpackChunk_am5=self.webpackChunk_am5||[]).push([[4384],{8768:function(t,e,i){i.r(e),i.d(e,{Activator:function(){return l},ArrowMarker:function(){return W},ArrowTypePanel:function(){return I},CalloutMarker:function(){return V},CaptionFrameMarker:function(){return Y},ColorPickerPanel:function(){return m},CoverMarker:function(){return N},CurveMarker:function(){return X},EllipseFrameMarker:function(){return j},EllipseMarker:function(){return G},EventListenerRepository:function(){return Q},FontFamilyPanel:function(){return D},FrameMarker:function(){return M},FreehandMarker:function(){return _},HighlightMarker:function(){return z},LineMarker:function(){return L},LineStylePanel:function(){return E},LineWidthPanel:function(){return B},LinearMarkerBase:function(){return P},MarkerArea:function(){return q},MarkerAreaEvent:function(){return Z},MarkerAreaRenderEvent:function(){return K},MarkerBase:function(){return C},MarkerEvent:function(){return J},MeasurementMarker:function(){return F},OpacityPanel:function(){return H},RectangleMarker:function(){return w},RectangularBoxMarkerBase:function(){return k},RectangularBoxMarkerGrips:function(){return b},ResizeGrip:function(){return x},Settings:function(){return T},Style:function(){return c},StyleClass:function(){return y},StyleManager:function(){return u},SvgHelper:function(){return h},TextMarker:function(){return A},ToolboxPanel:function(){return v},TransformMatrix:function(){return S}});var o=function(t,e){return(o=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i])})(t,e)};function s(t,e){function i(){this.constructor=t}o(t,e),t.prototype=null===e?Object.create(e):(i.prototype=e.prototype,new i)}function r(t,e,i,o){return new(i||(i=Promise))((function(s,r){function n(t){try{h(o.next(t))}catch(t){r(t)}}function a(t){try{h(o.throw(t))}catch(t){r(t)}}function h(t){var e;t.done?s(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(n,a)}h((o=o.apply(t,e||[])).next())}))}function n(t,e){var i,o,s,r,n={label:0,sent:function(){if(1&s[0])throw s[1];return s[1]},trys:[],ops:[]};return r={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(r[Symbol.iterator]=function(){return this}),r;function a(r){return function(a){return function(r){if(i)throw new TypeError("Generator is already executing.");for(;n;)try{if(i=1,o&&(s=2&r[0]?o.return:r[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,r[1])).done)return s;switch(o=0,s&&(r=[2&r[0],s.value]),r[0]){case 0:case 1:s=r;break;case 4:return n.label++,{value:r[1],done:!1};case 5:n.label++,o=r[1],r=[0];continue;case 7:r=n.ops.pop(),n.trys.pop();continue;default:if(!((s=(s=n.trys).length>0&&s[s.length-1])||6!==r[0]&&2!==r[0])){n=0;continue}if(3===r[0]&&(!s||r[1]>s[0]&&r[1]',"select","Select mode"),this.addActionButton(i,'',"delete","Delete marker"),this.uiStyleSettings.clearButtonVisible&&this.addActionButton(i,'',"clear","Delete all markers"),this.uiStyleSettings.undoButtonVisible&&this.addActionButton(i,'',"undo","Undo"),this.uiStyleSettings.redoButtonVisible&&this.addActionButton(i,'',"redo","Redo"),this.uiStyleSettings.zoomButtonVisible&&this.addActionButton(i,'',"zoom","Zoom in"),this.uiStyleSettings.zoomButtonVisible&&this.uiStyleSettings.zoomOutButtonVisible&&this.addActionButton(i,'',"zoom-out","Zoom out"),this.uiStyleSettings.notesButtonVisible&&this.addActionButton(i,'',"notes","Notes"),this.markerButtonBlock=document.createElement("div"),this.markerButtonBlock.className=this.toolbarBlockStyleClass.name,this.markerButtonBlock.style.flexGrow="2",this.markerButtonBlock.style.textAlign="center",this.uiContainer.appendChild(this.markerButtonBlock),this.markerButtonOverflowBlock=document.createElement("div"),this.markerButtonOverflowBlock.className=this.toolbarOverflowBlockStyleClass.name+" "+(this.uiStyleSettings.toolbarOverflowBlockStyleColorsClassName?this.uiStyleSettings.toolbarOverflowBlockStyleColorsClassName:this.toolbarOverflowBlockStyleColorsClass.name),this.markerButtonOverflowBlock.style.display="none",this.uiContainer.appendChild(this.markerButtonOverflowBlock),this.markerItems&&(this.markerItems.forEach((function(t){var i=document.createElement("div");i.className=""+e.toolbarButtonStyleClass.name,i.setAttribute("data-type-name",t.typeName),i.setAttribute("aria-label",t.title),i.setAttribute("title",t.title),i.innerHTML=t.icon,i.addEventListener("click",(function(){e.markerToolbarButtonClicked(i,t)})),e.buttons.push(i),e.markerButtons.push(i)})),this.overflowButton=document.createElement("div"),this.overflowButton.className=this.toolbarButtonStyleClass.name+" "+(this.uiStyleSettings.toolbarButtonStyleColorsClassName?this.uiStyleSettings.toolbarButtonStyleColorsClassName:this.toolbarButtonStyleColorsClass.name),this.overflowButton.innerHTML='',this.overflowButton.addEventListener("click",this.overflowButtonClicked),this.markerButtonBlock.appendChild(this.overflowButton));var o=document.createElement("div");o.className=this.toolbarBlockStyleClass.name,o.style.whiteSpace="nowrap",o.style.display=!1!==this.uiStyleSettings.resultButtonBlockVisible?"":"none",this.uiContainer.appendChild(o),this.addActionButton(o,'',"render","Save and close"),this.addActionButton(o,'',"close","Close"),this.markerjsContainer.appendChild(this.uiContainer),this.setSelectMode(),this.setCurrentMarker(),this.adjustLayout()},t.prototype.addButtonClickListener=function(t){this.buttonClickListeners.push(t)},t.prototype.removeButtonClickListener=function(t){this.buttonClickListeners.indexOf(t)>-1&&this.buttonClickListeners.splice(this.buttonClickListeners.indexOf(t),1)},t.prototype.setSelectMode=function(){this.resetButtonStyles(),this.setActiveButton(this.buttons[0])},t.prototype.adjustLayout=function(){if(this.markerButtons&&this.markerButtons.length>0){var t=Math.floor(this.markerButtonBlock.clientWidth/this.uiStyleSettings.toolbarHeight)-1;this.markerButtonBlock.innerHTML="",this.markerButtonOverflowBlock.innerHTML="";for(var e=0;e0&&this.buttonClickListeners.forEach((function(t){return t("marker",e)})),this.markerButtonOverflowBlock.style.display="none"},t.prototype.actionToolbarButtonClicked=function(t,e){this.buttonClickListeners&&this.buttonClickListeners.length>0&&this.buttonClickListeners.forEach((function(t){return t("action",e)})),this.markerButtonOverflowBlock.style.display="none",this.setActiveButton(this.buttons[0])},t.prototype.setActiveButton=function(t){this.resetButtonStyles(),t.className=t.className.replace(this.uiStyleSettings.toolbarButtonStyleColorsClassName?this.uiStyleSettings.toolbarButtonStyleColorsClassName:this.toolbarButtonStyleColorsClass.name,"").trim(),t.className+=" "+(this.uiStyleSettings.toolbarActiveButtonStyleColorsClassName?this.uiStyleSettings.toolbarActiveButtonStyleColorsClassName:this.toolbarActiveButtonStyleColorsClass.name)},t.prototype.setActiveMarkerButton=function(t){var e=this.markerButtons.find((function(e){return e.getAttribute("data-type-name")===t}));e&&this.setActiveButton(e)},t.prototype.setCurrentMarker=function(t){var e=this;this.currentMarker=t,this.buttons.filter((function(t){return/delete|notes/.test(t.getAttribute("data-action"))})).forEach((function(t){void 0===e.currentMarker?(t.style.fillOpacity="0.4",t.style.pointerEvents="none"):(t.style.fillOpacity="1",t.style.pointerEvents="all")}))},t}(),f=function(){function t(t,e,i,o){this.panels=[],this.panelButtons=[],this.markerjsContainer=t,this.displayMode=e,this.uiStyleSettings=i,this.styles=o,this.panelButtonClick=this.panelButtonClick.bind(this),this.addStyles()}return t.prototype.addStyles=function(){var t;this.toolboxStyleClass=this.styles.addClass(new y("toolbox","\n width: 100%;\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n font-family: sans-serif;\n "+("popup"===this.displayMode?"height:"+2.5*this.uiStyleSettings.toolbarHeight+"px;":"")+"\n box-sizing: content-box;\n "+("popup"===this.displayMode?"background-color: "+this.uiStyleSettings.canvasBackgroundColor+";":"")+"\n "+("inline"===this.displayMode?"border-bottom-left-radius: "+Math.round(this.uiStyleSettings.toolbarHeight/10)+"px;":"")+"\n "+("inline"===this.displayMode?"border-bottom-right-radius: "+Math.round(this.uiStyleSettings.toolbarHeight/10)+"px;":"")+"\n overflow: hidden;\n ")),this.toolboxStyleColorsClass=this.styles.addClass(new y("toolbox_colors","\n color: "+this.uiStyleSettings.toolboxColor+";\n "));var e=this.uiStyleSettings.toolbarHeight/4;this.toolboxButtonRowStyleClass=this.styles.addClass(new y("toolbox-button-row","\n display: flex;\n cursor: default;\n box-sizing: content-box;\n ")),this.toolboxButtonRowStyleColorsClass=this.styles.addClass(new y("toolbox-button-row_colors","\n background-color: "+this.uiStyleSettings.toolbarBackgroundColor+";\n ")),this.toolboxPanelRowStyleClass=this.styles.addClass(new y("toolbox-panel-row","\n display: flex;\n "+("inline"===this.displayMode?"position: absolute;":"")+"\n "+("inline"===this.displayMode?"bottom: "+this.uiStyleSettings.toolbarHeight+"px;":"")+"\n cursor: default;\n height: "+1.5*this.uiStyleSettings.toolbarHeight+"px;\n "+("inline"===this.displayMode?"width: 100%;":"")+"\n box-sizing: content-box;\n ")),this.toolboxPanelRowStyleColorsClass=this.styles.addClass(new y("toolbox-panel-row_colors","\n background-color: "+(null!==(t=this.uiStyleSettings.toolboxBackgroundColor)&&void 0!==t?t:this.uiStyleSettings.toolbarBackgroundHoverColor)+";\n ")),this.toolboxButtonStyleClass=this.styles.addClass(new y("toolbox_button","\n display: inline-block;\n width: "+(this.uiStyleSettings.toolbarHeight-2*e)+"px;\n height: "+(this.uiStyleSettings.toolbarHeight-2*e)+"px;\n padding: "+e+"px;\n box-sizing: content-box;\n ")),this.toolboxButtonStyleColorsClass=this.styles.addClass(new y("toolbox-button_colors","\n fill: "+this.uiStyleSettings.toolbarColor+";\n ")),this.toolboxActiveButtonStyleColorsClass=this.styles.addClass(new y("toolbox-active-button_colors","\n background-color: "+this.uiStyleSettings.toolbarBackgroundHoverColor+";\n fill: "+this.uiStyleSettings.toolbarColor+";\n ")),this.styles.addRule(new d("."+this.toolboxButtonStyleColorsClass.name+":hover","\n background-color: "+this.uiStyleSettings.toolbarBackgroundHoverColor+"\n ")),this.styles.addRule(new d("."+this.toolboxButtonStyleClass.name+" svg","\n height: "+this.uiStyleSettings.toolbarHeight/2+"px;\n "))},t.prototype.show=function(t){var e;this.uiContainer=document.createElement("div"),this.uiContainer.style.visibility=t,this.uiContainer.className=this.toolboxStyleClass.name+" "+(null!==(e=this.uiStyleSettings.toolboxStyleColorsClassName)&&void 0!==e?e:this.toolboxStyleColorsClass.name),this.markerjsContainer.appendChild(this.uiContainer)},t.prototype.setPanelButtons=function(t){var e,i,o=this;this.panels=t,void 0!==this.uiContainer&&(this.uiContainer.innerHTML="",this.panelRow=document.createElement("div"),this.panelRow.className=this.toolboxPanelRowStyleClass.name+" "+(null!==(e=this.uiStyleSettings.toolboxPanelRowStyleColorsClassName)&&void 0!==e?e:this.toolboxPanelRowStyleColorsClass.name),this.uiContainer.appendChild(this.panelRow),this.buttonRow=document.createElement("div"),this.buttonRow.className=this.toolboxButtonRowStyleClass.name+" "+(null!==(i=this.uiStyleSettings.toolboxButtonRowStyleColorsClassName)&&void 0!==i?i:this.toolboxButtonRowStyleColorsClass.name)+" ",this.uiContainer.appendChild(this.buttonRow),this.panelButtons.splice(0),this.panels.forEach((function(t){var e;t.uiStyleSettings=o.uiStyleSettings;var i=document.createElement("div");i.className=o.toolboxButtonStyleClass.name+" "+(null!==(e=o.uiStyleSettings.toolboxButtonStyleColorsClassName)&&void 0!==e?e:o.toolboxButtonStyleColorsClass.name),i.innerHTML=t.icon,i.title=t.title,i.addEventListener("click",(function(){o.panelButtonClick(t)})),o.panelButtons.push(i),o.buttonRow.appendChild(i)})),"inline"===this.displayMode?this.panelRow.style.display="none":this.panelRow.style.visibility="hidden")},t.prototype.panelButtonClick=function(t){var e=this,i=-1;if(t!==this.activePanel){i=this.panels.indexOf(t),this.panelRow.innerHTML="";var o=t.getUi();o.style.margin=this.uiStyleSettings.toolbarHeight/4+"px",this.panelRow.appendChild(o),this.panelRow.style.display="flex",this.panelRow.style.visibility="visible",this.panelRow.className=this.panelRow.className.replace(this.styles.fadeOutAnimationClassName,""),this.panelRow.className+=" "+this.styles.fadeInAnimationClassName,this.activePanel=t}else this.activePanel=void 0,this.panelRow.className=this.panelRow.className.replace(this.styles.fadeInAnimationClassName,""),this.panelRow.className+=" "+this.styles.fadeOutAnimationClassName,setTimeout((function(){"inline"===e.displayMode?e.panelRow.style.display="none":e.panelRow.style.visibility="hidden"}),200);this.panelButtons.forEach((function(t,o){var s,r;t.className=e.toolboxButtonStyleClass.name+" "+(o===i?""+(null!==(s=e.uiStyleSettings.toolboxActiveButtonStyleColorsClassName)&&void 0!==s?s:e.toolboxActiveButtonStyleColorsClass.name):""+(null!==(r=e.uiStyleSettings.toolboxButtonStyleColorsClassName)&&void 0!==r?r:e.toolboxButtonStyleColorsClass.name))}))},t}(),v=function(t,e){this.title=t,this.icon=e},m=function(t){function e(e,i,o,s){var r=t.call(this,e,s||'')||this;return r.colors=[],r.addTransparent=!1,r.colorBoxes=[],r.colors=i,r.currentColor=o,r.setCurrentColor=r.setCurrentColor.bind(r),r.getColorBox=r.getColorBox.bind(r),r}return s(e,t),e.prototype.getUi=function(){var t=this,e=document.createElement("div");return e.style.overflow="hidden",e.style.whiteSpace="nowrap",this.colors.forEach((function(i){var o=t.getColorBox(i);e.appendChild(o),t.colorBoxes.push(o)})),e},e.prototype.getColorBox=function(t){var e=this,i=this.uiStyleSettings.toolbarHeight/4,o=this.uiStyleSettings.toolbarHeight-i,s=document.createElement("div");s.style.display="inline-block",s.style.boxSizing="content-box",s.style.width=o-2+"px",s.style.height=o-2+"px",s.style.padding="1px",s.style.marginRight="2px",s.style.marginBottom="2px",s.style.borderWidth="2px",s.style.borderStyle="solid",s.style.borderRadius=(o+2)/2+"px",s.style.borderColor=t===this.currentColor?this.uiStyleSettings.toolboxAccentColor:"transparent",s.addEventListener("click",(function(){e.setCurrentColor(t,s)}));var r=document.createElement("div");return r.style.display="inline-block",r.style.width=o-2+"px",r.style.height=o-2+"px",r.style.backgroundColor=t,r.style.borderRadius=o/2+"px","transparent"===t&&(r.style.fill=this.uiStyleSettings.toolboxAccentColor,r.innerHTML='\n \n '),s.appendChild(r),s},e.prototype.setCurrentColor=function(t,e){var i=this;this.currentColor=t,this.colorBoxes.forEach((function(t){t.style.borderColor=t===e?i.uiStyleSettings.toolboxAccentColor:"transparent"})),this.onColorChanged&&this.onColorChanged(t)},e}(v),C=function(){function t(t,e,i){this._state="new",this._isSelected=!1,this._container=t,this._overlayContainer=e,this.globalSettings=i,this.stateChanged=this.stateChanged.bind(this),this.colorChanged=this.colorChanged.bind(this),this.fillColorChanged=this.fillColorChanged.bind(this)}return Object.defineProperty(t.prototype,"typeName",{get:function(){return Object.getPrototypeOf(this).constructor.typeName},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"container",{get:function(){return this._container},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"overlayContainer",{get:function(){return this._overlayContainer},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"state",{get:function(){return this._state},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"toolboxPanels",{get:function(){return[]},enumerable:!1,configurable:!0}),t.prototype.ownsTarget=function(t){return!1},Object.defineProperty(t.prototype,"isSelected",{get:function(){return this._isSelected},enumerable:!1,configurable:!0}),t.prototype.select=function(){this.container.style.cursor="move",this._isSelected=!0,this.manipulationStartState=this.getState()},t.prototype.deselect=function(){this.container.style.cursor="default",this._isSelected=!1,this.stateChanged()},t.prototype.pointerDown=function(t,e){},t.prototype.dblClick=function(t,e){},t.prototype.manipulate=function(t){},t.prototype.pointerUp=function(t){this.stateChanged()},t.prototype.dispose=function(){},t.prototype.addMarkerVisualToContainer=function(t){this.container.childNodes.length>0?this.container.insertBefore(t,this.container.childNodes[0]):this.container.appendChild(t)},t.prototype.getState=function(){return{typeName:t.typeName,state:this.state,notes:this.notes}},t.prototype.restoreState=function(t){this._state=t.state,this.notes=t.notes},t.prototype.scale=function(t,e){},t.prototype.colorChanged=function(t){this.onColorChanged&&this.onColorChanged(t),this.stateChanged()},t.prototype.fillColorChanged=function(t){this.onFillColorChanged&&this.onFillColorChanged(t),this.stateChanged()},t.prototype.stateChanged=function(){if(this.onStateChanged&&"creating"!==this.state&&"new"!==this.state){var t=this.getState();void 0!==this.manipulationStartState&&(this.manipulationStartState.state="select"),t.state="select",JSON.stringify(this.manipulationStartState)!=JSON.stringify(t)&&this.onStateChanged(this)}},t.typeName="MarkerBase",t}(),b=function(){function t(){this.findGripByVisual=this.findGripByVisual.bind(this)}return t.prototype.findGripByVisual=function(t){return this.topLeft.ownsTarget(t)?this.topLeft:this.topCenter.ownsTarget(t)?this.topCenter:this.topRight.ownsTarget(t)?this.topRight:this.centerLeft.ownsTarget(t)?this.centerLeft:this.centerRight.ownsTarget(t)?this.centerRight:this.bottomLeft.ownsTarget(t)?this.bottomLeft:this.bottomCenter.ownsTarget(t)?this.bottomCenter:this.bottomRight.ownsTarget(t)?this.bottomRight:void 0},t}(),x=function(){function t(){this.GRIP_SIZE=10,this.visual=h.createGroup(),this.visual.appendChild(h.createCircle(1.5*this.GRIP_SIZE,[["fill","transparent"]])),this.visual.appendChild(h.createCircle(this.GRIP_SIZE,[["fill","#cccccc"],["fill-opacity","0.7"],["stroke","#333333"],["stroke-width","2"],["stroke-opacity","0.7"]]))}return t.prototype.ownsTarget=function(t){return t===this.visual||t===this.visual.childNodes[0]||t===this.visual.childNodes[1]},t}(),S=function(){function t(){}return t.toITransformMatrix=function(t){return{a:t.a,b:t.b,c:t.c,d:t.d,e:t.e,f:t.f}},t.toSVGMatrix=function(t,e){return t.a=e.a,t.b=e.b,t.c=e.c,t.d=e.d,t.e=e.e,t.f=e.f,t},t}(),k=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.left=0,s.top=0,s.width=0,s.height=0,s.defaultSize={x:50,y:20},s.offsetX=0,s.offsetY=0,s.rotationAngle=0,s.CB_DISTANCE=10,s._suppressMarkerCreateEvent=!1,s.container.transform.baseVal.appendItem(h.createTransform()),s.setupControlBox(),s}return s(e,t),Object.defineProperty(e.prototype,"centerX",{get:function(){return this.left+this.width/2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"centerY",{get:function(){return this.top+this.height/2},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"visual",{get:function(){return this._visual},set:function(t){this._visual=t;var e=h.createTransform();this._visual.transform.baseVal.appendItem(e)},enumerable:!1,configurable:!0}),e.prototype.ownsTarget=function(e){return!!t.prototype.ownsTarget.call(this,e)||!!(void 0!==this.controlGrips.findGripByVisual(e)||void 0!==this.rotatorGrip&&this.rotatorGrip.ownsTarget(e))},e.prototype.pointerDown=function(e,i){t.prototype.pointerDown.call(this,e,i),"new"===this.state&&(this.left=e.x,this.top=e.y),this.manipulationStartLeft=this.left,this.manipulationStartTop=this.top,this.manipulationStartWidth=this.width,this.manipulationStartHeight=this.height;var o=this.unrotatePoint(e);if(this.manipulationStartX=o.x,this.manipulationStartY=o.y,this.offsetX=o.x-this.left,this.offsetY=o.y-this.top,"new"!==this.state)if(this.select(),this.activeGrip=this.controlGrips.findGripByVisual(i),void 0!==this.activeGrip)this._state="resize";else if(void 0!==this.rotatorGrip&&this.rotatorGrip.ownsTarget(i)){this.activeGrip=this.rotatorGrip;var s=this.rotatePoint({x:this.centerX,y:this.centerY});this.left=s.x-this.width/2,this.top=s.y-this.height/2,this.moveVisual({x:this.left,y:this.top});var r=this.container.transform.baseVal.getItem(0);r.setRotate(this.rotationAngle,this.centerX,this.centerY),this.container.transform.baseVal.replaceItem(r,0),this.adjustControlBox(),this._state="rotate"}else this._state="move"},e.prototype.pointerUp=function(e){var i=this.state;t.prototype.pointerUp.call(this,e),"creating"===this.state&&this.width<10&&this.height<10?(this.width=this.defaultSize.x,this.height=this.defaultSize.y):this.manipulate(e),this._state="select","creating"===i&&this.onMarkerCreated&&!1===this._suppressMarkerCreateEvent&&this.onMarkerCreated(this)},e.prototype.moveVisual=function(t){this.visual.style.transform="translate("+t.x+"px, "+t.y+"px)"},e.prototype.manipulate=function(t){var e=this.unrotatePoint(t);"creating"===this.state?this.resize(t):"move"===this.state?(this.left=this.manipulationStartLeft+(e.x-this.manipulationStartLeft)-this.offsetX,this.top=this.manipulationStartTop+(e.y-this.manipulationStartTop)-this.offsetY,this.moveVisual({x:this.left,y:this.top}),this.adjustControlBox()):"resize"===this.state?this.resize(e):"rotate"===this.state&&this.rotate(t)},e.prototype.resize=function(t){var e=this.manipulationStartLeft,i=this.manipulationStartWidth,o=this.manipulationStartTop,s=this.manipulationStartHeight;switch(this.activeGrip){case this.controlGrips.bottomLeft:case this.controlGrips.centerLeft:case this.controlGrips.topLeft:e=this.manipulationStartLeft+t.x-this.manipulationStartX,i=this.manipulationStartWidth+this.manipulationStartLeft-e;break;case this.controlGrips.bottomRight:case this.controlGrips.centerRight:case this.controlGrips.topRight:case void 0:i=this.manipulationStartWidth+t.x-this.manipulationStartX}switch(this.activeGrip){case this.controlGrips.topCenter:case this.controlGrips.topLeft:case this.controlGrips.topRight:o=this.manipulationStartTop+t.y-this.manipulationStartY,s=this.manipulationStartHeight+this.manipulationStartTop-o;break;case this.controlGrips.bottomCenter:case this.controlGrips.bottomLeft:case this.controlGrips.bottomRight:case void 0:s=this.manipulationStartHeight+t.y-this.manipulationStartY}i>=0?(this.left=e,this.width=i):(this.left=e+i,this.width=-i),s>=0?(this.top=o,this.height=s):(this.top=o+s,this.height=-s),this.setSize()},e.prototype.setSize=function(){this.moveVisual({x:this.left,y:this.top}),this.adjustControlBox()},e.prototype.rotate=function(t){if(Math.abs(t.x-this.centerX)>.1){var e=Math.sign(t.x-this.centerX);this.rotationAngle=180*Math.atan((t.y-this.centerY)/(t.x-this.centerX))/Math.PI+90*e,this.applyRotation()}},e.prototype.applyRotation=function(){var t=this.container.transform.baseVal.getItem(0);t.setRotate(this.rotationAngle,this.centerX,this.centerY),this.container.transform.baseVal.replaceItem(t,0)},e.prototype.rotatePoint=function(t){if(0===this.rotationAngle)return t;var e=this.container.getCTM(),i=h.createPoint(t.x,t.y);return{x:(i=i.matrixTransform(e)).x,y:i.y}},e.prototype.unrotatePoint=function(t){if(0===this.rotationAngle)return t;var e=this.container.getCTM();e=e.inverse();var i=h.createPoint(t.x,t.y);return{x:(i=i.matrixTransform(e)).x,y:i.y}},e.prototype.select=function(){t.prototype.select.call(this),this.adjustControlBox(),this.controlBox.style.display=""},e.prototype.deselect=function(){t.prototype.deselect.call(this),this.controlBox.style.display="none"},e.prototype.setupControlBox=function(){this.controlBox=h.createGroup();var t=h.createTransform();t.setTranslate(-this.CB_DISTANCE/2,-this.CB_DISTANCE/2),this.controlBox.transform.baseVal.appendItem(t),this.container.appendChild(this.controlBox),this.controlRect=h.createRect(this.width+this.CB_DISTANCE,this.height+this.CB_DISTANCE,[["stroke","black"],["stroke-width","1"],["stroke-opacity","0.5"],["stroke-dasharray","3, 2"],["fill","transparent"],["pointer-events","none"]]),this.controlBox.appendChild(this.controlRect),!0!==this.globalSettings.disableRotation&&(this.rotatorGripLine=h.createLine((this.width+2*this.CB_DISTANCE)/2,this.top-this.CB_DISTANCE,(this.width+2*this.CB_DISTANCE)/2,this.top-3*this.CB_DISTANCE,[["stroke","black"],["stroke-width","1"],["stroke-opacity","0.5"],["stroke-dasharray","3, 2"]]),this.controlBox.appendChild(this.rotatorGripLine)),this.controlGrips=new b,this.addControlGrips(),this.controlBox.style.display="none"},e.prototype.adjustControlBox=function(){var t=this.controlBox.transform.baseVal.getItem(0);t.setTranslate(this.left-this.CB_DISTANCE/2,this.top-this.CB_DISTANCE/2),this.controlBox.transform.baseVal.replaceItem(t,0),this.controlRect.setAttribute("width",(this.width+this.CB_DISTANCE).toString()),this.controlRect.setAttribute("height",(this.height+this.CB_DISTANCE).toString()),void 0!==this.rotatorGripLine&&(this.rotatorGripLine.setAttribute("x1",((this.width+this.CB_DISTANCE)/2).toString()),this.rotatorGripLine.setAttribute("y1",(-this.CB_DISTANCE/2).toString()),this.rotatorGripLine.setAttribute("x2",((this.width+this.CB_DISTANCE)/2).toString()),this.rotatorGripLine.setAttribute("y2",(3*-this.CB_DISTANCE).toString())),this.positionGrips()},e.prototype.addControlGrips=function(){this.controlGrips.topLeft=this.createGrip(),this.controlGrips.topCenter=this.createGrip(),this.controlGrips.topRight=this.createGrip(),this.controlGrips.centerLeft=this.createGrip(),this.controlGrips.centerRight=this.createGrip(),this.controlGrips.bottomLeft=this.createGrip(),this.controlGrips.bottomCenter=this.createGrip(),this.controlGrips.bottomRight=this.createGrip(),!0!==this.globalSettings.disableRotation&&(this.rotatorGrip=this.createGrip()),this.positionGrips()},e.prototype.createGrip=function(){var t=new x;return t.visual.transform.baseVal.appendItem(h.createTransform()),this.controlBox.appendChild(t.visual),t},e.prototype.positionGrips=function(){var t=this.controlGrips.topLeft.GRIP_SIZE,e=-t/2,i=e,o=(this.width+this.CB_DISTANCE)/2-t/2,s=(this.height+this.CB_DISTANCE)/2-t/2,r=this.height+this.CB_DISTANCE-t/2,n=this.width+this.CB_DISTANCE-t/2;this.positionGrip(this.controlGrips.topLeft.visual,e,i),this.positionGrip(this.controlGrips.topCenter.visual,o,i),this.positionGrip(this.controlGrips.topRight.visual,n,i),this.positionGrip(this.controlGrips.centerLeft.visual,e,s),this.positionGrip(this.controlGrips.centerRight.visual,n,s),this.positionGrip(this.controlGrips.bottomLeft.visual,e,r),this.positionGrip(this.controlGrips.bottomCenter.visual,o,r),this.positionGrip(this.controlGrips.bottomRight.visual,n,r),void 0!==this.rotatorGrip&&this.positionGrip(this.rotatorGrip.visual,o,i-3*this.CB_DISTANCE)},e.prototype.positionGrip=function(t,e,i){var o=t.transform.baseVal.getItem(0);o.setTranslate(e,i),t.transform.baseVal.replaceItem(o,0)},e.prototype.hideControlBox=function(){this.controlBox.style.display="none"},e.prototype.showControlBox=function(){this.controlBox.style.display=""},e.prototype.getState=function(){return Object.assign({left:this.left,top:this.top,width:this.width,height:this.height,rotationAngle:this.rotationAngle,visualTransformMatrix:S.toITransformMatrix(this.visual.transform.baseVal.getItem(0).matrix),containerTransformMatrix:S.toITransformMatrix(this.container.transform.baseVal.getItem(0).matrix)},t.prototype.getState.call(this))},e.prototype.restoreState=function(e){t.prototype.restoreState.call(this,e);var i=e;this.left=i.left,this.top=i.top,this.width=i.width,this.height=i.height,this.rotationAngle=i.rotationAngle,this.visual.transform.baseVal.getItem(0).setMatrix(S.toSVGMatrix(this.visual.transform.baseVal.getItem(0).matrix,i.visualTransformMatrix)),this.container.transform.baseVal.getItem(0).setMatrix(S.toSVGMatrix(this.container.transform.baseVal.getItem(0).matrix,i.containerTransformMatrix))},e.prototype.scale=function(e,i){t.prototype.scale.call(this,e,i);var o=this.rotatePoint({x:this.left,y:this.top}),s=this.unrotatePoint({x:o.x*e,y:o.y*i});this.left=s.x,this.top=s.y,this.width=this.width*e,this.height=this.height*i,this.adjustControlBox()},e}(C),w=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.fillColor="transparent",s.strokeColor="transparent",s.strokeWidth=0,s.strokeDasharray="",s.opacity=1,s.setStrokeColor=s.setStrokeColor.bind(s),s.setFillColor=s.setFillColor.bind(s),s.setStrokeWidth=s.setStrokeWidth.bind(s),s.setStrokeDasharray=s.setStrokeDasharray.bind(s),s.createVisual=s.createVisual.bind(s),s}return s(e,t),e.prototype.ownsTarget=function(e){return!(!t.prototype.ownsTarget.call(this,e)&&e!==this.visual)},e.prototype.createVisual=function(){this.visual=h.createRect(1,1,[["fill",this.fillColor],["stroke",this.strokeColor],["stroke-width",this.strokeWidth.toString()],["stroke-dasharray",this.strokeDasharray],["opacity",this.opacity.toString()]]),this.addMarkerVisualToContainer(this.visual)},e.prototype.pointerDown=function(e,i){t.prototype.pointerDown.call(this,e,i),"new"===this.state&&(this.createVisual(),this.moveVisual(e),this._state="creating")},e.prototype.manipulate=function(e){t.prototype.manipulate.call(this,e)},e.prototype.resize=function(e){t.prototype.resize.call(this,e),this.setSize()},e.prototype.setSize=function(){t.prototype.setSize.call(this),h.setAttributes(this.visual,[["width",this.width.toString()],["height",this.height.toString()]])},e.prototype.pointerUp=function(e){t.prototype.pointerUp.call(this,e),this.setSize()},e.prototype.setStrokeColor=function(t){this.strokeColor=t,this.visual&&h.setAttributes(this.visual,[["stroke",this.strokeColor]]),this.colorChanged(t),this.stateChanged()},e.prototype.setFillColor=function(t){this.fillColor=t,this.visual&&h.setAttributes(this.visual,[["fill",this.fillColor]]),this.stateChanged()},e.prototype.setStrokeWidth=function(t){this.strokeWidth=t,this.visual&&h.setAttributes(this.visual,[["stroke-width",this.strokeWidth.toString()]]),this.stateChanged()},e.prototype.setStrokeDasharray=function(t){this.strokeDasharray=t,this.visual&&h.setAttributes(this.visual,[["stroke-dasharray",this.strokeDasharray]]),this.stateChanged()},e.prototype.getState=function(){return Object.assign({fillColor:this.fillColor,strokeColor:this.strokeColor,strokeWidth:this.strokeWidth,strokeDasharray:this.strokeDasharray,opacity:this.opacity},t.prototype.getState.call(this))},e.prototype.restoreState=function(e){var i=e;this.fillColor=i.fillColor,this.strokeColor=i.strokeColor,this.strokeWidth=i.strokeWidth,this.strokeDasharray=i.strokeDasharray,this.opacity=i.opacity,this.createVisual(),t.prototype.restoreState.call(this,e),this.setSize()},e.prototype.scale=function(e,i){t.prototype.scale.call(this,e,i),this.setSize()},e.title="Rectangle marker",e}(k),B=function(t){function e(e,i,o,s){var r=t.call(this,e,s||'')||this;return r.widths=[],r.widthBoxes=[],r.widths=i,r.currentWidth=o,r.setCurrentWidth=r.setCurrentWidth.bind(r),r}return s(e,t),e.prototype.getUi=function(){var t=this,e=document.createElement("div");return e.style.display="flex",e.style.overflow="hidden",e.style.flexGrow="2",this.widths.forEach((function(i){var o=document.createElement("div");o.style.display="flex",o.style.flexGrow="2",o.style.alignItems="center",o.style.justifyContent="space-between",o.style.padding="5px",o.style.borderWidth="2px",o.style.borderStyle="solid",o.style.borderColor=i===t.currentWidth?t.uiStyleSettings.toolboxAccentColor:"transparent",o.addEventListener("click",(function(){t.setCurrentWidth(i,o)})),e.appendChild(o);var s=document.createElement("div");s.innerText=i.toString(),s.style.marginRight="5px",o.appendChild(s);var r=document.createElement("div");r.style.minHeight="20px",r.style.flexGrow="2",r.style.display="flex",r.style.alignItems="center";var n=document.createElement("hr");n.style.minWidth="20px",n.style.border="0px",n.style.borderTop=i+"px solid "+t.uiStyleSettings.toolboxColor,n.style.flexGrow="2",r.appendChild(n),o.appendChild(r),t.widthBoxes.push(o)})),e},e.prototype.setCurrentWidth=function(t,e){var i=this;this.currentWidth=t,this.widthBoxes.forEach((function(t){t.style.borderColor=t===e?i.uiStyleSettings.toolboxAccentColor:"transparent"})),this.onWidthChanged&&this.onWidthChanged(this.currentWidth)},e}(v),E=function(t){function e(e,i,o,s){var r=t.call(this,e,s||'')||this;return r.styles=[],r.styleBoxes=[],r.styles=i,r.currentStyle=o,r.setCurrentStyle=r.setCurrentStyle.bind(r),r}return s(e,t),e.prototype.getUi=function(){var t=this,e=document.createElement("div");return e.style.display="flex",e.style.overflow="hidden",e.style.flexGrow="2",this.styles.forEach((function(i){var o=document.createElement("div");o.style.display="flex",o.style.alignItems="center",o.style.justifyContent="space-between",o.style.padding="5px",o.style.borderWidth="2px",o.style.borderStyle="solid",o.style.overflow="hidden",o.style.maxWidth=100/t.styles.length-5+"%",o.style.borderColor=i===t.currentStyle?t.uiStyleSettings.toolboxAccentColor:"transparent",o.addEventListener("click",(function(){t.setCurrentStyle(i,o)})),e.appendChild(o);var s=document.createElement("div");s.style.minHeight="20px",s.style.flexGrow="2",s.style.overflow="hidden";var r='\n \n ";s.innerHTML=r,o.appendChild(s),t.styleBoxes.push(o)})),e},e.prototype.setCurrentStyle=function(t,e){var i=this;this.currentStyle=t,this.styleBoxes.forEach((function(t){t.style.borderColor=t===e?i.uiStyleSettings.toolboxAccentColor:"transparent"})),this.onStyleChanged&&this.onStyleChanged(this.currentStyle)},e}(v),M=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.strokeColor=o.defaultColor,s.strokeWidth=o.defaultStrokeWidth,s.strokeDasharray=o.defaultStrokeDasharray,s.strokePanel=new m("Line color",o.defaultColorSet,o.defaultColor),s.strokePanel.onColorChanged=s.setStrokeColor,s.strokeWidthPanel=new B("Line width",o.defaultStrokeWidths,o.defaultStrokeWidth),s.strokeWidthPanel.onWidthChanged=s.setStrokeWidth,s.strokeStylePanel=new E("Line style",o.defaultStrokeDasharrays,o.defaultStrokeDasharray),s.strokeStylePanel.onStyleChanged=s.setStrokeDasharray,s}return s(e,t),Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.strokePanel,this.strokeWidthPanel,this.strokeStylePanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=t.prototype.getState.call(this);return i.typeName=e.typeName,i},e.typeName="FrameMarker",e.title="Frame marker",e.icon='',e}(w),T=function(){this.defaultColorSet=["#EF4444","#10B981","#2563EB","#FFFF00","#7C3AED","#F472B6","#000000","#FFFFFF"],this.defaultColor=this.defaultColorSet[0],this.defaultFillColor=this.defaultColorSet[0],this.defaultStrokeColor=this.defaultColorSet[7],this.defaultHighlightColor=this.defaultColorSet[3],this.defaultStrokeWidth=3,this.defaultStrokeDasharray="",this.defaultHighlightOpacity=.5,this.defaultFontFamily="Helvetica, Arial, sans-serif",this.defaultStrokeWidths=[1,2,3,5,10],this.defaultStrokeDasharrays=["","3","12 3","9 6 3 6"],this.defaultOpacitySteps=[.1,.25,.5,.75,1],this.displayMode="inline",this.defaultFontFamilies=['Times, "Times New Roman", serif',"Helvetica, Arial, sans-serif",'Courier, "Courier New", monospace',"cursive","fantasy"],this.popupMargin=30,this.newFreehandMarkerOnPointerUp=!1,this.defaultColorsFollowCurrentColors=!1,this.freehandPixelRatio=1,this.disableRotation=!1,this.defaultCaptionFontSize="1rem",this.defaultCaptionText="Text",this.wrapText=!1},P=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.x1=0,s.y1=0,s.x2=0,s.y2=0,s.defaultLength=50,s.manipulationStartX=0,s.manipulationStartY=0,s.manipulationStartX1=0,s.manipulationStartY1=0,s.manipulationStartX2=0,s.manipulationStartY2=0,s.setupControlBox(),s}return s(e,t),e.prototype.ownsTarget=function(e){return!!t.prototype.ownsTarget.call(this,e)||!(!this.grip1.ownsTarget(e)&&!this.grip2.ownsTarget(e))},e.prototype.pointerDown=function(e,i){t.prototype.pointerDown.call(this,e,i),this.manipulationStartX=e.x,this.manipulationStartY=e.y,"new"===this.state&&(this.x1=e.x,this.y1=e.y,this.x2=e.x,this.y2=e.y),this.manipulationStartX1=this.x1,this.manipulationStartY1=this.y1,this.manipulationStartX2=this.x2,this.manipulationStartY2=this.y2,"new"!==this.state&&(this.select(),this.grip1.ownsTarget(i)?this.activeGrip=this.grip1:this.grip2.ownsTarget(i)?this.activeGrip=this.grip2:this.activeGrip=void 0,this.activeGrip?this._state="resize":this._state="move")},e.prototype.pointerUp=function(e){var i=this.state;t.prototype.pointerUp.call(this,e),"creating"===this.state&&Math.abs(this.x1-this.x2)<10&&Math.abs(this.y1-this.y2)<10?(this.x2=this.x1+this.defaultLength,this.adjustVisual(),this.adjustControlBox()):this.manipulate(e),this._state="select","creating"===i&&this.onMarkerCreated&&this.onMarkerCreated(this)},e.prototype.adjustVisual=function(){},e.prototype.manipulate=function(t){"creating"===this.state?this.resize(t):"move"===this.state?(this.x1=this.manipulationStartX1+t.x-this.manipulationStartX,this.y1=this.manipulationStartY1+t.y-this.manipulationStartY,this.x2=this.manipulationStartX2+t.x-this.manipulationStartX,this.y2=this.manipulationStartY2+t.y-this.manipulationStartY,this.adjustVisual(),this.adjustControlBox()):"resize"===this.state&&this.resize(t)},e.prototype.resize=function(t){switch(this.activeGrip){case this.grip1:this.x1=t.x,this.y1=t.y;break;case this.grip2:case void 0:this.x2=t.x,this.y2=t.y}this.adjustVisual(),this.adjustControlBox()},e.prototype.select=function(){t.prototype.select.call(this),this.adjustControlBox(),this.controlBox.style.display=""},e.prototype.deselect=function(){t.prototype.deselect.call(this),this.controlBox.style.display="none"},e.prototype.setupControlBox=function(){this.controlBox=h.createGroup(),this.container.appendChild(this.controlBox),this.addControlGrips(),this.controlBox.style.display="none"},e.prototype.adjustControlBox=function(){this.positionGrips()},e.prototype.addControlGrips=function(){this.grip1=this.createGrip(),this.grip2=this.createGrip(),this.positionGrips()},e.prototype.createGrip=function(){var t=new x;return t.visual.transform.baseVal.appendItem(h.createTransform()),this.controlBox.appendChild(t.visual),t},e.prototype.positionGrips=function(){var t=this.grip1.GRIP_SIZE;this.positionGrip(this.grip1.visual,this.x1-t/2,this.y1-t/2),this.positionGrip(this.grip2.visual,this.x2-t/2,this.y2-t/2)},e.prototype.positionGrip=function(t,e,i){var o=t.transform.baseVal.getItem(0);o.setTranslate(e,i),t.transform.baseVal.replaceItem(o,0)},e.prototype.getState=function(){return Object.assign({x1:this.x1,y1:this.y1,x2:this.x2,y2:this.y2},t.prototype.getState.call(this))},e.prototype.restoreState=function(e){t.prototype.restoreState.call(this,e);var i=e;this.x1=i.x1,this.y1=i.y1,this.x2=i.x2,this.y2=i.y2},e.prototype.scale=function(e,i){t.prototype.scale.call(this,e,i),this.x1=this.x1*e,this.y1=this.y1*i,this.x2=this.x2*e,this.y2=this.y2*i,this.adjustVisual(),this.adjustControlBox()},e}(C),L=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.strokeColor="transparent",s.strokeWidth=0,s.strokeDasharray="",s.setStrokeColor=s.setStrokeColor.bind(s),s.setStrokeWidth=s.setStrokeWidth.bind(s),s.setStrokeDasharray=s.setStrokeDasharray.bind(s),s.strokeColor=o.defaultColor,s.strokeWidth=o.defaultStrokeWidth,s.strokeDasharray=o.defaultStrokeDasharray,s.strokePanel=new m("Line color",o.defaultColorSet,o.defaultColor),s.strokePanel.onColorChanged=s.setStrokeColor,s.strokeWidthPanel=new B("Line width",o.defaultStrokeWidths,o.defaultStrokeWidth),s.strokeWidthPanel.onWidthChanged=s.setStrokeWidth,s.strokeStylePanel=new E("Line style",o.defaultStrokeDasharrays,o.defaultStrokeDasharray),s.strokeStylePanel.onStyleChanged=s.setStrokeDasharray,s}return s(e,t),e.prototype.ownsTarget=function(e){return!(!t.prototype.ownsTarget.call(this,e)&&e!==this.visual&&e!==this.selectorLine&&e!==this.visibleLine)},e.prototype.createVisual=function(){this.visual=h.createGroup(),this.selectorLine=h.createLine(this.x1,this.y1,this.x2,this.y2,[["stroke","transparent"],["stroke-width",(this.strokeWidth+10).toString()]]),this.visibleLine=h.createLine(this.x1,this.y1,this.x2,this.y2,[["stroke",this.strokeColor],["stroke-width",this.strokeWidth.toString()]]),this.visual.appendChild(this.selectorLine),this.visual.appendChild(this.visibleLine),this.addMarkerVisualToContainer(this.visual)},e.prototype.pointerDown=function(e,i){t.prototype.pointerDown.call(this,e,i),"new"===this.state&&(this.createVisual(),this.adjustVisual(),this._state="creating")},e.prototype.adjustVisual=function(){this.selectorLine&&this.visibleLine&&(this.selectorLine.setAttribute("x1",this.x1.toString()),this.selectorLine.setAttribute("y1",this.y1.toString()),this.selectorLine.setAttribute("x2",this.x2.toString()),this.selectorLine.setAttribute("y2",this.y2.toString()),this.visibleLine.setAttribute("x1",this.x1.toString()),this.visibleLine.setAttribute("y1",this.y1.toString()),this.visibleLine.setAttribute("x2",this.x2.toString()),this.visibleLine.setAttribute("y2",this.y2.toString()),h.setAttributes(this.visibleLine,[["stroke",this.strokeColor]]),h.setAttributes(this.visibleLine,[["stroke-width",this.strokeWidth.toString()]]),h.setAttributes(this.visibleLine,[["stroke-dasharray",this.strokeDasharray.toString()]]))},e.prototype.setStrokeColor=function(t){this.strokeColor=t,this.adjustVisual(),this.colorChanged(t)},e.prototype.setStrokeWidth=function(t){this.strokeWidth=t,this.adjustVisual()},e.prototype.setStrokeDasharray=function(t){this.strokeDasharray=t,this.adjustVisual(),this.stateChanged()},Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.strokePanel,this.strokeWidthPanel,this.strokeStylePanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=Object.assign({strokeColor:this.strokeColor,strokeWidth:this.strokeWidth,strokeDasharray:this.strokeDasharray},t.prototype.getState.call(this));return i.typeName=e.typeName,i},e.prototype.restoreState=function(e){t.prototype.restoreState.call(this,e);var i=e;this.strokeColor=i.strokeColor,this.strokeWidth=i.strokeWidth,this.strokeDasharray=i.strokeDasharray,this.createVisual(),this.adjustVisual()},e.typeName="LineMarker",e.title="Line marker",e.icon='',e}(P),D=function(t){function e(e,i,o,s){var r=t.call(this,e,s||'')||this;return r.fonts=[],r.fontBoxes=[],r.fonts=i,r.currentFont=o,r.setCurrentFont=r.setCurrentFont.bind(r),r}return s(e,t),e.prototype.getUi=function(){var t=this,e=document.createElement("div");return e.style.overflow="hidden",e.style.flexGrow="2",this.fonts.forEach((function(i){var o=document.createElement("div");o.style.display="inline-block",o.style.alignItems="center",o.style.justifyContent="space-between",o.style.padding="5px",o.style.borderWidth="2px",o.style.borderStyle="solid",o.style.overflow="hidden",o.style.maxWidth=100/t.fonts.length-5+"%",o.style.borderColor=i===t.currentFont?t.uiStyleSettings.toolboxAccentColor:"transparent",o.addEventListener("click",(function(){t.setCurrentFont(i,o)})),e.appendChild(o);var s=document.createElement("div");s.style.display="flex",s.style.minHeight="20px",s.style.flexGrow="2",s.style.fontFamily=i,s.style.overflow="hidden";var r=document.createElement("div");r.style.whiteSpace="nowrap",r.style.overflow="hidden",r.style.textOverflow="ellipsis",r.innerHTML="The quick brown fox jumps over the lazy dog",s.appendChild(r),o.appendChild(s),t.fontBoxes.push(o)})),e},e.prototype.setCurrentFont=function(t,e){var i=this;this.currentFont=t,this.fontBoxes.forEach((function(t){t.style.borderColor=t===e?i.uiStyleSettings.toolboxAccentColor:"transparent"})),this.onFontChanged&&this.onFontChanged(this.currentFont)},e}(v),A=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.color="transparent",s.padding=5,s.DEFAULT_TEXT="your text here",s.text=s.DEFAULT_TEXT,s.isMoved=!1,s.color=o.defaultColor,s.fontFamily=o.defaultFontFamily,s.defaultSize={x:100,y:30},s.setColor=s.setColor.bind(s),s.setFont=s.setFont.bind(s),s.renderText=s.renderText.bind(s),s.sizeText=s.sizeText.bind(s),s.textEditDivClicked=s.textEditDivClicked.bind(s),s.showTextEditor=s.showTextEditor.bind(s),s.setSize=s.setSize.bind(s),s.positionTextEditor=s.positionTextEditor.bind(s),s.wrapText=s.wrapText.bind(s),s.colorPanel=new m("Color",o.defaultColorSet,o.defaultColor),s.colorPanel.onColorChanged=s.setColor,s.fontFamilyPanel=new D("Font",o.defaultFontFamilies,o.defaultFontFamily),s.fontFamilyPanel.onFontChanged=s.setFont,s}return s(e,t),e.prototype.ownsTarget=function(e){if(t.prototype.ownsTarget.call(this,e)||e===this.visual||e===this.textElement||e===this.bgRectangle)return!0;var i=!1;return this.textElement.childNodes.forEach((function(t){t===e&&(i=!0)})),i},e.prototype.createVisual=function(){this.visual=h.createGroup(),this.bgRectangle=h.createRect(1,1,[["fill","transparent"]]),this.visual.appendChild(this.bgRectangle),this.textElement=h.createText([["fill",this.color],["font-family",this.fontFamily],["font-size","16px"],["x","0"],["y","0"]]),this.textElement.transform.baseVal.appendItem(h.createTransform()),this.textElement.transform.baseVal.appendItem(h.createTransform()),this.visual.appendChild(this.textElement),this.addMarkerVisualToContainer(this.visual),this.renderText()},e.prototype.pointerDown=function(e,i){t.prototype.pointerDown.call(this,e,i),this.isMoved=!1,this.pointerDownPoint=e,this.pointerDownTimestamp=Date.now(),"new"===this.state&&(this.createVisual(),this.moveVisual(e),this._state="creating")},e.prototype.wrapText=function(){function t(t){var e=t[0].length;return t.forEach((function(t){t.length>e&&(e=t.length)})),.35*e/t.length}if(""!==this.text){for(var e=this.text.split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/),i=1*this.width/this.height,o=new(Array.bind.apply(Array,a([void 0],e))),s=t(o),r=Number.MAX_VALUE,n=function(){var i=o[0];o.forEach((function(t){t.length>i.length&&(i=t)})),(r=i.lastIndexOf(" ",r-1))>0?(o=[],e.forEach((function(t){for(var e=t;e.length>r;){var i=e.lastIndexOf(" ",r);i<0&&(i=e.indexOf(" ")),i>0?(o.push(e.substring(0,i)),e=e.substring(i).trim()):(o.push(e),e="")}o.push(e)})),s=t(o)):s=-1};s>i;)n();return o.join("\r\n")}return this.text},e.prototype.renderText=function(){var t=this;if(this.textElement){for(;this.textElement.lastChild;)this.textElement.removeChild(this.textElement.lastChild);(this.globalSettings.wrapText?this.wrapText():this.text).split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/).forEach((function(e){t.textElement.appendChild(h.createTSpan(""===e.trim()?" ":e.trim(),[["x","0"],["dy","1.2em"]]))})),setTimeout(this.sizeText,10)}},e.prototype.getTextScale=function(){var t=this.textElement.getBBox(),e=1;if(t.width>0&&t.height>0){var i=(1*this.width-this.width*this.padding*2/100)/t.width,o=(1*this.height-this.height*this.padding*2/100)/t.height;e=Math.min(i,o)}return e},e.prototype.getTextPosition=function(t){var e="rtl"===window.getComputedStyle(this.textElement).direction?1:-1,i=this.textElement.getBBox(),o=0,s=0;return i.width>0&&i.height>0&&(o=(this.width+e*i.width*t)/2,s=this.height/2-i.height*t/2),{x:o,y:s}},e.prototype.sizeText=function(){var t=this.textElement.getBBox(),e=this.getTextScale(),i=this.getTextPosition(e);i.y-=t.y*e,navigator.userAgent.indexOf("Edge/")>-1?this.textElement.style.transform="translate("+i.x+"px, "+i.y+"px) scale("+e+", "+e+")":(this.textElement.transform.baseVal.getItem(0).setTranslate(i.x,i.y),this.textElement.transform.baseVal.getItem(1).setScale(e,e))},e.prototype.manipulate=function(e){t.prototype.manipulate.call(this,e),void 0!==this.pointerDownPoint&&(this.isMoved=Math.abs(e.x-this.pointerDownPoint.x)>5||Math.abs(e.y-this.pointerDownPoint.y)>5)},e.prototype.resize=function(e){t.prototype.resize.call(this,e),this.isMoved=!0,this.setSize(),this.globalSettings.wrapText?this.renderText():this.sizeText()},e.prototype.setSize=function(){t.prototype.setSize.call(this),this.visual&&this.bgRectangle&&(h.setAttributes(this.visual,[["width",this.width.toString()],["height",this.height.toString()]]),h.setAttributes(this.bgRectangle,[["width",this.width.toString()],["height",this.height.toString()]]))},e.prototype.pointerUp=function(e){var i=this.state;"creating"===i&&(this._suppressMarkerCreateEvent=!0),t.prototype.pointerUp.call(this,e),this.setSize(),("creating"===i||!this.isMoved&&Date.now()-this.pointerDownTimestamp>500)&&this.showTextEditor(),this.pointerDownPoint=void 0},e.prototype.showTextEditor=function(){var t=this;this._state="edit",this.overlayContainer.innerHTML="",this.textEditDiv=document.createElement("div"),this.textEditDiv.style.flexGrow="2",this.textEditDiv.style.alignItems="center",this.textEditDiv.style.justifyContent="center",this.textEditDiv.style.pointerEvents="auto",this.textEditDiv.style.overflow="hidden",this.textEditor=document.createElement("div"),this.textEditor.style.position="absolute",this.textEditor.style.fontFamily=this.fontFamily,this.textEditor.style.lineHeight="1em",this.textEditor.innerText=this.text,this.textEditor.contentEditable="true",this.textEditor.style.color=this.color,this.textEditor.style.whiteSpace="pre",this.positionTextEditor(),this.textEditor.addEventListener("pointerup",(function(t){t.stopPropagation()})),this.globalSettings.wrapText||this.textEditor.addEventListener("input",(function(){for(var e=Number.parseFloat(t.textEditor.style.fontSize);t.textEditor.clientWidth>=Number.parseInt(t.textEditor.style.maxWidth)&&e>.9;)e-=.1,t.textEditor.style.fontSize=Math.max(e,.9)+"em"})),this.textEditor.addEventListener("keyup",(function(t){t.cancelBubble=!0})),this.textEditor.addEventListener("paste",(function(t){if(t.clipboardData){var e=t.clipboardData.getData("text"),i=window.getSelection();if(!i.rangeCount)return!1;i.deleteFromDocument(),i.getRangeAt(0).insertNode(document.createTextNode(e)),t.preventDefault()}})),this.textEditDiv.addEventListener("pointerup",(function(){t.textEditDivClicked(t.textEditor.innerText)})),this.textEditDiv.appendChild(this.textEditor),this.overlayContainer.appendChild(this.textEditDiv),this.hideVisual(),this.textEditor.focus(),document.execCommand("selectAll")},e.prototype.positionTextEditor=function(){if("edit"===this.state)if(void 0===this.textEditor)this.showTextEditor();else if(this.globalSettings.wrapText)this.textEditor.style.left=this.left+this.padding+"px",this.textEditor.style.top=this.top+this.padding+"px",this.textEditor.style.width=this.width-2*this.padding+"px",this.textEditor.style.height=this.height-2*this.padding+"px",this.textEditor.style.maxHeight=this.textEditor.style.height,this.textEditor.style.whiteSpace="wrap";else{this.textElement.style.display="";var t=this.getTextScale(),e=this.rotatePoint({x:this.left+this.width/2,y:this.top+this.height/2}),i=this.textElement.getBBox(),o={x:i.width*t,y:i.height*t};e.x-=o.x/2,e.y-=o.y/2,this.textEditor.style.top=e.y+"px",this.textEditor.style.left=e.x+"px",this.textEditor.style.maxWidth=this.overlayContainer.offsetWidth-e.x+"px",this.textEditor.style.fontSize=Math.max(16*t,12)+"px",this.textElement.style.display="none"}},e.prototype.textEditDivClicked=function(t){this.text=t.trim(),this.overlayContainer.innerHTML="",this.renderText(),this.showVisual(),this._suppressMarkerCreateEvent&&(this._suppressMarkerCreateEvent=!1,this.onMarkerCreated&&this.onMarkerCreated(this)),this.stateChanged()},e.prototype.select=function(){t.prototype.select.call(this),"edit"===this.state&&this.textEditDivClicked(this.textEditor.innerText)},e.prototype.deselect=function(){"edit"===this.state&&this.textEditDivClicked(this.textEditor.innerText),t.prototype.deselect.call(this)},e.prototype.dblClick=function(e,i){t.prototype.dblClick.call(this,e,i),this.showTextEditor()},e.prototype.setColor=function(t){this.textElement&&h.setAttributes(this.textElement,[["fill",t]]),this.color=t,this.textEditor&&(this.textEditor.style.color=this.color),this.colorChanged(t)},e.prototype.setFont=function(t){this.textElement&&h.setAttributes(this.textElement,[["font-family",t]]),this.fontFamily=t,this.textEditor&&(this.textEditor.style.fontFamily=this.fontFamily),this.renderText(),this.stateChanged()},e.prototype.hideVisual=function(){this.textElement.style.display="none",this.hideControlBox()},e.prototype.showVisual=function(){"edit"===this.state&&(this._state="select"),this.textElement.style.display="",this.showControlBox()},Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.colorPanel,this.fontFamilyPanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=Object.assign({color:this.color,fontFamily:this.fontFamily,padding:this.padding,text:this.text,wrapText:this.globalSettings.wrapText},t.prototype.getState.call(this));return i.typeName=e.typeName,i},e.prototype.restoreState=function(e){var i=e;this.color=i.color,this.fontFamily=i.fontFamily,this.padding=i.padding,this.text=i.text,this.createVisual(),t.prototype.restoreState.call(this,e),this.setSize(),this.globalSettings.wrapText&&this.renderText()},e.prototype.scale=function(e,i){t.prototype.scale.call(this,e,i),this.setSize(),this.sizeText(),this.positionTextEditor()},e.typeName="TextMarker",e.title="Text marker",e.icon='',e}(k),_=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.color="transparent",s.lineWidth=3,s.drawing=!1,s.pixelRatio=1,s.color=o.defaultColor,s.lineWidth=o.defaultStrokeWidth,s.pixelRatio=o.freehandPixelRatio,s.setColor=s.setColor.bind(s),s.addCanvas=s.addCanvas.bind(s),s.finishCreation=s.finishCreation.bind(s),s.setLineWidth=s.setLineWidth.bind(s),s.colorPanel=new m("Color",o.defaultColorSet,o.defaultColor),s.colorPanel.onColorChanged=s.setColor,s.lineWidthPanel=new B("Line width",o.defaultStrokeWidths,o.defaultStrokeWidth),s.lineWidthPanel.onWidthChanged=s.setLineWidth,s}return s(e,t),e.prototype.ownsTarget=function(e){return!(!t.prototype.ownsTarget.call(this,e)&&e!==this.visual&&e!==this.drawingImage)},e.prototype.createVisual=function(){this.visual=h.createGroup(),this.drawingImage=h.createImage(),this.visual.appendChild(this.drawingImage);var t=h.createTransform();this.visual.transform.baseVal.appendItem(t),this.addMarkerVisualToContainer(this.visual)},e.prototype.pointerDown=function(e,i){"new"===this.state&&(this.addCanvas(),this.createVisual(),this._state="creating"),"creating"===this.state?(this.canvasContext.strokeStyle=this.color,this.canvasContext.lineWidth=this.lineWidth,this.canvasContext.beginPath(),this.canvasContext.moveTo(e.x,e.y),this.drawing=!0):t.prototype.pointerDown.call(this,e,i)},e.prototype.manipulate=function(e){"creating"===this.state?this.drawing&&(this.canvasContext.lineTo(e.x,e.y),this.canvasContext.stroke()):t.prototype.manipulate.call(this,e)},e.prototype.resize=function(e){t.prototype.resize.call(this,e),h.setAttributes(this.visual,[["width",this.width.toString()],["height",this.height.toString()]]),h.setAttributes(this.drawingImage,[["width",this.width.toString()],["height",this.height.toString()]])},e.prototype.pointerUp=function(e){"creating"===this._state?this.drawing&&(this.canvasContext.closePath(),this.drawing=!1,this.globalSettings.newFreehandMarkerOnPointerUp&&this.finishCreation()):t.prototype.pointerUp.call(this,e)},e.prototype.addCanvas=function(){this.overlayContainer.innerHTML="",this.canvasElement=document.createElement("canvas"),this.canvasElement.width=this.overlayContainer.clientWidth*this.pixelRatio,this.canvasElement.height=this.overlayContainer.clientHeight*this.pixelRatio,this.canvasContext=this.canvasElement.getContext("2d"),this.canvasContext.scale(this.pixelRatio,this.pixelRatio),this.overlayContainer.appendChild(this.canvasElement)},e.prototype.select=function(){"creating"===this.state&&this.finishCreation(),t.prototype.select.call(this)},e.prototype.deselect=function(){"creating"===this.state&&this.finishCreation(),t.prototype.deselect.call(this)},e.prototype.finishCreation=function(){for(var t=this.canvasContext.getImageData(0,0,this.canvasElement.width,this.canvasElement.height),e=[this.canvasElement.width+1,this.canvasElement.height+1,-1,-1],i=e[0],o=e[1],s=e[2],r=e[3],n=!1,a=0;a0&&(n=!0,ar&&(r=a),h>s&&(s=h));if(n){this.left=i/this.pixelRatio,this.top=o/this.pixelRatio,this.width=(s-i)/this.pixelRatio,this.height=(r-o)/this.pixelRatio;var l=document.createElement("canvas");l.width=s-i,l.height=r-o,l.getContext("2d").putImageData(this.canvasContext.getImageData(i,o,s-i,r-o),0,0),this.drawingImgUrl=l.toDataURL("image/png"),this.setDrawingImage(),this._state="select",this.onMarkerCreated&&this.onMarkerCreated(this)}this.overlayContainer.innerHTML=""},e.prototype.setDrawingImage=function(){h.setAttributes(this.drawingImage,[["width",this.width.toString()],["height",this.height.toString()]]),h.setAttributes(this.drawingImage,[["href",this.drawingImgUrl]]),this.moveVisual({x:this.left,y:this.top})},e.prototype.setColor=function(t){this.color=t,this.colorChanged(t)},e.prototype.setLineWidth=function(t){this.lineWidth=t},Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return"new"===this.state||"creating"===this.state?[this.colorPanel,this.lineWidthPanel]:[]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=Object.assign({drawingImgUrl:this.drawingImgUrl},t.prototype.getState.call(this));return i.typeName=e.typeName,i},e.prototype.restoreState=function(e){this.createVisual(),t.prototype.restoreState.call(this,e),this.drawingImgUrl=e.drawingImgUrl,this.setDrawingImage()},e.prototype.scale=function(e,i){t.prototype.scale.call(this,e,i),this.setDrawingImage()},e.typeName="FreehandMarker",e.title="Freehand marker",e.icon='',e}(k),I=function(t){function e(e,i,o){var s=t.call(this,e,o||'')||this;return s.typeBoxes=[],s.currentType=i,s.setCurrentType=s.setCurrentType.bind(s),s}return s(e,t),e.prototype.getUi=function(){var t=this,e=document.createElement("div");e.style.display="flex",e.style.overflow="hidden",e.style.flexGrow="2";for(var i=function(i){var s="both";switch(i){case 0:s="both";break;case 1:s="start";break;case 2:s="end";break;case 3:s="none"}var r=document.createElement("div");if(r.style.display="flex",r.style.flexGrow="2",r.style.alignItems="center",r.style.justifyContent="space-between",r.style.padding="5px",r.style.borderWidth="2px",r.style.borderStyle="solid",r.style.borderColor=s===o.currentType?o.uiStyleSettings.toolboxAccentColor:"transparent",r.addEventListener("click",(function(){t.setCurrentType(s,r)})),e.appendChild(r),"both"===s||"start"===s){var n=document.createElement("div");n.style.display="flex",n.style.alignItems="center",n.style.minHeight="20px",n.innerHTML='\n \n ',n.style.marginLeft="5px",r.appendChild(n)}var a=document.createElement("div");a.style.display="flex",a.style.alignItems="center",a.style.minHeight="20px",a.style.flexGrow="2";var h=document.createElement("hr");if(h.style.minWidth="20px",h.style.border="0px",h.style.borderTop="3px solid "+(void 0!==o.uiStyleSettings?o.uiStyleSettings.toolboxColor:"#eeeeee"),h.style.flexGrow="2",a.appendChild(h),r.appendChild(a),"both"===s||"end"===s){var l=document.createElement("div");l.style.display="flex",l.style.alignItems="center",l.style.minHeight="20px",l.innerHTML='\n \n ',l.style.marginRight="5px",r.appendChild(l)}o.typeBoxes.push(r)},o=this,s=0;s<4;s++)i(s);return e},e.prototype.setCurrentType=function(t,e){var i=this;this.currentType=t,this.typeBoxes.forEach((function(t){t.style.borderColor=t===e?void 0!==i.uiStyleSettings?i.uiStyleSettings.toolboxAccentColor:"#3080c3":"transparent"})),this.onArrowTypeChanged&&this.onArrowTypeChanged(this.currentType)},e}(v),W=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.arrowType="end",s.arrowBaseHeight=10,s.arrowBaseWidth=10,s.getArrowPoints=s.getArrowPoints.bind(s),s.setArrowType=s.setArrowType.bind(s),s.arrowTypePanel=new I("Arrow type","end"),s.arrowTypePanel.onArrowTypeChanged=s.setArrowType,s}return s(e,t),e.prototype.ownsTarget=function(e){return!(!t.prototype.ownsTarget.call(this,e)&&e!==this.arrow1&&e!==this.arrow2)},e.prototype.getArrowPoints=function(t,e){var i=this.arrowBaseWidth+2*this.strokeWidth,o=this.arrowBaseHeight+2*this.strokeWidth;return t-i/2+","+(e+o/2)+" "+t+","+(e-o/2)+" "+(t+i/2)+","+(e+o/2)},e.prototype.createTips=function(){this.arrow1=h.createPolygon(this.getArrowPoints(this.x1,this.y1),[["fill",this.strokeColor]]),this.arrow1.transform.baseVal.appendItem(h.createTransform()),this.visual.appendChild(this.arrow1),this.arrow2=h.createPolygon(this.getArrowPoints(this.x2,this.y2),[["fill",this.strokeColor]]),this.arrow2.transform.baseVal.appendItem(h.createTransform()),this.visual.appendChild(this.arrow2)},e.prototype.pointerDown=function(e,i){t.prototype.pointerDown.call(this,e,i),"creating"===this.state&&this.createTips()},e.prototype.adjustVisual=function(){if(t.prototype.adjustVisual.call(this),this.arrow1&&this.arrow2){this.arrow1.style.display="both"===this.arrowType||"start"===this.arrowType?"":"none",this.arrow2.style.display="both"===this.arrowType||"end"===this.arrowType?"":"none",h.setAttributes(this.arrow1,[["points",this.getArrowPoints(this.x1,this.y1)],["fill",this.strokeColor]]),h.setAttributes(this.arrow2,[["points",this.getArrowPoints(this.x2,this.y2)],["fill",this.strokeColor]]);var e=0;Math.abs(this.x1-this.x2)>.1&&(e=180*Math.atan((this.y2-this.y1)/(this.x2-this.x1))/Math.PI+90*Math.sign(this.x1-this.x2));var i=this.arrow1.transform.baseVal.getItem(0);i.setRotate(e,this.x1,this.y1),this.arrow1.transform.baseVal.replaceItem(i,0);var o=this.arrow2.transform.baseVal.getItem(0);o.setRotate(e+180,this.x2,this.y2),this.arrow2.transform.baseVal.replaceItem(o,0)}},e.prototype.setArrowType=function(t){this.arrowType=t,this.adjustVisual(),this.stateChanged()},Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.strokePanel,this.strokeWidthPanel,this.strokeStylePanel,this.arrowTypePanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=Object.assign({arrowType:this.arrowType},t.prototype.getState.call(this));return i.typeName=e.typeName,i},e.prototype.restoreState=function(e){t.prototype.restoreState.call(this,e);var i=e;this.arrowType=i.arrowType,this.createTips(),this.adjustVisual()},e.typeName="ArrowMarker",e.title="Arrow marker",e.icon='',e}(L),N=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.fillColor=o.defaultFillColor,s.strokeWidth=0,s.fillPanel=new m("Color",o.defaultColorSet,o.defaultFillColor),s.fillPanel.onColorChanged=s.setFillColor,s}return s(e,t),Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.fillPanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=t.prototype.getState.call(this);return i.typeName=e.typeName,i},e.typeName="CoverMarker",e.title="Cover marker",e.icon='',e}(w),H=function(t){function e(e,i,o,s){var r=t.call(this,e,s||'')||this;return r.opacities=[],r.opacityBoxes=[],r.opacities=i,r.currentOpacity=o,r.setCurrentOpacity=r.setCurrentOpacity.bind(r),r}return s(e,t),e.prototype.getUi=function(){var t=this,e=document.createElement("div");return e.style.display="flex",e.style.overflow="hidden",e.style.flexGrow="2",e.style.justifyContent="space-between",this.opacities.forEach((function(i){var o=document.createElement("div");o.style.display="flex",o.style.alignItems="center",o.style.justifyContent="center",o.style.padding="5px",o.style.borderWidth="2px",o.style.borderStyle="solid",o.style.borderColor=i===t.currentOpacity?t.uiStyleSettings.toolboxAccentColor:"transparent",o.addEventListener("click",(function(){t.setCurrentOpacity(i,o)})),e.appendChild(o);var s=document.createElement("div");s.innerText=100*i+"%",o.appendChild(s),t.opacityBoxes.push(o)})),e},e.prototype.setCurrentOpacity=function(t,e){var i=this;this.currentOpacity=t,this.opacityBoxes.forEach((function(t){t.style.borderColor=t===e?i.uiStyleSettings.toolboxAccentColor:"transparent"})),this.onOpacityChanged&&this.onOpacityChanged(this.currentOpacity)},e}(v),z=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.setOpacity=s.setOpacity.bind(s),s.fillColor=o.defaultHighlightColor,s.strokeWidth=0,s.opacity=o.defaultHighlightOpacity,s.fillPanel=new m("Color",o.defaultColorSet,s.fillColor),s.fillPanel.onColorChanged=s.setFillColor,s.opacityPanel=new H("Opacity",o.defaultOpacitySteps,s.opacity),s.opacityPanel.onOpacityChanged=s.setOpacity,s}return s(e,t),e.prototype.setOpacity=function(t){this.opacity=t,this.visual&&h.setAttributes(this.visual,[["opacity",this.opacity.toString()]]),this.stateChanged()},Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.fillPanel,this.opacityPanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=t.prototype.getState.call(this);return i.typeName=e.typeName,i},e.typeName="HighlightMarker",e.title="Highlight marker",e.icon='',e}(N),R='',O='',V=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.bgColor="transparent",s.tipPosition={x:0,y:0},s.tipBase1Position={x:0,y:0},s.tipBase2Position={x:0,y:0},s.tipMoving=!1,s.color=o.defaultStrokeColor,s.bgColor=o.defaultFillColor,s.fontFamily=o.defaultFontFamily,s.defaultSize={x:100,y:30},s.setBgColor=s.setBgColor.bind(s),s.getTipPoints=s.getTipPoints.bind(s),s.positionTip=s.positionTip.bind(s),s.setTipPoints=s.setTipPoints.bind(s),s.colorPanel=new m("Text color",o.defaultColorSet,s.color,R),s.colorPanel.onColorChanged=s.setColor,s.bgColorPanel=new m("Fill color",o.defaultColorSet,s.bgColor,O),s.bgColorPanel.onColorChanged=s.setBgColor,s.fontFamilyPanel=new D("Font",o.defaultFontFamilies,o.defaultFontFamily),s.fontFamilyPanel.onFontChanged=s.setFont,s.tipGrip=new x,s.tipGrip.visual.transform.baseVal.appendItem(h.createTransform()),s.controlBox.appendChild(s.tipGrip.visual),s}return s(e,t),e.prototype.ownsTarget=function(e){return t.prototype.ownsTarget.call(this,e)||this.tipGrip.ownsTarget(e)||this.tip===e},e.prototype.createTip=function(){h.setAttributes(this.bgRectangle,[["fill",this.bgColor],["rx","10px"]]),this.tip=h.createPolygon(this.getTipPoints(),[["fill",this.bgColor]]),this.visual.appendChild(this.tip)},e.prototype.pointerDown=function(e,i){"new"===this.state&&t.prototype.pointerDown.call(this,e,i),"creating"===this.state?this.createTip():this.tipGrip.ownsTarget(i)?(this.manipulationStartLeft=this.left,this.manipulationStartTop=this.top,this.tipMoving=!0):t.prototype.pointerDown.call(this,e,i)},e.prototype.pointerUp=function(e){if(this.tipMoving)this.tipMoving=!1,this.isMoved=!0,t.prototype.pointerUp.call(this,e);else{var i="creating"===this.state;t.prototype.pointerUp.call(this,e),this.setTipPoints(i),this.positionTip()}},e.prototype.manipulate=function(e){if(this.tipMoving){var i=this.unrotatePoint(e);this.tipPosition={x:i.x-this.manipulationStartLeft,y:i.y-this.manipulationStartTop},this.positionTip()}else t.prototype.manipulate.call(this,e)},e.prototype.setBgColor=function(t){this.bgRectangle&&this.tip&&(h.setAttributes(this.bgRectangle,[["fill",t]]),h.setAttributes(this.tip,[["fill",t]])),this.bgColor=t,this.fillColorChanged(t)},e.prototype.getTipPoints=function(){return this.setTipPoints("creating"===this.state),this.tipBase1Position.x+","+this.tipBase1Position.y+" "+this.tipBase2Position.x+","+this.tipBase2Position.y+" "+this.tipPosition.x+","+this.tipPosition.y},e.prototype.setTipPoints=function(t){void 0===t&&(t=!1);var e=Math.min(this.height/2,15),i=this.height/5;t&&(this.tipPosition={x:e+i/2,y:this.height+20});var o=Math.atan(this.height/2/(this.width/2));this.tipPosition.x=this.width/2&&this.tipPosition.y=this.width/2&&this.tipPosition.y>=this.height/2?o.1)){var e=180*Math.atan((this.y2-this.y1)/(this.x2-this.x1))/Math.PI+90*Math.sign(this.x1-this.x2),i=this.tip1.transform.baseVal.getItem(0);i.setRotate(e,this.x1,this.y1),this.tip1.transform.baseVal.replaceItem(i,0);var o=this.tip2.transform.baseVal.getItem(0);o.setRotate(e+180,this.x2,this.y2),this.tip2.transform.baseVal.replaceItem(o,0)}},Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.strokePanel,this.strokeWidthPanel,this.strokeStylePanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=t.prototype.getState.call(this);return i.typeName=e.typeName,i},e.prototype.restoreState=function(e){t.prototype.restoreState.call(this,e),this.createTips(),this.adjustVisual()},e.typeName="MeasurementMarker",e.title="Measurement marker",e.icon='',e}(L),j=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.strokePanel.colors=o.defaultColorSet,s.fillColor="transparent",s}return s(e,t),Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.strokePanel,this.strokeWidthPanel,this.strokeStylePanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=t.prototype.getState.call(this);return i.typeName=e.typeName,i},e.typeName="EllipseFrameMarker",e.title="Ellipse frame marker",e.icon='',e}(G),U=function(){function t(){this.undoStack=[],this.redoStack=[]}return Object.defineProperty(t.prototype,"isUndoPossible",{get:function(){return this.undoStack.length>0},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isRedoPossible",{get:function(){return this.redoStack.length>0},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"undoStepCount",{get:function(){return this.undoStack.length},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"redoStepCount",{get:function(){return this.redoStack.length},enumerable:!1,configurable:!0}),t.prototype.addUndoStep=function(t){0!==this.undoStack.length&&JSON.stringify(this.undoStack[this.undoStack.length-1])===JSON.stringify(t)||(this.undoStack.push(t),JSON.stringify(this.lastRedoStep)!==JSON.stringify(t)&&this.redoStack.splice(0,this.redoStack.length))},t.prototype.replaceLastUndoStep=function(t){this.undoStack.length>0&&(this.undoStack[this.undoStack.length-1]=t)},t.prototype.getLastUndoStep=function(){return this.undoStack.length>0?this.undoStack[this.undoStack.length-1]:void 0},t.prototype.undo=function(){if(this.undoStack.length>1){var t=this.undoStack.pop();return void 0!==t&&this.redoStack.push(t),this.undoStack.length>0?this.undoStack[this.undoStack.length-1]:void 0}},t.prototype.redo=function(){return this.lastRedoStep=this.redoStack.pop(),this.lastRedoStep},t}(),X=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.strokeColor="transparent",s.strokeWidth=0,s.strokeDasharray="",s.curveX=0,s.curveY=0,s.manipulationStartCurveX=0,s.manipulationStartCurveY=0,s.setStrokeColor=s.setStrokeColor.bind(s),s.setStrokeWidth=s.setStrokeWidth.bind(s),s.setStrokeDasharray=s.setStrokeDasharray.bind(s),s.positionGrips=s.positionGrips.bind(s),s.addControlGrips=s.addControlGrips.bind(s),s.adjustVisual=s.adjustVisual.bind(s),s.setupControlBox=s.setupControlBox.bind(s),s.resize=s.resize.bind(s),s.strokeColor=o.defaultColor,s.strokeWidth=o.defaultStrokeWidth,s.strokeDasharray=o.defaultStrokeDasharray,s.strokePanel=new m("Line color",o.defaultColorSet,o.defaultColor),s.strokePanel.onColorChanged=s.setStrokeColor,s.strokeWidthPanel=new B("Line width",o.defaultStrokeWidths,o.defaultStrokeWidth),s.strokeWidthPanel.onWidthChanged=s.setStrokeWidth,s.strokeStylePanel=new E("Line style",o.defaultStrokeDasharrays,o.defaultStrokeDasharray),s.strokeStylePanel.onStyleChanged=s.setStrokeDasharray,s}return s(e,t),e.prototype.ownsTarget=function(e){return!(!t.prototype.ownsTarget.call(this,e)&&e!==this.visual&&e!==this.selectorCurve&&e!==this.visibleCurve&&!this.curveGrip.ownsTarget(e))},e.prototype.getPathD=function(){return"M "+this.x1+" "+this.y1+" Q "+this.curveX+" "+this.curveY+", "+this.x2+" "+this.y2},e.prototype.createVisual=function(){this.visual=h.createGroup(),this.selectorCurve=h.createPath(this.getPathD(),[["stroke","transparent"],["stroke-width",(this.strokeWidth+10).toString()],["fill","transparent"]]),this.visibleCurve=h.createPath(this.getPathD(),[["stroke",this.strokeColor],["stroke-width",this.strokeWidth.toString()],["fill","transparent"]]),this.visual.appendChild(this.selectorCurve),this.visual.appendChild(this.visibleCurve),this.addMarkerVisualToContainer(this.visual)},e.prototype.pointerDown=function(e,i){t.prototype.pointerDown.call(this,e,i),this.manipulationStartCurveX=this.curveX,this.manipulationStartCurveY=this.curveY,"new"===this.state&&(this.curveX=e.x,this.curveY=e.y),"new"===this.state?(this.createVisual(),this.adjustVisual(),this._state="creating"):this.curveGrip.ownsTarget(i)&&(this.activeGrip=this.curveGrip,this._state="resize")},e.prototype.adjustVisual=function(){this.selectorCurve&&this.visibleCurve&&(this.selectorCurve.setAttribute("d",this.getPathD()),this.visibleCurve.setAttribute("d",this.getPathD()),h.setAttributes(this.visibleCurve,[["stroke",this.strokeColor]]),h.setAttributes(this.visibleCurve,[["stroke-width",this.strokeWidth.toString()]]),h.setAttributes(this.visibleCurve,[["stroke-dasharray",this.strokeDasharray.toString()]]))},e.prototype.setupControlBox=function(){t.prototype.setupControlBox.call(this),this.curveControlLine1=h.createLine(this.x1,this.y1,this.curveX,this.curveY,[["stroke","black"],["stroke-width","1"],["stroke-opacity","0.5"],["stroke-dasharray","3, 2"]]),this.curveControlLine2=h.createLine(this.x2,this.y2,this.curveX,this.curveY,[["stroke","black"],["stroke-width","1"],["stroke-opacity","0.5"],["stroke-dasharray","3, 2"]]),this.controlBox.insertBefore(this.curveControlLine1,this.controlBox.firstChild),this.controlBox.insertBefore(this.curveControlLine2,this.controlBox.firstChild)},e.prototype.addControlGrips=function(){this.curveGrip=this.createGrip(),this.curveX=0,this.curveY=0,t.prototype.addControlGrips.call(this)},e.prototype.positionGrips=function(){t.prototype.positionGrips.call(this);var e=this.curveGrip.GRIP_SIZE;this.positionGrip(this.curveGrip.visual,this.curveX-e/2,this.curveY-e/2),this.curveControlLine1&&this.curveControlLine2&&(this.curveControlLine1.setAttribute("x1",this.x1.toString()),this.curveControlLine1.setAttribute("y1",this.y1.toString()),this.curveControlLine1.setAttribute("x2",this.curveX.toString()),this.curveControlLine1.setAttribute("y2",this.curveY.toString()),this.curveControlLine2.setAttribute("x1",this.x2.toString()),this.curveControlLine2.setAttribute("y1",this.y2.toString()),this.curveControlLine2.setAttribute("x2",this.curveX.toString()),this.curveControlLine2.setAttribute("y2",this.curveY.toString()))},e.prototype.manipulate=function(e){"move"===this.state&&(this.curveX=this.manipulationStartCurveX+e.x-this.manipulationStartX,this.curveY=this.manipulationStartCurveY+e.y-this.manipulationStartY),t.prototype.manipulate.call(this,e)},e.prototype.resize=function(e){this.activeGrip===this.curveGrip&&(this.curveX=e.x,this.curveY=e.y),t.prototype.resize.call(this,e),"creating"===this.state&&(this.curveX=this.x1+(this.x2-this.x1)/2,this.curveY=this.y1+(this.y2-this.y1)/2)},e.prototype.setStrokeColor=function(t){this.strokeColor=t,this.adjustVisual(),this.colorChanged(t)},e.prototype.setStrokeWidth=function(t){this.strokeWidth=t,this.adjustVisual()},e.prototype.setStrokeDasharray=function(t){this.strokeDasharray=t,this.adjustVisual()},e.prototype.scale=function(e,i){this.curveX=this.curveX*e,this.curveY=this.curveY*i,t.prototype.scale.call(this,e,i)},Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.strokePanel,this.strokeWidthPanel,this.strokeStylePanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var i=Object.assign({strokeColor:this.strokeColor,strokeWidth:this.strokeWidth,strokeDasharray:this.strokeDasharray,curveX:this.curveX,curveY:this.curveY},t.prototype.getState.call(this));return i.typeName=e.typeName,i},e.prototype.restoreState=function(e){t.prototype.restoreState.call(this,e);var i=e;this.strokeColor=i.strokeColor,this.strokeWidth=i.strokeWidth,this.strokeDasharray=i.strokeDasharray,this.curveX=i.curveX,this.curveY=i.curveY,this.createVisual(),this.adjustVisual()},e.typeName="CurveMarker",e.title="Curve marker",e.icon='',e}(P),Y=function(t){function e(e,i,o){var s=t.call(this,e,i,o)||this;return s.fillColor="transparent",s.strokeColor="transparent",s.strokeWidth=0,s.strokeDasharray="",s.textColor="transparent",s.fontSize="1rem",s.isMoved=!1,s.captionText="Caption",s.PADDING=5,s.captionBoxWidth=0,s.captionBoxHeight=0,s.strokeColor=o.defaultColor,s.strokeWidth=o.defaultStrokeWidth,s.strokeDasharray=o.defaultStrokeDasharray,s.fillColor=o.defaultFillColor,s.textColor=o.defaultStrokeColor,s.fontFamily=o.defaultFontFamily,s.fontSize=o.defaultCaptionFontSize,s.captionText=o.defaultCaptionText,s.setStrokeColor=s.setStrokeColor.bind(s),s.setFillColor=s.setFillColor.bind(s),s.setStrokeWidth=s.setStrokeWidth.bind(s),s.setStrokeDasharray=s.setStrokeDasharray.bind(s),s.createVisual=s.createVisual.bind(s),s.sizeCaption=s.sizeCaption.bind(s),s.setCaptionText=s.setCaptionText.bind(s),s.showTextEditor=s.showTextEditor.bind(s),s.positionTextEditor=s.positionTextEditor.bind(s),s.finishTextEditing=s.finishTextEditing.bind(s),s.setFont=s.setFont.bind(s),s.setTextColor=s.setTextColor.bind(s),s.strokePanel=new m("Line color",a(o.defaultColorSet,["transparent"]),s.strokeColor),s.strokePanel.onColorChanged=s.setStrokeColor,s.fillPanel=new m("Fill color",a(o.defaultColorSet,["transparent"]),s.fillColor,O),s.fillPanel.onColorChanged=s.setFillColor,s.strokeWidthPanel=new B("Line width",o.defaultStrokeWidths,o.defaultStrokeWidth),s.strokeWidthPanel.onWidthChanged=s.setStrokeWidth,s.strokeStylePanel=new E("Line style",o.defaultStrokeDasharrays,o.defaultStrokeDasharray),s.strokeStylePanel.onStyleChanged=s.setStrokeDasharray,s.fontFamilyPanel=new D("Font",o.defaultFontFamilies,o.defaultFontFamily),s.fontFamilyPanel.onFontChanged=s.setFont,s.textColorPanel=new m("Text color",o.defaultColorSet,s.textColor,R),s.textColorPanel.onColorChanged=s.setTextColor,s}return s(e,t),e.prototype.ownsTarget=function(e){return!(!t.prototype.ownsTarget.call(this,e)&&e!==this.visual&&e!==this.frame&&e!==this.captionBg&&e!==this.captionElement)},e.prototype.createVisual=function(){this.visual=h.createGroup(),this.addMarkerVisualToContainer(this.visual),this.captionBg=h.createRect(1,1,[["fill",this.fillColor]]),this.visual.appendChild(this.captionBg),this.captionElement=h.createText([["fill",this.textColor],["font-family",this.fontFamily]]),this.captionElement.style.fontSize=this.fontSize,this.captionElement.style.textAnchor="start",this.captionElement.style.dominantBaseline="text-before-edge",this.captionElement.textContent=this.captionText,this.visual.appendChild(this.captionElement),this.frame=h.createRect(this.width,this.height,[["fill","transparent"],["stroke",this.strokeColor],["stroke-width",this.strokeWidth.toString()],["stroke-dasharray",this.strokeDasharray]]),this.visual.appendChild(this.frame),this.sizeCaption()},e.prototype.setCaptionText=function(t){this.captionText=t,this.captionElement.textContent=this.captionText,this.sizeCaption()},e.prototype.pointerDown=function(e,i){t.prototype.pointerDown.call(this,e,i),this.isMoved=!1,this.pointerDownPoint=e,this.pointerDownTimestamp=Date.now(),"new"===this.state&&(this.createVisual(),this.moveVisual(e),this._state="creating")},e.prototype.manipulate=function(e){t.prototype.manipulate.call(this,e),void 0!==this.pointerDownPoint&&(this.isMoved=Math.abs(e.x-this.pointerDownPoint.x)>5||Math.abs(e.y-this.pointerDownPoint.y)>5)},e.prototype.resize=function(e){t.prototype.resize.call(this,e),this.setSize()},e.prototype.sizeCaption=function(){var t=this.captionElement.getBBox();""!==this.captionText.trim()?(this.captionBoxWidth=t.width+2*this.PADDING,this.captionBoxHeight=t.height+2*this.PADDING):(this.captionBoxWidth=0,this.captionBoxHeight=0),h.setAttributes(this.captionBg,[["width",this.captionBoxWidth.toString()],["height",this.captionBoxHeight.toString()],["clip-path","path('M0,0 H"+this.width+" V"+this.height+" H"+-this.width+" Z')"]]),h.setAttributes(this.captionElement,[["x",this.PADDING.toString()],["y",this.PADDING.toString()],["clip-path","path('M0,0 H"+(this.width-this.PADDING)+" V"+this.height+" H"+(-this.width-this.PADDING)+" Z')"]])},e.prototype.showTextEditor=function(){var t=this;this._state="edit",this.overlayContainer.innerHTML="",this.textEditDiv=document.createElement("div"),this.textEditDiv.style.flexGrow="2",this.textEditDiv.style.alignItems="center",this.textEditDiv.style.justifyContent="center",this.textEditDiv.style.pointerEvents="auto",this.textEditDiv.style.overflow="hidden",this.textEditBox=document.createElement("input"),this.textEditBox.style.position="absolute",this.textEditBox.style.width=this.width+"px",this.captionBoxHeight>0&&(this.textEditBox.style.height=this.captionBoxHeight+"px"),this.textEditBox.style.fontSize=this.fontSize,this.textEditBox.style.fontFamily=this.fontFamily,this.textEditBox.style.backgroundColor=this.fillColor,this.textEditBox.style.color=this.textColor,this.textEditBox.style.borderWidth="0",this.textEditBox.setAttribute("value",this.captionText),this.textEditBox.select(),this.textEditDiv.appendChild(this.textEditBox),this.overlayContainer.appendChild(this.textEditDiv),this.textEditBox.addEventListener("pointerup",(function(t){t.stopPropagation()})),this.textEditBox.addEventListener("keypress",(function(e){"Enter"===e.key&&t.finishTextEditing(t.textEditBox.value)})),this.textEditBox.addEventListener("keyup",(function(t){t.cancelBubble=!0})),this.textEditBox.addEventListener("blur",(function(){t.finishTextEditing(t.textEditBox.value)})),this.textEditDiv.addEventListener("pointerup",(function(){t.finishTextEditing(t.textEditBox.value)})),this.positionTextEditor(),this.textEditBox.focus()},e.prototype.positionTextEditor=function(){"edit"===this.state&&(void 0===this.textEditBox?this.showTextEditor():(this.textEditBox.style.left=this.left+"px",this.textEditBox.style.top=this.top+"px",this.textEditBox.style.transform="rotate("+this.rotationAngle+"deg)",this.textEditBox.style.transformOrigin=this.width/2+"px "+this.height/2+"px"))},e.prototype.finishTextEditing=function(t){this.setCaptionText(t.trim()),this.overlayContainer.innerHTML="",this.stateChanged()},e.prototype.setFont=function(t){this.captionElement&&h.setAttributes(this.captionElement,[["font-family",t]]),this.fontFamily=t,this.textEditBox&&(this.textEditBox.style.fontFamily=this.fontFamily),this.sizeCaption(),this.stateChanged()},e.prototype.setTextColor=function(t){this.captionElement&&h.setAttributes(this.captionElement,[["fill",t]]),this.textColor=t,this.textEditBox&&(this.textEditBox.style.color=this.textColor),this.stateChanged()},e.prototype.setSize=function(){t.prototype.setSize.call(this),h.setAttributes(this.frame,[["width",this.width.toString()],["height",this.height.toString()]]),this.sizeCaption()},e.prototype.pointerUp=function(e){t.prototype.pointerUp.call(this,e),this.setSize(),!this.isMoved&&Date.now()-this.pointerDownTimestamp>500&&this.showTextEditor(),this.pointerDownPoint=void 0},e.prototype.dblClick=function(e,i){t.prototype.dblClick.call(this,e,i),this.showTextEditor()},e.prototype.setStrokeColor=function(t){this.strokeColor=t,this.frame&&h.setAttributes(this.frame,[["stroke",this.strokeColor]]),this.colorChanged(t),this.stateChanged()},e.prototype.setFillColor=function(t){this.fillColor=t,this.captionBg&&h.setAttributes(this.captionBg,[["fill",this.fillColor]]),this.fillColorChanged(t),this.stateChanged()},e.prototype.setStrokeWidth=function(t){this.strokeWidth=t,this.frame&&h.setAttributes(this.frame,[["stroke-width",this.strokeWidth.toString()]]),this.stateChanged()},e.prototype.setStrokeDasharray=function(t){this.strokeDasharray=t,this.frame&&h.setAttributes(this.frame,[["stroke-dasharray",this.strokeDasharray]]),this.stateChanged()},Object.defineProperty(e.prototype,"toolboxPanels",{get:function(){return[this.strokePanel,this.fillPanel,this.strokeWidthPanel,this.strokeStylePanel,this.fontFamilyPanel,this.textColorPanel]},enumerable:!1,configurable:!0}),e.prototype.getState=function(){var e=Object.assign({fillColor:this.fillColor,strokeColor:this.strokeColor,strokeWidth:this.strokeWidth,strokeDasharray:this.strokeDasharray,opacity:1,textColor:this.textColor,fontFamily:this.fontFamily,fontSize:this.fontSize,captionText:this.captionText},t.prototype.getState.call(this));return e.typeName=this.typeName,e},e.prototype.restoreState=function(e){var i=e;this.fillColor=i.fillColor,this.strokeColor=i.strokeColor,this.strokeWidth=i.strokeWidth,this.strokeDasharray=i.strokeDasharray,this.textColor=i.textColor,this.fontFamily=i.fontFamily,this.captionText=i.captionText,this.fontSize=i.fontSize,this.createVisual(),t.prototype.restoreState.call(this,e),this.setSize()},e.prototype.scale=function(e,i){t.prototype.scale.call(this,e,i),this.setSize()},e.typeName="CaptionFrameMarker",e.title="Caption frame marker",e.icon='',e}(k),Z=function(){function t(t,e){void 0===e&&(e=!1),this.cancelable=!1,this._defaultPrevented=!1,this.markerArea=t,this.cancelable=e}return Object.defineProperty(t.prototype,"defaultPrevented",{get:function(){return this._defaultPrevented},enumerable:!1,configurable:!0}),t.prototype.preventDefault=function(){this._defaultPrevented=!0},t}(),K=function(t){function e(e,i,o){var s=t.call(this,e,!1)||this;return s.dataUrl=i,s.state=o,s}return s(e,t),e}(Z),J=function(t){function e(e,i,o){void 0===o&&(o=!1);var s=t.call(this,e,o)||this;return s.marker=i,s}return s(e,t),e}(Z),Q=function(){function t(){this.render=[],this.beforeclose=[],this.close=[],this.show=[],this.restorestate=[],this.statechange=[],this.markerselect=[],this.markerdeselect=[],this.markercreating=[],this.markercreate=[],this.markerbeforedelete=[],this.markerdelete=[],this.markerchange=[],this.focus=[],this.blur=[]}return t.prototype.addEventListener=function(t,e){this[t].push(e)},t.prototype.removeEventListener=function(t,e){var i=this[t].indexOf(e);i>-1&&this[t].splice(i,1)},t}(),q=function(){function t(e){this.touchPoints=0,this._availableMarkerTypes=this.DEFAULT_MARKER_TYPES,this.mode="select",this.markers=[],this.isDragging=!1,this.renderEventListeners=[],this.closeEventListeners=[],this.settings=new T,this._isOpen=!1,this.undoRedoManager=new U,this.renderAtNaturalSize=!1,this.renderImageType="image/png",this.renderMarkersOnly=!1,this.zoomSteps=[1,1.5,2,4],this._zoomLevel=1,this._isResizing=!1,this.prevPanPoint={x:0,y:0},this.eventListeners=new Q,this._silentRenderMode=!1,this._isFocused=!1,this._instanceNo=t.instanceCounter++,this.styles=new u(this.instanceNo),this.uiStyleSettings=this.styles.settings,this.target=e,this.targetRoot=document.body,this.width=e.clientWidth,this.height=e.clientHeight,this.styles.removeStyleSheet(),this.open=this.open.bind(this),this.setTopLeft=this.setTopLeft.bind(this),this.toolbarButtonClicked=this.toolbarButtonClicked.bind(this),this.createNewMarker=this.createNewMarker.bind(this),this.addNewMarker=this.addNewMarker.bind(this),this.markerCreated=this.markerCreated.bind(this),this.setCurrentMarker=this.setCurrentMarker.bind(this),this.onPointerDown=this.onPointerDown.bind(this),this.onDblClick=this.onDblClick.bind(this),this.onPointerMove=this.onPointerMove.bind(this),this.onPointerUp=this.onPointerUp.bind(this),this.onPointerOut=this.onPointerOut.bind(this),this.onKeyUp=this.onKeyUp.bind(this),this.overrideOverflow=this.overrideOverflow.bind(this),this.restoreOverflow=this.restoreOverflow.bind(this),this.close=this.close.bind(this),this.closeUI=this.closeUI.bind(this),this.addCloseEventListener=this.addCloseEventListener.bind(this),this.removeCloseEventListener=this.removeCloseEventListener.bind(this),this.addRenderEventListener=this.addRenderEventListener.bind(this),this.removeRenderEventListener=this.removeRenderEventListener.bind(this),this.clientToLocalCoordinates=this.clientToLocalCoordinates.bind(this),this.onWindowResize=this.onWindowResize.bind(this),this.deleteSelectedMarker=this.deleteSelectedMarker.bind(this),this.setWindowHeight=this.setWindowHeight.bind(this),this.removeMarker=this.removeMarker.bind(this),this.colorChanged=this.colorChanged.bind(this),this.fillColorChanged=this.fillColorChanged.bind(this),this.onPopupTargetResize=this.onPopupTargetResize.bind(this),this.showNotesEditor=this.showNotesEditor.bind(this),this.hideNotesEditor=this.hideNotesEditor.bind(this),this.stepZoom=this.stepZoom.bind(this),this.focus=this.focus.bind(this),this.blur=this.blur.bind(this),this.markerStateChanged=this.markerStateChanged.bind(this),this.switchToSelectMode=this.switchToSelectMode.bind(this),this.addDefs=this.addDefs.bind(this),this.addDefsToImage=this.addDefsToImage.bind(this)}return Object.defineProperty(t.prototype,"ALL_MARKER_TYPES",{get:function(){return[M,_,W,A,j,G,z,V,F,N,L,X,Y]},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"DEFAULT_MARKER_TYPES",{get:function(){return[M,_,W,A,G,z,V]},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"BASIC_MARKER_TYPES",{get:function(){return[M,_,W,A,z]},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"availableMarkerTypes",{get:function(){return this._availableMarkerTypes},set:function(t){var e=this;this._availableMarkerTypes.splice(0),t.forEach((function(t){if("string"==typeof t){var i=e.ALL_MARKER_TYPES.find((function(e){return e.typeName===t}));void 0!==i&&e._availableMarkerTypes.push(i)}else e._availableMarkerTypes.push(t)}))},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"currentMarker",{get:function(){return this._currentMarker},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isOpen",{get:function(){return this._isOpen},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isUndoPossible",{get:function(){return!(!this.undoRedoManager||!this.undoRedoManager.isUndoPossible)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"isRedoPossible",{get:function(){return!(!this.undoRedoManager||!this.undoRedoManager.isRedoPossible)},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"zoomLevel",{get:function(){return this._zoomLevel},set:function(t){this._zoomLevel=t,this.editorCanvas&&this.contentDiv&&(this.editorCanvas.style.transform="scale("+this._zoomLevel+")",this.contentDiv.scrollTo({left:(this.editorCanvas.clientWidth*this._zoomLevel-this.contentDiv.clientWidth)/2,top:(this.editorCanvas.clientHeight*this._zoomLevel-this.contentDiv.clientHeight)/2}))},enumerable:!1,configurable:!0}),Object.defineProperty(t.prototype,"instanceNo",{get:function(){return this._instanceNo},enumerable:!1,configurable:!0}),t.prototype.open=function(){this.setupResizeObserver(),this.setEditingTarget(),this.setTopLeft(),this.initMarkerCanvas(),this.initOverlay(),this.attachEvents(),"popup"===this.settings.displayMode&&this.onPopupTargetResize(),l.isLicensed||this.addLogo(),this._isOpen=!0,this._isFocused=!0},t.prototype.show=function(){var t=this;void 0===this.styles.styleSheetRoot&&void 0!==c.styleSheetRoot&&(this.styles.styleSheetRoot=c.styleSheetRoot),this.markers.splice(0),this.setWindowHeight(),this.showUI(),this.open(),this.eventListeners.show.forEach((function(e){return e(new Z(t))}))},t.prototype.render=function(){return r(this,void 0,void 0,(function(){var t;return n(this,(function(e){switch(e.label){case 0:return this.setCurrentMarker(),(t=new p).naturalSize=this.renderAtNaturalSize,t.imageType=this.renderImageType,t.imageQuality=this.renderImageQuality,t.markersOnly=this.renderMarkersOnly,t.width=this.renderWidth,t.height=this.renderHeight,[4,t.rasterize(this.target instanceof HTMLImageElement?this.target:null,this.markerImage,this.renderTarget)];case 1:return e.sent(),[4,t.rasterize(this.target instanceof HTMLImageElement?this.target:null,this.markerImage,this.renderTarget)];case 2:return[2,e.sent()]}}))}))},t.prototype.close=function(t){var e=this;if(void 0===t&&(t=!1),this.isOpen){var i=!1;t||this.eventListeners.beforeclose.forEach((function(t){var o=new Z(e,!0);t(o),o.defaultPrevented&&(i=!0)})),i||(this.coverDiv&&this.closeUI(),this.targetObserver&&(this.targetObserver.unobserve(this.target),this.targetObserver.unobserve(this.editorCanvas)),"popup"===this.settings.displayMode&&window.removeEventListener("resize",this.setWindowHeight),this.eventListeners.close.forEach((function(t){return t(new Z(e))})),this.detachEvents(),this._isOpen=!1)}},t.prototype.addMarkersToToolbar=function(){for(var t,e=[],i=0;ithis.editorCanvas.clientHeight?this.editorCanvas.clientHeight*t:this.editorCanvas.clientWidth,i=e',t.title="Powered by marker.js",t.style.display="grid",t.style.alignItems="center",t.style.justifyItems="center",t.style.padding="3px",t.style.width="20px",t.style.height="20px",this.logoUI.appendChild(t),this.editorCanvas.appendChild(this.logoUI),this.logoUI.style.position="absolute",this.logoUI.style.pointerEvents="all",this.positionLogo()},t.prototype.positionLogo=function(){this.logoUI&&("right"!==this.uiStyleSettings.logoPosition?this.logoUI.style.left=this.markerImageHolder.offsetLeft+10+"px":this.logoUI.style.left=this.markerImageHolder.offsetLeft+this.markerImageHolder.offsetWidth-this.logoUI.clientWidth-10+"px",this.logoUI.style.top=this.markerImageHolder.offsetTop+this.markerImageHolder.offsetHeight-this.logoUI.clientHeight-10+"px")},t.prototype.overrideOverflow=function(){this.scrollXState=window.scrollX,this.scrollYState=window.scrollY,this.bodyOverflowState=document.body.style.overflow,window.scroll({top:0,left:0}),document.body.style.overflow="hidden"},t.prototype.restoreOverflow=function(){document.body.style.overflow=this.bodyOverflowState,window.scroll({top:this.scrollYState,left:this.scrollXState})},t.prototype.showUI=function(){var t;switch("popup"===this.settings.displayMode&&this.overrideOverflow(),this.coverDiv=document.createElement("div"),this.coverDiv.style.visibility=this._silentRenderMode?"hidden":"visible",this.coverDiv.className=this.styles.classNamePrefixBase+" "+this.styles.classNamePrefix,this.coverDiv.style.fontSize="16px",this.coverDiv.style.userSelect="none",this.settings.displayMode){case"inline":this.coverDiv.style.position="absolute";var e=void 0!==this.settings.uiOffsetTop?this.target.offsetTop+this.settings.uiOffsetTop:this.target.offsetTop>this.styles.settings.toolbarHeight?this.target.offsetTop-this.styles.settings.toolbarHeight:0,i=this.target.offsetLeft+(null!==(t=this.settings.uiOffsetLeft)&&void 0!==t?t:0);this.coverDiv.style.top=e+"px",this.coverDiv.style.left=i+"px",this.coverDiv.style.width=this.target.offsetWidth.toString()+"px",this.coverDiv.style.zIndex=void 0!==this.uiStyleSettings.zIndex?this.uiStyleSettings.zIndex:"5";break;case"popup":this.coverDiv.style.position="absolute",this.coverDiv.style.top="0px",this.coverDiv.style.left="0px",this.coverDiv.style.width="100vw",this.coverDiv.style.height=window.innerHeight+"px",this.coverDiv.style.backgroundColor="rgba(0, 0, 0, 0.75)",this.coverDiv.style.zIndex=void 0!==this.uiStyleSettings.zIndex?this.uiStyleSettings.zIndex:"1000",this.coverDiv.style.display="flex"}this.targetRoot.appendChild(this.coverDiv),this.uiDiv=document.createElement("div"),this.uiDiv.style.display="flex",this.uiDiv.style.flexDirection="column",this.uiDiv.style.flexGrow="2",this.uiDiv.style.margin="popup"===this.settings.displayMode?this.settings.popupMargin+"px":"0px","popup"===this.settings.displayMode&&(this.uiDiv.style.maxWidth="calc(100vw - "+2*this.settings.popupMargin+"px"),this.uiDiv.style.border="0px",this.coverDiv.appendChild(this.uiDiv),this.toolbar=new g(this.uiDiv,this.settings.displayMode,this._availableMarkerTypes,this.uiStyleSettings,this.styles),this.toolbar.addButtonClickListener(this.toolbarButtonClicked),this.toolbar.show(this._silentRenderMode||this.uiStyleSettings.hideToolbar?"hidden":"visible"),this.contentDiv=document.createElement("div"),this.contentDiv.style.display="flex",this.contentDiv.style.flexDirection="row",this.contentDiv.style.flexGrow="2",this.contentDiv.style.flexShrink="1","popup"===this.settings.displayMode&&(this.contentDiv.style.backgroundColor=this.uiStyleSettings.canvasBackgroundColor,this.contentDiv.style.maxHeight=this.windowHeight-2*this.settings.popupMargin-3.5*this.uiStyleSettings.toolbarHeight+"px",this.contentDiv.style.maxWidth="calc(100vw - "+2*this.settings.popupMargin+"px)"),this.contentDiv.style.overflow="auto",this.uiDiv.appendChild(this.contentDiv),this.editorCanvas=document.createElement("div"),this.editorCanvas.style.flexGrow="2",this.editorCanvas.style.flexShrink="1",this.editorCanvas.style.position="relative",this.editorCanvas.style.overflow="hidden",this.editorCanvas.style.display="flex","popup"===this.settings.displayMode&&(this.editorCanvas.style.alignItems="center",this.editorCanvas.style.justifyContent="center"),this.editorCanvas.style.pointerEvents="none",this.editorCanvas.style.transformOrigin="left top",this.editorCanvas.style.transform="scale("+this.zoomLevel+")",this.contentDiv.appendChild(this.editorCanvas),this.editingTarget=this.target instanceof HTMLImageElement?document.createElement("img"):document.createElement("canvas"),"inline"===this.settings.displayMode&&void 0===this.settings.uiOffsetTop&&this.target.offsetTop-1&&this.markers.splice(this.markers.indexOf(t),1),t.dispose()},t.prototype.switchToSelectMode=function(){this.mode="select",this.hideNotesEditor(),void 0!==this._currentMarker&&("new"!==this._currentMarker.state?this._currentMarker.select():(this.removeMarker(this._currentMarker),this.setCurrentMarker(),this.markerImage.style.cursor="default"),this.addUndoStep())},t.prototype.toolbarButtonClicked=function(t,e){if("marker"===t&&void 0!==e)this.createNewMarker(e);else if("action"===t)switch(e){case"select":this.switchToSelectMode(),this.switchToSelectMode();break;case"delete":this.deleteSelectedMarker();break;case"clear":this.clear();break;case"undo":this.undo();break;case"redo":this.redo();break;case"zoom":this.stepZoom();break;case"zoom-out":this.zoomLevel=1;break;case"notes":void 0===this.notesArea?(this.switchToSelectMode(),this.zoomLevel=1,this.showNotesEditor()):this.switchToSelectMode();break;case"close":this.close();break;case"render":this.switchToSelectMode(),this.startRenderAndClose()}},t.prototype.deleteSelectedMarker=function(){var t=this;if(void 0!==this._currentMarker){var e=!1;if(this.eventListeners.markerbeforedelete.forEach((function(i){var o=new J(t,t._currentMarker,!0);i(o),o.defaultPrevented&&(e=!0)})),!e){var i=this._currentMarker;this._currentMarker.dispose(),this.markerImage.removeChild(this._currentMarker.container),this.markers.splice(this.markers.indexOf(this._currentMarker),1),this.setCurrentMarker(),this.addUndoStep(),this.eventListeners.markerdelete.forEach((function(e){return e(new J(t,i))}))}}},t.prototype.clear=function(){var t=this,e=!1;if(this.markers.length>0&&(this.eventListeners.markerbeforedelete.forEach((function(i){var o=new J(t,void 0,!0);i(o),o.defaultPrevented&&(e=!0)})),!e)){this.setCurrentMarker();for(var i=function(e){var i=o.markers[e];o.setCurrentMarker(o.markers[e]),o._currentMarker.dispose(),o.markerImage.removeChild(o._currentMarker.container),o.markers.splice(o.markers.indexOf(o._currentMarker),1),o.eventListeners.markerdelete.forEach((function(e){return e(new J(t,i))}))},o=this,s=this.markers.length-1;s>=0;s--)i(s);this.addUndoStep()}},Object.defineProperty(t.prototype,"isNotesAreaOpen",{get:function(){return void 0!==this.notesArea},enumerable:!1,configurable:!0}),t.prototype.showNotesEditor=function(){var t;void 0!==this._currentMarker&&(this.overlayContainer.innerHTML="",this.notesArea=document.createElement("textarea"),this.notesArea.className=this.uiStyleSettings.notesAreaStyleClassName,this.notesArea.style.pointerEvents="auto",this.notesArea.style.alignSelf="stretch",this.notesArea.style.width="100%",this.notesArea.style.margin=this.uiStyleSettings.toolbarHeight/4+"px",this.notesArea.value=null!==(t=this._currentMarker.notes)&&void 0!==t?t:"",this.overlayContainer.appendChild(this.notesArea))},t.prototype.hideNotesEditor=function(){this.isNotesAreaOpen&&(void 0!==this._currentMarker&&(this._currentMarker.notes=""!==this.notesArea.value.trim()?this.notesArea.value:void 0),this.overlayContainer.removeChild(this.notesArea),this.notesArea=void 0)},t.prototype.selectLastMarker=function(){this.markers.length>0?this.setCurrentMarker(this.markers[this.markers.length-1]):this.setCurrentMarker()},t.prototype.addUndoStep=function(){var t=this;if(void 0===this._currentMarker||"edit"!==this._currentMarker.state){var e=this.getState(),i=this.undoRedoManager.getLastUndoStep();if(!i||i.width===e.width&&i.height===e.height){var o=this.undoRedoManager.undoStepCount;this.undoRedoManager.addUndoStep(e),o1&&this.panTo({x:t.clientX,y:t.clientY}))},t.prototype.onPointerUp=function(t){this.touchPoints>0&&this.touchPoints--,0===this.touchPoints&&this.isDragging&&void 0!==this._currentMarker&&this._currentMarker.pointerUp(this.clientToLocalCoordinates(t.clientX,t.clientY)),this.isDragging=!1,this.addUndoStep()},t.prototype.onPointerOut=function(){this.touchPoints>0&&this.touchPoints--},t.prototype.onKeyUp=function(t){void 0===this._currentMarker||void 0!==this.notesArea||"Delete"!==t.key&&"Backspace"!==t.key||this.deleteSelectedMarker()},t.prototype.clientToLocalCoordinates=function(t,e){var i=this.markerImage.getBoundingClientRect(),o=i.width/this.imageWidth/this.zoomLevel,s=i.height/this.imageHeight/this.zoomLevel;return{x:(t-i.left)/this.zoomLevel/o,y:(e-i.top)/this.zoomLevel/s}},t.prototype.onWindowResize=function(){this.positionUI()},t.prototype.positionUI=function(){switch(this.setTopLeft(),this.settings.displayMode){case"inline":var t=this.target.getClientRects(),e=t.length>0&&t.item(0)&&t.item(0).y>this.styles.settings.toolbarHeight?this.target.offsetTop-this.styles.settings.toolbarHeight:0;this.coverDiv.style.top=e+"px",this.coverDiv.style.left=this.target.offsetLeft.toString()+"px";break;case"popup":this.coverDiv.style.top="0px",this.coverDiv.style.left="0px",this.coverDiv.style.width="100vw",this.coverDiv.style.height=this.windowHeight+"px",this.contentDiv.style.maxHeight=this.windowHeight-2*this.settings.popupMargin-3.5*this.styles.settings.toolbarHeight+"px"}this.positionMarkerImage(),this.positionLogo()},t.prototype.addLicenseKey=function(t){l.addKey(t)},t.prototype.addEventListener=function(t,e){this.eventListeners.addEventListener(t,e)},t.prototype.removeEventListener=function(t,e){this.eventListeners.removeEventListener(t,e)},t.prototype.renderState=function(t){this._silentRenderMode=!0,this.settings.displayMode="inline",this.isOpen||this.show(),this.restoreState(t),this.startRenderAndClose(),this._silentRenderMode=!1},Object.defineProperty(t.prototype,"isFocused",{get:function(){return this._isFocused},enumerable:!1,configurable:!0}),t.prototype.focus=function(){var t=this;this._isFocused||(this.attachWindowEvents(),this._isFocused=!0,void 0!==this._previousCurrentMarker&&this.setCurrentMarker(this._previousCurrentMarker),this.eventListeners.focus.forEach((function(e){return e(new Z(t))})))},t.prototype.blur=function(){var t=this;this._isFocused&&(this.detachWindowEvents(),this._isFocused=!1,this._previousCurrentMarker=this._currentMarker,this.setCurrentMarker(),this.eventListeners.blur.forEach((function(e){return e(new Z(t))})))},t.instanceCounter=0,t}()}}]); +//# sourceMappingURL=markerjs2.js.map \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/deps/markerjs2.js.map b/src/main/resources/static/js/amcharts5/deps/markerjs2.js.map new file mode 100644 index 00000000..970c63a6 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/deps/markerjs2.js.map @@ -0,0 +1 @@ +{"version":3,"file":"deps/markerjs2.js","mappings":"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","sources":["webpack://@amcharts/amcharts5/./node_modules/node_modules/tslib/tslib.es6.js","webpack://@amcharts/amcharts5/./node_modules/src/core/SvgHelper.ts","webpack://@amcharts/amcharts5/./node_modules/src/core/Activator.ts","webpack://@amcharts/amcharts5/./node_modules/src/core/Renderer.ts","webpack://@amcharts/amcharts5/./node_modules/src/core/Style.ts","webpack://@amcharts/amcharts5/./node_modules/src/ui/Toolbar.ts","webpack://@amcharts/amcharts5/./node_modules/src/ui/Toolbox.ts","webpack://@amcharts/amcharts5/./node_modules/src/ui/ToolboxPanel.ts","webpack://@amcharts/amcharts5/./node_modules/src/ui/toolbox-panels/ColorPickerPanel.ts","webpack://@amcharts/amcharts5/./node_modules/src/core/MarkerBase.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/RectangularBoxMarkerGrips.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/ResizeGrip.ts","webpack://@amcharts/amcharts5/./node_modules/src/core/TransformMatrix.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/RectangularBoxMarkerBase.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/RectangleMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/ui/toolbox-panels/LineWidthPanel.ts","webpack://@amcharts/amcharts5/./node_modules/src/ui/toolbox-panels/LineStylePanel.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/frame-marker/FrameMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/core/Settings.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/LinearMarkerBase.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/line-marker/LineMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/ui/toolbox-panels/FontFamilyPanel.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/text-marker/TextMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/freehand-marker/FreehandMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/ui/toolbox-panels/ArrowTypePanel.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/arrow-marker/ArrowMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/cover-marker/CoverMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/ui/toolbox-panels/OpacityPanel.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/highlight-marker/HighlightMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/callout-marker/CalloutMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/ellipse-marker/EllipseMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/measurement-marker/MeasurementMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/ellipse-frame-marker/EllipseFrameMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/core/UndoRedoManager.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/curve-marker/CurveMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/markers/caption-frame-marker/CaptionFrameMarker.ts","webpack://@amcharts/amcharts5/./node_modules/src/core/Events.ts","webpack://@amcharts/amcharts5/./node_modules/src/MarkerArea.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**\r\n * Utility class to simplify SVG operations.\r\n */\r\nexport class SvgHelper {\r\n /**\r\n * Creates SVG \"defs\".\r\n */\r\n public static createDefs(): SVGDefsElement {\r\n const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');\r\n\r\n return defs;\r\n }\r\n\r\n /**\r\n * Sets attributes on an arbitrary SVG element\r\n * @param el - target SVG element.\r\n * @param attributes - set of name-value attribute pairs.\r\n */\r\n public static setAttributes(\r\n el: SVGElement,\r\n attributes: Array<[string, string]>\r\n ): void {\r\n for (const [attr, value] of attributes) {\r\n el.setAttribute(attr, value);\r\n }\r\n }\r\n\r\n /**\r\n * Creates an SVG rectangle with the specified width and height.\r\n * @param width \r\n * @param height \r\n * @param attributes - additional attributes.\r\n */\r\n public static createRect(\r\n width: number | string,\r\n height: number | string,\r\n attributes?: Array<[string, string]>\r\n ): SVGRectElement {\r\n const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');\r\n\r\n rect.setAttribute('width', width.toString());\r\n rect.setAttribute('height', height.toString());\r\n if (attributes) {\r\n SvgHelper.setAttributes(rect, attributes);\r\n }\r\n\r\n return rect;\r\n }\r\n\r\n /**\r\n * Creates an SVG line with specified end-point coordinates.\r\n * @param x1 \r\n * @param y1 \r\n * @param x2 \r\n * @param y2 \r\n * @param attributes - additional attributes.\r\n */\r\n public static createLine(\r\n x1: number | string,\r\n y1: number | string,\r\n x2: number | string,\r\n y2: number | string,\r\n attributes?: Array<[string, string]>\r\n ): SVGLineElement {\r\n const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');\r\n\r\n line.setAttribute('x1', x1.toString());\r\n line.setAttribute('y1', y1.toString());\r\n line.setAttribute('x2', x2.toString());\r\n line.setAttribute('y2', y2.toString());\r\n if (attributes) {\r\n SvgHelper.setAttributes(line, attributes);\r\n }\r\n\r\n return line;\r\n }\r\n\r\n /**\r\n * Creates an SVG polygon with specified points.\r\n * @param points - points as string.\r\n * @param attributes - additional attributes.\r\n */\r\n public static createPolygon(\r\n points: string,\r\n attributes?: Array<[string, string]>\r\n ): SVGPolygonElement {\r\n const polygon = document.createElementNS(\r\n 'http://www.w3.org/2000/svg',\r\n 'polygon'\r\n );\r\n\r\n polygon.setAttribute('points', points);\r\n if (attributes) {\r\n SvgHelper.setAttributes(polygon, attributes);\r\n }\r\n\r\n return polygon;\r\n }\r\n\r\n /**\r\n * Creates an SVG circle with the specified radius.\r\n * @param radius \r\n * @param attributes - additional attributes.\r\n */\r\n public static createCircle(\r\n radius: number,\r\n attributes?: Array<[string, string]>\r\n ): SVGCircleElement {\r\n const circle = document.createElementNS(\r\n 'http://www.w3.org/2000/svg',\r\n 'circle'\r\n );\r\n\r\n circle.setAttribute('cx', (radius / 2).toString());\r\n circle.setAttribute('cy', (radius / 2).toString());\r\n circle.setAttribute('r', radius.toString());\r\n if (attributes) {\r\n SvgHelper.setAttributes(circle, attributes);\r\n }\r\n\r\n return circle;\r\n }\r\n\r\n /**\r\n * Creates an SVG ellipse with the specified horizontal and vertical radii.\r\n * @param rx \r\n * @param ry \r\n * @param attributes - additional attributes.\r\n */\r\n public static createEllipse(\r\n rx: number,\r\n ry: number,\r\n attributes?: Array<[string, string]>\r\n ): SVGEllipseElement {\r\n const ellipse = document.createElementNS(\r\n 'http://www.w3.org/2000/svg',\r\n 'ellipse'\r\n );\r\n\r\n ellipse.setAttribute('cx', (rx / 2).toString());\r\n ellipse.setAttribute('cy', (ry / 2).toString());\r\n ellipse.setAttribute('rx', (rx / 2).toString());\r\n ellipse.setAttribute('ry', (ry / 2).toString());\r\n if (attributes) {\r\n SvgHelper.setAttributes(ellipse, attributes);\r\n }\r\n\r\n return ellipse;\r\n }\r\n\r\n /**\r\n * Creates an SVG group.\r\n * @param attributes - additional attributes.\r\n */\r\n public static createGroup(attributes?: Array<[string, string]>): SVGGElement {\r\n const g = document.createElementNS('http://www.w3.org/2000/svg', 'g');\r\n if (attributes) {\r\n SvgHelper.setAttributes(g, attributes);\r\n }\r\n return g;\r\n }\r\n\r\n /**\r\n * Creates an SVG transform.\r\n */\r\n public static createTransform(): SVGTransform {\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n\r\n return svg.createSVGTransform();\r\n }\r\n\r\n /**\r\n * Creates an SVG marker.\r\n * @param id \r\n * @param orient \r\n * @param markerWidth \r\n * @param markerHeight \r\n * @param refX \r\n * @param refY \r\n * @param markerElement \r\n */\r\n public static createMarker(\r\n id: string,\r\n orient: string,\r\n markerWidth: number | string,\r\n markerHeight: number | string,\r\n refX: number | string,\r\n refY: number | string,\r\n markerElement: SVGGraphicsElement\r\n ): SVGMarkerElement {\r\n const marker = document.createElementNS(\r\n 'http://www.w3.org/2000/svg',\r\n 'marker'\r\n );\r\n SvgHelper.setAttributes(marker, [\r\n ['id', id],\r\n ['orient', orient],\r\n ['markerWidth', markerWidth.toString()],\r\n ['markerHeight', markerHeight.toString()],\r\n ['refX', refX.toString()],\r\n ['refY', refY.toString()],\r\n ]);\r\n\r\n marker.appendChild(markerElement);\r\n\r\n return marker;\r\n }\r\n\r\n /**\r\n * Creaes an SVG text element.\r\n * @param attributes - additional attributes.\r\n */\r\n public static createText(\r\n attributes?: Array<[string, string]>\r\n ): SVGTextElement {\r\n const text = document.createElementNS('http://www.w3.org/2000/svg', 'text');\r\n text.setAttribute('x', '0');\r\n text.setAttribute('y', '0');\r\n\r\n if (attributes) {\r\n SvgHelper.setAttributes(text, attributes);\r\n }\r\n\r\n return text;\r\n }\r\n\r\n /**\r\n * Creates an SVG TSpan.\r\n * @param text - inner text.\r\n * @param attributes - additional attributes.\r\n */\r\n public static createTSpan(\r\n text: string,\r\n attributes?: Array<[string, string]>\r\n ): SVGTSpanElement {\r\n const tspan = document.createElementNS(\r\n 'http://www.w3.org/2000/svg',\r\n 'tspan'\r\n );\r\n tspan.textContent = text;\r\n\r\n if (attributes) {\r\n SvgHelper.setAttributes(tspan, attributes);\r\n }\r\n\r\n return tspan;\r\n }\r\n\r\n /**\r\n * Creates an SVG image element.\r\n * @param attributes - additional attributes.\r\n */\r\n public static createImage(\r\n attributes?: Array<[string, string]>\r\n ): SVGImageElement {\r\n const image = document.createElementNS(\r\n 'http://www.w3.org/2000/svg',\r\n 'image'\r\n );\r\n\r\n if (attributes) {\r\n SvgHelper.setAttributes(image, attributes);\r\n }\r\n\r\n return image;\r\n }\r\n\r\n /**\r\n * Creates an SVG point with the specified coordinates.\r\n * @param x \r\n * @param y \r\n */\r\n public static createPoint( \r\n x: number,\r\n y: number\r\n ): SVGPoint {\r\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\r\n const svgPoint = svg.createSVGPoint();\r\n svgPoint.x = x;\r\n svgPoint.y = y;\r\n \r\n return svgPoint;\r\n }\r\n\r\n /**\r\n * Creates an SVG path with the specified shape (d).\r\n * @param d - path shape\r\n * @param attributes - additional attributes.\r\n */\r\n public static createPath(\r\n d: string,\r\n attributes?: Array<[string, string]>\r\n ): SVGPathElement {\r\n const path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\r\n\r\n path.setAttribute('d', d);\r\n if (attributes) {\r\n SvgHelper.setAttributes(path, attributes);\r\n }\r\n\r\n return path;\r\n }\r\n}\r\n","/**\r\n * Manages commercial marker.js 2 licenses.\r\n */\r\nexport class Activator {\r\n private static key: string;\r\n\r\n /**\r\n * Add a license key\r\n * @param key license key sent to you after purchase.\r\n */\r\n public static addKey(key: string): void {\r\n Activator.key = key;\r\n }\r\n\r\n /**\r\n * Returns true if the copy of marker.js is commercially licensed.\r\n */\r\n public static get isLicensed(): boolean {\r\n // NOTE:\r\n // before removing or modifying this please consider supporting marker.js\r\n // by visiting https://markerjs.com/ for details\r\n // thank you!\r\n if (Activator.key) {\r\n const keyRegex = new RegExp(/^MJS2-[A-Z][0-9]{3}-[A-Z][0-9]{3}-[0-9]{4}$/, 'i');\r\n return keyRegex.test(Activator.key);\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","/**\r\n * Renders the original image and markup to a flat raster image.\r\n */\r\nexport class Renderer {\r\n /**\r\n * Whether the image should be rendered at the original (natural) target image size.\r\n */\r\n public naturalSize = false; \r\n /**\r\n * Rendered image type (`image/png`, `image/jpeg`, etc.).\r\n */\r\n public imageType = 'image/png';\r\n /**\r\n * For formats that support it, specifies rendering quality.\r\n * \r\n * In the case of `image/jpeg` you can specify a value between 0 and 1 (lowest to highest quality).\r\n *\r\n * @type {number} - image rendering quality (0..1)\r\n */\r\n public imageQuality?: number;\r\n /**\r\n * When set to true, only the marker layer without the original image will be rendered.\r\n */\r\n public markersOnly = false;\r\n\r\n /**\r\n * When set and {@linkcode naturalSize} is `false` sets the width of the rendered image.\r\n * \r\n * Both `width` and `height` have to be set for this to take effect.\r\n */\r\n public width?: number;\r\n /**\r\n * When set and {@linkcode naturalSize} is `false` sets the height of the rendered image.\r\n * \r\n * Both `width` and `height` have to be set for this to take effect.\r\n */\r\n public height?: number;\r\n\r\n\r\n /**\r\n * Initiates rendering of the result image and returns a promise which when resolved\r\n * contains a data URL for the rendered image.\r\n * \r\n * @param target - target (underlying original) image\r\n * @param markerImage - marker layer\r\n */\r\n public rasterize(\r\n target: HTMLImageElement, \r\n markerImage: SVGSVGElement,\r\n targetCanvas?: HTMLCanvasElement \r\n ): Promise {\r\n return new Promise((resolve) => {\r\n const canvas = targetCanvas !== undefined ? targetCanvas : document.createElement(\"canvas\");\r\n\r\n if (target === null) {\r\n this.markersOnly = true;\r\n this.naturalSize = false;\r\n }\r\n\r\n const markerImageCopy = document.createElementNS(\r\n 'http://www.w3.org/2000/svg',\r\n 'svg'\r\n );\r\n markerImageCopy.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n markerImageCopy.setAttribute('width', markerImage.width.baseVal.valueAsString);\r\n markerImageCopy.setAttribute(\r\n 'height',\r\n markerImage.height.baseVal.valueAsString\r\n );\r\n markerImageCopy.setAttribute(\r\n 'viewBox',\r\n '0 0 ' +\r\n markerImage.viewBox.baseVal.width.toString() +\r\n ' ' +\r\n markerImage.viewBox.baseVal.height.toString()\r\n ); \r\n markerImageCopy.innerHTML = markerImage.innerHTML;\r\n\r\n if (this.naturalSize === true) {\r\n // scale to full image size\r\n markerImageCopy.width.baseVal.value = target.naturalWidth;\r\n markerImageCopy.height.baseVal.value = target.naturalHeight;\r\n } else if (this.width !== undefined && this.height !== undefined) {\r\n // scale to specific dimensions\r\n markerImageCopy.width.baseVal.value = this.width;\r\n markerImageCopy.height.baseVal.value = this.height;\r\n }\r\n \r\n canvas.width = markerImageCopy.width.baseVal.value;\r\n canvas.height = markerImageCopy.height.baseVal.value;\r\n \r\n const data = markerImageCopy.outerHTML;\r\n\r\n const ctx = canvas.getContext(\"2d\");\r\n if (this.markersOnly !== true) { \r\n ctx.drawImage(target, 0, 0, canvas.width, canvas.height);\r\n }\r\n \r\n const DOMURL = window.URL; // || window.webkitURL || window;\r\n \r\n const img = new Image(canvas.width, canvas.height);\r\n img.setAttribute(\"crossOrigin\", \"anonymous\");\r\n \r\n const blob = new Blob([data], { type: \"image/svg+xml\" });\r\n \r\n const url = DOMURL.createObjectURL(blob);\r\n \r\n img.onload = () => {\r\n ctx.drawImage(img, 0, 0);\r\n DOMURL.revokeObjectURL(url);\r\n \r\n const result = canvas.toDataURL(this.imageType, this.imageQuality);\r\n resolve(result);\r\n };\r\n \r\n img.src = url;\r\n });\r\n }\r\n}\r\n","import { IStyleSettings } from './IStyleSettings';\r\n\r\n/**\r\n * @see {@link StyleManager}\r\n * @deprecated use instance level `styles` instead.\r\n */\r\nexport class Style {\r\n /**\r\n * @see {@link StyleManager}\r\n * @deprecated use instance level `styles.styleSheetRoot` instead.\r\n */\r\n public static styleSheetRoot: HTMLElement;\r\n}\r\n\r\n/**\r\n * Simple utility CSS-in-JS implementation.\r\n */\r\nexport class StyleManager {\r\n /**\r\n * Prefix used for all internally created CSS classes.\r\n */\r\n private _classNamePrefixBase = '__markerjs2_';\r\n\r\n /**\r\n * Static CSS class name used for the wrapper element.\r\n */\r\n public get classNamePrefixBase(): string {\r\n return this._classNamePrefixBase;\r\n }\r\n\r\n private _classNamePrefix: string;\r\n /**\r\n * Prefix used for all internally created CSS classes.\r\n */\r\n public get classNamePrefix(): string {\r\n return this._classNamePrefix;\r\n }\r\n\r\n private classes: StyleClass[] = [];\r\n private rules: StyleRule[] = [];\r\n private styleSheet?: HTMLStyleElement;\r\n\r\n /**\r\n * For cases when you need to add the stylesheet to anything\r\n * other than document.head (default), set this property\r\n * befor calling `MarkerArea.show()`.\r\n *\r\n * Example: here we set the rendering/placement root (targetRoot)\r\n * to the `shadowRoot` of a web componet and set `styleSheetRoot`\r\n * to the same value as well.\r\n *\r\n * ```javascript\r\n * const markerArea = new markerjs2.MarkerArea(target);\r\n * markerArea.targetRoot = this.shadowRoot;\r\n * markerArea.styles.styleSheetRoot = this.shadowRoot;\r\n * markerArea.show();\r\n * ```\r\n *\r\n */\r\n public styleSheetRoot: HTMLElement;\r\n\r\n /**\r\n * Returns default UI styles.\r\n */\r\n public get defaultSettings(): IStyleSettings {\r\n return {\r\n canvasBackgroundColor: '#ffffff',\r\n toolbarBackgroundColor: '#111111',\r\n toolbarBackgroundHoverColor: '#333333',\r\n toolbarColor: '#eeeeee',\r\n toolbarHeight: 40,\r\n // toolboxBackgroundColor: '#2a2a2a',\r\n toolboxColor: '#eeeeee',\r\n toolboxAccentColor: '#3080c3',\r\n undoButtonVisible: true,\r\n redoButtonVisible: false,\r\n zoomButtonVisible: false,\r\n zoomOutButtonVisible: false,\r\n clearButtonVisible: false,\r\n resultButtonBlockVisible: true,\r\n logoPosition: 'left',\r\n };\r\n }\r\n\r\n /**\r\n * Holds current UI styles.\r\n */\r\n public settings: IStyleSettings = this.defaultSettings;\r\n\r\n /**\r\n * Returns global fade-in animation class name.\r\n */\r\n public get fadeInAnimationClassName(): string {\r\n return `${this.classNamePrefix}fade_in`;\r\n }\r\n /**\r\n * Returns global fade-out animation class name.\r\n */\r\n public get fadeOutAnimationClassName(): string {\r\n return `${this.classNamePrefix}fade_out`;\r\n }\r\n\r\n /**\r\n * Initializes a new style manager.\r\n * @param instanceNo - instance id.\r\n */\r\n constructor(instanceNo: number) {\r\n this._classNamePrefix = `${this._classNamePrefixBase}_${instanceNo}_`;\r\n }\r\n\r\n /**\r\n * Adds a CSS class declaration.\r\n * @param styleClass - class to add.\r\n */\r\n public addClass(styleClass: StyleClass): StyleClass {\r\n if (this.styleSheet === undefined) {\r\n this.addStyleSheet();\r\n }\r\n styleClass.name = `${this.classNamePrefix}${styleClass.localName}`;\r\n this.classes.push(styleClass);\r\n this.styleSheet.sheet.insertRule(\r\n `.${styleClass.name} {${styleClass.style}}`,\r\n this.styleSheet.sheet.cssRules.length\r\n );\r\n return styleClass;\r\n }\r\n\r\n /**\r\n * Add arbitrary CSS rule\r\n * @param styleRule - CSS rule to add.\r\n */\r\n public addRule(styleRule: StyleRule): void {\r\n if (this.styleSheet === undefined) {\r\n this.addStyleSheet();\r\n }\r\n this.rules.push(styleRule);\r\n this.styleSheet.sheet.insertRule(\r\n `${styleRule.selector} {${styleRule.style}}`,\r\n this.styleSheet.sheet.cssRules.length\r\n );\r\n }\r\n\r\n private addStyleSheet() {\r\n this.styleSheet = document.createElement('style');\r\n (this.styleSheetRoot ?? document.head).appendChild(this.styleSheet);\r\n\r\n // add global rules\r\n this.addRule(\r\n new StyleRule(`.${this.classNamePrefix} h3`, 'font-family: sans-serif')\r\n );\r\n\r\n this.addRule(\r\n new StyleRule(\r\n `@keyframes ${this.classNamePrefix}_fade_in_animation_frames`,\r\n `\r\n from {\r\n opacity: 0;\r\n }\r\n to {\r\n opacity: 1;\r\n }\r\n `\r\n )\r\n );\r\n this.addRule(\r\n new StyleRule(\r\n `@keyframes ${this.classNamePrefix}_fade_out_animation_frames`,\r\n `\r\n from {\r\n opacity: 1;\r\n }\r\n to {\r\n opacity: 0;\r\n }\r\n `\r\n )\r\n );\r\n\r\n this.addClass(\r\n new StyleClass(\r\n 'fade_in',\r\n `\r\n animation-duration: 0.3s;\r\n animation-name: ${this.classNamePrefix}_fade_in_animation_frames;\r\n `\r\n )\r\n );\r\n this.addClass(\r\n new StyleClass(\r\n 'fade_out',\r\n `\r\n animation-duration: 0.3s;\r\n animation-name: ${this.classNamePrefix}_fade_out_animation_frames;\r\n `\r\n )\r\n );\r\n }\r\n\r\n public removeStyleSheet(): void {\r\n if (this.styleSheet) {\r\n (this.styleSheetRoot ?? document.head).removeChild(this.styleSheet);\r\n this.styleSheet = undefined;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Represents an arbitrary CSS rule.\r\n */\r\nexport class StyleRule {\r\n /**\r\n * CSS selector.\r\n */\r\n public selector: string;\r\n /**\r\n * Style declaration for the rule.\r\n */\r\n public style: string;\r\n /**\r\n * Creates an arbitrary CSS rule using the selector and style rules.\r\n * @param selector - CSS selector\r\n * @param style - styles to apply\r\n */\r\n constructor(selector: string, style: string) {\r\n this.selector = selector;\r\n this.style = style;\r\n }\r\n}\r\n\r\n/**\r\n * Represents a CSS class.\r\n */\r\nexport class StyleClass {\r\n /**\r\n * CSS style rules for the class.\r\n */\r\n public style: string;\r\n\r\n /**\r\n * Class name without the global prefix.\r\n */\r\n public localName: string;\r\n\r\n /**\r\n * Fully qualified CSS class name.\r\n */\r\n public name: string;\r\n\r\n /**\r\n * Creates a CSS class declaration based on supplied (local) name and style rules.\r\n * @param name - local CSS class name (will be prefixed with the marker.js prefix).\r\n * @param style - style declarations.\r\n */\r\n constructor(name: string, style: string) {\r\n this.localName = name;\r\n this.style = style;\r\n }\r\n}\r\n","import { MarkerBase } from './../core/MarkerBase';\r\nimport { StyleManager, StyleClass, StyleRule } from './../core/Style';\r\n\r\nimport CursorIcon from './toolbar-core-icons/cursor.svg';\r\nimport DeleteIcon from './toolbar-core-icons/delete.svg';\r\nimport ClearIcon from './toolbar-core-icons/clear.svg';\r\nimport CheckIcon from './toolbar-core-icons/check.svg';\r\nimport CloseIcon from './toolbar-core-icons/close.svg';\r\nimport OverflowIcon from './toolbar-core-icons/overflow.svg';\r\nimport UndoIcon from './toolbar-core-icons/undo.svg';\r\nimport RedoIcon from './toolbar-core-icons/redo.svg';\r\nimport NotesIcon from './toolbar-core-icons/notes.svg';\r\nimport ZoomIcon from './toolbar-core-icons/zoom.svg';\r\nimport ZoomOutIcon from './toolbar-core-icons/zoom-out.svg';\r\nimport { IStyleSettings } from '../core/IStyleSettings';\r\nimport { DisplayMode } from '../core/Settings';\r\n\r\n/**\r\n * Toolbar button type:\r\n * - `action` for non-marker buttons like select, delete, etc.\r\n * - `marker` for marker type buttons.\r\n */\r\nexport type ToolbarButtonType = 'action' | 'marker';\r\n\r\n/**\r\n * Click handler type for toolbar button click events.\r\n */\r\nexport type ToolbarButtonClickHandler = (\r\n buttonType: ToolbarButtonType,\r\n value?: typeof MarkerBase | string\r\n) => void;\r\n\r\n/**\r\n * Toolbar represents the main toolbar of the marker.js 2 interface.\r\n */\r\nexport class Toolbar {\r\n private markerItems: typeof MarkerBase[];\r\n\r\n private buttons: HTMLDivElement[] = [];\r\n private markerButtons: HTMLDivElement[] = [];\r\n private overflowButton: HTMLDivElement;\r\n\r\n private markerjsContainer: HTMLDivElement;\r\n private displayMode: DisplayMode;\r\n private uiContainer: HTMLDivElement;\r\n\r\n private toolbarStyleClass: StyleClass;\r\n private toolbarStyleColorsClass: StyleClass;\r\n private toolbarBlockStyleClass: StyleClass;\r\n private toolbarOverflowBlockStyleClass: StyleClass;\r\n private toolbarOverflowBlockStyleColorsClass: StyleClass;\r\n private toolbarButtonStyleClass: StyleClass;\r\n private toolbarButtonStyleColorsClass: StyleClass;\r\n private toolbarActiveButtonStyleColorsClass: StyleClass;\r\n\r\n private markerButtonBlock: HTMLDivElement;\r\n private markerButtonOverflowBlock: HTMLDivElement;\r\n\r\n private buttonClickListeners: ToolbarButtonClickHandler[] = [];\r\n\r\n private uiStyleSettings: IStyleSettings;\r\n\r\n private currentMarker?: MarkerBase;\r\n\r\n private styles: StyleManager;\r\n\r\n /**\r\n * Creates the main marker.js toolbar.\r\n * @param markerjsContainer - container for the toolbar in the marker.js UI.\r\n * @param displayMode - marker.js display mode (`inline` or `popup`).\r\n * @param markerItems - available marker types.\r\n * @param uiStyleSettings - settings for styling the tooblar ui.\r\n */\r\n constructor(\r\n markerjsContainer: HTMLDivElement,\r\n displayMode: DisplayMode,\r\n markerItems: typeof MarkerBase[],\r\n uiStyleSettings: IStyleSettings,\r\n styles: StyleManager\r\n ) {\r\n this.markerjsContainer = markerjsContainer;\r\n this.displayMode = displayMode;\r\n this.markerItems = markerItems;\r\n this.uiStyleSettings = uiStyleSettings;\r\n this.styles = styles;\r\n this.addStyles();\r\n\r\n this.adjustLayout = this.adjustLayout.bind(this);\r\n this.overflowButtonClicked = this.overflowButtonClicked.bind(this);\r\n this.setCurrentMarker = this.setCurrentMarker.bind(this);\r\n }\r\n\r\n /**\r\n * Creates and displays the toolbar UI.\r\n */\r\n public show(visiblity: string): void {\r\n this.uiContainer = document.createElement('div');\r\n this.uiContainer.style.visibility = visiblity;\r\n this.uiContainer.className = `${this.toolbarStyleClass.name} ${\r\n this.styles.fadeInAnimationClassName\r\n } ${\r\n this.uiStyleSettings.toolbarStyleColorsClassName\r\n ? this.uiStyleSettings.toolbarStyleColorsClassName\r\n : this.toolbarStyleColorsClass.name\r\n }`;\r\n\r\n const actionButtonBlock = document.createElement('div');\r\n actionButtonBlock.className = this.toolbarBlockStyleClass.name;\r\n actionButtonBlock.style.whiteSpace = 'nowrap';\r\n this.uiContainer.appendChild(actionButtonBlock);\r\n\r\n this.addActionButton(actionButtonBlock, CursorIcon, 'select', 'Select mode');\r\n this.addActionButton(actionButtonBlock, DeleteIcon, 'delete', 'Delete marker');\r\n if (this.uiStyleSettings.clearButtonVisible) {\r\n this.addActionButton(actionButtonBlock, ClearIcon, 'clear', 'Delete all markers');\r\n }\r\n if (this.uiStyleSettings.undoButtonVisible) {\r\n this.addActionButton(actionButtonBlock, UndoIcon, 'undo', 'Undo');\r\n }\r\n if (this.uiStyleSettings.redoButtonVisible) {\r\n this.addActionButton(actionButtonBlock, RedoIcon, 'redo', 'Redo');\r\n }\r\n if (this.uiStyleSettings.zoomButtonVisible) {\r\n this.addActionButton(actionButtonBlock, ZoomIcon, 'zoom', 'Zoom in');\r\n }\r\n if (\r\n this.uiStyleSettings.zoomButtonVisible &&\r\n this.uiStyleSettings.zoomOutButtonVisible\r\n ) {\r\n this.addActionButton(actionButtonBlock, ZoomOutIcon, 'zoom-out', 'Zoom out');\r\n }\r\n if (this.uiStyleSettings.notesButtonVisible) {\r\n this.addActionButton(actionButtonBlock, NotesIcon, 'notes', 'Notes');\r\n }\r\n\r\n this.markerButtonBlock = document.createElement('div');\r\n this.markerButtonBlock.className = this.toolbarBlockStyleClass.name;\r\n this.markerButtonBlock.style.flexGrow = '2';\r\n this.markerButtonBlock.style.textAlign = 'center';\r\n this.uiContainer.appendChild(this.markerButtonBlock);\r\n\r\n this.markerButtonOverflowBlock = document.createElement('div');\r\n this.markerButtonOverflowBlock.className = `${\r\n this.toolbarOverflowBlockStyleClass.name\r\n } ${\r\n this.uiStyleSettings.toolbarOverflowBlockStyleColorsClassName\r\n ? this.uiStyleSettings.toolbarOverflowBlockStyleColorsClassName\r\n : this.toolbarOverflowBlockStyleColorsClass.name\r\n }`;\r\n this.markerButtonOverflowBlock.style.display = 'none';\r\n this.uiContainer.appendChild(this.markerButtonOverflowBlock);\r\n\r\n if (this.markerItems) {\r\n this.markerItems.forEach((mi) => {\r\n const buttonContainer = document.createElement('div');\r\n buttonContainer.className = `${this.toolbarButtonStyleClass.name}`;\r\n buttonContainer.setAttribute('data-type-name', mi.typeName);\r\n buttonContainer.setAttribute('aria-label', mi.title);\r\n buttonContainer.setAttribute('title', mi.title);\r\n // ${\r\n // this.uiStyleSettings.toolbarButtonStyleColorsClassName ?\r\n // this.uiStyleSettings.toolbarButtonStyleColorsClassName : this.toolbarButtonStyleColorsClass.name}`;\r\n buttonContainer.innerHTML = mi.icon;\r\n buttonContainer.addEventListener('click', () => {\r\n this.markerToolbarButtonClicked(buttonContainer, mi);\r\n });\r\n //this.markerButtonBlock.appendChild(buttonContainer);\r\n this.buttons.push(buttonContainer);\r\n this.markerButtons.push(buttonContainer);\r\n });\r\n this.overflowButton = document.createElement('div');\r\n this.overflowButton.className = `${this.toolbarButtonStyleClass.name} ${\r\n this.uiStyleSettings.toolbarButtonStyleColorsClassName\r\n ? this.uiStyleSettings.toolbarButtonStyleColorsClassName\r\n : this.toolbarButtonStyleColorsClass.name\r\n }`;\r\n this.overflowButton.innerHTML = OverflowIcon;\r\n this.overflowButton.addEventListener('click', this.overflowButtonClicked);\r\n this.markerButtonBlock.appendChild(this.overflowButton);\r\n }\r\n\r\n const resultButtonBlock = document.createElement('div');\r\n resultButtonBlock.className = this.toolbarBlockStyleClass.name;\r\n resultButtonBlock.style.whiteSpace = 'nowrap';\r\n resultButtonBlock.style.display =\r\n this.uiStyleSettings.resultButtonBlockVisible !== false ? '' : 'none';\r\n this.uiContainer.appendChild(resultButtonBlock);\r\n\r\n this.addActionButton(resultButtonBlock, CheckIcon, 'render', 'Save and close');\r\n this.addActionButton(resultButtonBlock, CloseIcon, 'close', 'Close');\r\n\r\n this.markerjsContainer.appendChild(this.uiContainer);\r\n this.setSelectMode();\r\n\r\n this.setCurrentMarker();\r\n\r\n this.adjustLayout();\r\n // setTimeout(this.adjustLayout, 10);\r\n }\r\n\r\n /**\r\n * Add a listener to the toolbar button click event.\r\n * @param listener\r\n */\r\n public addButtonClickListener(listener: ToolbarButtonClickHandler): void {\r\n this.buttonClickListeners.push(listener);\r\n }\r\n\r\n /**\r\n * Remove a listener for the toolbar button click event.\r\n * @param listener\r\n */\r\n public removeButtonClickListener(listener: ToolbarButtonClickHandler): void {\r\n if (this.buttonClickListeners.indexOf(listener) > -1) {\r\n this.buttonClickListeners.splice(\r\n this.buttonClickListeners.indexOf(listener),\r\n 1\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Switch toolbar to the `select` mode.\r\n */\r\n public setSelectMode(): void {\r\n this.resetButtonStyles();\r\n this.setActiveButton(this.buttons[0]);\r\n }\r\n\r\n /**\r\n * Adjusts toolbar layout.\r\n */\r\n public adjustLayout(): void {\r\n if (this.markerButtons && this.markerButtons.length > 0) {\r\n const numberToFit =\r\n Math.floor(\r\n this.markerButtonBlock.clientWidth /\r\n this.uiStyleSettings.toolbarHeight\r\n ) - 1;\r\n this.markerButtonBlock.innerHTML = '';\r\n this.markerButtonOverflowBlock.innerHTML = '';\r\n for (\r\n let buttonIndex = 0;\r\n buttonIndex < this.markerButtons.length;\r\n buttonIndex++\r\n ) {\r\n if (\r\n buttonIndex < numberToFit ||\r\n (buttonIndex === numberToFit &&\r\n this.markerButtons.length - 1 === numberToFit)\r\n ) {\r\n this.markerButtonBlock.appendChild(this.markerButtons[buttonIndex]);\r\n } else {\r\n if (buttonIndex === numberToFit) {\r\n this.markerButtonBlock.appendChild(this.overflowButton);\r\n }\r\n this.markerButtonOverflowBlock.appendChild(\r\n this.markerButtons[buttonIndex]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private overflowButtonClicked() {\r\n if (this.markerButtonOverflowBlock.style.display !== 'none') {\r\n this.markerButtonOverflowBlock.className = this.markerButtonOverflowBlock.className.replace(\r\n this.styles.fadeInAnimationClassName,\r\n ''\r\n );\r\n this.markerButtonOverflowBlock.style.display = 'none';\r\n } else {\r\n this.markerButtonOverflowBlock.className += ` ${this.styles.fadeInAnimationClassName}`;\r\n this.markerButtonOverflowBlock.style.top = `${\r\n this.uiContainer.offsetTop + this.overflowButton.offsetHeight\r\n }px`;\r\n this.markerButtonOverflowBlock.style.right = `${\r\n this.uiContainer.offsetWidth -\r\n this.overflowButton.offsetLeft -\r\n this.overflowButton.offsetWidth +\r\n this.uiContainer.offsetLeft * 2\r\n }px`;\r\n this.markerButtonOverflowBlock.style.display = 'inline-block';\r\n }\r\n }\r\n\r\n private resetButtonStyles() {\r\n this.buttons.forEach((button) => {\r\n button.className = button.className\r\n .replace(\r\n this.uiStyleSettings.toolbarButtonStyleColorsClassName\r\n ? this.uiStyleSettings.toolbarButtonStyleColorsClassName\r\n : this.toolbarButtonStyleColorsClass.name,\r\n ''\r\n )\r\n .trim();\r\n button.className = button.className\r\n .replace(\r\n this.uiStyleSettings.toolbarActiveButtonStyleColorsClassName\r\n ? this.uiStyleSettings.toolbarActiveButtonStyleColorsClassName\r\n : this.toolbarActiveButtonStyleColorsClass.name,\r\n ''\r\n )\r\n .trim();\r\n button.className += ` ${\r\n this.uiStyleSettings.toolbarButtonStyleColorsClassName\r\n ? this.uiStyleSettings.toolbarButtonStyleColorsClassName\r\n : this.toolbarButtonStyleColorsClass.name\r\n }`;\r\n });\r\n }\r\n\r\n private addActionButton(\r\n container: HTMLDivElement,\r\n icon: string,\r\n value: string,\r\n title: string\r\n ) {\r\n const actionButton = document.createElement('div');\r\n actionButton.className = `${this.toolbarButtonStyleClass.name}`;\r\n // ${\r\n // this.uiStyleSettings.toolbarButtonStyleColorsClassName ?\r\n // this.uiStyleSettings.toolbarButtonStyleColorsClassName : this.toolbarButtonStyleColorsClass.name}`;\r\n actionButton.innerHTML = icon;\r\n actionButton.setAttribute('data-action', value);\r\n actionButton.title = title;\r\n actionButton.setAttribute('aria-label', title);\r\n actionButton.addEventListener('click', () => {\r\n this.actionToolbarButtonClicked(actionButton, value);\r\n });\r\n switch (value) {\r\n case 'select':\r\n actionButton.style.fill = this.uiStyleSettings.selectButtonColor;\r\n break;\r\n case 'delete':\r\n case 'clear':\r\n actionButton.style.fill = this.uiStyleSettings.deleteButtonColor;\r\n break;\r\n case 'undo':\r\n actionButton.style.fill = this.uiStyleSettings.selectButtonColor;\r\n break;\r\n case 'redo':\r\n actionButton.style.fill = this.uiStyleSettings.selectButtonColor;\r\n break;\r\n case 'render':\r\n actionButton.style.fill = this.uiStyleSettings.okButtonColor;\r\n break;\r\n case 'close':\r\n actionButton.style.fill = this.uiStyleSettings.closeButtonColor;\r\n break;\r\n }\r\n\r\n container.appendChild(actionButton);\r\n this.buttons.push(actionButton);\r\n }\r\n\r\n private addStyles() {\r\n this.toolbarStyleClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbar',\r\n `\r\n width: 100%;\r\n flex-shrink: 0;\r\n display: flex;\r\n flex-direction: row;\r\n justify-content: space-between; \r\n height: ${this.uiStyleSettings.toolbarHeight}px;\r\n box-sizing: content-box;\r\n ${\r\n this.displayMode === 'inline'\r\n ? `border-top-left-radius: ${Math.round(\r\n this.uiStyleSettings.toolbarHeight / 10\r\n )}px;`\r\n : ''\r\n }\r\n ${\r\n this.displayMode === 'inline'\r\n ? `border-top-right-radius: ${Math.round(\r\n this.uiStyleSettings.toolbarHeight / 10\r\n )}px;`\r\n : ''\r\n }\r\n overflow: hidden;\r\n `\r\n )\r\n );\r\n\r\n this.toolbarStyleColorsClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbar_colors',\r\n `\r\n background-color: ${this.uiStyleSettings.toolbarBackgroundColor};\r\n box-shadow: 0px 3px rgba(33, 33, 33, 0.1);\r\n `\r\n )\r\n );\r\n\r\n this.toolbarBlockStyleClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbar-block',\r\n `\r\n display: inline-block;\r\n box-sizing: content-box;\r\n `\r\n )\r\n );\r\n\r\n this.toolbarOverflowBlockStyleClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbar-overflow-block',\r\n `\r\n position: absolute;\r\n top: ${this.uiStyleSettings.toolbarHeight}px;\r\n max-width: ${this.uiStyleSettings.toolbarHeight * 2}px;\r\n z-index: 10;\r\n box-sizing: content-box;\r\n `\r\n )\r\n );\r\n this.toolbarOverflowBlockStyleColorsClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbar-overflow-block_colors',\r\n `\r\n background-color: ${this.uiStyleSettings.toolbarBackgroundColor};\r\n `\r\n )\r\n );\r\n\r\n const buttonPadding = this.uiStyleSettings.toolbarHeight / 4;\r\n this.toolbarButtonStyleClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbar_button',\r\n `\r\n display: inline-block;\r\n width: ${this.uiStyleSettings.toolbarHeight - buttonPadding * 2}px;\r\n height: ${this.uiStyleSettings.toolbarHeight - buttonPadding * 2}px;\r\n padding: ${buttonPadding}px;\r\n box-sizing: content-box;\r\n `\r\n )\r\n );\r\n this.toolbarButtonStyleColorsClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbar_button_colors',\r\n `\r\n fill: ${this.uiStyleSettings.toolbarColor};\r\n `\r\n )\r\n );\r\n\r\n this.toolbarActiveButtonStyleColorsClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbar_active_button',\r\n `\r\n fill: ${this.uiStyleSettings.toolbarColor};\r\n background-color: ${this.uiStyleSettings.toolbarBackgroundHoverColor}\r\n `\r\n )\r\n );\r\n\r\n this.styles.addRule(\r\n new StyleRule(\r\n `.${this.toolbarButtonStyleClass.name} svg`,\r\n `\r\n height: ${this.uiStyleSettings.toolbarHeight / 2}px;\r\n `\r\n )\r\n );\r\n\r\n this.styles.addRule(\r\n new StyleRule(\r\n `.${this.toolbarButtonStyleColorsClass.name}:hover`,\r\n `\r\n background-color: ${this.uiStyleSettings.toolbarBackgroundHoverColor}\r\n `\r\n )\r\n );\r\n }\r\n\r\n private markerToolbarButtonClicked(\r\n button: HTMLDivElement,\r\n markerType: typeof MarkerBase\r\n ) {\r\n this.setActiveButton(button);\r\n if (this.buttonClickListeners && this.buttonClickListeners.length > 0) {\r\n this.buttonClickListeners.forEach((listener) =>\r\n listener('marker', markerType)\r\n );\r\n }\r\n this.markerButtonOverflowBlock.style.display = 'none';\r\n }\r\n\r\n private actionToolbarButtonClicked(button: HTMLDivElement, action: string) {\r\n if (this.buttonClickListeners && this.buttonClickListeners.length > 0) {\r\n this.buttonClickListeners.forEach((listener) =>\r\n listener('action', action)\r\n );\r\n }\r\n this.markerButtonOverflowBlock.style.display = 'none';\r\n this.setActiveButton(this.buttons[0]);\r\n }\r\n\r\n private setActiveButton(button: HTMLDivElement) {\r\n this.resetButtonStyles();\r\n button.className = button.className\r\n .replace(\r\n this.uiStyleSettings.toolbarButtonStyleColorsClassName\r\n ? this.uiStyleSettings.toolbarButtonStyleColorsClassName\r\n : this.toolbarButtonStyleColorsClass.name,\r\n ''\r\n )\r\n .trim();\r\n button.className += ` ${\r\n this.uiStyleSettings.toolbarActiveButtonStyleColorsClassName\r\n ? this.uiStyleSettings.toolbarActiveButtonStyleColorsClassName\r\n : this.toolbarActiveButtonStyleColorsClass.name\r\n }`;\r\n }\r\n\r\n /**\r\n * Selects toolbar button for a specified marker type.\r\n * @param typeName Marker type name\r\n *\r\n * @since 2.17.0\r\n */\r\n public setActiveMarkerButton(typeName: string): void {\r\n const activeBtn = this.markerButtons.find(\r\n (btn) => btn.getAttribute('data-type-name') === typeName\r\n );\r\n if (activeBtn) {\r\n this.setActiveButton(activeBtn);\r\n }\r\n }\r\n\r\n /**\r\n * Sets current marker and enables/disables action buttons accordingly.\r\n * @param marker\r\n */\r\n public setCurrentMarker(marker?: MarkerBase): void {\r\n this.currentMarker = marker;\r\n const activeMarkerButtons = this.buttons.filter((btn) =>\r\n /delete|notes/.test(btn.getAttribute('data-action'))\r\n );\r\n activeMarkerButtons.forEach((btn) => {\r\n if (this.currentMarker === undefined) {\r\n btn.style.fillOpacity = '0.4';\r\n btn.style.pointerEvents = 'none';\r\n } else {\r\n btn.style.fillOpacity = '1';\r\n btn.style.pointerEvents = 'all';\r\n }\r\n });\r\n }\r\n}\r\n","import { ToolboxPanel } from './ToolboxPanel';\r\nimport { StyleManager, StyleClass, StyleRule } from './../core/Style';\r\nimport { DisplayMode } from '../core/Settings';\r\nimport { IStyleSettings } from '../core/IStyleSettings';\r\n\r\n/**\r\n * Represents the contextual toolbox for the selected marker type.\r\n */\r\nexport class Toolbox {\r\n private panels: ToolboxPanel[] = [];\r\n private activePanel: ToolboxPanel;\r\n private panelButtons: HTMLDivElement[] = [];\r\n\r\n private markerjsContainer: HTMLDivElement;\r\n private displayMode: DisplayMode;\r\n private uiContainer: HTMLDivElement;\r\n private buttonRow: HTMLDivElement;\r\n private panelRow: HTMLDivElement;\r\n\r\n private toolboxStyleClass: StyleClass;\r\n private toolboxStyleColorsClass: StyleClass;\r\n private toolboxButtonStyleClass: StyleClass;\r\n private toolboxButtonStyleColorsClass: StyleClass;\r\n private toolboxActiveButtonStyleColorsClass: StyleClass;\r\n private toolboxButtonRowStyleClass: StyleClass;\r\n private toolboxButtonRowStyleColorsClass: StyleClass;\r\n private toolboxPanelRowStyleClass: StyleClass;\r\n private toolboxPanelRowStyleColorsClass: StyleClass;\r\n\r\n private uiStyleSettings: IStyleSettings;\r\n private styles: StyleManager;\r\n \r\n private addStyles() {\r\n this.toolboxStyleClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbox',\r\n `\r\n width: 100%;\r\n flex-shrink: 0;\r\n display: flex;\r\n flex-direction: column;\r\n font-family: sans-serif;\r\n ${this.displayMode === 'popup' ? 'height:' + this.uiStyleSettings.toolbarHeight * 2.5 + 'px;' : ''}\r\n box-sizing: content-box;\r\n ${this.displayMode === 'popup' ? `background-color: ${this.uiStyleSettings.canvasBackgroundColor};` : ''}\r\n ${this.displayMode === 'inline' ? `border-bottom-left-radius: ${Math.round(this.uiStyleSettings.toolbarHeight/10)}px;` : ''}\r\n ${this.displayMode === 'inline' ? `border-bottom-right-radius: ${Math.round(this.uiStyleSettings.toolbarHeight/10)}px;` : ''}\r\n overflow: hidden;\r\n `\r\n )\r\n );\r\n this.toolboxStyleColorsClass = this.styles.addClass(\r\n new StyleClass(\r\n 'toolbox_colors',\r\n `\r\n color: ${this.uiStyleSettings.toolboxColor};\r\n `\r\n )\r\n );\r\n\r\n const buttonPadding = this.uiStyleSettings.toolbarHeight / 4;\r\n this.toolboxButtonRowStyleClass = this.styles.addClass(new StyleClass('toolbox-button-row', `\r\n display: flex;\r\n cursor: default;\r\n box-sizing: content-box;\r\n `));\r\n this.toolboxButtonRowStyleColorsClass = this.styles.addClass(new StyleClass('toolbox-button-row_colors', `\r\n background-color: ${this.uiStyleSettings.toolbarBackgroundColor};\r\n `));\r\n\r\n this.toolboxPanelRowStyleClass = this.styles.addClass(new StyleClass('toolbox-panel-row', `\r\n display: flex;\r\n ${this.displayMode === 'inline' ? 'position: absolute;' : '' }\r\n ${this.displayMode === 'inline' ? 'bottom: ' + this.uiStyleSettings.toolbarHeight + 'px;' : '' }\r\n cursor: default;\r\n height: ${this.uiStyleSettings.toolbarHeight * 1.5}px;\r\n ${this.displayMode === 'inline' ? 'width: 100%;' : ''}\r\n box-sizing: content-box;\r\n `));\r\n this.toolboxPanelRowStyleColorsClass = this.styles.addClass(new StyleClass('toolbox-panel-row_colors', `\r\n background-color: ${this.uiStyleSettings.toolboxBackgroundColor ?? this.uiStyleSettings.toolbarBackgroundHoverColor};\r\n `));\r\n\r\n this.toolboxButtonStyleClass = this.styles.addClass(new StyleClass('toolbox_button', `\r\n display: inline-block;\r\n width: ${this.uiStyleSettings.toolbarHeight - buttonPadding * 2}px;\r\n height: ${this.uiStyleSettings.toolbarHeight - buttonPadding * 2}px;\r\n padding: ${buttonPadding}px;\r\n box-sizing: content-box;\r\n `));\r\n this.toolboxButtonStyleColorsClass = this.styles.addClass(new StyleClass('toolbox-button_colors', `\r\n fill: ${this.uiStyleSettings.toolbarColor};\r\n `));\r\n\r\n this.toolboxActiveButtonStyleColorsClass = this.styles.addClass(new StyleClass('toolbox-active-button_colors', `\r\n background-color: ${this.uiStyleSettings.toolbarBackgroundHoverColor};\r\n fill: ${this.uiStyleSettings.toolbarColor};\r\n `));\r\n\r\n this.styles.addRule(\r\n new StyleRule(\r\n `.${this.toolboxButtonStyleColorsClass.name}:hover`,\r\n `\r\n background-color: ${this.uiStyleSettings.toolbarBackgroundHoverColor}\r\n `\r\n )\r\n );\r\n\r\n this.styles.addRule(\r\n new StyleRule(\r\n `.${this.toolboxButtonStyleClass.name} svg`,\r\n `\r\n height: ${this.uiStyleSettings.toolbarHeight / 2}px;\r\n `\r\n )\r\n );\r\n\r\n }\r\n\r\n /**\r\n * Creates the toolbox object\r\n * @param markerjsContainer - container for the toolbox in marker.js UI.\r\n * @param displayMode - marker.js display mode (`inline` or `popup`).\r\n * @param uiStyleSettings - settings for styling the toolbox elements.\r\n */\r\n constructor(markerjsContainer: HTMLDivElement, displayMode: DisplayMode, uiStyleSettings: IStyleSettings, styles: StyleManager) {\r\n this.markerjsContainer = markerjsContainer;\r\n this.displayMode = displayMode;\r\n this.uiStyleSettings = uiStyleSettings;\r\n this.styles = styles;\r\n\r\n this.panelButtonClick = this.panelButtonClick.bind(this);\r\n\r\n this.addStyles();\r\n }\r\n\r\n /**\r\n * Creates and displays the main toolbox UI.\r\n */\r\n public show(visiblity: string): void {\r\n this.uiContainer = document.createElement('div');\r\n this.uiContainer.style.visibility = visiblity;\r\n this.uiContainer.className = `${this.toolboxStyleClass.name} ${\r\n this.uiStyleSettings.toolboxStyleColorsClassName ?? this.toolboxStyleColorsClass.name}`;\r\n\r\n this.markerjsContainer.appendChild(this.uiContainer);\r\n }\r\n\r\n /**\r\n * Creaes buttons for the top-level toolbox panel.\r\n * @param panels - available panels.\r\n */\r\n public setPanelButtons(panels: ToolboxPanel[]): void {\r\n this.panels = panels;\r\n if (this.uiContainer !== undefined) {\r\n this.uiContainer.innerHTML = '';\r\n\r\n this.panelRow = document.createElement('div');\r\n this.panelRow.className = `${this.toolboxPanelRowStyleClass.name} ${\r\n this.uiStyleSettings.toolboxPanelRowStyleColorsClassName ?? this.toolboxPanelRowStyleColorsClass.name}`;\r\n this.uiContainer.appendChild(this.panelRow);\r\n this.buttonRow = document.createElement('div');\r\n this.buttonRow.className = `${this.toolboxButtonRowStyleClass.name} ${\r\n this.uiStyleSettings.toolboxButtonRowStyleColorsClassName ?? this.toolboxButtonRowStyleColorsClass.name} `;\r\n this.uiContainer.appendChild(this.buttonRow);\r\n\r\n this.panelButtons.splice(0);\r\n\r\n this.panels.forEach(panel => {\r\n panel.uiStyleSettings = this.uiStyleSettings;\r\n const panelBtnDiv = document.createElement('div');\r\n panelBtnDiv.className = `${this.toolboxButtonStyleClass.name} ${\r\n this.uiStyleSettings.toolboxButtonStyleColorsClassName ?? this.toolboxButtonStyleColorsClass.name}`;\r\n panelBtnDiv.innerHTML = panel.icon;\r\n panelBtnDiv.title = panel.title;\r\n panelBtnDiv.addEventListener('click', () => {\r\n this.panelButtonClick(panel);\r\n })\r\n this.panelButtons.push(panelBtnDiv);\r\n this.buttonRow.appendChild(panelBtnDiv);\r\n });\r\n if (this.displayMode === 'inline') {\r\n this.panelRow.style.display = 'none';\r\n } else {\r\n this.panelRow.style.visibility = 'hidden';\r\n }\r\n }\r\n // if (this.displayMode === 'popup' && this.panels.length > 0) {\r\n // // this.showPanel(this.activePanel ? this.activePanel : this.panels[0]);\r\n // this.panelButtonClick(this.panels[0]);\r\n // }\r\n }\r\n\r\n private panelButtonClick(panel: ToolboxPanel) {\r\n let panelIndex = -1; \r\n if (panel !== this.activePanel) {\r\n panelIndex = this.panels.indexOf(panel);\r\n this.panelRow.innerHTML = '';\r\n const panelUI = panel.getUi();\r\n panelUI.style.margin = `${this.uiStyleSettings.toolbarHeight / 4}px`;\r\n this.panelRow.appendChild(panelUI);\r\n this.panelRow.style.display = 'flex';\r\n this.panelRow.style.visibility = 'visible';\r\n this.panelRow.className = this.panelRow.className.replace(this.styles.fadeOutAnimationClassName, '');\r\n this.panelRow.className += ` ${this.styles.fadeInAnimationClassName}`;\r\n this.activePanel = panel;\r\n } else {\r\n this.activePanel = undefined;\r\n // hide panel\r\n this.panelRow.className = this.panelRow.className.replace(this.styles.fadeInAnimationClassName, '');\r\n this.panelRow.className += ` ${this.styles.fadeOutAnimationClassName}`;\r\n setTimeout(() => {\r\n if (this.displayMode === 'inline') {\r\n this.panelRow.style.display = 'none';\r\n } else {\r\n this.panelRow.style.visibility = 'hidden';\r\n }\r\n }, 200);\r\n }\r\n this.panelButtons.forEach((pb, index) => {\r\n pb.className = `${this.toolboxButtonStyleClass.name} ` +\r\n (index === panelIndex\r\n ? `${this.uiStyleSettings.toolboxActiveButtonStyleColorsClassName ?? this.toolboxActiveButtonStyleColorsClass.name}`\r\n : `${this.uiStyleSettings.toolboxButtonStyleColorsClassName ?? this.toolboxButtonStyleColorsClass.name}`);\r\n });\r\n }\r\n\r\n}\r\n","import { IStyleSettings } from '../core/IStyleSettings';\r\n\r\n/**\r\n * Base class for all toolbox property panels.\r\n */\r\nexport abstract class ToolboxPanel {\r\n /**\r\n * Panel name/title.\r\n */\r\n public title: string;\r\n /**\r\n * Panel button icon as an SVG markup.\r\n */\r\n public icon: string;\r\n\r\n /**\r\n * UI style settings for colors, etc.\r\n */\r\n public uiStyleSettings: IStyleSettings;\r\n\r\n /**\r\n * Create panel with supplied title and icon.\r\n * @param title - panel name (used for accessibility)\r\n * @param icon - panel button icon (SVG image markup)\r\n */\r\n constructor(title: string, icon?: string) {\r\n this.title = title;\r\n this.icon = icon;\r\n }\r\n /**\r\n * Returns toolbox panel UI.\r\n */\r\n public abstract getUi(): HTMLDivElement;\r\n}\r\n","import { ToolboxPanel } from '../ToolboxPanel';\r\nimport Icon from './color-picker-panel-icon.svg';\r\n\r\n/**\r\n * Handler type for the color change event.\r\n */\r\nexport type ColorChangeHandler = (newColor: string) => void;\r\n\r\n/**\r\n * Color picker panel.\r\n */\r\nexport class ColorPickerPanel extends ToolboxPanel {\r\n public colors: string[] = [];\r\n private currentColor?: string;\r\n private addTransparent = false;\r\n\r\n private colorBoxes: HTMLDivElement[] = [];\r\n\r\n /**\r\n * Color change event handler.\r\n */\r\n public onColorChanged?: ColorChangeHandler;\r\n\r\n /**\r\n * Creates a color picker panel.\r\n * @param title - panel title.\r\n * @param colors - available colors.\r\n * @param currentColor - currently selected color.\r\n * @param icon - panel button icon (SVG imager markup).\r\n */\r\n constructor(title: string, colors: string[], currentColor?: string, icon?: string) {\r\n super(title, icon ? icon : Icon);\r\n this.colors = colors;\r\n this.currentColor = currentColor;\r\n\r\n this.setCurrentColor = this.setCurrentColor.bind(this);\r\n this.getColorBox = this.getColorBox.bind(this);\r\n }\r\n\r\n /**\r\n * Returns panel UI.\r\n */\r\n public getUi(): HTMLDivElement {\r\n const panelDiv = document.createElement('div');\r\n panelDiv.style.overflow = 'hidden';\r\n panelDiv.style.whiteSpace = 'nowrap';\r\n this.colors.forEach((color) => {\r\n const colorBoxContainer = this.getColorBox(color);\r\n panelDiv.appendChild(colorBoxContainer);\r\n this.colorBoxes.push(colorBoxContainer);\r\n });\r\n return panelDiv;\r\n }\r\n\r\n private getColorBox(color): HTMLDivElement {\r\n const buttonPadding = this.uiStyleSettings.toolbarHeight / 4;\r\n const buttonHeight = this.uiStyleSettings.toolbarHeight - buttonPadding;\r\n\r\n const colorBoxContainer = document.createElement('div');\r\n colorBoxContainer.style.display = 'inline-block';\r\n colorBoxContainer.style.boxSizing = 'content-box';\r\n colorBoxContainer.style.width = `${buttonHeight - 2}px`;\r\n colorBoxContainer.style.height = `${buttonHeight - 2}px`;\r\n colorBoxContainer.style.padding = '1px';\r\n colorBoxContainer.style.marginRight = '2px';\r\n colorBoxContainer.style.marginBottom = '2px';\r\n colorBoxContainer.style.borderWidth = '2px';\r\n colorBoxContainer.style.borderStyle = 'solid';\r\n colorBoxContainer.style.borderRadius = `${(buttonHeight + 2)/2}px`\r\n colorBoxContainer.style.borderColor =\r\n color === this.currentColor ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n\r\n colorBoxContainer.addEventListener('click', () => {\r\n this.setCurrentColor(color, colorBoxContainer);\r\n })\r\n\r\n const colorBox = document.createElement('div');\r\n colorBox.style.display = 'inline-block';\r\n colorBox.style.width = `${buttonHeight - 2}px`;\r\n colorBox.style.height = `${buttonHeight - 2}px`;\r\n colorBox.style.backgroundColor = color;\r\n colorBox.style.borderRadius = `${buttonHeight/2}px`;\r\n if (color === 'transparent') {\r\n colorBox.style.fill = this.uiStyleSettings.toolboxAccentColor;\r\n colorBox.innerHTML = `\r\n \r\n `;\r\n }\r\n\r\n colorBoxContainer.appendChild(colorBox);\r\n\r\n return colorBoxContainer;\r\n }\r\n\r\n private setCurrentColor(color: string, target: HTMLDivElement) {\r\n this.currentColor = color;\r\n\r\n this.colorBoxes.forEach(box => {\r\n box.style.borderColor = box === target ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n });\r\n\r\n if (this.onColorChanged) {\r\n this.onColorChanged(color);\r\n }\r\n }\r\n}\r\n","import { IPoint } from './IPoint';\r\nimport { ToolboxPanel } from '../ui/ToolboxPanel';\r\nimport { MarkerBaseState, MarkerState } from './MarkerBaseState';\r\nimport { Settings } from './Settings';\r\n\r\n/**\r\n * Base class for all available and custom marker types.\r\n * \r\n * All markers used with marker.js 2 should be descendants of this class.\r\n */\r\nexport class MarkerBase {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'MarkerBase';\r\n\r\n /**\r\n * Instance property returning marker's type name.\r\n * \r\n * @since 2.16.0\r\n */\r\n public get typeName(): string {\r\n return Object.getPrototypeOf(this).constructor.typeName;\r\n }\r\n\r\n protected _container: SVGGElement;\r\n /**\r\n * SVG container object holding the marker's visual.\r\n */\r\n public get container(): SVGGElement {\r\n return this._container;\r\n }\r\n protected _overlayContainer: HTMLDivElement;\r\n /**\r\n * HTML container that can be used to render overlay objects while the marker is active.\r\n * \r\n * For example, this is used for the text editing layer while editing text in the {@see TextMarker}.\r\n */\r\n public get overlayContainer(): HTMLDivElement {\r\n return this._overlayContainer;\r\n }\r\n protected _state: MarkerState = 'new';\r\n /**\r\n * Current marker state.\r\n *\r\n * Both MarkerArea and the marker itself can react differently to different events based on what state the marker is in.\r\n */\r\n public get state(): MarkerState {\r\n return this._state;\r\n }\r\n protected globalSettings: Settings;\r\n\r\n /**\r\n * Additional information about the marker\r\n */\r\n public notes?: string;\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [];\r\n }\r\n\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title: string;\r\n\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon: string;\r\n\r\n /**\r\n * Method called when marker creation is finished.\r\n */\r\n public onMarkerCreated: (marker: MarkerBase) => void;\r\n\r\n /**\r\n * Method to call when foreground color changes.\r\n */\r\n public onColorChanged?: (color: string) => void;\r\n /**\r\n * Method to call when background/fill color changes.\r\n */\r\n public onFillColorChanged?: (color: string) => void;\r\n /**\r\n * Method to call when marker state changes.\r\n * \r\n * @since 2.23.0\r\n */\r\n public onStateChanged?: (marker: MarkerBase) => void;\r\n\r\n /**\r\n * Marker's state when it is selected\r\n *\r\n * @since 2.23.0\r\n */\r\n protected manipulationStartState?: MarkerBaseState;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n this._container = container;\r\n this._overlayContainer = overlayContainer;\r\n this.globalSettings = settings;\r\n\r\n this.stateChanged = this.stateChanged.bind(this);\r\n this.colorChanged = this.colorChanged.bind(this);\r\n this.fillColorChanged = this.fillColorChanged.bind(this);\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public ownsTarget(el: EventTarget): boolean {\r\n return false;\r\n }\r\n\r\n /**\r\n * Is this marker selected?\r\n * \r\n * @since 2.16.0\r\n */\r\n protected _isSelected = false;\r\n\r\n /**\r\n * Returns true if the marker is currently selected\r\n * \r\n * @since 2.16.0\r\n */\r\n public get isSelected(): boolean {\r\n return this._isSelected;\r\n }\r\n\r\n /**\r\n * Selects this marker and displays appropriate selected marker UI.\r\n */\r\n public select(): void {\r\n this.container.style.cursor = 'move';\r\n this._isSelected = true;\r\n this.manipulationStartState = this.getState();\r\n }\r\n\r\n /**\r\n * Deselects this marker and hides selected marker UI.\r\n */\r\n public deselect(): void {\r\n this.container.style.cursor = 'default';\r\n this._isSelected = false;\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\r\n public pointerDown(point: IPoint, target?: EventTarget):void {}\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) double click event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\r\n public dblClick(point: IPoint, target?: EventTarget):void {}\r\n\r\n /**\r\n * Handles marker manipulation (move, resize, rotate, etc.).\r\n * \r\n * @param point - event coordinates.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\r\n public manipulate(point: IPoint):void {}\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) up event.\r\n * \r\n * @param point - event coordinates.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-empty-function\r\n public pointerUp(point: IPoint):void {\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Disposes the marker and clean's up.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n public dispose(): void {}\r\n\r\n protected addMarkerVisualToContainer(element: SVGElement): void {\r\n if (this.container.childNodes.length > 0) {\r\n this.container.insertBefore(element, this.container.childNodes[0]);\r\n } else {\r\n this.container.appendChild(element);\r\n }\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): MarkerBaseState {\r\n return { \r\n typeName: MarkerBase.typeName, \r\n state: this.state,\r\n notes: this.notes\r\n };\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n * \r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n this._state = state.state;\r\n this.notes = state.notes;\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n * \r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function, @typescript-eslint/no-unused-vars\r\n public scale(scaleX: number, scaleY: number): void {}\r\n\r\n /**\r\n * Called by a marker when its foreground color changes.\r\n * @param color \r\n */\r\n protected colorChanged(color: string): void {\r\n if (this.onColorChanged) {\r\n this.onColorChanged(color);\r\n }\r\n this.stateChanged();\r\n }\r\n /**\r\n * Called by a marker when its background/fill color changes.\r\n * @param color \r\n */\r\n protected fillColorChanged(color: string): void {\r\n if (this.onFillColorChanged) {\r\n this.onFillColorChanged(color);\r\n }\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Called by a marker when its state could have changed.\r\n * Does a check if the state has indeed changed before firing the handler.\r\n * \r\n * @since 2.23.0\r\n */\r\n protected stateChanged(): void {\r\n if (this.onStateChanged && this.state !== 'creating' && this.state !== 'new') {\r\n const currentState = this.getState();\r\n // avoid reacting to state (mode) differences\r\n if (this.manipulationStartState !== undefined) {\r\n this.manipulationStartState.state = 'select';\r\n }\r\n currentState.state = 'select';\r\n if (JSON.stringify(this.manipulationStartState) != JSON.stringify(currentState)) {\r\n this.onStateChanged(this);\r\n }\r\n }\r\n }\r\n}\r\n","import { ResizeGrip } from './ResizeGrip';\r\n\r\n/**\r\n * RectangularBoxMarkerGrips is a set of resize/rotation grips for a rectangular marker.\r\n */\r\nexport class RectangularBoxMarkerGrips {\r\n /**\r\n * Top-left grip.\r\n */\r\n public topLeft: ResizeGrip;\r\n /**\r\n * Top-center grip.\r\n */\r\n public topCenter: ResizeGrip;\r\n /**\r\n * Top-right grip.\r\n */\r\n public topRight: ResizeGrip;\r\n /**\r\n * Center-left grip.\r\n */\r\n public centerLeft: ResizeGrip;\r\n /**\r\n * Center-right grip.\r\n */\r\n public centerRight: ResizeGrip;\r\n /**\r\n * Bottom-left grip.\r\n */\r\n public bottomLeft: ResizeGrip;\r\n /**\r\n * Bottom-center grip.\r\n */\r\n public bottomCenter: ResizeGrip;\r\n /**\r\n * Bottom-right grip.\r\n */\r\n public bottomRight: ResizeGrip;\r\n\r\n /**\r\n * Creates a new marker grip set.\r\n */\r\n constructor() {\r\n this.findGripByVisual = this.findGripByVisual.bind(this);\r\n }\r\n\r\n /**\r\n * Returns a marker grip owning the specified visual.\r\n * @param gripVisual - visual for owner to be determined.\r\n */\r\n public findGripByVisual(\r\n gripVisual: EventTarget\r\n ): ResizeGrip | undefined {\r\n if (this.topLeft.ownsTarget(gripVisual)) {\r\n return this.topLeft;\r\n } else if (this.topCenter.ownsTarget(gripVisual)) {\r\n return this.topCenter;\r\n } else if (this.topRight.ownsTarget(gripVisual)) {\r\n return this.topRight;\r\n } else if (this.centerLeft.ownsTarget(gripVisual)) {\r\n return this.centerLeft;\r\n } else if (this.centerRight.ownsTarget(gripVisual)) {\r\n return this.centerRight;\r\n } else if (this.bottomLeft.ownsTarget(gripVisual)) {\r\n return this.bottomLeft;\r\n } else if (this.bottomCenter.ownsTarget(gripVisual)) {\r\n return this.bottomCenter;\r\n } else if (this.bottomRight.ownsTarget(gripVisual)) {\r\n return this.bottomRight;\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n}\r\n","import { SvgHelper } from '../core/SvgHelper';\r\n\r\n/**\r\n * Represents a single resize-manipulation grip used in marker's manipulation controls.\r\n */\r\nexport class ResizeGrip {\r\n /**\r\n * Grip's visual element.\r\n */\r\n public visual: SVGGraphicsElement;\r\n\r\n /**\r\n * Grip's size (raduis).\r\n */\r\n public readonly GRIP_SIZE = 10;\r\n\r\n /**\r\n * Creates a new grip.\r\n */\r\n constructor() {\r\n this.visual = SvgHelper.createGroup();\r\n this.visual.appendChild(\r\n SvgHelper.createCircle(this.GRIP_SIZE * 1.5, [['fill', 'transparent']])\r\n );\r\n this.visual.appendChild(\r\n SvgHelper.createCircle(this.GRIP_SIZE, [\r\n ['fill', '#cccccc'],\r\n ['fill-opacity', '0.7'],\r\n ['stroke', '#333333'],\r\n ['stroke-width', '2'],\r\n ['stroke-opacity', '0.7']\r\n ])\r\n );\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the grip. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (\r\n el === this.visual ||\r\n el === this.visual.childNodes[0] ||\r\n el === this.visual.childNodes[1]\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}\r\n","/**\r\n * Represents a simplified version of the SVGMatrix.\r\n */\r\nexport interface ITransformMatrix {\r\n a: number;\r\n b: number;\r\n c: number;\r\n d: number;\r\n e: number;\r\n f: number;\r\n}\r\n\r\n/**\r\n * A utility class to transform between SVGMatrix and its simplified representation.\r\n */\r\nexport class TransformMatrix {\r\n public static toITransformMatrix(matrix: SVGMatrix): ITransformMatrix {\r\n return {\r\n a: matrix.a,\r\n b: matrix.b,\r\n c: matrix.c,\r\n d: matrix.d,\r\n e: matrix.e,\r\n f: matrix.f\r\n }\r\n }\r\n public static toSVGMatrix(currentMatrix: SVGMatrix, newMatrix: ITransformMatrix): SVGMatrix {\r\n currentMatrix.a = newMatrix.a;\r\n currentMatrix.b = newMatrix.b;\r\n currentMatrix.c = newMatrix.c;\r\n currentMatrix.d = newMatrix.d;\r\n currentMatrix.e = newMatrix.e;\r\n currentMatrix.f = newMatrix.f;\r\n return currentMatrix;\r\n }\r\n}","import { MarkerBase } from '../core/MarkerBase';\r\n\r\nimport { IPoint } from '../core/IPoint';\r\nimport { SvgHelper } from '../core/SvgHelper';\r\n\r\nimport { RectangularBoxMarkerGrips } from './RectangularBoxMarkerGrips';\r\nimport { ResizeGrip } from './ResizeGrip';\r\nimport { Settings } from '../core/Settings';\r\nimport { RectangularBoxMarkerBaseState } from './RectangularBoxMarkerBaseState';\r\nimport { MarkerBaseState } from '../core/MarkerBaseState';\r\nimport { TransformMatrix } from '../core/TransformMatrix';\r\n\r\n/**\r\n * RectangularBoxMarkerBase is a base class for all marker's with rectangular controls such as all rectangle markers,\r\n * text and callout markers.\r\n * \r\n * It creates and manages the rectangular control box and related resize, move, and rotate manipulations.\r\n */\r\nexport class RectangularBoxMarkerBase extends MarkerBase {\r\n /**\r\n * x coordinate of the top-left corner.\r\n */\r\n protected left = 0;\r\n /**\r\n * y coordinate of the top-left corner.\r\n */\r\n protected top = 0;\r\n /**\r\n * Marker width.\r\n */\r\n protected width = 0;\r\n /**\r\n * Marker height.\r\n */\r\n protected height = 0;\r\n\r\n /**\r\n * The default marker size when the marker is created with a click (without dragging).\r\n */\r\n protected defaultSize: IPoint = {x: 50, y: 20};\r\n\r\n /**\r\n * x coordinate of the top-left corner at the start of manipulation.\r\n */\r\n protected manipulationStartLeft: number;\r\n /**\r\n * y coordinate of the top-left corner at the start of manipulation.\r\n */\r\n protected manipulationStartTop: number;\r\n /**\r\n * Width at the start of manipulation.\r\n */\r\n protected manipulationStartWidth: number;\r\n /**\r\n * Height at the start of manipulation.\r\n */\r\n protected manipulationStartHeight: number;\r\n\r\n /**\r\n * x coordinate of the pointer at the start of manipulation.\r\n */\r\n protected manipulationStartX: number;\r\n /**\r\n * y coordinate of the pointer at the start of manipulation.\r\n */\r\n protected manipulationStartY: number;\r\n\r\n /**\r\n * Pointer's horizontal distance from the top left corner.\r\n */\r\n protected offsetX = 0;\r\n /**\r\n * Pointer's vertical distance from the top left corner.\r\n */\r\n protected offsetY = 0;\r\n\r\n /**\r\n * Marker's rotation angle.\r\n */\r\n protected rotationAngle = 0;\r\n\r\n /**\r\n * x coordinate of the marker's center.\r\n */\r\n protected get centerX(): number {\r\n return this.left + this.width / 2;\r\n }\r\n /**\r\n * y coordinate of the marker's center.\r\n */\r\n protected get centerY(): number {\r\n return this.top + this.height / 2;\r\n }\r\n\r\n private _visual: SVGGraphicsElement;\r\n /**\r\n * Container for the marker's visual.\r\n */\r\n protected get visual(): SVGGraphicsElement {\r\n return this._visual;\r\n }\r\n protected set visual(value: SVGGraphicsElement) {\r\n this._visual = value;\r\n const translate = SvgHelper.createTransform();\r\n this._visual.transform.baseVal.appendItem(translate);\r\n }\r\n\r\n /**\r\n * Container for the marker's editing controls.\r\n */\r\n protected controlBox: SVGGElement;\r\n private readonly CB_DISTANCE: number = 10;\r\n private controlRect: SVGRectElement;\r\n private rotatorGripLine: SVGLineElement;\r\n\r\n private controlGrips: RectangularBoxMarkerGrips;\r\n private rotatorGrip: ResizeGrip;\r\n private activeGrip: ResizeGrip;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n // add rotation transform\r\n this.container.transform.baseVal.appendItem(SvgHelper.createTransform());\r\n\r\n this.setupControlBox();\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (super.ownsTarget(el)) {\r\n return true;\r\n } else if (\r\n this.controlGrips.findGripByVisual(el) !== undefined ||\r\n (this.rotatorGrip !== undefined && this.rotatorGrip.ownsTarget(el))\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n\r\n if (this.state === 'new') {\r\n this.left = point.x;\r\n this.top = point.y;\r\n }\r\n\r\n this.manipulationStartLeft = this.left;\r\n this.manipulationStartTop = this.top;\r\n this.manipulationStartWidth = this.width;\r\n this.manipulationStartHeight = this.height;\r\n\r\n const rotatedPoint = this.unrotatePoint(point);\r\n this.manipulationStartX = rotatedPoint.x;\r\n this.manipulationStartY = rotatedPoint.y;\r\n\r\n this.offsetX = rotatedPoint.x - this.left;\r\n this.offsetY = rotatedPoint.y - this.top;\r\n\r\n if (this.state !== 'new') {\r\n this.select();\r\n this.activeGrip = this.controlGrips.findGripByVisual(target as SVGGraphicsElement);\r\n if (this.activeGrip !== undefined) {\r\n this._state = 'resize';\r\n } else if (this.rotatorGrip !== undefined && this.rotatorGrip.ownsTarget(target)) {\r\n this.activeGrip = this.rotatorGrip;\r\n\r\n const rotatedCenter = this.rotatePoint({x: this.centerX, y: this.centerY});\r\n this.left = rotatedCenter.x - this.width / 2;\r\n this.top = rotatedCenter.y - this.height / 2;\r\n this.moveVisual({ x: this.left, y: this.top });\r\n\r\n const rotate = this.container.transform.baseVal.getItem(0);\r\n rotate.setRotate(this.rotationAngle, this.centerX, this.centerY);\r\n this.container.transform.baseVal.replaceItem(rotate, 0);\r\n\r\n this.adjustControlBox();\r\n\r\n this._state = 'rotate';\r\n } else {\r\n this._state = 'move';\r\n }\r\n }\r\n }\r\n\r\n protected _suppressMarkerCreateEvent = false;\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) up event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerUp(point: IPoint): void {\r\n const inState = this.state;\r\n super.pointerUp(point);\r\n if (this.state === 'creating' && this.width < 10 && this.height < 10) {\r\n this.width = this.defaultSize.x;\r\n this.height = this.defaultSize.y;\r\n } else {\r\n this.manipulate(point);\r\n }\r\n this._state = 'select';\r\n if (inState === 'creating' && this.onMarkerCreated && this._suppressMarkerCreateEvent === false) {\r\n this.onMarkerCreated(this);\r\n }\r\n }\r\n\r\n /**\r\n * Moves visual to the specified coordinates.\r\n * @param point - coordinates of the new top-left corner of the visual.\r\n */\r\n protected moveVisual(point: IPoint): void {\r\n this.visual.style.transform = `translate(${point.x}px, ${point.y}px)`;\r\n // const translate = this.visual.transform.baseVal.getItem(0);\r\n // translate.setTranslate(point.x, point.y);\r\n // this.visual.transform.baseVal.replaceItem(translate, 0);\r\n }\r\n\r\n /**\r\n * Handles marker manipulation (move, resize, rotate, etc.).\r\n * \r\n * @param point - event coordinates.\r\n */\r\n public manipulate(point: IPoint): void {\r\n const rotatedPoint = this.unrotatePoint(point);\r\n\r\n if (this.state === 'creating') {\r\n this.resize(point);\r\n } else if (this.state === 'move') {\r\n this.left =\r\n this.manipulationStartLeft +\r\n (rotatedPoint.x - this.manipulationStartLeft) -\r\n this.offsetX;\r\n this.top =\r\n this.manipulationStartTop +\r\n (rotatedPoint.y - this.manipulationStartTop) -\r\n this.offsetY;\r\n this.moveVisual({x: this.left, y: this.top});\r\n this.adjustControlBox();\r\n } else if (this.state === 'resize') {\r\n this.resize(rotatedPoint);\r\n } else if (this.state === 'rotate') {\r\n this.rotate(point);\r\n }\r\n }\r\n\r\n /**\r\n * Resizes the marker based on pointer coordinates and context.\r\n * @param point - pointer coordinates.\r\n */\r\n protected resize(point: IPoint): void {\r\n let newX = this.manipulationStartLeft;\r\n let newWidth = this.manipulationStartWidth;\r\n let newY = this.manipulationStartTop;\r\n let newHeight = this.manipulationStartHeight;\r\n\r\n switch(this.activeGrip) {\r\n case this.controlGrips.bottomLeft:\r\n case this.controlGrips.centerLeft:\r\n case this.controlGrips.topLeft:\r\n newX = this.manipulationStartLeft + point.x - this.manipulationStartX;\r\n newWidth = this.manipulationStartWidth + this.manipulationStartLeft - newX;\r\n break; \r\n case this.controlGrips.bottomRight:\r\n case this.controlGrips.centerRight:\r\n case this.controlGrips.topRight:\r\n case undefined:\r\n newWidth = this.manipulationStartWidth + point.x - this.manipulationStartX;\r\n break; \r\n }\r\n\r\n switch(this.activeGrip) {\r\n case this.controlGrips.topCenter:\r\n case this.controlGrips.topLeft:\r\n case this.controlGrips.topRight:\r\n newY = this.manipulationStartTop + point.y - this.manipulationStartY;\r\n newHeight = this.manipulationStartHeight + this.manipulationStartTop - newY;\r\n break; \r\n case this.controlGrips.bottomCenter:\r\n case this.controlGrips.bottomLeft:\r\n case this.controlGrips.bottomRight:\r\n case undefined:\r\n newHeight = this.manipulationStartHeight + point.y - this.manipulationStartY;\r\n break; \r\n }\r\n\r\n if (newWidth >= 0) {\r\n this.left = newX;\r\n this.width = newWidth;\r\n } else {\r\n this.left = newX + newWidth;\r\n this.width = -newWidth;\r\n }\r\n if (newHeight >= 0) {\r\n this.top = newY;\r\n this.height = newHeight;\r\n } else {\r\n this.top = newY + newHeight;\r\n this.height = -newHeight;\r\n }\r\n\r\n this.setSize();\r\n }\r\n\r\n /**\r\n * Sets control box size and location.\r\n */\r\n protected setSize(): void {\r\n this.moveVisual({x: this.left, y: this.top});\r\n this.adjustControlBox();\r\n }\r\n\r\n private rotate(point: IPoint) {\r\n // avoid glitch when crossing the 0 rotation point\r\n if (Math.abs(point.x - this.centerX) > 0.1) {\r\n const sign = Math.sign(point.x - this.centerX);\r\n this.rotationAngle =\r\n (Math.atan((point.y - this.centerY) / (point.x - this.centerX)) * 180) /\r\n Math.PI +\r\n 90 * sign;\r\n this.applyRotation();\r\n }\r\n }\r\n\r\n private applyRotation() {\r\n const rotate = this.container.transform.baseVal.getItem(0);\r\n rotate.setRotate(this.rotationAngle, this.centerX, this.centerY);\r\n this.container.transform.baseVal.replaceItem(rotate, 0);\r\n }\r\n\r\n /**\r\n * Returns point coordinates based on the actual screen coordinates and marker's rotation.\r\n * @param point - original pointer coordinates\r\n */\r\n protected rotatePoint(point: IPoint): IPoint {\r\n if (this.rotationAngle === 0) {\r\n return point;\r\n }\r\n \r\n const matrix = this.container.getCTM();\r\n let svgPoint = SvgHelper.createPoint(point.x, point.y);\r\n svgPoint = svgPoint.matrixTransform(matrix);\r\n\r\n const result = { x: svgPoint.x, y: svgPoint.y };\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Returns original point coordinates based on coordinates with rotation applied.\r\n * @param point - rotated point coordinates.\r\n */\r\n protected unrotatePoint(point: IPoint): IPoint {\r\n if (this.rotationAngle === 0) {\r\n return point;\r\n }\r\n \r\n let matrix = this.container.getCTM();\r\n matrix = matrix.inverse();\r\n let svgPoint = SvgHelper.createPoint(point.x, point.y);\r\n svgPoint = svgPoint.matrixTransform(matrix);\r\n\r\n const result = { x: svgPoint.x, y: svgPoint.y };\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Displays marker's controls.\r\n */\r\n public select(): void {\r\n super.select();\r\n this.adjustControlBox();\r\n this.controlBox.style.display = '';\r\n }\r\n\r\n /**\r\n * Hides marker's controls.\r\n */\r\n public deselect(): void {\r\n super.deselect();\r\n this.controlBox.style.display = 'none';\r\n }\r\n\r\n private setupControlBox() {\r\n this.controlBox = SvgHelper.createGroup();\r\n const translate = SvgHelper.createTransform();\r\n translate.setTranslate(-this.CB_DISTANCE / 2, -this.CB_DISTANCE / 2);\r\n this.controlBox.transform.baseVal.appendItem(translate);\r\n\r\n this.container.appendChild(this.controlBox);\r\n\r\n this.controlRect = SvgHelper.createRect(\r\n this.width + this.CB_DISTANCE,\r\n this.height + this.CB_DISTANCE,\r\n [\r\n ['stroke', 'black'],\r\n ['stroke-width', '1'],\r\n ['stroke-opacity', '0.5'],\r\n ['stroke-dasharray', '3, 2'],\r\n ['fill', 'transparent'],\r\n ['pointer-events', 'none']\r\n ]\r\n );\r\n\r\n this.controlBox.appendChild(this.controlRect);\r\n\r\n if (this.globalSettings.disableRotation !== true) {\r\n this.rotatorGripLine = SvgHelper.createLine(\r\n (this.width + this.CB_DISTANCE * 2) / 2,\r\n this.top - this.CB_DISTANCE,\r\n (this.width + this.CB_DISTANCE * 2) / 2,\r\n this.top - this.CB_DISTANCE * 3,\r\n [\r\n ['stroke', 'black'],\r\n ['stroke-width', '1'],\r\n ['stroke-opacity', '0.5'],\r\n ['stroke-dasharray', '3, 2'],\r\n ]\r\n );\r\n\r\n this.controlBox.appendChild(this.rotatorGripLine);\r\n }\r\n\r\n this.controlGrips = new RectangularBoxMarkerGrips();\r\n this.addControlGrips();\r\n\r\n this.controlBox.style.display = 'none';\r\n }\r\n\r\n private adjustControlBox() {\r\n const translate = this.controlBox.transform.baseVal.getItem(0);\r\n translate.setTranslate(\r\n this.left - this.CB_DISTANCE / 2,\r\n this.top - this.CB_DISTANCE / 2\r\n );\r\n this.controlBox.transform.baseVal.replaceItem(translate, 0);\r\n this.controlRect.setAttribute(\r\n 'width',\r\n (this.width + this.CB_DISTANCE).toString()\r\n );\r\n this.controlRect.setAttribute(\r\n 'height',\r\n (this.height + this.CB_DISTANCE).toString()\r\n );\r\n\r\n if (this.rotatorGripLine !== undefined) {\r\n this.rotatorGripLine.setAttribute(\r\n 'x1',\r\n ((this.width + this.CB_DISTANCE) / 2).toString()\r\n );\r\n this.rotatorGripLine.setAttribute('y1', (-this.CB_DISTANCE / 2).toString());\r\n this.rotatorGripLine.setAttribute(\r\n 'x2',\r\n ((this.width + this.CB_DISTANCE) / 2).toString()\r\n );\r\n this.rotatorGripLine.setAttribute('y2', (-this.CB_DISTANCE * 3).toString());\r\n }\r\n \r\n this.positionGrips();\r\n }\r\n\r\n private addControlGrips() {\r\n this.controlGrips.topLeft = this.createGrip();\r\n this.controlGrips.topCenter = this.createGrip();\r\n this.controlGrips.topRight = this.createGrip();\r\n this.controlGrips.centerLeft = this.createGrip();\r\n this.controlGrips.centerRight = this.createGrip();\r\n this.controlGrips.bottomLeft = this.createGrip();\r\n this.controlGrips.bottomCenter = this.createGrip();\r\n this.controlGrips.bottomRight = this.createGrip();\r\n\r\n if (this.globalSettings.disableRotation !== true) {\r\n this.rotatorGrip = this.createGrip();\r\n }\r\n\r\n this.positionGrips();\r\n }\r\n\r\n private createGrip(): ResizeGrip {\r\n const grip = new ResizeGrip();\r\n grip.visual.transform.baseVal.appendItem(SvgHelper.createTransform());\r\n this.controlBox.appendChild(grip.visual);\r\n\r\n return grip;\r\n }\r\n\r\n private positionGrips() {\r\n const gripSize = this.controlGrips.topLeft.GRIP_SIZE;\r\n\r\n const left = -gripSize / 2;\r\n const top = left;\r\n const cx = (this.width + this.CB_DISTANCE) / 2 - gripSize / 2;\r\n const cy = (this.height + this.CB_DISTANCE) / 2 - gripSize / 2;\r\n const bottom = this.height + this.CB_DISTANCE - gripSize / 2;\r\n const right = this.width + this.CB_DISTANCE - gripSize / 2;\r\n\r\n this.positionGrip(this.controlGrips.topLeft.visual, left, top);\r\n this.positionGrip(this.controlGrips.topCenter.visual, cx, top);\r\n this.positionGrip(this.controlGrips.topRight.visual, right, top);\r\n this.positionGrip(this.controlGrips.centerLeft.visual, left, cy);\r\n this.positionGrip(this.controlGrips.centerRight.visual, right, cy);\r\n this.positionGrip(this.controlGrips.bottomLeft.visual, left, bottom);\r\n this.positionGrip(this.controlGrips.bottomCenter.visual, cx, bottom);\r\n this.positionGrip(this.controlGrips.bottomRight.visual, right, bottom);\r\n\r\n if (this.rotatorGrip !== undefined) {\r\n this.positionGrip(this.rotatorGrip.visual, cx, top - this.CB_DISTANCE * 3);\r\n }\r\n }\r\n\r\n private positionGrip(grip: SVGGraphicsElement, x: number, y: number) {\r\n const translate = grip.transform.baseVal.getItem(0);\r\n translate.setTranslate(x, y);\r\n grip.transform.baseVal.replaceItem(translate, 0);\r\n }\r\n\r\n /**\r\n * Hides marker's editing controls.\r\n */\r\n protected hideControlBox(): void {\r\n this.controlBox.style.display = 'none';\r\n }\r\n /**\r\n * Shows marker's editing controls.\r\n */\r\n protected showControlBox(): void {\r\n this.controlBox.style.display = '';\r\n }\r\n\r\n /**\r\n * Returns marker's state.\r\n */\r\n public getState(): RectangularBoxMarkerBaseState {\r\n const result: RectangularBoxMarkerBaseState = Object.assign({\r\n left: this.left,\r\n top: this.top,\r\n width: this.width,\r\n height: this.height,\r\n rotationAngle: this.rotationAngle,\r\n visualTransformMatrix: TransformMatrix.toITransformMatrix(this.visual.transform.baseVal.getItem(0).matrix),\r\n containerTransformMatrix: TransformMatrix.toITransformMatrix(this.container.transform.baseVal.getItem(0).matrix)\r\n },\r\n super.getState());\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores marker's state to the previously saved one.\r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n super.restoreState(state);\r\n const rbmState = state as RectangularBoxMarkerBaseState;\r\n this.left = rbmState.left;\r\n this.top = rbmState.top;\r\n this.width = rbmState.width;\r\n this.height = rbmState.height;\r\n this.rotationAngle = rbmState.rotationAngle;\r\n this.visual.transform.baseVal.getItem(0).setMatrix(\r\n TransformMatrix.toSVGMatrix(this.visual.transform.baseVal.getItem(0).matrix, rbmState.visualTransformMatrix)\r\n );\r\n this.container.transform.baseVal.getItem(0).setMatrix(\r\n TransformMatrix.toSVGMatrix(this.container.transform.baseVal.getItem(0).matrix, rbmState.containerTransformMatrix)\r\n );\r\n // this.moveVisual({x: this.left, y: this.top});\r\n // this.applyRotation();\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n * \r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n public scale(scaleX: number, scaleY: number): void {\r\n super.scale(scaleX, scaleY);\r\n\r\n const rPoint = this.rotatePoint({x: this.left, y: this.top});\r\n const point = this.unrotatePoint({x: rPoint.x * scaleX, y: rPoint.y * scaleY});\r\n\r\n this.left = point.x;\r\n this.top = point.y;\r\n this.width = this.width * scaleX;\r\n this.height = this.height * scaleY;\r\n\r\n this.adjustControlBox();\r\n }\r\n\r\n}\r\n","import { IPoint } from '../core/IPoint';\r\nimport { SvgHelper } from '../core/SvgHelper';\r\nimport { RectangularBoxMarkerBase } from './RectangularBoxMarkerBase';\r\nimport { Settings } from '../core/Settings';\r\nimport { RectangleMarkerState } from './RectangleMarkerState';\r\nimport { MarkerBaseState } from '../core/MarkerBaseState';\r\n\r\n/**\r\n * RecatngleMarker is a base class for all rectangular markers (Frame, Cover, Highlight, etc.)\r\n */\r\nexport abstract class RectangleMarker extends RectangularBoxMarkerBase {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static title = 'Rectangle marker';\r\n\r\n /**\r\n * Recangle fill color.\r\n */\r\n protected fillColor = 'transparent';\r\n /**\r\n * Rectangle stroke color.\r\n */\r\n protected strokeColor = 'transparent';\r\n /**\r\n * Rectangle border stroke width.\r\n */\r\n protected strokeWidth = 0;\r\n /**\r\n * Rectangle border stroke dash array.\r\n */\r\n protected strokeDasharray = '';\r\n /**\r\n * Rectangle opacity (alpha). 0 to 1.\r\n */\r\n protected opacity = 1;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.setStrokeColor = this.setStrokeColor.bind(this);\r\n this.setFillColor = this.setFillColor.bind(this);\r\n this.setStrokeWidth = this.setStrokeWidth.bind(this);\r\n this.setStrokeDasharray = this.setStrokeDasharray.bind(this);\r\n this.createVisual = this.createVisual.bind(this);\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (super.ownsTarget(el) || el === this.visual) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Creates the marker's rectangle visual.\r\n */\r\n protected createVisual(): void {\r\n this.visual = SvgHelper.createRect(1, 1, [\r\n ['fill', this.fillColor],\r\n ['stroke', this.strokeColor],\r\n ['stroke-width', this.strokeWidth.toString()],\r\n ['stroke-dasharray', this.strokeDasharray],\r\n ['opacity', this.opacity.toString()]\r\n ]);\r\n this.addMarkerVisualToContainer(this.visual);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n if (this.state === 'new') {\r\n this.createVisual();\r\n\r\n this.moveVisual(point);\r\n\r\n this._state = 'creating';\r\n }\r\n }\r\n\r\n /**\r\n * Handles marker manipulation (move, resize, rotate, etc.).\r\n * \r\n * @param point - event coordinates.\r\n */\r\n public manipulate(point: IPoint): void {\r\n super.manipulate(point);\r\n }\r\n\r\n /**\r\n * Resizes the marker based on the pointer coordinates.\r\n * @param point - current pointer coordinates.\r\n */\r\n protected resize(point: IPoint): void {\r\n super.resize(point);\r\n this.setSize();\r\n }\r\n\r\n /**\r\n * Sets visual's width and height attributes based on marker's width and height.\r\n */\r\n protected setSize(): void {\r\n super.setSize();\r\n SvgHelper.setAttributes(this.visual, [\r\n ['width', this.width.toString()],\r\n ['height', this.height.toString()],\r\n ]);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) up event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerUp(point: IPoint): void {\r\n super.pointerUp(point);\r\n this.setSize();\r\n }\r\n\r\n /**\r\n * Sets rectangle's border stroke color.\r\n * @param color - color as string\r\n */\r\n protected setStrokeColor(color: string): void {\r\n this.strokeColor = color;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['stroke', this.strokeColor]]);\r\n }\r\n this.colorChanged(color);\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets rectangle's fill color.\r\n * @param color - color as string\r\n */\r\n protected setFillColor(color: string): void {\r\n this.fillColor = color;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['fill', this.fillColor]]);\r\n }\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets rectangle's border stroke (line) width.\r\n * @param color - color as string\r\n */\r\n protected setStrokeWidth(width: number): void {\r\n this.strokeWidth = width;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['stroke-width', this.strokeWidth.toString()]]);\r\n }\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets rectangle's border stroke dash array.\r\n * @param color - color as string\r\n */\r\n protected setStrokeDasharray(dashes: string): void {\r\n this.strokeDasharray = dashes;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['stroke-dasharray', this.strokeDasharray]]);\r\n }\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): RectangleMarkerState {\r\n const result: RectangleMarkerState = Object.assign({\r\n fillColor: this.fillColor,\r\n strokeColor: this.strokeColor,\r\n strokeWidth: this.strokeWidth,\r\n strokeDasharray: this.strokeDasharray,\r\n opacity: this.opacity\r\n }, super.getState());\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n * \r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n const rectState = state as RectangleMarkerState;\r\n this.fillColor = rectState.fillColor;\r\n this.strokeColor = rectState.strokeColor;\r\n this.strokeWidth = rectState.strokeWidth;\r\n this.strokeDasharray = rectState.strokeDasharray;\r\n this.opacity = rectState.opacity;\r\n\r\n this.createVisual();\r\n super.restoreState(state);\r\n this.setSize();\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n * \r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n public scale(scaleX: number, scaleY: number): void {\r\n super.scale(scaleX, scaleY);\r\n\r\n this.setSize();\r\n }\r\n\r\n}\r\n","import { ToolboxPanel } from '../ToolboxPanel';\r\nimport Icon from './line-width-panel-icon.svg';\r\n\r\n/**\r\n * Line width change event handler type.\r\n */\r\nexport type WidthChangeHandler = (newWidth: number) => void;\r\n\r\n/**\r\n * Line width toolbox panel.\r\n */\r\nexport class LineWidthPanel extends ToolboxPanel {\r\n private widths: number[] = [];\r\n private currentWidth?: number;\r\n\r\n private widthBoxes: HTMLDivElement[] = [];\r\n\r\n /**\r\n * Line width change event handler.\r\n */\r\n public onWidthChanged?: WidthChangeHandler;\r\n\r\n /**\r\n * Creates a line width toolbox panel.\r\n * @param title - panel title.\r\n * @param widths - available widths.\r\n * @param currentWidth - currently set width.\r\n * @param icon - toolbox panel icon (SVG image markup).\r\n */\r\n constructor(title: string, widths: number[], currentWidth?: number, icon?: string) {\r\n super(title, icon ? icon : Icon);\r\n this.widths = widths;\r\n this.currentWidth = currentWidth;\r\n\r\n this.setCurrentWidth = this.setCurrentWidth.bind(this);\r\n }\r\n\r\n /**\r\n * Returns panel UI.\r\n */\r\n public getUi(): HTMLDivElement {\r\n const panelDiv = document.createElement('div');\r\n panelDiv.style.display = 'flex';\r\n panelDiv.style.overflow = 'hidden';\r\n panelDiv.style.flexGrow = '2';\r\n this.widths.forEach((lineWidth) => {\r\n const widthBoxContainer = document.createElement('div');\r\n widthBoxContainer.style.display = 'flex';\r\n widthBoxContainer.style.flexGrow = '2';\r\n widthBoxContainer.style.alignItems = 'center';\r\n widthBoxContainer.style.justifyContent = 'space-between';\r\n widthBoxContainer.style.padding = '5px';\r\n widthBoxContainer.style.borderWidth = '2px';\r\n widthBoxContainer.style.borderStyle = 'solid';\r\n widthBoxContainer.style.borderColor =\r\n lineWidth === this.currentWidth ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n\r\n widthBoxContainer.addEventListener('click', () => {\r\n this.setCurrentWidth(lineWidth, widthBoxContainer);\r\n })\r\n panelDiv.appendChild(widthBoxContainer);\r\n\r\n const label = document.createElement('div');\r\n label.innerText = lineWidth.toString();\r\n label.style.marginRight = '5px';\r\n widthBoxContainer.appendChild(label);\r\n\r\n const widthBox = document.createElement('div');\r\n widthBox.style.minHeight = '20px';\r\n widthBox.style.flexGrow = '2';\r\n widthBox.style.display = 'flex';\r\n widthBox.style.alignItems = 'center';\r\n\r\n const hr = document.createElement('hr');\r\n hr.style.minWidth = '20px';\r\n hr.style.border = '0px';\r\n hr.style.borderTop = `${lineWidth}px solid ${this.uiStyleSettings.toolboxColor}`;\r\n hr.style.flexGrow = '2';\r\n widthBox.appendChild(hr);\r\n\r\n // widthBox.innerHTML = `\r\n // \r\n // `;\r\n\r\n widthBoxContainer.appendChild(widthBox);\r\n\r\n this.widthBoxes.push(widthBoxContainer);\r\n });\r\n return panelDiv;\r\n }\r\n\r\n private setCurrentWidth(newWidth: number, target: HTMLDivElement) {\r\n this.currentWidth = newWidth;\r\n\r\n this.widthBoxes.forEach(box => {\r\n box.style.borderColor = box === target ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n });\r\n\r\n if (this.onWidthChanged) {\r\n this.onWidthChanged(this.currentWidth);\r\n }\r\n }\r\n}\r\n","import { ToolboxPanel } from '../ToolboxPanel';\r\nimport Icon from './line-style-panel-icon.svg';\r\n\r\n/**\r\n * Line style change event handler type.\r\n */\r\nexport type StyleChangeHandler = (newStyle: string) => void;\r\n\r\n/**\r\n * Line style (solid, dashed, etc.) toolbox panel.\r\n */\r\nexport class LineStylePanel extends ToolboxPanel {\r\n private styles: string[] = [];\r\n private currentStyle?: string;\r\n\r\n private styleBoxes: HTMLDivElement[] = [];\r\n\r\n /**\r\n * Handler for the style change event.\r\n */\r\n public onStyleChanged?: StyleChangeHandler;\r\n\r\n /**\r\n * Creates a line style toolbox panel.\r\n * @param title - panel title\r\n * @param styles - available line styles (dash array).\r\n * @param currentStyle - currently selected style.\r\n * @param icon - panel button icon (SVG image markup).\r\n */\r\n constructor(title: string, styles: string[], currentStyle?: string, icon?: string) {\r\n super(title, icon ? icon : Icon);\r\n this.styles = styles;\r\n this.currentStyle = currentStyle;\r\n\r\n this.setCurrentStyle = this.setCurrentStyle.bind(this);\r\n }\r\n\r\n /**\r\n * Returns panel UI.\r\n */\r\n public getUi(): HTMLDivElement {\r\n const panelDiv = document.createElement('div');\r\n panelDiv.style.display = 'flex';\r\n panelDiv.style.overflow = 'hidden';\r\n panelDiv.style.flexGrow = '2';\r\n this.styles.forEach((lineStyle) => {\r\n const styleBoxContainer = document.createElement('div');\r\n styleBoxContainer.style.display = 'flex'; //'inline-block';\r\n styleBoxContainer.style.alignItems = 'center';\r\n styleBoxContainer.style.justifyContent = 'space-between';\r\n styleBoxContainer.style.padding = '5px';\r\n styleBoxContainer.style.borderWidth = '2px';\r\n styleBoxContainer.style.borderStyle = 'solid';\r\n styleBoxContainer.style.overflow = 'hidden';\r\n styleBoxContainer.style.maxWidth = `${100 / this.styles.length - 5}%`;\r\n styleBoxContainer.style.borderColor =\r\n lineStyle === this.currentStyle ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n\r\n styleBoxContainer.addEventListener('click', () => {\r\n this.setCurrentStyle(lineStyle, styleBoxContainer);\r\n })\r\n panelDiv.appendChild(styleBoxContainer);\r\n\r\n const styleBox = document.createElement('div');\r\n styleBox.style.minHeight = '20px';\r\n styleBox.style.flexGrow = '2';\r\n styleBox.style.overflow = 'hidden';\r\n\r\n const styleSample = `\r\n \r\n `;\r\n\r\n styleBox.innerHTML = styleSample;\r\n\r\n styleBoxContainer.appendChild(styleBox);\r\n\r\n this.styleBoxes.push(styleBoxContainer);\r\n });\r\n return panelDiv;\r\n }\r\n\r\n private setCurrentStyle(newStyle: string, target: HTMLDivElement) {\r\n this.currentStyle = newStyle;\r\n\r\n this.styleBoxes.forEach(box => {\r\n box.style.borderColor = box === target ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n });\r\n\r\n if (this.onStyleChanged) {\r\n this.onStyleChanged(this.currentStyle);\r\n }\r\n }\r\n}\r\n","import Icon from './frame-marker-icon.svg';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { Settings } from '../../core/Settings';\r\nimport { RectangleMarker } from '../RectangleMarker';\r\nimport { LineWidthPanel } from '../../ui/toolbox-panels/LineWidthPanel';\r\nimport { LineStylePanel } from '../../ui/toolbox-panels/LineStylePanel';\r\nimport { RectangleMarkerState } from '../RectangleMarkerState';\r\n\r\nexport class FrameMarker extends RectangleMarker {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'FrameMarker';\r\n \r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Frame marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n private strokePanel: ColorPickerPanel;\r\n private strokeWidthPanel: LineWidthPanel;\r\n private strokeStylePanel: LineStylePanel;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.strokeColor = settings.defaultColor;\r\n this.strokeWidth = settings.defaultStrokeWidth;\r\n this.strokeDasharray = settings.defaultStrokeDasharray;\r\n\r\n this.strokePanel = new ColorPickerPanel(\r\n 'Line color',\r\n settings.defaultColorSet,\r\n settings.defaultColor\r\n );\r\n this.strokePanel.onColorChanged = this.setStrokeColor;\r\n\r\n this.strokeWidthPanel = new LineWidthPanel(\r\n 'Line width',\r\n settings.defaultStrokeWidths,\r\n settings.defaultStrokeWidth\r\n );\r\n this.strokeWidthPanel.onWidthChanged = this.setStrokeWidth;\r\n\r\n this.strokeStylePanel = new LineStylePanel(\r\n 'Line style',\r\n settings.defaultStrokeDasharrays,\r\n settings.defaultStrokeDasharray\r\n );\r\n this.strokeStylePanel.onStyleChanged = this.setStrokeDasharray;\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.strokePanel, this.strokeWidthPanel, this.strokeStylePanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): RectangleMarkerState {\r\n const result = super.getState();\r\n result.typeName = FrameMarker.typeName;\r\n return result;\r\n }\r\n}\r\n","/**\r\n * Represents a list of colors.\r\n */\r\nexport type ColorSet = string[];\r\n\r\n/**\r\n * marker.js 2 display mode - `inline` or `popup`.\r\n */\r\nexport type DisplayMode = 'inline' | 'popup';\r\n\r\n/**\r\n * Default settings for marker.js 2 markers.\r\n */\r\nexport class Settings {\r\n /**\r\n * List of colors used in color pickers.\r\n */\r\n public defaultColorSet: ColorSet = [\r\n '#EF4444', // red\r\n '#10B981', // green\r\n '#2563EB', // blue\r\n '#FFFF00', // yellow\r\n '#7C3AED', // purple\r\n '#F472B6', // pink\r\n '#000000', // black\r\n '#FFFFFF' //white\r\n ];\r\n\r\n /**\r\n * Default foreground color.\r\n */\r\n public defaultColor = this.defaultColorSet[0];\r\n /**\r\n * Default fill color.\r\n */\r\n public defaultFillColor = this.defaultColorSet[0];\r\n /**\r\n * Default stroke color for markers with background (eg. {@link CalloutMarker}).\r\n */\r\n public defaultStrokeColor = this.defaultColorSet[7];\r\n /**\r\n * Default highlighter color.\r\n */\r\n public defaultHighlightColor = this.defaultColorSet[3];\r\n /**\r\n * Default stroke (line) width.\r\n */\r\n public defaultStrokeWidth = 3;\r\n /**\r\n * Default line dash array\r\n */\r\n public defaultStrokeDasharray = '';\r\n /**\r\n * Default opacity (alpha) of the {@link HighlightMarker} (and other highlighters).\r\n */\r\n public defaultHighlightOpacity = 0.5;\r\n /**\r\n * Default font family for text-based markers (eg. {@link TextMarker} and {@link CalloutMarker}).\r\n *\r\n */\r\n public defaultFontFamily = 'Helvetica, Arial, sans-serif';\r\n\r\n /**\r\n * Stroke (line) width options.\r\n */\r\n public defaultStrokeWidths = [1, 2, 3, 5, 10];\r\n \r\n /**\r\n * Stroke dash array options.\r\n */\r\n public defaultStrokeDasharrays = ['', '3', '12 3', '9 6 3 6'];\r\n\r\n /**\r\n * Opacity options.\r\n */\r\n public defaultOpacitySteps = [0.1, 0.25, 0.5, 0.75, 1];\r\n\r\n /**\r\n * Default display mode.\r\n */\r\n public displayMode: DisplayMode = 'inline';\r\n\r\n /**\r\n * Font family options.\r\n */\r\n public defaultFontFamilies = [\r\n 'Times, \"Times New Roman\", serif',\r\n 'Helvetica, Arial, sans-serif',\r\n 'Courier, \"Courier New\", monospace',\r\n 'cursive',\r\n 'fantasy'\r\n ];\r\n\r\n /**\r\n * Margin in pixels between marker.js popup UI and window borders.\r\n */\r\n public popupMargin = 30;\r\n\r\n /**\r\n * Create a new Freehand marker for every stroke.\r\n */\r\n public newFreehandMarkerOnPointerUp = false;\r\n\r\n /**\r\n * If set to true, when colors on a marker are changed \r\n * it changes the default color for other markers as well.\r\n * \r\n * @since 2.7.0\r\n */\r\n public defaultColorsFollowCurrentColors = false;\r\n\r\n /**\r\n * Increase this setting for smoother FreehandMarker lines.\r\n * Note that it will also take more space when you save the state.\r\n *\r\n * @since 2.20.0\r\n */\r\n public freehandPixelRatio = 1;\r\n\r\n /**\r\n * When set to true rotation feature is disabled on markers.\r\n * This doesn't affect markers restored from a previously saved state.\r\n * \r\n * @since 2.22.0\r\n */\r\n public disableRotation = false;\r\n\r\n /**\r\n * If set, the UI will be offset by the specified value, \r\n * otherwise it will be offset by -toolbarHeight or 0 if \r\n * there's less space than toolbarHeight on top.\r\n * \r\n * Use this if you want to control the position inside a\r\n * `position: relative` parent, as auto-calculation\r\n * will calculate available space from the relative\r\n * container and not the whole page.\r\n * \r\n * Common usage when used with a relatively positioned parent would be:\r\n * \r\n * ```typescript\r\n * markerArea.targetRoot = document.getElementById('relativeParent');\r\n * markerArea.settings.uiOffsetTop = -markerArea.styles.settings.toolbarHeight;\r\n * ```\r\n * This would ensure that the toolbar is placed above the image\r\n * even if the image's offset from the relative parent is 0.\r\n * \r\n * @since 2.28.0\r\n */\r\n public uiOffsetTop?: number;\r\n \r\n /**\r\n * If set, the UI will be offset by the specefied number of pixels on the left.\r\n * \r\n * @since 2.31.0\r\n */\r\n public uiOffsetLeft?: number;\r\n\r\n /**\r\n * Default font size for the `CaptionFrameMarker`\r\n * \r\n * @since 2.29.0\r\n */\r\n public defaultCaptionFontSize = '1rem';\r\n /**\r\n * Default caption text for the `CaptionFrameMarker`\r\n * \r\n * @since 2.29.0\r\n */\r\n public defaultCaptionText = 'Text';\r\n /**\r\n * Enable word wrapping in text markers (`TextMarker`, `CalloutMarker`)\r\n * \r\n * @since 2.30.0\r\n */\r\n public wrapText = false;\r\n}\r\n","import { MarkerBase } from '../core/MarkerBase';\r\n\r\nimport { IPoint } from '../core/IPoint';\r\nimport { SvgHelper } from '../core/SvgHelper';\r\n\r\nimport { ResizeGrip } from './ResizeGrip';\r\nimport { Settings } from '../core/Settings';\r\nimport { LinearMarkerBaseState } from './LinearMarkerBaseState';\r\nimport { MarkerBaseState } from '../core/MarkerBaseState';\r\n\r\n/**\r\n * LinearMarkerBase is a base class for all line-type markers (Line, Arrow, Measurement Tool, etc.).\r\n */\r\nexport class LinearMarkerBase extends MarkerBase {\r\n /**\r\n * x coordinate of the first end-point\r\n */\r\n protected x1 = 0;\r\n /**\r\n * y coordinate of the first end-point\r\n */\r\n protected y1 = 0;\r\n /**\r\n * x coordinate of the second end-point\r\n */\r\n protected x2 = 0;\r\n /**\r\n * y coordinate of the second end-point\r\n */\r\n protected y2 = 0;\r\n\r\n /**\r\n * Default line length when marker is created with a simple click (without dragging).\r\n */\r\n protected defaultLength = 50;\r\n\r\n /**\r\n * Pointer coordinates at the satart of move or resize.\r\n */\r\n protected manipulationStartX = 0;\r\n protected manipulationStartY = 0;\r\n\r\n private manipulationStartX1 = 0;\r\n private manipulationStartY1 = 0;\r\n private manipulationStartX2 = 0;\r\n private manipulationStartY2 = 0;\r\n\r\n /**\r\n * Marker's main visual.\r\n */\r\n protected visual: SVGGraphicsElement;\r\n\r\n /**\r\n * Container for control elements.\r\n */\r\n protected controlBox: SVGGElement;\r\n\r\n /**\r\n * First manipulation grip\r\n */\r\n protected grip1: ResizeGrip;\r\n /**\r\n * Second manipulation grip.\r\n */\r\n protected grip2: ResizeGrip;\r\n /**\r\n * Active manipulation grip.\r\n */\r\n protected activeGrip: ResizeGrip;\r\n\r\n /**\r\n * Creates a LineMarkerBase object.\r\n * \r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.setupControlBox();\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (super.ownsTarget(el)) {\r\n return true;\r\n } else if (\r\n this.grip1.ownsTarget(el) || this.grip2.ownsTarget(el)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n \r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n\r\n this.manipulationStartX = point.x;\r\n this.manipulationStartY = point.y;\r\n\r\n if (this.state === 'new') {\r\n this.x1 = point.x;\r\n this.y1 = point.y;\r\n this.x2 = point.x;\r\n this.y2 = point.y;\r\n }\r\n\r\n this.manipulationStartX1 = this.x1;\r\n this.manipulationStartY1 = this.y1;\r\n this.manipulationStartX2 = this.x2;\r\n this.manipulationStartY2 = this.y2;\r\n\r\n if (this.state !== 'new') {\r\n this.select();\r\n if (this.grip1.ownsTarget(target)) {\r\n this.activeGrip = this.grip1;\r\n } else if (this.grip2.ownsTarget(target)) {\r\n this.activeGrip = this.grip2;\r\n } else {\r\n this.activeGrip = undefined;\r\n }\r\n\r\n if (this.activeGrip) {\r\n this._state = 'resize';\r\n } else {\r\n this._state = 'move';\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) up event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerUp(point: IPoint): void {\r\n const inState = this.state;\r\n super.pointerUp(point);\r\n if (this.state === 'creating' && Math.abs(this.x1 - this.x2) < 10 && Math.abs(this.y1 - this.y2) < 10) {\r\n this.x2 = this.x1 + this.defaultLength;\r\n this.adjustVisual();\r\n this.adjustControlBox()\r\n } else {\r\n this.manipulate(point);\r\n }\r\n this._state = 'select';\r\n if (inState === 'creating' && this.onMarkerCreated) {\r\n this.onMarkerCreated(this);\r\n }\r\n }\r\n\r\n /**\r\n * When implemented adjusts marker visual after manipulation when needed.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n protected adjustVisual(): void {}\r\n\r\n /**\r\n * Handles marker manipulation (move, resize, rotate, etc.).\r\n * \r\n * @param point - event coordinates.\r\n */\r\n public manipulate(point: IPoint): void {\r\n if (this.state === 'creating') {\r\n this.resize(point);\r\n } else if (this.state === 'move') {\r\n this.x1 = this.manipulationStartX1 + point.x - this.manipulationStartX;\r\n this.y1 = this.manipulationStartY1 + point.y - this.manipulationStartY;\r\n this.x2 = this.manipulationStartX2 + point.x - this.manipulationStartX;\r\n this.y2 = this.manipulationStartY2 + point.y - this.manipulationStartY;\r\n this.adjustVisual();\r\n this.adjustControlBox();\r\n } else if (this.state === 'resize') {\r\n this.resize(point);\r\n }\r\n }\r\n\r\n /**\r\n * Resizes the line marker.\r\n * @param point - current manipulation coordinates.\r\n */\r\n protected resize(point: IPoint): void {\r\n switch(this.activeGrip) {\r\n case this.grip1:\r\n this.x1 = point.x;\r\n this.y1 = point.y;\r\n break; \r\n case this.grip2:\r\n case undefined:\r\n this.x2 = point.x;\r\n this.y2 = point.y;\r\n break; \r\n }\r\n this.adjustVisual();\r\n this.adjustControlBox();\r\n }\r\n\r\n /**\r\n * Displays marker's controls.\r\n */\r\n public select(): void {\r\n super.select();\r\n this.adjustControlBox();\r\n this.controlBox.style.display = '';\r\n }\r\n\r\n /**\r\n * Hides marker's controls.\r\n */\r\n public deselect(): void {\r\n super.deselect();\r\n this.controlBox.style.display = 'none';\r\n }\r\n\r\n /**\r\n * Creates control box for manipulation controls.\r\n */\r\n protected setupControlBox(): void {\r\n this.controlBox = SvgHelper.createGroup();\r\n this.container.appendChild(this.controlBox);\r\n\r\n this.addControlGrips();\r\n\r\n this.controlBox.style.display = 'none';\r\n }\r\n\r\n private adjustControlBox() {\r\n this.positionGrips();\r\n }\r\n\r\n /**\r\n * Adds control grips to control box.\r\n */\r\n protected addControlGrips(): void {\r\n this.grip1 = this.createGrip();\r\n this.grip2 = this.createGrip();\r\n\r\n this.positionGrips();\r\n }\r\n\r\n /**\r\n * Creates manipulation grip.\r\n * @returns - manipulation grip.\r\n */\r\n protected createGrip(): ResizeGrip {\r\n const grip = new ResizeGrip();\r\n grip.visual.transform.baseVal.appendItem(SvgHelper.createTransform());\r\n this.controlBox.appendChild(grip.visual);\r\n\r\n return grip;\r\n }\r\n\r\n /**\r\n * Updates manipulation grip layout.\r\n */\r\n protected positionGrips(): void {\r\n const gripSize = this.grip1.GRIP_SIZE;\r\n\r\n this.positionGrip(this.grip1.visual, this.x1 - gripSize / 2, this.y1 - gripSize / 2);\r\n this.positionGrip(this.grip2.visual, this.x2 - gripSize / 2, this.y2 - gripSize / 2);\r\n }\r\n\r\n /**\r\n * Positions manipulation grip.\r\n * @param grip - grip to position\r\n * @param x - new X coordinate\r\n * @param y - new Y coordinate\r\n */\r\n protected positionGrip(grip: SVGGraphicsElement, x: number, y: number): void {\r\n const translate = grip.transform.baseVal.getItem(0);\r\n translate.setTranslate(x, y);\r\n grip.transform.baseVal.replaceItem(translate, 0);\r\n }\r\n\r\n /**\r\n * Returns marker's state.\r\n */\r\n public getState(): LinearMarkerBaseState {\r\n const result: LinearMarkerBaseState = Object.assign({\r\n x1: this.x1,\r\n y1: this.y1,\r\n x2: this.x2,\r\n y2: this.y2\r\n }, super.getState());\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores marker's state to the previously saved one.\r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n super.restoreState(state);\r\n const lmbState = state as LinearMarkerBaseState;\r\n this.x1 = lmbState.x1;\r\n this.y1 = lmbState.y1;\r\n this.x2 = lmbState.x2;\r\n this.y2 = lmbState.y2;\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n * \r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n public scale(scaleX: number, scaleY: number): void {\r\n super.scale(scaleX, scaleY);\r\n\r\n this.x1 = this.x1 * scaleX;\r\n this.y1 = this.y1 * scaleY;\r\n this.x2 = this.x2 * scaleX;\r\n this.y2 = this.y2 * scaleY;\r\n\r\n this.adjustVisual();\r\n this.adjustControlBox();\r\n }\r\n}\r\n","import { IPoint } from '../../core/IPoint';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { Settings } from '../../core/Settings';\r\nimport { LinearMarkerBase } from '../LinearMarkerBase';\r\nimport Icon from './line-marker-icon.svg';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { LineWidthPanel } from '../../ui/toolbox-panels/LineWidthPanel';\r\nimport { LineStylePanel } from '../../ui/toolbox-panels/LineStylePanel';\r\nimport { LineMarkerState } from './LineMarkerState';\r\nimport { MarkerBaseState } from '../../core/MarkerBaseState';\r\n\r\nexport class LineMarker extends LinearMarkerBase {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'LineMarker';\r\n \r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Line marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n /**\r\n * Invisible wider line to make selection easier/possible.\r\n */\r\n protected selectorLine: SVGLineElement;\r\n /**\r\n * Visible marker line.\r\n */\r\n protected visibleLine: SVGLineElement;\r\n\r\n /**\r\n * Line color.\r\n */\r\n protected strokeColor = 'transparent';\r\n /**\r\n * Line width.\r\n */\r\n protected strokeWidth = 0;\r\n /**\r\n * Line dash array.\r\n */\r\n protected strokeDasharray = '';\r\n\r\n /**\r\n * Color pickar panel for line color.\r\n */\r\n protected strokePanel: ColorPickerPanel;\r\n /**\r\n * Line width toolbox panel.\r\n */\r\n protected strokeWidthPanel: LineWidthPanel;\r\n /**\r\n * Line dash array toolbox panel.\r\n */\r\n protected strokeStylePanel: LineStylePanel;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.setStrokeColor = this.setStrokeColor.bind(this);\r\n this.setStrokeWidth = this.setStrokeWidth.bind(this);\r\n this.setStrokeDasharray = this.setStrokeDasharray.bind(this);\r\n\r\n this.strokeColor = settings.defaultColor;\r\n this.strokeWidth = settings.defaultStrokeWidth;\r\n this.strokeDasharray = settings.defaultStrokeDasharray;\r\n\r\n this.strokePanel = new ColorPickerPanel(\r\n 'Line color',\r\n settings.defaultColorSet,\r\n settings.defaultColor\r\n );\r\n this.strokePanel.onColorChanged = this.setStrokeColor;\r\n\r\n this.strokeWidthPanel = new LineWidthPanel(\r\n 'Line width',\r\n settings.defaultStrokeWidths,\r\n settings.defaultStrokeWidth\r\n );\r\n this.strokeWidthPanel.onWidthChanged = this.setStrokeWidth;\r\n\r\n this.strokeStylePanel = new LineStylePanel(\r\n 'Line style',\r\n settings.defaultStrokeDasharrays,\r\n settings.defaultStrokeDasharray\r\n );\r\n this.strokeStylePanel.onStyleChanged = this.setStrokeDasharray;\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (\r\n super.ownsTarget(el) ||\r\n el === this.visual ||\r\n el === this.selectorLine ||\r\n el === this.visibleLine\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private createVisual() {\r\n this.visual = SvgHelper.createGroup();\r\n this.selectorLine = SvgHelper.createLine(\r\n this.x1,\r\n this.y1,\r\n this.x2,\r\n this.y2,\r\n [\r\n ['stroke', 'transparent'],\r\n ['stroke-width', (this.strokeWidth + 10).toString()],\r\n ]\r\n );\r\n this.visibleLine = SvgHelper.createLine(\r\n this.x1,\r\n this.y1,\r\n this.x2,\r\n this.y2,\r\n [\r\n ['stroke', this.strokeColor],\r\n ['stroke-width', this.strokeWidth.toString()],\r\n ]\r\n );\r\n this.visual.appendChild(this.selectorLine);\r\n this.visual.appendChild(this.visibleLine);\r\n\r\n this.addMarkerVisualToContainer(this.visual);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n if (this.state === 'new') {\r\n this.createVisual();\r\n this.adjustVisual();\r\n\r\n this._state = 'creating';\r\n }\r\n }\r\n\r\n /**\r\n * Adjusts visual after manipulation.\r\n */\r\n protected adjustVisual(): void {\r\n if (this.selectorLine && this.visibleLine) {\r\n this.selectorLine.setAttribute('x1', this.x1.toString());\r\n this.selectorLine.setAttribute('y1', this.y1.toString());\r\n this.selectorLine.setAttribute('x2', this.x2.toString());\r\n this.selectorLine.setAttribute('y2', this.y2.toString());\r\n\r\n this.visibleLine.setAttribute('x1', this.x1.toString());\r\n this.visibleLine.setAttribute('y1', this.y1.toString());\r\n this.visibleLine.setAttribute('x2', this.x2.toString());\r\n this.visibleLine.setAttribute('y2', this.y2.toString());\r\n\r\n SvgHelper.setAttributes(this.visibleLine, [['stroke', this.strokeColor]]);\r\n SvgHelper.setAttributes(this.visibleLine, [['stroke-width', this.strokeWidth.toString()]]);\r\n SvgHelper.setAttributes(this.visibleLine, [['stroke-dasharray', this.strokeDasharray.toString()]]);\r\n }\r\n }\r\n\r\n /**\r\n * Sets line color.\r\n * @param color - new color.\r\n */\r\n protected setStrokeColor(color: string): void {\r\n this.strokeColor = color;\r\n this.adjustVisual();\r\n this.colorChanged(color);\r\n }\r\n /**\r\n * Sets line width.\r\n * @param width - new width.\r\n */\r\n protected setStrokeWidth(width: number): void {\r\n this.strokeWidth = width\r\n this.adjustVisual();\r\n }\r\n\r\n /**\r\n * Sets line dash array.\r\n * @param dashes - new dash array.\r\n */\r\n protected setStrokeDasharray(dashes: string): void {\r\n this.strokeDasharray = dashes;\r\n this.adjustVisual();\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.strokePanel, this.strokeWidthPanel, this.strokeStylePanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): LineMarkerState {\r\n const result: LineMarkerState = Object.assign({\r\n strokeColor: this.strokeColor,\r\n strokeWidth: this.strokeWidth,\r\n strokeDasharray: this.strokeDasharray\r\n }, super.getState());\r\n result.typeName = LineMarker.typeName;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n * \r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n super.restoreState(state);\r\n\r\n const lmState = state as LineMarkerState;\r\n this.strokeColor = lmState.strokeColor;\r\n this.strokeWidth = lmState.strokeWidth;\r\n this.strokeDasharray = lmState.strokeDasharray;\r\n\r\n this.createVisual();\r\n this.adjustVisual();\r\n }\r\n}\r\n","import { ToolboxPanel } from '../ToolboxPanel';\r\nimport Icon from './font-family-panel-icon.svg';\r\n\r\n/**\r\n * Font change event handler type.\r\n */\r\nexport type FontChangeHandler = (newFont: string) => void;\r\n\r\n/**\r\n * Font family selection toolbox panel.\r\n */\r\nexport class FontFamilyPanel extends ToolboxPanel {\r\n private fonts: string[] = [];\r\n private currentFont?: string;\r\n\r\n private fontBoxes: HTMLDivElement[] = [];\r\n\r\n /**\r\n * Handler for the font family change event.\r\n */\r\n public onFontChanged?: FontChangeHandler;\r\n\r\n /**\r\n * Creates a font family toolbox panel.\r\n * @param title - panel title.\r\n * @param fonts - available font families.\r\n * @param currentFont - currently selected font family.\r\n * @param icon - panel button icon (SVG image markup).\r\n */\r\n constructor(title: string, fonts: string[], currentFont?: string, icon?: string) {\r\n super(title, icon ? icon : Icon);\r\n this.fonts = fonts;\r\n this.currentFont = currentFont;\r\n\r\n this.setCurrentFont = this.setCurrentFont.bind(this);\r\n }\r\n\r\n /**\r\n * Returns panel UI.\r\n */\r\n public getUi(): HTMLDivElement {\r\n const panelDiv = document.createElement('div');\r\n // panelDiv.style.display = 'flex';\r\n panelDiv.style.overflow = 'hidden';\r\n panelDiv.style.flexGrow = '2';\r\n this.fonts.forEach((font) => {\r\n const fontBoxContainer = document.createElement('div');\r\n fontBoxContainer.style.display = 'inline-block';\r\n // fontBoxContainer.style.flexGrow = '2';\r\n fontBoxContainer.style.alignItems = 'center';\r\n fontBoxContainer.style.justifyContent = 'space-between';\r\n fontBoxContainer.style.padding = '5px';\r\n fontBoxContainer.style.borderWidth = '2px';\r\n fontBoxContainer.style.borderStyle = 'solid';\r\n fontBoxContainer.style.overflow = 'hidden';\r\n fontBoxContainer.style.maxWidth = `${100 / this.fonts.length - 5}%`;\r\n fontBoxContainer.style.borderColor =\r\n font === this.currentFont ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n\r\n fontBoxContainer.addEventListener('click', () => {\r\n this.setCurrentFont(font, fontBoxContainer);\r\n })\r\n panelDiv.appendChild(fontBoxContainer);\r\n\r\n const fontBox = document.createElement('div');\r\n fontBox.style.display = 'flex';\r\n fontBox.style.minHeight = '20px';\r\n fontBox.style.flexGrow = '2';\r\n fontBox.style.fontFamily = font;\r\n fontBox.style.overflow = 'hidden';\r\n\r\n const fontLabel = document.createElement('div');\r\n fontLabel.style.whiteSpace = 'nowrap';\r\n fontLabel.style.overflow = 'hidden';\r\n fontLabel.style.textOverflow = 'ellipsis';\r\n fontLabel.innerHTML = 'The quick brown fox jumps over the lazy dog';\r\n\r\n fontBox.appendChild(fontLabel);\r\n\r\n fontBoxContainer.appendChild(fontBox);\r\n\r\n this.fontBoxes.push(fontBoxContainer);\r\n });\r\n return panelDiv;\r\n }\r\n\r\n private setCurrentFont(newFont: string, target: HTMLDivElement) {\r\n this.currentFont = newFont;\r\n\r\n this.fontBoxes.forEach(box => {\r\n box.style.borderColor = box === target ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n });\r\n\r\n if (this.onFontChanged) {\r\n this.onFontChanged(this.currentFont);\r\n }\r\n }\r\n}\r\n","import { IPoint } from '../../core/IPoint';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { RectangularBoxMarkerBase } from '../RectangularBoxMarkerBase';\r\nimport { Settings } from '../../core/Settings';\r\nimport Icon from './text-marker-icon.svg';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { FontFamilyPanel } from '../../ui/toolbox-panels/FontFamilyPanel';\r\nimport { TextMarkerState } from './TextMarkerState';\r\nimport { MarkerBaseState } from '../../core/MarkerBaseState';\r\n\r\nexport class TextMarker extends RectangularBoxMarkerBase {\r\n /**\r\n * String type name of the marker type.\r\n *\r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'TextMarker';\r\n\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Text marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n /**\r\n * Text color.\r\n */\r\n protected color = 'transparent';\r\n /**\r\n * Text's font family.\r\n */\r\n protected fontFamily: string;\r\n /**\r\n * Padding inside of the marker's bounding box in percents.\r\n */\r\n protected padding = 5;\r\n\r\n /**\r\n * Text color picker toolbox panel.\r\n */\r\n protected colorPanel: ColorPickerPanel;\r\n /**\r\n * Text font family toolbox panel.\r\n */\r\n protected fontFamilyPanel: FontFamilyPanel;\r\n\r\n private readonly DEFAULT_TEXT = 'your text here';\r\n private text: string = this.DEFAULT_TEXT;\r\n /**\r\n * Visual text element.\r\n */\r\n protected textElement: SVGTextElement;\r\n /**\r\n * Text background rectangle.\r\n */\r\n protected bgRectangle: SVGRectElement;\r\n /**\r\n * Div element for the text editor container.\r\n */\r\n protected textEditDiv: HTMLDivElement;\r\n /**\r\n * Editable text element.\r\n */\r\n protected textEditor: HTMLDivElement;\r\n\r\n protected isMoved = false;\r\n private pointerDownPoint: IPoint;\r\n private pointerDownTimestamp: number;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(\r\n container: SVGGElement,\r\n overlayContainer: HTMLDivElement,\r\n settings: Settings\r\n ) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.color = settings.defaultColor;\r\n this.fontFamily = settings.defaultFontFamily;\r\n\r\n this.defaultSize = { x: 100, y: 30 };\r\n\r\n this.setColor = this.setColor.bind(this);\r\n this.setFont = this.setFont.bind(this);\r\n this.renderText = this.renderText.bind(this);\r\n this.sizeText = this.sizeText.bind(this);\r\n this.textEditDivClicked = this.textEditDivClicked.bind(this);\r\n this.showTextEditor = this.showTextEditor.bind(this);\r\n this.setSize = this.setSize.bind(this);\r\n this.positionTextEditor = this.positionTextEditor.bind(this);\r\n this.wrapText = this.wrapText.bind(this);\r\n\r\n this.colorPanel = new ColorPickerPanel(\r\n 'Color',\r\n settings.defaultColorSet,\r\n settings.defaultColor\r\n );\r\n this.colorPanel.onColorChanged = this.setColor;\r\n\r\n this.fontFamilyPanel = new FontFamilyPanel(\r\n 'Font',\r\n settings.defaultFontFamilies,\r\n settings.defaultFontFamily\r\n );\r\n this.fontFamilyPanel.onFontChanged = this.setFont;\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n *\r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (\r\n super.ownsTarget(el) ||\r\n el === this.visual ||\r\n el === this.textElement ||\r\n el === this.bgRectangle\r\n ) {\r\n return true;\r\n } else {\r\n let found = false;\r\n this.textElement.childNodes.forEach((span) => {\r\n if (span === el) {\r\n found = true;\r\n }\r\n });\r\n return found;\r\n }\r\n }\r\n\r\n /**\r\n * Creates text marker visual.\r\n */\r\n protected createVisual(): void {\r\n this.visual = SvgHelper.createGroup();\r\n\r\n this.bgRectangle = SvgHelper.createRect(1, 1, [['fill', 'transparent']]);\r\n this.visual.appendChild(this.bgRectangle);\r\n\r\n this.textElement = SvgHelper.createText([\r\n ['fill', this.color],\r\n ['font-family', this.fontFamily],\r\n ['font-size', '16px'],\r\n ['x', '0'],\r\n ['y', '0'],\r\n ]);\r\n this.textElement.transform.baseVal.appendItem(SvgHelper.createTransform()); // translate transorm\r\n this.textElement.transform.baseVal.appendItem(SvgHelper.createTransform()); // scale transorm\r\n\r\n this.visual.appendChild(this.textElement);\r\n\r\n this.addMarkerVisualToContainer(this.visual);\r\n this.renderText();\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n *\r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n\r\n this.isMoved = false;\r\n this.pointerDownPoint = point;\r\n this.pointerDownTimestamp = Date.now();\r\n\r\n if (this.state === 'new') {\r\n this.createVisual();\r\n this.moveVisual(point);\r\n this._state = 'creating';\r\n }\r\n }\r\n\r\n private wrapText(): string {\r\n function getTextAspectRatio(textLines: string[]): number {\r\n const charsLinesAspectRatio = 0.35;\r\n\r\n let longestLineChars = textLines[0].length;\r\n textLines.forEach(line => {\r\n if (line.length > longestLineChars) {\r\n longestLineChars = line.length;\r\n }\r\n });\r\n\r\n return longestLineChars * charsLinesAspectRatio / textLines.length;\r\n }\r\n\r\n if (this.text !== '') {\r\n const lines = this.text.split(/\\r\\n|[\\n\\v\\f\\r\\x85\\u2028\\u2029]/);\r\n const boxAspectRatio = this.width * 1.0 / this.height;\r\n let processedLines = new Array(...lines);\r\n \r\n let textAspectRatio = getTextAspectRatio(processedLines);\r\n\r\n let maxLineLength = Number.MAX_VALUE;\r\n while (textAspectRatio > boxAspectRatio) {\r\n let longestLine = processedLines[0];\r\n processedLines.forEach(line => {\r\n if (line.length > longestLine.length) {\r\n longestLine = line;\r\n }\r\n });\r\n maxLineLength = longestLine.lastIndexOf(' ', maxLineLength - 1);\r\n\r\n if (maxLineLength > 0) {\r\n processedLines = [];\r\n lines.forEach(line => {\r\n let reminderLine = line;\r\n while (reminderLine.length > maxLineLength) {\r\n let maxEnd = reminderLine.lastIndexOf(' ', maxLineLength);\r\n if (maxEnd < 0) {\r\n // if the first word is longer than max, at least wrap after it\r\n maxEnd = reminderLine.indexOf(' ');\r\n }\r\n if (maxEnd > 0) {\r\n processedLines.push(reminderLine.substring(0, maxEnd));\r\n reminderLine = reminderLine.substring(maxEnd).trim();\r\n } else {\r\n processedLines.push(reminderLine);\r\n reminderLine = '';\r\n }\r\n }\r\n processedLines.push(reminderLine);\r\n });\r\n textAspectRatio = getTextAspectRatio(processedLines);\r\n } else {\r\n // can't wrap no more\r\n textAspectRatio = -1;\r\n }\r\n }\r\n\r\n return processedLines.join(`\\r\\n`);\r\n } else {\r\n return this.text;\r\n }\r\n }\r\n\r\n private renderText() {\r\n const LINE_SIZE = '1.2em';\r\n\r\n if (this.textElement) {\r\n while (this.textElement.lastChild) {\r\n this.textElement.removeChild(this.textElement.lastChild);\r\n }\r\n\r\n const processedText = this.globalSettings.wrapText ? this.wrapText() : this.text;\r\n const lines = processedText.split(/\\r\\n|[\\n\\v\\f\\r\\x85\\u2028\\u2029]/);\r\n lines.forEach((line) => {\r\n this.textElement.appendChild(\r\n SvgHelper.createTSpan(\r\n // workaround for swallowed empty lines\r\n line.trim() === '' ? ' ' : line.trim(), [\r\n ['x', '0'],\r\n ['dy', LINE_SIZE],\r\n ])\r\n );\r\n });\r\n\r\n setTimeout(this.sizeText, 10);\r\n }\r\n }\r\n\r\n private getTextScale(): number {\r\n const textSize = this.textElement.getBBox();\r\n let scale = 1.0;\r\n if (textSize.width > 0 && textSize.height > 0) {\r\n const xScale =\r\n (this.width * 1.0 - (this.width * this.padding * 2) / 100) /\r\n textSize.width;\r\n const yScale =\r\n (this.height * 1.0 - (this.height * this.padding * 2) / 100) /\r\n textSize.height;\r\n scale = Math.min(xScale, yScale);\r\n }\r\n return scale;\r\n }\r\n\r\n private getTextPosition(scale: number): IPoint {\r\n const xSign = window.getComputedStyle(this.textElement).direction === 'rtl' ? 1 : -1;\r\n const textSize = this.textElement.getBBox();\r\n let x = 0;\r\n let y = 0;\r\n if (textSize.width > 0 && textSize.height > 0) {\r\n x = (this.width + xSign * textSize.width * scale) / 2;\r\n y = this.height / 2 - (textSize.height * scale) / 2;\r\n }\r\n return { x: x, y: y };\r\n }\r\n\r\n private sizeText() {\r\n const textBBox = this.textElement.getBBox();\r\n const scale = this.getTextScale();\r\n const position = this.getTextPosition(scale);\r\n position.y -= textBBox.y * scale; // workaround adjustment for text not being placed at y=0\r\n\r\n if (navigator.userAgent.indexOf('Edge/') > -1) {\r\n // workaround for legacy Edge as transforms don't work otherwise but this way it doesn't work in Safari\r\n this.textElement.style.transform = `translate(${position.x}px, ${position.y}px) scale(${scale}, ${scale})`;\r\n } else {\r\n this.textElement.transform.baseVal\r\n .getItem(0)\r\n .setTranslate(position.x, position.y);\r\n this.textElement.transform.baseVal.getItem(1).setScale(scale, scale);\r\n }\r\n }\r\n\r\n /**\r\n * Handles marker manipulation (move, resize, rotate, etc.).\r\n *\r\n * @param point - event coordinates.\r\n */\r\n public manipulate(point: IPoint): void {\r\n super.manipulate(point);\r\n if (this.pointerDownPoint !== undefined) {\r\n this.isMoved =\r\n Math.abs(point.x - this.pointerDownPoint.x) > 5 ||\r\n Math.abs(point.y - this.pointerDownPoint.y) > 5;\r\n }\r\n }\r\n\r\n /**\r\n * Resize marker based on current pointer coordinates and context.\r\n * @param point\r\n */\r\n protected resize(point: IPoint): void {\r\n super.resize(point);\r\n this.isMoved = true;\r\n this.setSize();\r\n if (this.globalSettings.wrapText) {\r\n this.renderText();\r\n } else {\r\n this.sizeText();\r\n }\r\n }\r\n\r\n /**\r\n * Sets size of marker elements after manipulation.\r\n */\r\n protected setSize(): void {\r\n super.setSize();\r\n if (this.visual && this.bgRectangle) {\r\n SvgHelper.setAttributes(this.visual, [\r\n ['width', this.width.toString()],\r\n ['height', this.height.toString()],\r\n ]);\r\n SvgHelper.setAttributes(this.bgRectangle, [\r\n ['width', this.width.toString()],\r\n ['height', this.height.toString()],\r\n ]);\r\n }\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) up event.\r\n *\r\n * @param point - event coordinates.\r\n */\r\n public pointerUp(point: IPoint): void {\r\n const inState = this.state;\r\n if (inState === 'creating') {\r\n this._suppressMarkerCreateEvent = true;\r\n }\r\n super.pointerUp(point);\r\n this.setSize();\r\n if (\r\n inState === 'creating' ||\r\n (!this.isMoved && Date.now() - this.pointerDownTimestamp > 500)\r\n ) {\r\n this.showTextEditor();\r\n }\r\n this.pointerDownPoint = undefined;\r\n }\r\n\r\n private showTextEditor() {\r\n this._state = 'edit';\r\n this.overlayContainer.innerHTML = '';\r\n\r\n this.textEditDiv = document.createElement('div');\r\n // textEditDiv.style.display = 'flex';\r\n this.textEditDiv.style.flexGrow = '2';\r\n //textEditDiv.style.backgroundColor = 'rgb(0,0,0,0.7)';\r\n this.textEditDiv.style.alignItems = 'center';\r\n this.textEditDiv.style.justifyContent = 'center';\r\n this.textEditDiv.style.pointerEvents = 'auto';\r\n this.textEditDiv.style.overflow = 'hidden';\r\n\r\n this.textEditor = document.createElement('div');\r\n this.textEditor.style.position = 'absolute';\r\n this.textEditor.style.fontFamily = this.fontFamily;\r\n this.textEditor.style.lineHeight = '1em';\r\n this.textEditor.innerText = this.text;\r\n this.textEditor.contentEditable = 'true';\r\n this.textEditor.style.color = this.color;\r\n this.textEditor.style.whiteSpace = 'pre';\r\n //this.textEditor.style.outline = 'none';\r\n this.positionTextEditor();\r\n this.textEditor.addEventListener('pointerup', (ev) => {\r\n ev.stopPropagation();\r\n });\r\n if (!this.globalSettings.wrapText) {\r\n this.textEditor.addEventListener('input', () => {\r\n let fontSize = Number.parseFloat(this.textEditor.style.fontSize);\r\n while (\r\n this.textEditor.clientWidth >=\r\n Number.parseInt(this.textEditor.style.maxWidth) &&\r\n fontSize > 0.9\r\n ) {\r\n fontSize -= 0.1;\r\n this.textEditor.style.fontSize = `${Math.max(fontSize, 0.9)}em`;\r\n }\r\n });\r\n }\r\n this.textEditor.addEventListener('keyup', (ev) => {\r\n ev.cancelBubble = true;\r\n });\r\n this.textEditor.addEventListener('paste', (ev) => {\r\n if (ev.clipboardData) {\r\n // paste plain text\r\n const content = ev.clipboardData.getData('text');\r\n const selection = window.getSelection();\r\n if (!selection.rangeCount) return false;\r\n selection.deleteFromDocument();\r\n selection.getRangeAt(0).insertNode(document.createTextNode(content));\r\n ev.preventDefault();\r\n }\r\n });\r\n\r\n this.textEditDiv.addEventListener('pointerup', () => {\r\n this.textEditDivClicked(this.textEditor.innerText);\r\n });\r\n this.textEditDiv.appendChild(this.textEditor);\r\n this.overlayContainer.appendChild(this.textEditDiv);\r\n\r\n this.hideVisual();\r\n\r\n this.textEditor.focus();\r\n document.execCommand('selectAll');\r\n }\r\n\r\n private positionTextEditor() {\r\n if (this.state === 'edit') {\r\n if (this.textEditor === undefined) {\r\n this.showTextEditor();\r\n } else {\r\n if (this.globalSettings.wrapText) {\r\n this.textEditor.style.left = `${this.left + this.padding}px`;\r\n this.textEditor.style.top = `${this.top + this.padding}px`;\r\n this.textEditor.style.width = `${this.width - this.padding * 2}px`;\r\n this.textEditor.style.height = `${this.height - this.padding * 2}px`;\r\n this.textEditor.style.maxHeight = this.textEditor.style.height;\r\n this.textEditor.style.whiteSpace = 'wrap';\r\n } else {\r\n this.textElement.style.display = '';\r\n const textScale = this.getTextScale();\r\n // const textPosition = this.getTextPosition(textScale);\r\n const rPosition = this.rotatePoint({\r\n x: this.left + this.width / 2,\r\n y: this.top + this.height / 2,\r\n });\r\n const textSize = this.textElement.getBBox();\r\n const rWH = {\r\n x: textSize.width * textScale,\r\n y: textSize.height * textScale,\r\n };\r\n rPosition.x -= rWH.x / 2;\r\n rPosition.y -= rWH.y / 2;\r\n\r\n this.textEditor.style.top = `${rPosition.y}px`;\r\n this.textEditor.style.left = `${rPosition.x}px`;\r\n this.textEditor.style.maxWidth = `${\r\n this.overlayContainer.offsetWidth - rPosition.x\r\n }px`;\r\n this.textEditor.style.fontSize = `${Math.max(16 * textScale, 12)}px`;\r\n this.textElement.style.display = 'none';\r\n }\r\n }\r\n }\r\n }\r\n\r\n private textEditDivClicked(text: string) {\r\n this.text = text.trim();\r\n this.overlayContainer.innerHTML = '';\r\n this.renderText();\r\n this.showVisual();\r\n if (this._suppressMarkerCreateEvent) {\r\n this._suppressMarkerCreateEvent = false;\r\n if (this.onMarkerCreated) {\r\n this.onMarkerCreated(this);\r\n }\r\n }\r\n this.stateChanged();\r\n }\r\n\r\n public select(): void {\r\n super.select(); \r\n if (this.state === 'edit') {\r\n this.textEditDivClicked(this.textEditor.innerText);\r\n }\r\n }\r\n\r\n /**\r\n * Deselects this marker, renders text (if necessary), and hides selected marker UI.\r\n */\r\n public deselect(): void {\r\n if (this.state === 'edit') {\r\n this.textEditDivClicked(this.textEditor.innerText);\r\n }\r\n super.deselect();\r\n }\r\n\r\n /**\r\n * Opens text editor on double-click.\r\n * @param point\r\n * @param target\r\n */\r\n public dblClick(point: IPoint, target?: EventTarget): void {\r\n super.dblClick(point, target);\r\n\r\n this.showTextEditor();\r\n }\r\n\r\n /**\r\n * Sets text color.\r\n * @param color - new text color.\r\n */\r\n protected setColor(color: string): void {\r\n if (this.textElement) {\r\n SvgHelper.setAttributes(this.textElement, [['fill', color]]);\r\n }\r\n this.color = color;\r\n if (this.textEditor) {\r\n this.textEditor.style.color = this.color;\r\n }\r\n this.colorChanged(color);\r\n }\r\n\r\n /**\r\n * Sets font family.\r\n * @param font - new font family.\r\n */\r\n protected setFont(font: string): void {\r\n if (this.textElement) {\r\n SvgHelper.setAttributes(this.textElement, [['font-family', font]]);\r\n }\r\n this.fontFamily = font;\r\n if (this.textEditor) {\r\n this.textEditor.style.fontFamily = this.fontFamily;\r\n }\r\n this.renderText();\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Hides marker visual.\r\n */\r\n protected hideVisual(): void {\r\n this.textElement.style.display = 'none';\r\n this.hideControlBox();\r\n }\r\n /**\r\n * Shows marker visual.\r\n */\r\n protected showVisual(): void {\r\n if (this.state === 'edit') {\r\n this._state = 'select';\r\n }\r\n this.textElement.style.display = '';\r\n this.showControlBox();\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.colorPanel, this.fontFamilyPanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): TextMarkerState {\r\n const result: TextMarkerState = Object.assign(\r\n {\r\n color: this.color,\r\n fontFamily: this.fontFamily,\r\n padding: this.padding,\r\n text: this.text,\r\n wrapText: this.globalSettings.wrapText\r\n },\r\n super.getState()\r\n );\r\n result.typeName = TextMarker.typeName;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n *\r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n const textState = state as TextMarkerState;\r\n this.color = textState.color;\r\n this.fontFamily = textState.fontFamily;\r\n this.padding = textState.padding;\r\n this.text = textState.text;\r\n\r\n this.createVisual();\r\n super.restoreState(state);\r\n this.setSize();\r\n if (this.globalSettings.wrapText) {\r\n // need a rerender post setting size for wrapping\r\n this.renderText();\r\n }\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n *\r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n public scale(scaleX: number, scaleY: number): void {\r\n super.scale(scaleX, scaleY);\r\n\r\n this.setSize();\r\n this.sizeText();\r\n this.positionTextEditor();\r\n }\r\n}\r\n","import { IPoint } from '../../core/IPoint';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { RectangularBoxMarkerBase } from '../RectangularBoxMarkerBase';\r\nimport { Settings } from '../../core/Settings';\r\nimport Icon from './freehand-marker-icon.svg';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { FreehandMarkerState } from './FreehandMarkerState';\r\nimport { MarkerBaseState } from '../../core/MarkerBaseState';\r\nimport { LineWidthPanel } from '../../ui/toolbox-panels/LineWidthPanel';\r\n\r\n\r\nexport class FreehandMarker extends RectangularBoxMarkerBase {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'FreehandMarker';\r\n\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Freehand marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n /**\r\n * Marker color.\r\n */\r\n protected color = 'transparent';\r\n /**\r\n * Marker's stroke width.\r\n */\r\n protected lineWidth = 3;\r\n\r\n private colorPanel: ColorPickerPanel;\r\n private lineWidthPanel: LineWidthPanel;\r\n\r\n\r\n private canvasElement: HTMLCanvasElement;\r\n private canvasContext: CanvasRenderingContext2D;\r\n\r\n private drawingImage: SVGImageElement;\r\n private drawingImgUrl: string;\r\n\r\n private drawing = false;\r\n\r\n private pixelRatio = 1;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(\r\n container: SVGGElement,\r\n overlayContainer: HTMLDivElement,\r\n settings: Settings\r\n ) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.color = settings.defaultColor;\r\n this.lineWidth = settings.defaultStrokeWidth;\r\n this.pixelRatio = settings.freehandPixelRatio;\r\n\r\n this.setColor = this.setColor.bind(this);\r\n this.addCanvas = this.addCanvas.bind(this);\r\n this.finishCreation = this.finishCreation.bind(this);\r\n this.setLineWidth = this.setLineWidth.bind(this);\r\n\r\n this.colorPanel = new ColorPickerPanel(\r\n 'Color',\r\n settings.defaultColorSet,\r\n settings.defaultColor\r\n );\r\n this.colorPanel.onColorChanged = this.setColor;\r\n\r\n this.lineWidthPanel = new LineWidthPanel(\r\n 'Line width',\r\n settings.defaultStrokeWidths,\r\n settings.defaultStrokeWidth\r\n );\r\n this.lineWidthPanel.onWidthChanged = this.setLineWidth;\r\n\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (\r\n super.ownsTarget(el) ||\r\n el === this.visual ||\r\n el === this.drawingImage\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private createVisual() {\r\n this.visual = SvgHelper.createGroup();\r\n this.drawingImage = SvgHelper.createImage();\r\n this.visual.appendChild(this.drawingImage);\r\n\r\n const translate = SvgHelper.createTransform();\r\n this.visual.transform.baseVal.appendItem(translate);\r\n this.addMarkerVisualToContainer(this.visual);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n if (this.state === 'new') {\r\n this.addCanvas();\r\n\r\n this.createVisual();\r\n\r\n this._state = 'creating';\r\n }\r\n\r\n if (this.state === 'creating') {\r\n this.canvasContext.strokeStyle = this.color;\r\n this.canvasContext.lineWidth = this.lineWidth;\r\n this.canvasContext.beginPath();\r\n this.canvasContext.moveTo(point.x, point.y);\r\n this.drawing = true;\r\n } else {\r\n super.pointerDown(point, target);\r\n }\r\n }\r\n\r\n /**\r\n * Handles marker manipulation (move, resize, rotate, etc.).\r\n * \r\n * @param point - event coordinates.\r\n */\r\n public manipulate(point: IPoint): void {\r\n if (this.state === 'creating') {\r\n if (this.drawing) {\r\n this.canvasContext.lineTo(point.x, point.y);\r\n this.canvasContext.stroke();\r\n }\r\n } else {\r\n super.manipulate(point);\r\n }\r\n }\r\n\r\n /**\r\n * Resize marker based on current pointer coordinates and context.\r\n * @param point \r\n */\r\n protected resize(point: IPoint): void {\r\n super.resize(point);\r\n SvgHelper.setAttributes(this.visual, [\r\n ['width', this.width.toString()],\r\n ['height', this.height.toString()],\r\n ]);\r\n SvgHelper.setAttributes(this.drawingImage, [\r\n ['width', this.width.toString()],\r\n ['height', this.height.toString()],\r\n ]);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) up event.\r\n * \r\n * @param point - event coordinates.\r\n */\r\n public pointerUp(point: IPoint): void {\r\n if (this._state === 'creating') {\r\n if (this.drawing) {\r\n this.canvasContext.closePath();\r\n this.drawing = false;\r\n if (this.globalSettings.newFreehandMarkerOnPointerUp) {\r\n this.finishCreation();\r\n }\r\n }\r\n } else {\r\n super.pointerUp(point);\r\n }\r\n }\r\n\r\n private addCanvas() {\r\n this.overlayContainer.innerHTML = '';\r\n\r\n this.canvasElement = document.createElement('canvas');\r\n this.canvasElement.width = this.overlayContainer.clientWidth * this.pixelRatio;\r\n this.canvasElement.height = this.overlayContainer.clientHeight * this.pixelRatio;\r\n this.canvasContext = this.canvasElement.getContext('2d');\r\n this.canvasContext.scale(this.pixelRatio, this.pixelRatio);\r\n this.overlayContainer.appendChild(this.canvasElement);\r\n }\r\n\r\n /**\r\n * Selects this marker and displays appropriate selected marker UI.\r\n */\r\n public select(): void {\r\n if (this.state === 'creating') {\r\n this.finishCreation();\r\n }\r\n super.select();\r\n }\r\n\r\n /**\r\n * Deselects this marker and hides selected marker UI.\r\n */\r\n public deselect(): void {\r\n if (this.state === 'creating') {\r\n this.finishCreation();\r\n }\r\n super.deselect();\r\n }\r\n\r\n private finishCreation() {\r\n const imgData = this.canvasContext.getImageData(\r\n 0,\r\n 0,\r\n this.canvasElement.width,\r\n this.canvasElement.height\r\n );\r\n\r\n let [startX, startY, endX, endY] = [\r\n this.canvasElement.width + 1,\r\n this.canvasElement.height + 1,\r\n -1,\r\n -1,\r\n ];\r\n let containsData = false;\r\n for (let row = 0; row < this.canvasElement.height; row++) {\r\n for (let col = 0; col < this.canvasElement.width; col++) {\r\n const pixAlpha =\r\n imgData.data[row * this.canvasElement.width * 4 + col * 4 + 3];\r\n if (pixAlpha > 0) {\r\n containsData = true;\r\n if (row < startY) {\r\n startY = row;\r\n }\r\n if (col < startX) {\r\n startX = col;\r\n }\r\n if (row > endY) {\r\n endY = row;\r\n }\r\n if (col > endX) {\r\n endX = col;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (containsData) {\r\n this.left = startX / this.pixelRatio;\r\n this.top = startY / this.pixelRatio;\r\n this.width = (endX - startX) / this.pixelRatio;\r\n this.height = (endY - startY) / this.pixelRatio;\r\n\r\n const tmpCanvas = document.createElement('canvas');\r\n tmpCanvas.width = endX - startX;\r\n tmpCanvas.height = endY - startY;\r\n const tmpCtx = tmpCanvas.getContext('2d');\r\n tmpCtx.putImageData(\r\n this.canvasContext.getImageData(\r\n startX,\r\n startY,\r\n endX - startX,\r\n endY - startY\r\n ),\r\n 0,\r\n 0\r\n );\r\n\r\n this.drawingImgUrl = tmpCanvas.toDataURL('image/png');\r\n this.setDrawingImage();\r\n\r\n this._state = 'select';\r\n if (this.onMarkerCreated) {\r\n this.onMarkerCreated(this);\r\n }\r\n }\r\n this.overlayContainer.innerHTML = '';\r\n }\r\n\r\n private setDrawingImage() {\r\n SvgHelper.setAttributes(this.drawingImage, [\r\n ['width', this.width.toString()],\r\n ['height', this.height.toString()],\r\n ]);\r\n SvgHelper.setAttributes(this.drawingImage, [['href', this.drawingImgUrl]]);\r\n this.moveVisual({ x: this.left, y: this.top });\r\n }\r\n\r\n /**\r\n * Sets marker drawing color.\r\n * @param color - new color.\r\n */\r\n protected setColor(color: string): void {\r\n this.color = color;\r\n this.colorChanged(color);\r\n }\r\n\r\n /**\r\n * Sets line width.\r\n * @param width - new line width\r\n */\r\n protected setLineWidth(width: number): void {\r\n this.lineWidth = width;\r\n }\r\n\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n if (this.state === 'new' || this.state === 'creating') {\r\n return [this.colorPanel, this.lineWidthPanel];\r\n } else {\r\n return [];\r\n }\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): FreehandMarkerState {\r\n const result: FreehandMarkerState = Object.assign({\r\n drawingImgUrl: this.drawingImgUrl\r\n }, super.getState());\r\n result.typeName = FreehandMarker.typeName;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n * \r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n this.createVisual();\r\n super.restoreState(state);\r\n this.drawingImgUrl = (state as FreehandMarkerState).drawingImgUrl;\r\n this.setDrawingImage();\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n * \r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n public scale(scaleX: number, scaleY: number): void {\r\n super.scale(scaleX, scaleY);\r\n\r\n this.setDrawingImage();\r\n }\r\n\r\n}\r\n","import { ToolboxPanel } from '../ToolboxPanel';\r\nimport Icon from './arrow-type-panel-icon.svg';\r\n\r\n/**\r\n * Represents available arrow types.\r\n *\r\n * - `both` - arrow tips on both sides.\r\n * - `start` - arrow tip on the starting point of line.\r\n * - `end` - arrow tip on the ending point of line.\r\n * - `none` - no arrow tips.\r\n */\r\nexport type ArrowType = 'both' | 'start' | 'end' | 'none';\r\n/**\r\n * Handler for arrow type change event.\r\n */\r\nexport type ArrowTypeChangeHandler = (newType: ArrowType) => void;\r\n\r\n/**\r\n * Arrow type selection panel.\r\n */\r\nexport class ArrowTypePanel extends ToolboxPanel {\r\n private currentType?: ArrowType;\r\n\r\n private typeBoxes: HTMLDivElement[] = [];\r\n\r\n /**\r\n * Event handler for the arrow type change event.\r\n */\r\n public onArrowTypeChanged?: ArrowTypeChangeHandler;\r\n\r\n /**\r\n * Creates an ArrowTypePanel.\r\n * @param title - panel title.\r\n * @param currentType - currently set arrow type.\r\n * @param icon - panel button icon (SVG image markup).\r\n */\r\n constructor(\r\n title: string,\r\n currentType?: ArrowType,\r\n icon?: string\r\n ) {\r\n super(title, icon ? icon : Icon);\r\n this.currentType = currentType;\r\n\r\n this.setCurrentType = this.setCurrentType.bind(this);\r\n }\r\n\r\n /**\r\n * Returns panel UI.\r\n */\r\n public getUi(): HTMLDivElement {\r\n const panelDiv = document.createElement('div');\r\n panelDiv.style.display = 'flex';\r\n panelDiv.style.overflow = 'hidden';\r\n panelDiv.style.flexGrow = '2';\r\n for (let ti = 0; ti < 4; ti++) {\r\n let arrowType: ArrowType = 'both';\r\n switch (ti) {\r\n case 0:\r\n arrowType = 'both';\r\n break;\r\n case 1:\r\n arrowType = 'start';\r\n break;\r\n case 2:\r\n arrowType = 'end';\r\n break;\r\n case 3:\r\n arrowType = 'none';\r\n break;\r\n }\r\n const typeBoxContainer = document.createElement('div');\r\n typeBoxContainer.style.display = 'flex';\r\n typeBoxContainer.style.flexGrow = '2';\r\n typeBoxContainer.style.alignItems = 'center';\r\n typeBoxContainer.style.justifyContent = 'space-between';\r\n typeBoxContainer.style.padding = '5px';\r\n typeBoxContainer.style.borderWidth = '2px';\r\n typeBoxContainer.style.borderStyle = 'solid';\r\n typeBoxContainer.style.borderColor =\r\n arrowType === this.currentType\r\n ? this.uiStyleSettings.toolboxAccentColor\r\n : 'transparent';\r\n\r\n typeBoxContainer.addEventListener('click', () => {\r\n this.setCurrentType(arrowType, typeBoxContainer);\r\n });\r\n panelDiv.appendChild(typeBoxContainer);\r\n\r\n if (arrowType === 'both' || arrowType === 'start') {\r\n const leftTip = document.createElement('div');\r\n leftTip.style.display = 'flex';\r\n leftTip.style.alignItems = 'center';\r\n leftTip.style.minHeight = '20px';\r\n leftTip.innerHTML = `\r\n \r\n `;\r\n leftTip.style.marginLeft = '5px';\r\n typeBoxContainer.appendChild(leftTip);\r\n }\r\n\r\n const lineBox = document.createElement('div');\r\n lineBox.style.display = 'flex';\r\n lineBox.style.alignItems = 'center';\r\n lineBox.style.minHeight = '20px';\r\n lineBox.style.flexGrow = '2';\r\n\r\n const hr = document.createElement('hr');\r\n hr.style.minWidth = '20px';\r\n hr.style.border = '0px';\r\n hr.style.borderTop = `3px solid ${\r\n this.uiStyleSettings !== undefined\r\n ? this.uiStyleSettings.toolboxColor\r\n : '#eeeeee'\r\n }`;\r\n hr.style.flexGrow = '2';\r\n lineBox.appendChild(hr);\r\n\r\n typeBoxContainer.appendChild(lineBox);\r\n\r\n if (arrowType === 'both' || arrowType === 'end') {\r\n const rightTip = document.createElement('div');\r\n rightTip.style.display = 'flex';\r\n rightTip.style.alignItems = 'center';\r\n rightTip.style.minHeight = '20px';\r\n rightTip.innerHTML = `\r\n \r\n `;\r\n rightTip.style.marginRight = '5px';\r\n typeBoxContainer.appendChild(rightTip);\r\n }\r\n\r\n this.typeBoxes.push(typeBoxContainer);\r\n }\r\n return panelDiv;\r\n }\r\n\r\n private setCurrentType(newType: ArrowType, target: HTMLDivElement) {\r\n this.currentType = newType;\r\n\r\n this.typeBoxes.forEach((box) => {\r\n box.style.borderColor =\r\n box === target\r\n ? this.uiStyleSettings !== undefined\r\n ? this.uiStyleSettings.toolboxAccentColor\r\n : '#3080c3'\r\n : 'transparent';\r\n });\r\n\r\n if (this.onArrowTypeChanged) {\r\n this.onArrowTypeChanged(this.currentType);\r\n }\r\n }\r\n}\r\n","import { IPoint } from '../../core/IPoint';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { Settings } from '../../core/Settings';\r\nimport Icon from './arrow-marker-icon.svg';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { LineMarker } from '../line-marker/LineMarker';\r\nimport { ArrowType, ArrowTypePanel } from '../../ui/toolbox-panels/ArrowTypePanel';\r\nimport { ArrowMarkerState } from './ArrowMarkerState';\r\nimport { MarkerBaseState } from '../../core/MarkerBaseState';\r\n\r\n/**\r\n * Represents an arrow marker.\r\n */\r\nexport class ArrowMarker extends LineMarker {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'ArrowMarker';\r\n\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Arrow marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n private arrow1: SVGPolygonElement;\r\n private arrow2: SVGPolygonElement;\r\n\r\n private arrowType: ArrowType = 'end';\r\n\r\n private arrowBaseHeight = 10;\r\n private arrowBaseWidth = 10;\r\n\r\n /**\r\n * Toolbox panel for arrow type selection.\r\n */\r\n protected arrowTypePanel: ArrowTypePanel;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.getArrowPoints = this.getArrowPoints.bind(this);\r\n this.setArrowType = this.setArrowType.bind(this);\r\n\r\n this.arrowTypePanel = new ArrowTypePanel('Arrow type', 'end');\r\n this.arrowTypePanel.onArrowTypeChanged = this.setArrowType;\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (\r\n super.ownsTarget(el) ||\r\n el === this.arrow1 || el === this.arrow2\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private getArrowPoints(offsetX: number, offsetY: number): string {\r\n const width = this.arrowBaseWidth + this.strokeWidth * 2;\r\n const height = this.arrowBaseHeight + this.strokeWidth * 2;\r\n return `${offsetX - width / 2},${\r\n offsetY + height / 2\r\n } ${offsetX},${offsetY - height / 2} ${\r\n offsetX + width / 2},${offsetY + height / 2}`;\r\n }\r\n\r\n private createTips() {\r\n this.arrow1 = SvgHelper.createPolygon(this.getArrowPoints(this.x1, this.y1), [['fill', this.strokeColor]]);\r\n this.arrow1.transform.baseVal.appendItem(SvgHelper.createTransform());\r\n this.visual.appendChild(this.arrow1);\r\n\r\n this.arrow2 = SvgHelper.createPolygon(this.getArrowPoints(this.x2, this.y2), [['fill', this.strokeColor]]);\r\n this.arrow2.transform.baseVal.appendItem(SvgHelper.createTransform());\r\n this.visual.appendChild(this.arrow2);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n if (this.state === 'creating') {\r\n this.createTips();\r\n }\r\n }\r\n\r\n /**\r\n * Adjusts marker visual after manipulation.\r\n */\r\n protected adjustVisual(): void {\r\n super.adjustVisual();\r\n\r\n if (this.arrow1 && this.arrow2) {\r\n this.arrow1.style.display = (this.arrowType === 'both' || this.arrowType === 'start') ? '' : 'none';\r\n this.arrow2.style.display = (this.arrowType === 'both' || this.arrowType === 'end') ? '' : 'none';\r\n\r\n SvgHelper.setAttributes(this.arrow1, [\r\n ['points', this.getArrowPoints(this.x1, this.y1)],\r\n ['fill', this.strokeColor]\r\n ]);\r\n SvgHelper.setAttributes(this.arrow2, [\r\n ['points', this.getArrowPoints(this.x2, this.y2)],\r\n ['fill', this.strokeColor]\r\n ]);\r\n\r\n let lineAngle1 = 0;\r\n if (Math.abs(this.x1 - this.x2) > 0.1) {\r\n lineAngle1 =\r\n (Math.atan((this.y2 - this.y1) / (this.x2 - this.x1)) * 180) / Math.PI + 90 * Math.sign(this.x1 - this.x2);\r\n }\r\n const a1transform = this.arrow1.transform.baseVal.getItem(0);\r\n a1transform.setRotate(lineAngle1, this.x1, this.y1);\r\n this.arrow1.transform.baseVal.replaceItem(a1transform, 0);\r\n\r\n const a2transform = this.arrow2.transform.baseVal.getItem(0);\r\n a2transform.setRotate(lineAngle1 + 180, this.x2, this.y2);\r\n this.arrow2.transform.baseVal.replaceItem(a2transform, 0);\r\n }\r\n }\r\n\r\n private setArrowType(arrowType: ArrowType) {\r\n this.arrowType = arrowType;\r\n this.adjustVisual();\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.strokePanel, this.strokeWidthPanel, this.strokeStylePanel, this.arrowTypePanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): ArrowMarkerState {\r\n const result: ArrowMarkerState = Object.assign({\r\n arrowType: this.arrowType\r\n }, super.getState());\r\n result.typeName = ArrowMarker.typeName;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n * \r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n super.restoreState(state);\r\n\r\n const amState = state as ArrowMarkerState;\r\n this.arrowType = amState.arrowType;\r\n\r\n this.createTips();\r\n this.adjustVisual();\r\n }\r\n\r\n}\r\n","import Icon from './cover-marker-icon.svg';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { Settings } from '../../core/Settings';\r\nimport { RectangleMarker } from '../RectangleMarker';\r\nimport { RectangleMarkerState } from '../RectangleMarkerState';\r\n\r\nexport class CoverMarker extends RectangleMarker {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'CoverMarker';\r\n\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Cover marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n /**\r\n * Color picker panel for the background color.\r\n */\r\n protected fillPanel: ColorPickerPanel;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.fillColor = settings.defaultFillColor;\r\n this.strokeWidth = 0;\r\n\r\n this.fillPanel = new ColorPickerPanel(\r\n 'Color',\r\n settings.defaultColorSet,\r\n settings.defaultFillColor\r\n );\r\n this.fillPanel.onColorChanged = this.setFillColor;\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.fillPanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): RectangleMarkerState {\r\n const result = super.getState();\r\n result.typeName = CoverMarker.typeName;\r\n return result;\r\n }\r\n}\r\n","import { ToolboxPanel } from '../ToolboxPanel';\r\nimport Icon from './opacity-panel-icon.svg';\r\n\r\n/**\r\n * Opacity chage event handler type.\r\n */\r\nexport type OpacityChangeHandler = (newOpacity: number) => void;\r\n\r\n/**\r\n * Opacity panel.\r\n */\r\nexport class OpacityPanel extends ToolboxPanel {\r\n private opacities: number[] = [];\r\n private currentOpacity?: number;\r\n\r\n private opacityBoxes: HTMLDivElement[] = [];\r\n\r\n /**\r\n * Opacity change event handler.\r\n */\r\n public onOpacityChanged?: OpacityChangeHandler;\r\n\r\n /**\r\n * Creates an opacity panel.\r\n * @param title - panel title.\r\n * @param opacities - available opacities.\r\n * @param currentOpacity - current opacity.\r\n * @param icon - toolbox panel button (SVG image markup).\r\n */\r\n constructor(title: string, opacities: number[], currentOpacity?: number, icon?: string) {\r\n super(title, icon ? icon : Icon);\r\n this.opacities = opacities;\r\n this.currentOpacity = currentOpacity;\r\n\r\n this.setCurrentOpacity = this.setCurrentOpacity.bind(this);\r\n }\r\n\r\n /**\r\n * Returns panel UI.\r\n */\r\n public getUi(): HTMLDivElement {\r\n const panelDiv = document.createElement('div');\r\n panelDiv.style.display = 'flex';\r\n panelDiv.style.overflow = 'hidden';\r\n panelDiv.style.flexGrow = '2';\r\n panelDiv.style.justifyContent = 'space-between';\r\n this.opacities.forEach((opacity) => {\r\n const opacityBoxContainer = document.createElement('div');\r\n opacityBoxContainer.style.display = 'flex';\r\n //opacityBoxContainer.style.flexGrow = '2';\r\n opacityBoxContainer.style.alignItems = 'center';\r\n opacityBoxContainer.style.justifyContent = 'center';\r\n opacityBoxContainer.style.padding = '5px';\r\n opacityBoxContainer.style.borderWidth = '2px';\r\n opacityBoxContainer.style.borderStyle = 'solid';\r\n opacityBoxContainer.style.borderColor =\r\n opacity === this.currentOpacity ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n\r\n opacityBoxContainer.addEventListener('click', () => {\r\n this.setCurrentOpacity(opacity, opacityBoxContainer);\r\n })\r\n panelDiv.appendChild(opacityBoxContainer);\r\n\r\n const label = document.createElement('div');\r\n label.innerText = `${(opacity * 100)}%`;\r\n opacityBoxContainer.appendChild(label);\r\n\r\n this.opacityBoxes.push(opacityBoxContainer);\r\n });\r\n return panelDiv;\r\n }\r\n\r\n private setCurrentOpacity(newWidth: number, target: HTMLDivElement) {\r\n this.currentOpacity = newWidth;\r\n\r\n this.opacityBoxes.forEach(box => {\r\n box.style.borderColor = box === target ? this.uiStyleSettings.toolboxAccentColor : 'transparent';\r\n });\r\n\r\n if (this.onOpacityChanged) {\r\n this.onOpacityChanged(this.currentOpacity);\r\n }\r\n }\r\n}\r\n","import Icon from './highlight-marker-icon.svg';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { Settings } from '../../core/Settings';\r\nimport { CoverMarker } from '../cover-marker/CoverMarker';\r\nimport { OpacityPanel } from '../../ui/toolbox-panels/OpacityPanel';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { RectangleMarkerState } from '../RectangleMarkerState';\r\n\r\nexport class HighlightMarker extends CoverMarker {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'HighlightMarker';\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Highlight marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n protected opacityPanel: OpacityPanel;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.setOpacity = this.setOpacity.bind(this);\r\n\r\n this.fillColor = settings.defaultHighlightColor;\r\n this.strokeWidth = 0;\r\n this.opacity = settings.defaultHighlightOpacity;\r\n\r\n this.fillPanel = new ColorPickerPanel(\r\n 'Color',\r\n settings.defaultColorSet,\r\n this.fillColor\r\n );\r\n this.fillPanel.onColorChanged = this.setFillColor;\r\n\r\n this.opacityPanel = new OpacityPanel(\r\n 'Opacity',\r\n settings.defaultOpacitySteps,\r\n this.opacity\r\n );\r\n this.opacityPanel.onOpacityChanged = this.setOpacity;\r\n }\r\n\r\n /**\r\n * Sets marker's opacity (0..1).\r\n * @param opacity - new opacity value.\r\n */\r\n protected setOpacity(opacity: number): void {\r\n this.opacity = opacity;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['opacity', this.opacity.toString()]]);\r\n }\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.fillPanel, this.opacityPanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): RectangleMarkerState {\r\n const result = super.getState();\r\n result.typeName = HighlightMarker.typeName;\r\n return result;\r\n }\r\n}\r\n","import { IPoint } from '../../core/IPoint';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { Settings } from '../../core/Settings';\r\nimport Icon from './callout-marker-icon.svg';\r\nimport TextColorIcon from '../../ui/toolbox-panels/text-color-icon.svg';\r\nimport FillColorIcon from '../../ui/toolbox-panels/fill-color-icon.svg';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { FontFamilyPanel } from '../../ui/toolbox-panels/FontFamilyPanel';\r\nimport { TextMarker } from '../text-marker/TextMarker';\r\nimport { ResizeGrip } from '../ResizeGrip';\r\nimport { CalloutMarkerState } from './CalloutMarkerState';\r\nimport { MarkerBaseState } from '../../core/MarkerBaseState';\r\n\r\nexport class CalloutMarker extends TextMarker {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'CalloutMarker';\r\n\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Callout marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n private bgColor = 'transparent';\r\n /**\r\n * Color picker toolbox panel for the background (fill) color.\r\n */\r\n protected bgColorPanel: ColorPickerPanel;\r\n\r\n private tipPosition: IPoint = { x: 0, y: 0 };\r\n private tipBase1Position: IPoint = { x: 0, y: 0 };\r\n private tipBase2Position: IPoint = { x: 0, y: 0 };\r\n private tip: SVGPolygonElement;\r\n private tipGrip: ResizeGrip;\r\n private tipMoving = false;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(\r\n container: SVGGElement,\r\n overlayContainer: HTMLDivElement,\r\n settings: Settings\r\n ) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.color = settings.defaultStrokeColor;\r\n this.bgColor = settings.defaultFillColor;\r\n this.fontFamily = settings.defaultFontFamily;\r\n\r\n this.defaultSize = { x: 100, y: 30 };\r\n\r\n this.setBgColor = this.setBgColor.bind(this);\r\n this.getTipPoints = this.getTipPoints.bind(this);\r\n this.positionTip = this.positionTip.bind(this);\r\n this.setTipPoints = this.setTipPoints.bind(this);\r\n\r\n this.colorPanel = new ColorPickerPanel(\r\n 'Text color',\r\n settings.defaultColorSet,\r\n this.color,\r\n TextColorIcon\r\n );\r\n this.colorPanel.onColorChanged = this.setColor;\r\n\r\n this.bgColorPanel = new ColorPickerPanel(\r\n 'Fill color',\r\n settings.defaultColorSet,\r\n this.bgColor,\r\n FillColorIcon\r\n );\r\n this.bgColorPanel.onColorChanged = this.setBgColor;\r\n\r\n this.fontFamilyPanel = new FontFamilyPanel(\r\n 'Font',\r\n settings.defaultFontFamilies,\r\n settings.defaultFontFamily\r\n );\r\n this.fontFamilyPanel.onFontChanged = this.setFont;\r\n\r\n this.tipGrip = new ResizeGrip();\r\n this.tipGrip.visual.transform.baseVal.appendItem(\r\n SvgHelper.createTransform()\r\n );\r\n this.controlBox.appendChild(this.tipGrip.visual);\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n return (\r\n super.ownsTarget(el) || this.tipGrip.ownsTarget(el) || this.tip === el\r\n );\r\n }\r\n\r\n private createTip() {\r\n SvgHelper.setAttributes(this.bgRectangle, [\r\n ['fill', this.bgColor],\r\n ['rx', '10px'],\r\n ]);\r\n\r\n this.tip = SvgHelper.createPolygon(this.getTipPoints(), [\r\n ['fill', this.bgColor],\r\n ]);\r\n this.visual.appendChild(this.tip);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n if (this.state === 'new') {\r\n super.pointerDown(point, target);\r\n }\r\n\r\n if (this.state === 'creating') {\r\n this.createTip();\r\n } else if (this.tipGrip.ownsTarget(target)) {\r\n this.manipulationStartLeft = this.left;\r\n this.manipulationStartTop = this.top;\r\n this.tipMoving = true;\r\n } else {\r\n super.pointerDown(point, target);\r\n }\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) up event.\r\n * \r\n * @param point - event coordinates.\r\n */\r\n public pointerUp(point: IPoint): void {\r\n if (this.tipMoving) {\r\n this.tipMoving = false;\r\n this.isMoved = true;\r\n super.pointerUp(point);\r\n } else {\r\n const isCreating = this.state === 'creating';\r\n super.pointerUp(point);\r\n this.setTipPoints(isCreating);\r\n this.positionTip();\r\n }\r\n }\r\n\r\n /**\r\n * Handles marker manipulation (move, resize, rotate, etc.).\r\n * \r\n * @param point - event coordinates.\r\n */\r\n public manipulate(point: IPoint): void {\r\n if (this.tipMoving) {\r\n const rotatedPoint = this.unrotatePoint(point);\r\n this.tipPosition = {\r\n x: rotatedPoint.x - this.manipulationStartLeft,\r\n y: rotatedPoint.y - this.manipulationStartTop,\r\n };\r\n this.positionTip();\r\n } else {\r\n super.manipulate(point);\r\n }\r\n }\r\n\r\n /**\r\n * Sets marker's background/fill color.\r\n * @param color - new background color.\r\n */\r\n protected setBgColor(color: string): void {\r\n if (this.bgRectangle && this.tip) {\r\n SvgHelper.setAttributes(this.bgRectangle, [['fill', color]]);\r\n SvgHelper.setAttributes(this.tip, [['fill', color]]);\r\n }\r\n this.bgColor = color;\r\n this.fillColorChanged(color);\r\n }\r\n\r\n private getTipPoints(): string {\r\n this.setTipPoints(this.state === 'creating');\r\n return `${this.tipBase1Position.x},${this.tipBase1Position.y\r\n } ${this.tipBase2Position.x},${this.tipBase2Position.y\r\n } ${this.tipPosition.x},${this.tipPosition.y}`;\r\n }\r\n\r\n private setTipPoints(isCreating = false) {\r\n let offset = Math.min(this.height / 2, 15);\r\n let baseWidth = this.height / 5;\r\n if (isCreating) {\r\n this.tipPosition = { x: offset + baseWidth / 2, y: this.height + 20 };\r\n }\r\n\r\n const cornerAngle = Math.atan((this.height / 2) / (this.width / 2));\r\n if (this.tipPosition.x < this.width / 2 && this.tipPosition.y < this.height / 2) {\r\n // top left\r\n const tipAngle = Math.atan((this.height / 2 - this.tipPosition.y) / (this.width / 2 - this.tipPosition.x));\r\n if (cornerAngle < tipAngle) {\r\n baseWidth = this.width / 5;\r\n offset = Math.min(this.width / 2, 15);\r\n this.tipBase1Position = { x: offset, y: 0 };\r\n this.tipBase2Position = { x: offset + baseWidth, y: 0 };\r\n } else {\r\n this.tipBase1Position = { x: 0, y: offset };\r\n this.tipBase2Position = { x: 0, y: offset + baseWidth };\r\n }\r\n } else if (this.tipPosition.x >= this.width / 2 && this.tipPosition.y < this.height / 2) {\r\n // top right\r\n const tipAngle = Math.atan((this.height / 2 - this.tipPosition.y) / (this.tipPosition.x - this.width / 2));\r\n if (cornerAngle < tipAngle) {\r\n baseWidth = this.width / 5;\r\n offset = Math.min(this.width / 2, 15);\r\n this.tipBase1Position = { x: this.width - offset - baseWidth, y: 0 };\r\n this.tipBase2Position = { x: this.width - offset, y: 0 };\r\n } else {\r\n this.tipBase1Position = { x: this.width, y: offset };\r\n this.tipBase2Position = { x: this.width, y: offset + baseWidth };\r\n }\r\n } else if (this.tipPosition.x >= this.width / 2 && this.tipPosition.y >= this.height / 2) {\r\n // bottom right\r\n const tipAngle = Math.atan((this.tipPosition.y - this.height / 2) / (this.tipPosition.x - this.width / 2));\r\n if (cornerAngle < tipAngle) {\r\n baseWidth = this.width / 5;\r\n offset = Math.min(this.width / 2, 15);\r\n this.tipBase1Position = { x: this.width - offset - baseWidth, y: this.height };\r\n this.tipBase2Position = { x: this.width - offset, y: this.height };\r\n } else {\r\n this.tipBase1Position = { x: this.width, y: this.height - offset - baseWidth };\r\n this.tipBase2Position = { x: this.width, y: this.height - offset };\r\n }\r\n } else {\r\n // bottom left\r\n const tipAngle = Math.atan((this.tipPosition.y - this.height / 2) / (this.width / 2 - this.tipPosition.x));\r\n if (cornerAngle < tipAngle) {\r\n baseWidth = this.width / 5;\r\n offset = Math.min(this.width / 2, 15);\r\n this.tipBase1Position = { x: offset, y: this.height };\r\n this.tipBase2Position = { x: offset + baseWidth, y: this.height };\r\n } else {\r\n this.tipBase1Position = { x: 0, y: this.height - offset };\r\n this.tipBase2Position = { x: 0, y: this.height - offset - baseWidth };\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Resize marker based on current pointer coordinates and context.\r\n * @param point \r\n */\r\n protected resize(point: IPoint): void {\r\n super.resize(point);\r\n this.positionTip();\r\n }\r\n\r\n private positionTip() {\r\n SvgHelper.setAttributes(this.tip, [['points', this.getTipPoints()]]);\r\n const translate = this.tipGrip.visual.transform.baseVal.getItem(0);\r\n translate.setTranslate(this.tipPosition.x, this.tipPosition.y);\r\n this.tipGrip.visual.transform.baseVal.replaceItem(translate, 0);\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.colorPanel, this.bgColorPanel, this.fontFamilyPanel];\r\n }\r\n\r\n /**\r\n * Selects this marker and displays appropriate selected marker UI.\r\n */\r\n public select(): void {\r\n this.positionTip();\r\n super.select();\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): CalloutMarkerState {\r\n const result: CalloutMarkerState = Object.assign({\r\n bgColor: this.bgColor,\r\n tipPosition: this.tipPosition\r\n }, super.getState());\r\n result.typeName = CalloutMarker.typeName;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n * \r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n const calloutState = state as CalloutMarkerState;\r\n this.bgColor = calloutState.bgColor;\r\n this.tipPosition = calloutState.tipPosition;\r\n\r\n super.restoreState(state);\r\n this.createTip();\r\n this.setTipPoints();\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n * \r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n public scale(scaleX: number, scaleY: number): void {\r\n super.scale(scaleX, scaleY);\r\n\r\n this.tipPosition = {x: this.tipPosition.x * scaleX, y: this.tipPosition.y * scaleY};\r\n\r\n this.positionTip();\r\n }\r\n}\r\n","import Icon from './ellipse-marker-icon.svg';\r\nimport { IPoint } from '../../core/IPoint';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { RectangularBoxMarkerBase } from '../RectangularBoxMarkerBase';\r\nimport { Settings } from '../../core/Settings';\r\nimport { RectangleMarkerState } from '../RectangleMarkerState';\r\nimport { MarkerBaseState } from '../../core/MarkerBaseState';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { LineWidthPanel } from '../../ui/toolbox-panels/LineWidthPanel';\r\nimport { LineStylePanel } from '../../ui/toolbox-panels/LineStylePanel';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport FillColorIcon from '../../ui/toolbox-panels/fill-color-icon.svg';\r\nimport { OpacityPanel } from '../../ui/toolbox-panels/OpacityPanel';\r\n\r\nexport class EllipseMarker extends RectangularBoxMarkerBase {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'EllipseMarker';\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Ellipse marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n /**\r\n * Ellipse fill color.\r\n */\r\n protected fillColor = 'transparent';\r\n /**\r\n * Ellipse border color.\r\n */\r\n protected strokeColor = 'transparent';\r\n /**\r\n * Ellipse border line width.\r\n */\r\n protected strokeWidth = 0;\r\n /**\r\n * Ellipse border dash array.\r\n */\r\n protected strokeDasharray = '';\r\n /**\r\n * Ellipse opacity (0..1).\r\n */\r\n protected opacity = 1;\r\n\r\n protected strokePanel: ColorPickerPanel;\r\n protected fillPanel: ColorPickerPanel;\r\n protected strokeWidthPanel: LineWidthPanel;\r\n protected strokeStylePanel: LineStylePanel;\r\n protected opacityPanel: OpacityPanel;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.strokeColor = settings.defaultColor;\r\n this.strokeWidth = settings.defaultStrokeWidth;\r\n this.strokeDasharray = settings.defaultStrokeDasharray;\r\n this.fillColor = settings.defaultFillColor;\r\n\r\n this.setStrokeColor = this.setStrokeColor.bind(this);\r\n this.setFillColor = this.setFillColor.bind(this);\r\n this.setStrokeWidth = this.setStrokeWidth.bind(this);\r\n this.setStrokeDasharray = this.setStrokeDasharray.bind(this);\r\n this.setOpacity = this.setOpacity.bind(this);\r\n this.createVisual = this.createVisual.bind(this);\r\n\r\n this.strokePanel = new ColorPickerPanel(\r\n 'Line color',\r\n [...settings.defaultColorSet, 'transparent'],\r\n settings.defaultColor\r\n );\r\n this.strokePanel.onColorChanged = this.setStrokeColor;\r\n\r\n this.fillPanel = new ColorPickerPanel(\r\n 'Fill color',\r\n [...settings.defaultColorSet, 'transparent'],\r\n this.fillColor,\r\n FillColorIcon\r\n );\r\n this.fillPanel.onColorChanged = this.setFillColor;\r\n\r\n this.strokeWidthPanel = new LineWidthPanel(\r\n 'Line width',\r\n settings.defaultStrokeWidths,\r\n settings.defaultStrokeWidth\r\n );\r\n this.strokeWidthPanel.onWidthChanged = this.setStrokeWidth;\r\n\r\n this.strokeStylePanel = new LineStylePanel(\r\n 'Line style',\r\n settings.defaultStrokeDasharrays,\r\n settings.defaultStrokeDasharray\r\n );\r\n this.strokeStylePanel.onStyleChanged = this.setStrokeDasharray;\r\n\r\n this.opacityPanel = new OpacityPanel(\r\n 'Opacity',\r\n settings.defaultOpacitySteps,\r\n this.opacity\r\n );\r\n this.opacityPanel.onOpacityChanged = this.setOpacity;\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (super.ownsTarget(el) || el === this.visual) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Creates marker visual.\r\n */\r\n protected createVisual(): void {\r\n this.visual = SvgHelper.createEllipse(this.width / 2, this.height / 2, [\r\n ['fill', this.fillColor],\r\n ['stroke', this.strokeColor],\r\n ['stroke-width', this.strokeWidth.toString()],\r\n ['stroke-dasharray', this.strokeDasharray],\r\n ['opacity', this.opacity.toString()]\r\n ]);\r\n this.addMarkerVisualToContainer(this.visual);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n if (this.state === 'new') {\r\n this.createVisual();\r\n\r\n this.moveVisual(point);\r\n\r\n this._state = 'creating';\r\n }\r\n }\r\n\r\n /**\r\n * Handles marker manipulation (move, resize, rotate, etc.).\r\n * \r\n * @param point - event coordinates.\r\n */\r\n public manipulate(point: IPoint): void {\r\n super.manipulate(point);\r\n }\r\n\r\n /**\r\n * Resize marker based on current pointer coordinates and context.\r\n * @param point \r\n */\r\n protected resize(point: IPoint): void {\r\n super.resize(point);\r\n this.setSize();\r\n }\r\n\r\n /**\r\n * Sets marker's visual size after manipulation.\r\n */\r\n protected setSize(): void {\r\n super.setSize();\r\n SvgHelper.setAttributes(this.visual, [\r\n ['cx', (this.width / 2).toString()],\r\n ['cy', (this.height / 2).toString()],\r\n ['rx', (this.width / 2).toString()],\r\n ['ry', (this.height / 2).toString()],\r\n ]);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) up event.\r\n * \r\n * @param point - event coordinates.\r\n */\r\n public pointerUp(point: IPoint): void {\r\n super.pointerUp(point);\r\n this.setSize();\r\n }\r\n\r\n /**\r\n * Sets marker's line color.\r\n * @param color - new line color.\r\n */\r\n protected setStrokeColor(color: string): void {\r\n this.strokeColor = color;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['stroke', this.strokeColor]]);\r\n }\r\n this.colorChanged(color);\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets marker's fill (background) color.\r\n * @param color - new fill color.\r\n */\r\n protected setFillColor(color: string): void {\r\n this.fillColor = color;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['fill', this.fillColor]]);\r\n }\r\n this.fillColorChanged(color);\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets marker's line width.\r\n * @param width - new line width\r\n */\r\n protected setStrokeWidth(width: number): void {\r\n this.strokeWidth = width;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['stroke-width', this.strokeWidth.toString()]]);\r\n }\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets marker's border dash array.\r\n * @param dashes - new dash array.\r\n */\r\n protected setStrokeDasharray(dashes: string): void {\r\n this.strokeDasharray = dashes;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['stroke-dasharray', this.strokeDasharray]]);\r\n }\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets marker's opacity.\r\n * @param opacity - new opacity value (0..1).\r\n */\r\n protected setOpacity(opacity: number): void {\r\n this.opacity = opacity;\r\n if (this.visual) {\r\n SvgHelper.setAttributes(this.visual, [['opacity', this.opacity.toString()]]);\r\n }\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.strokePanel, this.fillPanel, this.strokeWidthPanel, this.strokeStylePanel, this.opacityPanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): RectangleMarkerState {\r\n const result: RectangleMarkerState = Object.assign({\r\n fillColor: this.fillColor,\r\n strokeColor: this.strokeColor,\r\n strokeWidth: this.strokeWidth,\r\n strokeDasharray: this.strokeDasharray,\r\n opacity: this.opacity\r\n }, super.getState());\r\n result.typeName = EllipseMarker.typeName;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n * \r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n const rectState = state as RectangleMarkerState;\r\n this.fillColor = rectState.fillColor;\r\n this.strokeColor = rectState.strokeColor;\r\n this.strokeWidth = rectState.strokeWidth;\r\n this.strokeDasharray = rectState.strokeDasharray;\r\n this.opacity = rectState.opacity;\r\n\r\n this.createVisual();\r\n super.restoreState(state);\r\n this.setSize();\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n * \r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n public scale(scaleX: number, scaleY: number): void {\r\n super.scale(scaleX, scaleY);\r\n\r\n this.setSize();\r\n }\r\n}\r\n","import { IPoint } from '../../core/IPoint';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { Settings } from '../../core/Settings';\r\nimport Icon from './measurement-marker-icon.svg';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { LineMarker } from '../line-marker/LineMarker';\r\nimport { MarkerBaseState } from '../../core/MarkerBaseState';\r\nimport { LineMarkerState } from '../line-marker/LineMarkerState';\r\n\r\nexport class MeasurementMarker extends LineMarker {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'MeasurementMarker';\r\n\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Measurement marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n private tip1: SVGLineElement;\r\n private tip2: SVGLineElement;\r\n\r\n private get tipLength(): number {\r\n return 10 + this.strokeWidth * 3;\r\n }\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (\r\n super.ownsTarget(el) ||\r\n el === this.tip1 || el === this.tip2\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private createTips() {\r\n this.tip1 = SvgHelper.createLine(\r\n this.x1 - this.tipLength / 2, \r\n this.y1, \r\n this.x1 + this.tipLength / 2, \r\n this.y1, \r\n [\r\n ['stroke', this.strokeColor],\r\n ['stroke-width', this.strokeWidth.toString()]\r\n ]);\r\n this.tip1.transform.baseVal.appendItem(SvgHelper.createTransform());\r\n this.visual.appendChild(this.tip1);\r\n\r\n this.tip2 = SvgHelper.createLine(\r\n this.x2 - this.tipLength / 2, \r\n this.y2, \r\n this.x2 + this.tipLength / 2, \r\n this.y2, \r\n [\r\n ['stroke', this.strokeColor],\r\n ['stroke-width', this.strokeWidth.toString()]\r\n ]);\r\n this.tip2.transform.baseVal.appendItem(SvgHelper.createTransform());\r\n this.visual.appendChild(this.tip2);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n if (this.state === 'creating') {\r\n this.createTips();\r\n }\r\n }\r\n\r\n /**\r\n * Adjusts marker visual after manipulation.\r\n */\r\n protected adjustVisual(): void {\r\n super.adjustVisual();\r\n\r\n if (this.tip1 && this.tip2) {\r\n\r\n SvgHelper.setAttributes(this.tip1,[\r\n ['x1', (this.x1 - this.tipLength / 2).toString()], \r\n ['y1', this.y1.toString()], \r\n ['x2', (this.x1 + this.tipLength / 2).toString()], \r\n ['y2', this.y1.toString()], \r\n ['stroke', this.strokeColor],\r\n ['stroke-width', this.strokeWidth.toString()]\r\n ]);\r\n SvgHelper.setAttributes(this.tip2,[\r\n ['x1', (this.x2 - this.tipLength / 2).toString()], \r\n ['y1', this.y2.toString()], \r\n ['x2', (this.x2 + this.tipLength / 2).toString()], \r\n ['y2', this.y2.toString()], \r\n ['stroke', this.strokeColor],\r\n ['stroke-width', this.strokeWidth.toString()]\r\n ]);\r\n\r\n if (Math.abs(this.x1 - this.x2) > 0.1) {\r\n const lineAngle1 =\r\n (Math.atan((this.y2 - this.y1) / (this.x2 - this.x1)) * 180) / Math.PI + 90 * Math.sign(this.x1 - this.x2);\r\n\r\n const a1transform = this.tip1.transform.baseVal.getItem(0);\r\n a1transform.setRotate(lineAngle1, this.x1, this.y1);\r\n this.tip1.transform.baseVal.replaceItem(a1transform, 0);\r\n\r\n const a2transform = this.tip2.transform.baseVal.getItem(0);\r\n a2transform.setRotate(lineAngle1 + 180, this.x2, this.y2);\r\n this.tip2.transform.baseVal.replaceItem(a2transform, 0);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.strokePanel, this.strokeWidthPanel, this.strokeStylePanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): LineMarkerState {\r\n const result =super.getState();\r\n result.typeName = MeasurementMarker.typeName;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n * \r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n super.restoreState(state);\r\n\r\n this.createTips();\r\n this.adjustVisual();\r\n }\r\n}\r\n","import Icon from './ellipse-frame-marker-icon.svg';\r\nimport { Settings } from '../../core/Settings';\r\nimport { RectangleMarkerState } from '../RectangleMarkerState';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { EllipseMarker } from '../ellipse-marker/EllipseMarker';\r\n\r\nexport class EllipseFrameMarker extends EllipseMarker {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'EllipseFrameMarker';\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Ellipse frame marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n // reset colors so 'transparent' is excluded\r\n this.strokePanel.colors= settings.defaultColorSet;\r\n\r\n this.fillColor = 'transparent';\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.strokePanel, this.strokeWidthPanel, this.strokeStylePanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): RectangleMarkerState {\r\n const result = super.getState();\r\n result.typeName = EllipseFrameMarker.typeName;\r\n return result;\r\n }\r\n}\r\n","/**\r\n * Manages undo and redo stacks.\r\n */\r\nexport class UndoRedoManager {\r\n private undoStack: T[] = [];\r\n private redoStack: T[] = [];\r\n\r\n private lastRedoStep: T;\r\n\r\n /**\r\n * Returns true if there are items in the undo stack.\r\n */\r\n public get isUndoPossible(): boolean {\r\n return this.undoStack.length > 0;\r\n }\r\n\r\n /**\r\n * Returns true if there are items in the redo stack.\r\n */\r\n public get isRedoPossible(): boolean {\r\n return this.redoStack.length > 0;\r\n }\r\n\r\n /**\r\n * Returns the number of items in the undo stack\r\n *\r\n * @since 2.23.0\r\n */\r\n public get undoStepCount(): number {\r\n return this.undoStack.length;\r\n }\r\n\r\n /**\r\n * Returns the number of items in the redo stack\r\n *\r\n * @since 2.23.0\r\n */\r\n public get redoStepCount(): number {\r\n return this.redoStack.length;\r\n }\r\n\r\n /**\r\n * Adds a step to the undo stack.\r\n * @param stepData data representing a state.\r\n */\r\n public addUndoStep(stepData: T): void {\r\n if (\r\n this.undoStack.length === 0 ||\r\n JSON.stringify(this.undoStack[this.undoStack.length - 1]) !==\r\n JSON.stringify(stepData)\r\n ) {\r\n this.undoStack.push(stepData);\r\n if (JSON.stringify(this.lastRedoStep) !== JSON.stringify(stepData)) {\r\n this.redoStack.splice(0, this.redoStack.length);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Replaces the last undo step with step data provided\r\n * @param stepData data representing a state.\r\n */\r\n public replaceLastUndoStep(stepData: T): void {\r\n if (this.undoStack.length > 0) {\r\n this.undoStack[this.undoStack.length - 1] = stepData;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the last step in the undo log\r\n */\r\n public getLastUndoStep(): T | undefined {\r\n if (this.undoStack.length > 0) {\r\n return this.undoStack[this.undoStack.length - 1];\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Returns data for the previous step in the undo stack and adds last step to the redo stack.\r\n * @returns \r\n */\r\n public undo(): T | undefined {\r\n if (this.undoStack.length > 1) {\r\n const lastStep = this.undoStack.pop();\r\n if (lastStep !== undefined) {\r\n this.redoStack.push(lastStep);\r\n }\r\n return this.undoStack.length > 0 ? this.undoStack[this.undoStack.length - 1] : undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Returns most recent item in the redo stack.\r\n * @returns \r\n */\r\n public redo(): T | undefined {\r\n this.lastRedoStep = this.redoStack.pop();\r\n return this.lastRedoStep;\r\n }\r\n}\r\n","import { IPoint } from '../../core/IPoint';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { Settings } from '../../core/Settings';\r\nimport { LinearMarkerBase } from '../LinearMarkerBase';\r\nimport Icon from './curve-marker-icon.svg';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport { LineWidthPanel } from '../../ui/toolbox-panels/LineWidthPanel';\r\nimport { LineStylePanel } from '../../ui/toolbox-panels/LineStylePanel';\r\nimport { CurveMarkerState } from './CurveMarkerState';\r\nimport { MarkerBaseState } from '../../core/MarkerBaseState';\r\nimport { ResizeGrip } from '../ResizeGrip';\r\n\r\nexport class CurveMarker extends LinearMarkerBase {\r\n /**\r\n * String type name of the marker type. \r\n * \r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'CurveMarker';\r\n \r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Curve marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n /**\r\n * Invisible wider curve to make selection easier/possible.\r\n */\r\n protected selectorCurve: SVGPathElement;\r\n /**\r\n * Visible marker curve.\r\n */\r\n protected visibleCurve: SVGPathElement;\r\n\r\n /**\r\n * Line color.\r\n */\r\n protected strokeColor = 'transparent';\r\n /**\r\n * Line width.\r\n */\r\n protected strokeWidth = 0;\r\n /**\r\n * Line dash array.\r\n */\r\n protected strokeDasharray = '';\r\n\r\n /**\r\n * Color picker panel for line color.\r\n */\r\n protected strokePanel: ColorPickerPanel;\r\n /**\r\n * Line width toolbox panel.\r\n */\r\n protected strokeWidthPanel: LineWidthPanel;\r\n /**\r\n * Line dash array toolbox panel.\r\n */\r\n protected strokeStylePanel: LineStylePanel;\r\n\r\n private curveGrip: ResizeGrip;\r\n private curveX = 0;\r\n private curveY = 0;\r\n\r\n private manipulationStartCurveX = 0;\r\n private manipulationStartCurveY = 0;\r\n\r\n private curveControlLine1: SVGLineElement;\r\n private curveControlLine2: SVGLineElement;\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(container: SVGGElement, overlayContainer: HTMLDivElement, settings: Settings) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.setStrokeColor = this.setStrokeColor.bind(this);\r\n this.setStrokeWidth = this.setStrokeWidth.bind(this);\r\n this.setStrokeDasharray = this.setStrokeDasharray.bind(this);\r\n this.positionGrips = this.positionGrips.bind(this);\r\n this.addControlGrips = this.addControlGrips.bind(this);\r\n this.adjustVisual = this.adjustVisual.bind(this);\r\n this.setupControlBox = this.setupControlBox.bind(this);\r\n this.resize = this.resize.bind(this);\r\n\r\n this.strokeColor = settings.defaultColor;\r\n this.strokeWidth = settings.defaultStrokeWidth;\r\n this.strokeDasharray = settings.defaultStrokeDasharray;\r\n\r\n this.strokePanel = new ColorPickerPanel(\r\n 'Line color',\r\n settings.defaultColorSet,\r\n settings.defaultColor\r\n );\r\n this.strokePanel.onColorChanged = this.setStrokeColor;\r\n\r\n this.strokeWidthPanel = new LineWidthPanel(\r\n 'Line width',\r\n settings.defaultStrokeWidths,\r\n settings.defaultStrokeWidth\r\n );\r\n this.strokeWidthPanel.onWidthChanged = this.setStrokeWidth;\r\n\r\n this.strokeStylePanel = new LineStylePanel(\r\n 'Line style',\r\n settings.defaultStrokeDasharrays,\r\n settings.defaultStrokeDasharray\r\n );\r\n this.strokeStylePanel.onStyleChanged = this.setStrokeDasharray;\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n * \r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (\r\n super.ownsTarget(el) ||\r\n el === this.visual ||\r\n el === this.selectorCurve ||\r\n el === this.visibleCurve ||\r\n this.curveGrip.ownsTarget(el)\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n private getPathD(): string {\r\n const result = `M ${this.x1} ${this.y1} Q ${this.curveX} ${this.curveY}, ${this.x2} ${this.y2}`;\r\n return result;\r\n }\r\n\r\n private createVisual() {\r\n this.visual = SvgHelper.createGroup();\r\n this.selectorCurve = SvgHelper.createPath(\r\n this.getPathD(),\r\n [\r\n ['stroke', 'transparent'],\r\n ['stroke-width', (this.strokeWidth + 10).toString()],\r\n ['fill', 'transparent'],\r\n ]\r\n );\r\n this.visibleCurve = SvgHelper.createPath(\r\n this.getPathD(),\r\n [\r\n ['stroke', this.strokeColor],\r\n ['stroke-width', this.strokeWidth.toString()],\r\n ['fill', 'transparent'],\r\n ]\r\n );\r\n this.visual.appendChild(this.selectorCurve);\r\n this.visual.appendChild(this.visibleCurve);\r\n\r\n this.addMarkerVisualToContainer(this.visual);\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n * \r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n\r\n this.manipulationStartCurveX = this.curveX;\r\n this.manipulationStartCurveY = this.curveY;\r\n if (this.state === 'new') {\r\n this.curveX = point.x;\r\n this.curveY = point.y;\r\n }\r\n\r\n if (this.state === 'new') {\r\n this.createVisual();\r\n this.adjustVisual();\r\n\r\n this._state = 'creating';\r\n } else if (this.curveGrip.ownsTarget(target)) {\r\n this.activeGrip = this.curveGrip;\r\n this._state = 'resize';\r\n }\r\n }\r\n\r\n /**\r\n * Adjusts visual after manipulation.\r\n */\r\n protected adjustVisual(): void {\r\n if (this.selectorCurve && this.visibleCurve) {\r\n this.selectorCurve.setAttribute('d', this.getPathD());\r\n\r\n this.visibleCurve.setAttribute('d', this.getPathD());\r\n\r\n SvgHelper.setAttributes(this.visibleCurve, [['stroke', this.strokeColor]]);\r\n SvgHelper.setAttributes(this.visibleCurve, [['stroke-width', this.strokeWidth.toString()]]);\r\n SvgHelper.setAttributes(this.visibleCurve, [['stroke-dasharray', this.strokeDasharray.toString()]]);\r\n }\r\n }\r\n\r\n /**\r\n * Sets manipulation grips up.\r\n */\r\n protected setupControlBox(): void {\r\n super.setupControlBox();\r\n this.curveControlLine1 = SvgHelper.createLine(\r\n this.x1,\r\n this.y1,\r\n this.curveX,\r\n this.curveY,\r\n [\r\n ['stroke', 'black'],\r\n ['stroke-width', '1'],\r\n ['stroke-opacity', '0.5'],\r\n ['stroke-dasharray', '3, 2'],\r\n ]\r\n );\r\n this.curveControlLine2 = SvgHelper.createLine(\r\n this.x2,\r\n this.y2,\r\n this.curveX,\r\n this.curveY,\r\n [\r\n ['stroke', 'black'],\r\n ['stroke-width', '1'],\r\n ['stroke-opacity', '0.5'],\r\n ['stroke-dasharray', '3, 2'],\r\n ]\r\n );\r\n\r\n this.controlBox.insertBefore(this.curveControlLine1, this.controlBox.firstChild);\r\n this.controlBox.insertBefore(this.curveControlLine2, this.controlBox.firstChild);\r\n }\r\n\r\n /**\r\n * Add manipulation grips to the control box.\r\n */\r\n protected addControlGrips(): void {\r\n this.curveGrip = this.createGrip();\r\n this.curveX = 0;\r\n this.curveY = 0;\r\n super.addControlGrips();\r\n }\r\n\r\n /**\r\n * Positions manipulation grips.\r\n */\r\n protected positionGrips(): void {\r\n super.positionGrips();\r\n const gripSize = this.curveGrip.GRIP_SIZE;\r\n this.positionGrip(this.curveGrip.visual, this.curveX - gripSize / 2, this.curveY - gripSize / 2);\r\n\r\n if (this.curveControlLine1 && this.curveControlLine2) {\r\n this.curveControlLine1.setAttribute('x1', this.x1.toString());\r\n this.curveControlLine1.setAttribute('y1', this.y1.toString());\r\n this.curveControlLine1.setAttribute('x2', this.curveX.toString());\r\n this.curveControlLine1.setAttribute('y2', this.curveY.toString());\r\n\r\n this.curveControlLine2.setAttribute('x1', this.x2.toString());\r\n this.curveControlLine2.setAttribute('y1', this.y2.toString());\r\n this.curveControlLine2.setAttribute('x2', this.curveX.toString());\r\n this.curveControlLine2.setAttribute('y2', this.curveY.toString());\r\n }\r\n }\r\n\r\n /**\r\n * Moves or resizes the marker.\r\n * @param point event coordinates\r\n */\r\n public manipulate(point: IPoint): void {\r\n if (this.state === 'move') {\r\n this.curveX = this.manipulationStartCurveX + point.x - this.manipulationStartX;\r\n this.curveY = this.manipulationStartCurveY + point.y - this.manipulationStartY;\r\n }\r\n super.manipulate(point);\r\n }\r\n\r\n /**\r\n * Resizes the marker.\r\n * @param point event coordinates.\r\n */\r\n protected resize(point: IPoint): void {\r\n if (this.activeGrip === this.curveGrip) {\r\n this.curveX = point.x;\r\n this.curveY = point.y;\r\n }\r\n super.resize(point);\r\n if (this.state === 'creating') {\r\n this.curveX = this.x1 + (this.x2 - this.x1) / 2;\r\n this.curveY = this.y1 + (this.y2 - this.y1) / 2;\r\n }\r\n }\r\n\r\n /**\r\n * Sets line color.\r\n * @param color - new color.\r\n */\r\n protected setStrokeColor(color: string): void {\r\n this.strokeColor = color;\r\n this.adjustVisual();\r\n this.colorChanged(color);\r\n }\r\n /**\r\n * Sets line width.\r\n * @param width - new width.\r\n */\r\n protected setStrokeWidth(width: number): void {\r\n this.strokeWidth = width\r\n this.adjustVisual();\r\n }\r\n\r\n /**\r\n * Sets line dash array.\r\n * @param dashes - new dash array.\r\n */\r\n protected setStrokeDasharray(dashes: string): void {\r\n this.strokeDasharray = dashes;\r\n this.adjustVisual();\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n * \r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n public scale(scaleX: number, scaleY: number): void {\r\n this.curveX = this.curveX * scaleX;\r\n this.curveY = this.curveY * scaleY;\r\n super.scale(scaleX, scaleY);\r\n }\r\n\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [this.strokePanel, this.strokeWidthPanel, this.strokeStylePanel];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): CurveMarkerState {\r\n const result: CurveMarkerState = Object.assign({\r\n strokeColor: this.strokeColor,\r\n strokeWidth: this.strokeWidth,\r\n strokeDasharray: this.strokeDasharray,\r\n curveX: this.curveX,\r\n curveY: this.curveY\r\n }, super.getState());\r\n result.typeName = CurveMarker.typeName;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n * \r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n super.restoreState(state);\r\n\r\n const lmState = state as CurveMarkerState;\r\n this.strokeColor = lmState.strokeColor;\r\n this.strokeWidth = lmState.strokeWidth;\r\n this.strokeDasharray = lmState.strokeDasharray;\r\n this.curveX = lmState.curveX;\r\n this.curveY = lmState.curveY;\r\n\r\n this.createVisual();\r\n this.adjustVisual();\r\n }\r\n}\r\n","import Icon from './caption-frame-marker-icon.svg';\r\nimport { IPoint } from '../../core/IPoint';\r\nimport { SvgHelper } from '../../core/SvgHelper';\r\nimport { RectangularBoxMarkerBase } from '../RectangularBoxMarkerBase';\r\nimport { Settings } from '../../core/Settings';\r\nimport { MarkerBaseState } from '../../core/MarkerBaseState';\r\nimport { ColorPickerPanel } from '../../ui/toolbox-panels/ColorPickerPanel';\r\nimport { LineWidthPanel } from '../../ui/toolbox-panels/LineWidthPanel';\r\nimport { LineStylePanel } from '../../ui/toolbox-panels/LineStylePanel';\r\nimport { ToolboxPanel } from '../../ui/ToolboxPanel';\r\nimport FillColorIcon from '../../ui/toolbox-panels/fill-color-icon.svg';\r\nimport TextColorIcon from '../../ui/toolbox-panels/text-color-icon.svg';\r\nimport { FontFamilyPanel } from '../../ui/toolbox-panels/FontFamilyPanel';\r\nimport { CaptionFrameMarkerState } from './CaptionFrameMarkerState';\r\n\r\nexport class CaptionFrameMarker extends RectangularBoxMarkerBase {\r\n /**\r\n * String type name of the marker type.\r\n *\r\n * Used when adding {@link MarkerArea.availableMarkerTypes} via a string and to save and restore state.\r\n */\r\n public static typeName = 'CaptionFrameMarker';\r\n /**\r\n * Marker type title (display name) used for accessibility and other attributes.\r\n */\r\n public static title = 'Caption frame marker';\r\n /**\r\n * SVG icon markup displayed on toolbar buttons.\r\n */\r\n public static icon = Icon;\r\n\r\n /**\r\n * Caption background (fill) color.\r\n */\r\n protected fillColor = 'transparent';\r\n /**\r\n * Frame border color.\r\n */\r\n protected strokeColor = 'transparent';\r\n /**\r\n * Frame border line width.\r\n */\r\n protected strokeWidth = 0;\r\n /**\r\n * Frame border dash array.\r\n */\r\n protected strokeDasharray = '';\r\n /**\r\n * Caption font family.\r\n */\r\n protected fontFamily: string;\r\n /**\r\n * Caption text color.\r\n */\r\n protected textColor = 'transparent';\r\n /**\r\n * Caption font size.\r\n */\r\n protected fontSize = '1rem';\r\n\r\n /**\r\n * Frame stroke color toolbox panel.\r\n */\r\n protected strokePanel: ColorPickerPanel;\r\n /**\r\n * Caption background (fill) color toolbox panel.\r\n */\r\n protected fillPanel: ColorPickerPanel;\r\n /**\r\n * Frame stroke width toolbox panel.\r\n */\r\n protected strokeWidthPanel: LineWidthPanel;\r\n /**\r\n * Frame stroke style toolbox panel.\r\n */\r\n protected strokeStylePanel: LineStylePanel;\r\n /**\r\n * Text font family toolbox panel.\r\n */\r\n protected fontFamilyPanel: FontFamilyPanel;\r\n /**\r\n * Text color picker toolbox panel.\r\n */\r\n protected textColorPanel: ColorPickerPanel;\r\n /**\r\n * True if the marker has moved in the manipulation.\r\n */\r\n protected isMoved = false;\r\n private pointerDownPoint: IPoint;\r\n private pointerDownTimestamp: number;\r\n\r\n /**\r\n * Frame rectangle.\r\n */\r\n protected frame: SVGRectElement;\r\n /**\r\n * Caption background element.\r\n */\r\n protected captionBg: SVGRectElement;\r\n /**\r\n * Caption text element.\r\n */\r\n protected captionElement!: SVGTextElement;\r\n /**\r\n * Caption text.\r\n */\r\n protected captionText = 'Caption';\r\n\r\n /**\r\n * Creates a new marker.\r\n *\r\n * @param container - SVG container to hold marker's visual.\r\n * @param overlayContainer - overlay HTML container to hold additional overlay elements while editing.\r\n * @param settings - settings object containing default markers settings.\r\n */\r\n constructor(\r\n container: SVGGElement,\r\n overlayContainer: HTMLDivElement,\r\n settings: Settings\r\n ) {\r\n super(container, overlayContainer, settings);\r\n\r\n this.strokeColor = settings.defaultColor;\r\n this.strokeWidth = settings.defaultStrokeWidth;\r\n this.strokeDasharray = settings.defaultStrokeDasharray;\r\n this.fillColor = settings.defaultFillColor;\r\n this.textColor = settings.defaultStrokeColor;\r\n this.fontFamily = settings.defaultFontFamily;\r\n this.fontSize = settings.defaultCaptionFontSize;\r\n this.captionText = settings.defaultCaptionText;\r\n\r\n this.setStrokeColor = this.setStrokeColor.bind(this);\r\n this.setFillColor = this.setFillColor.bind(this);\r\n this.setStrokeWidth = this.setStrokeWidth.bind(this);\r\n this.setStrokeDasharray = this.setStrokeDasharray.bind(this);\r\n this.createVisual = this.createVisual.bind(this);\r\n this.sizeCaption = this.sizeCaption.bind(this);\r\n this.setCaptionText = this.setCaptionText.bind(this);\r\n this.showTextEditor = this.showTextEditor.bind(this);\r\n this.positionTextEditor = this.positionTextEditor.bind(this);\r\n this.finishTextEditing = this.finishTextEditing.bind(this);\r\n this.setFont = this.setFont.bind(this);\r\n this.setTextColor = this.setTextColor.bind(this);\r\n\r\n this.strokePanel = new ColorPickerPanel(\r\n 'Line color',\r\n [...settings.defaultColorSet, 'transparent'],\r\n this.strokeColor\r\n );\r\n this.strokePanel.onColorChanged = this.setStrokeColor;\r\n\r\n this.fillPanel = new ColorPickerPanel(\r\n 'Fill color',\r\n [...settings.defaultColorSet, 'transparent'],\r\n this.fillColor,\r\n FillColorIcon\r\n );\r\n this.fillPanel.onColorChanged = this.setFillColor;\r\n\r\n this.strokeWidthPanel = new LineWidthPanel(\r\n 'Line width',\r\n settings.defaultStrokeWidths,\r\n settings.defaultStrokeWidth\r\n );\r\n this.strokeWidthPanel.onWidthChanged = this.setStrokeWidth;\r\n\r\n this.strokeStylePanel = new LineStylePanel(\r\n 'Line style',\r\n settings.defaultStrokeDasharrays,\r\n settings.defaultStrokeDasharray\r\n );\r\n this.strokeStylePanel.onStyleChanged = this.setStrokeDasharray;\r\n\r\n this.fontFamilyPanel = new FontFamilyPanel(\r\n 'Font',\r\n settings.defaultFontFamilies,\r\n settings.defaultFontFamily\r\n );\r\n this.fontFamilyPanel.onFontChanged = this.setFont;\r\n\r\n this.textColorPanel = new ColorPickerPanel(\r\n 'Text color',\r\n settings.defaultColorSet,\r\n this.textColor,\r\n TextColorIcon\r\n );\r\n this.textColorPanel.onColorChanged = this.setTextColor;\r\n\r\n }\r\n\r\n /**\r\n * Returns true if passed SVG element belongs to the marker. False otherwise.\r\n *\r\n * @param el - target element.\r\n */\r\n public ownsTarget(el: EventTarget): boolean {\r\n if (\r\n super.ownsTarget(el) ||\r\n el === this.visual ||\r\n el === this.frame ||\r\n el === this.captionBg ||\r\n el === this.captionElement\r\n ) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Creates marker visual.\r\n */\r\n protected createVisual(): void {\r\n this.visual = SvgHelper.createGroup();\r\n this.addMarkerVisualToContainer(this.visual);\r\n\r\n this.captionBg = SvgHelper.createRect(1, 1, [['fill', this.fillColor]]);\r\n this.visual.appendChild(this.captionBg);\r\n\r\n this.captionElement = SvgHelper.createText([\r\n ['fill', this.textColor],\r\n ['font-family', this.fontFamily],\r\n ]);\r\n this.captionElement.style.fontSize = this.fontSize;\r\n this.captionElement.style.textAnchor = 'start';\r\n this.captionElement.style.dominantBaseline = 'text-before-edge';\r\n this.captionElement.textContent = this.captionText;\r\n this.visual.appendChild(this.captionElement);\r\n\r\n this.frame = SvgHelper.createRect(this.width, this.height, [\r\n ['fill', 'transparent'],\r\n ['stroke', this.strokeColor],\r\n ['stroke-width', this.strokeWidth.toString()],\r\n ['stroke-dasharray', this.strokeDasharray],\r\n ]);\r\n\r\n this.visual.appendChild(this.frame);\r\n this.sizeCaption();\r\n }\r\n\r\n /**\r\n * Sets caption text.\r\n * @param text - new caption text.\r\n */\r\n public setCaptionText(text: string): void {\r\n this.captionText = text;\r\n this.captionElement.textContent = this.captionText;\r\n this.sizeCaption();\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) down event.\r\n *\r\n * @param point - event coordinates.\r\n * @param target - direct event target element.\r\n */\r\n public pointerDown(point: IPoint, target?: EventTarget): void {\r\n super.pointerDown(point, target);\r\n\r\n this.isMoved = false;\r\n this.pointerDownPoint = point;\r\n this.pointerDownTimestamp = Date.now();\r\n\r\n if (this.state === 'new') {\r\n this.createVisual();\r\n\r\n this.moveVisual(point);\r\n\r\n this._state = 'creating';\r\n }\r\n }\r\n\r\n /**\r\n * Handles marker manipulation (move, resize, rotate, etc.).\r\n *\r\n * @param point - event coordinates.\r\n */\r\n public manipulate(point: IPoint): void {\r\n super.manipulate(point);\r\n if (this.pointerDownPoint !== undefined) {\r\n this.isMoved =\r\n Math.abs(point.x - this.pointerDownPoint.x) > 5 ||\r\n Math.abs(point.y - this.pointerDownPoint.y) > 5;\r\n }\r\n }\r\n\r\n /**\r\n * Resize marker based on current pointer coordinates and context.\r\n * @param point\r\n */\r\n protected resize(point: IPoint): void {\r\n super.resize(point);\r\n this.setSize();\r\n }\r\n\r\n private readonly PADDING = 5;\r\n private captionBoxWidth = 0;\r\n private captionBoxHeight = 0;\r\n /**\r\n * Adjusts caption size and location.\r\n */\r\n protected sizeCaption(): void {\r\n const textBBox = this.captionElement.getBBox();\r\n if (this.captionText.trim() !== '') {\r\n this.captionBoxWidth = textBBox.width + this.PADDING * 2;\r\n this.captionBoxHeight = textBBox.height + this.PADDING * 2;\r\n } else {\r\n this.captionBoxWidth = 0;\r\n this.captionBoxHeight = 0;\r\n }\r\n\r\n SvgHelper.setAttributes(this.captionBg, [\r\n ['width', this.captionBoxWidth.toString()],\r\n ['height', this.captionBoxHeight.toString()],\r\n [\r\n 'clip-path',\r\n `path('M0,0 H${this.width} V${this.height} H${-this.width} Z')`,\r\n ],\r\n ]);\r\n SvgHelper.setAttributes(this.captionElement, [\r\n ['x', this.PADDING.toString()],\r\n ['y', this.PADDING.toString()],\r\n [\r\n 'clip-path',\r\n `path('M0,0 H${this.width - this.PADDING} V${this.height} H${\r\n -this.width - this.PADDING\r\n } Z')`,\r\n ],\r\n ]);\r\n }\r\n\r\n private textEditDiv: HTMLDivElement;\r\n private textEditBox: HTMLInputElement;\r\n\r\n private showTextEditor() {\r\n this._state = 'edit';\r\n this.overlayContainer.innerHTML = '';\r\n\r\n this.textEditDiv = document.createElement('div');\r\n this.textEditDiv.style.flexGrow = '2';\r\n this.textEditDiv.style.alignItems = 'center';\r\n this.textEditDiv.style.justifyContent = 'center';\r\n this.textEditDiv.style.pointerEvents = 'auto';\r\n this.textEditDiv.style.overflow = 'hidden';\r\n\r\n this.textEditBox = document.createElement('input');\r\n this.textEditBox.style.position = 'absolute';\r\n this.textEditBox.style.width = `${this.width}px`;\r\n if (this.captionBoxHeight > 0) {\r\n this.textEditBox.style.height = `${this.captionBoxHeight}px`;\r\n }\r\n this.textEditBox.style.fontSize = this.fontSize;\r\n this.textEditBox.style.fontFamily = this.fontFamily;\r\n this.textEditBox.style.backgroundColor = this.fillColor;\r\n this.textEditBox.style.color = this.textColor;\r\n this.textEditBox.style.borderWidth = '0';\r\n this.textEditBox.setAttribute('value', this.captionText);\r\n this.textEditBox.select();\r\n\r\n this.textEditDiv.appendChild(this.textEditBox);\r\n this.overlayContainer.appendChild(this.textEditDiv);\r\n\r\n this.textEditBox.addEventListener('pointerup', (ev) => {\r\n ev.stopPropagation();\r\n });\r\n this.textEditBox.addEventListener('keypress', (ev) => {\r\n if (ev.key === 'Enter') {\r\n this.finishTextEditing(this.textEditBox.value);\r\n }\r\n });\r\n this.textEditBox.addEventListener('keyup', (ev) => {\r\n ev.cancelBubble = true;\r\n });\r\n this.textEditBox.addEventListener('blur', () => {\r\n this.finishTextEditing(this.textEditBox.value);\r\n });\r\n this.textEditDiv.addEventListener('pointerup', () => {\r\n this.finishTextEditing(this.textEditBox.value);\r\n });\r\n\r\n this.positionTextEditor();\r\n this.textEditBox.focus();\r\n }\r\n\r\n private positionTextEditor() {\r\n if (this.state === 'edit') {\r\n if (this.textEditBox === undefined) {\r\n this.showTextEditor();\r\n } else {\r\n this.textEditBox.style.left = `${this.left}px`;\r\n this.textEditBox.style.top = `${this.top}px`;\r\n this.textEditBox.style.transform = `rotate(${this.rotationAngle}deg)`;\r\n this.textEditBox.style.transformOrigin = `${this.width / 2}px ${\r\n this.height / 2\r\n }px`;\r\n }\r\n }\r\n }\r\n\r\n private finishTextEditing(text: string) {\r\n this.setCaptionText(text.trim());\r\n this.overlayContainer.innerHTML = '';\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Sets font family.\r\n * @param font - new font family.\r\n */\r\n protected setFont(font: string): void {\r\n if (this.captionElement) {\r\n SvgHelper.setAttributes(this.captionElement, [['font-family', font]]);\r\n }\r\n this.fontFamily = font;\r\n if (this.textEditBox) {\r\n this.textEditBox.style.fontFamily = this.fontFamily;\r\n }\r\n this.sizeCaption();\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Sets text color.\r\n * @param color - new text color.\r\n */\r\n protected setTextColor(color: string): void {\r\n if (this.captionElement) {\r\n SvgHelper.setAttributes(this.captionElement, [['fill', color]]);\r\n }\r\n this.textColor = color;\r\n if (this.textEditBox) {\r\n this.textEditBox.style.color = this.textColor;\r\n }\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Sets marker's visual size after manipulation.\r\n */\r\n protected setSize(): void {\r\n super.setSize();\r\n SvgHelper.setAttributes(this.frame, [\r\n ['width', this.width.toString()],\r\n ['height', this.height.toString()],\r\n ]);\r\n this.sizeCaption();\r\n }\r\n\r\n /**\r\n * Handles pointer (mouse, touch, stylus, etc.) up event.\r\n *\r\n * @param point - event coordinates.\r\n */\r\n public pointerUp(point: IPoint): void {\r\n super.pointerUp(point);\r\n this.setSize();\r\n\r\n if (!this.isMoved && Date.now() - this.pointerDownTimestamp > 500) {\r\n this.showTextEditor();\r\n }\r\n this.pointerDownPoint = undefined;\r\n }\r\n\r\n /**\r\n * Opens text editor on double-click.\r\n * @param point\r\n * @param target\r\n */\r\n public dblClick(point: IPoint, target?: EventTarget): void {\r\n super.dblClick(point, target);\r\n\r\n this.showTextEditor();\r\n }\r\n\r\n /**\r\n * Sets marker's line color.\r\n * @param color - new line color.\r\n */\r\n protected setStrokeColor(color: string): void {\r\n this.strokeColor = color;\r\n if (this.frame) {\r\n SvgHelper.setAttributes(this.frame, [['stroke', this.strokeColor]]);\r\n }\r\n this.colorChanged(color);\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets marker's fill (background) color.\r\n * @param color - new fill color.\r\n */\r\n protected setFillColor(color: string): void {\r\n this.fillColor = color;\r\n if (this.captionBg) {\r\n SvgHelper.setAttributes(this.captionBg, [['fill', this.fillColor]]);\r\n }\r\n this.fillColorChanged(color);\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets marker's line width.\r\n * @param width - new line width\r\n */\r\n protected setStrokeWidth(width: number): void {\r\n this.strokeWidth = width;\r\n if (this.frame) {\r\n SvgHelper.setAttributes(this.frame, [\r\n ['stroke-width', this.strokeWidth.toString()],\r\n ]);\r\n }\r\n this.stateChanged();\r\n }\r\n /**\r\n * Sets marker's border dash array.\r\n * @param dashes - new dash array.\r\n */\r\n protected setStrokeDasharray(dashes: string): void {\r\n this.strokeDasharray = dashes;\r\n if (this.frame) {\r\n SvgHelper.setAttributes(this.frame, [\r\n ['stroke-dasharray', this.strokeDasharray],\r\n ]);\r\n }\r\n this.stateChanged();\r\n }\r\n\r\n /**\r\n * Returns the list of toolbox panels for this marker type.\r\n */\r\n public get toolboxPanels(): ToolboxPanel[] {\r\n return [\r\n this.strokePanel,\r\n this.fillPanel,\r\n this.strokeWidthPanel,\r\n this.strokeStylePanel,\r\n this.fontFamilyPanel,\r\n this.textColorPanel,\r\n ];\r\n }\r\n\r\n /**\r\n * Returns current marker state that can be restored in the future.\r\n */\r\n public getState(): CaptionFrameMarkerState {\r\n const result: CaptionFrameMarkerState = Object.assign(\r\n {\r\n fillColor: this.fillColor,\r\n strokeColor: this.strokeColor,\r\n strokeWidth: this.strokeWidth,\r\n strokeDasharray: this.strokeDasharray,\r\n opacity: 1,\r\n textColor: this.textColor,\r\n fontFamily: this.fontFamily,\r\n fontSize: this.fontSize,\r\n captionText: this.captionText\r\n },\r\n super.getState()\r\n );\r\n result.typeName = this.typeName;\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores previously saved marker state.\r\n *\r\n * @param state - previously saved state.\r\n */\r\n public restoreState(state: MarkerBaseState): void {\r\n const frState = state as CaptionFrameMarkerState;\r\n this.fillColor = frState.fillColor;\r\n this.strokeColor = frState.strokeColor;\r\n this.strokeWidth = frState.strokeWidth;\r\n this.strokeDasharray = frState.strokeDasharray;\r\n this.textColor = frState.textColor;\r\n this.fontFamily = frState.fontFamily;\r\n this.captionText = frState.captionText;\r\n this.fontSize = frState.fontSize;\r\n\r\n this.createVisual();\r\n super.restoreState(state);\r\n this.setSize();\r\n }\r\n\r\n /**\r\n * Scales marker. Used after the image resize.\r\n *\r\n * @param scaleX - horizontal scale\r\n * @param scaleY - vertical scale\r\n */\r\n public scale(scaleX: number, scaleY: number): void {\r\n super.scale(scaleX, scaleY);\r\n\r\n this.setSize();\r\n }\r\n}\r\n","import { MarkerArea } from '../MarkerArea';\r\nimport { MarkerAreaState } from '../MarkerAreaState';\r\nimport { MarkerBase } from './MarkerBase';\r\n\r\nexport class MarkerAreaEvent {\r\n public markerArea: MarkerArea;\r\n public cancelable = false;\r\n\r\n private _defaultPrevented = false;\r\n public get defaultPrevented(): boolean {\r\n return this._defaultPrevented;\r\n }\r\n\r\n public preventDefault(): void {\r\n this._defaultPrevented = true;\r\n }\r\n\r\n constructor(markerArea: MarkerArea, cancelable = false) {\r\n this.markerArea = markerArea;\r\n this.cancelable = cancelable;\r\n }\r\n}\r\n\r\nexport class MarkerAreaRenderEvent extends MarkerAreaEvent {\r\n public dataUrl: string;\r\n public state: MarkerAreaState;\r\n\r\n constructor(markerArea: MarkerArea, dataUrl: string, state: MarkerAreaState) {\r\n super(markerArea, false);\r\n this.dataUrl = dataUrl;\r\n this.state = state;\r\n }\r\n}\r\n\r\n\r\nexport class MarkerEvent extends MarkerAreaEvent {\r\n public marker?: MarkerBase;\r\n\r\n constructor(markerArea: MarkerArea, marker?: MarkerBase, cancelable = false) {\r\n super(markerArea, cancelable);\r\n this.marker = marker;\r\n }\r\n}\r\n\r\n/**\r\n * General MarkerArea event handler type.\r\n */\r\nexport type MarkerAreaEventHandler = (event: MarkerAreaEvent) => void;\r\n\r\n/**\r\n * MarkerArea render event handler type.\r\n */\r\nexport type MarkerAreaRenderEventHandler = (event: MarkerAreaRenderEvent) => void;\r\n\r\n/**\r\n * Marker event handler type.\r\n */\r\nexport type MarkerEventHandler = (event: MarkerEvent) => void;\r\n\r\n/**\r\n * Describes a repository of MarkerArea event handlers.\r\n */\r\nexport interface IEventListenerRepository {\r\n /**\r\n * Event handlers for the `render` event.\r\n */\r\n render: MarkerAreaRenderEventHandler[];\r\n /**\r\n * Event handlers for the `beforeclose` event.\r\n */\r\n beforeclose: MarkerAreaEventHandler[];\r\n /**\r\n * Event handlers for the `close` event.\r\n */\r\n close: MarkerAreaEventHandler[];\r\n /**\r\n * Event handlers for the `show` event.\r\n */\r\n show: MarkerAreaEventHandler[];\r\n /**\r\n * Event handlers for the `restorestate` event.\r\n */\r\n restorestate: MarkerAreaEventHandler[];\r\n /**\r\n * Event handlers for the `statechange` event.\r\n * \r\n * @since 2.23.0\r\n */\r\n statechange: MarkerAreaEventHandler[];\r\n /**\r\n * Event handlers for the `markerselect` event.\r\n */\r\n markerselect: MarkerEventHandler[];\r\n /**\r\n * Event handlers for the `markerdeselect` event.\r\n */\r\n markerdeselect: MarkerEventHandler[];\r\n /**\r\n * Event handlers for the `markercreating` event.\r\n */\r\n markercreating: MarkerEventHandler[];\r\n /**\r\n * Event handlers for the `markercreated` event.\r\n */\r\n markercreate: MarkerEventHandler[];\r\n /**\r\n * Event handlers for the `markerbeforedelete` event.\r\n */\r\n markerbeforedelete: MarkerEventHandler[];\r\n /**\r\n * Event handlers for the `markerdelete` event.\r\n */\r\n markerdelete: MarkerEventHandler[];\r\n /**\r\n * Event handlers for the `markerchange` event.\r\n * \r\n * @since 2.23.0\r\n */\r\n markerchange: MarkerEventHandler[];\r\n /**\r\n * Event handlers for the `focus` event.\r\n * \r\n * @since 2.19.0\r\n */\r\n focus: MarkerAreaEventHandler[];\r\n /**\r\n * Event handlers for the `blur` event.\r\n * \r\n * @since 2.19.0\r\n */\r\n blur: MarkerAreaEventHandler[];\r\n}\r\n\r\n/**\r\n * Event handler type for a specific event type.\r\n */\r\nexport type EventHandler<\r\n T extends keyof IEventListenerRepository\r\n> = T extends 'markerselect'\r\n ? MarkerEventHandler\r\n : T extends 'markerdeselect'\r\n ? MarkerEventHandler\r\n : T extends 'markercreating'\r\n ? MarkerEventHandler\r\n : T extends 'markercreate'\r\n ? MarkerEventHandler\r\n : T extends 'markerbeforedelete'\r\n ? MarkerEventHandler\r\n : T extends 'markerdelete'\r\n ? MarkerEventHandler\r\n : T extends 'markerchange'\r\n ? MarkerEventHandler\r\n : T extends 'render'\r\n ? MarkerAreaRenderEventHandler\r\n : MarkerAreaEventHandler;\r\n\r\n/**\r\n * Event handler repository.\r\n */\r\nexport class EventListenerRepository implements IEventListenerRepository {\r\n /**\r\n * Event handlers for the `render` event.\r\n */\r\n render: MarkerAreaRenderEventHandler[] = [];\r\n /**\r\n * Event handlers for the `beforeclose` event.\r\n */\r\n beforeclose: MarkerAreaEventHandler[] = [];\r\n /**\r\n * Event handlers for the `close` event.\r\n */\r\n close: MarkerAreaEventHandler[] = [];\r\n /**\r\n * Event handlers for the `show` event.\r\n */\r\n show: MarkerAreaEventHandler[] = [];\r\n /**\r\n * Event handlers for the `restorestate` event.\r\n */\r\n restorestate: MarkerAreaEventHandler[] = [];\r\n /**\r\n * Event handlers for the `statechange` event.\r\n * \r\n * @since 2.23.0\r\n */\r\n statechange: MarkerAreaEventHandler[] = [];\r\n /**\r\n * Event handlers for the `markerselect` event.\r\n */\r\n markerselect: MarkerEventHandler[] = [];\r\n /**\r\n * Event handlers for the `markerdeselect` event.\r\n */\r\n markerdeselect: MarkerEventHandler[] = [];\r\n /**\r\n * Event handlers for the `markercreating` event.\r\n */\r\n markercreating: MarkerEventHandler[] = [];\r\n /**\r\n * Event handlers for the `markercreate` event.\r\n */\r\n markercreate: MarkerEventHandler[] = [];\r\n /**\r\n * Event handlers for the `markerbeforedelete` event.\r\n */\r\n markerbeforedelete: MarkerEventHandler[] = [];\r\n /**\r\n * Event handlers for the `markerdelete` event.\r\n */\r\n markerdelete: MarkerEventHandler[] = [];\r\n /**\r\n * Event handlers for the `markerchange` event.\r\n * \r\n * @since 2.23.0\r\n */\r\n markerchange: MarkerEventHandler[] = [];\r\n /**\r\n * Event handlers for the `focus` event.\r\n * \r\n * @since 2.19.0\r\n */\r\n focus: MarkerAreaEventHandler[] = [];\r\n /**\r\n * Event handlers for the `blur` event.\r\n * \r\n * @since 2.19.0\r\n */\r\n blur: MarkerAreaEventHandler[] = [];\r\n\r\n\r\n /**\r\n * Add an event handler for a specific event type.\r\n * @param eventType - event type.\r\n * @param handler - function to handle the event.\r\n */\r\n public addEventListener(\r\n eventType: T,\r\n handler: EventHandler\r\n ): void {\r\n (>>this[eventType]).push(handler);\r\n }\r\n\r\n /**\r\n * Remove an event handler for a specific event type.\r\n * @param eventType - event type.\r\n * @param handler - function currently handling the event.\r\n */\r\n public removeEventListener(\r\n eventType: T,\r\n handler: EventHandler\r\n ): void {\r\n const index = (>>this[eventType]).indexOf(handler);\r\n if (index > -1) {\r\n (>>this[eventType]).splice(index, 1);\r\n }\r\n }\r\n}\r\n","import { SvgHelper } from './core/SvgHelper';\r\nimport { Activator } from './core/Activator';\r\nimport { Renderer } from './core/Renderer';\r\n\r\nimport Logo from './assets/markerjs-logo-m.svg';\r\nimport { MarkerBase } from './core/MarkerBase';\r\nimport { Toolbar, ToolbarButtonType } from './ui/Toolbar';\r\nimport { Toolbox } from './ui/Toolbox';\r\nimport { FrameMarker } from './markers/frame-marker/FrameMarker';\r\nimport { Settings } from './core/Settings';\r\nimport { StyleManager, Style } from './core/Style';\r\nimport { LineMarker } from './markers/line-marker/LineMarker';\r\nimport { TextMarker } from './markers/text-marker/TextMarker';\r\nimport { FreehandMarker } from './markers/freehand-marker/FreehandMarker';\r\nimport { ArrowMarker } from './markers/arrow-marker/ArrowMarker';\r\nimport { CoverMarker } from './markers/cover-marker/CoverMarker';\r\nimport { HighlightMarker } from './markers/highlight-marker/HighlightMarker';\r\nimport { CalloutMarker } from './markers/callout-marker/CalloutMarker';\r\nimport { MarkerAreaState } from './MarkerAreaState';\r\nimport { EllipseMarker } from './markers/ellipse-marker/EllipseMarker';\r\nimport { IStyleSettings } from './core/IStyleSettings';\r\nimport { MeasurementMarker } from './markers/measurement-marker/MeasurementMarker';\r\nimport { IPoint } from './core/IPoint';\r\nimport { EllipseFrameMarker } from './markers/ellipse-frame-marker/EllipseFrameMarker';\r\nimport { UndoRedoManager } from './core/UndoRedoManager';\r\nimport { CurveMarker } from './markers/curve-marker/CurveMarker';\r\nimport { CaptionFrameMarker } from './markers/caption-frame-marker/CaptionFrameMarker';\r\nimport {\r\n EventHandler,\r\n EventListenerRepository,\r\n IEventListenerRepository,\r\n MarkerAreaEvent,\r\n MarkerAreaRenderEvent,\r\n MarkerEvent,\r\n} from './core/Events';\r\n\r\n/**\r\n * @ignore\r\n */\r\nexport type MarkerAreaMode = 'select' | 'create' | 'delete';\r\n\r\n/**\r\n * Identifier for marker type when setting {@linkcode availableMarkerTypes}.\r\n * Marker type can be set as either a string or a marker type reference.\r\n */\r\nexport type MarkerTypeIdentifier = string | typeof MarkerBase;\r\n\r\n/**\r\n * Event handler type for {@linkcode MarkerArea} `render` event.\r\n */\r\nexport type RenderEventHandler = (\r\n dataURL: string,\r\n state?: MarkerAreaState\r\n) => void;\r\n/**\r\n * Event handler type for {@linkcode MarkerArea} `close` event.\r\n */\r\nexport type CloseEventHandler = () => void;\r\n\r\n/**\r\n * MarkerArea is the main class of marker.js 2. It controls the behavior and appearance of the library.\r\n *\r\n * The simplest marker.js 2 usage scenario looks something like this:\r\n *\r\n * ```typescript\r\n * import * as markerjs2 from 'markerjs2';\r\n * // create an instance of MarkerArea and pass the target image reference as a parameter\r\n * let markerArea = new markerjs2.MarkerArea(document.getElementById('myimg'));\r\n *\r\n * // register an event listener for when user clicks OK/save in the marker.js UI\r\n * markerArea.addEventListener('render', event => {\r\n * // we are setting the markup result to replace our original image on the page\r\n * // but you can set a different image or upload it to your server\r\n * document.getElementById('myimg').src = event.dataUrl;\r\n * });\r\n *\r\n * // finally, call the show() method and marker.js UI opens\r\n * markerArea.show();\r\n * ```\r\n */\r\nexport class MarkerArea {\r\n private target: HTMLImageElement | HTMLElement;\r\n private targetObserver: ResizeObserver;\r\n\r\n private width: number;\r\n private height: number;\r\n private imageWidth: number;\r\n private imageHeight: number;\r\n private left: number;\r\n private top: number;\r\n private windowHeight: number;\r\n\r\n private markerImage: SVGSVGElement;\r\n private markerImageHolder: HTMLDivElement;\r\n private defs: SVGDefsElement;\r\n\r\n private coverDiv: HTMLDivElement;\r\n private uiDiv: HTMLDivElement;\r\n private contentDiv: HTMLDivElement;\r\n private editorCanvas: HTMLDivElement;\r\n private editingTarget: HTMLImageElement | HTMLCanvasElement;\r\n private overlayContainer: HTMLDivElement;\r\n\r\n private touchPoints = 0;\r\n\r\n private logoUI: HTMLElement;\r\n\r\n /**\r\n * `targetRoot` is used to set an alternative positioning root for the marker.js UI.\r\n *\r\n * This is useful in cases when your target image is positioned, say, inside a div with `position: relative;`\r\n *\r\n * ```typescript\r\n * // set targetRoot to a specific div instead of document.body\r\n * markerArea.targetRoot = document.getElementById('myRootElement');\r\n * ```\r\n *\r\n * @default document.body\r\n */\r\n public targetRoot: HTMLElement;\r\n\r\n /**\r\n * Returns a list of all built-in marker types for use with {@linkcode availableMarkerTypes}\r\n *\r\n * @readonly\r\n */\r\n public get ALL_MARKER_TYPES(): typeof MarkerBase[] {\r\n return [\r\n FrameMarker,\r\n FreehandMarker,\r\n ArrowMarker,\r\n TextMarker,\r\n EllipseFrameMarker,\r\n EllipseMarker,\r\n HighlightMarker,\r\n CalloutMarker,\r\n MeasurementMarker,\r\n CoverMarker,\r\n LineMarker,\r\n CurveMarker,\r\n CaptionFrameMarker,\r\n ];\r\n }\r\n\r\n /**\r\n * Returns a list of default set of built-in marker types.\r\n * Used when {@linkcode availableMarkerTypes} isn't set explicitly.\r\n *\r\n * @readonly\r\n */\r\n public get DEFAULT_MARKER_TYPES(): typeof MarkerBase[] {\r\n return [\r\n FrameMarker,\r\n FreehandMarker,\r\n ArrowMarker,\r\n TextMarker,\r\n EllipseMarker,\r\n HighlightMarker,\r\n CalloutMarker,\r\n ];\r\n }\r\n\r\n /**\r\n * Returns a short list of essential built-in marker types for use with {@linkcode availableMarkerTypes}\r\n *\r\n * @readonly\r\n */\r\n public get BASIC_MARKER_TYPES(): typeof MarkerBase[] {\r\n return [\r\n FrameMarker,\r\n FreehandMarker,\r\n ArrowMarker,\r\n TextMarker,\r\n HighlightMarker,\r\n ];\r\n }\r\n\r\n private _availableMarkerTypes: typeof MarkerBase[] = this\r\n .DEFAULT_MARKER_TYPES;\r\n\r\n /**\r\n * Gets or sets a list of marker types avaiable to the user in the toolbar.\r\n * The types can be passed as either type reference or a string type name.\r\n *\r\n * ```typescript\r\n * this.markerArea1.availableMarkerTypes = ['CalloutMarker', ...this.markerArea1.BASIC_MARKER_TYPES];\r\n * ```\r\n *\r\n * @default {@linkcode DEFAULT_MARKER_TYPES}\r\n */\r\n public get availableMarkerTypes(): MarkerTypeIdentifier[] {\r\n return this._availableMarkerTypes;\r\n }\r\n\r\n public set availableMarkerTypes(value: MarkerTypeIdentifier[]) {\r\n this._availableMarkerTypes.splice(0);\r\n value.forEach((mt) => {\r\n if (typeof mt === 'string') {\r\n const typeType = this.ALL_MARKER_TYPES.find(\r\n (allT) => allT.typeName === mt\r\n );\r\n if (typeType !== undefined) {\r\n this._availableMarkerTypes.push(typeType);\r\n }\r\n } else {\r\n this._availableMarkerTypes.push(mt);\r\n }\r\n });\r\n }\r\n\r\n private toolbar: Toolbar;\r\n private toolbox: Toolbox;\r\n\r\n private mode: MarkerAreaMode = 'select';\r\n\r\n private _currentMarker?: MarkerBase;\r\n /**\r\n * Gets currently selected marker\r\n *\r\n * @readonly\r\n * @since 2.27.0\r\n */\r\n public get currentMarker() : MarkerBase | undefined {\r\n return this._currentMarker;\r\n }\r\n private markers: MarkerBase[] = [];\r\n\r\n private isDragging = false;\r\n\r\n // for preserving orginal window state before opening the editor\r\n private bodyOverflowState: string;\r\n private scrollYState: number;\r\n private scrollXState: number;\r\n\r\n private renderEventListeners: RenderEventHandler[] = [];\r\n private closeEventListeners: CloseEventHandler[] = [];\r\n\r\n public settings: Settings = new Settings();\r\n public uiStyleSettings: IStyleSettings;\r\n\r\n private _isOpen = false;\r\n /**\r\n * Returns `true` when MarkerArea is open and `false` otherwise.\r\n *\r\n * @readonly\r\n */\r\n public get isOpen(): boolean {\r\n return this._isOpen;\r\n }\r\n\r\n private undoRedoManager: UndoRedoManager<\r\n MarkerAreaState\r\n > = new UndoRedoManager();\r\n\r\n /**\r\n * Returns true if undo operation can be performed (undo stack is not empty).\r\n * \r\n * @since 2.26.0\r\n */\r\n public get isUndoPossible(): boolean {\r\n if (this.undoRedoManager && this.undoRedoManager.isUndoPossible) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if redo operation can be performed (redo stack is not empty).\r\n * \r\n * @since 2.26.0\r\n */\r\n public get isRedoPossible(): boolean {\r\n if (this.undoRedoManager && this.undoRedoManager.isRedoPossible) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * When set to true resulting image will be rendered at the natural (original) resolution\r\n * of the target image. Otherwise (default), screen dimensions of the image are used.\r\n *\r\n * @default false (use screen dimensions)\r\n */\r\n public renderAtNaturalSize = false;\r\n /**\r\n * Type of image for the rendering result. Eg. `image/png` (default) or `image/jpeg`.\r\n *\r\n * @default `image/png`\r\n */\r\n public renderImageType = 'image/png';\r\n /**\r\n * When rendering engine/format supports it (jpeg, for exmample),\r\n * sets the rendering quality for the resulting image.\r\n *\r\n * In case of `image/jpeg` the value should be between 0 (worst quality) and 1 (best quality).\r\n */\r\n public renderImageQuality?: number;\r\n /**\r\n * When set to `true`, will render only the marker layer without the original image.\r\n * This could be useful when you want to non-destructively overlay markers on top of the original image.\r\n *\r\n * Note that in order for the markers layer to have a transparent background {@linkcode renderImageType}\r\n * should be set to a format supporting transparency, such as `image/png`.\r\n *\r\n * @default false\r\n */\r\n public renderMarkersOnly = false;\r\n\r\n /**\r\n * When set and {@linkcode renderAtNaturalSize} is `false` sets the width of the rendered image.\r\n *\r\n * Both `renderWidth` and `renderHeight` have to be set for this to take effect.\r\n */\r\n public renderWidth?: number;\r\n /**\r\n * When set and {@linkcode renderAtNaturalSize} is `false` sets the height of the rendered image.\r\n *\r\n * Both `renderWidth` and `renderHeight` have to be set for this to take effect.\r\n */\r\n public renderHeight?: number;\r\n\r\n /**\r\n * If a canvas is specified here, then marker.js will render the output to this canvas\r\n * in addition to generating an image.\r\n *\r\n * @since 2.14.0\r\n */\r\n public renderTarget?: HTMLCanvasElement;\r\n\r\n /**\r\n * Pressing zoom button iterates through values in this array.\r\n *\r\n * @since 2.12.0\r\n */\r\n public zoomSteps = [1, 1.5, 2, 4];\r\n private _zoomLevel = 1;\r\n /**\r\n * Gets current zoom level.\r\n *\r\n * @since 2.12.0\r\n */\r\n public get zoomLevel(): number {\r\n return this._zoomLevel;\r\n }\r\n /**\r\n * Sets current zoom level.\r\n *\r\n * @since 2.12.0\r\n */\r\n public set zoomLevel(value: number) {\r\n this._zoomLevel = value;\r\n if (this.editorCanvas && this.contentDiv) {\r\n this.editorCanvas.style.transform = `scale(${this._zoomLevel})`;\r\n this.contentDiv.scrollTo({\r\n left:\r\n (this.editorCanvas.clientWidth * this._zoomLevel -\r\n this.contentDiv.clientWidth) /\r\n 2,\r\n top:\r\n (this.editorCanvas.clientHeight * this._zoomLevel -\r\n this.contentDiv.clientHeight) /\r\n 2,\r\n });\r\n }\r\n }\r\n\r\n private static instanceCounter = 0;\r\n private _instanceNo: number;\r\n public get instanceNo(): number {\r\n return this._instanceNo;\r\n }\r\n\r\n /**\r\n * Manage style releated settings via the `styles` property.\r\n */\r\n public styles: StyleManager;\r\n\r\n /**\r\n * Creates a new MarkerArea for the specified target image.\r\n *\r\n * ```typescript\r\n * // create an instance of MarkerArea and pass the target image (or other HTML element) reference as a parameter\r\n * let markerArea = new markerjs2.MarkerArea(document.getElementById('myimg'));\r\n * ```\r\n *\r\n * When `target` is not an image object the output is limited to \"markers only\" (@linkcode renderMarkersOnly)\r\n * and \"popup\" mode won't work properly as the target object stays in it's original position and, unlike images,\r\n * is not copied.\r\n *\r\n * @param target image object to mark up.\r\n */\r\n constructor(target: HTMLImageElement | HTMLElement) {\r\n this._instanceNo = MarkerArea.instanceCounter++;\r\n\r\n this.styles = new StyleManager(this.instanceNo);\r\n\r\n this.uiStyleSettings = this.styles.settings;\r\n\r\n this.target = target;\r\n this.targetRoot = document.body;\r\n\r\n this.width = target.clientWidth;\r\n this.height = target.clientHeight;\r\n\r\n this.styles.removeStyleSheet();\r\n\r\n this.open = this.open.bind(this);\r\n this.setTopLeft = this.setTopLeft.bind(this);\r\n\r\n this.toolbarButtonClicked = this.toolbarButtonClicked.bind(this);\r\n this.createNewMarker = this.createNewMarker.bind(this);\r\n this.addNewMarker = this.addNewMarker.bind(this);\r\n this.markerCreated = this.markerCreated.bind(this);\r\n this.setCurrentMarker = this.setCurrentMarker.bind(this);\r\n this.onPointerDown = this.onPointerDown.bind(this);\r\n this.onDblClick = this.onDblClick.bind(this);\r\n this.onPointerMove = this.onPointerMove.bind(this);\r\n this.onPointerUp = this.onPointerUp.bind(this);\r\n this.onPointerOut = this.onPointerOut.bind(this);\r\n this.onKeyUp = this.onKeyUp.bind(this);\r\n this.overrideOverflow = this.overrideOverflow.bind(this);\r\n this.restoreOverflow = this.restoreOverflow.bind(this);\r\n this.close = this.close.bind(this);\r\n this.closeUI = this.closeUI.bind(this);\r\n this.addCloseEventListener = this.addCloseEventListener.bind(this);\r\n this.removeCloseEventListener = this.removeCloseEventListener.bind(this);\r\n this.addRenderEventListener = this.addRenderEventListener.bind(this);\r\n this.removeRenderEventListener = this.removeRenderEventListener.bind(this);\r\n this.clientToLocalCoordinates = this.clientToLocalCoordinates.bind(this);\r\n this.onWindowResize = this.onWindowResize.bind(this);\r\n this.deleteSelectedMarker = this.deleteSelectedMarker.bind(this);\r\n this.setWindowHeight = this.setWindowHeight.bind(this);\r\n this.removeMarker = this.removeMarker.bind(this);\r\n this.colorChanged = this.colorChanged.bind(this);\r\n this.fillColorChanged = this.fillColorChanged.bind(this);\r\n this.onPopupTargetResize = this.onPopupTargetResize.bind(this);\r\n this.showNotesEditor = this.showNotesEditor.bind(this);\r\n this.hideNotesEditor = this.hideNotesEditor.bind(this);\r\n this.stepZoom = this.stepZoom.bind(this);\r\n this.focus = this.focus.bind(this);\r\n this.blur = this.blur.bind(this);\r\n this.markerStateChanged = this.markerStateChanged.bind(this);\r\n this.switchToSelectMode = this.switchToSelectMode.bind(this);\r\n this.addDefs = this.addDefs.bind(this);\r\n this.addDefsToImage = this.addDefsToImage.bind(this);\r\n }\r\n\r\n private open(): void {\r\n this.setupResizeObserver();\r\n this.setEditingTarget();\r\n this.setTopLeft();\r\n this.initMarkerCanvas();\r\n this.initOverlay();\r\n this.attachEvents();\r\n if (this.settings.displayMode === 'popup') {\r\n this.onPopupTargetResize();\r\n }\r\n\r\n if (!Activator.isLicensed) {\r\n // NOTE:\r\n // before removing this call please consider supporting marker.js\r\n // by visiting https://markerjs.com/ for details\r\n // thank you!\r\n this.addLogo();\r\n }\r\n\r\n this._isOpen = true;\r\n this._isFocused = true;\r\n }\r\n\r\n /**\r\n * Initializes the MarkerArea and opens the UI.\r\n */\r\n public show(): void {\r\n // backwards compatibility with deprecated static Style class\r\n if (this.styles.styleSheetRoot === undefined && Style.styleSheetRoot !== undefined) {\r\n this.styles.styleSheetRoot = Style.styleSheetRoot;\r\n }\r\n\r\n // reset markers array\r\n this.markers.splice(0);\r\n\r\n this.setWindowHeight();\r\n this.showUI();\r\n this.open();\r\n this.eventListeners['show'].forEach((listener) =>\r\n listener(new MarkerAreaEvent(this))\r\n );\r\n }\r\n\r\n /**\r\n * Renders the annotation result.\r\n *\r\n * Normally, you should use {@linkcode addEventListener} method to set a listener for the `render` event\r\n * rather than calling this method directly.\r\n */\r\n public async render(): Promise {\r\n this.setCurrentMarker();\r\n\r\n const renderer = new Renderer();\r\n renderer.naturalSize = this.renderAtNaturalSize;\r\n renderer.imageType = this.renderImageType;\r\n renderer.imageQuality = this.renderImageQuality;\r\n renderer.markersOnly = this.renderMarkersOnly;\r\n renderer.width = this.renderWidth;\r\n renderer.height = this.renderHeight;\r\n\r\n // workaround for an issue in Safari where FreeHand marker\r\n // is not rendered on the first try for some reason\r\n await renderer.rasterize(\r\n this.target instanceof HTMLImageElement ? this.target : null,\r\n this.markerImage,\r\n this.renderTarget\r\n );\r\n\r\n return await renderer.rasterize(\r\n this.target instanceof HTMLImageElement ? this.target : null,\r\n this.markerImage,\r\n this.renderTarget\r\n );\r\n }\r\n\r\n /**\r\n * Closes the MarkerArea UI.\r\n */\r\n public close(suppressBeforeClose = false): void {\r\n if (this.isOpen) {\r\n let cancel = false;\r\n\r\n if (!suppressBeforeClose) {\r\n this.eventListeners['beforeclose'].forEach((listener) => {\r\n const ev = new MarkerAreaEvent(this, true);\r\n listener(ev);\r\n if (ev.defaultPrevented) {\r\n cancel = true;\r\n }\r\n });\r\n }\r\n\r\n if (!cancel) {\r\n if (this.coverDiv) {\r\n this.closeUI();\r\n }\r\n if (this.targetObserver) {\r\n this.targetObserver.unobserve(this.target);\r\n this.targetObserver.unobserve(this.editorCanvas);\r\n }\r\n if (this.settings.displayMode === 'popup') {\r\n window.removeEventListener('resize', this.setWindowHeight);\r\n }\r\n //this.closeEventListeners.forEach((listener) => listener());\r\n this.eventListeners['close'].forEach((listener) =>\r\n listener(new MarkerAreaEvent(this))\r\n );\r\n this.detachEvents();\r\n this._isOpen = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Adds one or more markers to the toolbar.\r\n *\r\n * @param markers - one or more marker types to be added.\r\n */\r\n public addMarkersToToolbar(...markers: typeof MarkerBase[]): void {\r\n this._availableMarkerTypes.push(...markers);\r\n }\r\n\r\n /**\r\n * Add a `render` event listener which is called when user clicks on the OK/save button\r\n * in the toolbar.\r\n *\r\n * ```typescript\r\n * // register an event listener for when user clicks OK/save in the marker.js UI\r\n * markerArea.addRenderEventListener(dataUrl => {\r\n * // we are setting the markup result to replace our original image on the page\r\n * // but you can set a different image or upload it to your server\r\n * document.getElementById('myimg').src = dataUrl;\r\n * });\r\n * ```\r\n *\r\n * This is where you place your code to save a resulting image and/or MarkerAreaState.\r\n *\r\n * @param listener - a method handling rendering results\r\n *\r\n * @see {@link MarkerAreaState}\r\n * @deprecated use `addEventListener('render', ...)` instead.\r\n */\r\n public addRenderEventListener(listener: RenderEventHandler): void {\r\n //this.renderEventListeners.push(listener);\r\n this.addEventListener('render', (event: MarkerAreaRenderEvent) => {\r\n listener(event.dataUrl, event.state);\r\n });\r\n }\r\n\r\n /**\r\n * Remove a `render` event handler.\r\n *\r\n * @param listener - previously registered `render` event handler.\r\n * @deprecated use `removeEventListener('render', ...)` instead.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public removeRenderEventListener(listener: RenderEventHandler): void {\r\n // if (this.renderEventListeners.indexOf(listener) > -1) {\r\n // this.renderEventListeners.splice(\r\n // this.renderEventListeners.indexOf(listener),\r\n // 1\r\n // );\r\n // }\r\n }\r\n\r\n /**\r\n * Add a `close` event handler to perform actions in your code after the user\r\n * clicks on the close button (without saving).\r\n *\r\n * @param listener - close event listener\r\n * @deprecated use `addEventListener('close', ...)` instead.\r\n */\r\n public addCloseEventListener(listener: CloseEventHandler): void {\r\n //this.closeEventListeners.push(listener);\r\n this.addEventListener('close', () => {\r\n listener();\r\n });\r\n }\r\n\r\n /**\r\n * Remove a `close` event handler.\r\n *\r\n * @param listener - previously registered `close` event handler.\r\n * @deprecated use `removeEventListener('close', ...)` instead.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public removeCloseEventListener(listener: CloseEventHandler): void {\r\n // if (this.closeEventListeners.indexOf(listener) > -1) {\r\n // this.closeEventListeners.splice(\r\n // this.closeEventListeners.indexOf(listener),\r\n // 1\r\n // );\r\n // }\r\n }\r\n\r\n private setupResizeObserver() {\r\n if (this.settings.displayMode === 'inline') {\r\n if (window.ResizeObserver) {\r\n this.targetObserver = new ResizeObserver(() => {\r\n this.resize(this.target.clientWidth, this.target.clientHeight);\r\n });\r\n this.targetObserver.observe(this.target);\r\n }\r\n } else if (this.settings.displayMode === 'popup') {\r\n if (window.ResizeObserver) {\r\n this.targetObserver = new ResizeObserver(() =>\r\n this.onPopupTargetResize()\r\n );\r\n this.targetObserver.observe(this.editorCanvas);\r\n }\r\n window.addEventListener('resize', this.setWindowHeight);\r\n }\r\n }\r\n\r\n private onPopupTargetResize() {\r\n const ratio = (1.0 * this.target.clientWidth) / this.target.clientHeight;\r\n const newWidth =\r\n this.editorCanvas.clientWidth / ratio > this.editorCanvas.clientHeight\r\n ? this.editorCanvas.clientHeight * ratio\r\n : this.editorCanvas.clientWidth;\r\n const newHeight =\r\n newWidth < this.editorCanvas.clientWidth\r\n ? this.editorCanvas.clientHeight\r\n : this.editorCanvas.clientWidth / ratio;\r\n this.resize(newWidth, newHeight);\r\n }\r\n\r\n private setWindowHeight() {\r\n this.windowHeight = window.innerHeight;\r\n }\r\n\r\n private _isResizing = false;\r\n private resize(newWidth: number, newHeight: number) {\r\n this._isResizing = true;\r\n\r\n const scaleX = newWidth / this.imageWidth;\r\n const scaleY = newHeight / this.imageHeight;\r\n\r\n this.imageWidth = Math.round(newWidth);\r\n this.imageHeight = Math.round(newHeight);\r\n if (\r\n this.target instanceof HTMLImageElement &&\r\n this.editingTarget instanceof HTMLImageElement\r\n ) {\r\n this.editingTarget.src = this.target.src;\r\n }\r\n this.editingTarget.width = this.imageWidth;\r\n this.editingTarget.height = this.imageHeight;\r\n this.editingTarget.style.width = `${this.imageWidth}px`;\r\n this.editingTarget.style.height = `${this.imageHeight}px`;\r\n\r\n this.markerImage.setAttribute('width', this.imageWidth.toString());\r\n this.markerImage.setAttribute('height', this.imageHeight.toString());\r\n this.markerImage.setAttribute(\r\n 'viewBox',\r\n '0 0 ' + this.imageWidth.toString() + ' ' + this.imageHeight.toString()\r\n );\r\n\r\n this.markerImageHolder.style.width = `${this.imageWidth}px`;\r\n this.markerImageHolder.style.height = `${this.imageHeight}px`;\r\n\r\n this.overlayContainer.style.width = `${this.imageWidth}px`;\r\n this.overlayContainer.style.height = `${this.imageHeight}px`;\r\n\r\n if (this.settings.displayMode !== 'popup') {\r\n this.coverDiv.style.width = `${this.imageWidth.toString()}px`;\r\n } else {\r\n this.setTopLeft();\r\n this.positionMarkerImage();\r\n }\r\n\r\n if (this.toolbar !== undefined) {\r\n this.toolbar.adjustLayout();\r\n }\r\n\r\n this.positionLogo();\r\n\r\n this.scaleMarkers(scaleX, scaleY);\r\n\r\n this._isResizing = false;\r\n }\r\n\r\n private scaleMarkers(scaleX: number, scaleY: number) {\r\n let preScaleSelectedMarker: MarkerBase;\r\n if (!(this._currentMarker && this._currentMarker instanceof TextMarker)) {\r\n // can't unselect text marker as it would hide keyboard on mobile\r\n preScaleSelectedMarker = this._currentMarker;\r\n this.setCurrentMarker();\r\n } else {\r\n this._currentMarker.scale(scaleX, scaleY);\r\n }\r\n this.markers.forEach((marker) => {\r\n if (marker !== this._currentMarker) {\r\n marker.scale(scaleX, scaleY)\r\n }\r\n });\r\n if (preScaleSelectedMarker !== undefined) {\r\n this.setCurrentMarker(preScaleSelectedMarker);\r\n }\r\n }\r\n\r\n private setEditingTarget() {\r\n this.imageWidth = Math.round(this.target.clientWidth);\r\n this.imageHeight = Math.round(this.target.clientHeight);\r\n if (\r\n this.target instanceof HTMLImageElement &&\r\n this.editingTarget instanceof HTMLImageElement\r\n ) {\r\n this.editingTarget.src = this.target.src;\r\n }\r\n this.editingTarget.width = this.imageWidth;\r\n this.editingTarget.height = this.imageHeight;\r\n this.editingTarget.style.width = `${this.imageWidth}px`;\r\n this.editingTarget.style.height = `${this.imageHeight}px`;\r\n }\r\n\r\n private setTopLeft() {\r\n const targetRect = this.editingTarget.getBoundingClientRect();\r\n const bodyRect = this.editorCanvas.getBoundingClientRect();\r\n this.left = targetRect.left - bodyRect.left;\r\n this.top = targetRect.top - bodyRect.top;\r\n }\r\n\r\n private initMarkerCanvas(): void {\r\n this.markerImageHolder = document.createElement('div');\r\n this.markerImageHolder.style.setProperty('touch-action', 'pinch-zoom');\r\n\r\n this.markerImage = document.createElementNS(\r\n 'http://www.w3.org/2000/svg',\r\n 'svg'\r\n );\r\n this.markerImage.setAttribute('xmlns', 'http://www.w3.org/2000/svg');\r\n this.markerImage.setAttribute('width', this.imageWidth.toString());\r\n this.markerImage.setAttribute('height', this.imageHeight.toString());\r\n this.markerImage.setAttribute(\r\n 'viewBox',\r\n '0 0 ' + this.imageWidth.toString() + ' ' + this.imageHeight.toString()\r\n );\r\n this.markerImage.style.pointerEvents = 'auto';\r\n\r\n this.markerImageHolder.style.position = 'absolute';\r\n this.markerImageHolder.style.width = `${this.imageWidth}px`;\r\n this.markerImageHolder.style.height = `${this.imageHeight}px`;\r\n this.markerImageHolder.style.transformOrigin = 'top left';\r\n this.positionMarkerImage();\r\n\r\n this.markerImageHolder.appendChild(this.markerImage);\r\n\r\n this.editorCanvas.appendChild(this.markerImageHolder);\r\n }\r\n\r\n /**\r\n * Adds \"defs\" element to the marker SVG element.\r\n * Useful for using custom fonts and potentially other scenarios.\r\n *\r\n * @param {(...(string | Node)[])} nodes\r\n * @see Documentation article on adding custom fonts for an example\r\n */\r\n public addDefs(...nodes: (string | Node)[]): void {\r\n this.defs = SvgHelper.createDefs();\r\n this.addDefsToImage();\r\n\r\n this.defs.append(...nodes);\r\n }\r\n\r\n private addDefsToImage() {\r\n if (this.defs) {\r\n this.markerImage.insertBefore(this.defs, this.markerImage.firstChild);\r\n }\r\n }\r\n\r\n private initOverlay(): void {\r\n this.overlayContainer = document.createElement('div');\r\n this.overlayContainer.style.position = 'absolute';\r\n this.overlayContainer.style.left = '0px';\r\n this.overlayContainer.style.top = '0px';\r\n this.overlayContainer.style.width = `${this.imageWidth}px`;\r\n this.overlayContainer.style.height = `${this.imageHeight}px`;\r\n this.overlayContainer.style.display = 'flex';\r\n this.markerImageHolder.appendChild(this.overlayContainer);\r\n }\r\n\r\n private positionMarkerImage() {\r\n this.markerImageHolder.style.top = this.top / this.zoomLevel + 'px';\r\n this.markerImageHolder.style.left = this.left / this.zoomLevel + 'px';\r\n }\r\n\r\n private attachEvents() {\r\n this.markerImage.addEventListener('pointerdown', this.onPointerDown);\r\n // workaround to prevent a bug with Apple Pencil\r\n // https://bugs.webkit.org/show_bug.cgi?id=217430\r\n this.markerImage.addEventListener('touchmove', ev => ev.preventDefault());\r\n \r\n this.markerImage.addEventListener('dblclick', this.onDblClick);\r\n this.attachWindowEvents();\r\n }\r\n\r\n private attachWindowEvents() {\r\n window.addEventListener('pointermove', this.onPointerMove);\r\n window.addEventListener('pointerup', this.onPointerUp);\r\n window.addEventListener('pointercancel', this.onPointerOut);\r\n window.addEventListener('pointerout', this.onPointerOut);\r\n window.addEventListener('pointerleave', this.onPointerUp);\r\n window.addEventListener('resize', this.onWindowResize);\r\n window.addEventListener('keyup', this.onKeyUp);\r\n }\r\n\r\n private detachEvents() {\r\n this.markerImage.removeEventListener('pointerdown', this.onPointerDown);\r\n this.markerImage.removeEventListener('dblclick', this.onDblClick);\r\n this.detachWindowEvents();\r\n }\r\n\r\n private detachWindowEvents() {\r\n window.removeEventListener('pointermove', this.onPointerMove);\r\n window.removeEventListener('pointerup', this.onPointerUp);\r\n window.removeEventListener('pointercancel', this.onPointerOut);\r\n window.removeEventListener('pointerout', this.onPointerOut);\r\n window.removeEventListener('pointerleave', this.onPointerUp);\r\n window.removeEventListener('resize', this.onWindowResize);\r\n window.removeEventListener('keyup', this.onKeyUp);\r\n }\r\n\r\n /**\r\n * NOTE:\r\n *\r\n * before removing or modifying this method please consider supporting marker.js\r\n * by visiting https://markerjs.com/#price for details\r\n *\r\n * thank you!\r\n */\r\n private addLogo() {\r\n this.logoUI = document.createElement('div');\r\n this.logoUI.style.display = 'inline-block';\r\n this.logoUI.style.margin = '0px';\r\n this.logoUI.style.padding = '0px';\r\n this.logoUI.style.fill = '#333333';\r\n\r\n const link = document.createElement('a');\r\n link.href = 'https://markerjs.com/';\r\n link.target = '_blank';\r\n link.innerHTML = Logo;\r\n link.title = 'Powered by marker.js';\r\n\r\n link.style.display = 'grid';\r\n link.style.alignItems = 'center';\r\n link.style.justifyItems = 'center';\r\n link.style.padding = '3px';\r\n link.style.width = '20px';\r\n link.style.height = '20px';\r\n\r\n this.logoUI.appendChild(link);\r\n\r\n this.editorCanvas.appendChild(this.logoUI);\r\n\r\n this.logoUI.style.position = 'absolute';\r\n this.logoUI.style.pointerEvents = 'all';\r\n this.positionLogo();\r\n }\r\n\r\n private positionLogo() {\r\n if (this.logoUI) {\r\n if (this.uiStyleSettings.logoPosition !== 'right') {\r\n this.logoUI.style.left = `${this.markerImageHolder.offsetLeft + 10}px`;\r\n } else {\r\n this.logoUI.style.left = `${\r\n this.markerImageHolder.offsetLeft +\r\n this.markerImageHolder.offsetWidth -\r\n this.logoUI.clientWidth -\r\n 10\r\n }px`;\r\n }\r\n this.logoUI.style.top = `${\r\n this.markerImageHolder.offsetTop +\r\n this.markerImageHolder.offsetHeight -\r\n this.logoUI.clientHeight -\r\n 10\r\n }px`;\r\n }\r\n }\r\n\r\n private overrideOverflow() {\r\n // backup current state of scrolling and overflow\r\n this.scrollXState = window.scrollX;\r\n this.scrollYState = window.scrollY;\r\n this.bodyOverflowState = document.body.style.overflow;\r\n\r\n window.scroll({ top: 0, left: 0 });\r\n document.body.style.overflow = 'hidden';\r\n }\r\n\r\n private restoreOverflow() {\r\n document.body.style.overflow = this.bodyOverflowState;\r\n window.scroll({ top: this.scrollYState, left: this.scrollXState });\r\n }\r\n\r\n private showUI(): void {\r\n if (this.settings.displayMode === 'popup') {\r\n this.overrideOverflow();\r\n }\r\n\r\n this.coverDiv = document.createElement('div');\r\n // prevent UI from blinking when just rendering state\r\n this.coverDiv.style.visibility = this._silentRenderMode\r\n ? 'hidden'\r\n : 'visible';\r\n this.coverDiv.className = `${this.styles.classNamePrefixBase} ${this.styles.classNamePrefix}`;\r\n // hardcode font size so nothing inside is affected by higher up settings\r\n this.coverDiv.style.fontSize = '16px';\r\n this.coverDiv.style.userSelect = 'none';\r\n\r\n switch (this.settings.displayMode) {\r\n case 'inline': {\r\n this.coverDiv.style.position = 'absolute';\r\n const coverTop = this.settings.uiOffsetTop !== undefined ? \r\n this.target.offsetTop + this.settings.uiOffsetTop :\r\n this.target.offsetTop > this.styles.settings.toolbarHeight\r\n ? this.target.offsetTop - this.styles.settings.toolbarHeight\r\n : 0;\r\n const coverLeft = this.target.offsetLeft + (this.settings.uiOffsetLeft ?? 0); \r\n this.coverDiv.style.top = `${coverTop}px`;\r\n this.coverDiv.style.left = `${coverLeft}px`;\r\n this.coverDiv.style.width = `${this.target.offsetWidth.toString()}px`;\r\n //this.coverDiv.style.height = `${this.target.offsetHeight.toString()}px`;\r\n this.coverDiv.style.zIndex =\r\n this.uiStyleSettings.zIndex !== undefined\r\n ? this.uiStyleSettings.zIndex\r\n : '5';\r\n // flex causes the ui to stretch when toolbox has wider nowrap panels\r\n //this.coverDiv.style.display = 'flex';\r\n break;\r\n }\r\n case 'popup': {\r\n this.coverDiv.style.position = 'absolute';\r\n this.coverDiv.style.top = '0px';\r\n this.coverDiv.style.left = '0px';\r\n this.coverDiv.style.width = '100vw';\r\n this.coverDiv.style.height = `${window.innerHeight}px`;\r\n this.coverDiv.style.backgroundColor = 'rgba(0, 0, 0, 0.75)';\r\n this.coverDiv.style.zIndex =\r\n this.uiStyleSettings.zIndex !== undefined\r\n ? this.uiStyleSettings.zIndex\r\n : '1000';\r\n this.coverDiv.style.display = 'flex';\r\n // this.coverDiv.style.overflow = 'auto';\r\n }\r\n }\r\n this.targetRoot.appendChild(this.coverDiv);\r\n\r\n this.uiDiv = document.createElement('div');\r\n this.uiDiv.style.display = 'flex';\r\n this.uiDiv.style.flexDirection = 'column';\r\n this.uiDiv.style.flexGrow = '2';\r\n this.uiDiv.style.margin =\r\n this.settings.displayMode === 'popup'\r\n ? `${this.settings.popupMargin}px`\r\n : '0px';\r\n if (this.settings.displayMode === 'popup') {\r\n this.uiDiv.style.maxWidth = `calc(100vw - ${this.settings.popupMargin * 2}px`;\r\n }\r\n this.uiDiv.style.border = '0px';\r\n // this.uiDiv.style.overflow = 'hidden';\r\n //this.uiDiv.style.backgroundColor = '#ffffff';\r\n this.coverDiv.appendChild(this.uiDiv);\r\n\r\n this.toolbar = new Toolbar(\r\n this.uiDiv,\r\n this.settings.displayMode,\r\n this._availableMarkerTypes,\r\n this.uiStyleSettings,\r\n this.styles\r\n );\r\n this.toolbar.addButtonClickListener(this.toolbarButtonClicked);\r\n this.toolbar.show(\r\n this._silentRenderMode || this.uiStyleSettings.hideToolbar\r\n ? 'hidden'\r\n : 'visible'\r\n );\r\n\r\n this.contentDiv = document.createElement('div');\r\n this.contentDiv.style.display = 'flex';\r\n this.contentDiv.style.flexDirection = 'row';\r\n this.contentDiv.style.flexGrow = '2';\r\n this.contentDiv.style.flexShrink = '1';\r\n if (this.settings.displayMode === 'popup') {\r\n this.contentDiv.style.backgroundColor = this.uiStyleSettings.canvasBackgroundColor;\r\n this.contentDiv.style.maxHeight = `${\r\n this.windowHeight -\r\n this.settings.popupMargin * 2 -\r\n this.uiStyleSettings.toolbarHeight * 3.5\r\n }px`;\r\n // this.contentDiv.style.maxHeight = `calc(100vh - ${\r\n // this.settings.popupMargin * 2 + this.uiStyleSettings.toolbarHeight * 3.5}px)`;\r\n this.contentDiv.style.maxWidth = `calc(100vw - ${\r\n this.settings.popupMargin * 2\r\n }px)`;\r\n }\r\n this.contentDiv.style.overflow = 'auto';\r\n this.uiDiv.appendChild(this.contentDiv);\r\n\r\n this.editorCanvas = document.createElement('div');\r\n this.editorCanvas.style.flexGrow = '2';\r\n this.editorCanvas.style.flexShrink = '1';\r\n this.editorCanvas.style.position = 'relative';\r\n this.editorCanvas.style.overflow = 'hidden';\r\n this.editorCanvas.style.display = 'flex';\r\n if (this.settings.displayMode === 'popup') {\r\n this.editorCanvas.style.alignItems = 'center';\r\n this.editorCanvas.style.justifyContent = 'center';\r\n }\r\n this.editorCanvas.style.pointerEvents = 'none';\r\n this.editorCanvas.style.transformOrigin = 'left top';\r\n this.editorCanvas.style.transform = `scale(${this.zoomLevel})`;\r\n this.contentDiv.appendChild(this.editorCanvas);\r\n\r\n this.editingTarget =\r\n this.target instanceof HTMLImageElement\r\n ? document.createElement('img')\r\n : document.createElement('canvas');\r\n if (this.settings.displayMode === 'inline' \r\n && this.settings.uiOffsetTop === undefined \r\n && this.target.offsetTop < this.styles.settings.toolbarHeight) {\r\n this.editingTarget.style.marginTop = `${\r\n this.target.offsetTop - this.styles.settings.toolbarHeight\r\n }px`;\r\n }\r\n this.editorCanvas.appendChild(this.editingTarget);\r\n\r\n this.toolbox = new Toolbox(\r\n this.uiDiv,\r\n this.settings.displayMode,\r\n this.uiStyleSettings,\r\n this.styles\r\n );\r\n this.toolbox.show(\r\n this._silentRenderMode || this.uiStyleSettings.hideToolbox\r\n ? 'hidden'\r\n : 'visible'\r\n );\r\n }\r\n\r\n private closeUI() {\r\n if (this.settings.displayMode === 'popup') {\r\n this.restoreOverflow();\r\n }\r\n // @todo better cleanup\r\n this.targetRoot.removeChild(this.coverDiv);\r\n this.coverDiv.remove();\r\n this.coverDiv = null;\r\n }\r\n\r\n private removeMarker(marker: MarkerBase) {\r\n this.markerImage.removeChild(marker.container);\r\n if (this.markers.indexOf(marker) > -1) {\r\n this.markers.splice(this.markers.indexOf(marker), 1);\r\n }\r\n marker.dispose();\r\n }\r\n\r\n public switchToSelectMode(): void {\r\n this.mode = 'select';\r\n this.hideNotesEditor();\r\n if (this._currentMarker !== undefined) {\r\n if (this._currentMarker.state !== 'new') {\r\n this._currentMarker.select();\r\n } else {\r\n this.removeMarker(this._currentMarker);\r\n this.setCurrentMarker();\r\n this.markerImage.style.cursor = 'default';\r\n }\r\n this.addUndoStep();\r\n }\r\n }\r\n\r\n private toolbarButtonClicked(\r\n buttonType: ToolbarButtonType,\r\n value?: typeof MarkerBase | string\r\n ) {\r\n if (buttonType === 'marker' && value !== undefined) {\r\n this.createNewMarker(value);\r\n } else if (buttonType === 'action') {\r\n switch (value) {\r\n case 'select': {\r\n this.switchToSelectMode();\r\n // workaround for text markers in continuos mode\r\n // otherwise it continues creation until clicked a second time\r\n this.switchToSelectMode();\r\n break;\r\n }\r\n case 'delete': {\r\n this.deleteSelectedMarker();\r\n break;\r\n }\r\n case 'clear': {\r\n this.clear();\r\n break;\r\n }\r\n case 'undo': {\r\n this.undo();\r\n break;\r\n }\r\n case 'redo': {\r\n this.redo();\r\n break;\r\n }\r\n case 'zoom': {\r\n this.stepZoom();\r\n break;\r\n }\r\n case 'zoom-out': {\r\n this.zoomLevel = 1;\r\n break;\r\n }\r\n case 'notes': {\r\n if (this.notesArea === undefined) {\r\n this.switchToSelectMode();\r\n this.zoomLevel = 1;\r\n this.showNotesEditor();\r\n } else {\r\n this.switchToSelectMode();\r\n }\r\n break;\r\n }\r\n case 'close': {\r\n this.close();\r\n break;\r\n }\r\n case 'render': {\r\n this.switchToSelectMode();\r\n this.startRenderAndClose();\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes currently selected marker.\r\n */\r\n public deleteSelectedMarker(): void {\r\n if (this._currentMarker !== undefined) {\r\n let cancel = false;\r\n\r\n this.eventListeners['markerbeforedelete'].forEach((listener) => {\r\n const ev = new MarkerEvent(this, this._currentMarker, true);\r\n listener(ev);\r\n if (ev.defaultPrevented) {\r\n cancel = true;\r\n }\r\n });\r\n\r\n if (!cancel) {\r\n const marker = this._currentMarker;\r\n this._currentMarker.dispose();\r\n this.markerImage.removeChild(this._currentMarker.container);\r\n this.markers.splice(this.markers.indexOf(this._currentMarker), 1);\r\n this.setCurrentMarker();\r\n this.addUndoStep();\r\n this.eventListeners['markerdelete'].forEach((listener) =>\r\n listener(new MarkerEvent(this, marker))\r\n );\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Removes all markers.\r\n *\r\n * @since 2.15.0\r\n */\r\n public clear(): void {\r\n let cancel = false;\r\n if (this.markers.length > 0) {\r\n this.eventListeners['markerbeforedelete'].forEach((listener) => {\r\n const ev = new MarkerEvent(this, undefined, true);\r\n listener(ev);\r\n if (ev.defaultPrevented) {\r\n cancel = true;\r\n }\r\n });\r\n if (!cancel) {\r\n this.setCurrentMarker();\r\n for (let i = this.markers.length - 1; i >= 0; i--) {\r\n const marker = this.markers[i];\r\n this.setCurrentMarker(this.markers[i]);\r\n this._currentMarker.dispose();\r\n this.markerImage.removeChild(this._currentMarker.container);\r\n this.markers.splice(this.markers.indexOf(this._currentMarker), 1);\r\n this.eventListeners['markerdelete'].forEach((listener) =>\r\n listener(new MarkerEvent(this, marker))\r\n );\r\n }\r\n this.addUndoStep();\r\n }\r\n }\r\n }\r\n\r\n private notesArea?: HTMLTextAreaElement;\r\n private get isNotesAreaOpen(): boolean {\r\n return this.notesArea !== undefined;\r\n }\r\n\r\n private showNotesEditor() {\r\n if (this._currentMarker !== undefined) {\r\n this.overlayContainer.innerHTML = '';\r\n this.notesArea = document.createElement('textarea');\r\n this.notesArea.className = this.uiStyleSettings.notesAreaStyleClassName;\r\n this.notesArea.style.pointerEvents = 'auto';\r\n this.notesArea.style.alignSelf = 'stretch';\r\n this.notesArea.style.width = '100%';\r\n this.notesArea.style.margin = `${\r\n this.uiStyleSettings.toolbarHeight / 4\r\n }px`;\r\n this.notesArea.value = this._currentMarker.notes ?? '';\r\n this.overlayContainer.appendChild(this.notesArea);\r\n }\r\n }\r\n private hideNotesEditor() {\r\n if (this.isNotesAreaOpen) {\r\n if (this._currentMarker !== undefined) {\r\n this._currentMarker.notes =\r\n this.notesArea.value.trim() !== '' ? this.notesArea.value : undefined;\r\n }\r\n this.overlayContainer.removeChild(this.notesArea);\r\n this.notesArea = undefined;\r\n }\r\n }\r\n\r\n private selectLastMarker() {\r\n if (this.markers.length > 0) {\r\n this.setCurrentMarker(this.markers[this.markers.length - 1]);\r\n } else {\r\n this.setCurrentMarker();\r\n }\r\n }\r\n\r\n private addUndoStep() {\r\n if (\r\n this._currentMarker === undefined ||\r\n this._currentMarker.state !== 'edit'\r\n ) {\r\n const currentState = this.getState();\r\n const lastUndoState = this.undoRedoManager.getLastUndoStep();\r\n if (\r\n lastUndoState &&\r\n (lastUndoState.width !== currentState.width ||\r\n lastUndoState.height !== currentState.height)\r\n ) {\r\n // if the size changed just replace the last step with a resized one\r\n this.undoRedoManager.replaceLastUndoStep(currentState);\r\n // @todo was sometimes fired on zoom events in popup mode\r\n // need to find the root cause before restoring statechange event here (if needed?)\r\n // this.eventListeners['statechange'].forEach((listener) =>\r\n // listener(new MarkerAreaEvent(this))\r\n // );\r\n } else {\r\n const beforeSteps = this.undoRedoManager.undoStepCount;\r\n this.undoRedoManager.addUndoStep(currentState);\r\n if (beforeSteps < this.undoRedoManager.undoStepCount) {\r\n this.eventListeners['statechange'].forEach((listener) =>\r\n listener(new MarkerAreaEvent(this))\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Undo last action.\r\n *\r\n * @since 2.6.0\r\n */\r\n public undo(): void {\r\n this.switchToSelectMode();\r\n this.addUndoStep();\r\n this.undoStep();\r\n }\r\n\r\n private undoStep(): void {\r\n const stepData = this.undoRedoManager.undo();\r\n if (stepData !== undefined) {\r\n this.restoreState(stepData);\r\n this.addDefsToImage();\r\n this.selectLastMarker();\r\n this.eventListeners['statechange'].forEach((listener) =>\r\n listener(new MarkerAreaEvent(this))\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Redo previously undone action.\r\n *\r\n * @since 2.6.0\r\n */\r\n public redo(): void {\r\n this.switchToSelectMode();\r\n this.redoStep();\r\n }\r\n\r\n private redoStep(): void {\r\n const stepData = this.undoRedoManager.redo();\r\n if (stepData !== undefined) {\r\n this.restoreState(stepData);\r\n this.addDefsToImage();\r\n this.selectLastMarker();\r\n this.eventListeners['statechange'].forEach((listener) =>\r\n listener(new MarkerAreaEvent(this))\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Iterate zoom steps (@linkcode zoomSteps).\r\n * Next zoom level is selected or returns to the first zoom level restarting the sequence.\r\n *\r\n * @since 2.12.0\r\n */\r\n public stepZoom(): void {\r\n const zoomStepIndex = this.zoomSteps.indexOf(this.zoomLevel);\r\n this.zoomLevel =\r\n zoomStepIndex < this.zoomSteps.length - 1\r\n ? this.zoomSteps[zoomStepIndex + 1]\r\n : this.zoomSteps[0];\r\n }\r\n\r\n private prevPanPoint: IPoint = { x: 0, y: 0 };\r\n private panTo(point: IPoint) {\r\n this.contentDiv.scrollBy({\r\n left: this.prevPanPoint.x - point.x,\r\n top: this.prevPanPoint.y - point.y,\r\n });\r\n this.prevPanPoint = point;\r\n }\r\n\r\n /**\r\n * Initiates markup rendering.\r\n *\r\n * Get results by adding a render event listener via {@linkcode addRenderEventListener}.\r\n */\r\n public async startRenderAndClose(): Promise {\r\n const result = await this.render();\r\n const state = this.getState();\r\n //this.renderEventListeners.forEach((listener) => listener(result, state));\r\n this.eventListeners['render'].forEach((listener) =>\r\n listener(new MarkerAreaRenderEvent(this, result, state))\r\n );\r\n this.close(true);\r\n }\r\n\r\n /**\r\n * Returns the complete state for the MarkerArea that can be preserved and used\r\n * to continue annotation next time.\r\n *\r\n * @param deselectCurrentMarker - when `true` is passed, currently selected marker will be deselected before getting the state.\r\n */\r\n public getState(deselectCurrentMarker?: boolean): MarkerAreaState {\r\n if (deselectCurrentMarker === true) {\r\n this.setCurrentMarker();\r\n }\r\n const result: MarkerAreaState = {\r\n width: this.imageWidth,\r\n height: this.imageHeight,\r\n markers: [],\r\n };\r\n this.markers.forEach((marker) => result.markers.push(marker.getState()));\r\n return result;\r\n }\r\n\r\n /**\r\n * Restores MarkerArea state to continue previous annotation session.\r\n *\r\n * **IMPORTANT**: call `restoreState()` __after__ you've opened the MarkerArea with {@linkcode show}.\r\n *\r\n * ```typescript\r\n * this.markerArea1.show();\r\n * if (this.currentState) {\r\n * this.markerArea1.restoreState(this.currentState);\r\n * }\r\n * ```\r\n *\r\n * @param state - previously saved state object.\r\n */\r\n public restoreState(state: MarkerAreaState): void {\r\n this.markers.splice(0);\r\n while (this.markerImage.lastChild) {\r\n this.markerImage.removeChild(this.markerImage.lastChild);\r\n }\r\n\r\n state.markers.forEach((markerState) => {\r\n const markerType = this._availableMarkerTypes.find(\r\n (mType) => mType.typeName === markerState.typeName\r\n );\r\n if (markerType !== undefined) {\r\n const marker = this.addNewMarker(markerType);\r\n marker.restoreState(markerState);\r\n this.markers.push(marker);\r\n }\r\n });\r\n if (\r\n state.width &&\r\n state.height &&\r\n (state.width !== this.imageWidth || state.height !== this.imageHeight)\r\n ) {\r\n this.scaleMarkers(\r\n this.imageWidth / state.width,\r\n this.imageHeight / state.height\r\n );\r\n }\r\n this.eventListeners['restorestate'].forEach((listener) =>\r\n listener(new MarkerAreaEvent(this))\r\n );\r\n }\r\n\r\n private addNewMarker(markerType: typeof MarkerBase): MarkerBase {\r\n const g = SvgHelper.createGroup();\r\n this.markerImage.appendChild(g);\r\n\r\n return new markerType(g, this.overlayContainer, this.settings);\r\n }\r\n\r\n /**\r\n * Initiate new marker creation.\r\n *\r\n * marker.js switches to marker creation mode for the marker type specified\r\n * and users can draw a new marker like they would by pressing a corresponding\r\n * toolbar button.\r\n *\r\n * This example initiates creation of a `FrameMarker`:\r\n * ```typescript\r\n * this.markerArea1.createNewMarker(FrameMarker);\r\n * ```\r\n *\r\n * @param markerType\r\n */\r\n public createNewMarker(markerType: typeof MarkerBase | string): void {\r\n let mType: typeof MarkerBase;\r\n\r\n if (typeof markerType === 'string') {\r\n mType = this._availableMarkerTypes.find(\r\n (mt) => mt.typeName === markerType\r\n );\r\n } else {\r\n mType = markerType;\r\n }\r\n\r\n if (mType) {\r\n this.setCurrentMarker();\r\n this.addUndoStep();\r\n this._currentMarker = this.addNewMarker(mType);\r\n this._currentMarker.onMarkerCreated = this.markerCreated;\r\n this._currentMarker.onColorChanged = this.colorChanged;\r\n this._currentMarker.onFillColorChanged = this.fillColorChanged;\r\n this._currentMarker.onStateChanged = this.markerStateChanged;\r\n this.markerImage.style.cursor = 'crosshair';\r\n this.toolbar.setActiveMarkerButton(mType.typeName);\r\n this.toolbox.setPanelButtons(this._currentMarker.toolboxPanels);\r\n this.eventListeners['markercreating'].forEach((listener) =>\r\n listener(new MarkerEvent(this, this._currentMarker))\r\n );\r\n }\r\n }\r\n\r\n private markerCreated(marker: MarkerBase) {\r\n this.mode = 'select';\r\n this.markerImage.style.cursor = 'default';\r\n this.markers.push(marker);\r\n this.setCurrentMarker(marker);\r\n if (\r\n marker instanceof FreehandMarker &&\r\n this.settings.newFreehandMarkerOnPointerUp\r\n ) {\r\n this.createNewMarker(FreehandMarker);\r\n } else {\r\n this.toolbar.setSelectMode();\r\n }\r\n this.addUndoStep();\r\n this.eventListeners['markercreate'].forEach((listener) =>\r\n listener(new MarkerEvent(this, this._currentMarker))\r\n );\r\n }\r\n\r\n private colorChanged(color: string): void {\r\n if (this.settings.defaultColorsFollowCurrentColors) {\r\n this.settings.defaultColor = color;\r\n this.settings.defaultStrokeColor = color;\r\n }\r\n }\r\n private fillColorChanged(color: string): void {\r\n if (this.settings.defaultColorsFollowCurrentColors) {\r\n this.settings.defaultFillColor = color;\r\n }\r\n }\r\n\r\n private markerStateChanged(marker: MarkerBase): void {\r\n this.eventListeners['markerchange'].forEach((listener) =>\r\n listener(new MarkerEvent(this, marker))\r\n );\r\n }\r\n\r\n /**\r\n * Sets the currently selected marker or deselects it if no parameter passed.\r\n *\r\n * @param marker marker to select. Deselects current marker if undefined.\r\n */\r\n public setCurrentMarker(marker?: MarkerBase): void {\r\n if (this._currentMarker !== marker) {\r\n // no need to deselect if not changed\r\n if (this._currentMarker !== undefined) {\r\n this._currentMarker.deselect();\r\n this.toolbar.setCurrentMarker();\r\n this.toolbox.setPanelButtons([]);\r\n\r\n if (!this._isResizing) {\r\n this.eventListeners['markerdeselect'].forEach((listener) =>\r\n listener(new MarkerEvent(this, this._currentMarker))\r\n );\r\n }\r\n }\r\n }\r\n this._currentMarker = marker;\r\n if (this._currentMarker !== undefined && !this._currentMarker.isSelected) {\r\n if (this._currentMarker.state !== 'new') {\r\n this._currentMarker.select();\r\n }\r\n this.toolbar.setCurrentMarker(this._currentMarker);\r\n this.toolbox.setPanelButtons(this._currentMarker.toolboxPanels);\r\n\r\n if (!this._isResizing) {\r\n this.eventListeners['markerselect'].forEach((listener) =>\r\n listener(new MarkerEvent(this, this._currentMarker))\r\n );\r\n }\r\n }\r\n }\r\n\r\n private onPointerDown(ev: PointerEvent) {\r\n if (!this._isFocused) {\r\n this.focus();\r\n }\r\n\r\n this.touchPoints++;\r\n if (this.touchPoints === 1 || ev.pointerType !== 'touch') {\r\n if (\r\n this._currentMarker !== undefined &&\r\n (this._currentMarker.state === 'new' ||\r\n this._currentMarker.state === 'creating')\r\n ) {\r\n this.isDragging = true;\r\n this._currentMarker.pointerDown(\r\n this.clientToLocalCoordinates(ev.clientX, ev.clientY)\r\n );\r\n } else if (this.mode === 'select') {\r\n const hitMarker = this.markers.find((m) => m.ownsTarget(ev.target));\r\n if (hitMarker !== undefined) {\r\n this.setCurrentMarker(hitMarker);\r\n this.isDragging = true;\r\n this._currentMarker.pointerDown(\r\n this.clientToLocalCoordinates(ev.clientX, ev.clientY),\r\n ev.target\r\n );\r\n } else {\r\n this.setCurrentMarker();\r\n this.isDragging = true;\r\n this.prevPanPoint = { x: ev.clientX, y: ev.clientY };\r\n }\r\n }\r\n }\r\n }\r\n\r\n private onDblClick(ev: PointerEvent) {\r\n if (!this._isFocused) {\r\n this.focus();\r\n }\r\n\r\n if (this.mode === 'select') {\r\n const hitMarker = this.markers.find((m) => m.ownsTarget(ev.target));\r\n if (hitMarker !== undefined && hitMarker !== this._currentMarker) {\r\n this.setCurrentMarker(hitMarker);\r\n }\r\n if (this._currentMarker !== undefined) {\r\n this._currentMarker.dblClick(\r\n this.clientToLocalCoordinates(ev.clientX, ev.clientY),\r\n ev.target\r\n );\r\n } else {\r\n this.setCurrentMarker();\r\n }\r\n }\r\n }\r\n\r\n private onPointerMove(ev: PointerEvent) {\r\n if (this.touchPoints === 1 || ev.pointerType !== 'touch') {\r\n if (this._currentMarker !== undefined || this.isDragging) {\r\n // don't swallow the event when editing text markers\r\n if (\r\n this._currentMarker === undefined ||\r\n this._currentMarker.state !== 'edit'\r\n ) {\r\n ev.preventDefault();\r\n }\r\n\r\n if (this._currentMarker !== undefined) {\r\n this._currentMarker.manipulate(\r\n this.clientToLocalCoordinates(ev.clientX, ev.clientY)\r\n );\r\n } else if (this.zoomLevel > 1) {\r\n this.panTo({ x: ev.clientX, y: ev.clientY });\r\n }\r\n }\r\n }\r\n }\r\n private onPointerUp(ev: PointerEvent) {\r\n if (this.touchPoints > 0) {\r\n this.touchPoints--;\r\n }\r\n if (this.touchPoints === 0) {\r\n if (this.isDragging && this._currentMarker !== undefined) {\r\n this._currentMarker.pointerUp(\r\n this.clientToLocalCoordinates(ev.clientX, ev.clientY)\r\n );\r\n }\r\n }\r\n this.isDragging = false;\r\n this.addUndoStep();\r\n }\r\n\r\n private onPointerOut(/*ev: PointerEvent*/) {\r\n if (this.touchPoints > 0) {\r\n this.touchPoints--;\r\n }\r\n }\r\n\r\n private onKeyUp(ev: KeyboardEvent) {\r\n if (\r\n this._currentMarker !== undefined &&\r\n this.notesArea === undefined &&\r\n (ev.key === 'Delete' || ev.key === 'Backspace')\r\n ) {\r\n this.deleteSelectedMarker();\r\n // this.setCurrentMarker();\r\n // this.markerImage.style.cursor = 'default';\r\n // this.addUndoStep();\r\n }\r\n }\r\n\r\n private clientToLocalCoordinates(x: number, y: number): IPoint {\r\n const clientRect = this.markerImage.getBoundingClientRect();\r\n const scaleX = clientRect.width / this.imageWidth / this.zoomLevel;\r\n const scaleY = clientRect.height / this.imageHeight / this.zoomLevel;\r\n return {\r\n x: (x - clientRect.left) / this.zoomLevel / scaleX,\r\n y: (y - clientRect.top) / this.zoomLevel / scaleY,\r\n };\r\n }\r\n\r\n private onWindowResize() {\r\n this.positionUI();\r\n }\r\n\r\n private positionUI() {\r\n this.setTopLeft();\r\n switch (this.settings.displayMode) {\r\n case 'inline': {\r\n const rects = this.target.getClientRects();\r\n const coverTop =\r\n rects.length > 0 && rects.item(0) &&\r\n (rects.item(0).y > this.styles.settings.toolbarHeight)\r\n ? this.target.offsetTop - this.styles.settings.toolbarHeight\r\n : 0;\r\n this.coverDiv.style.top = `${coverTop}px`;\r\n this.coverDiv.style.left = `${this.target.offsetLeft.toString()}px`;\r\n break;\r\n }\r\n case 'popup': {\r\n this.coverDiv.style.top = '0px';\r\n this.coverDiv.style.left = '0px';\r\n this.coverDiv.style.width = '100vw';\r\n this.coverDiv.style.height = `${this.windowHeight}px`;\r\n this.contentDiv.style.maxHeight = `${\r\n this.windowHeight -\r\n this.settings.popupMargin * 2 -\r\n this.styles.settings.toolbarHeight * 3.5\r\n }px`;\r\n }\r\n }\r\n this.positionMarkerImage();\r\n this.positionLogo();\r\n }\r\n\r\n /**\r\n * Add license key.\r\n *\r\n * This is a proxy method for {@linkcode Activator.addKey()}.\r\n *\r\n * @param key - commercial license key.\r\n */\r\n public addLicenseKey(key: string): void {\r\n Activator.addKey(key);\r\n }\r\n\r\n private eventListeners = new EventListenerRepository();\r\n /**\r\n * Adds an event listener for one of the marker.js Live events.\r\n *\r\n * @param eventType - type of the event.\r\n * @param handler - function handling the event.\r\n *\r\n * @since 2.16.0\r\n */\r\n public addEventListener(\r\n eventType: T,\r\n handler: EventHandler\r\n ): void {\r\n this.eventListeners.addEventListener(eventType, handler);\r\n }\r\n\r\n /**\r\n * Removes an event listener for one of the marker.js Live events.\r\n *\r\n * @param eventType - type of the event.\r\n * @param handler - function currently handling the event.\r\n *\r\n * @since 2.16.0\r\n */\r\n public removeEventListener(\r\n eventType: T,\r\n handler: EventHandler\r\n ): void {\r\n this.eventListeners.removeEventListener(eventType, handler);\r\n }\r\n\r\n private _silentRenderMode = false;\r\n /**\r\n * Renders previously saved state without user intervention.\r\n *\r\n * The rendered image is returned to the `render` event handlers (as in the regular interactive process).\r\n * Rendering options set on `MarkerArea` are respected.\r\n *\r\n * @param state state to render\r\n *\r\n * @since 2.17.0\r\n */\r\n public renderState(state: MarkerAreaState): void {\r\n this._silentRenderMode = true;\r\n this.settings.displayMode = 'inline';\r\n if (!this.isOpen) {\r\n this.show();\r\n }\r\n this.restoreState(state);\r\n this.startRenderAndClose();\r\n this._silentRenderMode = false;\r\n }\r\n\r\n private _isFocused = false;\r\n /**\r\n * Returns true when this MarkerArea is focused.\r\n *\r\n * @since 2.19.0\r\n */\r\n public get isFocused(): boolean {\r\n return this._isFocused;\r\n }\r\n\r\n private _previousCurrentMarker?: MarkerBase;\r\n\r\n /**\r\n * Focuses the MarkerArea to receive all input from the window.\r\n *\r\n * Is called automatically when user clicks inside of the marker area. Call manually to set focus explicitly.\r\n *\r\n * @since 2.19.0\r\n */\r\n public focus(): void {\r\n if (!this._isFocused) {\r\n this.attachWindowEvents();\r\n this._isFocused = true;\r\n if (this._previousCurrentMarker !== undefined) {\r\n this.setCurrentMarker(this._previousCurrentMarker);\r\n }\r\n this.eventListeners['focus'].forEach((listener) =>\r\n listener(new MarkerAreaEvent(this))\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Tells MarkerArea to stop reacting to input outside of the immediate marker image.\r\n *\r\n * Call `focus()` to re-enable.\r\n *\r\n * @since 2.19.0\r\n */\r\n public blur(): void {\r\n if (this._isFocused) {\r\n this.detachWindowEvents();\r\n this._isFocused = false;\r\n this._previousCurrentMarker = this._currentMarker;\r\n this.setCurrentMarker();\r\n this.eventListeners['blur'].forEach((listener) =>\r\n listener(new MarkerAreaEvent(this))\r\n );\r\n }\r\n }\r\n}\r\n"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","__","this","constructor","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","n","v","op","TypeError","pop","length","push","__spreadArrays","s","i","il","arguments","r","k","a","j","jl","SvgHelper","document","createElementNS","el","attributes","attributes_1","_i","_a","attr","setAttribute","width","height","rect","toString","setAttributes","x1","y1","x2","y2","line","points","polygon","radius","circle","rx","ry","ellipse","createSVGTransform","id","orient","markerWidth","markerHeight","refX","refY","markerElement","marker","appendChild","text","tspan","textContent","image","x","svgPoint","createSVGPoint","path","Activator","key","RegExp","test","Renderer","target","markerImage","targetCanvas","canvas","createElement","_this","markersOnly","naturalSize","markerImageCopy","baseVal","valueAsString","viewBox","innerHTML","naturalWidth","naturalHeight","data","outerHTML","ctx","getContext","drawImage","DOMURL","window","URL","img","Image","blob","Blob","type","url","createObjectURL","onload","revokeObjectURL","toDataURL","imageType","imageQuality","src","instanceNo","defaultSettings","_classNamePrefix","_classNamePrefixBase","StyleManager","canvasBackgroundColor","toolbarBackgroundColor","toolbarBackgroundHoverColor","toolbarColor","toolbarHeight","toolboxColor","toolboxAccentColor","undoButtonVisible","redoButtonVisible","zoomButtonVisible","zoomOutButtonVisible","clearButtonVisible","resultButtonBlockVisible","logoPosition","classNamePrefix","styleClass","styleSheet","addStyleSheet","name","localName","classes","sheet","insertRule","style","cssRules","styleRule","rules","selector","styleSheetRoot","head","addRule","StyleRule","addClass","StyleClass","removeChild","undefined","markerjsContainer","displayMode","markerItems","uiStyleSettings","styles","addStyles","adjustLayout","bind","overflowButtonClicked","setCurrentMarker","Toolbar","visiblity","uiContainer","visibility","className","toolbarStyleClass","fadeInAnimationClassName","toolbarStyleColorsClassName","toolbarStyleColorsClass","actionButtonBlock","toolbarBlockStyleClass","whiteSpace","addActionButton","notesButtonVisible","markerButtonBlock","flexGrow","textAlign","markerButtonOverflowBlock","toolbarOverflowBlockStyleClass","toolbarOverflowBlockStyleColorsClassName","toolbarOverflowBlockStyleColorsClass","display","forEach","mi","buttonContainer","toolbarButtonStyleClass","typeName","title","icon","addEventListener","markerToolbarButtonClicked","buttons","markerButtons","overflowButton","toolbarButtonStyleColorsClassName","toolbarButtonStyleColorsClass","resultButtonBlock","setSelectMode","listener","buttonClickListeners","indexOf","splice","resetButtonStyles","setActiveButton","numberToFit","Math","floor","clientWidth","buttonIndex","replace","top","offsetTop","offsetHeight","right","offsetWidth","offsetLeft","button","trim","toolbarActiveButtonStyleColorsClassName","toolbarActiveButtonStyleColorsClass","container","actionButton","actionToolbarButtonClicked","fill","selectButtonColor","deleteButtonColor","okButtonColor","closeButtonColor","round","buttonPadding","markerType","action","activeBtn","find","btn","getAttribute","currentMarker","filter","fillOpacity","pointerEvents","panelButtonClick","Toolbox","toolboxStyleClass","toolboxStyleColorsClass","toolboxButtonRowStyleClass","toolboxButtonRowStyleColorsClass","toolboxPanelRowStyleClass","toolboxPanelRowStyleColorsClass","toolboxBackgroundColor","toolboxButtonStyleClass","toolboxButtonStyleColorsClass","toolboxActiveButtonStyleColorsClass","toolboxStyleColorsClassName","panels","panelRow","toolboxPanelRowStyleColorsClassName","buttonRow","toolboxButtonRowStyleColorsClassName","panelButtons","panel","panelBtnDiv","toolboxButtonStyleColorsClassName","panelIndex","activePanel","panelUI","getUi","margin","fadeOutAnimationClassName","setTimeout","pb","index","toolboxActiveButtonStyleColorsClassName","colors","currentColor","_super","setCurrentColor","getColorBox","ColorPickerPanel","panelDiv","overflow","color","colorBoxContainer","colorBoxes","buttonHeight","boxSizing","padding","marginRight","marginBottom","borderWidth","borderStyle","borderRadius","borderColor","colorBox","backgroundColor","box","onColorChanged","ToolboxPanel","overlayContainer","settings","_container","_overlayContainer","globalSettings","stateChanged","colorChanged","fillColorChanged","MarkerBase","getPrototypeOf","_state","_isSelected","cursor","manipulationStartState","getState","point","element","childNodes","insertBefore","state","notes","scaleX","scaleY","onFillColorChanged","onStateChanged","currentState","JSON","stringify","findGripByVisual","RectangularBoxMarkerGrips","gripVisual","topLeft","ownsTarget","topCenter","topRight","centerLeft","centerRight","bottomLeft","bottomCenter","bottomRight","visual","createGroup","createCircle","GRIP_SIZE","ResizeGrip","TransformMatrix","matrix","c","currentMatrix","newMatrix","transform","appendItem","createTransform","setupControlBox","RectangularBoxMarkerBase","left","_visual","translate","controlGrips","rotatorGrip","pointerDown","manipulationStartLeft","manipulationStartTop","manipulationStartWidth","manipulationStartHeight","rotatedPoint","unrotatePoint","manipulationStartX","manipulationStartY","offsetX","offsetY","select","activeGrip","rotatedCenter","rotatePoint","centerX","centerY","moveVisual","rotate","getItem","setRotate","rotationAngle","replaceItem","adjustControlBox","inState","pointerUp","defaultSize","manipulate","onMarkerCreated","_suppressMarkerCreateEvent","resize","newX","newWidth","newY","newHeight","setSize","abs","sign","atan","PI","applyRotation","getCTM","createPoint","matrixTransform","inverse","controlBox","deselect","setTranslate","CB_DISTANCE","controlRect","createRect","disableRotation","rotatorGripLine","createLine","addControlGrips","positionGrips","createGrip","grip","gripSize","cx","cy","bottom","positionGrip","assign","visualTransformMatrix","toITransformMatrix","containerTransformMatrix","restoreState","rbmState","setMatrix","toSVGMatrix","scale","rPoint","setStrokeColor","setFillColor","setStrokeWidth","setStrokeDasharray","createVisual","RectangleMarker","fillColor","strokeColor","strokeWidth","strokeDasharray","opacity","addMarkerVisualToContainer","dashes","rectState","widths","currentWidth","setCurrentWidth","LineWidthPanel","lineWidth","widthBoxContainer","alignItems","justifyContent","innerText","widthBox","minHeight","hr","minWidth","border","borderTop","widthBoxes","onWidthChanged","currentStyle","setCurrentStyle","LineStylePanel","lineStyle","styleBoxContainer","maxWidth","styleBox","styleSample","styleBoxes","newStyle","onStyleChanged","defaultColor","defaultStrokeWidth","defaultStrokeDasharray","strokePanel","defaultColorSet","strokeWidthPanel","defaultStrokeWidths","strokeStylePanel","defaultStrokeDasharrays","FrameMarker","LinearMarkerBase","grip1","grip2","manipulationStartX1","manipulationStartY1","manipulationStartX2","manipulationStartY2","defaultLength","adjustVisual","lmbState","LineMarker","selectorLine","visibleLine","lmState","fonts","currentFont","setCurrentFont","FontFamilyPanel","font","fontBoxContainer","fontBox","fontFamily","fontLabel","textOverflow","fontBoxes","newFont","onFontChanged","DEFAULT_TEXT","defaultFontFamily","setColor","setFont","renderText","sizeText","textEditDivClicked","showTextEditor","positionTextEditor","wrapText","colorPanel","fontFamilyPanel","defaultFontFamilies","TextMarker","textElement","bgRectangle","found_1","span","createText","isMoved","pointerDownPoint","pointerDownTimestamp","Date","now","getTextAspectRatio","textLines","longestLineChars","lines","split","boxAspectRatio","processedLines_1","textAspectRatio","maxLineLength_1","Number","MAX_VALUE","longestLine","lastIndexOf","reminderLine","maxEnd","substring","join","lastChild","createTSpan","textSize","getBBox","xScale","yScale","min","xSign","getComputedStyle","direction","textBBox","getTextScale","position","getTextPosition","navigator","userAgent","setScale","textEditDiv","textEditor","lineHeight","contentEditable","ev","stopPropagation","fontSize","parseFloat","parseInt","max","cancelBubble","clipboardData","content","getData","selection","getSelection","rangeCount","deleteFromDocument","getRangeAt","insertNode","createTextNode","preventDefault","hideVisual","focus","execCommand","maxHeight","textScale","rPosition","rWH","showVisual","dblClick","hideControlBox","showControlBox","textState","pixelRatio","freehandPixelRatio","addCanvas","finishCreation","setLineWidth","lineWidthPanel","FreehandMarker","drawingImage","createImage","canvasContext","strokeStyle","beginPath","moveTo","drawing","lineTo","stroke","closePath","newFreehandMarkerOnPointerUp","canvasElement","clientHeight","imgData","getImageData","startX","startY","endX","endY","containsData","row","col","tmpCanvas","putImageData","drawingImgUrl","setDrawingImage","currentType","setCurrentType","ArrowTypePanel","ti","arrowType","typeBoxContainer","this_1","leftTip","marginLeft","lineBox","rightTip","typeBoxes","newType","onArrowTypeChanged","getArrowPoints","setArrowType","arrowTypePanel","ArrowMarker","arrow1","arrow2","arrowBaseWidth","arrowBaseHeight","createPolygon","createTips","lineAngle1","a1transform","a2transform","amState","defaultFillColor","fillPanel","CoverMarker","opacities","currentOpacity","setCurrentOpacity","OpacityPanel","opacityBoxContainer","opacityBoxes","onOpacityChanged","setOpacity","defaultHighlightColor","defaultHighlightOpacity","opacityPanel","defaultOpacitySteps","HighlightMarker","defaultStrokeColor","bgColor","setBgColor","getTipPoints","positionTip","setTipPoints","TextColorIcon","bgColorPanel","FillColorIcon","tipGrip","CalloutMarker","tip","createTip","tipMoving","isCreating","tipPosition","tipBase1Position","tipBase2Position","offset","baseWidth","cornerAngle","calloutState","EllipseMarker","createEllipse","MeasurementMarker","tip1","tip2","tipLength","EllipseFrameMarker","UndoRedoManager","undoStack","redoStack","stepData","lastRedoStep","lastStep","CurveMarker","selectorCurve","visibleCurve","curveGrip","curveX","curveY","createPath","getPathD","manipulationStartCurveX","manipulationStartCurveY","curveControlLine1","curveControlLine2","firstChild","textColor","defaultCaptionFontSize","captionText","defaultCaptionText","sizeCaption","setCaptionText","finishTextEditing","setTextColor","textColorPanel","CaptionFrameMarker","frame","captionBg","captionElement","textAnchor","dominantBaseline","captionBoxWidth","PADDING","captionBoxHeight","textEditBox","transformOrigin","frState","markerArea","cancelable","MarkerAreaEvent","_defaultPrevented","dataUrl","EventListenerRepository","eventType","handler","DEFAULT_MARKER_TYPES","Settings","_instanceNo","MarkerArea","instanceCounter","targetRoot","removeStyleSheet","open","setTopLeft","toolbarButtonClicked","createNewMarker","addNewMarker","markerCreated","onPointerDown","onDblClick","onPointerMove","onPointerUp","onPointerOut","onKeyUp","overrideOverflow","restoreOverflow","close","closeUI","addCloseEventListener","removeCloseEventListener","addRenderEventListener","removeRenderEventListener","clientToLocalCoordinates","onWindowResize","deleteSelectedMarker","setWindowHeight","removeMarker","onPopupTargetResize","showNotesEditor","hideNotesEditor","stepZoom","blur","markerStateChanged","switchToSelectMode","addDefs","addDefsToImage","_availableMarkerTypes","mt","typeType","ALL_MARKER_TYPES","allT","_currentMarker","_isOpen","undoRedoManager","isUndoPossible","isRedoPossible","_zoomLevel","editorCanvas","contentDiv","scrollTo","setupResizeObserver","setEditingTarget","initMarkerCanvas","initOverlay","attachEvents","isLicensed","addLogo","_isFocused","Style","markers","showUI","eventListeners","renderer","renderAtNaturalSize","renderImageType","renderImageQuality","renderMarkersOnly","renderWidth","renderHeight","rasterize","HTMLImageElement","renderTarget","suppressBeforeClose","isOpen","cancel_1","defaultPrevented","coverDiv","targetObserver","unobserve","removeEventListener","detachEvents","event","ResizeObserver","observe","ratio","windowHeight","innerHeight","_isResizing","imageWidth","imageHeight","editingTarget","markerImageHolder","positionMarkerImage","toolbar","positionLogo","scaleMarkers","preScaleSelectedMarker","targetRect","getBoundingClientRect","bodyRect","setProperty","nodes","defs","createDefs","append","zoomLevel","attachWindowEvents","detachWindowEvents","logoUI","link","href","justifyItems","scrollXState","scrollX","scrollYState","scrollY","bodyOverflowState","scroll","_silentRenderMode","classNamePrefixBase","userSelect","coverTop","uiOffsetTop","coverLeft","uiOffsetLeft","zIndex","uiDiv","flexDirection","popupMargin","addButtonClickListener","show","hideToolbar","flexShrink","marginTop","toolbox","hideToolbox","remove","dispose","mode","addUndoStep","buttonType","clear","undo","redo","notesArea","startRenderAndClose","cancel_2","MarkerEvent","marker_1","cancel","notesAreaStyleClassName","alignSelf","isNotesAreaOpen","lastUndoState","getLastUndoStep","beforeSteps","undoStepCount","replaceLastUndoStep","undoStep","selectLastMarker","redoStep","zoomStepIndex","zoomSteps","scrollBy","prevPanPoint","render","MarkerAreaRenderEvent","deselectCurrentMarker","markerState","mType","setActiveMarkerButton","setPanelButtons","toolboxPanels","defaultColorsFollowCurrentColors","isSelected","touchPoints","pointerType","hitMarker","m","isDragging","clientX","clientY","panTo","clientRect","positionUI","rects","getClientRects","item","addKey","_previousCurrentMarker"],"sourceRoot":""} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/deps/pdfmake.js b/src/main/resources/static/js/amcharts5/deps/pdfmake.js new file mode 100644 index 00000000..88f3813d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/deps/pdfmake.js @@ -0,0 +1,3 @@ +/*! For license information please see pdfmake.js.LICENSE.txt */ +(self.webpackChunk_am5=self.webpackChunk_am5||[]).push([[643],{6886:function(A,t,e){"use strict";e.r(t),t.default={"Roboto-Italic.ttf":"AAEAAAASAQAABAAgR0RFRtRX1FkAAgp8AAACREdQT1NKcuCzAAIMwAAAUiRHU1VCw4aZEQACXuQAABfoT1MvMqCnsO0AAAGoAAAAYGNtYXBAbb9DAAAafAAABoBjdnQgJEEG5QAAI5QAAABMZnBnbWf0XKsAACD8AAABvGdhc3AACAATAAIKcAAAAAxnbHlmoLsktAAALagAAdn2aGRteCEe/AUAABWQAAAE7GhlYWT4gasAAAABLAAAADZoaGVhDKYSegAAAWQAAAAkaG10eHJO1ygAAAIIAAATiGxvY2EXM5zBAAAj4AAACcZtYXhwBxICWwAAAYgAAAAgbmFtZTlLZFAAAgegAAACrnBvc3T/YQBkAAIKUAAAACBwcmVwdKCP7AAAIrgAAADbAAEAAAACAAAcadIiXw889QAbCAAAAAAAxPARLgAAAADQ206M+jj91QlMCHMAAgAJAAIAAAAAAAAAAQAAB2z+DAAACRb6OP52CUwIAAGzAAAAAAAAAAAAAAAABOIAAQAABOIAkAAWAFYABQABAAAAAAAOAAACAAFzAAYAAQADBAsBkAAFAAAFmgUzAAABHwWaBTMAAAPRAGYCAAAAAgAAAAAAAAAAAOAACv9QACF/AAAAIQAAAABHT09HAAEAAP/9BgD+AABmB5oCACAAAZ8AAAAABDoFsAAgACAAAgOWAGQACgAAAAoAAAH2AAAB9gAAAgkAQwKFAMgE0QBSBGYASgW5ALsE3QA6AWQAqgKxAG0Cvf+PA2IAawRwAEwBkP+PAi4AGQIVADUDPf+PBGYAaARmAPkEZgAXBGYANARmAAUEZgByBGYAcARmAJ0EZgBBBGYAlAHrACsBrv+bA/wAQQRMAHAEGAA6A7QApQcCAEQFGv+vBN8AOwUXAHQFIQA7BHMAOwRUADsFUwB5BZIAOwImAEkEUgAKBOcAOwQ3ADsG0AA7BZIAOwVgAHcE7wA7BWAAbwTRADoEpQAnBKsAqAUSAGcE+gCkBuwAwwTn/9QEswCoBK//6wIZ//8DOQC/Ahn/egNIAE8Div+BAnAAzwRDADMEZQAfBBoARgRqAEsEJgBFArwAdARlAAQEUAAfAewALwHk/xQD+QAgAewALwbXAB4EUgAfBHcARQRl/9cEcwBJAqoAHwQKAC4CkwBDBFEAWwPMAG4F3wCAA+P/xAO2/6UD4//tAqoAOAHuACECqv+MBVEAaQHu//EESABSBIz/8wWSABIEvQBTAeb/9wTM/90DSADbBiMAYgOCAMMDrgBZBFYAgQYkAGEDmADjAvAA6AQvACUC4gBcAuIAbgJ5ANUEb//lA9UAewIQAKUB9v/IAuIA3wORAMADrQAPBbkAuQYPALQGEwCeA7b/0wdL/4QELQAoBWAAIASgADgEpwAeBpcAEwSWAFwEeABEBG8AOQSD/+AFeQA1AfUALgRbAC0EOAAiAiIAIwVqADUEbwAkB3AAVAcWAEcB9wAzBWcAUQKu/0kFXgBnBHkAQgVvAGcE1wBaAf7/CQQhAD4DsQEXA3wBJgOZAOMDWgEHAewBDgKiAQECI/+vA7MA3QLvAMICUv/pAAr9agAK/esACv0LAAr99QAK/NsB6vy7AgcBIQP2APMCEQClBFsAQwWD/7EFUQBpBSD/xAR4AAwFkwBEBHj/2gWZAFQFaACGBTMACgRsAEgEo//wA+0AhARvAEMEOQApBA8AggRvACQEdQBzAo0AhQRW/7cD2AA/BKkAYARv/9wENgBOBG8ASgQWAIcERQBnBYIAQQV5AE8GbgBmBIcAUQQrAGcGIgBmBdsAoQVFAHgIWf/MCGwAQwZaALQFkgBCBO4ANAXg/4sHFf+sBKUAJQWSAEMFiP/KBOoAkwYHAFsFtgBBBVoAzgdXAEIHjgBCBe0AiQbAAEUE6AA2BUUAdAb6AEkE+//oBFQARgR5ADADSwAtBLn/jQX7/6UD+wAhBIUALwQ7AC8Ehv/IBcsAMASEAC8EhQAvA8QAYAWqAEwEowAvBEIAewZQAC8GdQAkBNsAVgYQADAEQQAwBDYANAZfADAETP+/BFAAHwQ2AE4Gn//DBrkALwRwAB8EhQAvBtwAbwYGAE8EPwAuBv4ASQXUACwEt/+6BC//ogbfAFoF5wBOBqcAJgW+ACkIyQBIB58ALgQN/84Dx//KBVEAaQRyAEIE7QCtA+4AhAVRAGoEbwBEBtUAdAX/AFIG3ABvBgYATwUUAGYEMABNBOEAQAAK/OgACv0LAAr+FwAK/jsACvo4AAr6TwQ/AC4E/gA6BHD/1wRLADUDfwAkBMAAQwPwACQE7AA2BGYALQZkALsFYwB0B50AOgWSACQH/ABCBskAJAXKAHEEuABfBv8ArAU9AFcFTwDEBFIAmAVQAOwGCgCKBKMABwTsADUEQwAtBZAAQwRvACQFZwBRBI4APASO//wEnf/4Azr/6QTaADEGawAyBrkATAYvAK0FDQBoBDIArwPyAKAHj//fBk3/2gfIADsGeAAjBNoAagQHAEwFiwCaBQMAfQVFAGoDEgDyA/8AAAf0AAAD/wAAB/QAAAKuAAACBAAAAVwAAARmAAACKQAAAZ8AAADVAAAACgAAAi0AGQItABkFIgCnBhkAmQOU/18BlwCuAZcAiQGV/5gBlwDUAsgAtgLPAJUCtv+UBFEAdwR2//YCpwCgA7EAOQU7ADkA+QAaB3kAlwJeAF8CXgACA5H/7wLiAGEDUAB+BIz/8wYuAAoGaAA5CD8AOgc0ACIGBgAfBGYAUQW3AEMEDABJBFwACgUp//IFMP/lBcQAzAO7AEsIBQA1BOUA6gT6AIIGAQC1BqwAkgalAI8GQwC+BHYATQVtACQElf+sBHkAqwSqAEEIBQBNAgb/GgRpADEETABwA/z/1AQZABkD8wBBAkQAeAKFAHAB/v/jBNcAdARWAFgEcgB0BqoAdAaqAHQE0gB0BnIAKQAKAAAH/v+rCDUAXAQKAGIEhQBBAff/DwGP/70DkgETA4wBEgONARED4ADNA/kAzgPfACID2wDSA5IBEQH4APwEbP+lBDkAHQRkAEcEZwAdA9IAHQO4AB0EkgBMBMcAHQHjACoDvP/2BD0AHQOiAB0F3gAdBMcAHQShAEoERQAdBKEARQQzAB0ECgARBBAAbQRkAEUETwB6BfAAlQQ9/7YEFQB0BA3/3ALiAB0C4gBrAuL/6QLi//sC4v/wAuIAFgLiAB4C4gAvAuIACwLiADYDhACTAqoBCwQk/5oEqABLBS0AQwUHAEQD/gAlBR8ARAP6ACUECgASBB0ABgQlADQDnQAdBE//sAShAEoET/+wA3j/0wSzAB0D2//VBUgAUQT6AH4E1gAMBVIAbARkAEcHE//EByEAHQVUAG0EsgAdBEIAHwUH/4kF5/+vBCgAEQTQAB8ENwAeBKb/xAQJAFgFCgAdBFIAWgYqAB0GgwAdBQAAUAXNAB8ENwAfBGMAIAZOAB0Ebv/fA/z/+gYh/68EYQAeBOwAHgUZAGkFoABQBEcAdASO/7YGOgBsBFIAWgRSAB0FoQAvBK8AQQQoABEEoQBKBB3//wPPAB4H7gAdBJH/3QRlAB8EHABDBHoARwRzACQDaACpBHT/1wSDAEYEJgBFBGUANQVhAIEFjACEBXIARAW9AIUFwACFA8IAuwRpADkDnQAdBEH/gQS0/9MC4gCQAuIAYQLiAIkC4gCRAuIAogLiAH4C4gCpBFP/1QQYACsGewBJBJ8APwTkAGQCAP8JAf//CQH2AC4B9v96AfYALgH2//EEOQAdAfYAAAIuABkFPwAvBT8ALwRuAD0EqwCoApP/9AUa/68FGv+vBRr/rwUa/68FGv+vBRr/rwUa/68FFwB0BHMAOwRzADsEcwA7BHMAOwImAEkCJgBJAiYASQImAEkFkgA7BWAAdwVgAHcFYAB3BWAAdwVgAHcFEgBnBRIAZwUSAGcFEgBnBLMAqARDADMEQwAzBEMAMwRDADMEQwAzBEMAMwRDADMEGgBGBCYARQQmAEUEJgBFBCYARQH1AC4B9QAuAfUALgH1AC4EUgAfBHcARQR3AEUEdwBFBHcARQR3AEUEUQBbBFEAWwRRAFsEUQBbA7b/pQO2/6UFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFFwB0BBoARgUXAHQEGgBGBRcAdAQaAEYFFwB0BBoARgUhADsFAABLBHMAOwQmAEUEcwA7BCYARQRzADsEJgBFBHMAOwQmAEUEcwA7BCYARQVTAHkEZQAEBVMAeQRlAAQFUwB5BGUABAVTAHkEZQAEBZIAOwRQAB8CJgBJAfUAEQImAEkB9QAaAiYASQH1AC4CJv+OAez/cAImAEkGeABJA9AALwRSAAoB/v8JBOcAOwP5ACAENwA7AewALwQ3ADsB7P+jBDcAOwKCAC8ENwA7AsgALwWSADsEUgAfBZIAOwRSAB8FkgA7BFIAHwRSAB8FYAB3BHcARQVgAHcEdwBFBWAAdwR3AEUE0QA6AqoAHwTRADoCqv+fBNEAOgKqAB8EpQAnBAoALgSlACcECgAuBKUAJwQKAC4EpQAnBAoALgSlACcECgAuBKsAqAKTAEMEqwCoApMAQwSrAKgCuwBDBRIAZwRRAFsFEgBnBFEAWwUSAGcEUQBbBRIAZwRRAFsFEgBnBFEAWwUSAGcEUQBbBuwAwwXfAIAEswCoA7b/pQSzAKgEr//rA+P/7QSv/+sD4//tBK//6wPj/+0HS/+EBpcAEwVgACAEbwA5BGf/sARn/7AEEABtBGz/pQRs/6UEbP+lBGz/pQRs/6UEbP+lBGz/pQRkAEcD0gAdA9IAHQPSAB0D0gAdAeMAKgHjACoB4wAqAeMAKgTHAB0EoQBKBKEASgShAEoEoQBKBKEASgRkAEUEZABFBGQARQRkAEUEFQB0BGz/pQRs/6UEbP+lBGQARwRkAEcEZABHBGQARwRnAB0D0gAdA9IAHQPSAB0D0gAdA9IAHQSSAEwEkgBMBJIATASSAEwExwAdAeMADwHjABgB4wAqAeP/egHjACoDvP/2BD0AHQOiAB0DogAdA6IAHQOiAB0ExwAdBMcAHQTHAB0EoQBKBKEASgShAEoEMwAdBDMAHQQzAB0ECgARBAoAEQQKABEECgARBBAAbQQQAG0EEABtBGQARQRkAEUEZABFBGQARQRkAEUEZABFBfAAlQQVAHQEFQB0BA3/3AQN/9wEDf/cBRr/rwTXAGMF9gBxAooAdwV0AGoFF//uBUcAHgKNACAFGv+vBN8AOwRzADsEr//rBZIAOwImAEkE5wA7BtAAOwWSADsFYAB3BO8AOwSrAKgEswCoBOf/1AImAEkEswCoBGwASAQ5ACkEbwAkAo0AhQRFAGcEWwAtBHcARQRv/+UDzABuA+P/xAKNAGcERQBnBHcARQRFAGcGbgBmBHMAOwRbAEMEpQAnAiYASQImAEkEUgAKBQcARATnADsE6gCTBRr/rwTfADsEWwBDBHMAOwWSAEMG0AA7BZIAOwVgAHcFkwBEBO8AOwUXAHQEqwCoBOf/1ARDADMEJgBFBIUALwR3AEUEZf/XBBoARgO2/6UD4//EBCYARQNLAC0ECgAuAewALwH1AC4B5P8UBDsALwO2/6UG7ADDBd8AgAbsAMMF3wCABuwAwwXfAIAEswCoA7b/pQFkAKoChQDIBBIAQwH+/wkBlwCJBtAAOwbXAB4FGv+vBEMAMwRzADsFkgBDBCYARQSFAC8FaACGBXkATwTtAK0D7gCECC0ARQkWAHcEpQAlA/sAIQUXAHQEGgBGBLMAqAPtAIQCJgBJBxX/rAX7/6UCJgBJBRr/rwRDADMFGv+vBEMAMwdL/4QGlwATBHMAOwQmAEUFZwBRBCEAPgQhAD4HFf+sBfv/pQSlACUD+wAhBZIAQwSFAC8FkgBDBIUALwVgAHcEdwBFBVEAaQRyAEIFUQBpBHIAQgVFAHQENgA0BOoAkwO2/6UE6gCTA7b/pQTqAJMDtv+lBVoAzgRCAHsGwABFBhAAMATn/9QD4//EBGoASwWI/8oEhv/IBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBHMAOwQmAEUEcwA7BCYARQRzADsEJgBFBHMAOwQmAEUEcwA7BCYARQRzADsEJgBFBHMAOwQmAEUEcwA7BCYARQImAEkB9QAuAiYADgHs//EFYAB3BHcARQVgAHcEdwBFBWAAdwR3AEUFYAB3BHcARQVgAHcEdwBFBWAAdwR3AEUFYAB3BHcARQVeAGcEeQBCBV4AZwR5AEIFXgBnBHkAQgVeAGcEeQBCBV4AZwR5AEIFEgBnBFEAWwUSAGcEUQBbBW8AZwTXAFoFbwBnBNcAWgVvAGcE1wBaBW8AZwTXAFoFbwBnBNcAWgSzAKgDtv+lBLMAqAO2/6UEswCoA7b/pQSIAEsEiAAABQcARAQ7AC8FkgA7BIQALwSrAKgDxABgBOf/1APj/8QFWgDOBEIAewVaAM4EQgB7BFsAQwNLAC0HFf+sBfv/pQYKAIoEowAHBFAAHwToACsE6AArBFsAEANL/+YFGwBYBBIAOQWSAEMEhQAvBZIAOwSEAC8G0AA7BcsAMAWI/8oEhv/IBLMAqAPtAF0E5//UA+P/xAQ5ACkEVP/XBhkAmQRmABcEZgA0BGYABQRmAHIEegCUBI4AfAVTAHkEZQAEBZIAOwRSAB8FGv+vBEMAMwRzADsEJgBFAib/3wH1/40FYAB3BHcARQTRADoCqgAfBRIAZwRRAFsEj/+yBN8AOwRlAB8FIQA7BGoASwUhADsEagBLBZIAOwRQAB8E5wA7A/kAIATnADsD+QAgBDcAOwHs//IG0AA7BtcAHgWSADsEUgAfBO8AOwRl/9cE0QA6Aqr/7gSlACcECgAuBKsAqAKTAEME+gCkA8wAbgT6AKQDzABuBuwAwwXfAIAEr//rA+P/7QWm/wwEbP+lBA7/4QUD//0CHwABBKsAHQRR/5sE4AAWBGz/pQQ5AB0D0gAdBA3/3ATHAB0B4wAqBD0AHQXeAB0EoQBKBEUAHQQQAG0EFQB0BD3/tgHjACoEFQB0A9IAHQOdAB0ECgARAeMAKgHjACoDvP/2BD0AHQQJAFgEbP+lBDkAHQOdAB0D0gAdBNAAHwXeAB0ExwAdBKEASgSzAB0ERQAdBGQARwQQAG0EPf+2BCgAEQTHAB0EZABIBBUAdAWhAC8E0AAfBAkAWAVIAFEFGv+vBEMAMwRzADsEJgBFAAAAAQAABOQJCgQAAAICAgMFBQYFAgMDBAUCAgIEBQUFBQUFBQUFBQICBAUFBAgGBQYGBQUGBgIFBgUIBgYGBgUFBQYGCAYFBQIEAgQEAwUFBQUFAwUFAgIEAggFBQUFAwUDBQQHBAQEAwIDBgIFBQYFAgUEBwQEBQcEAwUDAwMFBAICAwQEBgcHBAgFBgUFBwUFBQUGAgUFAgYFCAgCBgMGBQYFAgUEBAQEAgMCBAMDAAAAAAACAgQCBQYGBgUGBQYGBgUFBAUFBQUFAwUEBQUFBQUFBgYHBQUHBwYJCQcGBgcIBQYGBgcGBggJBwgGBggGBQUEBQcEBQUFBwUFBAYFBQcHBQcFBQcFBQUHCAUFCAcFCAcFBQgHBwYKCQUEBgUGBAYFCAcIBwYFBQAAAAAAAAUGBQUEBQQGBQcGCQYJCAcFCAYGBQYHBQYFBgUGBQUFBAUHCAcGBQQJBwkHBQUGBgYDBQkFCQMCAgUCAgEAAgIGBwQCAgICAwMDBQUDBAYBCAMDBAMEBQcHCQgHBQYFBQYGBgQJBgYHCAcHBQYFBQUJAgUFBAUEAwMCBQUFCAgFBwAJCQUFAgIEBAQEBAQEBAIFBQUFBAQFBQIEBQQHBQUFBQUFBQUFBwUFBQMDAwMDAwMDAwMEAwUFBgYEBgQFBQUEBQUFBAUEBgYFBgUICAYFBQYHBQUFBQUGBQcHBgcFBQcFBAcFBgYGBQUHBQUGBQUFBQQJBQUFBQUEBQUFBQYGBgYGBAUEBQUDAwMDAwMDBQUHBQYCAgICAgIFAgIGBgUFAwYGBgYGBgYGBQUFBQICAgIGBgYGBgYGBgYGBQUFBQUFBQUFBQUFBQICAgIFBQUFBQUFBQUFBAQGBQYFBgUGBQYFBgUGBQYGBQUFBQUFBQUFBQYFBgUGBQYFBgUCAgICAgICAgIHBAUCBgQFAgUCBQMFAwYFBgUGBQUGBQYFBgUFAwUDBQMFBQUFBQUFBQUFBQMFAwUDBgUGBQYFBgUGBQYFCAcFBAUFBAUEBQQIBwYFBQUFBQUF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c3dzd3N/c4dzkXObc7Jz0XPvdA50LnQ6dEZ0d3S4dR11QnVOdV51cnZGdmJ2f3aSdqZ273d6eBx4qXi1eXh503pZewR7ZnvpfEd8uH1dfcl+W368fyR/Pn9Yf3J/jH//gCeAYYB9gLKBO4GBgfiCOYJHglWCjoKbgsKC24Lng0qDo4Q3hMKFQ4YXhheHlIfxiCKIgIiviMWJKIl6ibqKLIqFisWLCItIi2KLqIwejHqMx40TjU+Nto4EjiKOWI6cjsSPFo9Uj7OQA5BhkLWRI5FPkYuRvpISkleSi5LIkxuTRpOVlAaUSJSolQiVNZW+liCWN5aBlz6XuZgtmHyYwpkEmUyZzJo4mq+a2psQm4ibuZwHnDqcepzunVCdu54enoyfA597n9KgDaBpoMGhN6G8ofqiS6KUotijE6Nbo5uj5aRApEyknaURpZyl+aZIptCnM6eYp/iooqiuqQGpTamiqeuqZarSqzerq6xHrM6tb63irk+uqK8Tr5yvpLAQsH6w6bFysdWyQLKSsvSzWrOFs9q0BLRdtKG0tbTJtNu077UBtRi1LLWOtba2RLa0tw23FbcdtyW3MLc4t0S3sLewt7i4KLiYuPq5QLmoub+51rntugS6HLovuju6R7peunC6h7qaurG6w7rauu27BLsbuy27RLtbu267hbuXu667wbvTu+q7/LwSvCO8NrxJvFW8Ybx4vIq8oLyzvMm82rzxvQm9Gr0xvUO9Wb1qvX29lL2mvby9z73hvfO+Cr4gvje+Sb62v2S/dr+Iv5q/q7+9v8+/4b/ywATAEMAiwDPARcBXwGnAe8DvwX3Bj8GgwbLBw8HVwefB+cILwhfCKcI7wk/CYcJzwoXCl8KpwrvCxsLRwuPC78L7ww3DH8MrwzfDScNbw2fDc8OIw5TDoMOsw77D0MPcw+jD+sQLxBfEKcQ6xEzEXsRxxITElsSoxLTEwMTSxOPE9cUHxRnFKsU2xULFTsVaxWzFfcWJxZXFocWtxb/Fy8Xdxe7GAMYRxiPGNcZIxlvGbsaBxuLHUcdjx3XHh8eYx6vHvcfPx+HH88gFyBbILchEyFvIcsiVyLjIyMjfyPHJB8kYySvJPslKyVbJbcl/yZDJosm4ycnJ28nuygDKF8opyjvKTcpgynfKicqayq3Kv8rQyuLLSctby2zLfsuQy6HLssvDy9XMT8xg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AdMAAAEHAKEBFwAeAAkAsAcvsBPcMDEA////3AAABA4GIAImAdMAAAEGAJ5VHwAJALAHL7AO3DAxAP///68AAASLBj8CJgAlAAAABgCtBAD//wBjAAAFFQY/ACYAKWQAAAcArf9CAAD//wBxAAAF2wZBACYALGQAAAcArf9QAAL//wB3AAACZQZAACYALWQAAAcArf9WAAH//wBq/+cFIQY/ACYAMxQAAAcArf9JAAD////uAAAFlgY/ACYAPWQAAAcArf7NAAD//wAeAAAE7gY/ACYAuRQAAAcArf9MAAD//wAg//QDGwZ0AiYAwgAAAQcArv8t/+wAHACwAEVYsA4vG7EOGD5ZsBvcsBHQsBsQsCTQMDH///+vAAAEiwWwAgYAJQAA//8AOwAABKAFsAIGACYAAP//ADsAAASxBbACBgApAAD////rAAAEzgWwAgYAPgAA//8AOwAABXcFsAIGACwAAP//AEkAAAIBBbACBgAtAAD//wA7AAAFUAWwAgYALwAA//8AOwAABrcFsAIGADEAAP//ADsAAAV3BbACBgAyAAD//wB3/+cFDQXIAgYAMwAA//8AOwAABPMFsAIGADQAAP//AKgAAAUJBbACBgA4AAD//wCoAAAFMgWwAgYAPQAA////1AAABSsFsAIGADwAAP//AEkAAAMKBwkCJgAtAAABBwBq/7gBQgAMALACL7AZ3LAE0DAx//8AqAAABTIG/QImAD0AAAEHAGoA/QE2AAwAsAEvsB7csAnQMDH//wBI/+cEMgY6AiYAugAAAQcArQFo//sACQCwFS+wKNwwMQD//wAp/+cD5QY5AiYAvgAAAQcArQEh//oACQCwGi+wK9wwMQD//wAk/mED8wY6AiYAwAAAAQcArQE7//sACQCwAy+wFdwwMQD//wCF//QCZQYlAiYAwgAAAQYArSTmAAkAsAAvsBHcMDEA//8AZ//lBAoGdAImAMoAAAEGAK4c7AASALALL7Ar3LAW0LArELAa0DAx//8ALQAABFcEOgIGAI0AAP//AEX/6AQfBFICBgBTAAD////l/mAEJQQ6AgYAdgAA//8AbgAAA+0EOgIGAFoAAP///8QAAAP0BDoCBgBcAAD//wBn//QC3gWzAiYAwgAAAQYAaozsAAwAsAAvsCTcsA/QMDH//wBn/+UD+gWzAiYAygAAAQYAanvs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3LAi0DAx//8Ak//mBUAG+gImAN0AAAEHAHAA7AFKAAkAsAEvsBHcMDEA////pf5FA+wFuAImAF0AAAEGAHAvCAAJALABL7AQ3DAxAP//AJP/5gVABwkCJgDdAAABBwBqARsBQgAMALABL7Am3LAR0DAx////pf5FA+wFxwImAF0AAAEGAGpeAAAMALABL7Al3LAQ0DAx//8Ak//mBUAHQQImAN0AAAEHAKUBXQFCABYAsABFWLABLxuxARw+WbAT3LAX0DAx////pf5FBF4F/wImAF0AAAEHAKUAoAAAABYAsABFWLABLxuxARg+WbAS3LAW0DAx//8AzgAABUQHCQImAOAAAAEHAGoBRAFCABYAsABFWLASLxuxEhw+WbAo3LAc0DAx//8AewAABAAFswImAPgAAAEGAGpp7AAMALAIL7Ao3LAT0DAx//8ARQAABpYHCQAmAOUPAAAnAC0ElQAAAQcAagIIAUIAFgCwAEVYsAovG7EKHD5ZsCHcsC3QMDH//wAwAAAFqQWzACYA/QAAACcAjAQKAAABBwBqAWr/7AAWALAARViwCi8bsQoYPlmwIdywLdAwMf///9T+RQUrBbACJgA8AAAABwGvA5UAAP///8T+RQP0BDoCJgBcAAAABwGvAqoAAP//AEv/6AR1BgACBgBIAAD////K/kUFZQWwAiYA3AAAAAcBrwQkAAD////I/kUESgQ6AiYA8QAAAAcBrwM7AAD///+v/p8EiwWwAiYAJQAAAAcArATcAAD//wAz/p8DzwRRAiYARQAAAAcArAQpAAD///+vAAAEiwe5AiYAJQAAAQcAqgUBAUYACQCwBC+wGNwwMQD//wAz/+gDzwaDAiYARQAAAQcAqgRzABAACQCwGC+wOdwwMQD///+vAAAF7QfDAiYAJQAAAQcBtwDyAS4AFgCwAEVYsAUvG7EFHD5ZsA7csBTQMDH//wAz/+gFXwaOAiYARQAAAQYBt2T5ABYAsABFWLAYLxuxGBg+WbAv3LA10DAx////rwAABIsHvwImACUAAAEHAbYA+AE9ABYAsABFWLAFLxuxBRw+WbAM3LAT0DAx//8AM//oA/0GiQImAEUAAAEGAbZqBwAWALAARViwGC8bsRgYPlmwL9ywNNAwMf///68AAAVsB+oCJgAlAAABBwG1APMBGwAWALAARViwBS8bsQUc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ALAARViwBC8bsQQcPlmwDNywENAwMf//ADP/6APPBesCJgBFAAABBwCrA/L//QAWALAARViwGC8bsRgYPlmwLdywMdAwMf//ADsAAASxBywCJgApAAABBwCrBE4BPgAWALAARViwBi8bsQYcPlmwDdywEdAwMf//AEX/6gPgBesCJgBJAAABBwCrA9f//QAWALAARViwCC8bsQgYPlmwIdywJdAwMf///98AAAKKBywCJgAtAAABBwCrAwQBPgAWALAARViwAi8bsQIcPlmwBdywCdAwMf///40AAAI4BekCJgCMAAABBwCrArL/+wAWALAARViwAi8bsQIYPlmwBdywCdAwMf//AHf/5wUNByICJgAzAAABBwCrBKEBNAAWALAARViwCi8bsQocPlmwJNywKNAwMf//AEX/6AQfBesCJgBTAAABBwCrA+D//QAWALAARViwAC8bsQAYPlmwJNywKNAwMf//ADoAAATCByACJgA2AAABBwCrBEMBMgAWALAARViwBC8bsQQcPlmwGdywHdAwMf//AB8AAALUBesCJgBWAAABBwCrA0n//QAWALAARViwCi8bsQoYPlmwEtywDdAwMf//AGf/5wUgByACJgA5AAABBwCrBHsBMgAWALAARViwCi8bsQocPlmwFNywGNAwMf//AFv/6AQeBesCJgBZAAABBwCrA+T//QAWALAARViwBy8bsQcYPlmwFdywGdAwMf///7IAAAU8Bj8AJgDPZAAABwCt/pEAAP//ADv+qQSgBbACJgAmAAAABwCsBJgACv//AB/+lgP+BgACJgBGAAAABwCsBIb/9///ADv+qQTVBbACJgAoAAAABwCsBJcACv//AEv+nwR1BgACJgBIAAAABwCsBJkAAP//ADv+CQTVBbACJgAoAAAABwGiAR/+qv//AEv9/wR1BgACJgBIAAAABwGiASH+oP//ADv+qQV3BbACJgAsAAAABwCsBPoACv//AB/+qQPjBgACJgBMAAAABwCsBH8ACv//ADsAAAVQBy4CJgAvAAABBwB1AbABMAATALAARViwBS8bsQUcPlmwDtwwMQD//wAgAAAEIgc/AiYATwAAAQcAdQF9AUEACQCwBS+wD9wwMQD//wA7/vgFUAWwAiYALwAAAAcArATSAFn//wAg/uUEGgYAAiYATwAAAAcArARQAEb//wA7/qkDsQWwAiYAMAAAAAcArASdAAr////y/qkB7gYAAiYAUAAAAAcArAM3AAr//wA7/qkGtwWwAiYAMQAAAAcArAWnAAr//wAe/qkGagRSAiYAUQAAAAcArAWrAAr//wA7/qkFdwWwAiYAMgAAAAcArAT+AAr//wAf/qkD4wRSAiYAUgAAAAcArARmAAr//wA7AAAE8wdAAiYANAAAAQcAdQG0AUIAEwCwAEVYsAMvG7EDHD5ZsBbcMDEA////1/5gBDYF9QImAFQAAAEHAHUBkf/3ABMAsABFWLANLxuxDRg+WbAh3DAxAP//ADr+qQTCBbACJgA2AAAABwCsBJUACv///+7+qQLUBFQCJgBWAAAABwCsAzMACv//ACf+nwSjBccCJgA3AAAABwCsBKQAAP//AC7+lwO2BFACJgBXAAAABwCsBG3/+P//AKj+nwUJBbACJgA4AAAABwCsBJYAAP//AEP+nwKUBUACJgBYAAAABwCsA/oAAP//AKQAAAVhBy0CJgA6AAABBwCkAOEBRgATALAARViwAS8bsQEcPlmwCtwwMQD//wBuAAAD7QXiAiYAWgAAAQYApBv7ABMAsABFWLABLxuxARg+WbAK3DAxAP//AKT+qQVhBbACJgA6AAAABwCsBMoACv//AG7+qQPtBDoCJgBaAAAABwCsBDgACv//AMP+qQdBBbACJgA7AAAABwCsBc0ACv//AID+qQX+BDoCJgBbAAAABwCsBSwACv///+v+qQTOBbACJgA+AAAABwCsBJgACv///+3+qQPOBDoCJgBeAAAABwCsBEIACv///wz/5wVTBdYAJgAzRgAABwFa/hoAAP///6UAAAPjBRwCJgG6AAAABwCt/6v+3f///+EAAAQrBR8AJgG+PAAABwCt/sD+4P////0AAATWBRwAJgHBPAAABwCt/tz+3f//AAEAAAHmBR4AJgHCPAAABwCt/uD+3///AB3/6gRYBRwAJgHICgAABwCt/vz+3f///5sAAAShBRwAJgHSPAAABwCt/nr+3f//ABYAAAR0BRsAJgHzCgAABwCt/xT+3P///6UAAAPjBI0CBgG6AAD//wAdAAAD5wSNAgYBuwAA//8AHQAAA+8EjQIGAb4AAP///9wAAAQOBI0CBgHTAAD//wAdAAAEmgSNAgYBwQAA//8AKgAAAaoEjQIGAcIAAP//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DAAGiA7uDu4MRg6gCiIO7g7uD5oKigaSDGYMRgrYCqwNUg8QCl4L4gsQDBYGmA22DbYNtgwgCxAKUAxMDbAMTAsQBqYN5gtwD5oLcAasBrIGvAbCBsgMTAbOBtgNtgb+BxQHKgcwB0YHTAdSB4QHigeQDcANwAe+Du4H4AgCDVIIMA7uDu4LJg7uDu4IRg3ADcAIeAiCCIwIpg1ICLgNsAjSCOgLEAkyCUwJaAloCxAJYgloCWgJaAtwDCAK2AxMCxAN5g1IDqAOoA1ICtIK0grSCtIK0gmKCbAJugnECeIJ9AoGChgK/g+aD5oPmg+aDGYLcAtwC3ALcAtwC3ALcAr+DAAMAAwADAAO7g7uDu4O7g7uD5oPmg+aD5oPmgxGDEYMRgxGDxAL4gviC+IL4gviC+IL4gwWDBYMFgwWDbYMIAwgDCAMIAwgDEwMTAtwC+ILcAviC3AL4gr+Cv4K/gr+D5oMAAwWDAAMFgwADBYMAAwWDAAMFg7uDbYO7g7uDu4O7g7uDEYOoAoiCiIKIgoiDu4Ntg7uDbYO7g22DbYPmgwgD5oMIA+aDCAKUApQClAMZgxmDGYMRgxGDEYMRgxGDEYKrA8QDEwPEApeCl4KXgtwDAAO7g7uD5oPEAtwCoAMAApeDu4O7g6gDu4O7g+aCooMZg8QDVIO7g8QDbYMIAxMDCAMAA3mDu4O7gxGDqAOoAsmC3AKgA3mDAAO7g7uD5oKigr+DGYNUgviDBYMIAsQDEwNsAwWDUgMTAqsCqwKrA8QDEwK0grSCtIO7g22C3AL4gwADBYK2AxMCv4PEAxMDu4NUg2wDu4LcAviC3AL4gwADBYMFgwWDVINsA+aDCAMIAsQCyYMTAsmDEwLJgxMDVINsAtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gwADBYMAAwWDAAMFgwADBYMAAwWDAAMFgwADBYMAAwWDu4O7g+aDCAPmgwgD5oMIA+aDCAPmgwgD5oMIA+aDCAMIAxGDEYPEAxMDxAMTA8QDEwOoA7uDGYNUg2wDeYNSA1SDbANtg3ADeYOoA7uDu4PEA+aAAIAhwAGAAYAAAALAAsAAQATABMAAgAlACoAAwAsADUACQA4AD4AEwBFAEYAGgBJAEoAHABMAEwAHgBRAFQAHwBWAFYAIwBaAFoAJABcAF0AJQCKAIoAJwCcAJwAKACwALQAKQC2ALgALgC6ALoAMQC8AL0AMgC/AMAANADCAMQANgDGAMsAOQDRANEAPwDTAN0AQADfAN8ASwDhAOMATADlAOcATwDpAO0AUgDwAPAAVwD1APcAWAD6APsAWwD9AP8AXQEDAQQAYAEJAQkAYgEMAQwAYwEXARkAZAErAS0AZwEwATAAagEyATIAawFJAUkAbAFsAW0AbQFvAXEAbwG6AboAcgG9Ab0AcwHEAcUAdAHIAcgAdgHKAcsAdwHNAc0AeQIoAigAegIqAisAewJHAkgAfQJKAkoAfwJMAm0AgAJvAnIAogJ3AnwApgKBAokArAKLAosAtQKNAo0AtgKPAo8AtwKRApEAuAKTApwAuQKlAqcAwwKpAqkAxgKrAqsAxwKtAq0AyAKvAq8AyQKyArIAygK0ArQAywK2ArYAzAK4ArgAzQK6AroAzgK8ArwAzwK+AsoA0ALMAswA3QLOAs4A3gLQAtAA3wLbAtsA4ALdAt0A4QLfAt8A4gLhAuEA4wLjAuMA5ALlAuUA5QLnAucA5gLpAukA5wLrAusA6ALtAu0A6QLvAvIA6gL0AvQA7gL2AvYA7wNTA1gA8ANbA2oA9gNtA20BBgNxA3EBBwNzA3MBCAN3A3cBCQN6A3sBCgN9A4YBDAOIA4oBFgOMA5EBGQOTA5QBHwOWA5kBIQOfA6ABJQOiA6IBJwOkA6QBKAOmA6kBKQOsA7EBLQOzA7MBMwO3A7gBNAO9A70BNgO/A8gBNwPLA8wBQQPOA9EBQwPYA9kBRwPdA90BSQPfA+UBSgPqA+sBUQPvBBcBUwQZBBkBfAQbBCgBfQQwBDABiwQzBDMBjAQ1BDUBjQRBBEYBjgRJBEkBlARLBEsBlQRNBE0BlgRPBFABlwRVBFgBmQRbBFsBnQRdBF4BngRgBGABoARkBGQBoQRmBGYBogRqBGoBowSqBKoBpAABABP/IAACAFb/5gG6/8AAAQG6AA4AAwANABQAQQASAGEAEwABAPX/9QABAMMADQACALf/wgDDABAAAQDD/+IAAQDG//IAAQDDAA4AAgDJ/+0A9f/AAAkAvv/mAMH/6wDC/+kAxP/wAMX/5wDJ/+MAy//OAMz/1ADN/9sABQDB/+wAwwAPAMX/6gDJ/8QAy//nAAUASv/pAMH/7gDD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Aor/6wKM/+sCjv/rApD/6wKS/+sClP/rApb/6wKY/+sCmv/rApz/6wKe/+sCoP/rAqL/6wKk/+sCsv74Asb/6wLI/+sCyv/rAtsAFALdABQC3wAUAuL/6gLk/+oC5v/qAuj/6gLq/+oC7P/qAvD/6ANT/1YDW/9WA2v/6wNv/+oDcf/rA3P/6AN2/+oDd//rA3j/6gN//vgDg/9WA44AFAOQ/94Dkf/rA5P/6wOV/+sDlv/oA5j/6wOf/+gDp//oA6//VgOw/94Ds//rA7j/6AO5/+sDvv/rA8D/6APF/1YDxv/eA8f/VgPI/94DzP/rA87/6wPP/+sD2f/rA9v/6wPd/+sD4f/oA+P/6APl/+gD7P/rA+//VgPw/94D8f9WA/L/3gPz/1YD9P/eA/X/VgP2/94D9/9WA/j/3gP5/1YD+v/eA/v/VgP8/94D/f9WA/7/3gP//1YEAP/eBAH/VgQC/94EA/9WBAT/3gQF/1YEBv/eBAj/6wQK/+sEDP/rBA7/6wQQ/+sEEv/rBBT/6wQW/+sEHP/rBB7/6wQg/+sEIv/rBCT/6wQm/+sEKP/rBCr/6wQs/+sELv/rBDD/6wQy/+sENP/qBDb/6gQ4/+oEOv/qBDz/6gQ+/+oEQP/qBEL/6ARE/+gERv/oBE0AFAAfADj/1QA6/+QAO//sAD3/3QDR/9UA1f/VARj/5AEy/9UBOv/VAmb/3QLb/9UC3f/VAt//1QLt/+wC7//dAvH/3QNY/90DZ//dA2r/3QOO/9UDoP/sA6L/7AOk/+wDpv/dA7f/5AO//90EQf/dBEP/3QRF/90ETf/VBGr/3QAaADj/sAA6/+0APf/QANH/sADV/7ABGP/tATL/sAE6/7ACZv/QAtv/sALd/7AC3/+wAu//0ALx/9ADWP/QA2f/0ANq/9ADjv+wA6b/0AO3/+0Dv//QBEH/0ARD/9AERf/QBE3/sARq/9AAEAAu/+4AOf/uAmL/7gJj/+4CZP/uAmX/7gKy/+4C4f/uAuP/7gLl/+4C5//uAun/7gLr/+4Df//uBDP/7gQ1/+4ARwAGABAACwAQAEf/6ABI/+gASf/oAEv/6ABV/+gAk//oAJj/6AC6/+gAx//oAMj/6AD2/+gBAv/oAR3/6AEh/+gBOf/oAUv/6AFM/+gBVv/oAWwAEAFtABABbwAQAXAAEAFxABACbv/o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/90AWv/hAF3/4QCT/9wAmP/cAJr/3QC6/9wAvP/hAMD/8wDH/9wAyP/cAMr/3QDr//MA7//zAPD/8wDy//MA8//zAPT/8wD2/9wA9//zAPn/8wD6//MA/f/zAP//8wEC/9wBBP/zARf/1gEZ/+EBHf/cASH/3AE1//MBOf/cAUT/8wFJ//MBS//cAUz/3AFW/9wCbv/cAm//3AJw/9wCcf/cAnL/3AJ3//MCeP/WAnn/1gJ6/9YCe//WAnz/1gJ9/90Cfv/dAn//3QKA/90Cgf/hAoL/4QKK/9wCjP/cAo7/3AKQ/9wCkv/cApT/3AKW/9wCmP/cApr/3AKc/9wCnv/cAqD/3AKi/9wCpP/cAr//8wLB//MCw//zAsT/8wLG/9YCyP/WAsr/1gLi/90C5P/dAub/3QLo/90C6v/dAuz/3QLw/+EDa//cA23/8wNv/90Dcf/WA3P/4QN2/90Dd//WA3j/3QOR/9wDkv/zA5P/1gOU//MDlf/cA5b/4QOY/9wDmf/zA57/8wOf/+EDp//hA67/8wOz/9wDtP/zA7j/4QO5/9wDvv/cA8D/4QPM/9wDzv/cA8//3APV//MD1//zA9n/1gPb/9wD3f/WA+H/4QPj/+ED5f/hA+n/8wPs/9wECP/cBAr/3AQM/9wEDv/cBBD/3AQS/9wEFP/cBBb/3AQc/9YEHv/WBCD/1gQi/9YEJP/WBCb/1gQo/9YEKv/cBCz/3AQu/9wEMP/WBDL/3AQ0/90ENv/dBDj/3QQ6/90EPP/dBD7/3QRA/90EQv/hBET/4QRG/+EESv/zBEz/8wRW//MEY//zBGX/8wRn//MAcQAG/9oAC//aAEf/8ABI//AASf/wAEv/8ABV//AAWf/vAFr/3ABd/9wAk//wAJj/8ACa/+8Auv/wALz/3ADH//AAyP/wAMr/7wD2//ABAv/wARn/3AEd//ABIf/wATn/8AFL//ABTP/wAVb/8AFs/9oBbf/aAW//2gFw/9oBcf/aAm7/8AJv//ACcP/wAnH/8AJy//ACff/vAn7/7wJ//+8CgP/vAoH/3AKC/9wCiv/wAoz/8AKO//ACkP/wApL/8AKU//AClv/wApj/8AKa//ACnP/wAp7/8AKg//ACov/wAqT/8ALi/+8C5P/vAub/7wLo/+8C6v/vAuz/7wLw/9wDa//wA2//7wNz/9wDdv/v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//UA1f/xANn/9ADc//UA3f/zARj/9AEy//EBOv/xAVH/9QJm//AC2//xAt3/8QLf//EC7//wAvH/8ANY//ADZ//wA2j/9ANq//ADgv/zA47/8QOP//QDpv/wA7f/9AO///ADwv/0A9D/9APg//MD4v/zA+T/8wPq//QD7f/1BEH/8ARD//AERf/wBE3/8QRP//QEV//0BGj/9QRq//AAWQAlAA8AOP/mADr/5gA8AA4APf/mALEADwCzAA8A0f/mANMADgDV/+YA2QAOANwADgDdAAsA4P/lAPEADwD4/+gBAwAPAQwADwEY/+YBMv/mATr/5gFRAA4CTAAPAk0ADwJOAA8CTwAPAlAADwJRAA8CUgAPAmb/5gKDAA8ChQAPAocADwLb/+YC3f/mAt//5gLv/+YC8f/mA1MADwNY/+YDWwAPA2f/5gNoAA4Dav/mA4IACwODAA8Djv/mA48ADgOm/+YDrwAPA7f/5gO//+YDwgAOA8UADwPHAA8D0AAOA+AACwPiAAsD5AALA+b/5QPn/+gD6gAOA+0ADgPuAA8D7wAPA/EADwPzAA8D9QAPA/cADwP5AA8D+wAPA/0ADwP/AA8EAQAPBAMADwQFAA8EQf/mBEP/5gRF/+YETf/mBE8ADgRR/+UEUv/oBFP/5QRU/+gEVwAOBGgADgRpAA8Eav/mAC4AOP/jADz/5QA9/+QA0f/jANP/5QDV/+MA2f/lANz/5QDd/+kA8f/qAQP/6gEy/+MBOv/jAVH/5QJm/+QC2//jAt3/4wLf/+MC7//kAvH/5ANY/+QDZ//kA2j/5QNq/+QDgv/pA47/4wOP/+UDpv/kA7//5APC/+UD0P/lA+D/6QPi/+kD5P/pA+r/5QPt/+UD7v/qBEH/5ARD/+QERf/kBE3/4wRP/+UEV//lBGj/5QRp/+oEav/kACEAOP/iADz/5ADR/+IA0//kANX/4gDZ/+QA3P/kAN3/6QDx/+sBA//rATL/4gE6/+IBUf/kAtv/4gLd/+IC3//iA2j/5AOC/+kDjv/iA4//5APC/+QD0P/kA+D/6QPi/+kD5P/pA+r/5APt/+QD7v/rBE3/4gRP/+QEV//kBGj/5ARp/+sAFwA4/+sAPf/zANH/6wDV/+sBMv/rATr/6wJm//MC2//rAt3/6wLf/+sC7//zAvH/8wNY//MDZ//zA2r/8wOO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ABgEJwQnAAMEKAQoABgEMAQwABgEMwQzAAwENQQ1AAwEQQRBAA8EQgRCABkEQwRDAA8ERAREABkERQRFAA8ERgRGABkESQRJAAkESwRLAAIETQRNAAYETwRPAA4EUARQABsEVQRVAAcEVgRWAAgEVwRXAA4EWARYABsEWwRbABcEXQRdAB8EXgReAAcEYARgAAkEZARkAAIEZgRmAAIEagRqAA8EqgSqAAMAAgFtAAYABgAHAAsACwAHABAAEAATABEAEQAXABIAEgATACUAJQARACcAJwAFACsAKwAFAC4ALgAcADMAMwAFADUANQAFADcANwAZADgAOAAKADkAOQAGADoAOgANADsAOwAJADwAPAASAD0APQAOAD4APgAUAEUARQAaAEcASQAVAEsASwAVAFEAUgAYAFMAUwAIAFQAVAAYAFUAVQAVAFcAVwAbAFkAWQALAFoAWgACAFwAXAAWAF0AXQACAF4AXgAMAIMAgwAFAJIAkgAFAJMAkwAVAJcAlwAFAJgAmAAVAJoAmgALALEAsQARALIAsgAFALMAswARALoAugAVALwAvAACAMAAwAAYAMcAyAAVAMoAygALANEA0QAKANIA0gAFANMA0wABANUA1QAKANkA2QASANwA3AABAN0A3QAQAOAA4AAPAOsA6wAYAO0A7QAWAO8A8AAYAPEA8QAEAPIA9AAYAPYA9gAVAPcA9wAYAPgA+AADAPkA+gAYAP0A/QAYAP8A/wAYAQIBAgAVAQMBAwAEAQQBBAAYAQcBBwAFAQwBDAARARYBFgAFARcBFwAIARgBGAANARkBGQACARoBGgAFARwBHAAFAR0BHQAVAR4BHgAFASABIAAFASEBIQAVATIBMgAKATUBNQAYATgBOAAFATkBOQAVAToBOgAKAUQBRAAYAUkBSQAYAUsBTAAVAVEBUQABAVUBVQAFAVYBVgAVAWkBagAXAWwBbQAHAW4BbgATAW8BcQAHAXIBcgATAXYBdwATAigCKQAFAisCLAAFAkYCRgAXAkwCUgARAlMCUwAFAl0CYQAFAmICZQAGAmYCZgAOAmcCbQAaAm4CcgAVAncCdwAYAngCfAAIAn0CgAALAoECggACAoMCgwARAoQChAAaAoUChQARAoYChgAaAocChwARAogCiAAaAokCiQAFAooCigAVAosCiwAFAowCjAAVAo0CjQAFAo4CjgAVAo8CjwAFApACkAAVApICkgAVApQClAAVApYClgAVApgCmAAVApoCmgAVApwCnAAVAp0CnQAFAp4CngAVAp8CnwAFAqACoAAVAqECoQAFAqICogAVAqMCowAFAqQCpAAVArICsgAcAr8CvwAYAsECwQAYAsMCxAAYAsUCxQAFAsYCxgAIAscCxwAFAsgCyAAIAskCyQAFAsoCygAIAtEC0QAZAtIC0gAbAtMC0wAZAtQC1AAbAtUC1QAZAtYC1gAbAtcC1wAZAtgC2AAbAtkC2QAZAtoC2gAbAtsC2wAKAt0C3QAKAt8C3wAKAuEC4QAGAuIC4gALAuMC4wAGAuQC5AALAuUC5QAGAuYC5gALAucC5wAGAugC6AALAukC6QAGAuoC6gALAusC6wAGAuwC7AALAu0C7QAJAu8C7wAOAvAC8AACAvEC8QAOAvIC8gAUAvMC8wAMAvQC9AAUAvUC9QAMAvYC9gAUAvcC9wAMAvoC+gAFA1MDUwARA1cDVwAFA1gDWAAOA1sDWwARA14DXgAUA2QDZAAFA2cDZwAOA2gDaAASA2oDagAOA2sDawAVA20DbQAYA28DbwALA3EDcQAIA3MDcwACA3YDdgALA3cDdwAIA3gDeAALA38DfwAcA4IDggAQA4MDgwARA4oDigAFA40DjQAFA44DjgAKA48DjwASA5ADkAAaA5EDkQAVA5IDkgAYA5MDkwAIA5QDlAAYA5UDlQAVA5YDlgACA5cDlwAWA5gDmAAVA5kDmQAYA5oDmgAbA54DngAYA58DnwACA6ADoAAJA6IDogAJA6QDpAAJA6YDpgAOA6cDpwACA6gDqQAHA6wDrAAHA64DrgAYA68DrwARA7ADsAAaA7MDswAVA7QDtAAYA7cDtwANA7gDuAACA7kDuQAVA7oDugAFA70DvQAFA74DvgAVA78DvwAOA8ADwAACA8IDwgASA8MDwwAWA8UDxQARA8YDxgAaA8cDxwARA8gDyAAaA8wDzAAVA84DzwAVA9AD0AASA9ED0QAWA9UD1QAYA9cD1wAYA9gD2AAFA9kD2QAIA9oD2gAFA9sD2wAVA9wD3AAFA90D3QAIA+AD4AAQA+ED4QACA+ID4gAQA+MD4wACA+QD5AAQA+UD5QACA+YD5gAPA+cD5wADA+kD6QAYA+oD6gASA+sD6wAWA+wD7AAVA+0D7QABA+4D7gAEA+8D7wARA/AD8AAaA/ED8QARA/ID8gAaA/MD8wARA/QD9AAaA/UD9QARA/YD9gAaA/cD9wARA/gD+AAaA/kD+QARA/oD+gAaA/sD+wARA/wD/AAaA/0D/QARA/4D/gAaA/8D/wARBAAEAAAaBAEEAQARBAIEAgAaBAMEAwARBAQEBAAaBAUEBQARBAYEBgAaBAgECAAVBAoECgAVBAwEDAAVBA4EDgAVBBAEEAAVBBIEEgAVBBQEFAAVBBYEFgAVBBsEGwAFBBwEHAAIBB0EHQAFBB4EHgAIBB8EHwAFBCAEIAAIBCEEIQAFBCIEIgAIBCMEIwAFBCQEJAAIBCUEJQAFBCYEJgAIBCcEJwAFBCgEKAAIBCkEKQAFBCoEKgAVBCsEKwAFBCwELAAVBC0ELQAFBC4ELgAVBC8ELwAFBDAEMAAIBDEEMQAFBDIEMgAVBDMEMwAGBDQENAALBDUENQAGBDYENgALBDgEOAALBDoEOgALBDwEPAALBD4EPgALBEAEQAALBEEEQQAOBEIEQgACBEMEQwAOBEQERAACBEUERQAOBEYERgACBEoESgAYBEwETAAYBE0ETQAKBE8ETwASBFAEUAAWBFEEUQAPBFIEUgADBFMEUwAPBFQEVAADBFYEVgAYBFcEVwASBFgEWAAWBGMEYwAYBGUEZQAYBGcEZwAYBGgEaAABBGkEaQAEBGoEagAOBHAEcAAXBKoEqgAFAAEAAAAKAgYG8AAEREZMVAAaY3lybABIZ3JlawB2bGF0bgCkAAQAAAAA//8AEgAAAAoAFAAeACgANABBAEsAVQBfAGkAcwB9AIcAkQCbAKUArwAEAAAAAP//ABIAAQALABUAHwApADUAQgBMAFYAYABqAHQAfgCIAJIAnACmALAABAAAAAD//wASAAIADAAWACAAKgA2AEMATQBXAGEAawB1AH8AiQCTAJ0ApwCxACgABkFaRSAAVENSVCAAfk1PTCAAqE5BViAA1FJPTSABAFRVUiABLAAA//8AEwADAA0AFwAhACsAMgA3AEQATgBYAGIAbAB2AIAAigCUAJ4AqACyAAD//wASAAQADgAYACIALAA4AEUATwBZAGMAbQB3AIEAiwCVAJ8AqQCzAAD//wASAAUADwAZACMALQA5AEYAUABaAGQAbgB4AIIAjACWAKAAqgC0AAD//wATAAYAEAAaACQALgA6AD4ARwBRAFsAZQBvAHkAgwCNAJcAoQCrALUAAP//ABMABwARABsAJQAvADsAPwBIAFIAXABmAHAAegCEAI4AmACiAKwAtgAA//8AEwAIABIAHAAmADAAPABAAEkAUwBdAGcAcQB7AIUAjwCZAKMArQC3AAD//wATAAkAEwAdACcAMQAzAD0ASgBUAF4AaAByAHwAhgCQAJoApACuALgAuWMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmxpZ2EEfGxpZ2EEhGxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxvY2wEkGxvY2wElmxvY2wEnG51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqHBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5AAAAAEAAAAAAAIAAgADAAAAAQAHAAAAAQAYAAAAAwAVABYAFwAAAAIACAAJAAAAAQAJAAAAAQAUAAAAAQAEAAAAAQAGAAAAAQAFAAAAAQAZAAAAAQARAAAAAQATAAAAAQABAAAAAQAKAAAAAQALAAAAAQAMAAAAAQANAAAAAQAOAAAAAQAPAAAAAQAQAAAAAQASABsAOAPGBrQHYA3wDfAOBg4oDl4OhA6yDsYO2g7uDwAPGg9cD3oPmA/KD/wQLhBCEHoQbBB6EKYAAQAAAAEACAACAcQA3wHnAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHoAekCRAI7AeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AgACAQTdAgICAwIEAgUCBgIHAggCCQIKAgsCLwIPAhACEQIUAhUCFgIXAhgCGQIbAhwCHgIdAvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSBKsErAStBK4ErwSwBLEEsgSzBLQEtQS2BLcEuAS5BLoEuwS8BL0EvgS/BMAEwQTCBMMExATFBMYB/wTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNgE2QTbAhoE3AIOBNcCEwINBNoCDAISAAEA3wAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAhQCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkcCSAJKAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAoMChQKHAokCiwKNAo8CkQKTApUClwKZApsCnQKfAqECowKlAqcCqQKrAq0CrwKyArQCtgK4AroCvAK+AsACwgLFAscCyQLLAs0CzwLRAtMC1QLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvIC9AL2A1MDVANVA1YDVwNYA1kDWwNcA10DXgNfA2ADYQNiA2QDZQNmA2cDaANpA2oDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwO7A70DvwPUA9oD4ARJBEsETwRXBFkEXgRqAAEAAAABAAgAAgF0ALcBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAv0DMAI7AfoEygTLAfsB/AH9Af4B/wIABM4EzwTRBNQE3QICAgMCBAIFAgYCBwIIAgkCCgILAfQB9QH2AfcB+AH5Ai8CDwIQAhECFAIVAhcCGQL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZA08DGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNQA1EDUgTJBMwEzQTQBNIE0wIBBNUEwQTCBMMExATFBMYExwTIBNYE2ATZAhgE2wIaBNwC/AIOBNcCEwINBNoCFgIMAhIAAQC3AEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCHAIwAkwDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEtATEBMwE5ATsBPQFAAUcCSwJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoQChgKIAooCjAKOApACkgKUApYCmAKaApwCngKgAqICpAKmAqgCqgKsAq4CswK1ArcCuQK7Ar0CvwLBAsMCxgLIAsoCzALOAtAC0gLUAtYC2gLcAt4C4ALiAuQC5gLoAuoC7ALuAvAC8wL1AvcDkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwO8A74DwAPOA9UD2wPhBEcESgRMBFAEWARaBFsEXwRrAAYAAAAGABIAKgBCAFoAcgCKAAMAAAABABIAAQCQAAEAAAAaAAEAAQBNAAMAAAABABIAAQB4AAEAAAAaAAEAAQBOAAMAAAABABIAAQBgAAEAAAAaAAEAAQKuAAMAAAABABIAAQBIAAEAAAAaAAEAAQObAAMAAAABABIAAQAwAAEAAAAaAAEAAQOdAAMAAAABABIAAQAYAAEAAAAaAAEAAQQaAAIAAQCnAKsAAAAEAAAAAQAIAAEGHgA2AHIApACuALgAygD8AQ4BGAFKAWQBfgGQAboB7AH2AhgCMgJEAnYCiAKiAswC3gMQAxoDJAM2A2gDcgN8A4YDoAO6A8wD9gQoBDIEVARuBIAEsgTEBN4FCAUaBSQFLgU4BUIFbAWWBcAF6gYUAAYADgAUABoAIAAmACwCTAACAKcCTQACAKgCTwACAKkD8QACAKoEewACAKsD7wACAKwAAQAEBIgAAgCsAAEABAKJAAIAqAACAAYADASKAAIArASMAAIBogAGAA4AFAAaACAAJgAsAlQAAgCnAlUAAgCoBAsAAgCpBAkAAgCqBH0AAgCrBAcAAgCsAAIABgAMBHcAAgCoAqMAAgGiAAEABASOAAIArAAGAA4AFAAaACAAJgAsAlgAAgCnAlkAAgCoAqcAAgCpBBcAAgCqBH8AAgCrBBkAAgCsAAMACAAOABQEkAACAKgEkgACAKwCtAACAaIAAwAIAA4AFAK2AAIAqASUAAIArAK4AAIBogACAAYADAOtAAIAqASWAAIArAAFAAwAEgAYAB4AJAR5AAIApwK+AAIAqAJcAAIAqQSYAAIArALAAAIBogAGAA4AFAAaACAAJgAsAl0AAgCnAl4AAgCoAmAAAgCpBB0AAgCqBIEAAgCrBBsAAgCsAAEABASaAAIAqAAEAAoAEAAWABwCywACAKgEgwACAKsEnAACAKwCzQACAaIAAwAIAA4AFALRAAIAqASeAAIArALXAAIBogACAAYADASgAAIArALbAAIBogAGAA4AFAAaACAAJgAsAmIAAgCnAmMAAgCoAuEAAgCpBDUAAgCqBIUAAgCrBDMAAgCsAAIABgAMBKIAAgCpBKQAAgCsAAMACAAOABQDoAACAKcDogACAKgEpgACAKwABQAMABIAGAAeACQDpgACAKcCZgACAKgERQACAKkEQwACAKoEQQACAKwAAgAGAAwC8gACAKgEqAACAKwABgAOABQAGgAgACYALAJnAAIApwJoAAIAqAJqAAIAqQPyAAIAqgR8AAIAqwPwAAIArAABAAQEiQACAKwAAQAEAooAAgCoAAIABgAMBIsAAgCsBI0AAgGiAAYADgAUABoAIAAmACwCbwACAKcCcAACAKgEDAACAKkECgACAKoEfgACAKsECAACAKwAAQAEBHgAAgCoAAEABASPAAIArAABAAQEGgACAKwAAwAIAA4AFASRAAIAqASTAAIArAK1AAIBogADAAgADgAUArcAAgCoBJUAAgCsArkAAgGiAAIABgAMA64AAgCoBJcAAgCsAAUADAASABgAHgAkBHoAAgCnAr8AAgCoAncAAgCpBJkAAgCsAsEAAgGiAAYADgAUABoAIAAmACwCeAACAKcCeQACAKgCewACAKkEHgACAKoEggACAKsEHAACAKwAAQAEBJsAAgCoAAQACgAQABYAHALMAAIAqASEAAIAqwSdAAIArALOAAIBogADAAgADgAUAtIAAgCoBJ8AAgCsAtgAAgGiAAIABgAMBKEAAgCsAtwAAgGiAAYADgAUABoAIAAmACwCfQACAKcCfgACAKgC4gACAKkENgACAKoEhgACAKsENAACAKwAAgAGAAwEowACAKkEpQACAKwAAwAIAA4AFAOhAAIApwOjAAIAqASnAAIArAAFAAwAEgAYAB4AJAOnAAIApwKBAAIAqARGAAIAqQREAAIAqgRCAAIArAACAAYADALzAAIAqASpAAIArAABAAQC+AACAKgAAQAEAvoAAgCoAAEABAL5AAIAqAABAAQC+wACAKgABQAMABIAGAAeACQCcwACAKcCdAACAKgCqAACAKkEGAACAKoEgAACAKsABQAMABIAGAAeACQEKwACAKcEKQACAKgELwACAKkELQACAKoEMQACAKwABQAMABIAGAAeACQELAACAKcEKgACAKgEMAACAKkELgACAKoEMgACAKwABQAMABIAGAAeACQEOQACAKcENwACAKgEPQACAKkEOwACAKoEPwACAKwABQAMABIAGAAeACQEOgACAKcEOAACAKgEPgACAKkEPAACAKoEQAACAKwAAQAEBIcAAgCoAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCMAIwAMACXAJoAMQDPAM8ANQABAAAAAQAIAAEABgACAAEAAgLVAtYAAQAAAAEACAACAA4ABATeBN8E4AThAAEABAKHAogCmQKaAAQAAAABAAgAAQAmAAIACgAcAAIABgAMAaMAAgBKAagAAgBYAAEABAGpAAIAWAABAAIASgBXAAQAAAABAAgAAQBEAAIACgAUAAEABAGkAAIATQABAAQBpgACAE0ABAAAAAEACAABAB4AAgAKABQAAQAEAaUAAgBQAAEABAGnAAIAUAABAAIASgGjAAEAAAABAAgAAQAGAZUAAQABAEsAAQAAAAEACAABAAYBJwABAAEAugABAAAAAQAIAAEABgGsAAEAAQA2AAEAAAABAAgAAgAcAAIB4wHkAAEAAAABAAgAAgAKAAIB5QHmAAEAAgAvAE8AAQAAAAEACAACAB4ADAIoAioCKQIrAiwCHwIgAiECIgGuAiQCJQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAQAAAAEACAACAAwAAwImAicCJwABAAMASQBLAiIAAQAAAAEACAACAGYACAI9Ai0CLgIwAjECOQI6AjwAAQAAAAEACAACABYACAAbABUAFgAXABgAGQAdABQAAQAIAa0CIwRxBHIEcwR0BHUEdgABAAAAAQAIAAIAFgAIBHYCIwRxBHIEcwR0Aa0EdQABAAgAFAAVABYAFwAYABkAGwAdAAEAAAABAAgAAgAWAAgAFQAWABcAGAAZABsAHQAUAAEACAItAi4CMAIxAjkCOgI8Aj0AAQAAAAEACAABAAYBaQABAAEAEwAGAAAAAQAIAAMAAQASAAEAUgAAAAEAAAAaAAIAAgF8AXwAAAHUAd0AAQABAAAAAQAIAAEAKAHAAAEAAAABAAgAAgAaAAoCMgB6AHMAdAIzAjQCNQI2AjcCOAACAAEAFAAdAAAAAQAAAAEACAACACYAEAHUAdUB1gHXAdgB2QHaAdsB3AHdAkACPgJBAkICPwJDAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgKuA5sDnQQa","Roboto-Medium.ttf":"AAEAAAARAQAABAAQR1BPU32qcYwAAgioAABZDEdTVUJMnCjgAAJhtAAAGWhPUy8yoQuxtgAAAZgAAABgY21hcEAmSHIAABpsAAASyGN2dCAElytKAAAvvAAAAFZmcGdte/lhqwAALTQAAAG8Z2FzcAAIABMAAgicAAAADGdseWaunmLpAAA53AABy8xoZG14PT88IAAAFYAAAATsaGVhZPh7qwgAAAEcAAAANmhoZWEK7wqbAAABVAAAACRobXR4JPNE9QAAAfgAABOIbG9jYd3eZq0AADAUAAAJxm1heHAHEgL1AAABeAAAACBuYW1lPWNvTAACBagAAALUcG9zdP9tAGQAAgh8AAAAIHByZXAbsfg2AAAu8AAAAMwAAQAAAAIAABFApG1fDzz1ABsIAAAAAADE8BEuAAAAANDbTpT6JP3VCVwIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJa/ok/kEJXAABAAAAAAAAAAAAAAAAAAAE4gABAAAE4gCPABYATgAFAAEAAAAAAA4AAAIAAhYABgABAAMElQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAK/1AAIX8AAAAhAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwACAAIAACA4wAZAAAAAAAAAAAAf4AAAH+AAACJQCPApgAZQTiAGAEjABkBeAAYwUdAFYBWgBSAsoAgALSACgDiQAbBHUARAHCABwCoABHAjwAhwMqAAIEjABpBIwAqASMAFEEjABPBIwANASMAIEEjAB1BIwARQSMAGgEjABdAh8AggHnAC4EEQA/BHoAkQQqAIAD5AA8BygAWwVTABIFDACUBTkAZgU6AJQEhgCUBGUAlAVyAGoFrwCUAkIAowRxAC0FCwCUBFQAlAcBAJQFrgCUBYYAZgUdAJQFhgBgBP4AlATUAEoE2wAtBTcAfQUtABIHCgAwBRAAKQTgAAcE0QBQAjEAhANYABQCMQAMA2sANQOcAAMClAAxBFQAWgSBAHwEMABPBIQATwRLAFMC1gAtBIkAUgRxAHkCCwB9AgH/tQQtAH0CCwCMBvYAfARzAHkEjgBPBIEAfASLAE8C0AB8BCEASwKpAAgEcgB3A/UAFgXyACEEBgAfA+UADAQGAFICrwA4AgIArgKvABsFUQB1Ah4AhgR9AGQEtQBeBZ0AXQTgABkB/ACIBPgAWgOFAF0GRABXA5EAjQPiAFcEbQB/BkQAVwPbAIcDCgB/BEoAXwL2ADwC9gA3ApsAcAS7AJID7QBFAkIAjgIQAG0C9gCAA6cAdwPiAF0F0ABZBisAUAZXAGcD5ABCB4X/9gREAE0FhABpBMoAlATnAIgGwQBIBKcAZwSRAEMEiABPBJcAggWwAB8CGgCPBJgAjgRkACICTwAhBZMAkASIAH4HtABkBzoAWwIMAIsFiABRAtD/5AWKAFgEngBPBaQAfQTyAHcCJv+1BDwAWQPmAJQDsAByA9wAhwN8AHUCCwCBArIAeAJNACkD2AB6Ax8ASQJsAIIAAPyOAAD9XgAA/HMAAP0+AAD8DAAA/RwCXQDGBDwAZwJCAI4EdQCbBb8AGQV6AFsFOAAgBJAAbAWxAJsEkABHBe8ASgWqAEQFWwBrBIQAVgTGAJYEDgAgBIgAVARgAGAEGgBhBIgAfgShAHMCqgCpBGoAFgQTAGQE8wAtBIgAgAQ3AFIEkABSBC0APwRgAIAF0ABEBckATwaUAGYEswB2BHv/4QZxADMF/gAiBVkAaAiIAC0IjwCbBlsAMQWqAJIFCACQBgYAJAeiABYE1gBJBagAlAWpAC0FCgA5Bl8ATwX5AJIFiQCOB5sAmAf5AJgGGgAYBvkAmwUHAJAFUABrB1QAoAT3ACAEfQBbBI8AjwNaAIUE9gAnBnYAHgQWAE0EmACGBG4AjwSaACEGAwCPBJcAhgSYAIYD9QAjBdMAVATTAIYEZgBfBo4AhgbsAH4FFwAfBm8AjwRoAI8EPABRBoQAkQRwACcEcf/bBDwAVAbRAB4G5ACGBIn/7gSYAIYHSQCIBk8AcARn/+AHKACYBgEAhgUMABwEYAAKB0IArAY2AJ0G7QCABeYAggkyAKMH+QCPBCAAKAPwADMFegBfBIgATwUaABAEDgAgBXoAXwSIAE8HRQCIBkQAdAdJAIgGTwBwBRoAZgRKAFwE/wBtAAD8ZgAA/HMAAP17AAD9pQAA+iQAAPpNBGf/4AUTAJQEhgB8BGoAjwOhAH4EtwCbBCAAfgUsAJAEqwCOBpUANAWkAD0H0ACUBaoAfghHAJsG9QB+BioAZwT/AGEHMQAtBXAAJgV0AIAEcwB0BYcAhQYkABYEw//LBSEAkAR4AI4FrwCbBIgAfgWIAFEEpgBbBKYAXQTHADQDUwAtBQcAUgbxAGgG3QBeBlMAPAUoAC8EewBIBD4AdAe+AEIGnQBAB/0AlAaeAHcFBABdBCwAVQWqACEFHQBEBVUAgQMsAGcEFAAACCkAAAQUAAAIKQAAArkAAAIKAAABXAAABH8AAAIwAAABogAAANEAAAAAAAACoQBHAqEARwUpAJ0GMACBA50ABAHAAGMBvAAzAc4AMgGoAEoDFABsAxsAQAMIADIEXQBABJkAXALLAIgD+gCKBaYAigFsAEcHpwBKAnIAbAJpAFQDnAAtAvYANQNcAGkEtQBfBnAAIQa4AJgIkwCUB4gANQaMAHwEjABeBfUAIQQ0ACgEogAhBV4ATwV9ACgF5ABwA+IATAguAJAFCQBtBRQAlgY1AFkG3QBUBtEAWwaiAFgEkQBiBZYApgTZAEAEgwCeBLIAOwhFAF4CLf+vBI4AZQR6AJEEEQA8BCoAgAQMACQCWwChApgAYwHxAEUFGwAtBKgAGAS8AC0HIwAtByMALQURAC0GtwBLAAAAAAgwAFkINQBcBDMAOgSTAE8CEP+wAbMAXAOhAHUDoQB1A6EAdQQLAHUECwB1BAv/TAQLAHoDoQB1AgUAlASeAAkEYAB2BIAATwR6AHYD4AB2A8UAdgSmAFQE3gB2AfwAhQPVACQEWwB2A7kAdgYGAHYE3QB2BMAATwRtAHYEwABMBFwAdgQ0AD4EOwAkBIQAZwR7AAkGBwAoBF4AFQQ8AAUEKgBBAvYASwL2AIAC9gA8AvYANwL2ADUC9gBPAvYATQL2ADYC9gBLAvYARgO5AJACsgCWBDsACgS7AFYFRACbBSgAmwQwAIEFOQCbBC0AgQQ0AD4EZgA4BE0ADgO5AHYEewAJBMAATwR7AAkDmABCBNgAdgQZAEQFnQBQBVQAUATkAF8FkQAkBIAATwdUACQHVwB2BZcAJATXAHYEcQB2BVkAJwY6ABoERgBCBOQAdgRcAHYEywAkBEYAHwVdAHYEjABBBoQAdgcKAHYFWgAKBiAAdgRnAHYEgAA8BpIAdgSIAEMEIgAKBpIAGgSdAHYFGgB2BW4AJAXwAE8EWgAFBMQAFQaVACQEjABBBIwAdgX+AAoE0gBPBEYAQgTAAE8EZgA4A/cARgg2AHYE6wAoBIgAfAQ9AFAEmABPA6QAWwShAEwElAB8BJ8ATwRLAFMEiQBRBXoAawWiAGsFhgCbBeAAawXiAGsEGwCXBIIAbgO5AHYEVwAPBL4ANQL2AEsC9gA1AvYATwL2AE0C9gA2AvYASwL2AEYEawBmBC4AQwaYAE8EtABzBOsAYgIm/7UCJv+1AhsAjwIb//sCGwCPBGAAdgH+AAACoABHBVj/9wVY//cEj//UBNsALQKp/+gFUwASBVMAEgVTABIFUwASBVMAEgVTABIFUwASBTkAZgSGAJQEhgCUBIYAlASGAJQCQv/IAkIAowJC/8sCQv+/Ba4AlAWGAGYFhgBmBYYAZgWGAGYFhgBmBTcAfQU3AH0FNwB9BTcAfQTgAAcEVABaBFQAWgRUAFoEVABaBFQAWgRUAFoEVABaBDAATwRLAFMESwBTBEsAUwRLAFMCGv+0AhoAjwIa/7cCGv+rBHMAeQSOAE8EjgBPBI4ATwSOAE8EjgBPBHIAdwRyAHcEcgB3BHIAdwPlAAwD5QAMBVMAEgRUAFoFUwASBFQAWgVTABIEVABaBTkAZgQwAE8FOQBmBDAATwU5AGYEMABPBTkAZgQwAE8FOgCUBRoATwSGAJQESwBTBIYAlARLAFMEhgCUBEsAUwSGAJQESwBTBIYAlARLAFMFcgBqBIkAUgVyAGoEiQBSBXIAagSJAFIFcgBqBIkAUgWvAJQEcQB5AkL/swIa/58CQv+5Ahr/pQJC/98CGv/LAkIAFwILAAACQgCdBrMAowQMAH0EcQAtAib/tQULAJQELQB9BFQAlAILAIoEVACUAgsAVQRUAJQCoQCMBFQAlALnAIwFrgCUBHMAeQWuAJQEcwB5Ba4AlARzAHkEc/+lBYYAZgSOAE8FhgBmBI4ATwWGAGYEjgBPBP4AlALQAHwE/gCUAtAATwT+AJQC0AA4BNQASgQhAEsE1ABKBCEASwTUAEoEIQBLBNQASgQhAEsE1ABKBCEASwTbAC0CqQAIBNsALQKpAAgE2wAtAtEACAU3AH0EcgB3BTcAfQRyAHcFNwB9BHIAdwU3AH0EcgB3BTcAfQRyAHcFNwB9BHIAdwcKADAF8gAhBOAABwPlAAwE4AAHBNEAUAQGAFIE0QBQBAYAUgTRAFAEBgBSB4X/9gbBAEgFhABpBIgATwR6/6YEev+mBDsAJASeAAkEngAJBJ4ACQSeAAkEngAJBJ4ACQSeAAkEgABPA+AAdgPgAHYD4AB2A+AAdgH8/6YB/ACDAfz/qQH8/50E3QB2BMAATwTAAE8EwABPBMAATwTAAE8EhABnBIQAZwSEAGcEhABnBDwABQSeAAkEngAJBJ4ACQSAAE8EgABPBIAATwSAAE8EegBqA+AAdgPgAHYD4AB2A+AAdgPgAHYEpgBUBKYAVASmAFQEpgBUBN4AdgH8/5EB/P+XAfz/vQH8ABUB/AB8A9UAJARbAHYDuQB2A7kAdgO5AHYDuQB2BN0AdgTdAHYE3QB2BMAATwTAAE8EwABPBFwAdgRcAHYEXAB2BDQAPgQ0AD4ENAA+BDQAPgQ7ACQEOwAkBDsAJASEAGcEhABnBIQAZwSEAGcEhABnBIQAZwYHACgEPAAFBDwABQQqAEEEKgBBBCoAQQVTABIE6v9KBhP/UwKm/1YFmv+nBUT+4QVv/7ICqv+HBVMAEgUMAJQEhgCUBNEAUAWvAJQCQgCjBQsAlAcBAJQFrgCUBYYAZgUdAJQE2wAtBOAABwUQACkCQv+/BOAABwSEAFYEYABgBIgAfgKqAKkEYACABJgAjgSOAE8EuwCSA/UAFgQGAB8Cqv/MBGAAgASOAE8EYACABpQAZgSGAJQEdQCbBNQASgJCAKMCQv+/BHEALQUoAJsFCwCUBQoAOQVTABIFDACUBHUAmwSGAJQFqACUBwEAlAWvAJQFhgBmBbEAmwUdAJQFOQBmBNsALQUQACkEVABaBEsAUwSYAIYEjgBPBIEAfAQwAE8D5QAMBAYAHwRLAFMDWgCFBCEASwILAH0CGv+rAgH/tQRuAI8D5QAMBwoAMAXyACEHCgAwBfIAIQcKADAF8gAhBOAABwPlAAwBWgBSApgAZQRKAI8CJv+xAbwAMwcBAJQG9gB8BVMAEgRUAFoEhgCUBagAlARLAFMEmACGBaoARAXJAE8FGgAQBA7/8QhzAE8JawBmBNYASQQWAE0FOQBmBDAATwTgAAcEDgAgAkIAoweiABYGdgAeAkIAowVTABIEVABaBVMAEgRUAFoHhf/2BsEASASGAJQESwBTBYgAUQQ8AFkEPABZB6IAFgZ2AB4E1gBJBBYATQWoAJQEmACGBagAlASYAIYFhgBmBI4ATwV6AF8EiABPBXoAXwSIAE8FUABrBDwAUQUKADkD5QAMBQoAOQPlAAwFCgA5A+UADAWJAI4EZgBfBvkAmwZvAI8FEAApBAYAHwSEAE8FqQAtBJoAIQVTABIEVABaBVMAEgRUAFoFUwASBFQAWgVTABAEVP+aBVMAEgRUAFoFUwASBFQAWgVTABIEVABaBVMAEgRUAFoFUwASBFQAWgVTABIEVABaBVMAEgRUAFoFUwASBFQAWgSGAJQESwBTBIYAlARLAFMEhgCUBEsAUwSGAJQESwBTBIb/1QRL/44EhgCUBEsAUwSGAJQESwBTBIYAlARLAFMCQgCjAhoAjwJCAJQCCwB4BYYAZgSOAE8FhgBmBI4ATwWGAGYEjgBPBYYAJwSO/6MFhgBmBI4ATwWGAGYEjgBPBYYAZgSOAE8FigBYBJ4ATwWKAFgEngBPBYoAWASeAE8FigBYBJ4ATwWKAFgEngBPBTcAfQRyAHcFNwB9BHIAdwWkAH0E8gB3BaQAfQTyAHcFpAB9BPIAdwWkAH0E8gB3BaQAfQTyAHcE4AAHA+UADATgAAcD5QAMBOAABwPlAAwEogBPBKIATwUoAJsEbgCPBa8AlASXAIYE2wAtA/UAIwUQACkEBgAfBYkAjgRmAF8FiQCOBGYAXwR1AJsDWgCFB6IAFgZ2AB4GJAAWBMP/ywRxAHkFB//QBQf/0AR1//ADWv/iBTz/4wRE/64FqACUBJgAhgWvAJQElwCGBwEAlAYDAI8FqQAtBJoAIQTgAAcEDgAgBRAAKQQGAB8EYABgBGUAAgYwAIEEjABRBIwATwSMADQEjACBBKAAXQS0AH0FcgBqBIkAUgWuAJQEcwB5BVMAEgRUAA0EhgBIBEsAAQJC/vYCGv7iBYYAZgSOABYE/gAyAtD/bgU3AHEEcgAPBN/+rAUMAJQEgQB8BToAlASEAE8FOgCUBIQATwWvAJQEcQB5BQsAlAQtAH0FCwCUBC0AfQRUAJQCCwB4BwEAlAb2AHwFrgCUBHMAeQUdAJQEgQB8BP4AlALQAHIE1ABKBCEASwTbAC0CqQAIBS0AEgP1ABYFLQASA/UAFgcKADAF8gAhBNEAUAQGAFIFzP4cBJ4ACQQc/yoFGv83Ajj/OQTK/5MEeP7oBO7/pASeAAkEYAB2A+AAdgQqAEEE3gB2AfwAhQRbAHYGBgB2BMAATwRtAHYEOwAkBDwABQReABUB/P+dBDwABQPgAHYDuQB2BDQAPgH8AIUB/P+dA9UAJARbAHYERgAfBJ4ACQRgAHYDuQB2A+AAdgTkAHYGBgB2BN4AdgTAAE8E2AB2BG0AdgSAAE8EOwAkBF4AFQRGAEIE3gB2BIAATwQ8AAUF/gAKBOQAdgRGAB8FnQBQBVMAEgRUAFoEhgCUBEsAUwIaAHgAAAABAAAE5AkLBAAAAgICAwYFBwYCAwMEBQIDAwQFBQUFBQUFBQUFAgIFBQUECAYGBgYFBQYGAwUGBQgGBgYGBgUFBgYIBgUFAgQCBAQDBQUFBQUDBQUCAgUCCAUFBQUDBQMFBAcFBAUDAgMGAgUFBgUCBgQHBAQFBwQDBQMDAwUEAwIDBAQHBwcECAUGBQYIBQUFBQYCBQUDBgUJCAIGAwYFBgYCBQQEBAQCAwMEBAMAAAAAAAADBQMFBgYGBQYFBwYGBQUFBQUFBQUDBQUGBQUFBQUHBwcFBQcHBgoKBwYGBwkFBgYGBwcGCQkHCAYGCAYFBQQGBwUFBQUHBQUEBwUFBwgGBwUFBwUFBQgIBQUIBwUIBwYFCAcIBwoJBQQGBQYFBgUIBwgHBgUGAAAAAAAABQYFBQQFBQYFBwYJBgkIBwYIBgYFBgcFBgUGBQYFBQUEBggIBwYFBQkHCQcGBQYGBgQFCQUJAwICBQICAQADAwYHBAICAgIDBAMFBQMEBgIJAwMEAwQFBwgKCAcFBwUFBgYHBAkGBgcICAcFBgUFBQkCBQUFBQUDAwIGBQUICAYIAAkJBQUCAgQEBAUFBQUEAgUFBQUEBAUFAgQFBAcFBQUFBQUFBQUHBQUFAwMDAwMDAwMDAwQDBQUGBgUGBQUFBQQFBQUEBQUGBgYGBQgIBgUFBgcFBgUFBQYFBwgGBwUFBwUFBwUGBgcFBQcFBQcFBQUFBAkGBQUFBAUFBQUFBgYGBwcFBQQFBQMDAwMDAwMFBQcFBgICAgICBQIDBgYFBQMGBgYGBgYGBgUFBQUDAwMDBgYGBgYGBgYGBgUFBQUFBQUFBQUFBQUCAgICBQUFBQUFBQUFBQQEBgUGBQYFBgUGBQYFBgUGBgUFBQUFBQUFBQUGBQYFBgUGBQYFAwIDAgMCAwIDCAUFAgYFBQIFAgUDBQMGBQYFBgUFBgUGBQYFBgMGAwYDBQUFBQUFBQUFBQUDBQMFAwYFBgUGBQYFBgUGBQgHBQQFBQUFBQUFCAgGBQUFBQUFBQUFBQUFBAQEBAICAgIFBQUF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AAADfwAABBsAAAQbAAAA3AAABBwAAAQiAAADhwAABCMAAAQkAAAA3QAABCUAAAQlAAADjgAABCYAAAQvAAAA3wAABDAAAAQwAAADjwAABDEAAAQ0AAAA6QAABDUAAAQ1AAADkAAABDYAAAQ4AAAA7QAABDkAAAQ5AAADkQAABDoAAAQ9AAAA8AAABD4AAAQ+AAADkgAABD8AAAQ/AAAA9AAABEAAAARBAAADkwAABEIAAARCAAAA9QAABEMAAARDAAADlQAABEQAAAREAAAA9gAABEUAAARFAAADlgAABEYAAARPAAAA9wAABFAAAARQAAADsgAABFEAAARRAAADlwAABFIAAARSAAABAQAABFMAAARTAAADmAAABFQAAARUAAABAgAABFUAAARYAAADmQAABFkAAARbAAABAwAABFwAAARcAAADnQAABF0AAARdAAADswAABF4AAAReAAADngAABF8AAARhAAABBgAABGIAAARiAAAEXAAABGMAAARvAAABCQAABHAAAARxAAADtAAABHIAAAR1AAABFgAABHYAAAR3AAADtgAABHgAAAR4AAADuQAABHkAAAR5AAADuAAABHoAAASGAAABGgAABIgAAASJAAABJwAABIoAAASLAAAEYQAABIwAAASMAAAEWwAABI0AAASRAAABKQAABJIAAASTAAAEXQAABJQAAASVAAABLgAABJYAAASXAAAEVgAABJgAAASZAAADugAABJoAAASbAAAESAAABJwAAASdAAABMAAABJ4AAASfAAAEXwAABKAAAAShAAABMgAABKIAAASjAAAESgAABKQAAASpAAABNAAABKoAAASrAAADvAAABKwAAAStAAAETAAABK4AAASvAAADvgAABLAAAASxAAAEaQAABLIAAASzAAAETgAABLQAAAS1AAABOgAABLYAAAS3AAAEUAAABLgAAAS6AAABPAAABLsAAAS7AAAEWgAABLwAAAS9AAABPwAABL4AAAS/AAAEWAAABMAAAATCAAADwAAABMMAAATEAAABQQAABMUAAATGAAAEZwAABMcAAATIAAABQwAABMkAAATKAAAEYwAABMsAAATMAAAEUgAABM0AAATOAAAEZQAABM8AAATXAAADwwAABNgAAATYAAABRQAABNkAAATZAAADzQAABNoAAATaAAADzAAABNsAAATfAAADzgAABOAAAAThAAABRgAABOIAAAT1AAAD0wAABPYAAAT3AAAEVAAABPgAAAT5AAAD5wAABPoAAAT7AAABSAAABPwAAAT9AAAD6QAABP4AAAT/AAAEawAABQAAAAUAAAABSgAABQEAAAUBAAAD6wAABQIAAAUQAAABSwAABREAAAURAAAEbQAABRIAAAUTAAAD7AAAHgAAAB4BAAADrgAAHj4AAB4/AAADrAAAHoAAAB6FAAADnwAAHqAAAB7xAAAD7gAAHvIAAB7zAAADpQAAHvQAAB75AAAEQAAAH00AAB9NAAAEqQAAIAAAACALAAABWwAAIBAAACARAAABZwAAIBMAACAUAAABaQAAIBUAACAVAAAEbwAAIBcAACAeAAABawAAICAAACAiAAABcwAAICUAACAnAAABdgAAIDAAACAwAAABeQAAIDIAACAzAAADpwAAIDkAACA6AAABegAAIDwAACA8AAADqQAAIEQAACBEAAABfAAAIHQAACB0AAABfQAAIH8AACB/AAABfgAAIKMAACCjAAAEbgAAIKQAACCkAAABfwAAIKYAACCqAAABgAAAIKsAACCrAAAERwAAIKwAACCsAAABhQAAILEAACCxAAABhgAAILkAACC6AAABhwAAILwAACC9AAABiQAAIQUAACEFAAABiwAAIRMAACETAAABjAAAIRYAACEWAAABjQAAISIAACEiAAABjgAAISYAACEmAAAAuQAAIS4AACEuAAABjwAAIVsAACFeAAABkAAAIgIAACICAAABlAAAIgYAACIGAAAAsQAAIg8AACIPAAABlQAAIhEAACISAAABlgAAIhoAACIaAAABmAAAIh4AACIeAAABmQAAIisAACIrAAABmgAAIkgAACJIAAABmwAAImAAACJgAAABnAAAImQAACJlAAABnQAAJcoAACXKAAABnwAA7gEAAO4CAAABoAAA9sMAAPbDAAABogAA+wEAAPsEAAABpAAA/v8AAP7/AAABqgAA//wAAP/9AAABq7AALEuwCVBYsQEBjlm4Af+FsIQdsQkDX14tsAEsICBFaUSwAWAtsAIssAEqIS2wAywgRrADJUZSWCNZIIogiklkiiBGIGhhZLAEJUYgaGFkUlgjZYpZLyCwAFNYaSCwAFRYIbBAWRtpILAAVFghsEBlWVk6LbAELCBGsAQlRlJY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seix/7IWsi6yRbJcsnOyi7KdsrSyy7LisvmzEbMoszqzUbNps4Czl7Ops7+z1bPstAS0ELQctDO0RbRbtHK0iLSetLW0zbTetPW1B7UdtS61RrVdtW+1hbWcta61xbXcte22BLYbtoW3J7c5t0u3Yrd4t4+3pre4t8m327fruAK4E7gquEC4V7huuNu5crmJuZq5sbnHud659LoLuiK6LrpAule6abqAupK6qbrAute67rr5uwS7G7snuzO7Srthu227ebuQu6e7s7u/u9S76bv1vAG8GLwqvDa8QrxZvGq8f7yWvKe8vrzVvO29Bb0XvSm9Nb1BvVO9ZL12vYi9n721vcG9zb3ZveW9974IvhS+IL4svji+T75bvnK+iL6avrC+x77evvG/BL8cvy+/jb/vwAbAHcA0wErAYsB5wJDAp8C+wNDA4cD4wQrBIcE4wWjBmMGowb/B1sHswf3CFcItwjnCRcJcwnPCicKgwrfCzcLkwvzDDsMlwzfDTcNew3bDjcOkw7rD0sPpw//EFsR9xI/EpcS8xM3E3sT0xQrFIcWOxaTFusXRxejF9MYKxhzGM8ZKxlXGa8aCxo7GpMawxsXG0cboxvTHC8ccxzPHRsdYx2THdceHx53Hqce6x8bH3Mfox/7ID8gmyDnITMityMTI2sjxyQjJH8k1yUDJTMlYyWTJcMl8yYjJo8mrybPJu8nDycvJ08nbyePJ68nzyfvKA8oLyhPKK8pDylXKZ8p5yorKpMqsyrTKvMrEyszK5Mr7yw3LH8sxy0nLYMvOy9bL7sv2y/7MFcwszDTMPMxEzEzMY8xrzHPMe8yDzIvMk8ybzKPMq8yzzMrM0szazS7NNs0+zVXNbM10zXzNlM2czbPNyc3gzffODs4lzjjOS85iznPOh86mzrLOxM7MzuPO9c8Bzw3PJM87z1LPac9xz3nPkc+pz7XPwc/Nz9nP5c/xz/nQAdAJ0CDQN9A/0FbQbdCF0JzQpNCs0MPQ2dDx0PnRENEo0UDRWNFv0YbRnNG00czR5NH80gTSDNIk0jvSU9Jq0nzSjdKl0rzS1NLs0wTTG9M301PTX9Nr03PTf9OL05fTo9O108fT4NPy1AvUHdQw1ELUVdRn1HfUhtSZ1KvUvtTQ1OPU9dUI1RrVKtU61UbVUtVk1XbViNWZ1bLVxNXd1e/WAtYU1ifWOdZJ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CRCwBtCwBi+wAdCwAS8wMf//AI//8gPIBbAAJgAFAAAABwAFAiUAAP///7H+SwJzBd8CJgCbAAABBwCe/z//3gAJALAAL7AR3DAxAP//ADMEAAFlBgACBgFtAAD//wCUAAAGagc2AiYAMQAAAQcAdQKQATYAEwCwAEVYsAIvG7ECHz5ZsBHcMDEA//8AfAAABnkGAAImAFEAAAEHAHUCoAAAAAkAsAMvsCDcMDEA//8AEv5tBUIFsAImACUAAAAHAKYBegAD//8AWv5xA/sETgImAEUAAAAHAKYArQAH//8AlAAABEwHPQImACkAAAEHAEQA6AE9ABMAsABFWLAGLxuxBh8+WbAN3DAxAP//AJQAAAUNBz0CJgDbAAABBwBEAUoBPQATALAARViwCC8bsQgfPlmwC9wwMQD//wBT/+wECwYAAiYASQAAAQcARAChAAAAEwCwAEVYsAgvG7EIGz5ZsB/cMDEA//8AhgAABBIF8wImAO8AAAEHAEQAxP/zABMAsABFWLAILxuxCBs+WbAL3DAxAP//AEQAAAVcBbACBgC4AAD//wBP/iIFfgQ6AgYAzAAA//8AEAAABPMG/AImARgAAAEHAKsESQEOABYAsABFWLAPLxuxDx8+WbAR3LAV0DAx////8QAABBgF0AImARkAAAEHAKsD5f/iABYAsABFWLARLxuxERs+WbAT3LAX0DAx//8AT/5LCGQETgAmAFMAAAAHAF0EjgAA//8AZv5LCVwFxAAmADMAAAAHAF0FhgAA//8ASf46BH8FwwImANoAAAAHAbABkv+g//8ATf47A8QETQImAO4AAAAHAbABOf+h//8AZv4+BOsFxAImACcAAAAHAbAB1v+k//8AT/4+A/UETgImAEcAAAAHAbABSv+k//8ABwAABNYFsAIGAD0AAP//ACD+XwP1BDoCBgC8AAD//wCjAAABnwWwAgYALQAA//8AFgAAB5sHIwImANkAAAEHAKACHQE9ABMAsABFWLANLxuxDR8+WbAZ3DAxAP//AB4AAAZcBdkCJgDtAAABBwCgAYf/8wATALAARViwDS8bsQ0bPlmwGdwwMQD//wCjAAABnwWwAgYALQAA//8AEgAABUIHHAImACUAAAEHAKAA9gE2ABMAsABFWLAELxuxBB8+WbAO3DAxAP//AFr/7AP7BeYCJgBFAAABBwCg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ALAARViwBy8bsQcfPlmxDwn0sBXQMDEA//8AU//sBMgGfAImAEkAAAEGAbc97AAMALAIL7Ag3LAl0DAx////1QAABEwHtQImACkAAAEHAbYAiQEyABcAsABFWLAGLxuxBh8+WbEPCfSwFNAwMQD///+O/+wECwZ5AiYASQAAAQYBtkL2AAwAsAgvsB7csCXQMDH//wCUAAAEkgflAiYAKQAAAQcBtQCIARoADACwBi+wDNywE9AwMf//AFP/7ARLBqkCJgBJAAABBgG1Qd4ADACwCC+wHtywJdAwMf//AJQAAARMB90CJgApAAABBwG0AIkBDAAMALAGL7AM3LAT0DAx//8AU//sBAsGoQImAEkAAAEGAbRC0AAMALAIL7Ae3LAl0DAx//8AlP6eBEwHPgImACkAAAAnAJ0AiAE9AAcArATLAAr//wBT/pQECwYBAiYASQAAACYAnUEAAAcArASPAAD//wCjAAACEQfCAiYALQAAAQcAqgN4AUMACQCwAi+wBNwwMQD//wCPAAAB/QZ+AiYAjAAAAQcAqgNk//8ACQCwAi+wBNwwMQD//wCU/poBpwWwAiYALQAAAAcArAN4AAb//wB4/p4BkAXVAiYATQAAAAcArANcAAr//wBm/pQFHgXEAiYAMwAAAAcArAUdAAD//wBP/pIEPQROAiYAUwAAAAcArASd//7//wBm/+wFHge7AiYAMwAAAQcAqgUcATwACQCwFC+wH9wwMQD//wBP/+wEPQaFAiYAUwAAAQcAqgSYAAYACQCwBC+wG9wwMQD//wBm/+wFYQexAiYAMwAAAQcBtwDWASEADACwFC+wIdywJtAwMf//AE//7ATdBnwCJgBTAAABBgG3UuwADACwBC+wHdywItAwMf//ACf/7AUeB64CJgAzAAABBwG2ANsBKwAMALAUL7Af3LAm0DAx////o//sBD0GeQImAFMAAAEGAbZX9gAMALAEL7Ab3LAi0DAx//8AZv/sBR4H3gImADMAAAEHAbUA2gETAAwAsBQvsB/csCbQMDH//wBP/+wEYAapAiYAUwAAAQYBtVbeAAwAsAQvsBvcsCLQMDH//wBm/+wFHgfWAiYAMwAAAQcBtADbAQUADACwFC+wH9ywJtAwMf//AE//7AQ9BqECJgBTAAABBgG0V9AADACwBC+wG9ywItAwMf//AGb+lAUeBzcCJgAzAAAAJwCdANoBNgAHAKwFHQAA//8AT/6SBD0GAQImAFMAAAAmAJ1WAAAHAKwEnf/+//8AWP/sBaoHMwImAJcAAAAHAHUB0wEz//8AT//sBLsGAAImAJgAAAEHAHUBWAAAAAkAsAkvsCXcMDEA//8AWP/sBaoHMwImAJcAAAAHAEQBNAEz//8AT//sBLsGAAImAJgAAAEHAEQAuQAAAAkAsAkvsCPcMDEA//8AWP/sBaoHuAImAJcAAAAHAKoFFgE5//8AT//sBLsGhQImAJgAAAEHAKoEmwAGAAkAsAkvsCPcMDEA//8AWP/sBaoHKQImAJcAAAAHAKQA1gE0//8AT//sBLsF9gImAJgAAAEGAKRbAQAJALAJL7Au3DAxAP//AFj+lAWqBi4CJgCXAAAABwCsBQYAAP//AE/+iwS7BKgCJgCYAAAABwCsBJr/9///AH3+lAS9BbACJgA5AAAABwCsBPIAAP//AHf+lAP3BDoCJgBZAAAABwCsBEEAAP//AH3/7AS9B7sCJgA5AAABBwCqBPMBPAAJALAAL7AR3DAxAP//AHf/7AP3BoUCJgBZAAABBwCqBJEABgAJALAGL7AR3DAxAP//AH3/7AY9B0ICJgCZAAABBwB1AdcBQgAJALAEL7Ab3DAxAP//AHf/7AUoBewCJgCaAAABBwB1AVf/7AAJALAAL7Ac3DAxAP//AH3/7AY9B0ICJgCZAAABBwBEATgBQgAJALAEL7AZ3DAxAP//AHf/7AUoBewCJgCaAAABBwBEALj/7AAJALAAL7Aa3DAxAP//AH3/7AY9B8cCJgCZAAABBwCqBRoBSAAJALAEL7AZ3DAxAP//AHf/7AUoBnECJgCaAAABBwCqBJr/8gAJALAAL7Aa3DAxAP//AH3/7AY9BzgCJgCZAAABBwCkANoBQwAJALAEL7Ak3DAxAP//AHf/7AUoBeICJgCaAAABBgCkWu0ACQCwAC+wJdwwMQD//wB9/osGPQYBAiYAmQAAAAcArAUZ//f//wB3/pQFKASTAiYAmgAAAAcArARFAAD//wAH/qQE1gWwAiYAPQAAAAcArATGABD//wAM/g8D1gQ6AiYAXQAAAAcArAVG/3v//wAHAAAE1ge7AiYAPQAAAQcAqgTKATwACQCwAS+wCdwwMQD//wAM/ksD1gaFAiYAXQAAAQcAqgRZAAYACQCwAS+wENwwMQD//wAHAAAE1gcsAiYAPQAAAQcApACKATcACQCwAS+wFNwwMQD//wAM/ksD1gX2AiYAXQAAAQYApBkBAAkAsAEvsBvcMDEAAAIAT//sBLIGAAAWACEAjLIfIiMREjmwHxCwENAAsBMvsABFWLAMLxuxDBs+WbAARViwBi8bsQYPPlmwAEVYsAIvG7ECDz5Zsi8TAV2yDxMBXbIWAhMREjmwFi+yAAcKK1gh2Bv0WbIEDAYREjmyDgwGERI5sA/QsBYQsBHQsAYQshoBCitYIdgb9FmwDBCyHwEKK1gh2Bv0WTAxASMRIycGIyICETQSMzIXNSM1MzUzFTMBFBYzMjcRJiMiBgSyr9wMbba+6+jDrGr7+/Ov/JB/dZVFQ5V2gATJ+zdwhAEyAQf6AS9486qNjfydpbmFAc6Cu///AE/+rgSyBgAAJgBIAAAAJwHeAYUCQgEHAEMAmf9tABIAsi8cAV2yHxwBcbKfHAFdMDH//wCb/poFfgWwAiYB4wAAAAcBsAQvAAD//wCP/poEwgQ6AiYA8AAAAAcBsANzAAD//wCU/poF2wWwAiYALAAAAAcBsASMAAD//wCG/poE1QQ6AiYA8wAAAAcBsAOGAAD//wAt/poEsAWwAiYAOAAAAAcBsAJNAAD//wAj/poD0AQ6AiYA9QAAAAcBsAHmAAD//wAp/poFIgWwAiYAPAAAAAcBsAPTAAD//wAf/poEJwQ6AiYAXAAAAAcBsALYAAD//wCO/poFrQWwAiYA4AAAAAcBsAReAAD//wBf/poEpAQ7AiYA+AAAAAcBsANVAAD//wCO/poE7gWwAiYA4AAAAAcBsALPAAD//wBf/poD4AQ7AiYA+AAAAAcBsAHGAAD//wCb/poENwWwAiYAsAAAAAcBsAEHAAD//wCF/poDTQQ6AiYA6wAAAAcBsADsAAD//wAW/poIBQWwAiYA2QAAAAcBsAa2AAD//wAe/poGtAQ6AiYA7QAAAAcBsAVlAAD//wAW/kMFvAXEAiYBPwAAAAcBsALt/6n////L/kYEiwROAiYBQAAAAAcBsAH1/6z//wB5AAAD+AYAAgYATAAAAAL/0AAABMEFsAATABwAbrIAHR4REjmwFtAAsABFWLAQLxuxEB8+WbAARViwCi8bsQoPPlmyExAKERI5sBMvsgAHCitYIdgb9FmyAhAKERI5sAIvsAAQsAzQsBMQsA7QsAIQshQBCitYIdgb9FmwChCyFQEKK1gh2Bv0WTAxASMVITIWFhUUBAchESM1MzUzFTMDESEyNjU0JicCbeABKqDufP7r7/3TwMD94OABKYCPjHwER8RuyoXM+AIER6q/v/3H/hKLc26AAgAC/9AAAATBBbAAEwAcAG6yAB0eERI5sBbQALAARViwEC8bsRAfPlmwAEVYsAovG7EKDz5ZshMQChESObATL7IABworWCHYG/RZsgIQChESObACL7AAELAM0LATELAO0LACELIUAQorWCHYG/RZsAoQshUBCitYIdgb9FkwMQEjFSEyFhYVFAQHIREjNTM1MxUzAxEhMjY1NCYnAm3gASqg7nz+6+/908DA/eDgASmAj4x8BEfEbsqFzPgCBEeqv7/9x/4Si3NugAIAAf/wAAAENwWwAA0ASQCwAEVYsAgvG7EIHz5ZsABFWLACLxuxAg8+WbINCAIREjmwDS+yAAcKK1gh2Bv0WbAE0LANELAG0LAIELIKAQorWCHYG/RZMDEBIxEjESM1MxEhFSERMwKN9vyrqwOc/WD2Ap/9YQKfqgJnzP5lAAH/4gAAA00EOgANAEkAsABFWLAILxuxCBs+WbAARViwAi8bsQIPPlmyDQgCERI5sA0vsgAHCitYIdgb9FmwBNCwDRCwBtCwCBCyCgEKK1gh2Bv0WTAxASERIxEjNTMRIRUhFSECf/748qOjAsj+KgEIAdH+LwHRqgG/xPsAAAH/4wAABUQFsAAUAHQAsABFWLAILxuxCB8+WbAARViwEC8bsRAfPlmwAEVYsAIvG7ECDz5ZsABFWLATLxuxEw8+WbIOCAIREjmwDi+yAQEKK1gh2Bv0WbIHCAIREjmwBy+yBAEKK1gh2Bv0WbAHELAK0LAEELAM0LISAQ4REjkwMQEjESMRIzUzNTMVMxUjFTMBIQEBIQJXrPzMzPzV1YsBrAE2/gwCIP7QAnD9kAQ/qsfHqvMCZP1H/QkAAf+uAAAESQYAABQAdACwAEVYsAgvG7EIIT5ZsABFWLAQLxuxEBs+WbAARViwAi8bsQIPPlmwAEVYsBMvG7ETDz5Zsg4QAhESObAOL7IBAQorWCHYG/RZsgcIEBESObAHL7IEBworWCHYG/RZsAcQsArQsAQQsAzQshIBDhESOTAxASMRIxEjNTM1MxUzFSMRMwEhAQEhAfZv8ufn8sTEaQEPARz+nwGP/uYB2f4nBLuqm5uq/eEBnv4R/bUA//8AlP5+Bd0HIwImANsAAAAnAKABHQE9AQcAEASA/8YAEwCwAEVYsAgvG7EIHz5ZsA3cMDEA//8Ahv5+BOQF2QImAO8AAAAnAKAAl//zAQcAEAOH/8YAEwCwAEVYsAgvG7EIGz5ZsA3cMDEA//8AlP5+BekFsAImACwAAAAHABAEjP/G//8Ahv5+BOMEOgImAPMAAAAHABADhv/G//8AlP5+BzIFsAImADEAAAAHABAF1f/G//8Aj/5+BkEEOgImAPIAAAAHABAE5P/G//8ALf5+BdwFsAImANwAAAAHABAEf//G//8AIf5+BOYEOgImAPEAAAAHABADif/GAAEABwAABNYFsAAOAFayCg8QERI5ALAARViwCC8bsQgfPlmwAEVYsAsvG7ELHz5ZsABFWLACLxuxAg8+WbIGAggREjmwBi+yBQcKK1gh2Bv0WbAB0LIKCAIREjmwBhCwDtAwMQEjESMRIzUzASEBASEBMwPD1f7Kev5nARkBTwFPARj+Z4YCBP38AgSqAwL9TgKy/P4AAAEAIP5fA/UEOgAOAGOyCg8QERI5ALAARViwCC8bsQgbPlmwAEVYsAsvG7ELGz5ZsABFWLACLxuxAhE+WbAARViwAC8bsQAPPlmwAEVYsAQvG7EEDz5ZsgYHCitYIdgb9FmyCgsAERI5sA3QsA7QMDEFIxEjESM1MwEzExMzATMDYNzzzqL+u/vz7Pv+vK8B/mABoKoDkf0BAv/8bwAAAQApAAAE6QWwABEAYwCwAEVYsAsvG7ELHz5ZsABFWLAOLxuxDh8+WbAARViwAi8bsQIPPlmwAEVYsAUvG7EFDz5ZshELAhESObARL7IABworWCHYG/RZsgQLAhESObAH0LARELAJ0LINCwIREjkwMQEjASEBASEBIzUzASEBASEBMwPbhwGV/tn+x/7G/toBloFz/oIBJAEyATIBJP6DeQKV/WsCFv3qApWqAnH98gIO/Y8AAQAfAAAD6AQ6ABEAYwCwAEVYsAsvG7ELGz5ZsABFWLAOLxuxDhs+WbAARViwAi8bsQIPPlmwAEVYsAUvG7EFDz5ZshEOAhESObARL7IABworWCHYG/RZsgQOAhESObAH0LARELAJ0LINDgIREjkwMQEjASEDAyEBIzUzASETEyEBMwNXlQEm/vTY1/7yASWKgv7vAQzKzgEO/u6MAdf+KQFy/o4B16oBuf6cAWT+R///AGD/7AQMBE0CBgC+AAD//wACAAAEMQWwAiYAKgAAAAcB3v9y/mn//wCBAm0F0QMxAEYBl4UAZmZAAP//AFEAAARABcQCBgAWAAD//wBP/+wEFQXEAgYAFwAA//8ANAAABFgFsAIGABgAAP//AIH/7AQ6BbACBgAZAAD//wBd//oEEgXEAAYAHQAA//8Aff/sBDYFxAAGABQUAP//AGr/7ATwB0sCJgArAAABBwB1Ab0BSwAJALALL7Ah3DAxAP//AFL+VgQMBgACJgBLAAABBwB1AT8AAAAJALADL7An3DAxAP//AJQAAAUXBzYCJgAyAAABBwBEAUwBNgATALAARViwBi8bsQYfPlmwC9wwMQD//wB5AAAD+AYAAiYAUgAAAQcARACzAAAAEwCwAEVYsAAvG7EAGz5ZsBLcMDEA//8AEgAABUIHIQImACUAAAEHAKsEdwEzABYAsABFWLAELxuxBB8+WbAM3LAQ0DAx//8ADf/sA/sF7AImAEUAAAEHAKsEAf/+ABYAsABFWLAXLxuxFxs+WbAr3LAv0DAx//8ASAAABEwHKAImACkAAAEHAKsEPAE6ABYAsABFWLAGLxuxBh8+WbAN3LAR0DAx//8AAf/sBAsF7AImAEkAAAEHAKsD9f/+ABYAsABFWLAILxuxCBs+WbAf3LAj0DAx///+9gAAAh4HKAImAC0AAAEHAKsC6gE6ABYAsABFWLACLxuxAh8+WbAF3LAJ0DAx///+4gAAAgoF5AImAIwAAAEHAKsC1v/2ABYAsABFWLACLxuxAhs+WbAF3LAJ0DAx//8AZv/sBR4HIQImADMAAAEHAKsEjgEzABYAsABFWLAMLxuxDB8+WbAg3LAk0DAx//8AFv/sBD0F7AImAFMAAAEHAKsECv/+ABYAsABFWLAELxuxBBs+WbAc3LAg0DAx//8AMgAABN4HIQImADYAAAEHAKsEJgEzABYAsABFWLAELxuxBB8+WbAZ3LAd0DAx////bgAAArQF7AImAFYAAAEHAKsDYv/+ABYAsABFWLAHLxuxBxs+WbAP3LAT0DAx//8Acf/sBL0HIQImADkAAAEHAKsEZQEzABYAsABFWLAJLxuxCR8+WbAS3LAW0DAx//8AD//sA/cF7AImAFkAAAEHAKsEA//+ABYAsABFWLAHLxuxBxs+WbAS3LAW0DAx///+rAAABQIGQQAmAM9kAAAHAK395gAA//8AlP6eBKMFsAImACYAAAAHAKwEuQAK//8AfP6LBDIGAAImAEYAAAAHAKwEy//3//8AlP6eBNIFsAImACgAAAAHAKwElAAK//8AT/6UBAMGAAImAEgAAAAHAKwEtAAA//8AlP35BNIFsAImACgAAAAHAaIBSP6S//8AT/35BAMGAAImAEgAAAAHAaIBaP6S//8AlP6eBRgFsAImACwAAAAHAKwFJgAK//8Aef6eA/gGAAImAEwAAAAHAKwEoQAK//8AlAAABRgHNgImAC8AAAEHAHUBbgE2AAkAsAQvsA/cMDEA//8AfQAABDYHPQImAE8AAAEHAHUBawE9AAkAsAQvsA/cMDEA//8AlP7fBRgFsAImAC8AAAAHAKwE6QBL//8Aff7KBDYGAAImAE8AAAAHAKwEeQA2//8AlP6eBCYFsAImADAAAAAHAKwEuQAK//8AeP6eAYsGAAImAFAAAAAHAKwDXAAK//8AlP6eBmoFsAImADEAAAAHAKwF1gAK//8AfP6eBnkETgImAFEAAAAHAKwF2QAK//8AlP6aBRcFsAImADIAAAAHAKwFKAAG//8Aef6eA/gETgImAFIAAAAHAKwEjQAK//8AlAAABNQHQgImADQAAAEHAHUBcgFCAAkAsAMvsBbcMDEA//8AfP5gBDAF9wImAFQAAAEHAHUBnf/3AAkAsAwvsB3cMDEA//8AlP6eBN4FsAImADYAAAAHAKwEugAK//8Acv6eArQETgImAFYAAAAHAKwDVgAK//8ASv6UBIoFxAImADcAAAAHAKwE1QAA//8AS/6LA8oETgImAFcAAAAHAKwEfP/3//8ALf6XBLAFsAImADgAAAAHAKwEwwAD//8ACP6UAnIFQQImAFgAAAAHAKwEFAAA//8AEgAABR0HOAImADoAAAEHAKQAsAFDAAkAsAEvsBLcMDEA//8AFgAAA9oF7QImAFoAAAEGAKQY+AAJALABL7AS3DAxAP//ABL+ngUdBbACJgA6AAAABwCsBO8ACv//ABb+ngPaBDoCJgBaAAAABwCsBFcACv//ADD+ngblBbACJgA7AAAABwCsBeYACv//ACH+ngXMBDoCJgBbAAAABwCsBU4ACv//AFD+ngSMBbACJgA+AAAABwCsBMEACv//AFL+ngPABDoCJgBeAAAABwCsBGMACv///hz/7AVkBdcAJgAzRgAABwFa/bUAAP//AAkAAASUBR4CJgG6AAAABwCt/3b+3f///yoAAAPxBSEAJgG+PAAABwCt/mT+4P///zcAAASkBRwAJgHBPAAABwCt/nH+2////zkAAAGzBSEAJgHCPAAABwCt/nP+4P///5P/8AR5BR4AJgHICgAABwCt/s3+3f///ugAAARyBR4AJgHSPAAABwCt/iL+3f///6QAAASOBR4AJgHzCgAABwCt/t7+3f//AAkAAASUBI0CBgG6AAD//wB2AAAECgSNAgYBuwAA//8AdgAAA7UEjQIGAb4AAP//AEEAAAPzBI0CBgHTAAD//wB2AAAEaASNAgYBwQAA//8AhQAAAXcEjQIGAcIAAP//AHYAAARoBI0CBgHEAAD//wB2AAAFjwSNAgYBxgAA//8AT//wBG8EnQIGAcgAAP//AHYAAAQsBI0CBgHJAAD//wAkAAAEFgSNAgYBzQAA//8ABQAABDYEjQIGAdIAAP//ABUAAARKBI0CBgHRAAD///+dAAACYwXqAiYBwgAAAQcAav9AAB4AFgCwAEVYsAIvG7ECHT5ZsAvcsBTQMDH//wAFAAAENgXqAiYB0gAAAQYAalkeABYAsABFWLAILxuxCB0+WbAQ3LAZ0DAx//8AdgAAA7UF6gImAb4AAAEGAGphHgAWALAARViwBi8bsQYdPlmwE9ywHNAwMf//AHYAAAOXBh4CJgHqAAABBwB1ASMAHgAJALAEL7AI3DAxAP//AD7/8APvBJ0CBgHMAAD//wCFAAABdwSNAgYBwgAA////nQAAAmMF6gImAcIAAAEHAGr/QAAeABYAsABFWLACLxuxAh0+WbAL3LAU0DAx//8AJP/wA2QEjQIGAcMAAP//AHYAAARoBh4CJgHEAAABBwB1ARcAHgAJALAEL7AP3DAxAP//AB//7AQ5BgQCJgIBAAABBgCgeh4AEwCwAEVYsA8vG7EPHT5ZsBPcMDEA//8ACQAABJQEjQIGAboAAP//AHYAAAQKBI0CBgG7AAD//wB2AAADlwSNAgYB6gAA//8AdgAAA7UEjQIGAb4AAP//AHYAAARuBgQCJgH+AAABBwCgALoAHgATALAARViwCC8bsQgdPlmwDdwwMQD//wB2AAAFjwSNAgYBxgAA//8AdgAABGgEjQIGAcEAAP//AE//8ARvBJ0CBgHIAAD//wB2AAAEYgSNAgYB7wAA//8AdgAABCwEjQIGAckAAP//AE//8ARDBJ0CBgG8AAD//wAkAAAEFgSNAgYBzQAA//8AFQAABEoEjQIGAdEAAAABAEL+OQPnBJ0AKACksicpKhESOQCwFy+wAEVYsAovG7EKHT5ZsABFWLAZLxuxGQ8+WbAKELIDAQorWCHYG/RZsgYKGRESObInGQoREjmwJy+yXycBcrI/JwFxss8nAXGy/ycBcbIPJwFytG8nfycCcbSvJ78nAl2yjycBcrK/JwFysiQBCitYIdgb9FmyECQnERI5sBkQsBbQsh0ZChESObAZELIfAQorWCHYG/RZMDEBNCYjIgYVIzQ2MzIWFRQGBxYWFRQGBxEjESYmNTMWMzI2NTQnIzUzNgLicGtbZvPzw9j0bl1vbrus85uw8wvKd3TglJrHA0NGT0Y8lLOnlluKJySRW4auGP5BAcIYrIeTV0imA7AEAAABAHb+mgUsBI0ADwCosgMQERESOQCwAEVYsAwvG7EMHT5ZsABFWLAJLxuxCR0+WbAARViwAS8bsQEXPlmwAEVYsAYvG7EGDz5ZsABFWLADLxuxAw8+WbIKBgkREjmwCi+0rwq/CgJdsj8KAXGyzwoBcbI/CgFysv8KAXGyDwoBcrRvCn8KAnG03wrvCgJdtB8KLwoCXbJfCgFysgUBCitYIdgb9FmwAxCyDgcKK1gh2Bv0WTAxASMRIxEhESMRMxEhETMRMwUs88T99PPzAgzzxP6aAWYB2/4lBI3+EQHv/CgAAQBP/kMEQwSdAB4AXrIbHyAREjkAsABFWLAOLxuxDh0+WbAARViwBC8bsQQRPlmwAEVYsAMvG7EDDz5ZsAbQshIOAxESObAOELIVAQorWCHYG/RZsAMQshsBCitYIdgb9FmyHgMOERI5MDEBBgYHESMRJgInNTQ2NjMyBBcjJiYjIBEVFBYzMjY3BEIMxqnztc8Bfuyc1gEEFPMMfXL+7YaHeHwNAYSf0Bv+SQG5JAEf3U+p/4rawnBp/o5IubVicP//AAUAAAQ2BI0CBgHSAAD//wAK/joFqASjAiYCFwAAAAcBsALm/6D//wB2AAAEbgXSAiYB/gAAAQcAcACCACIACQCwAC+wCtwwMQD//wAf/+wEOQXSAiYCAQAAAQYAcEIiAAkAsAIvsBDcMDEA//8AUAAABU0EjQIGAfEAAP//ABL+VQVCBbACJgAlAAAABwCjAYIAA///AFr+WQP7BE4CJgBFAAAABwCjALUAB///AJT+XARMBbACJgApAAAABwCjAUAACv//AFP+UgQLBE4CJgBJAAAABwCjAQQAAP//AHj+ngGLBDoCJgCMAAAABwCsA1wACgAAAA8AugADAAEECQAAAF4AAAADAAEECQABABoAXgADAAEECQACAA4AeAADAAEECQADABoAXgADAAEECQAEABoAXgADAAEECQAFACwAhgADAAEECQAGABoAsgADAAEECQAHAEAAzAADAAEECQAJAAwBDAADAAEECQALABQBGAADAAEECQAMACYBLAADAAEECQANAFwBUgADAAEECQAOAFQBrgADAAEECQAQAAwCAgADAAEECQARAAwCDgBDAG8AcAB5AHIAaQBnAGgAdAAgADIAMAAxADEAIABHAG8AbwBnAGwAZQAgAEkAbgBjAC4AIABBAGwAbAAgAFIAaQBnAGgAdABzACAAUgBlAHMAZQByAHYAZQBkAC4AUgBvAGIAbwB0AG8AIABNAGUAZABpAHUAbQBSAGUAZwB1AGwAYQByAFYAZQByAHMAaQBvAG4AIAAyAC4AMAAwADEAMQA1ADIAOwAgADIAMAAxADQAUgBvAGIAbwB0AG8ALQBNAGUAZABpAHUAbQBSAG8AYgBvAHQAbwAgAGkAcwAgAGEAIAB0AHIAYQBkAGUAbQBhAHIAawAgAG8AZgAgAEcAbwBvAGcAbABlAC4ARwBvAG8AZwBsAGUARwBvAG8AZwBsAGUALgBjAG8AbQBDAGgAcgBpAHMAdABpAGEAbgAgAFIAbwBiAGUAcgB0AHMAbwBuAEwAaQBjAGUAbgBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAQQBwAGEAYwBoAGUAIABMAGkAYwBlAG4AcwBlACwAIABWAGUAcgBzAGkAbwBuACAAMgAuADAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGEAcABhAGMAaABlAC4AbwByAGcALwBsAGkAYwBlAG4AcwBlAHMALwBMAEkAQwBFAE4AUwBFAC0AMgAuADAAUgBvAGIAbwB0AG8ATQBlAGQAaQB1AG0AAwAAAAAAAP9qAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAIACAAC//8ADwABAAAACgBcAKwABERGTFQAGmN5cmwAKGdyZWsANmxhdG4ARAAEAAAAAP//AAIAAAAEAAQAAAAA//8AAgABAAUABAAAAAD//wACAAIABgAEAAAAAP//AAIAAwAHAAhjcHNwADJjcHNwADhjcHNwAD5jcHNwAERrZXJuAEprZXJuAEprZXJuAEprZXJuAEoAAAABAAEAAAABAAMAAAABAAIAAAABAAAAAAABAAQABQAMAAwADAAMAd4AAQAAAAEACAABAAoABQAkAEgAAQDeAAgAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwAPQA+AGUAZwCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkYCRwJJAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAoIChAKGAogCigKMAo4CkAKSApQClgKYApoCnAKeAqACogKkAqYCqAKqAqwCrgKxArMCtQK3ArkCuwK9Ar8CwQLEAsYCyALKAswCzgLQAtIC1ALYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvEC8wL1A1IDUwNUA1UDVgNXA1gDWgNbA1wDXQNeA18DYANhA2MDZANlA2YDZwNoA2kDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgO6A7wDvgPTA9kD3wRIBEoETgRWBFgEXQRpAAIAAAACAAo7ugABA2wABAAAAbEGsjaeNp4G3AcyN0A2TDbKO4o32Ac4Ot463jgeOow16jreOt47ijZWCnIK9Dg+OB42pDZ4OTI7ADYqC143tjbcN+4LoAzKDNQ5ljmWN/g23DYYDco4JA4sOZA4JA5GNtwOiDnKN0A7ijdADwIP/BD6EdgSdjgkEnw5lhU6FxQYJhhAGEYYTBpGGkwaghq0GzIcqB5aIBg63iFOIuA5MiUuOt463jb2Ot463iX4J5I5oChwKTIpwCoeKvg5KCuCOZAsTCx2Ldw23DBiMKAx0jOQNtwyVDLaMwQzWjOQN0A3+DakOCQztjbcOco5KDqMOow5KDaeM+A2njaeNp41UjV4NYI1jDWqNbw1zjXgNso7ijuKO4o7ijg+N0A3QDdAN0A3QDdAN0A2yjfYN9g32DfYOt463jreOt463juKO4o7ijuKO4o4HjgeOB44HjsAN7Y3tje2N7Y3tje2N7Y37jfuN+437jmWN/g3+Df4N/g3+DgkOCQ3QDe2N0A3tjdAN7Y2yjbKNso2yjuKN9g37jfYN+432DfuN9g37jfYN+463jmWOt463jreOt463jgeOow16jXqNeo16jreOZY63jmWOt45ljmWO4o3+DuKN/g7ijf4Nhg2GDYYOD44Pjg+OB44HjgeOB44HjgeNng7ADgkOwA2KjYqNio3QDfYOt463juKOwA3QDZMN9g2KjreOt46jDreOt47ijZWOD47ADkyOt47ADmWN/g4JDf4N9g5yjreOt44HjqMOow29jdANkw5yjfYOt463juKNlY2yjg+OTI3tjfuN/g23DgkOZA37jkoOCQ2eDZ4Nng7ADgkNp42njaeOt45ljdAN7Y32DfuNqQ4JDbKOwA4JDreOTI5kDreN0A3tjdAN7Y32DfuN+437jkyOZA7ijf4N/g23Db2OCQ29jgkNvY4JDkyOZA3QDe2N0A3tjdAN7Y3QDe2N0A3tjdAN7Y3QDe2N0A3tjdAN7Y3QDe2N0A3tjdAN7Y32DfuN9g37jfYN+432DfuN9g37jfYN+432DfuN9g37jreOt47ijf4O4o3+DuKN/g7ijf4O4o3+DuKN/g7ijf4N/g4HjgeOwA4JDsAOCQ7ADgkOow63jg+OTI5kDnKOSg5MjmQOZY5oDnKOow63jreOwA7igACAIsABAAEAAAABgAGAAEACwAMAAIAEwATAAQAJQAqAAUALAA2AAsAOAA/ABYARQBGAB4ASQBKACAATABMACIATwBPACMAUQBUACQAVgBWACgAWABYACkAWgBdACoAXwBfAC4AigCKAC8AnACcADAAsAC0ADEAtgC4ADYAugC6ADkAvAC8ADoAvwDAADsAwgDCAD0AxADEAD4AxgDNAD8A0QDRAEcA0wDdAEgA3wDfAFMA4QDjAFQA5QDuAFcA8ADwAGEA9QD3AGIA+gD7AGUA/QD/AGcBAgEEAGoBCQEJAG0BDAEMAG4BFwEZAG8BIQEhAHIBKwEtAHMBMAEwAHYBMgEyAHcBSQFJAHgBbAFtAHkBbwFxAHsBugG6AH4BvQG9AH8BxAHFAIAByAHIAIIBygHLAIMBzQHNAIUCKAIoAIYCKgIrAIcCRgJHAIkCSQJJAIsCSwJsAIwCbgJxAK4CdgJ7ALICgAKIALgCigKKAMECjAKMAMICjgKOAMMCkAKQAMQCkgKbAMUCpAKmAM8CqAKoANICqgKqANMCrAKsANQCrgKuANUCsQKxANYCswKzANcCtQK1ANgCtwK3ANkCuQK5ANoCuwK7ANsCvQLJANwCywLLAOkCzQLNAOoCzwLPAOsC2gLaAOwC3ALcAO0C3gLeAO4C4ALgAO8C4gLiAPAC5ALkAPEC5gLmAPIC6ALoAPMC6gLqAPQC7ALsAPUC7gLxAPYC8wLzAPoC9QL1APsDUgNXAPwDWgNpAQIDbANsARIDcANwARMDcgNyARQDdgN2ARUDeQN6ARYDfAOFARgDhwOJASIDiwOQASUDkgOTASsDlQOYAS0DngOfATEDoQOhATMDowOjATQDpQOoATUDqwOwATkDsgOyAT8DtgO3AUADvAO8AUIDvgPHAUMDygPLAU0DzQPQAU8D1wPYAVMD3APcAVUD3gPkAVYD6QPqAV0D7gQWAV8EGAQYAYgEGgQnAYkELwQvAZcEMgQyAZgENAQ0AZkEQARFAZoESARIAaAESgRKAaEETARMAaIETgRPAaMEVARXAaUEWgRaAakEXARdAaoEXwRfAawEYwRjAa0EZQRlAa4EaQRpAa8EqQSpAbAACgA4/8QA0f/EANX/xAEy/8QBOv/EAtr/xALc/8QC3v/EA43/xARM/8QAFQA6ABQAOwAmAD0AFgEYABQCZQAWAuwAJgLuABYC8AAWA1cAFgNmABYDaQAWA58AJgOhACYDowAmA6UAFgO2ABQDvgAWBEAAFgRCABYERAAWBGkAFgABABP/CADOABD+7gAS/u4AJf9AAC7/MAA4ABQARf/eAEf/6wBI/+sASf/rAEv/6wBT/+sAVf/rAFb/5gBZ/+oAWv/oAF3/6ACT/+sAmP/rAJr/6gCx/0AAs/9AALr/6wC8/+gAx//rAMj/6wDK/+oA0QAUANUAFAD2/+sBAv/rAQz/QAEX/+sBGf/oAR3/6wEh/+sBMgAUATn/6wE6ABQBS//rAUz/6wFW/+sBbv7uAXL+7gF2/u4Bd/7uAbr/wAJL/0ACTP9AAk3/QAJO/0ACT/9AAlD/QAJR/0ACZv/eAmf/3gJo/94Caf/eAmr/3gJr/94CbP/eAm3/6wJu/+sCb//rAnD/6wJx/+sCd//rAnj/6wJ5/+sCev/rAnv/6wJ8/+oCff/qAn7/6gJ//+oCgP/oAoH/6AKC/0ACg//eAoT/QAKF/94Chv9AAof/3gKJ/+sCi//rAo3/6wKP/+sCkf/rApP/6wKV/+sCl//rApn/6wKb/+sCnf/rAp//6wKh/+sCo//rArH/MALF/+sCx//rAsn/6wLaABQC3AAUAt4AFALh/+oC4//qAuX/6gLn/+oC6f/qAuv/6gLv/+gDUv9AA1r/QANq/+sDbv/qA3D/6wNy/+gDdf/qA3b/6wN3/+oDfv8wA4L/QAONABQDj//eA5D/6wOS/+sDlP/rA5X/6AOX/+sDnv/oA6b/6AOu/0ADr//eA7L/6wO3/+gDuP/rA73/6wO//+gDxP9AA8X/3gPG/0ADx//eA8v/6wPN/+sDzv/rA9j/6wPa/+sD3P/rA+D/6APi/+gD5P/oA+v/6wPu/0AD7//eA/D/QAPx/94D8v9AA/P/3gP0/0AD9f/eA/b/QAP3/94D+P9AA/n/3gP6/0AD+//eA/z/QAP9/94D/v9AA///3gQA/0AEAf/eBAL/QAQD/94EBP9ABAX/3gQH/+sECf/rBAv/6wQN/+sED//rBBH/6wQT/+sEFf/rBBv/6wQd/+sEH//rBCH/6wQj/+sEJf/rBCf/6wQp/+sEK//rBC3/6wQv/+sEMf/rBDP/6gQ1/+oEN//qBDn/6gQ7/+oEPf/qBD//6gRB/+gEQ//oBEX/6ARMABQAIAA4/98AOv/kADv/7AA9/90A0f/fANX/3wEY/+QBMv/fATr/3wG6AA4CZf/dAtr/3wLc/98C3v/fAuz/7ALu/90C8P/dA1f/3QNm/90Daf/dA43/3wOf/+wDof/sA6P/7AOl/90Dtv/kA77/3QRA/90EQv/dBET/3QRM/98Eaf/dABoAOP/OADr/7QA9/9AA0f/OANX/zgEY/+0BMv/OATr/zgJl/9AC2v/OAtz/zgLe/84C7v/QAvD/0ANX/9ADZv/QA2n/0AON/84Dpf/QA7b/7QO+/9AEQP/QBEL/0ARE/9AETP/OBGn/0AAQAC7/7gA5/+4CYf/uAmL/7gJj/+4CZP/uArH/7gLg/+4C4v/uAuT/7gLm/+4C6P/uAur/7gN+/+4EMv/uBDT/7gBKAAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCT/+gAmP/oALr/6ADH/+gAyP/oAPb/6AEC/+gBHf/oASH/6AE5/+gBS//oAUz/6AFW/+gBbAAQAW0AEAFvABABcAAQAXEAEAJt/+gCbv/oAm//6AJw/+gCcf/oAon/6AKL/+gCjf/oAo//6AKR/+gCk//oApX/6AKX/+gCmf/oApv/6AKd/+gCn//oAqH/6AKj/+gDav/oA5D/6AOU/+gDl//oA6cAEAOoABADqwAQA7L/6AO4/+gDvf/oA8v/6APN/+gDzv/oA9r/6APr/+gEB//oBAn/6AQL/+gEDf/oBA//6AQR/+gEE//oBBX/6AQp/+gEK//oBC3/6AQx/+gAAgD1/9YBbf+YAD0AR//sAEj/7ABJ/+wAS//sAFX/7ACT/+wAmP/sALr/7ADH/+wAyP/sAPb/7AEC/+wBHf/sASH/7AE5/+wBS//sAUz/7AFW/+wCbf/sAm7/7AJv/+wCcP/sAnH/7AKJ/+wCi//sAo3/7AKP/+wCkf/sApP/7AKV/+wCl//sApn/7AKb/+wCnf/sAp//7AKh/+wCo//sA2r/7AOQ/+wDlP/sA5f/7AOy/+wDuP/sA73/7APL/+wDzf/sA87/7APa/+wD6//sBAf/7AQJ/+wEC//sBA3/7AQP/+wEEf/sBBP/7AQV/+wEKf/sBCv/7AQt/+wEMf/sABgAU//iARf/4gFtABgCd//iAnj/4gJ5/+ICev/iAnv/4gLF/+ICx//iAsn/4gNw/+IDdv/iA5L/4gPY/+ID3P/iBBv/4gQd/+IEH//iBCH/4gQj/+IEJf/iBCf/4gQv/+IABgAQ/4QAEv+EAW7/hAFy/4QBdv+EAXf/hAAQAC7/7AA5/+wCYf/sAmL/7AJj/+wCZP/sArH/7ALg/+wC4v/sAuT/7ALm/+wC6P/sAur/7AN+/+wEMv/sBDT/7AAeAAb/8gAL//IAWv/zAF3/8wC8//MA9f/1ARn/8wFs//IBbf/yAW//8gFw//IBcf/yAoD/8wKB//MC7//zA3L/8wOV//MDnv/zA6b/8wOn//IDqP/yA6v/8gO3//MDv//zA+D/8wPi//MD5P/zBEH/8wRD//MERf/zAD4AJ//zACv/8wAz//MANf/zAIP/8wCS//MAl//zALL/8wDDAA0A0v/zAQf/8wEW//MBGv/zARz/8wEe//MBIP/zATj/8wFV//MCKP/zAin/8wIr//MCLP/zAlL/8wJc//MCXf/zAl7/8wJf//MCYP/zAoj/8wKK//MCjP/zAo7/8wKc//MCnv/zAqD/8wKi//MCxP/zAsb/8wLI//MC+f/zA1b/8wNj//MDif/zA4z/8wO5//MDvP/zA9f/8wPZ//MD2//zBBr/8wQc//MEHv/zBCD/8wQi//MEJP/zBCb/8wQo//MEKv/zBCz/8wQu//MEMP/zBKn/8wA/ACf/5gAr/+YAM//mADX/5gCD/+YAkv/mAJf/5gCy/+YAt//CAMMAEADS/+YBB//mARb/5gEa/+YBHP/mAR7/5gEg/+YBOP/mAVX/5gIo/+YCKf/mAiv/5gIs/+YCUv/mAlz/5gJd/+YCXv/mAl//5gJg/+YCiP/mAor/5gKM/+YCjv/mApz/5gKe/+YCoP/mAqL/5gLE/+YCxv/mAsj/5gL5/+YDVv/mA2P/5gOJ/+YDjP/mA7n/5gO8/+YD1//mA9n/5gPb/+YEGv/mBBz/5gQe/+YEIP/mBCL/5gQk/+YEJv/mBCj/5gQq/+YELP/mBC7/5gQw/+YEqf/mADcAJf/kADz/0gA9/9MAsf/kALP/5ADD/+IA2f/SAQz/5AJL/+QCTP/kAk3/5AJO/+QCT//kAlD/5AJR/+QCZf/TAoL/5AKE/+QChv/kAu7/0wLw/9MDUv/kA1f/0wNa/+QDZv/TA2f/0gNp/9MDgv/kA47/0gOl/9MDrv/kA77/0wPB/9IDxP/kA8b/5APP/9ID6f/SA+7/5APw/+QD8v/kA/T/5AP2/+QD+P/kA/r/5AP8/+QD/v/kBAD/5AQC/+QEBP/kBED/0wRC/9MERP/TBE7/0gRW/9IEaf/TACcAEP9GABL/RgAl/80Asf/NALP/zQDG//IBDP/NAW7/RgFy/0YBdv9GAXf/RgJL/80CTP/NAk3/zQJO/80CT//NAlD/zQJR/80Cgv/NAoT/zQKG/80DUv/NA1r/zQOC/80Drv/NA8T/zQPG/80D7v/NA/D/zQPy/80D9P/NA/b/zQP4/80D+v/NA/z/zQP+/80EAP/NBAL/zQQE/80AAQDDAA4ArwBH/9wASP/cAEn/3ABL/9wAUf/BAFL/wQBT/9YAVP/BAFX/3ABZ/90AWv/hAF3/4QCT/9wAmP/cAJr/3QC6/9wAvP/hAL7/5gDA/8EAwf/rAML/6QDE//AAxf/nAMf/3ADI/9wAyf/jAMr/3QDL/84AzP/UAM3/2wDr/8EA7//BAPD/wQDy/8EA8//BAPT/wQD2/9wA9//BAPn/wQD6/8EA/f/BAP//wQEC/9wBBP/BARf/1gEZ/+EBHf/cASH/3AE1/8EBOf/cAUT/wQFJ/8EBS//cAUz/3AFW/9wCbf/cAm7/3AJv/9wCcP/cAnH/3AJ2/8ECd//WAnj/1gJ5/9YCev/WAnv/1gJ8/90Cff/dAn7/3QJ//90CgP/hAoH/4QKJ/9wCi//cAo3/3AKP/9wCkf/cApP/3AKV/9wCl//cApn/3AKb/9wCnf/cAp//3AKh/9wCo//cAr7/wQLA/8ECwv/BAsP/wQLF/9YCx//WAsn/1gLh/90C4//dAuX/3QLn/90C6f/dAuv/3QLv/+EDav/cA2z/wQNu/90DcP/WA3L/4QN1/90Ddv/WA3f/3QOQ/9wDkf/BA5L/1gOT/8EDlP/cA5X/4QOX/9wDmP/BA53/wQOe/+EDpv/hA63/wQOy/9wDs//BA7f/4QO4/9wDvf/cA7//4QPL/9wDzf/cA87/3APU/8ED1v/BA9j/1gPa/9wD3P/WA+D/4QPi/+ED5P/hA+j/wQPr/9wEB//cBAn/3AQL/9wEDf/cBA//3AQR/9wEE//cBBX/3AQb/9YEHf/WBB//1gQh/9YEI//WBCX/1gQn/9YEKf/cBCv/3AQt/9wEL//WBDH/3AQz/90ENf/dBDf/3QQ5/90EO//dBD3/3QQ//90EQf/hBEP/4QRF/+EESf/BBEv/wQRV/8EEYv/BBGT/wQRm/8EAdgAG/9oAC//aAEf/8ABI//AASf/wAEv/8ABV//AAWf/vAFr/3ABd/9wAk//wAJj/8ACa/+8Auv/wALz/3ADB/+wAwwAPAMX/6gDH//AAyP/wAMn/zgDK/+8Ay//nAPb/8AEC//ABGf/cAR3/8AEh//ABOf/wAUv/8AFM//ABVv/wAWz/2gFt/9oBb//aAXD/2gFx/9oCbf/wAm7/8AJv//ACcP/wAnH/8AJ8/+8Cff/vAn7/7wJ//+8CgP/cAoH/3AKJ//ACi//wAo3/8AKP//ACkf/wApP/8AKV//ACl//wApn/8AKb//ACnf/wAp//8AKh//ACo//wAuH/7wLj/+8C5f/vAuf/7wLp/+8C6//vAu//3ANq//ADbv/vA3L/3AN1/+8Dd//vA5D/8AOU//ADlf/cA5f/8AOe/9wDpv/cA6f/2gOo/9oDq//aA7L/8AO3/9wDuP/wA73/8AO//9wDy//wA83/8APO//AD2v/wA+D/3APi/9wD5P/cA+v/8AQH//AECf/wBAv/8AQN//AED//wBBH/8AQT//AEFf/wBCn/8AQr//AELf/wBDH/8AQz/+8ENf/vBDf/7wQ5/+8EO//vBD3/7wQ//+8EQf/cBEP/3ARF/9wARAAQAAwAEgAMAEf/5wBI/+cASf/nAEv/5wBV/+cAk//nAJj/5wC6/+cAwwAPAMf/5wDI/+cA9v/nAQL/5wEd/+cBIf/nATn/5wFL/+cBTP/nAVb/5wFuAAwBcgAMAXYADAF3AAwCbf/nAm7/5wJv/+cCcP/nAnH/5wKJ/+cCi//nAo3/5wKP/+cCkf/nApP/5wKV/+cCl//nApn/5wKb/+cCnf/nAp//5wKh/+cCo//nA2r/5wOQ/+cDlP/nA5f/5wOy/+cDuP/nA73/5wPL/+cDzf/nA87/5wPa/+cD6//nBAf/5wQJ/+cEC//nBA3/5wQP/+cEEf/nBBP/5wQV/+cEKf/nBCv/5wQt/+cEMf/nAAYAyf/qAOz/7gD1/9UA/f/tATP/7AFY/+wAAQD1/8AAAQDJACAAfgAGAAwACwAMAEf/6ABI/+gASf/oAEoADABL/+gAU//qAFX/6ABaAAsAXQALAJP/6ACY/+gAuv/oALwACwDD/5AAxQALAMf/6ADI/+gAyQAMAPb/6AEC/+gBF//qARkACwEd/+gBIf/oATn/6AFL/+gBTP/oAVb/6AFsAAwBbQAMAW8ADAFwAAwBcQAMAbr/vwG8/+4BwP/sAcj/7QHK/+wBzP/1Ac0ADgHPAA0B0gANAm3/6AJu/+gCb//oAnD/6AJx/+gCd//qAnj/6gJ5/+oCev/qAnv/6gKAAAsCgQALAon/6AKL/+gCjf/oAo//6AKR/+gCk//oApX/6AKX/+gCmf/oApv/6AKd/+gCn//oAqH/6AKj/+gCxf/qAsf/6gLJ/+oC7wALA2r/6ANw/+oDcgALA3b/6gOQ/+gDkv/qA5T/6AOVAAsDl//oA54ACwOmAAsDpwAMA6gADAOrAAwDsv/oA7cACwO4/+gDvf/oA78ACwPL/+gDzf/oA87/6APY/+oD2v/oA9z/6gPgAAsD4gALA+QACwPr/+gEB//oBAn/6AQL/+gEDf/oBA//6AQR/+gEE//oBBX/6AQb/+oEHf/qBB//6gQh/+oEI//qBCX/6gQn/+oEKf/oBCv/6AQt/+gEL//qBDH/6ARBAAsEQwALBEUACwABAPX/4gANAFz/7QBe/+0A7f/tAPX/wALy/+0C9P/tAvb/7QOW/+0Dwv/tA9D/7QPq/+0ET//tBFf/7QAMAFz/8gBe//IA7f/yAvL/8gL0//IC9v/yA5b/8gPC//ID0P/yA+r/8gRP//IEV//yAB8AWv/0AFz/8gBd//QAXv/zALz/9ADt//IBGf/0AoD/9AKB//QC7//0AvL/8wL0//MC9v/zA3L/9AOV//QDlv/yA57/9AOm//QDt//0A7//9APC//ID0P/yA+D/9APi//QD5P/0A+r/8gRB//QEQ//0BEX/9ARP//IEV//yAF0ABv/KAAv/ygA4/9IAOv/UADz/9AA9/9MAWv/mAFz/7wBd/+YAvP/mANH/0gDV/9IA2f/0AN3/7QDg/+EA5f/UAO3/7wD1/8kA/f/RAQj/5QEY/9QBGf/mAR//4wEy/9IBM//EATr/0gE8/+EBTf/UAU7/9QFP/+cBV/9kAVj/yQFs/8oBbf/KAW//ygFw/8oBcf/KAmX/0wKA/+YCgf/mAtr/0gLc/9IC3v/SAu7/0wLv/+YC8P/TA1f/0wNm/9MDZ//0A2n/0wNy/+YDgf/tA43/0gOO//QDlf/mA5b/7wOe/+YDpf/TA6b/5gOn/8oDqP/KA6v/ygO2/9QDt//mA77/0wO//+YDwf/0A8L/7wPP//QD0P/vA9//7QPg/+YD4f/tA+L/5gPj/+0D5P/mA+X/4QPp//QD6v/vBED/0wRB/+YEQv/TBEP/5gRE/9MERf/mBEz/0gRO//QET//vBFD/4QRS/+EEVv/0BFf/7wRp/9MAbAAG/8AAC//AADj/nQA6/8cAPP/wAD3/qwBR/9IAUv/SAFT/0gDA/9IA0f+dANP/9QDV/50A2f/wANz/9QDd/+oA4P/lAOX/wQDr/9IA7//SAPD/0gDy/9IA8//SAPT/0gD1/80A9//SAPn/0gD6/9IA/f/SAP//0gEE/9IBGP/HATL/nQEz/8wBNf/SATr/nQE8/+UBP//fAUT/0gFJ/9IBTf/OAU//6gFR//UBV/+eAVj/zgFs/8ABbf/AAW//wAFw/8ABcf/AAmX/qwJ2/9ICvv/SAsD/0gLC/9ICw//SAtr/nQLc/50C3v+dAu7/qwLw/6sDV/+rA2b/qwNn//ADaf+rA2z/0gOB/+oDjf+dA47/8AOR/9IDk//SA5j/0gOd/9IDpf+rA6f/wAOo/8ADq//AA63/0gOz/9IDtv/HA77/qwPB//ADz//wA9T/0gPW/9ID3//qA+H/6gPj/+oD5f/lA+j/0gPp//AD7P/1BED/qwRC/6sERP+rBEn/0gRL/9IETP+dBE7/8ARQ/+UEUv/lBFX/0gRW//AEYv/SBGT/0gRm/9IEZ//1BGn/qwBvAAb/sQAL/7EAOP+eADr/xQA8//IAPf+oAFH/zwBS/88AVP/PAFz/7wDA/88A0f+eANX/ngDZ//IA3f/sAOD/4QDl/8IA6//PAO3/7wDv/88A8P/PAPL/zwDz/88A9P/PAPX/xgD3/88A+f/PAPr/zwD9/88A///PAQT/zwEY/8UBMv+eATP/wAE1/88BOv+eATz/4QE//98BRP/PAUn/zwFN/80BT//oAVf/nwFY/8YBbP+xAW3/sQFv/7EBcP+xAXH/sQJl/6gCdv/PAr7/zwLA/88Cwv/PAsP/zwLa/54C3P+eAt7/ngLu/6gC8P+oA1f/qANm/6gDZ//yA2n/qANs/88Dgf/sA43/ngOO//IDkf/PA5P/zwOW/+8DmP/PA53/zwOl/6gDp/+xA6j/sQOr/7EDrf/PA7P/zwO2/8UDvv+oA8H/8gPC/+8Dz//yA9D/7wPU/88D1v/PA9//7APh/+wD4//sA+X/4QPo/88D6f/yA+r/7wRA/6gEQv+oBET/qARJ/88ES//PBEz/ngRO//IET//vBFD/4QRS/+EEVf/PBFb/8gRX/+8EYv/PBGT/zwRm/88Eaf+oAE0AOP++AFH/4QBS/+EAVP/hAFr/7wBd/+8AvP/vAMD/4QDR/74A1f++AOX/yQDr/+EA7//hAPD/4QDy/+EA8//hAPT/4QD1/98A9//hAPn/4QD6/+EA/f/hAP//4QEE/+EBCP/tARn/7wEf/+sBMv++ATP/3wE1/+EBOv++AT//6QFE/+EBSf/hAU7/9QFY/+ACdv/hAoD/7wKB/+8Cvv/hAsD/4QLC/+ECw//hAtr/vgLc/74C3v++Au//7wNs/+EDcv/vA43/vgOR/+EDk//hA5X/7wOY/+EDnf/hA57/7wOm/+8Drf/hA7P/4QO3/+8Dv//vA9T/4QPW/+ED4P/vA+L/7wPk/+8D6P/hBEH/7wRD/+8ERf/vBEn/4QRL/+EETP++BFX/4QRi/+EEZP/hBGb/4QBkADj/5gA6/+cAPP/yAD3/5wBR/9YAUv/WAFT/1gBc//EAwP/WANH/5gDV/+YA2f/yAN3/7gDg/+gA5f/mAOv/1gDt//EA7//WAPD/1gDy/9YA8//WAPT/1gD1/9AA9//WAPn/1gD6/9YA/f/WAP//1gEE/9YBGP/nATL/5gEz/84BNf/WATr/5gE8/+gBRP/WAUn/1gFN/+cBT//tAVf/5gFY/9ACZf/nAnb/1gK+/9YCwP/WAsL/1gLD/9YC2v/mAtz/5gLe/+YC7v/nAvD/5wNX/+cDZv/nA2f/8gNp/+cDbP/WA4H/7gON/+YDjv/yA5H/1gOT/9YDlv/xA5j/1gOd/9YDpf/nA63/1gOz/9YDtv/nA77/5wPB//IDwv/xA8//8gPQ//ED1P/WA9b/1gPf/+4D4f/uA+P/7gPl/+gD6P/WA+n/8gPq//EEQP/nBEL/5wRE/+cESf/WBEv/1gRM/+YETv/yBE//8QRQ/+gEUv/oBFX/1gRW//IEV//xBGL/1gRk/9YEZv/WBGn/5wCTACUAEAAn/+gAK//oADP/6AA1/+gAOP/gADr/4AA9/98Ag//oAJL/6ACX/+gAsQAQALL/6ACzABAA0f/gANL/6ADTABAA1f/gANgAFADcABAA4P/hAOX/4ADsABMA8QAQAPj/4AEDABABB//oAQwAEAEW/+gBGP/gARr/6AEc/+gBHv/oASD/6AEy/+ABOP/oATr/4AE8/+EBPf/gAUD/4QFF/+kBTf/fAU//3gFRABABVf/oAVf/3wFZ//ICKP/oAin/6AIr/+gCLP/oAksAEAJMABACTQAQAk4AEAJPABACUAAQAlEAEAJS/+gCXP/oAl3/6AJe/+gCX//oAmD/6AJl/98CggAQAoQAEAKGABACiP/oAor/6AKM/+gCjv/oApz/6AKe/+gCoP/oAqL/6ALE/+gCxv/oAsj/6ALa/+AC3P/gAt7/4ALu/98C8P/fAvn/6ANSABADVv/oA1f/3wNaABADY//oA2b/3wNp/98DggAQA4n/6AOM/+gDjf/gA6X/3wOuABADtv/gA7n/6AO8/+gDvv/fA8QAEAPGABAD1//oA9n/6APb/+gD5f/hA+b/4APsABAD7QAQA+4AEAPwABAD8gAQA/QAEAP2ABAD+AAQA/oAEAP8ABAD/gAQBAAAEAQCABAEBAAQBBr/6AQc/+gEHv/oBCD/6AQi/+gEJP/oBCb/6AQo/+gEKv/oBCz/6AQu/+gEMP/oBED/3wRC/98ERP/fBEz/4ARQ/+EEUf/gBFL/4QRT/+AEZwAQBGgAEARp/98Eqf/oADIAG//yADj/8QA6//QAPP/0AD3/8ADR//EA0//1ANX/8QDZ//QA3P/1AN3/8wDl//EBGP/0ATL/8QE6//EBTf/yAU//8gFR//UBV//yAmX/8ALa//EC3P/xAt7/8QLu//AC8P/wA1f/8ANm//ADZ//0A2n/8AOB//MDjf/xA47/9AOl//ADtv/0A77/8APB//QDz//0A9//8wPh//MD4//zA+n/9APs//UEQP/wBEL/8ARE//AETP/xBE7/9ARW//QEZ//1BGn/8ABmACUADwA4/+YAOv/mADwADgA9/+YAsQAPALMADwDR/+YA0wAOANX/5gDYABMA2QAOANwADgDdAAsA4P/lAOX/5gDm//QA7AASAPEADwD1/+cA+P/oAP3/5wEDAA8BDAAPARj/5gEy/+YBM//nATr/5gE8/+UBPf/oAU3/5gFP/+YBUQAOAVf/5gFY/+cCSwAPAkwADwJNAA8CTgAPAk8ADwJQAA8CUQAPAmX/5gKCAA8ChAAPAoYADwLa/+YC3P/mAt7/5gLu/+YC8P/mA1IADwNX/+YDWgAPA2b/5gNnAA4Daf/mA4EACwOCAA8Djf/mA44ADgOl/+YDrgAPA7b/5gO+/+YDwQAOA8QADwPGAA8DzwAOA98ACwPhAAsD4wALA+X/5QPm/+gD6QAOA+wADgPtAA8D7gAPA/AADwPyAA8D9AAPA/YADwP4AA8D+gAPA/wADwP+AA8EAAAPBAIADwQEAA8EQP/mBEL/5gRE/+YETP/mBE4ADgRQ/+UEUf/oBFL/5QRT/+gEVgAOBGcADgRoAA8Eaf/mADcABv+/AAv/vwA4/58AOv/JAD3/rQDR/58A1f+fAN3/7ADg/+YA5f/EAPX/zQD9/9UBGP/JATL/nwEz/8wBOv+fATz/5gE//98BTf/RAU//7AFX/6EBWP/PAWz/vwFt/78Bb/+/AXD/vwFx/78CZf+tAtr/nwLc/58C3v+fAu7/rQLw/60DV/+tA2b/rQNp/60Dgf/sA43/nwOl/60Dp/+/A6j/vwOr/78Dtv/JA77/rQPf/+wD4f/sA+P/7APl/+YEQP+tBEL/rQRE/60ETP+fBFD/5gRS/+YEaf+tADAAOP/jADz/5QA9/+QA0f/jANP/5QDV/+MA2P/iANn/5QDc/+UA3f/pAPH/6gED/+oBMv/jATr/4wFR/+UBV//kAmX/5ALa/+MC3P/jAt7/4wLu/+QC8P/kA1f/5ANm/+QDZ//lA2n/5AOB/+kDjf/jA47/5QOl/+QDvv/kA8H/5QPP/+UD3//pA+H/6QPj/+kD6f/lA+z/5QPt/+oEQP/kBEL/5ARE/+QETP/jBE7/5QRW/+UEZ//lBGj/6gRp/+QAIwA4/+IAPP/kANH/4gDT/+QA1f/iANj/4QDZ/+QA3P/kAN3/6QDs/+QA8f/rAQP/6wEy/+IBOv/iAVH/5ALa/+IC3P/iAt7/4gNn/+QDgf/pA43/4gOO/+QDwf/kA8//5APf/+kD4f/pA+P/6QPp/+QD7P/kA+3/6wRM/+IETv/kBFb/5ARn/+QEaP/rABcAOP/rAD3/8wDR/+sA1f/rATL/6wE6/+sCZf/zAtr/6wLc/+sC3v/rAu7/8wLw//MDV//zA2b/8wNp//MDjf/rA6X/8wO+//MEQP/zBEL/8wRE//METP/rBGn/8wA2AFH/7wBS/+8AVP/vAFz/8ADA/+8A6//vAOz/7gDt//AA7//vAPD/7wDy/+8A8//vAPT/7wD1/+4A9//vAPn/7wD6/+8A/f/vAP//7wEE/+8BCP/0AR//8QEz/+8BNf/vAUT/7wFJ/+8BWP/vAnb/7wK+/+8CwP/vAsL/7wLD/+8DbP/vA5H/7wOT/+8Dlv/wA5j/7wOd/+8Drf/vA7P/7wPC//AD0P/wA9T/7wPW/+8D6P/vA+r/8ARJ/+8ES//vBE//8ARV/+8EV//wBGL/7wRk/+8EZv/vACIABv/yAAv/8gBa//UAXf/1ALz/9QD1//QA/f/0AQj/9QEZ//UBM//1AVj/9QFs//IBbf/yAW//8gFw//IBcf/yAoD/9QKB//UC7//1A3L/9QOV//UDnv/1A6b/9QOn//IDqP/yA6v/8gO3//UDv//1A+D/9QPi//UD5P/1BEH/9QRD//UERf/1ADIAUf/uAFL/7gBU/+4AwP/uAOv/7gDsABQA7//uAPD/7gDy/+4A8//uAPT/7gD1/+0A9//uAPj/7QD5/+4A+v/uAPv/0AD9/+4A///uAQT/7gEz/+0BNf/uAT3/7QFE/+4BSf/uAVj/7QJ2/+4Cvv/uAsD/7gLC/+4Cw//uA2z/7gOR/+4Dk//uA5j/7gOd/+4Drf/uA7P/7gPU/+4D1v/uA+b/7QPo/+4ESf/uBEv/7gRR/+0EU//tBFX/7gRi/+4EZP/uBGb/7gAKAAb/9QAL//UBbP/1AW3/9QFv//UBcP/1AXH/9QOn//UDqP/1A6v/9QBZAEf/8ABI//AASf/wAEv/8ABT/8cAVf/wAJP/8ACY//AAuv/wAMf/8ADI//AA9v/wAQL/8AEX/8cBG//rAR3/8AEh//ABOf/wAUv/8AFM//ABVv/wAbz/6wHA/+kByP/rAcr/6wJt//ACbv/wAm//8AJw//ACcf/wAnf/xwJ4/8cCef/HAnr/xwJ7/8cCif/wAov/8AKN//ACj//wApH/8AKT//AClf/wApf/8AKZ//ACm//wAp3/8AKf//ACof/wAqP/8ALF/8cCx//HAsn/xwNq//ADcP/HA3b/xwOQ//ADkv/HA5T/8AOX//ADsv/wA7j/8AO9//ADy//wA83/8APO//AD2P/HA9r/8APc/8cD6//wBAf/8AQJ//AEC//wBA3/8AQP//AEEf/wBBP/8AQV//AEG//HBB3/xwQf/8cEIf/HBCP/xwQl/8cEJ//HBCn/8AQr//AELf/wBC//xwQx//AAoQAGAA0ACwANAEX/8ABH/8AASP/AAEn/wABKAA0AS//AAFP/4gBV/8AAWgALAF0ACwCT/8AAmP/AALr/wAC8AAsAxv/WAMf/wADI/8AAy//VAOz/yADx/9cA9v/AAQL/wAED/9cBF//iARkACwEb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AD4AEgBFAEcAGQBJAEkAHABMAEwAHQBRAFQAHgBWAFYAIgBaAFoAIwBcAF4AJACKAIoAJwCwALMAKAC8ALwALADAAMAALQDGAMYALgDTANQALwDWANYAMQDZANkAMgDbAN0AMwDfAN8ANgDhAOEANwDjAOMAOADlAOUAOQDrAOsAOgDtAO0AOwD2APYAPAD7APsAPQD9AP4APgEDAQQAQAEJAQkAQgEMAQwAQwEXARkARAErAS0ARwEwATAASgEyATIASwFJAUkATAFsAXIATQF2AXcAVAIoAigAVgIqAisAVwJGAkcAWQJJAkkAWwJLAnEAXAJ2AnsAgwKAApAAiQKSApsAmgKkAqYApAKoAqgApwKqAqoAqAKsAqwAqQKuAq4AqgKxArEAqwKzArMArAK1ArUArQK3ArcArgK5ArkArwK7ArsAsAK9AskAsQLLAssAvgLNAs0AvwLPAs8AwALaAtoAwQLcAtwAwgLeAt4AwwLgAuAAxALiAuIAxQLkAuQAxgLmAuYAxwLoAugAyALqAuoAyQLsAuwAygLuAvYAywNSA1cA1ANaA2kA2gNsA2wA6gNwA3AA6wNyA3IA7AN2A3YA7QN5A3oA7gN8A4UA8AOHA4kA+gOLA5AA/QOSA5gBAwOeA58BCgOhA6EBDAOjA6MBDQOlA6gBDgOrA7ABEgOyA7IBGAO2A7cBGQO8A8cBGwPKA8sBJwPNA9ABKQPXA9gBLQPcA9wBLwPeA+QBMAPpA+oBNwPuBBYBOQQYBBgBYgQaBCcBYwQvBC8BcQQyBDIBcgQ0BDQBcwRABEUBdARIBEgBegRKBEoBewRMBEwBfAROBE8BfQRUBFcBfwRaBFoBgwRcBF0BhARfBF8BhgRjBGMBhwRlBGUBiARpBGkBiQSpBKkBigACAU4AEAAQAAEAEgASAAEAJQAlAAIAJgAmAAMAJwAnAAQAKAAoAAUAKQApAAYALAAtAAcALgAuAAgALwAvAAkAMAAwAAoAMQAyAAcAMwAzAAUANAA0AAsAOAA4AAwAOQA5AAgAOgA6AA0AOwA7AA4APAA8AA8APQA9ABAAPgA+ABEARQBFABIARgBGABMARwBHABQASQBJABUATABMABYAUQBSABYAUwBTABcAVABUABMAVgBWABgAWgBaABkAXABcABoAXQBdABkAXgBeABsAigCKABMAsACwABwAsQCxAAIAsgCyAAUAswCzAAIAvAC8ABkAwADAABYAxgDGABMA0wDUAB0A1gDWAAcA2QDZAA8A2wDcAAcA3QDdAB4A3wDfAAcA4QDhAAcA4wDjAB0A5QDlAB0A6wDrAB8A7QDtABoA9gD2ABMA+wD7ACAA/QD9ACAA/gD+ABMBAwEEACABCQEJACABDAEMAAIBFwEXABcBGAEYAA0BGQEZABkBKwErABMBLAEsABwBLQEtAB8BMAEwAAkBMgEyAAkBSQFJAB8BbgFuAAEBcgFyAAEBdgF3AAECKAIoAAQCKgIrAAUCRgJHAAUCSQJJAAwCSwJRAAICUgJSAAQCUwJWAAYCVwJbAAcCXAJgAAUCYQJkAAgCZQJlABACZgJsABICbQJtABQCbgJxABUCdgJ2ABYCdwJ7ABcCgAKBABkCggKCAAICgwKDABIChAKEAAIChQKFABIChgKGAAIChwKHABICiAKIAAQCiQKJABQCigKKAAQCiwKLABQCjAKMAAQCjQKNABQCjgKOAAQCjwKPABQCkAKQAAUCkgKSAAYCkwKTABUClAKUAAYClQKVABUClgKWAAYClwKXABUCmAKYAAYCmQKZABUCmgKaAAYCmwKbABUCpAKkAAcCpQKlABYCpgKmAAcCqAKoAAcCqgKqAAcCrAKsAAcCrgKuAAcCsQKxAAgCswKzAAkCtQK1AAoCtwK3AAoCuQK5AAoCuwK7AAoCvQK9AAcCvgK+ABYCvwK/AAcCwALAABYCwQLBAAcCwgLDABYCxALEAAUCxQLFABcCxgLGAAUCxwLHABcCyALIAAUCyQLJABcCywLLABgCzQLNABgCzwLPABgC2gLaAAwC3ALcAAwC3gLeAAwC4ALgAAgC4gLiAAgC5ALkAAgC5gLmAAgC6ALoAAgC6gLqAAgC7ALsAA4C7gLuABAC7wLvABkC8ALwABAC8QLxABEC8gLyABsC8wLzABEC9AL0ABsC9QL1ABEC9gL2ABsDUgNSAAIDUwNTAAYDVANVAAcDVgNWAAUDVwNXABADWgNaAAIDWwNbAAMDXANcAAYDXQNdABEDXgNfAAcDYANgAAkDYQNiAAcDYwNjAAUDZANkAAsDZQNlAAwDZgNmABADZwNnAA8DaANoAAcDaQNpABADbANsABYDcANwABcDcgNyABkDdgN2ABcDeQN5AAYDegN6ABwDfAN9AAcDfgN+AAgDfwOAAAkDgQOBAB4DggOCAAIDgwODAAMDhAOEABwDhQOFAAYDhwOIAAcDiQOJAAUDiwOLAAsDjAOMAAQDjQONAAwDjgOOAA8DjwOPABIDkAOQABUDkgOSABcDkwOTABMDlAOUABQDlQOVABkDlgOWABoDlwOXABUDmAOYAB8DngOeABkDnwOfAA4DoQOhAA4DowOjAA4DpQOlABADpgOmABkDrAOsAAcDrQOtABYDrgOuAAIDrwOvABIDsAOwAAYDsgOyABUDtgO2AA0DtwO3ABkDvAO8AAQDvQO9ABQDvgO+ABADvwO/ABkDwAPAAAcDwQPBAA8DwgPCABoDwwPDAAcDxAPEAAIDxQPFABIDxgPGAAIDxwPHABIDygPKAAYDywPLABUDzQPOABUDzwPPAA8D0APQABoD1wPXAAUD2APYABcD3APcABcD3gPeABMD3wPfAB4D4APgABkD4QPhAB4D4gPiABkD4wPjAB4D5APkABkD6QPpAA8D6gPqABoD7gPuAAID7wPvABID8APwAAID8QPxABID8gPyAAID8wPzABID9AP0AAID9QP1ABID9gP2AAID9wP3ABID+AP4AAID+QP5ABID+gP6AAID+wP7ABID/AP8AAID/QP9ABID/gP+AAID/wP/ABIEAAQAAAIEAQQBABIEAgQCAAIEAwQDABIEBAQEAAIEBQQFABIEBgQGAAYEBwQHABUECAQIAAYECQQJABUECgQKAAYECwQLABUEDAQMAAYEDQQNABUEDgQOAAYEDwQPABUEEAQQAAYEEQQRABUEEgQSAAYEEwQTABUEFAQUAAYEFQQVABUEFgQWAAcEGAQYAAcEGgQaAAUEGwQbABcEHAQcAAUEHQQdABcEHgQeAAUEHwQfABcEIAQgAAUEIQQhABcEIgQiAAUEIwQjABcEJAQkAAUEJQQlABcEJgQmAAUEJwQnABcELwQvABcEMgQyAAgENAQ0AAgEQARAABAEQQRBABkEQgRCABAEQwRDABkERAREABAERQRFABkESARIAAkESgRKAAcETARMAAwETgROAA8ETwRPABoEVARUABwEVQRVAB8EVgRWAA8EVwRXABoEWgRaABYEXARcAB0EXQRdABwEXwRfAAkEYwRjAAcEZQRlAAcEaQRpABAEqQSpAAUAAgFtAAYABgABAAsACwABABAAEAAWABEAEQAZABIAEgAWACUAJQACACcAJwAIACsAKwAIAC4ALgAaADMAMwAIADUANQAIADcANwAbADgAOAAJADkAOQAKADoAOgALADsAOwAMADwAPAAXAD0APQANAD4APgAYAEUARQADAEcASQAEAEsASwAEAFEAUgAFAFMAUwAGAFQAVAAFAFUAVQAEAFcAVwAHAFkAWQAOAFoAWgAPAFwAXAAcAF0AXQAPAF4AXgAQAIMAgwAIAJIAkgAIAJMAkwAEAJcAlwAIAJgAmAAEAJoAmgAOALEAsQACALIAsgAIALMAswACALoAugAEALwAvAAPAMAAwAAFAMcAyAAEAMoAygAOANEA0QAJANIA0gAIANMA0wARANUA1QAJANkA2QAXANwA3AARAN0A3QAVAOAA4AASAOsA6wAFAO0A7QAcAO8A8AAFAPEA8QATAPIA9AAFAPYA9gAEAPcA9wAFAPgA+AAUAPkA+gAFAP0A/QAFAP8A/wAFAQIBAgAEAQMBAwATAQQBBAAFAQcBBwAIAQwBDAACARYBFgAIARcBFwAGARgBGAALARkBGQAPARoBGgAIARwBHAAIAR0BHQAEAR4BHgAIASABIAAIASEBIQAEATIBMgAJATUBNQAFATgBOAAIATkBOQAEAToBOgAJAUQBRAAFAUkBSQAFAUsBTAAEAVEBUQARAVUBVQAIAVYBVgAEAWkBagAZAWwBbQABAW4BbgAWAW8BcQABAXIBcgAWAXYBdwAWAigCKQAIAisCLAAIAkUCRQAZAksCUQACAlICUgAIAlwCYAAIAmECZAAKAmUCZQANAmYCbAADAm0CcQAEAnYCdgAFAncCewAGAnwCfwAOAoACgQAPAoICggACAoMCgwADAoQChAACAoUChQADAoYChgACAocChwADAogCiAAIAokCiQAEAooCigAIAosCiwAEAowCjAAIAo0CjQAEAo4CjgAIAo8CjwAEApECkQAEApMCkwAEApUClQAEApcClwAEApkCmQAEApsCmwAEApwCnAAIAp0CnQAEAp4CngAIAp8CnwAEAqACoAAIAqECoQAEAqICogAIAqMCowAEArECsQAaAr4CvgAFAsACwAAFAsICwwAFAsQCxAAIAsUCxQAGAsYCxgAIAscCxwAGAsgCyAAIAskCyQAGAtAC0AAbAtEC0QAH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ALgAuWMyc2MEWGMyc2MEXmMyc2MEZGMyc2MEamMyc2MEamMyc2MEamMyc2MEamMyc2MEamMyc2MEamMyc2MEamNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGRsaWcEeGRsaWcEfmRsaWcEhGRsaWcEimRsaWcEimRsaWcEimRsaWcEimRsaWcEimRsaWcEimRsaWcEimRub20EkGRub20ElmRub20EnGRub20EomRub20EomRub20EomRub20EomRub20EomRub20EomRub20EomZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGxpZ2EEsmxpZ2EEumxudW0EwGxudW0ExmxudW0EzGxudW0E0mxudW0E0mxudW0E0mxudW0E0mxudW0E0mxudW0E0mxudW0E0mxvY2wE2GxvY2wE3mxvY2wE5G51bXIE6m51bXIE8G51bXIE9m51bXIE/G51bXIE/G51bXIE/G51bXIE/G51bXIE/G51bXIE/G51bXIE/G9udW0FAm9udW0FCG9udW0FDm9udW0FFG9udW0FFG9udW0FFG9udW0FFG9udW0FFG9udW0FFG9udW0FFHBudW0FGnBudW0FIHBudW0FJnBudW0FLHBudW0FLHBudW0FLHBudW0FLHBudW0FLHBudW0FLHBudW0FLHNtY3AFMnNtY3AFOHNtY3AFPnNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNzMDEFSnNzMDEFUHNzMDEFVnNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDIFYnNzMDIFaHNzMDIFbnNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDMFenNzMDMFgHNzMDMFhnNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDQFknNzMDQFmHNzMDQFnnNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDUFqnNzMDUFsHNzMDUFtnNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDYFwnNzMDYFyHNzMDYFznNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDcF2nNzMDcF4HNzMDcF5nNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HRudW0F8nRudW0F+HRudW0F/nRudW0GBHRudW0GBHRudW0GBHRudW0GBHRudW0GBHRudW0GBHRudW0GBAAAAAEAAQAAAAEAAwAAAAEAAgAAAAEAAAAAAAIACAAJAAAAAQAOAAAAAQAQAAAAAQAPAAAAAQANAAAAAQBDAAAAAQBFAAAAAQBEAAAAAQBCAAAAAwA/AEAAQQAAAAIAEQASAAAAAQASAAAAAQA8AAAAAQA+AAAAAQA9AAAAAQA7AAAAAQAKAAAAAQAMAAAAAQALAAAAAQBHAAAAAQBJAAAAAQBIAAAAAQBGAAAAAQAwAAAAAQAyAAAAAQAxAAAAAQAvAAAAAQA4AAAAAQA6AAAAAQA5AAAAAQA3AAAAAQAFAAAAAQAHAAAAAQAGAAAAAQAEAAAAAQAUAAAAAQAWAAAAAQAVAAAAAQATAAAAAQAYAAAAAQAaAAAAAQAZAAAAAQAXAAAAAQAcAAAAAQAeAAAAAQAdAAAAAQAbAAAAAQAgAAAAAQAiAAAAAQAhAAAAAQAfAAAAAQAkAAAAAQAmAAAAAQAlAAAAAQAjAAAAAQAoAAAAAQAqAAAAAQApAAAAAQAnAAAAAQAsAAAAAQAuAAAAAQAtAAAAAQArAAAAAQA0AAAAAQA2AAAAAQA1AAAAAQAzAEsAmACYAJgAmAQmBCYEJgQmBxQHwA5QDlAOZg6IDogOiA6IDr4O5A8SDxIPEg8SDyYPJg8mDyYPOg86DzoPOg9OD04PTg9OD2APYA9gD2APeg96D3oPeg+8D7wPvA+8D9oP2g/aD9oP+A/4D/gP+BAqECoQKhAqEFwQXBBcEFwQjhCiENoQzBDMEMwQzBDaENoQ2hDaEQYAAQAAAAEACAACAcQA3wHnAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHoAekCQwI7AeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AgACAQTcAgICAwIEAgUCBgIHAggCCQIKAgsCLwIPAhACEQIUAhUCFgIXAhgCGQIbAhwCHgIdAvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRQNEA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUB/wTGBMcEyATJBMoEywTMBM0EzgTPBNAE0QTSBNME1ATVBNcE2ATaAhoE2wIOBNYCEwINBNkCDAISAAEA3wAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAhQCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkYCRwJJAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAoIChAKGAogCigKMAo4CkAKSApQClgKYApoCnAKeAqACogKkAqYCqAKqAqwCrgKxArMCtQK3ArkCuwK9Ar8CwQLEAsYCyALKAswCzgLQAtIC1ALYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvEC8wL1A1IDUwNUA1UDVgNXA1gDWgNbA1wDXQNeA18DYANhA2MDZANlA2YDZwNoA2kDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgO6A7wDvgPTA9kD3wRIBEoETgRWBFgEXQRpAAEAAAABAAgAAgF0ALcBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAvwDLwI7AfoEyQTKAfsB/AH9Af4B/wIABM0EzgTQBNME3AICAgMCBAIFAgYCBwIIAgkCCgILAfQB9QH2AfcB+AH5Ai8CDwIQAhECFAIVAhcCGQL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYA04DGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRQNEA0YDRwNIA0kDSgNLA0wDTQNPA1ADUQTIBMsEzATPBNEE0gIBBNQEwATBBMIEwwTEBMUExgTHBNUE1wTYAhgE2gIaBNsC+wIOBNYCEwINBNkCFgIMAhIAAQC3AEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCHAIwAkwDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEtATEBMwE5ATsBPQFAAUcCSgJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoMChQKHAokCiwKNAo8CkQKTApUClwKZApsCnQKfAqECowKlAqcCqQKrAq0CsgK0ArYCuAK6ArwCvgLAAsICxQLHAskCywLNAs8C0QLTAtUC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8gL0AvYDjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngO7A70DvwPNA9QD2gPgBEYESQRLBE8EVwRZBFoEXgRqAAYAAAAGABIAKgBCAFoAcgCKAAMAAAABABIAAQCQAAEAAABKAAEAAQBNAAMAAAABABIAAQB4AAEAAABKAAEAAQBOAAMAAAABABIAAQBgAAEAAABKAAEAAQKtAAMAAAABABIAAQBIAAEAAABKAAEAAQOaAAMAAAABABIAAQAwAAEAAABKAAEAAQOcAAMAAAABABIAAQAYAAEAAABKAAEAAQQZAAIAAQCnAKsAAAAEAAAAAQAIAAEGHgA2AHIApACuALgAygD8AQ4BGAFKAWQBfgGQAboB7AH2AhgCMgJEAnYCiAKiAswC3gMQAxoDJAM2A2gDcgN8A4YDoAO6A8wD9gQoBDIEVARuBIAEsgTEBN4FCAUaBSQFLgU4BUIFbAWWBcAF6gYUAAYADgAUABoAIAAmACwCSwACAKcCTAACAKgCTgACAKkD8AACAKoEegACAKsD7gACAKwAAQAEBIcAAgCsAAEABAKIAAIAqAACAAYADASJAAIArASLAAIBogAGAA4AFAAaACAAJgAsAlMAAgCnAlQAAgCoBAoAAgCpBAgAAgCqBHwAAgCrBAYAAgCsAAIABgAMBHYAAgCoAqIAAgGiAAEABASNAAIArAAGAA4AFAAaACAAJgAsAlcAAgCnAlgAAgCoAqYAAgCpBBYAAgCqBH4AAgCrBBgAAgCsAAMACAAOABQEjwACAKgEkQACAKwCswACAaIAAwAIAA4AFAK1AAIAqASTAAIArAK3AAIBogACAAYADAOsAAIAqASVAAIArAAFAAwAEgAYAB4AJAR4AAIApwK9AAIAqAJbAAIAqQSXAAIArAK/AAIBogAGAA4AFAAaACAAJgAsAlwAAgCnAl0AAgCoAl8AAgCpBBwAAgCqBIAAAgCrBBoAAgCsAAEABASZAAIAqAAEAAoAEAAWABwCygACAKgEggACAKsEmwACAKwCzAACAaIAAwAIAA4AFALQAAIAqASdAAIArALWAAIBogACAAYADASfAAIArALaAAIBogAGAA4AFAAaACAAJgAsAmEAAgCnAmIAAgCoAuAAAgCpBDQAAgCqBIQAAgCrBDIAAgCsAAIABgAMBKEAAgCpBKMAAgCsAAMACAAOABQDnwACAKcDoQACAKgEpQACAKwABQAMABIAGAAeACQDpQACAKcCZQACAKgERAACAKkEQgACAKoEQAACAKwAAgAGAAwC8QACAKgEpwACAKwABgAOABQAGgAgACYALAJmAAIApwJnAAIAqAJpAAIAqQPxAAIAqgR7AAIAqwPvAAIArAABAAQEiAACAKwAAQAEAokAAgCoAAIABgAMBIoAAgCsBIwAAgGiAAYADgAUABoAIAAmACwCbgACAKcCbwACAKgECwACAKkECQACAKoEfQACAKsEBwACAKwAAQAEBHcAAgCoAAEABASOAAIArAABAAQEGQACAKwAAwAIAA4AFASQAAIAqASSAAIArAK0AAIBogADAAgADgAUArYAAgCoBJQAAgCsArgAAgGiAAIABgAMA60AAgCoBJYAAgCsAAUADAASABgAHgAkBHkAAgCnAr4AAgCoAnYAAgCpBJgAAgCsAsAAAgGiAAYADgAUABoAIAAmACwCdwACAKcCeAACAKgCegACAKkEHQACAKoEgQACAKsEGwACAKwAAQAEBJoAAgCoAAQACgAQABYAHALLAAIAqASDAAIAqwScAAIArALNAAIBogADAAgADgAUAtEAAgCoBJ4AAgCsAtcAAgGiAAIABgAMBKAAAgCsAtsAAgGiAAYADgAUABoAIAAmACwCfAACAKcCfQACAKgC4QACAKkENQACAKoEhQACAKsEMwACAKwAAgAGAAwEogACAKkEpAACAKwAAwAIAA4AFAOgAAIApwOiAAIAqASmAAIArAAFAAwAEgAYAB4AJAOmAAIApwKAAAIAqARFAAIAqQRDAAIAqgRBAAIArAACAAYADALyAAIAqASoAAIArAABAAQC9wACAKgAAQAEAvkAAgCoAAEABAL4AAIAqAABAAQC+gACAKgABQAMABIAGAAeACQCcgACAKcCcwACAKgCpwACAKkEFwACAKoEfwACAKsABQAMABIAGAAeACQEKgACAKcEKAACAKgELgACAKkELAACAKoEMAACAKwABQAMABIAGAAeACQEKwACAKcEKQACAKgELwACAKkELQACAKoEMQACAKwABQAMABIAGAAeACQEOAACAKcENgACAKgEPAACAKkEOgACAKoEPgACAKwABQAMABIAGAAeACQEOQACAKcENwACAKgEPQACAKkEOwACAKoEPwACAKwAAQAEBIYAAgCoAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCMAIwAMACXAJoAMQDPAM8ANQABAAAAAQAIAAEABgACAAEAAgLUAtUAAQAAAAEACAACAA4ABATdBN4E3wTgAAEABAKGAocCmAKZAAQAAAABAAgAAQAmAAIACgAcAAIABgAMAaMAAgBKAagAAgBYAAEABAGpAAIAWAABAAIASgBXAAQAAAABAAgAAQBEAAIACgAUAAEABAGkAAIATQABAAQBpgACAE0ABAAAAAEACAABAB4AAgAKABQAAQAEAaUAAgBQAAEABAGnAAIAUAABAAIASgGjAAEAAAABAAgAAQAGAZUAAQABAEsAAQAAAAEACAABAAYBJwABAAEAugABAAAAAQAIAAEABgGsAAEAAQA2AAEAAAABAAgAAgAcAAIB4wHkAAEAAAABAAgAAgAKAAIB5QHmAAEAAgAvAE8AAQAAAAEACAACAB4ADAIoAioCKQIrAiwCHwIgAiEBrgIjAiQCJQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAQAAAAEACAACAAwAAwImAicCJwABAAMASQBLAa4AAQAAAAEACAACAGYACAI9Ai0CLgIwAjECOQI6AjwAAQAAAAEACAACABYACAAbABUAFgAXABgAGQAdABQAAQAIAa0CIgRwBHEEcgRzBHQEdQABAAAAAQAIAAIAFgAIBHUCIgRwBHEEcgRzAa0EdAABAAgAFAAVABYAFwAYABkAGwAdAAEAAAABAAgAAgAWAAgAFQAWABcAGAAZABsAHQAUAAEACAItAi4CMAIxAjkCOgI8Aj0AAQAAAAEACAABAAYBaQABAAEAEwAGAAAAAQAIAAMAAQASAAEAUgAAAAEAAABKAAIAAgF8AXwAAAHUAd0AAQABAAAAAQAIAAEAKAHAAAEAAAABAAgAAgAaAAoCMgB6AHMAdAIzAjQCNQI2AjcCOAACAAEAFAAdAAAAAQAAAAEACAACACYAEAHUAdUB1gHXAdgB2QHaAdsB3AHdAkACPgJBAkICPwThAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgKtA5oDnAQZ","Roboto-MediumItalic.ttf":"AAEAAAARAQAABAAQR1BPUyEcbY8AAhQcAABZakdTVULEnLdcAAJtiAAAGXxPUy8yoQuw+wAAAZgAAABgY21hcNhuDxIAABpsAAAGXGN2dCAElytKAAAjUAAAAFZmcGdte/lhqwAAIMgAAAG8Z2FzcAAIABMAAhQQAAAADGdseWZgubUGAAAtcAAB42poZG14LxpP7wAAFYAAAATsaGVhZPi2qwsAAAEcAAAANmhoZWEM2xKRAAABVAAAACRobXR4rRqYNAAAAfgAABOIbG9jYSKZqcwAACOoAAAJxm1heHAHEgLZAAABeAAAACBuYW1lRuRz4wACENwAAAMUcG9zdP9hAGQAAhPwAAAAIHByZXAbsfg2AAAihAAAAMwAAQAAAAIAALDh6v1fDzz1ABsIAAAAAADE8BEuAAAAANDbTpf6Qf3VCXgIcwACAAkAAgAAAAAAAAABAAAHbP4MAAAJN/pB/mwJeAgAAbMAAAAAAAAAAAAAAAAE4gABAAAE4gCPABYAVgAFAAEAAAAAAA4AAAIAAfIABgABAAMEGQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAK/1AAIX8AAAAhAAAAAEdPT0cAAQAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwACAAIAACA5YAZAAKAAAACgAAAfkAAAH5AAACHwA3Ao4AoQTHADsEcwBCBb0AtQUAAC0BWgCQAr8AaALG/5QDeABnBF0APQG//4kClgA2AjUAMAMc/38EcwBgBHMA7wRzAAsEcwAmBHMACQRzAFoEcwBjBHMAhgRzADsEcwCOAhkAKwHi/5oD/AAyBGIAYgQUAC8D0ACVBvsAMgU0/6QE7wAnBRsAZQUcACcEbQAnBE0AJwVSAGsFjQAnAjsANQRZAAME7gAnBD0AJwbVACcFjAAnBWYAawUAACcFZgBkBOIAJwS5ACQEwACcBRkAWwUPAJsG3gC3BPP/wwTFAKEEtv/lAir/7wNIAKwCKv96A1sARAOK/3kCigDKBD0AIgRoABAEGgA4BGsAOwQ0ADsCygBfBHD/9wRZAA0CBQAfAfz/DAQXABECBQAfBssAEARbAA0EdQA5BGj/xwRyADsCxAAQBAsAHAKfADsEWgBKA+EAZAXOAHcD8f+5A9H/tQPx/+cCpAAwAf0AIAKk/5kFMgBbAfkAAAIY/+YEZQBMBJv/9gV8AAgExQBQAff/7ATc/9wDdADRBh4AXgOAAL4DzgBJBFUAgAKWADYGHgBeA8cA7wL9AOQEMwAbAukAVgLpAGcCkQDIBKH/3QPZAH0COwCeAgr/0wLpAOEDlQC+A84AAgWtALkGBgCxBjAAlgPQ/9IFNP+kBTT/pAU0/6QFNP+kBTT/pAU0/6QHVf+HBRsAZQRtACcEbQAnBG0AJwRtACcCOwA1AjsANQI7ADUCOwA1BTr//wWMACcFZgBrBWYAawVmAGsFZgBrBWYAawQtACMFZAAVBRkAWwUZAFsFGQBbBRkAWwTFAKEErwAnBMsAGwQ9ACIEPQAiBD0AIgQ9ACIEPQAiBD0AIgaXAA8EGgA4BDQAOwQ0ADsENAA7BDQAOwIUACICFAAiAhQAIgIUACIEjQBGBFsADQR1ADkEdQA5BHUAOQR1ADkEdQA5BHgAPQRvACoEWgBKBFoASgRaAEoEWgBKA9H/tQR+/80D0f+1BTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBRsAZQQaADgFGwBlBBoAOAUbAGUEGgA4BRsAZQQaADgFHAAnBQEAOwU6//8EiQA7BG0AJwQ0ADsEbQAnBDQAOwRtACcENAA7BG0AJwQ0ADwEbQAnBDQAOwVSAGsEcP/3BVIAawRw//cFUgBrBHD/9wVSAGsEcP/3BY0AJwRZAA0FjgAuBHcAKwI7ADUCFAAUAjsANQIUAB8COwA1AhQAIgI7/44CBf92AjsANQIUACIGlAA1BAEAHwRZAAMCIP8PBO4AJwQXABEEfwAhBD0AJwIFAB8EPQAnAgX/ogQ9ACcCmwAfBD0AJwLhAB8ETAAhAkcAHwWMACcEWwANBYwAJwRbAA0FjAAnBFsADQRbAA0FcgAjBG8AEQVmAGsEdQA5BWYAawR1ADkFZgBrBHUAOQeDAFAHDQBCBOIAJwLEABAE4gAnAsT/nATiACcCxAAQBLkAJAQLABwEuQAkBAsAHAS5ACQECwAcBLkAJAQLABwEwACcAp8AOwTAAJwCxwA7BMAAnAKf/+IFGQBbBFoASgUZAFsEWgBKBRkAWwRaAEoFGQBbBFoASgUZAFsEWgBKBRkAWwRaAEoG3gC3Bc4AdwTFAKED0f+1BMUAoQS2/+UD8f/nBLb/5QPx/+cEtv/lA/H/5wIGAB4FaABOAsT/SgVpAFsEhQA2BYMAWwTWAEoCIP8PBVIAawRw//cFjAAnBFsADQU0/6QEPQAiB1X/hwaXAA8FZAAVBG8AKgU0/6QEPQAiBG0AJwQ0ADsCO//JAhT/fgVmAGsEdQA5BOIAJwLEAAcFGQBbBFoASgS5ACQECwAcBMAAnAKfADsCIP8PBCUANgG5AIoD0gECA54BDQPIAO8DawD+AgUBAgKnAPoCRf+oA8QA3gMRAKwCY//uAAr9VAAK/dcACvz2AAr91gAK/L8ACvygAlUBLgQlAOgFNP+kAjsAngTR/74F8f/GAp//ygV6ABgFKf9YBVAAHQKgAAsFNP+kBO8AJwRdAC4Fnf+qBG0AJwS2/+UFjQAnBVoAXgI7ADUE7gAnBRr/sgbVACcFjAAnBHcAAAVmAGsFjwAuBQAAJwR3/9wEwACcBMUAoQXLAFIE8//DBYkAdQU8AAkCOwA1BMUAoQRrAD4ESAAoBG8AEQKgAG4ESABXBGsAPgSr/+UD+QB3BG8AOARIACgEBQBmBG8AEQSHAGwCoABuBH8AIQRS/6gEof/dA+EAZAP+AD4EdQA5BNcAXQRv/8sEIQA7BHcAOAQXAG4ESABXBa0AMgPx/7kFpwA/BmsAVAKgAEwESABXBHUAOQRIAFcGawBUBJkAUARjAG0Ex/8kBkoAVwRtACcEbQAnBdoAkQRdAC4FOgBnBLkAJAI7ADUCOwA1BFkAAwhQ/8oIVwAuBjQAoATuACcFhwAnBO0AmwWJACUFNP+kBOsAIwTvACcEXQAuBeL/hARtACcHcf+lBLsAHgWHACcFhwAnBQoALgWI/8oG1QAnBY0AJwVmAGsFjwAuBQAAJwUbAGUEwACcBO0AmwY4AFYE8//DBdUAJQVoAMUHawArB8YAKwX1AIkGzQAuBOoAIwUxAE8HJgAyBNv/sAQ9ACIEZQBDBHYAIgNKABgE2v+FBDQAOwZO/60EAQAWBH8AGQR/ABkEVgAiBIH/vwXfACIEfgAZBHUAOQR/ABkEaP/HBBoAOAPhAFMD0f+1BbAAPQPx/7kEuAAZBE4AcAZmABkGwQASBPoATwZIACIEUAAiBCUAIwZcACQEWP+2BDQAOwQ0ADsEWQANA0oAGAQlADsECwAcAgUAHwIUACIB/P8MBqf/vQa5ABkEcAANBFYAIgR/ABkD0f+1BH8AGQcbAGAGKQBEBOoAIwRPACEG+wArBd0AGQTv/64ESP+cBxQAPgYQADAGwgAUBcMAFgj1ADUHxgAiBAr/qgPc/7UFiQB1BacAPwVaAGIEbwA2BP0AqAP5AHcE/QCoA/kAdwk3AGsIRgA5BVoAZgRvADgHFwBiBh4ASwcbAGAGKQBEBP0AVgQzAEUE4wA4AAr85gAK/Q4ACv4rAAr+PAAK+kEACvpvBYcAJwR/ABkE6gAjBE8AIQT2ACcEbf/HBFIAIgOPABEEXf/8A0r/ywSdAC4ECgARB3H/pQZO/60EuwAeBAEAFgUKAC4EVgAiBQ4AIwSRACEFHgA3BC4AGQZsAKQFgwBsBY0AJwR+ABkHngAnBYkAEQgRAC4GygARBgUAZQTjAEsFGwBlBBoAOATAAJwD4QBTBMUAoQP5AHcExQChA/kAVATz/8MD8f+5BwQAnQVQAFYFaADFBE4AcAVUALkEWwCFBWcA5wRZAA0F/wBiBKj/9AX/AGIEqP/0AjsANQdx/6UGTv+tBQQAIwRgACEFiP/KBIH/vwWNAC4EbwARBY0AJwR+ABkFaADFBE4AcAbVACcF3wAiAjsANQU0/6QEPQAiBTT/pAQ9ACIHVf+HBpcADwRtACcENAA7BWgASAQlADYFaABIBCUANgdx/6UGTv+tBLsAHgQBABYEjAAvBIz/8AWHACcEfwAZBYcAJwR/ABkFZgBrBHUAOQVaAGIEbwA2BVoAYgRvADYFMQBPBCUAIwTtAJsD0f+1BO0AmwPR/7UE7QCbA9H/tQVoAMUETgBwBF0ALgNKABgGzQAuBkgAIgSsADMDQwAJBPP/wwPx/7kE8//DA/H/uQTqADAEawA7BsYARQayAEcGLACqBQoAYQRjAJIEJwCMB43/3gZ0/94HygAnBnUACwTnAEwEFgA9BYkAkAUAAHMFNgBWBEgAKAWI/8oEgf+/BTT/pAQ9ACIE7wAnBGgAEAUcACcEawA7BRwAJwRrADsFjQAnBFkADQTuACcEFwARBO4AJwQXABEEPQAnAgX/5AbVACcGywAQBtUAJwbLABAFjAAnBFsADQUAACcEaP/HBOIAJwLE/94EuQAkBAsAHATAAJwCnwA7BQ8AmwPhAGQFDwCbA+EAZAbeALcFzgB3Bt4AtwXOAHcG3gC3Bc4AdwbeALcFzgB3BLb/5QPx/+cFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIEbQAnBDQAOwRtACcENAA7BG0AJwQ0ADsEbQAnBDQAOwRtACcENAA7BG0AJwQ0ADsEbQAnBDQAOwRtACcENAA7AjsANQIUACICO///AgX/5AVmAGsEdQA5BWYAawR1ADkFZgBrBHUAOQVmAGsEdQA5BWYAawR1ADkFZgBrBHUAOQVmAGsEdQA5BWkAWwSFADYFaQBbBIUANgVpAFsEhQA2BWkAWwSFADYFaQBbBIUANgUZAFsEWgBKBRkAWwRaAEoFgwBbBNYASgWDAFsE1gBKBYMAWwTWAEoFgwBbBNYASgWDAFsE1gBKBMUAoQPR/7UExQChA9H/tQTFAKED0f+1BMUAoQPR/7UFrP6zAx4A7AP/AAAH9AAAA/8AAAf0AAACrgAAAgQAAAFcAAAEZgAAAikAAAGfAAAA1QAAAAoAAAKXADYClwA2BQsAnAYKAIIGCgCCA4v/TgG9AK4BuQCKAcr/pAGlAM0DBgC3Aw0AlwL7/6EERQBpBID/+wLAAJ4D5QAzBYUAMwFrADYHdgCdAVoAkAKOAKECaQBdAmD/+QQ+ADcDiv/hAukAYwNMAG4ETf/DBJv/9gZJAA0GjgArCFsAJwdYACoGZAAQBIn/9ARzAE4F0QBCBB4AOwSIABAFP//kBV3/5gXBAMIDzgAxB/kAIwTsAO0E9wB9Bg8AtgayAIIGpwCIBnkAtQR4AEUFdQAfBL7/pwRqAJwEmAA0CA8ASQIm/xcEdQAwBGIAYgP8/9UEFAAXA/cAOgJTAGkCjgBmAez/zwT+AF8EjgBLBKIAXwb2AF8G9gBfBPQAXwaNABcACgAAB/v/qQg1AFwDhv/XBGP/pwSmADoEY/+nA6YACgQ2AC0ETgARBB4ADgQXABQFGwAuBBoAFAUKAC4FJgAuBKEAOwQl/4cCpwEGBL0ACgLpADMC6QAIAukAIwLpABYC6QAKAun/8QLp//QC6f/jAukAbQLpABcEBP/ZBXwAQwU1AHAEyAAAA6YAkwXjAIwEYwBwBGsAOQQlAGIEHgAOBEUACgSmADcEVQAKBKYAOgTCAAoF4gAKA6YACgREAAoDwv/yAfcAGATDAAoEjAA/A7IACgPMAAoEYgAKBGcAOQRIAAoEhf+bAf8A6wOPAQQD9gDcA/YAEwP2ANgD9gDXA48BBAOPAQUDjwEEBEb/pAQlAG0EZwA5BXAAYgQdAFUEegAqAgr/BwGw/7IEFP/WByb/wQcpAAoFdgBiBLwACgRZAAsFOv+DBhT/qQQvAAwEyAALBEUACgSw/8EELwByBT4ACgRzAF0GXAAKBt4ACgU7AEoF+wALBE8ACwRnABMGagAKBG//0gQM//UGav+pBIQACgT9AAoFTgBiBcwAQARDAG0Eqf+kBmwAYgRzAF0EcwAKBdoANwS3ADQELwAMBKYAOgROAAQD4wAeCAEACgTP/9kEbwAQBCYANwR/ADsDkgCkBIcANAR7/8cEhgA7BDQAOwRwADAFWgBvBYEAcQVmAC4FvQByBb8AcgQFAKsEaQAfA6YACgRA/38EpP/RAukAigLpAGQC6QB9AukAiQLpAJYC6QB7AukApgRT/9QEGAAnBm8AOgSaAEcEzwBOAiD/DwIg/w8CFQAiAhX/fQIVACIESAAKBGL/lwRi/5cEJQBiBIX/mwSF/5sEhf+bBIX/mwSF/5sEhf+bBIX/mwRnADkDzAAKA8wACgPMAAoDzAAKAfcAGAH3ABgB9wAYAfcAGATCAAoEpgA6BKYAOgSmADoEpgA6BKYAOgRrADkEmwB0BIcAjgRzAFoEcwAJBHMAJgRzAAsEawA5BGsAOQRrADkEJQBtBIX/mwSF/5sEhf+bBGcAOQRnADkEZwA5BGcAOQRiAAoDzAAKA8wACgPMAAoDzAAKA8wACgSMAD8EjAA/BIwAPwSMAD8EwwAKAfcADQH3ABgB9wAYAff/igH3ABgDwv/yBEQACgOmAAoDpgAKA6YACgOmAAoEwgAKBMIACgTCAAoEpgA6BKYAOgSmADoERQAKBEUACgRFAAoEHgAOBB4ADgQeAA4EHgAOBCUAYgQlAGIEJQBiBGsAOQRrADkEawA5BGsAOQRrADkEawA6BeMAjAQlAG0EJQBtBBT/1gQU/9YEFP/WBIX/mwQI/20E//94AjP/ewSw/9IEYf8sBNL/4gSF/5sESAAKA8wACgQU/9YEwwAKAfcAGAREAAoF4gAKBKYAOgRVAAoEJQBiBCUAbQRG/6QB9wAYBCUAbQPMAAoDpgAKBB4ADgH3ABgB9wAYA8L/8gREAAoELwByBIX/mwRIAAoDpgAKA8wACgTIAAsF4gAKBMMACgSmADoEvQAKBFUACgRnADkEJQBiBEb/pAQvAA0EwwAKBGcAOgQlAG0F2gA3BMgACwQvAHIFfABDBTT/pAQ9ACIEbQAnBDQAOwIU/+QAAAABAAAE5AkKBAAAAgICAwUFBgYCAwMEBQIDAgQFBQUFBQUFBQUFAgIEBQUECAYGBgYFBQYGAwUGBQgGBgYGBgUFBgYIBgUFAgQCBAQDBQUFBQUDBQUCAgUCCAUFBQUDBQMFBAcEBAQDAgMGAgIFBQYFAgUEBwQEBQMHBAMFAwMDBQQDAgMEBAYHBwQGBgYGBgYIBgUFBQUDAwMDBgYGBgYGBgUGBgYGBgUFBQUFBQUFBQcFBQUFBQICAgIFBQUFBQUFBQUFBQUFBAUEBgUGBQYFBgUGBQYFBgUGBgYFBQUFBQUFBQUFBQYFBgUGBQYFBgUGBQMCAwIDAgMCAwIHBQUCBgUFBQIFAgUDBQMFAwYFBgUGBQUGBQYFBgUGBQgIBgMGAwYDBQUFBQUFBQUFAwUDBQMGBQYFBgUGBQYFBgUIBwUEBQUEBQQFBAIGAwYFBgUCBgUGBQYFCAcGBQYFBQUDAgYFBgMGBQUFBQMCBQIEBAQEAgMDBAMDAAAAAAAAAwUGAwUHAwYGBgMGBgUGBQUGBgMGBggGBQYGBgUFBQcGBgYDBQUFBQMFBQUEBQUFBQUDBQUFBAQFBQUFBQUFBgQGBwMFBQUHBQUFBwUFBwUGBQMDBQkJBwYGBgYGBgYFBwUIBQYGBgYIBgYGBgYFBgcGBwYICQcIBgYIBQUFBQQFBQcFBQUFBQcFBQUFBQQEBgQFBQcIBgcFBQcFBQUFBAUFAgICBwgFBQUEBQgHBgUIBwYFCAcIBgoJBQQGBgYFBgQGBAoJBgUIBwgHBgUGAAAAAAAABgUGBQYFBQQFBAUFCAcFBQYFBgUGBQcGBgUJBgkIBwYGBQUEBQQFBAYECAYGBQYFBgUHBQcFAwgHBgUGBQYFBgUGBQgHAwYFBgUIBwUFBgUGBQgHBQUFBQYFBgUGBQYFBgUGBQYEBgQGBAYFBQQIBwUEBgQGBAYFCAgHBgUFCQcJBwYFBgYGBQYFBgUGBQYFBgUGBQYFBgUFAggICAgGBQYFBgMFBQUDBgQGBAgHCAcIBwgHBQQGBQYFBgUGBQYFBgUGBQYF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RvpHAkcKRzFHXkdmR25HdkgASAhIEEg9SEVITUiPSJdIx0jPSQ1JFUkdSZtJo0oDSnJKhUqYSqpKvErOSt9K9Et+S/lMLUytTT5Nm03qTnFOok6qTwVPDU8VT4xPlE/sUE9Qt1EnUW9RulIqUjJSlFMPUyJTNFNGU1hTalPqVERUUFTPVOZU+VVhVXhV91ZtVnVWiFaQVw5XhVfgV/dYDlggWF9YZ1jDWMtY01ksWTRZoVopWmRadlp+Wspa0lraWuJa6lryWvpbAltHW8JbylwCXElciVzVXTBdmF3pXmle9V9VX11f22BcYINg3GDkYVNh6WIkYjZiiGLRYxxjdWN9Y61jtWQLZDhkQGTgZOhlIGVoZahl8GZLZrFnAGdzZ/5oXWh0aIZpBWkcaYVpjWmVaahpsGopaqBrCmshazhrSWuIa/lsZWzSbUBty25YbqVu9G9hb9BwSHC6cUxx3HJ5cyhzMHM4c7V0JXRpdK50xnTedOp09nVqddh2s3eIeBh4qHkFeV95k3mweel6AHoXevJ7YXt8e5d8BHxzfM99S317faV95n4ofoR+037ffut+938Dfw9/G391f8yALICKgNyBM4E/gUuBmIHpgk+CqYNUg++D+4QHhBOEH4QnhC+Ee4TLhNeE44UshXKFfoWKheGGMYZ2hn6HAIeNh5mHpYeth7+H0YgziI6ImoimiQmJZ4lziX+Ji4mXiaOJr4m3icmJ24nuigGKCYoRiiOKNIqniq+KworUiueK+osNix+Lhovni/6MFIwnjDqMTYxfjGeMb4yCjJSMp4y5jMuM3IzvjQGNFI0sjT+NUY1djWmNhY2hjbCNwI3MjdiOMo6JjtyO5I9Oj+eQY5DakU2Ru5Iukp2TEJOCk+OUOpSTlOqVb5V3lYOVj5WblaeVs5W/lcuV15Xjle+V+5YHlhmWK5Y3lkOWT5ZblnKWhJaQlpyWqJa0lsaW2JbklvCW/JcIlxSXIJcyl0OXT5dbl3KXiZegl7eXypfdl+mX9ZgBmA2YGZglmDeYSZhhmHiYkJinmL+Y1pjumQWZIJk6mVKZaZl8mY6ZoZmzmcaZ2Jnzmg6aGpommjiaSppcmm2ahZqcmrSay5rjmvqbEpspm0SbXptwm4Kbjpuam6abspvEm9ab7pwFnB2cNJxMnGOce5ySnK2cx5zenPWdDJ0jnTqdUZ1o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A/wDXgAA////pP5sBK4FsAImACUAAAAHAXABbwAD//8AIv5wA9wEUAImAEUAAAAHAXAAqQAH//8AJ/6bBLwFsAImACYAAAAHAXYElwAK//8AEP6IBA8GAAImAEYAAAAHAXYEpf/3//8AJ/6bBOAFsAImACgAAAAHAXYEcwAK//8AO/6RBIgGAAImAEgAAAAHAXYEkAAA//8AJ/35BOAFsAImACgAAAAHA6sBAf6S//8AO/35BIgGAAImAEgAAAAHA6sBHv6S//8AJ/6bBYcFsAImACwAAAAHAXYFAAAK//8ADf6bA/kGAAImAEwAAAAHAXYEfwAK//8AJwAABXEHNgImAC8AAAEHAHcBpQE2AAkAsAQvsA/cMDEA//8AEQAABHUHPQImAE8AAAEHAHcBowE9AAkAsAQvsA/cMDEA//8AJ/7cBXEFsAImAC8AAAAHAXYE0QBL//8AEf7HBEoGAAImAE8AAAAHAXYEYAA2//8AJ/6bA8MFsAImADAAAAAHAXYElwAK////5P6bAhcGAAImAFAAAAAHAXYDRAAK//8AJwAABs4HNgImADEAAAEHAHcCvgE2ABMAsABFWLACLxuxAh8+WbAR3DAxAP//ABAAAAZoBgACJgBRAAABBwB3ApgAAAAJALADL7Ak3DAxAP//ACf+mwbOBbACJgAxAAAABwF2BasACv//ABD+mwZoBFICJgBRAAAABwF2Ba4ACv//ACf+lwWGBbACJgAyAAAABwF2BQIABv//AA3+mwP6BFICJgBSAAAABwF2BGwACv//ACcAAAUEB0ICJgA0AAABBwB3AasBQgAJALADL7AW3DAxAP///8f+YARtBfcCJgBUAAABBwB3AZv/9wAJALANL7Ah3DAxAP//ACf+mwTYBbACJgA2AAAABwF2BJgACv///97+mwLvBFMCJgBWAAAABwF2Az4ACv//ACT+kQS7BccCJgA3AAAABwF2BLAAAP//ABz+iAPEBFACJgBXAAAABwF2BGL/9///AJz+lAUiBbACJgA4AAAABwF2BJ8AA///ADv+kQKuBUECJgBYAAAABwF2A/UAAP//AJsAAAWBBzcCJgA6AAABBwFuAN0BQwAJALABL7AR3DAxAP//AGQAAAQNBewCJgBaAAABBgFuFvgACQCwAS+wEdwwMQD//wCb/psFgQWwAiYAOgAAAAcBdgTV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AesB7AHtAe4B7wHwAfEB8gJSAlQCWAJaAlwCXgJiAmQCagJsAnACcgJ0AnYCegJ8An4CgAKaAqICpAKqArADhwOOA5MDlgACAAAAAgAKO9oAAQNsAAQAAAGxBtI6+jr6BvwHUjfeI2I7mDuqOHYHWDiWOJY43jTeDqg4ljiWO6omhAqSCxQ1MDjeNI43uDdKOOQPYgt+OFQ2GjiMC8AM6gz0N643rji4NhoO1g3qOW4OTDeoOW4OZjfeN9433jfeN9433juYOHY4djh2OHY4ljiWOJY4ljuqOJY7qjuqO6o7qjuqON443jjeON445DhUOFQ4VDhUOFQ4VDiMOIw4jDiMN644uDi4OLg4uDi4OW42GjluN944VDfeOFQ33jhUO5g7mDuYO5g7qjuqOHY4jDh2OIw4djiMOHY4jDh2OIw4ljeuOJY4ljiWOJY4ljjeNN4OqA6oDqgOqDiWN644ljeuOJY3rjeuO6o4uDuqOLg7qji4DtYO1g7WNTA1MDUwON443jjeON443jjeN7g45DluOOQPYg9iD2I33jhUNTAO6Dr6N944djiWOJY7qjjkN94jYjZ+N944dg9iOJY7qjiWNN433jiWOJYPhDuqJoQQfjUwOOQRfDdKElo4ljjkN64S+DluEv43rhW8OW4Xlji4GKgYwhjIGM4ayBrOGwQbNji4OHY4dhu0Nn44ljiWON4dKh7cIJo03jY0OJY33iHQI2I2fiNsOHY3SiW6OJY03jiWOJY4ljuqJoQ7mDUwNjQ3SjiWOJYmpihAND4pHingKm44VCrMK6Y3QCwwOIw3qCz6LSQ4uDYaLoo5bjYaN6gxEDFOMoA0aDYaMwI4jDiMN0AziDOyNAg5bjQ+NGg33ji4NI45bjSOOW40tDYaNn43QDZ+N0o3qDTeNN403jTeOJY7mDUwOOQ5bjjkN0o3qDeuOJY3SjeoOJY4ljiWN944VDfeOFQ4djiMOIw4jDdKN6g7qji4OLg2GjY0OW42NDluNjQ5bjZ+N0A3QDdKN6g33jhUOJY3rje4N7g3uDfeOFQ33jhUN944VDfeOFQ33jhUN944VDfeOFQ33jhUN944VDfeOFQ33jhUN944VDh2OIw4djiMOHY4jDh2OIw4djiMOHY4jDh2OIw4djiMOJY4ljuqOLg7qji4O6o4uDuqOLg7qji4O6o4uDuqOLg4uDjeON445DluOOQ5bjjkOW445DluO6o6+jmIOvo6+jr6Ovo6+jsAOwo7HDsuO0A7XjtoO3I7mDuqO6oAAQGxAAQABgALAAwAEwAlACYAJwAoACkAKgAsAC0ALgAvADAAMQAyADMANAA1ADYAOAA5ADoAOwA8AD0APgA/AEUARgBJAEoATABPAFEAUgBTAFQAVgBYAFoAWwBcAF0AXwCDAIQAhQCGAIcAiACKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJwAnQCeAJ8AoACjAKQApQCmAKcAqACrAKwArQCuALQAtQC2ALcAuAC5AMAAwQDCAMMAxADFAMYAxwDIAMkAywDNAM8A0QDTANUA1gDXANgA2QDaANsA3ADdAN4A5wDoAOsA7QDvAPEA8wD3APkA/AD+AQABAgEGAQcBCAEJAQoBCwEMAQ8BEAERARIBEwEUARgBGgEcASUBJwEpASsBLQEvATEBMwE1ATcBOQE6ATsBPAE+AUABTgFPAWIBZQFmAXkBewF8AX0BfgF/AYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZIBkwGUAZUBlgGXAZgBmgGbAZ4BoQGjAaYBpwGpAa0BrgGvAbEBsgGzAbQBtQG2AbgBuQG8AcMBxAHFAcYByQHKAcsBzAHNAc4BzwHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3QHeAd8B4AHhAeMB5AHlAeYB6AHpAesB7AHtAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6Af0CAQIDAgUCBgIHAggCCQIMAg0CDwIQAhECEwIUAhYCFwIcAh0CIQIlAiYCKQI2AjcCOAI5AjoCRAJRAlICUwJUAlgCWQJcAl4CYAJiAmQCbAJuAnACcQJyAnQCdQJ9AoICgwKEAosCjwKRApICkwKUApUCmAKZApsCnQKeAp8CqAKpAq0CrwKwArECsgKzArQCtQK4ArkCvQK+Ar8C1gLXAuYC5wL4AvoC/AMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDLAMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDQwNGA0gDVANVA1YDVwNYA1kDWgNbA1wDcANxA3MDdAN1A34DfwPZA9sD3APeA+ED4gPpA+wEMQQzBDQACgA4/8QBJf/EASf/xAFi/8QBxf/EAc7/xAHl/8QCYv/EAm7/xAJ2/8QAFQA6ABQAOwAmAD0AFgCgABYBNwAmATkAFgE7ABYBfwAWAZUAFgGbABYCNwAUAjkAFAJwABYCcgAWAvgAJgL6ACYC/AAmA1QAFgNWABYDWAAWA1oAFgABABP/CADOABD+7gAS/u4AJf9AAC7/MAA4ABQARf/eAEf/6wBI/+sASf/rAEv/6wBT/+sAVf/rAFb/5gBZ/+oAWv/oAF3/6ACD/0AAhP9AAIX/QACG/0AAh/9AAIj/QACj/94ApP/eAKX/3gCm/94Ap//eAKj/3gCq/+sAq//rAKz/6wCt/+sArv/rALX/6wC2/+sAt//rALj/6wC5/+sAvP/qAL3/6gC+/+oAv//qAMD/6ADC/+gAw/9AAMT/3gDF/0AAxv/eAMf/QADI/94Ayv/rAMz/6wDO/+sA0P/rANL/6wDW/+sA2P/rANr/6wDc/+sA3v/rAOD/6wDi/+sA5P/rAOb/6wD3/zABEP/rARL/6wEU/+sBFv/rASUAFAEnABQBLP/qAS7/6gEw/+oBMv/qATT/6gE2/+oBOv/oAUb/6wFI/+oBTv9AAU//3gFiABQBef9AAYL/QAGF/0ABjP9AAZz/6wGg/+oBof/rAaP/6AGt/+gBr//rAbL/6wGz/+sBtf/qAbv/6gG8/+sBvf/qAcUAFAHL/zABzgAUAdP/QAHlABQB8//eAfj/6wIB/+sCBP/rAgb/6AIH/+sCE//rAhT/6wIX/+sCIf/oAin/QAI2/+sCOP/oAjr/6AI8/+sCQP/rAkT/6wJiABQCa//rAm3/6wJuABQCcf/oAnYAFAKS/0ACk//eApT/QAKV/94Cmf/rApv/6wKd/+sCqf/rAqv/6wKt/+sCsf/oArP/6AK1/+gCw//rAsT/6wLF/+sCz//rAtb/QALX/94DAv9AAwP/3gME/0ADBf/eAwb/QAMH/94DCP9AAwn/3gMK/0ADC//eAwz/QAMN/94DDv9AAw//3gMQ/0ADEf/eAxL/QAMT/94DFP9AAxX/3gMW/0ADF//eAxj/QAMZ/94DG//rAx3/6wMf/+sDIf/rAyP/6wMl/+sDJ//rAyn/6wMv/+sDMf/rAzP/6wM1/+sDN//rAzn/6wM7/+sDPf/rAz//6wNB/+sDQ//rA0X/6wNH/+oDSf/qA0v/6gNN/+oDT//qA1H/6gNT/+oDVf/oA1f/6ANZ/+gDW//oA3L+7gN2/u4Dev7uA3v+7gPs/8AAIAA4/98AOv/kADv/7AA9/90AoP/dASX/3wEn/98BN//sATn/3QE7/90BYv/fAX//3QGV/90Bm//dAcX/3wHO/98B5f/fAjf/5AI5/+QCYv/fAm7/3wJw/90Ccv/dAnb/3wL4/+wC+v/sAvz/7ANU/90DVv/dA1j/3QNa/90D7AAOABoAOP/OADr/7QA9/9AAoP/QASX/zgEn/84BOf/QATv/0AFi/84Bf//QAZX/0AGb/9ABxf/OAc7/zgHl/84CN//tAjn/7QJi/84Cbv/OAnD/0AJy/9ACdv/OA1T/0ANW/9ADWP/QA1r/0AAQAC7/7gA5/+4AnP/uAJ3/7gCe/+4An//uAPf/7gEr/+4BLf/uAS//7gEx/+4BM//uATX/7gHL/+4DRv/uA0j/7gBKAAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCq/+gAq//oAKz/6ACt/+gArv/oAMr/6ADM/+gAzv/oAND/6ADS/+gA1v/oANj/6ADa/+gA3P/oAN7/6ADg/+gA4v/oAOT/6ADm/+gBFv/oAUb/6AFmABABnP/oAaH/6AGy/+gBs//oAfj/6AIE/+gCB//oAhP/6AIU/+gCF//oAjz/6AJA/+gCRP/oAmv/6AJt/+gCmf/oApv/6AKd/+gCq//oAsP/6ALE/+gCxf/oAs//6AMb/+gDHf/oAx//6AMh/+gDI//oAyX/6AMn/+gDKf/oAz3/6AM//+gDQf/oA0X/6ANwABADcQAQA3MAEAN0ABADdQAQA34AEAN/ABAAAgIF/9YDcf+YAD0AR//sAEj/7ABJ/+wAS//sAFX/7ACq/+wAq//sAKz/7ACt/+wArv/sAMr/7ADM/+wAzv/sAND/7ADS/+wA1v/sANj/7ADa/+wA3P/sAN7/7ADg/+wA4v/sAOT/7ADm/+wBFv/sAUb/7AGc/+wBof/sAbL/7AGz/+wB+P/sAgT/7AIH/+wCE//sAhT/7AIX/+wCPP/sAkD/7AJE/+wCa//sAm3/7AKZ/+wCm//sAp3/7AKr/+wCw//sAsT/7ALF/+wCz//sAxv/7AMd/+wDH//sAyH/7AMj/+wDJf/sAyf/7AMp/+wDPf/sAz//7ANB/+wDRf/sABgAU//iALX/4gC2/+IAt//iALj/4gC5/+IBEP/iARL/4gEU/+IBr//iAbz/4gIB/+ICNv/iAqn/4gKt/+IDL//iAzH/4gMz/+IDNf/iAzf/4gM5/+IDO//iA0P/4gNxABgABgAQ/4QAEv+EA3L/hAN2/4QDev+EA3v/hAAQAC7/7AA5/+wAnP/sAJ3/7ACe/+wAn//sAPf/7AEr/+wBLf/sAS//7AEx/+wBM//sATX/7AHL/+wDRv/sA0j/7AALAFv/zAPW/9cD1/+4A9j/7gPZ/70D3P/yA97/8gPm//ED6v/zA+wAEwP3/7cABABKABQAWAAyAFsAEQNxABAAHgAG//IAC//yAFr/8wBd//MAwP/zAML/8wE6//MBZv/yAaP/8wGt//MCBf/1Agb/8wIh//MCOP/zAjr/8wJx//MCsf/zArP/8wK1//MDVf/zA1f/8wNZ//MDW//zA3D/8gNx//IDc//yA3T/8gN1//IDfv/yA3//8gAIAFv/5QGW/8sBuP/kA9z/7APe/+wD5v/rA+r/7QPsAA0APgAn//MAK//zADP/8wA1//MAiv/zAJX/8wCW//MAl//zAJj/8wCZ//MAm//zAMn/8wDL//MAzf/zAM//8wDf//MA4f/zAOP/8wDl//MBD//zARH/8wET//MBFf/zAUX/8wFS//MBfv/zAYn/8wGQ//MBqwANAcf/8wHh//MB5P/zAiP/8wI1//MCO//zAj3/8wI///MCQf/zAkP/8wJq//MCbP/zAqj/8wKq//MCrP/zAs7/8wMu//MDMP/zAzL/8wM0//MDNv/zAzj/8wM6//MDPP/zAz7/8wNA//MDQv/zA0T/8wNc//MEMf/zBDL/8wQ0//MENf/zAD8AJ//mACv/5gAz/+YANf/mAIr/5gCV/+YAlv/mAJf/5gCY/+YAmf/mAJv/5gDJ/+YAy//mAM3/5gDP/+YA3//mAOH/5gDj/+YA5f/mAQ//5gER/+YBE//mARX/5gFF/+YBUv/mAX7/5gGJ/+YBkP/mAZb/wgGrABABx//mAeH/5gHk/+YCI//mAjX/5gI7/+YCPf/mAj//5gJB/+YCQ//mAmr/5gJs/+YCqP/mAqr/5gKs/+YCzv/mAy7/5gMw/+YDMv/mAzT/5gM2/+YDOP/mAzr/5gM8/+YDPv/mA0D/5gNC/+YDRP/mA1z/5gQx/+YEMv/mBDT/5gQ1/+YANwAl/+QAPP/SAD3/0wCD/+QAhP/kAIX/5ACG/+QAh//kAIj/5ACg/9MAw//kAMX/5ADH/+QBOf/TATv/0wFO/+QBef/kAX//0wGC/+QBhf/kAYz/5AGV/9MBl//SAZv/0wGr/+IB0//kAdn/0gHo/9ICKf/kAlj/0gJw/9MCcv/TAnT/0gKD/9ICkv/kApT/5AKe/9ICvv/SAtb/5AMC/+QDBP/kAwb/5AMI/+QDCv/kAwz/5AMO/+QDEP/kAxL/5AMU/+QDFv/kAxj/5ANU/9MDVv/TA1j/0wNa/9MAJwAQ/0YAEv9GACX/zQCD/80AhP/NAIX/zQCG/80Ah//NAIj/zQDD/80Axf/NAMf/zQFO/80Bef/NAYL/zQGF/80BjP/NAbH/8gHT/80CKf/NApL/zQKU/80C1v/NAwL/zQME/80DBv/NAwj/zQMK/80DDP/NAw7/zQMQ/80DEv/NAxT/zQMW/80DGP/NA3L/RgN2/0YDev9GA3v/RgABAasADgCvAEf/3ABI/9wASf/cAEv/3ABR/8EAUv/BAFP/1gBU/8EAVf/cAFn/3QBa/+EAXf/hAKr/3ACr/9wArP/cAK3/3ACu/9wAtP/BALX/1gC2/9YAt//WALj/1gC5/9YAvP/dAL3/3QC+/90Av//dAMD/4QDC/+EAyv/cAMz/3ADO/9wA0P/cANL/3ADW/9wA2P/cANr/3ADc/9wA3v/cAOD/3ADi/9wA5P/cAOb/3AEH/8EBCf/BAQv/wQEM/8EBEP/WARL/1gEU/9YBFv/cASz/3QEu/90BMP/dATL/3QE0/90BNv/dATr/4QFG/9wBSP/dAZz/3AGe/8EBoP/dAaH/3AGj/+EBpf/mAaf/wQGo/+sBqf/pAa3/4QGu//ABr//WAbD/5wGy/9wBs//cAbT/4wG1/90Btv/OAbj/1AG5/9sBu//dAbz/1gG9/90B9v/BAfj/3AH7/8EB/P/BAf3/wQH//8ECAP/BAgH/1gIC/8ECA//BAgT/3AIG/+ECB//cAgn/wQIL/8ECDP/BAg//wQIR/8ECE//cAhT/3AIW/8ECF//cAh3/wQIf/8ECIP/BAiH/4QI2/9YCOP/hAjr/4QI8/9wCQP/cAkT/3AJN/8ECXf/BAmX/wQJn/8ECa//cAm3/3AJx/+ECiv/BAoz/wQKQ/8ECmf/cApv/3AKd/9wCpf/BAqf/wQKp/9YCq//cAq3/1gKx/+ECs//hArX/4QK5/8ECu//BAr3/wQLD/9wCxP/cAsX/3ALP/9wC5//BAxv/3AMd/9wDH//cAyH/3AMj/9wDJf/cAyf/3AMp/9wDL//WAzH/1gMz/9YDNf/WAzf/1gM5/9YDO//WAz3/3AM//9wDQf/cA0P/1gNF/9wDR//dA0n/3QNL/90DTf/dA0//3QNR/90DU//dA1X/4QNX/+EDWf/hA1v/4QB2AAb/2gAL/9oAR//wAEj/8ABJ//AAS//wAFX/8ABZ/+8AWv/cAF3/3ACq//AAq//wAKz/8ACt//AArv/wALz/7wC9/+8Avv/vAL//7wDA/9wAwv/cAMr/8ADM//AAzv/wAND/8ADS//AA1v/wANj/8ADa//AA3P/wAN7/8ADg//AA4v/wAOT/8ADm//ABFv/wASz/7wEu/+8BMP/vATL/7wE0/+8BNv/vATr/3AFG//ABSP/vAWb/2gGc//ABoP/vAaH/8AGj/9wBqP/sAasADwGt/9wBsP/qAbL/8AGz//ABtP/OAbX/7wG2/+cBu//vAb3/7wH4//ACBP/wAgb/3AIH//ACE//wAhT/8AIX//ACIf/cAjj/3AI6/9wCPP/wAkD/8AJE//ACa//wAm3/8AJx/9wCmf/wApv/8AKd//ACq//wArH/3AKz/9wCtf/cAsP/8ALE//ACxf/wAs//8AMb//ADHf/wAx//8AMh//ADI//wAyX/8AMn//ADKf/wAz3/8AM///ADQf/wA0X/8ANH/+8DSf/vA0v/7wNN/+8DT//vA1H/7wNT/+8DVf/cA1f/3ANZ/9wDW//cA3D/2gNx/9oDc//aA3T/2gN1/9oDfv/aA3//2gBEABAADAASAAwAR//nAEj/5wBJ/+cAS//nAFX/5wCq/+cAq//nAKz/5wCt/+cArv/nAMr/5wDM/+cAzv/nAND/5wDS/+cA1v/nANj/5wDa/+cA3P/nAN7/5wDg/+cA4v/nAOT/5wDm/+cBFv/nAUb/5wGc/+cBof/nAasADwGy/+cBs//nAfj/5wIE/+cCB//nAhP/5wIU/+cCF//nAjz/5wJA/+cCRP/nAmv/5wJt/+cCmf/nApv/5wKd/+cCq//nAsP/5wLE/+cCxf/nAs//5wMb/+cDHf/nAx//5wMh/+cDI//nAyX/5wMn/+cDKf/nAz3/5wM//+cDQf/nA0X/5wNyAAwDdgAMA3oADAN7AAwABgG0/+oB9//uAgX/1QIP/+0CY//sAtH/7AABAgX/wAABAbQAIAB+AAYADAALAAwAR//oAEj/6ABJ/+gASgAMAEv/6ABT/+oAVf/oAFoACwBdAAsAqv/oAKv/6ACs/+gArf/oAK7/6AC1/+oAtv/qALf/6gC4/+oAuf/qAMAACwDCAAsAyv/oAMz/6ADO/+gA0P/oANL/6ADW/+gA2P/oANr/6ADc/+gA3v/oAOD/6ADi/+gA5P/oAOb/6AEQ/+oBEv/qART/6gEW/+gBOgALAUb/6AFmAAwBnP/oAaH/6AGjAAsBq/+QAa0ACwGv/+oBsAALAbL/6AGz/+gBtAAMAbz/6gH4/+gCAf/qAgT/6AIGAAsCB//oAhP/6AIU/+gCF//oAiEACwI2/+oCOAALAjoACwI8/+gCQP/oAkT/6AJr/+gCbf/oAnEACwKZ/+gCm//oAp3/6AKp/+oCq//oAq3/6gKxAAsCswALArUACwLD/+gCxP/oAsX/6ALP/+gDG//oAx3/6AMf/+gDIf/oAyP/6AMl/+gDJ//oAyn/6AMv/+oDMf/qAzP/6gM1/+oDN//qAzn/6gM7/+oDPf/oAz//6ANB/+gDQ//qA0X/6ANVAAsDVwALA1kACwNbAAsDcAAMA3EADANzAAwDdAAMA3UADAN+AAwDfwAMA9cADQPZAA4D2v/1A9z/7APe/+0D5v/sA+r/7gPs/78D9wANAAECBf/iAA0AXP/tAF7/7QE9/+0BP//tAUH/7QH5/+0CBf/AAgj/7QJZ/+0Cdf/tAoT/7QKf/+0Cv//tAAwAXP/yAF7/8gE9//IBP//yAUH/8gH5//ICCP/yAln/8gJ1//IChP/yAp//8gK///IAHwBa//QAXP/yAF3/9ABe//MAwP/0AML/9AE6//QBPf/zAT//8wFB//MBo//0Aa3/9AH5//ICBv/0Agj/8gIh//QCOP/0Ajr/9AJZ//ICcf/0AnX/8gKE//ICn//yArH/9AKz//QCtf/0Ar//8gNV//QDV//0A1n/9ANb//QAXQAG/8oAC//KADj/0gA6/9QAPP/0AD3/0wBa/+YAXP/vAF3/5gCg/9MAwP/mAML/5gEl/9IBJ//SATn/0wE6/+YBO//TAWL/0gFm/8oBf//TAZX/0wGX//QBm//TAaP/5gGt/+YBxf/SAc7/0gHR/+0B2f/0AeX/0gHm/+0B6P/0Aer/4QHv/9QB+f/vAgX/yQIG/+YCCP/vAg//0QIh/+YCJP/lAjf/1AI4/+YCOf/UAjr/5gJC/+MCWP/0Aln/7wJi/9ICY//EAm7/0gJw/9MCcf/mAnL/0wJ0//QCdf/vAnb/0gJ4/+ECev/hAoP/9AKE/+8Cjf/hAp7/9AKf/+8CsP/tArH/5gKy/+0Cs//mArT/7QK1/+YCtv/hAr7/9AK//+8Cxv/UAsf/9QLI/+cC0P9kAtH/yQNU/9MDVf/mA1b/0wNX/+YDWP/TA1n/5gNa/9MDW//mA3D/ygNx/8oDc//KA3T/ygN1/8oDfv/KA3//ygBsAAb/wAAL/8AAOP+dADr/xwA8//AAPf+rAFH/0gBS/9IAVP/SAKD/qwC0/9IBB//SAQn/0gEL/9IBDP/SASX/nQEn/50BOf+rATv/qwFi/50BZv/AAX//qwGV/6sBl//wAZv/qwGe/9IBp//SAcX/nQHM//UBzv+dAdH/6gHZ//AB3v/1AeX/nQHm/+oB6P/wAer/5QHv/8EB9v/SAfv/0gH8/9IB/f/SAf//0gIA/9ICAv/SAgP/0gIF/80CCf/SAgv/0gIM/9ICD//SAhH/0gIW/9ICHf/SAh//0gIg/9ICN//HAjn/xwJN/9ICWP/wAl3/0gJi/50CY//MAmX/0gJn/9ICbv+dAnD/qwJy/6sCdP/wAnb/nQJ4/+UCev/lAn7/3wKD//ACh//1Aor/0gKM/9ICjf/lApD/0gKe//ACpf/SAqf/0gKw/+oCsv/qArT/6gK2/+UCuf/SArv/0gK9/9ICvv/wAsb/zgLI/+oCyv/1AtD/ngLR/84C1P/1Auf/0gNU/6sDVv+rA1j/qwNa/6sDcP/AA3H/wANz/8ADdP/AA3X/wAN+/8ADf//AAG8ABv+xAAv/sQA4/54AOv/FADz/8gA9/6gAUf/PAFL/zwBU/88AXP/vAKD/qAC0/88BB//PAQn/zwEL/88BDP/PASX/ngEn/54BOf+oATv/qAFi/54BZv+xAX//qAGV/6gBl//yAZv/qAGe/88Bp//PAcX/ngHO/54B0f/sAdn/8gHl/54B5v/sAej/8gHq/+EB7//CAfb/zwH5/+8B+//PAfz/zwH9/88B///PAgD/zwIC/88CA//PAgX/xgII/+8CCf/PAgv/zwIM/88CD//PAhH/zwIW/88CHf/PAh//zwIg/88CN//FAjn/xQJN/88CWP/yAln/7wJd/88CYv+eAmP/wAJl/88CZ//PAm7/ngJw/6gCcv+oAnT/8gJ1/+8Cdv+eAnj/4QJ6/+ECfv/fAoP/8gKE/+8Civ/PAoz/zwKN/+ECkP/PAp7/8gKf/+8Cpf/PAqf/zwKw/+wCsv/sArT/7AK2/+ECuf/PArv/zwK9/88Cvv/yAr//7wLG/80CyP/oAtD/nwLR/8YC5//PA1T/qANW/6gDWP+oA1r/qANw/7EDcf+xA3P/sQN0/7EDdf+xA37/sQN//7EATQA4/74AUf/hAFL/4QBU/+EAWv/vAF3/7wC0/+EAwP/vAML/7wEH/+EBCf/hAQv/4QEM/+EBJf++ASf/vgE6/+8BYv++AZ7/4QGj/+8Bp//hAa3/7wHF/74Bzv++AeX/vgHv/8kB9v/hAfv/4QH8/+EB/f/hAf//4QIA/+ECAv/hAgP/4QIF/98CBv/vAgn/4QIL/+ECDP/hAg//4QIR/+ECFv/hAh3/4QIf/+ECIP/hAiH/7wIk/+0COP/vAjr/7wJC/+sCTf/hAl3/4QJi/74CY//fAmX/4QJn/+ECbv++AnH/7wJ2/74Cfv/pAor/4QKM/+ECkP/hAqX/4QKn/+ECsf/vArP/7wK1/+8Cuf/hArv/4QK9/+ECx//1AtH/4ALn/+EDVf/vA1f/7wNZ/+8DW//vAGQAOP/mADr/5wA8//IAPf/nAFH/1gBS/9YAVP/WAFz/8QCg/+cAtP/WAQf/1gEJ/9YBC//WAQz/1gEl/+YBJ//mATn/5wE7/+cBYv/mAX//5wGV/+cBl//yAZv/5wGe/9YBp//WAcX/5gHO/+YB0f/uAdn/8gHl/+YB5v/uAej/8gHq/+gB7//mAfb/1gH5//EB+//WAfz/1gH9/9YB///WAgD/1gIC/9YCA//WAgX/0AII//ECCf/WAgv/1gIM/9YCD//WAhH/1gIW/9YCHf/WAh//1gIg/9YCN//nAjn/5wJN/9YCWP/yAln/8QJd/9YCYv/mAmP/zgJl/9YCZ//WAm7/5gJw/+cCcv/nAnT/8gJ1//ECdv/mAnj/6AJ6/+gCg//yAoT/8QKK/9YCjP/WAo3/6AKQ/9YCnv/yAp//8QKl/9YCp//WArD/7gKy/+4CtP/uArb/6AK5/9YCu//WAr3/1gK+//ICv//xAsb/5wLI/+0C0P/mAtH/0ALn/9YDVP/nA1b/5wNY/+cDWv/nAAICLQALAtD/5gCTACUAEAAn/+gAK//oADP/6AA1/+gAOP/gADr/4AA9/98AgwAQAIQAEACFABAAhgAQAIcAEACIABAAiv/oAJX/6ACW/+gAl//oAJj/6ACZ/+gAm//oAKD/3wDDABAAxQAQAMcAEADJ/+gAy//oAM3/6ADP/+gA3//oAOH/6ADj/+gA5f/oAQ//6AER/+gBE//oARX/6AEl/+ABJ//gATn/3wE7/98BRf/oAU4AEAFS/+gBYv/gAXkAEAF+/+gBf//fAYIAEAGFABABif/oAYwAEAGQ/+gBlf/fAZv/3wHF/+ABx//oAcwAEAHO/+AB0wAQAdcAFAHeABAB4f/oAeT/6AHl/+AB6v/hAe//4AH3ABMB/gAQAgr/4AIcABACI//oAikAEAI1/+gCN//gAjn/4AI7/+gCPf/oAj//6AJB/+gCQ//oAmL/4AJq/+gCbP/oAm7/4AJw/98Ccv/fAnb/4AJ4/+ECef/gAnr/4QJ7/+ACf//hAocAEAKIABACjf/hAo7/4AKSABAClAAQApr/6QKo/+gCqv/oAqz/6AK2/+ECt//gAsb/3wLI/94CygAQAs7/6ALQ/98C0v/yAtQAEALVABAC1gAQAwIAEAMEABADBgAQAwgAEAMKABADDAAQAw4AEAMQABADEgAQAxQAEAMWABADGAAQAy7/6AMw/+gDMv/oAzT/6AM2/+gDOP/oAzr/6AM8/+gDPv/oA0D/6ANC/+gDRP/oA1T/3wNW/98DWP/fA1r/3wNc/+gEMf/oBDL/6AQ0/+gENf/oADIAG//yADj/8QA6//QAPP/0AD3/8ACg//ABJf/xASf/8QE5//ABO//wAWL/8QF///ABlf/wAZf/9AGb//ABxf/xAcz/9QHO//EB0f/zAdn/9AHe//UB5f/xAeb/8wHo//QB7//xAjf/9AI5//QCWP/0AmL/8QJu//ECcP/wAnL/8AJ0//QCdv/xAoP/9AKH//UCnv/0ArD/8wKy//MCtP/zAr7/9ALG//ICyP/yAsr/9QLQ//IC1P/1A1T/8ANW//ADWP/wA1r/8AAIAFgADgCJ/tcBq/+YAbH/xwHX/xIB9/9SAsL/zwPs/4AAZgAlAA8AOP/mADr/5gA8AA4APf/mAIMADwCEAA8AhQAPAIYADwCHAA8AiAAPAKD/5gDDAA8AxQAPAMcADwEl/+YBJ//mATn/5gE7/+YBTgAPAWL/5gF5AA8Bf//mAYIADwGFAA8BjAAPAZX/5gGXAA4Bm//mAcX/5gHMAA4Bzv/mAdEACwHTAA8B1wATAdkADgHeAA4B5f/mAeYACwHoAA4B6v/lAe//5gHw//QB9wASAf4ADwIF/+cCCv/oAg//5wIcAA8CKQAPAjf/5gI5/+YCWAAOAmL/5gJj/+cCbv/mAnD/5gJy/+YCdAAOAnb/5gJ4/+UCef/oAnr/5QJ7/+gCgwAOAocADgKIAA8Cjf/lAo7/6AKSAA8ClAAPAp4ADgKwAAsCsgALArQACwK2/+UCt//oAr4ADgLG/+YCyP/mAsoADgLQ/+YC0f/nAtQADgLVAA8C1gAPAwIADwMEAA8DBgAPAwgADwMKAA8DDAAPAw4ADwMQAA8DEgAPAxQADwMWAA8DGAAPA1T/5gNW/+YDWP/mA1r/5gA3AAb/vwAL/78AOP+fADr/yQA9/60AoP+tASX/nwEn/58BOf+tATv/rQFi/58BZv+/AX//rQGV/60Bm/+tAcX/nwHO/58B0f/sAeX/nwHm/+wB6v/mAe//xAIF/80CD//VAjf/yQI5/8kCYv+fAmP/zAJu/58CcP+tAnL/rQJ2/58CeP/mAnr/5gJ+/98Cjf/mArD/7AKy/+wCtP/sArb/5gLG/9ECyP/sAtD/oQLR/88DVP+tA1b/rQNY/60DWv+tA3D/vwNx/78Dc/+/A3T/vwN1/78Dfv+/A3//vwAwADj/4wA8/+UAPf/kAKD/5AEl/+MBJ//jATn/5AE7/+QBYv/jAX//5AGV/+QBl//lAZv/5AHF/+MBzP/lAc7/4wHR/+kB1//iAdn/5QHe/+UB5f/jAeb/6QHo/+UB/v/qAhz/6gJY/+UCYv/jAm7/4wJw/+QCcv/kAnT/5QJ2/+MCg//lAof/5QKI/+oCnv/lArD/6QKy/+kCtP/pAr7/5QLK/+UC0P/kAtT/5QLV/+oDVP/kA1b/5ANY/+QDWv/kACMAOP/iADz/5AEl/+IBJ//iAWL/4gGX/+QBxf/iAcz/5AHO/+IB0f/pAdf/4QHZ/+QB3v/kAeX/4gHm/+kB6P/kAff/5AH+/+sCHP/rAlj/5AJi/+ICbv/iAnT/5AJ2/+ICg//kAof/5AKI/+sCnv/kArD/6QKy/+kCtP/pAr7/5ALK/+QC1P/kAtX/6wAXADj/6wA9//MAoP/zASX/6wEn/+sBOf/zATv/8wFi/+sBf//zAZX/8wGb//MBxf/rAc7/6wHl/+sCYv/rAm7/6wJw//MCcv/zAnb/6wNU//MDVv/zA1j/8wNa//MANgBR/+8AUv/vAFT/7wBc//AAtP/vAQf/7wEJ/+8BC//vAQz/7wGe/+8Bp//vAfb/7wH3/+4B+f/wAfv/7wH8/+8B/f/vAf//7wIA/+8CAv/vAgP/7wIF/+4CCP/wAgn/7wIL/+8CDP/vAg//7wIR/+8CFv/vAh3/7wIf/+8CIP/vAiT/9AJC//ECTf/vAln/8AJd/+8CY//vAmX/7wJn/+8Cdf/wAoT/8AKK/+8CjP/vApD/7wKf//ACpf/vAqf/7wK5/+8Cu//vAr3/7wK///AC0f/vAuf/7wAiAAb/8gAL//IAWv/1AF3/9QDA//UAwv/1ATr/9QFm//IBo//1Aa3/9QIF//QCBv/1Ag//9AIh//UCJP/1Ajj/9QI6//UCY//1AnH/9QKx//UCs//1ArX/9QLR//UDVf/1A1f/9QNZ//UDW//1A3D/8gNx//IDc//yA3T/8gN1//IDfv/yA3//8gAyAFH/7gBS/+4AVP/uALT/7gEH/+4BCf/uAQv/7gEM/+4Bnv/uAaf/7gH2/+4B9wAUAfv/7gH8/+4B/f/uAf//7gIA/+4CAv/uAgP/7gIF/+0CCf/uAgr/7QIL/+4CDP/uAg3/0AIP/+4CEf/uAhb/7gId/+4CH//uAiD/7gJN/+4CXf/uAmP/7QJl/+4CZ//uAnn/7QJ7/+0Civ/uAoz/7gKO/+0CkP/uAqX/7gKn/+4Ct//tArn/7gK7/+4Cvf/uAtH/7QLn/+4ACgAG//UAC//1AWb/9QNw//UDcf/1A3P/9QN0//UDdf/1A37/9QN///UAWQBH//AASP/wAEn/8ABL//AAU//HAFX/8ACq//AAq//wAKz/8ACt//AArv/wALX/xwC2/8cAt//HALj/xwC5/8cAyv/wAMz/8ADO//AA0P/wANL/8ADW//AA2P/wANr/8ADc//AA3v/wAOD/8ADi//AA5P/wAOb/8AEQ/8cBEv/HART/xwEW//ABRv/wAZz/8AGh//ABr//HAbL/8AGz//ABvP/HAfj/8AIB/8cCBP/wAgf/8AIT//ACFP/wAhf/8AI2/8cCPP/wAj7/6wJA//ACRP/wAmv/8AJt//ACmf/wApv/8AKd//ACqf/HAqv/8AKt/8cCw//wAsT/8ALF//ACz//wAxv/8AMd//ADH//wAyH/8AMj//ADJf/wAyf/8AMp//ADL//HAzH/xwMz/8cDNf/HAzf/xwM5/8cDO//HAz3/8AM///ADQf/wA0P/xwNF//AD3P/rA97/6wPm/+kD6v/rAKEABgANAAsADQBF//AAR//AAEj/wABJ/8AASgANAEv/wABT/+IAVf/AAFoACwBdAAsAo//wAKT/8ACl//AApv/wAKf/8ACo//AAqv/AAKv/wACs/8AArf/AAK7/wAC1/+IAtv/iALf/4gC4/+IAuf/iAMAACwDCAAsAxP/wAMb/8ADI//AAyv/AAMz/wADO/8AA0P/AANL/wADW/8AA2P/AANr/wADc/8AA3v/AAOD/wADi/8AA5P/AAOb/wAEQ/+IBEv/iART/4gEW/8ABOgALAUb/wAFP//ABZgANAZz/wAGh/8ABowALAa0ACwGv/+IBsf/WAbL/wAGz/8ABtv/VAbz/4gHz//AB9//IAfj/wAH+/9cCAf/iAgT/wAIGAAsCB//AAhP/wAIU/8ACF//AAhz/1wIhAAsCNv/iAjgACwI6AAsCPP/AAj7/7AJA/8ACQgAMAkT/wAJr/8ACbf/AAnEACwKI/9cCk//wApX/8AKZ/8ACm//AAp3/wAKp/+ICq//AAq3/4gKxAAsCswALArUACwLD/8ACxP/AAsX/wALHAAsCyQALAs//wALV/9cC1//wAwP/8AMF//ADB//wAwn/8AML//ADDf/wAw//8AMR//ADE//wAxX/8AMX//ADGf/wAxv/wAMd/8ADH//AAyH/wAMj/8ADJf/AAyf/wAMp/8ADL//iAzH/4gMz/+IDNf/iAzf/4gM5/+IDO//iAz3/wAM//8ADQf/AA0P/4gNF/8ADVQALA1cACwNZAAsDWwALA3AADQNxAA0DcwANA3QADQN1AA0DfgANA38ADQPXAA0D2QAOA9r/9QPc/+wD3v/tA+b/7APq/+4D7P+/A/cADQAPAfcAFAH+ABACBf/wAgr/8AIP//ACEgAWAhwAEAJj/+YCef/wAnv/3AKIABACjv/wArf/8ALR//AC1QAQAEwAR//uAEj/7gBJ/+4AS//uAFX/7gCq/+4Aq//uAKz/7gCt/+4Arv/uAMr/7gDM/+4Azv/uAND/7gDS/+4A1v/uANj/7gDa/+4A3P/uAN7/7gDg/+4A4v/uAOT/7gDm/+4BFv/uAUb/7gGc/+4Bof/uAbL/7gGz/+4B9wASAfj/7gH+AA4CBP/uAgX/4wIH/+4CCv/jAg3/uAIP/+MCE//uAhT/7gIX/+4CHAAOAjz/7gJA/+4CRP/uAmP/ugJr/+4Cbf/uAnn/4wJ7/9kCiAAOAo7/4wKZ/+4Cm//uAp3/7gKr/+4Ct//jAsP/7gLE/+4Cxf/uAs//7gLR/+MC1QAOAxv/7gMd/+4DH//uAyH/7gMj/+4DJf/uAyf/7gMp/+4DPf/uAz//7gNB/+4DRf/uACAAWv/AAF3/wADA/8AAwv/AATr/wAGj/8ABrf/AAgX/gAIG/8ACCv/uAg//8AIh/8ACJP/bAjj/wAI6/8ACQv/cAmP/RwJx/8ACef/uAnv/7gKO/+4Csf/AArP/wAK1/8ACt//uAscABwLJ//QC0f9/A1X/wANX/8ADWf/AA1v/wAAhAFr/9ABc//AAXf/0AMD/9ADC//QBOv/0AaP/9AGt//QB9//vAfn/8AH+//MCBv/0Agj/8AIP/+4CHP/zAiH/9AI4//QCOv/0Aln/8AJx//QCdf/wAoT/8AKI//MCn//wArH/9AKz//QCtf/0Ar//8ALV//MDVf/0A1f/9ANZ//QDW//0AAoABv/WAAv/1gFm/9YDcP/WA3H/1gNz/9YDdP/WA3X/1gN+/9YDf//WABUAXP/gAfn/4AIF/3YCCP/gAgr/wgIP/9MCJP/ZAkL/2wJZ/+ACY/8eAnX/4AJ5/8ICe//tAoT/4AKO/8ICn//gArf/wgK//+ACx//wAsn/8gLR/1YADQIF/2QCCv/SAg//2QIk/9kCQv/bAmP/HgJ5/9ICe//tAo7/0gK3/9ICx//wAsn/8gLR/1YACgHv/8MCBf/PAg//1AJj/84Cev/nAn7/3wLG/9ECyP/sAtD/oALR/9EACQIF/2oCD//GAiT/2QJC/9sCY/8eAnv/7QLH//ACyf/yAtH/VgAJAA0AFABBABEAVv/iAGEAEwPc/9kD3v/ZA+b/2QPq/9kD7P+0AAoABv/XAAv/1wFm/9cDcP/XA3H/1wNz/9cDdP/XA3X/1wN+/9cDf//XABQAW//BAZb/xQG0/7QB9P/XAgX/uQIP/+kCJP+yAj7/0gJC/8gCY/+gAnv/xQKa/+QCx//MAsn/zALR/8sC0v/vA9z/5wPe/+cD5v/mA+r/6AA6AAT/xABW/78AW//RAG7/bAB+/24Aif9DAKn/rAC7/6EBlv+4AaX/fgGp/3sBsP+bAbH/eQG0/7IBtv9+Abj/fQG5/3wB1/+vAe8ADwH0/+QB9f+gAff/dAH6/4ACBf+yAg7/fQIP/7ICEP+AAhL/eQIVACgCIv99AiT/fwI+/2YCQv/aAlH/gQJT/5gCX/99AmP/swJp/6ACe/98An7/mgJ//2wCmv/mAsL/awLH/5ICyf+tAs3/ewLQAA8C0f+RAtL/8gPW//ED2f/xA9r/vAPc/7kD3v+5A+b/uQPq/7kD7P+vA/b/7QAGAbT/6gH3/+4CBf/WAg//7QJj/+wC0f/sABIB1/+uAe8AEgH1/+AB9/+tAfr/1gIO/98CEv/SAiL/4AI+/84CUf/dAlP/4gJf/+ACaf/gAnv/6QJ//9oCwv+9As3/3wLQABEAMABW/34AW/+dAG7+8QB+/vQAif6rAKn/XgC7/0sBlv9yAaX/DwGp/woBsP9BAbH/BwG0/2gBtv8PAbj/DgG5/wwB1/9jAe8ABQH0/70B9f9JAff+/gH6/xMCBf9oAg7/DgIP/2gCEP8TAhL/BwIVADACIv8OAiT/EQI+/ucCQv+sAlH/FQJT/zwCX/8OAmP/agJp/0kCe/8MAn7/PwJ//vECmv/AAsL+7wLH/zECyf9fAs3/CgLQAAUC0f8wAtL/1QACAff/aAI+/+4AFwGW/9QBqP/tAasAEQG0/+ABtv/nAbj/5QG5/+4B1wASAfT/6QIF/9cCY//XAnv/0wJ+/9YCf//FApr/5wLGAA0CyAAMAtH/1gLS//ID3P/pA97/5wPm/+cD6v/pAAECPv/xAAICBf/WA3H/iAAJAA0ADwBBAAwAVv/rAGEADgPc/+cD3v/nA+b/5wPq/+kD7P/LAB0AI/+vAFj/7wBb/98BR//u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AX4BfgAFAX8BfwAQAYIBggACAYMBgwADAYQBhAAcAYUBhQACAYYBhgAGAYcBhwARAYgBiAAHAYkBiQAFAYoBigAHAYsBiwAJAYwBjAACAY0BjgAHAZABkAAFAZIBkgALAZQBlAAMAZUBlQAQAZcBlwAPAZoBmgAHAZsBmwAQAZ4BngAWAaMBowAZAacBpwAWAa0BrQAZAa8BrwAXAbEBsQATAbwBvAAXAcMBxAAGAcYBxgAcAckBygAHAcsBywAIAcwBzQAdAc8BzwAJAdEB0QAeAdIB0gAHAdMB0wACAdUB1QADAdYB1gAcAdgB2AAGAdkB2QAPAdsB2wAHAd0B3QAJAd4B4AAHAeEB4QAFAeMB4wALAeQB5AAEAeUB5QAMAeYB5gAeAegB6AAPAekB6QAHAesB6wAHAe0B7QAdAe8B7wAdAfMB8wASAfYB9gAfAfgB+AAVAfkB+QAaAgECAQAXAgMCAwATAgQCBAAUAgYCBgAZAgcCBwATAggCCAAaAg0CDQAgAg8CDwAgAhACEAATAhMCFAAVAhYCFgAfAhwCHQAgAiECIQAZAiUCJQAdAiYCJgAgAikCKQACAjYCNgAXAjcCNwANAjgCOAAZAjkCOQANAjoCOgAZAlECUQATAlICUgAcAlMCUwAfAlQCVAAcAlgCWAAPAlkCWQAaAlwCXAAJAl4CXgAJAmACYAAJAmICYgAJAmQCZAAHAmwCbAAEAm0CbQAUAm4CbgAMAnACcAAQAnECcQAZAnICcgAQAnQCdAAPAnUCdQAaAn0CfQAWAoICggAHAoMCgwAPAoQChAAaAosCiwAHAo8CjwAHApECkQAHApICkgACApMCkwASApQClAACApUClQASApgCmAAGApkCmQAVApsCmwAVAp0CnQAVAp4CngAPAp8CnwAaAqgCqAAFAqkCqQAXAq0CrQAXAq8CrwATArACsAAeArECsQAZArICsgAeArMCswAZArQCtAAeArUCtQAZArgCuAAcArkCuQAfAr0CvQAfAr4CvgAPAr8CvwAaAtYC1gACAtcC1wASAuYC5gAHAucC5wAWAvgC+AAOAvoC+gAOAvwC/AAOAwIDAgACAwMDAwASAwQDBAACAwUDBQASAwYDBgACAwcDBwASAwgDCAACAwkDCQASAwoDCgACAwsDCwASAwwDDAACAw0DDQASAw4DDgACAw8DDwASAxADEAACAxEDEQASAxIDEgACAxMDEwASAxQDFAACAxUDFQASAxYDFgACAxcDFwASAxgDGAACAxkDGQASAxoDGgAGAxsDGwAVAxwDHAAGAx0DHQAVAx4DHgAGAx8DHwAVAyADIAAGAyEDIQAVAyIDIgAGAyMDIwAVAyQDJAAGAyUDJQAVAyYDJgAGAycDJwAVAygDKAAGAykDKQAVAyoDKgAHAywDLAAHAy4DLgAFAy8DLwAXAzADMAAFAzEDMQAXAzIDMgAFAzMDMwAXAzQDNAAFAzUDNQAXAzYDNgAFAzcDNwAXAzgDOAAFAzkDOQAXAzoDOgAFAzsDOwAXA0MDQwAXA0YDRgAIA0gDSAAIA1QDVAAQA1UDVQAZA1YDVgAQA1cDVwAZA1gDWAAQA1kDWQAZA1oDWgAQA1sDWwAZA1wDXAAFA3IDcgABA3YDdgABA3oDewABBDEEMQAEBDMENAAFAAEABgQwAAEAAAAAAAAAAAABAAAAAAAAAAAAFgAZABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAAAAAACAAAAAAAGgAAAAAAAAAAAAgAAAAIAAAAGwAJAAoACwAMABcADQAYAAAAAAAAAAAAAAAAAAMAAAAEAAQABAAAAAQAAAAAAAAAAAAAAAUABQAGAAUABAAAAAcAAAAOAA8AAAAcAA8AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAgACAAIAAgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAIAAgAAAAIAAoACgAKAAoADQAAAAAAAwADAAMAAwADAAMAAAAEAAQABAAEAAQAAAAAAAAAAAAAAAUABgAGAAYABgAGAAAAAAAOAA4ADgAOAA8AAAAPAAIAAwACAAMAAgADAAgABAAIAAQACAAEAAgABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQACAAEAAgABAAIAAQACAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAUABQAAAAAACAAGAAgABgAIAAYACAAEAAAAAAAAAAAAAAAAABsABwAbAAcAGwAHABsABwAJAAAACQAAAAAAAAAKAA4ACgAOAAoADgAKAA4ACgAOAAoADgAMAAAADQAPAA0AGAAQABgAEAAYABAAAAAAAAAACAAEAAAADgAAAAAAAAAAAAAAAgADAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAHAAkAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAACAANAAAAAAACAAAAAAACAAAAGAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAA0AAAAXAAAAAAAAAA0ABAAAAAUAAAAOAAQAAAAPAAAAAAAAAAUAAAAAAAAAAAAAAA8AAAAGAAAAAAAEAAQAAAAOAAAAAAAAAAAAAAAOAAYADgAAAAAAAAAAAAAAAAAAAAkAAAAIAAAAAAAAABoAEQAAAAkAAAAAABUAAAACAAAAAAAAAAAAAAAXAAAAAAAAAAAAEQAAAAAACAAAAAAACAAJABUAAAAXAAAAEgAAAAAAAAAAAAAAAAAAAAAAAwAAAAAABQAAAAQAHAAAAAUABQAFABMABQAFAAYABQAFAAQAAAAPAAQAHAAFABQABQAFAAAAAAAFAAAABQAAAAQABAAAAAUABAAHAAAAAAAAABMABQAAAAUABQAPAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAGAAsADwALAA8ACAAEAAgAAAAIAAQACAAAAAgABAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAABcAHAAAAAAAAAAFAAAAAAAAAAAACQAAAAAABQAAAAUAAAAAAAgABAAIAAQACQAAAA0ADwANAAAAFwAcAAkAAAASABQAAAAAAAAAAAAAAAAAAAAAAAAAFwAcAAAAAAARABMAAAAFAAAABQASABQAAAAFAAAAAgADAAIAAwAAAAAAAAAEAAAABAAAAAQAFwAcAAAAAAAAAAAAAAAFAAAABQAIAAYACAAEAAgABgAAAAAAFQAPABUADwAVAA8AEgAUAAAABQAAAAUAAAAFABcAHAAAAAAAAAAEAAQABAAAAAAAAAAAABEAAAAAAAAACAAEAAAAAAAAAAAAEQATAAIAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAACAAMAAgADAAIAAwACAAMAAgADAAIAAwACAAMAAgADAAIAAwACAAMAAgADAAIAAwAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAACAAGAAgABgAIAAYACAAGAAgABgAIAAYACAAGAAgABAAIAAQACAAEAAgABgAIAAQACgAOAAoADgAAAA4AAAAOAAAADgAAAA4AAAAOAA0ADwANAA8ADQAPAA0ADwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGQAZAAAAAQABABYAAQABAAEAFgAAAAAAAAAWABYAAAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgAAAAIAAgAAAABAAAACgIGCBAABERGTFQAGmN5cmwASGdyZWsAdmxhdG4ApAAEAAAAAP//ABIAAAAKABQAHgAoADQAQQBLAFUAXwBpAHMAfQCHAJEAmwClAK8ABAAAAAD//wASAAEACwAVAB8AKQA1AEIATABWAGAAagB0AH4AiACSAJwApgCwAAQAAAAA//8AEgACAAwAFgAgACoANgBDAE0AVwBhAGsAdQB/AIkAkwCdAKcAsQAoAAZBWkUgAFRDUlQgAH5NT0wgAKhOQVYgANRST00gAQBUVVIgASwAAP//ABMAAwANABcAIQArADIANwBEAE4AWABiAGwAdgCAAIoAlACeAKgAsgAA//8AEgAEAA4AGAAiACwAOABFAE8AWQBjAG0AdwCBAIsAlQCfAKkAswAA//8AEgAFAA8AGQAjAC0AOQBGAFAAWgBkAG4AeACCAIwAlgCgAKoAtAAA//8AEwAGABAAGgAkAC4AOgA+AEcAUQBbAGUAbwB5AIMAjQCXAKEAqwC1AAD//wATAAcAEQAbACUALwA7AD8ASABSAFwAZgBwAHoAhACOAJgAogCsALYAAP//ABMACAASABwAJgAwADwAQABJAFMAXQBnAHEAewCFAI8AmQCjAK0AtwAA//8AEwAJABMAHQAnADEAMwA9AEoAVABeAGgAcgB8AIYAkACaAKQArgC4ALljMnNjBFhjMnNjBF5jMnNjBGRjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBkbGlnBHhkbGlnBH5kbGlnBIRkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbm9tBJBkbm9tBJZkbm9tBJxkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhsaWdhBLJsaWdhBLpsbnVtBMBsbnVtBMZsbnVtBMxsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsb2NsBNhsb2NsBN5sb2NsBORudW1yBOpudW1yBPBudW1yBPZudW1yBPxudW1yBPxudW1yBPxudW1yBPxudW1yBPxudW1yBPxudW1yBPxvbnVtBQJvbnVtBQhvbnVtBQ5vbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRwbnVtBRpwbnVtBSBwbnVtBSZwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxzbWNwBTJzbWNwBThzbWNwBT5zbWNwBURzbWNwBURzbWNwBURzbWNwBURzbWNwBURzbWNwBURzbWNwBURzczAxBUpzczAxBVBzczAxBVZzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAyBWJzczAyBWhzczAyBW5zczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAzBXpzczAzBYBzczAzBYZzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczA0BZJzczA0BZhzczA0BZ5zczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA1BapzczA1BbBzczA1BbZzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA2BcJzczA2BchzczA2Bc5zczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA3BdpzczA3BeBzczA3BeZzczA3BexzczA3BexzczA3BexzczA3BexzczA3BexzczA3BexzczA3Bex0bnVtBfJ0bnVtBfh0bnVtBf50bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgQAAAABAAEAAAABAAMAAAABAAIAAAABAAAAAAACAAgACQAAAAEADgAAAAEAEAAAAAEADwAAAAEADQAAAAEAQwAAAAEARQAAAAEARAAAAAEAQgAAAAMAPwBAAEEAAAACABEAEgAAAAEAEgAAAAEAPAAAAAEAPgAAAAEAPQAAAAEAOwAAAAEACgAAAAEADAAAAAEACwAAAAEARwAAAAEASQAAAAEASAAAAAEARgAAAAEAMAAAAAEAMgAAAAEAMQAAAAEALwAAAAEAOAAAAAEAOgAAAAEAOQAAAAEANwAAAAEABQAAAAEABwAAAAEABgAAAAEABAAAAAEAFAAAAAEAFgAAAAEAFQAAAAEAEwAAAAEAGAAAAAEAGgAAAAEAGQAAAAEAFwAAAAEAHAAAAAEAHgAAAAEAHQAAAAEAGwAAAAEAIAAAAAEAIgAAAAEAIQAAAAEAHwAAAAEAJAAAAAEAJgAAAAEAJQAAAAEAIwAAAAEAKAAAAAEAKgAAAAEAKQAAAAEAJwAAAAEALAAAAAEALgAAAAEALQAAAAEAKwAAAAEANAAAAAEANgAAAAEANQAAAAEAMwBLAJgAmACYAJgEJgQmBCYEJgcUB8AOUA5QDmYOiA6IDogOiA6+DuQPEg8SDxIPEg8mDyYPJg8mDzoPOg86DzoPTg9OD04PTg9gD2APYA9gD3oPeg96D3oPvA+8D7wPvA/aD9oP2g/aD/gP+A/4D/gQKhAqECoQKhBcEFwQXBBcEI4QohDuEMwQzBDMEMwQ7hDuEO4Q7hEaAAEAAAABAAgAAgHEAN8DvQPsA+sD6gPpA+gD5wPmA+UD5APjA+ID4QPgA98D3gPdA9wD2wPaA9kD2APXA9YD9gP3BKkDvAO7BFAEUQRSBFMEVARVBFcEWARZBFoEWwRcBF0EXgRfBE4EYARhBGIEYwRkBGUEZgRtBG4EbwRwBEwEcQRyBHMEdAR1BHYEdwR4BE0EeQR6BHsEfAR9BH4EfwSABIEEggSDBIQEhQSGBIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJMERASUBJUElgSXBJgEmQSaBJ0EnARPBJ4EnwSgBKEEogSjBKQEpQSmBKcEqAP+BFYEmwSqBKsErAStBK4ErwSwBLEEsgO6A7kEswS0BLUDuAS2BLcDtwS4A7YEuQPGBLoD0QS7BLwD0gS9A9MD1AS+BL8EwAP5BMED+ATCBMMExATFA/8EAAQBBMYExwQCBMgEAwTJBMoEBATLBAUEBgQHBMwECAQJBM0EzgTPBNAE0QTSBNMECgTcBNQECwQMBA0EDgQPBBAEEQQSBBMEFAQ4BBUEFgTVBBcEGAQZBNYEGgTXBNgEGwQcBB0EHgQfBCAE2QQhBCIE2gQjBNsEJAQlBCcEJgABAN8ACAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AZgBoAIMAhACFAIYAhwCIAIoAiwCMAI0AjgCPAJAAkQCSAJMAlACVAJYAlwCYAJkAnACdAJ4AnwCgAKIAwwDFAMcAyQDLAM0AzwDRANMA1QDXANkA2wDdAN8A4QDjAOUA5wDrAO0A7wDxAPMA9wD5APwA/gEAAQIBBgEIAQoBDwERARMBFQEXARkBGwEdAR8BIQEjASUBJwEpASsBLQEvATEBMwE1ATcBOQE7ATwBPgFAAU4BYgF5AXsBfAF9AX4BfwGAAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gJSAlQCWAJaAlwCXgJiAmQCagJsAnACcgJ0AnYCegJ8An4CgAKaAqICpAKqArADhwOOA5MDlgABAAAAAQAIAAIBdAC3A+wD6wPqA+kD6APnA+YD5QPkA+MD4gPhA+AD3wPeA90D3APbA9oD2QPYA9cD1gP2A/cEqQRQBFEEUgRTBFQEVQRXBFgEWQRaBFsEXARdBF4EXwROBGAEYQRiBGMEZARlBGYEbQRuBG8EcASmBHEEcgRzBHQEdQR2BHcEeARNBHkEegR7BHwEfQR+BH8EgASBBIIEgwSEBIUEhgSHBIgEiQSKBIsEjASNBI4EjwSQBJEEkgSTBEQElASVBJYElwSYBJkEmgSdBJwETwSeBJ8EoAShBKIEowSkBKUEpwSoA/4EVgSbBMgEAwTJBMoEBATLBAUEBgQHBMwECAQJBM0EzgTPBNAE0QTSBNMECgTcBNQECwQMBA0EDgQPBBAEEQQSBBMEFATAA/kEwQP4BMIEwwTEBMUD/wQABAEExgTHBAIEOAQVBBYE1QQXBBgEGQTWBBoE1wTYBBsEHAQdBB4EHwQgBNkEIQQiBNoEIwTbAAEAtwBFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AowCkAKUApgCnAKgAqgCrAKwArQCuAK8AsACxALIAswC0ALUAtgC3ALgAuQC8AL0AvgC/AMAAwgDEAMYAyADKAMwAzgDQANIA1ADWANgA2gDcAN4A4ADiAOQA5gDoAOwA7gDwAPIA9AD4APoA/QD/AQEBAwEHAQkBCwEQARIBFAEWARgBGgEcAR4BIAEiASQBJgEoASoBLAEuATABMgE0ATYBOAE6AT0BPwFBAU8BYwHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIQIiAlMCVQJZAlsCXQJfAmMCZQJrAm0CcQJzAnUCdwJ7An0CfwKBApsCowKlAqsCsQAGAAAABgASACoAQgBaAHIAigADAAAAAQASAAEAkAABAAAASgABAAEATQADAAAAAQASAAEAeAABAAAASgABAAEATgADAAAAAQASAAEAYAABAAAASgABAAEA8gADAAAAAQASAAEASAABAAAASgABAAECGQADAAAAAQASAAEAMAABAAAASgABAAECGwADAAAAAQASAAEAGAABAAAASgABAAEDLQACAAEBcQF1AAAABAAAAAEACAABBh4ANgByAKQArgC4AMoA/AEOARgBSgFkAX4BkAG6AewB9gIYAjICRAJ2AogCogLMAt4DEAMaAyQDNgNoA3IDfAOGA6ADugPMA/YEKAQyBFQEbgSABLIExATeBQgFGgUkBS4FOAVCBWwFlgXABeoGFAAGAA4AFAAaACAAJgAsAIMAAgFxAIQAAgFyAIYAAgFzAwQAAgF0AVQAAgF1AwIAAgF2AAEABALYAAIBdgABAAQAyQACAXIAAgAGAAwC2gACAXYC3AACA6sABgAOABQAGgAgACYALACLAAIBcQCMAAIBcgMeAAIBcwMcAAIBdAFWAAIBdQMaAAIBdgACAAYADAFKAAIBcgDlAAIDqwABAAQC3gACAXYABgAOABQAGgAgACYALACPAAIBcQCQAAIBcgDrAAIBcwMqAAIBdAFYAAIBdQMsAAIBdgADAAgADgAUAuAAAgFyAuIAAgF2APkAAgOrAAMACAAOABQA/AACAXIC5AACAXYA/gACA6sAAgAGAAwC5gACAXIC6AACAXYABQAMABIAGAAeACQBTAACAXEBBgACAXIAlAACAXMC6gACAXYBCAACA6sABgAOABQAGgAgACYALACVAAIBcQCWAAIBcgCYAAIBcwMwAAIBdAFaAAIBdQMuAAIBdgABAAQC7AACAXIABAAKABAAFgAcARcAAgFyAVwAAgF1Au4AAgF2ARkAAgOrAAMACAAOABQBHQACAXIC8AACAXYBYAACA6sAAgAGAAwC8gACAXYBYgACA6sABgAOABQAGgAgACYALACcAAIBcQCdAAIBcgErAAIBcwNIAAIBdAFeAAIBdQNGAAIBdgACAAYADAL0AAIBcwL2AAIBdgADAAgADgAUAvgAAgFxAvoAAgFyAv4AAgF2AAUADAASABgAHgAkA1QAAgFxAKAAAgFyA1oAAgFzA1gAAgF0A1YAAgF2AAIABgAMATwAAgFyAwAAAgF2AAYADgAUABoAIAAmACwAowACAXEApAACAXIApgACAXMDBQACAXQBVQACAXUDAwACAXYAAQAEAtkAAgF2AAEABADKAAIBcgACAAYADALbAAIBdgLdAAIDqwAGAA4AFAAaACAAJgAsAKsAAgFxAKwAAgFyAx8AAgFzAx0AAgF0AVcAAgF1AxsAAgF2AAEABAFLAAIBcgABAAQC3wACAXYAAQAEAy0AAgF2AAMACAAOABQC4QACAXIC4wACAXYA+gACA6sAAwAIAA4AFAD9AAIBcgLlAAIBdgD/AAIDqwACAAYADALnAAIBcgLpAAIBdgAFAAwAEgAYAB4AJAFNAAIBcQEHAAIBcgC0AAIBcwLrAAIBdgEJAAIDqwAGAA4AFAAaACAAJgAsALUAAgFxALYAAgFyALgAAgFzAzEAAgF0AVsAAgF1Ay8AAgF2AAEABALtAAIBcgAEAAoAEAAWABwBGAACAXIBXQACAXUC7wACAXYBGgACA6sAAwAIAA4AFAEeAAIBcgLxAAIBdgFhAAIDqwACAAYADALzAAIBdgFjAAIDqwAGAA4AFAAaACAAJgAsALwAAgFxAL0AAgFyASwAAgFzA0kAAgF0AV8AAgF1A0cAAgF2AAIABgAMAvUAAgFzAvcAAgF2AAMACAAOABQC+QACAXEC+wACAXIC/wACAXYABQAMABIAGAAeACQDVQACAXEAwAACAXIDWwACAXMDWQACAXQDVwACAXYAAgAGAAwBPQACAXIDAQACAXYAAQAEAVAAAgFyAAEABAFSAAIBcgABAAQBUQACAXIAAQAEAVMAAgFyAAUADAASABgAHgAkAK8AAgFxALAAAgFyAOwAAgFzAysAAgF0AVkAAgF1AAUADAASABgAHgAkAz4AAgFxAzwAAgFyA0IAAgFzA0AAAgF0A0QAAgF2AAUADAASABgAHgAkAz8AAgFxAz0AAgFyA0MAAgFzA0EAAgF0A0UAAgF2AAUADAASABgAHgAkA0wAAgFxA0oAAgFyA1AAAgFzA04AAgF0A1IAAgF2AAUADAASABgAHgAkA00AAgFxA0sAAgFyA1EAAgFzA08AAgF0A1MAAgF2AAEABAHBAAIBcgACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAiQCJACwAmwCbAC0AqQCpAC4AuwC7AC8A9AD0ADABRQFIADEBwAHAADUAAQAAAAEACAABAAYAPwABAAIBIQEiAAEAAAABAAgAAgAOAAQE3QTeBN8E4AABAAQAxwDIANsA3AAEAAAAAQAIAAEAJgACAAoAHAACAAYADAOsAAIASgOxAAIAWAABAAQDsgACAFgAAQACAEoAVwAEAAAAAQAIAAEARAACAAoAFAABAAQDrQACAE0AAQAEA68AAgBNAAQAAAABAAgAAQAeAAIACgAUAAEABAOuAAIAUAABAAQDsAACAFAAAQACAEoDrAABAAAAAQAIAAEABgN5AAEAAQBLAAEAAAABAAgAAQAGAiIAAQABAaEAAQAAAAEACAABAAYDjAABAAEANgABAAAAAQAIAAIAHAACA8EDwAABAAAAAQAIAAIACgACA78DvgABAAIALwBPAAEAAAABAAgAAgAeAAwEMQQzBDIENAQ1BCgEKQQqA/sELAQtBC4AAQAMACcAKAArADMANQBGAEcASABLAFMAVABVAAEAAAABAAgAAgAMAAMELwQwBDAAAQADAEkASwP7AAEAAAABAAgAAgBmAAgERgQ2BDcEOQQ6BEIEQwRFAAEAAAABAAgAAgAWAAgAGwAVABQAHQAZABgAFwAWAAEACAP6BCsEZwRoBGkEagRrBGwAAQAAAAEACAACABYACARnBCsEbARrBGoEaQP6BGgAAQAIABQAFQAWABcAGAAZABsAHQABAAAAAQAIAAIAFgAIABUAFgAXABgAGQAbAB0AFAABAAgENgQ3BDkEOgRCBEMERQRGAAEAAAABAAgAAQAGA3AAAQABABMABgAAAAEACAADAAEAEgABAGYAAAABAAAASgACAAIDgwODAAADxwPQAAEAAQAAAAEACAACADwACgPQA88DzgPNA8wDywPKA8kDyAPHAAEAAAABAAgAAgAaAAoEOwB8AHUAdgQ8BD0EPgQ/BEAEQQACAAEAFAAdAAAAAQAAAAEACAACACYAEAPQA88DzgPNA8wDywPKA8kDyAPHBEkERwRKBEsESAThAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgDyAhkCGwMt","Roboto-Regular.ttf":"AAEAAAASAQAABAAgR0RFRtRX1FkAAg/sAAACREdQT1NKcuCzAAISMAAAUiRHU1VCw4aZEQACZFQAABfoT1MvMqCnsaYAAAGoAAAAYGNtYXBAmkl2AAAafAAAEshjdnQgJEEG5QAAL9wAAABMZnBnbWf0XKsAAC1EAAABvGdhc3AACAATAAIP4AAAAAxnbHlmHN2bBQAAOfAAAdM2aGRteDc4ERcAABWQAAAE7GhlYWT4RqsOAAABLAAAADZoaGVhCroKggAAAWQAAAAkaG10eOiEiIgAAAIIAAATiGxvY2HgyGepAAAwKAAACcZtYXhwBxIC+QAAAYgAAAAgbmFtZTVTY1kAAg0oAAACmHBvc3T/bQBkAAIPwAAAACBwcmVwdKCP7AAALwAAAADbAAEAAAACAACEKlnoXw889QAbCAAAAAAAxPARLgAAAADQ206a+hv91QkwCHMAAAAJAAIAAAAAAAAAAQAAB2z+DAAACUn6G/5KCTAAAQAAAAAAAAAAAAAAAAAABOIAAQAABOIAjwAWAFQABQABAAAAAAAOAAACAAIUAAYAAQADBIUBkAAFAAAFmgUzAAABHwWaBTMAAAPRAGYCAAAAAgAAAAAAAAAAAOAACv9QACF/AAAAIQAAAABHT09HAEAAAP/9BgD+AABmB5oCACAAAZ8AAAAABDoFsAAgACAAAgOMAGQAAAAAAAAAAAH7AAAB+wAAAg8AoAKPAIgE7QB3BH4AbgXcAGkE+QBlAWUAZwK8AIUCyAAmA3IAHASJAE4BkgAdAjUAJQIbAJADTAASBH4AcwR+AKoEfgBdBH4AXgR+ADUEfgCaBH4AhAR+AE0EfgBwBH4AZAHwAIYBsQApBBEASARkAJgELgCGA8cASwcvAGoFOAAcBPsAqQU1AHcFPwCpBIwAqQRsAKkFcwB6BbQAqQItALcEagA1BQQAqQROAKkG/ACpBbQAqQWAAHYFDACpBYAAbQTtAKgEvwBQBMYAMQUwAIwFFwAcBxkAPQUEADkEzgAPBMoAVgIfAJIDSAAoAh8ACQNYAEADnAAEAnkAOQRaAG0EfQCMBDAAXASDAF8EPQBdAscAPAR9AGAEaACMAfEAjQHp/78EDgCNAfEAnAcDAIsEagCMBJAAWwR9AIwEjABfArUAjAQgAF8CnQAJBGkAiAPgACEGAwArA/cAKQPJABYD9wBYArUAQAHzAK8CtQATBXEAgwHzAIsEYABpBKYAWwW0AGkE2AAfAesAkwToAFoDWABmBkkAWwOTAJMDwQBmBG4AfwZKAFoDqgB4Av0AggRGAGEC7wBCAu8APgKCAHsEiACaA+kAQwIWAJMB+wB0Au8AegOjAHoDwABmBdwAVQY1AFAGOQBvA8kARAd6//IERABZBYAAdgS6AKYEwgCLBsEATgSwAH4EkQBHBIgAWwScAJUFmgAdAfoAmwRzAJoETwAiAikAIgWLAKIEiACRB6EAaAdEAGEB/ACgBYcAXQK5/+QFfgBlBJIAWwWQAIwE8wCIAgP/tAQ3AGIDxACpA40AjAOrAHgDagCBAfEAjQKtAHkCKgAyA8YAewL8AF4CWgB+AAD8pwAA/W8AAPyLAAD9XgAA/CcB7/04Ag0AtwQLAHECFwCTBHMAsQWkAB8FcQBnBT4AMgSRAHgFtQCyBJEARQW7AE0FiQBaBVIAcQSFAGQEvQCgBAIALgSIAGAEUABjBCUAbQSIAJEEjgB6ApcAwwRuACUD7ABlBMQAKQSIAJEETQBlBIgAYAQsAFEEXQCPBaMAVwWaAF8GlwB6BKEAeQRC/9oGSABKBf8AKgVkAHsIkQAxCKQAsQaCAD4FtACwBQsAogYEADIHQwAbBL8AUAW0ALEFqQAvBQcATQYsAFMF2QCvBXoAlgeHALAHwACwBhIAEAbrALIFBQCjBWQAkwcnALcFGABZBGwAYQSSAJ0DWwCaBNQALgYgABUEEABYBJ4AnARSAJwEoAAsBe8AnQSdAJwEngCcA9gAKAXNAGQEvQCcBFkAZwZ4AJwGngCRBPcAHgY2AJ0EWACdBE0AZAaHAJ0EZAAvBGj/6ARNAGcGyQAnBuQAnASJ//0EngCcBwgAnAYrAIEEVv/cBysAtwX4AJkE0gAoBEYADwcLAMkGCwC8BtEAkwXhAJYJBAC2B9EAmwQjAFAD2wBMBXEAZwSLAFsFCgAWBAMALgVxAGcEiABbBwEAnAYkAH4HCACcBisAgQUyAHUERwBkBP0AdAAA/GcAAPxxAAD9ZgAA/aQAAPobAAD6LARW/9wFGwCoBIkAjARjAKIDkACRBNsAsQQFAJEFCQCjBH4AmgaMAEQFgwA+B88AqAW0AJEIMQCwBvQAkQXuAHEE0wBtBywANAVcAB8FbwCWBGoAgwVwAIoGLwA/BL3/3gUJAKMEWgCaBbIAsQSIAJEFhwBdBKgAaASoAGkEtwA6A0kAOwT2AFcGlABZBuQAZAZWADYFKwAxBEkAUgQHAHkHwQBEBnUAPwf7AKkGoQCQBPYAdgQdAGUFrQAjBSAARgVkAJYDIABvBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAAAjQAJQI0ACUFQACiBj8AkAOmAA0BmQBgAZkAMAGXACQBmQBPAtQAaALbADwCwQAkBGkARgSPAFcCsgCKA8QAlAVaAJQA9gAmB6oARAJmAGwCZgBZA6MAOwLvADYDYAB6BKYAWwZVAB8GkACnCHYAqAdjADkGKwCMBH4AXwXaAB8EIgAqBHQAIAVIAF0FTwAfBecAegPOAGgIOgCiBQEAZwUXAJgGJgBUBtcAZAbPAGMGagBZBI8AagWOAKkErwBFBJIAqATFAD8IOgBiAgz/sASCAGUEZACYBBEAPgQvAIUECAArAkwAtQKPAG4CAwBcBPMAPARuAB8EiwA8BtQAPAbUADwE7gA8BpsAXwAAAAAIMwBbCDUAXAQgADsEngBaAfz/tgGRAGcDpACDA54AgQOfAIED9ABpBA4AaQPz/14D7wBuA6QAgQH9AJ8EhQATBFAAigR8AGAEgACKA+YAigPLAIoErABjBOMAigHoAJcDzwArBFQAigO0AIoGAgCKBOMAigS7AGAEXACKBLsAWQRKAIoEIABDBCYAKAR8AHQEZwAUBhUAMQRUACYEKwANBCMARwLvAFAC7wB6Au8AQgLvAD4C7wA2Au8AWwLvAFYC7wA6Au8ATwLvAEkDlgCPArUAngQ6AB4EwwBkBUwAsQUkALIEEwCSBT0AsgQPAJIEIABDBDMAMAQ8ABYDrwCKBGcAFAS7AGAEZwAUA4kAPgTOAIoD7wA/BWcAYAUXAGAE8gB1BXIAJgR8AGAHQQAnB08AigV0ACgEzQCKBFkAigUkAC4GCwAfBD8ARwTsAIoETgCLBMEAJwQfACIFKACKBGoAPQZRAIoGrACKBR0ACAXxAIoETgCKBHsASwZ2AIoEhwBQBBEACwZHAB8EeQCLBQkAiwU3ACMFwgBgBF8ADQSoACYGYQAmBGoAPQRqAIoFwwACBMoAXgQ/AEcEuwBgBDMAMAPjAEIIIgCKBKsAKAR9AIwEMgBcBJMAWwSMAFsDeQBXBI0AjAScAFsEPQBdBH0AYAWBAH4FrgB+BZMAsgXgAH4F4wB+A9UAoASCAIMDrwCKBFgADwTPAD4C7wBQAu8ANgLvAFsC7wBWAu8AOgLvAE8C7wBJBGsAZQQuAEoGpABgBLkAggUAAHgCBv+0AgT/tAH7AJsB+//6AfsAmwH7AIYEUACKAfsAAAI1ACUFXQAlBV0AJQSGAAAExgAxAp3/9AU4ABwFOAAcBTgAHAU4ABwFOAAcBTgAHAU4ABwFNQB3BIwAqQSMAKkEjACpBIwAqQIt/+ACLQCwAi3/6QIt/9YFtACpBYAAdgWAAHYFgAB2BYAAdgWAAHYFMACMBTAAjAUwAIwFMACMBM4ADwRaAG0EWgBtBFoAbQRaAG0EWgBtBFoAbQRaAG0EMABcBD0AXQQ9AF0EPQBdBD0AXQH6/8YB+gCWAfr/zwH6/7wEagCMBJAAWwSQAFsEkABbBJAAWwSQAFsEaQCIBGkAiARpAIgEaQCIA8kAFgPJABYFOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FNQB3BDAAXAU1AHcEMABcBTUAdwQwAFwFNQB3BDAAXAU/AKkFGQBfBIwAqQQ9AF0EjACpBD0AXQSMAKkEPQBdBIwAqQQ9AF0EjACpBD0AXQVzAHoEfQBgBXMAegR9AGAFcwB6BH0AYAVzAHoEfQBgBbQAqQRoAIwCLf+3Afr/nQIt/7YB+v+cAi3/7AH6/9ICLQAYAfH/+wItAKoGlwC3A9oAjQRqADUCA/+0BQQAqQQOAI0ETgChAfEAkwROAKkB8QBXBE4AqQKHAJwETgCpAs0AnAW0AKkEagCMBbQAqQRqAIwFtACpBGoAjARq/7wFgAB2BJAAWwWAAHYEkABbBYAAdgSQAFsE7QCoArUAjATtAKgCtQBTBO0AqAK1AGMEvwBQBCAAXwS/AFAEIABfBL8AUAQgAF8EvwBQBCAAXwS/AFAEIABfBMYAMQKdAAkExgAxAp0ACQTGADECxQAJBTAAjARpAIgFMACMBGkAiAUwAIwEaQCIBTAAjARpAIgFMACMBGkAiAUwAIwEaQCIBxkAPQYDACsEzgAPA8kAFgTOAA8EygBWA/cAWATKAFYD9wBYBMoAVgP3AFgHev/yBsEATgWAAHYEiABbBID/vgSA/74EJgAoBIUAEwSFABMEhQATBIUAEwSFABMEhQATBIUAEwR8AGAD5gCKA+YAigPmAIoD5gCKAej/vgHoAI4B6P/HAej/tATjAIoEuwBgBLsAYAS7AGAEuwBgBLsAYAR8AHQEfAB0BHwAdAR8AHQEKwANBIUAEwSFABMEhQATBHwAYAR8AGAEfABgBHwAYASAAIoD5gCKA+YAigPmAIoD5gCKA+YAigSsAGMErABjBKwAYwSsAGME4wCKAej/lQHo/5QB6P/KAegABgHoAIkDzwArBFQAigO0AIIDtACKA7QAigO0AIoE4wCKBOMAigTjAIoEuwBgBLsAYAS7AGAESgCKBEoAigRKAIoEIABDBCAAQwQgAEMEIABDBCYAKAQmACgEJgAoBHwAdAR8AHQEfAB0BHwAdAR8AHQEfAB0BhUAMQQrAA0EKwANBCMARwQjAEcEIwBHBTgAHATw//AGGP/+ApEABAWU//oFMv94BWb//QKX/5sFOAAcBPsAqQSMAKkEygBWBbQAqQItALcFBACpBvwAqQW0AKkFgAB2BQwAqQTGADEEzgAPBQQAOQIt/9YEzgAPBIUAZARQAGMEiACRApcAwwRdAI8EcwCaBJAAWwSIAJoD4AAhA/cAKQKX/+YEXQCPBJAAWwRdAI8GlwB6BIwAqQRzALEEvwBQAi0AtwIt/9YEagA1BSQAsgUEAKkFBwBNBTgAHAT7AKkEcwCxBIwAqQW0ALEG/ACpBbQAqQWAAHYFtQCyBQwAqQU1AHcExgAxBQQAOQRaAG0EPQBdBJ4AnASQAFsEfQCMBDAAXAPJABYD9wApBD0AXQNbAJoEIABfAfEAjQH6/7wB6f+/BFIAnAPJABYHGQA9BgMAKwcZAD0GAwArBxkAPQYDACsEzgAPA8kAFgFlAGcCjwCIBB4AoAID/7QBmQAwBvwAqQcDAIsFOAAcBFoAbQSMAKkFtACxBD0AXQSeAJwFiQBaBZoAXwUKABYEA//7CFkAWwlJAHYEvwBQBBAAWAU1AHcEMABcBM4ADwQCAC4CLQC3B0MAGwYgABUCLQC3BTgAHARaAG0FOAAcBFoAbQd6//IGwQBOBIwAqQQ9AF0FhwBdBDcAYgQ3AGIHQwAbBiAAFQS/AFAEEABYBbQAsQSeAJwFtACxBJ4AnAWAAHYEkABbBXEAZwSLAFsFcQBnBIsAWwVkAJMETQBkBQcATQPJABYFBwBNA8kAFgUHAE0DyQAWBXoAlgRZAGcG6wCyBjYAnQUEADkD9wApBIMAXwWpAC8EoAAsBTgAHARaAG0FOAAcBFoAbQU4ABwEWgBtBTgAHARa/8oFOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FOAAcBFoAbQU4ABwEWgBtBIwAqQQ9AF0EjACpBD0AXQSMAKkEPQBdBIwAqQQ9AF0EjP/wBD3/ugSMAKkEPQBdBIwAqQQ9AF0EjACpBD0AXQItALcB+gCbAi0AowHxAIUFgAB2BJAAWwWAAHYEkABbBYAAdgSQAFsFgABHBJD/xAWAAHYEkABbBYAAdgSQAFsFgAB2BJAAWwV+AGUEkgBbBX4AZQSSAFsFfgBlBJIAWwV+AGUEkgBbBX4AZQSSAFsFMACMBGkAiAUwAIwEaQCIBZAAjATzAIgFkACMBPMAiAWQAIwE8wCIBZAAjATzAIgFkACMBPMAiATOAA8DyQAWBM4ADwPJABYEzgAPA8kAFgShAF8EoQBfBSQAsgRSAJwFtACpBJ0AnATGADED2AAoBQQAOQP3ACkFegCWBFkAZwV6AJYEWQBnBHMAsQNbAJoHQwAbBiAAFQYvAD8Evf/eBGgAjAUF/9QFBf/UBHMAAwNb//wFOAALBCf/0wW0ALEEngCcBbQAqQSdAJwG/ACpBe8AnQWpAC8EoAAsBM4ADwQCAC4FBAA5A/cAKQRQAGMEbAASBj8AkAR+AF0EfgBeBH4ANQR+AJoEkgBkBKYAhwVzAHoEfQBgBbQAqQRqAIwFOAAcBFoAOQSMAF8EPQApAi3/CgH6/vAFgAB2BJAAMwTtAFUCtf+LBTAAjARpACsEpv86BPsAqQR9AIwFPwCpBIMAXwU/AKkEgwBfBbQAqQRoAIwFBACpBA4AjQUEAKkEDgCNBE4AqQHxAIYG/ACpBwMAiwW0AKkEagCMBQwAqQR9AIwE7QCoArUAggS/AFAEIABfBMYAMQKdAAkFFwAcA+AAIQUXABwD4AAhBxkAPQYDACsEygBWA/cAWAXG/ngEhQATBCL/nwUf/7wCJP/ABMX/3wRn/1cE/P/4BIUAEwRQAIoD5gCKBCMARwTjAIoB6ACXBFQAigYCAIoEuwBgBFwAigQmACgEKwANBFQAJgHo/7QEKwANA+YAigOvAIoEIABDAegAlwHo/7QDzwArBFQAigQfACIEhQATBFAAigOvAIoD5gCKBOwAigYCAIoE4wCKBLsAYATOAIoEXACKBHwAYAQmACgEVAAmBD8ARwTjAIoEfABgBCsADQXDAAIE7ACKBB8AIgVnAGAFOAAcBFoAbQSMAKkEPQBdAAAAAQAABOQJCgQAAAICAgMGBQcGAgMDBAUCAgIEBQUFBQUFBQUFBQICBQUFBAgGBgYGBQUGBgIFBgUIBgYGBgYFBQYGCAYFBQIEAgQEAwUFBQUFAwUFAgIFAggFBQUFAwUDBQQHBAQEAwIDBgIFBQYFAgYEBwQEBQcEAwUDAwMFBAICAwQEBwcHBAgFBgUFCAUFBQUGAgUFAgYFCQgCBgMGBQYGAgUEBAQEAgMCBAMDAAAAAAACAgUCBQYGBgUGBQYGBgUFBQUFBQUFAwUEBQUFBQUFBgYHBQUHBwYKCgcGBgcIBQYGBgcHBggJBwgGBggGBQUEBQcFBQUFBwUFBAcFBQcHBgcFBQcFBQUICAUFCAcFCAcFBQgHCAcKCQUEBgUGBQYFCAcIBwYFBgAAAAAAAAUGBQUEBQUGBQcGCQYJCAcFCAYGBQYHBQYFBgUGBQUFBAYHCAcGBQUJBwkHBgUGBgYEBQkFCQMCAgUCAgEAAgIGBwQCAgICAwMDBQUDBAYBCQMDBAMEBQcHCggHBQcFBQYGBwQJBgYHCAgHBQYFBQUJAgUFBQUFAwMCBgUFCAgGBwAJCQUFAgIEBAQEBQQEBAIFBQUFBAQFBgIEBQQHBgUFBQUFBQUFBwUFBQMDAwMDAwMDAwMEAwUFBgYFBgUFBQUEBQUFBAUEBgYGBgUICAYFBQYHBQYFBQUGBQcIBgcFBQcFBQcFBgYGBQUHBQUGBQUFBQQJBQUFBQUEBQUFBQYGBgcHBAUEBQUDAwMDAwMDBQUHBQYCAgICAgIFAgIGBgUFAwYGBgYGBgYGBQUFBQICAgIGBgYGBgYGBgYGBQUFBQUFBQUFBQUFBQICAgIFBQUFBQUFBQUFBAQGBQYFBgUGBQYFBgUGBQYGBQUFBQUFBQUFBQYFBgUGBQYFBgUCAgICAgICAgIHBAUCBgUFAgUCBQMFAwYFBgUGBQUGBQYFBgUGAwYDBgMFBQUFBQUFBQUFBQMFAwUDBgUGBQYFBgUGBQYFCAcFBAUFBAUEBQQICAYFBQUFBQUF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sRCxUrG2sc2x5LH7shKyK7JEslCyXLJzsoqyobK6stGy6LL/sxizL7NGs12zdLOLs6Szu7PSs+m0ArQZtDC0R7RdtHO0jLSltLG0vbTUtOu1AbUatTC1RrVdtXa1jLWjtbq10LXmtf+2FrYttkO2XLZztou2ora4ts+25rdJt9+39rgNuCS4OrhRuGi4f7iVuKy43bj0uQq5Ibk4uU+5ZrnOulK6abp/upa6rLrDutq68bsIuxS7K7tCu1S7a7uCu5m7sLvHu9676bv0vAu8F7wjvDq8UbxdvGm8gLyXvKO8r7zEvPm9Bb0RvSi9P71LvVe9br2EvZS9q73Bvdi9774IviG+OL5Pvlu+Z75+vpS+q77Cvtm+7777vwe/E78fvza/TL9Yv2S/cL98v5O/n7+2v8y/47/5wBDAJ8BAwFnAcsCLwOjBTsFlwXzBk8GpwcLB2cHwwgfCHsI1wkvCYsJ5wpDCp8LKwvLDBcMcwzPDScNfw3jDkcOdw6nDwMPXw+3EBcQbxDHESMRhxHjEj8SmxL3E1MTtxQTFG8UxxUrFYcV3xY7F8cYIxh7GNcZMxmLGeMaOxqXHDsckxzrHUcdox3THi8eix7nH0Mfbx/HICMgUyCrINshLyFfIbsh6yJHIqMi/yNjI78j7yRHJKMk+yUrJYMlsyYLJjsmkybrJ0cnqygPKX8p2yozKpMq7ytLK6Mrzyv/LC8sXyyPLL8s7y1fLX8tny2/Ld8t/y4fLj8uXy5/Lp8uvy7fLv8vHy+DL+cwQzCfMPsxUzG/Md8x/zIfMj8yXzK/Mx8zezPXNDM0lzTzNp82vzcjN0M3Yze/OBs4OzhbOHs4mzj3ORc5NzlXOXc5lzm3Odc59zoXOjc6kzqzOtM8Hzw/PF88wz0fPT89Xz3DPeM+Pz6XPvM/Tz+rQAdAa0DPQStBh0GnQcdB90JTQnNCz0MrQ1tDi0PnRENEn0T7RRtFO0WfRgNGM0ZjRpNGw0bzRyNHQ0djR4NH30g7SFtIt0kTSW9J00nzShNKb0rLSy9LT0uzTBdMe0zfTT9Nm03zTldOu08fT4NPo0/DUCdQi1DvUU9Rq1IDUmdSx1MrU49T81RTVMdVO1VrVZtVu1XrVhtWS1Z7VtdXM1eXV/dYW1i7WR9Zf1njWkNar1sXW3tb31xDXKddC11vXdNeN16jXw9fP19vX8tgJ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AAUAJABIAAEA3gAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAkgCwALEAsgCzALQAtQC2ALcAuAC5ANEA0gDTANQA1QDWANcA2ADZANoA2wDcAN0A3gDfAOAA4QDiAOMA5ADlAOYA5wDoASwBMAEyATgBOgE8AT4BPwFFAUYBfwGFAYoBjQJHAkgCSgJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgKDAoUChwKJAosCjQKPApECkwKVApcCmQKbAp0CnwKhAqMCpQKnAqkCqwKtAq8CsgK0ArYCuAK6ArwCvgLAAsICxQLHAskCywLNAs8C0QLTAtUC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8QLyAvQC9gNTA1QDVQNWA1cDWANZA1sDXANdA14DXwNgA2EDYgNkA2UDZgNnA2gDaQNqA3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DuwO9A78D1APaA+AESQRLBE8EVwRZBF4EagACAAAABAAOD84V8jViAAEDVAAEAAABpQrSCtIGggtwCoAK/g+aDAAGiA7uDu4MRg6gCiIO7g7uD5oKigaSDGYMRgrYCqwNUg8QCl4L4gsQDBYGmA22DbYNtgwgCxAKUAxMDbAMTAsQBqYN5gtwD5oLcAasBrIGvAbCBsgMTAbOBtgNtgb+BxQHKgcwB0YHTAdSB4QHigeQDcANwAe+Du4H4AgCDVIIMA7uDu4LJg7uDu4IRg3ADcAIeAiCCIwIpg1ICLgNsAjSCOgLEAkyCUwJaAloCxAJYgloCWgJaAtwDCAK2AxMCxAN5g1IDqAOoA1ICtIK0grSCtIK0gmKCbAJugnECeIJ9AoGChgK/g+aD5oPmg+aDGYLcAtwC3ALcAtwC3ALcAr+DAAMAAwADAAO7g7uDu4O7g7uD5oPmg+aD5oPmgxGDEYMRgxGDxAL4gviC+IL4gviC+IL4gwWDBYMFgwWDbYMIAwgDCAMIAwgDEwMTAtwC+ILcAviC3AL4gr+Cv4K/gr+D5oMAAwWDAAMFgwADBYMAAwWDAAMFg7uDbYO7g7uDu4O7g7uDEYOoAoiCiIKIgoiDu4Ntg7uDbYO7g22DbYPmgwgD5oMIA+aDCAKUApQClAMZgxmDGYMRgxGDEYMRgxGDEYKrA8QDEwPEApeCl4KXgtwDAAO7g7uD5oPEAtwCoAMAApeDu4O7g6gDu4O7g+aCooMZg8QDVIO7g8QDbYMIAxMDCAMAA3mDu4O7gxGDqAOoAsmC3AKgA3mDAAO7g7uD5oKigr+DGYNUgviDBYMIAsQDEwNsAwWDUgMTAqsCqwKrA8QDEwK0grSCtIO7g22C3AL4gwADBYK2AxMCv4PEAxMDu4NUg2wDu4LcAviC3AL4gwADBYMFgwWDVINsA+aDCAMIAsQCyYMTAsmDEwLJgxMDVINsAtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gwADBYMAAwWDAAMFgwADBYMAAwWDAAMFgwADBYMAAwWDu4O7g+aDCAPmgwgD5oMIA+aDCAPmgwgD5oMIA+aDCAMIAxGDEYPEAxMDxAMTA8QDEwOoA7uDGYNUg2wDeYNSA1SDbANtg3ADeYOoA7uDu4PEA+aAAIAhwAGAAYAAAALAAsAAQATABMAAgAlACoAAwAsADUACQA4AD4AEwBFAEYAGgBJAEoAHABMAEwAHgBRAFQAHwBWAFYAIwBaAFoAJABcAF0AJQCKAIoAJwCcAJwAKACwALQAKQC2ALgALgC6ALoAMQC8AL0AMgC/AMAANADCAMQANgDGAMsAOQDRANEAPwDTAN0AQADfAN8ASwDhAOMATADlAOcATwDpAO0AUgDwAPAAVwD1APcAWAD6APsAWwD9AP8AXQEDAQQAYAEJAQkAYgEMAQwAYwEXARkAZAErAS0AZwEwATAAagEyATIAawFJAUkAbAFsAW0AbQFvAXEAbwG6AboAcgG9Ab0AcwHEAcUAdAHIAcgAdgHKAcsAdwHNAc0AeQIoAigAegIqAisAewJHAkgAfQJKAkoAfwJMAm0AgAJvAnIAogJ3AnwApgKBAokArAKLAosAtQKNAo0AtgKPAo8AtwKRApEAuAKTApwAuQKlAqcAwwKpAqkAxgKrAqsAxwKtAq0AyAKvAq8AyQKyArIAygK0ArQAywK2ArYAzAK4ArgAzQK6AroAzgK8ArwAzwK+AsoA0ALMAswA3QLOAs4A3gLQAtAA3wLbAtsA4ALdAt0A4QLfAt8A4gLhAuEA4wLjAuMA5ALlAuUA5QLnAucA5gLpAukA5wLrAusA6ALtAu0A6QLvAvIA6gL0AvQA7gL2AvYA7wNTA1gA8ANbA2oA9gNtA20BBgNxA3EBBwNzA3MBCAN3A3cBCQN6A3sBCgN9A4YBDAOIA4oBFgOMA5EBGQOTA5QBHwOWA5kBIQOfA6ABJQOiA6IBJwOkA6QBKAOmA6kBKQOsA7EBLQOzA7MBMwO3A7gBNAO9A70BNgO/A8gBNwPLA8wBQQPOA9EBQwPYA9kBRwPdA90BSQPfA+UBSgPqA+sBUQPvBBcBUwQZBBkBfAQbBCgBfQQwBDABiwQzBDMBjAQ1BDUBjQRBBEYBjgRJBEkBlARLBEsBlQRNBE0BlgRPBFABlwRVBFgBmQRbBFsBnQRdBF4BngRgBGABoARkBGQBoQRmBGYBogRqBGoBowSqBKoBpAABABP/IAACAFb/5gG6/8AAAQG6AA4AAwANABQAQQASAGEAEwABAPX/9QABAMMADQACALf/wgDDABAAAQDD/+IAAQDG//IAAQDDAA4AAgDJ/+0A9f/AAAkAvv/mAMH/6wDC/+kAxP/wAMX/5wDJ/+MAy//OAMz/1ADN/9sABQDB/+wAwwAPAMX/6gDJ/8QAy//nAAUASv/pAMH/7gDDABAAxf/sAMn/IAABAMMADwAFAMn/6gDs/+4A9f+rATP/7AFY/+wAAQD1/9UAAQDJAAsADABKAAwAxQALAMkADAG6/78BvP/uAcD/7AHI/+0Byv/sAcz/9QHNAA4BzwANAdIADQABAPX/2AABAPX/qgALAOX/1AD1/8kBCP/lAR//4wEz/8QBPP/hAU3/1AFO//UBT//nAVf/0gFY/8kACADl/8kA9f/fAQj/7QEf/+sBM//fAT//6QFO//UBWP/gAAgA5f/mAPX/0AEz/84BPP/oAU3/5wFP/+0BV//mAVj/0AALANgAFADl/+AA7AATATz/4QE9/+ABQP/hAUX/6QFN/98BT//eAVf/3wFZ//IABQAb//IA5f/xAU3/8gFP//IBV//yAAwA2AATAOX/5gDm//QA7AASAPX/5wEz/+cBPP/lAT3/6AFN/+YBT//mAVf/5gFY/+cAAgDY/+IBV//kAAIA2P/hAOz/5AAGAOz/7gD1/+4BCP/0AR//8QEz/+8BWP/vAAQA9f/0AQj/9QEz//UBWP/1AAYA7AAUAPX/7QD7/+IBM//tAT3/7QFY/+0ABQEb/+sBvP/rAcD/6QHI/+sByv/rABIASgANAMb/qwDH/8AAy//VAOz/qgEb/+IBHwAMAU4ACwFQAAsBuv+/Abz/7gHA/+wByP/tAcr/7AHM//UBzQAOAc8ADQHSAA0ABgDsABQA9f/wAQAADAEz//ABPf/mAVj/8AAFAOwAOgD1/+MBM//iAT3/4wFY/+MAAQDs/+8ACAD1/7oBCP/PAR//2wEz/1ABPf+dAU7/8AFQ//IBWP9MAAkBvP/yAcD/8gHI//IByv/yAc3/wAHO/+wBz//HAdD/2AHS/78AAgHP/+4B0P/1AAIByP/rAcr/6wAHAcj/7wHK//ABzf+7Ac7/7AHP/7cB0P/VAdL/tAAEAc3/7gHP//EB0f/sAdL/6gAEAc3/6QHP/+sB0P/xAdL/5QAEAc3/8gHP//EB0P/1AdL/7gACAc8ADQHSAA0ACwBb/6QBugATAbz/8wHA//EByP/yAcr/8QHN/zsBzv/aAc//VAHQ/5EB0v8/AAMASgAPAFgAMgBbABEACABb/+UAt//LAMz/5AG6AA0BvP/tAcD/6wHI/+wByv/sAAIBEAALAVf/5gAIAFgADgCB/58Aw//eAMb/5QDY/6gA7P/KAUr/4wG6/8YACQANAA8AQQAMAFb/6wBhAA4Buv/LAbz/6QHA/+cByP/nAcr/5wABAFsACwAJAA0AFABBABEAVv/iAGEAEwG6/7QBvP/ZAcD/2QHI/9kByv/ZAAQADf/mAEH/9ABh/+8BQP/tAAUAyf/qAOz/7gD1/7ABM//sAVj/7AASANj/rgDlABIA6v/gAOz/rQDu/9YA/P/fAQD/0gEG/+ABG//OASv/3QEt/+IBMf/gATf/4AE9/+kBQP/aAUr/vQFU/98BVwARABwAI//DAFj/7wBb/98Amf/uALf/5QC4/9EAwwARAMn/yADYABMA5f/FAPX/ygEz/58BPP9RAT3/ewE//8oBQP/dAUX/8gFN/3UBT//KAVf/TwFY/4wBwP/1Acj/9QHN/8cBzv/xAc//zQHQ/90B0v/EAAcA9f/wAQj/8QEf//MBM//xAU7/8wFQ/+kBWP/TAAUASv/uAFv/6gHP//AB0P/tAdL/8AACAPX/9QFt/7AACQDJ/+oA7P+4APX/6gEI//ABH//xATP/6wFO//UBWP/sAW3/sAABAbr/6wAGAEoADQDFAAsAxv/qAMkADADs/8gBG//xADgABP/YAFb/tQBb/8cAbf64AHz/KACB/00Ahv+OAIn/oQC3/64Avv9+AML/ZwDF/4cAxv9lAMn/ngDL/2oAzP9zAM3/XgDY/6UA5QAPAOn/5ADq/6AA7P90AO7/gAD1/7IA/P99AP7/gAEA/3kBBv99AQj/fwEb/5gBH//aASv/gQEt/5gBMf99ATP/swE3/6ABPf98AT//mgFA/2wBRf/mAUr/awFO/5IBUP+tAVT/ewFXAA8BWP+RAVn/8gG6/68BvP+5AcD/uQHI/7kByv+5Acz/vAHN//EB0P/xAdH/7QACAOz/yQEb/+4AFwC3/9QAwf/tAMMAEQDJ/+AAy//nAMz/5QDN/+4A2AASAOn/6QD1/9cBM//XAT3/0wE//9YBQP/FAUX/5wFNAA0BTwAMAVj/1gFZ//IBvP/pAcD/5wHI/+cByv/pAAEBG//xAAIA9f/AAW3/sAAJAOX/wwD1/88BM//OATz/5wE//98BTf/RAU//7AFX/6ABWP/RAC4AVv9tAFv/jABt/b8AfP59AIH+vACG/ysAif9LALf/YQC+/w8Awv7oAMX/HwDG/uUAyf9GAMv+7QDM/v0Azf7ZANj/UgDlAAUA6f+9AOr/SQDs/v4A7v8TAPX/aAD8/w4A/v8TAQD/BwEG/w4BCP8RARv/PAEf/6wBK/8VAS3/PAEx/w4BM/9qATf/SQE9/wwBP/8/AUD+8QFF/8ABSv7vAU7/MQFQ/18BVP8KAVcABQFY/zABWf/VABMAW//BALf/xQDJ/7QA6f/XAPX/uQEI/7IBG//SAR//yAEz/6ABPf/FAUX/5AFO/8wBUP/MAVj/ywFZ/+8BvP/oAcD/5gHI/+cByv/nAAgA2AAVAOwAFQE8/+QBPf/lAT//5AFN/+MBT//iAVf/5AAiAAr/4gANABQADv/PAEEAEgBK/+oAVv/YAFj/6gBhABMAbf+uAHz/zQCB/6AAhv/BAIn/wAC3/9AAu//qAL7/xgC/AA0Awf/pAML/1gDF/+gAxv+6AMn/6QDL/8sAzP/aAM3/xwF1/9MBuv+rAbz/zQHA/8sByP/LAcr/ywHN//MB0P/zAdH/7wAJAIH/3wC0//MAtv/wAMP/6gDY/98A5f/gAVf/4AG6/+0B0f/1AAEAGAAEAAAABwAqAFQAqgPcBFoExAUGAAEABwAEAAwAKgA1ADYAPwBKAAoAOP/YANH/2ADV/9gBMv/YATr/2ALb/9gC3f/YAt//2AOO/9gETf/YABUAOgAUADsAEgA9ABYBGAAUAmYAFgLtABIC7wAWAvEAFgNYABYDZwAWA2oAFgOgABIDogASA6QAEgOmABYDtwAUA78AFgRBABYEQwAWBEUAFgRqABYAzAAQ/xYAEv8WACX/VgAu/vgAOAAUAEX/3gBH/+sASP/rAEn/6wBL/+sAU//rAFX/6wBZ/+oAWv/oAF3/6ACT/+sAmP/rAJr/6gCx/1YAs/9WALr/6wC8/+gAx//rAMj/6wDK/+oA0QAUANUAFAD2/+sBAv/rAQz/VgEX/+sBGf/oAR3/6wEh/+sBMgAUATn/6wE6ABQBS//rAUz/6wFW/+sBbv8WAXL/FgF2/xYBd/8WAkz/VgJN/1YCTv9WAk//VgJQ/1YCUf9WAlL/VgJn/94CaP/eAmn/3gJq/94Ca//eAmz/3gJt/94Cbv/rAm//6wJw/+sCcf/rAnL/6wJ4/+sCef/rAnr/6wJ7/+sCfP/rAn3/6gJ+/+oCf//qAoD/6gKB/+gCgv/oAoP/VgKE/94Chf9WAob/3gKH/1YCiP/eAor/6wKM/+sCjv/rApD/6wKS/+sClP/rApb/6wKY/+sCmv/rApz/6wKe/+sCoP/rAqL/6wKk/+sCsv74Asb/6wLI/+sCyv/rAtsAFALdABQC3wAUAuL/6gLk/+oC5v/qAuj/6gLq/+oC7P/qAvD/6ANT/1YDW/9WA2v/6wNv/+oDcf/rA3P/6AN2/+oDd//rA3j/6gN//vgDg/9WA44AFAOQ/94Dkf/rA5P/6wOV/+sDlv/oA5j/6wOf/+gDp//oA6//VgOw/94Ds//rA7j/6AO5/+sDvv/rA8D/6APF/1YDxv/eA8f/VgPI/94DzP/rA87/6wPP/+sD2f/rA9v/6wPd/+sD4f/oA+P/6APl/+gD7P/rA+//VgPw/94D8f9WA/L/3gPz/1YD9P/eA/X/VgP2/94D9/9WA/j/3gP5/1YD+v/eA/v/VgP8/94D/f9WA/7/3gP//1YEAP/eBAH/VgQC/94EA/9WBAT/3gQF/1YEBv/eBAj/6wQK/+sEDP/rBA7/6wQQ/+sEEv/rBBT/6wQW/+sEHP/rBB7/6wQg/+sEIv/rBCT/6wQm/+sEKP/rBCr/6wQs/+sELv/rBDD/6wQy/+sENP/qBDb/6gQ4/+oEOv/qBDz/6gQ+/+oEQP/qBEL/6ARE/+gERv/oBE0AFAAfADj/1QA6/+QAO//sAD3/3QDR/9UA1f/VARj/5AEy/9UBOv/VAmb/3QLb/9UC3f/VAt//1QLt/+wC7//dAvH/3QNY/90DZ//dA2r/3QOO/9UDoP/sA6L/7AOk/+wDpv/dA7f/5AO//90EQf/dBEP/3QRF/90ETf/VBGr/3QAaADj/sAA6/+0APf/QANH/sADV/7ABGP/tATL/sAE6/7ACZv/QAtv/sALd/7AC3/+wAu//0ALx/9ADWP/QA2f/0ANq/9ADjv+wA6b/0AO3/+0Dv//QBEH/0ARD/9AERf/QBE3/sARq/9AAEAAu/+4AOf/uAmL/7gJj/+4CZP/uAmX/7gKy/+4C4f/uAuP/7gLl/+4C5//uAun/7gLr/+4Df//uBDP/7gQ1/+4ARwAGABAACwAQAEf/6ABI/+gASf/oAEv/6ABV/+gAk//oAJj/6AC6/+gAx//oAMj/6AD2/+gBAv/oAR3/6AEh/+gBOf/oAUv/6AFM/+gBVv/oAWwAEAFtABABbwAQAXAAEAFxABACbv/oAm//6AJw/+gCcf/oAnL/6AKK/+gCjP/oAo7/6AKQ/+gCkv/oApT/6AKW/+gCmP/oApr/6AKc/+gCnv/oAqD/6AKi/+gCpP/oA2v/6AOR/+gDlf/oA5j/6AOoABADqQAQA6wAEAOz/+gDuf/oA77/6APM/+gDzv/oA8//6APb/+gD7P/oBAj/6AQK/+gEDP/oBA7/6AQQ/+gEEv/oBBT/6AQW/+gEKv/oBCz/6AQu/+gEMv/oAAEAVgAEAAAAJgCmAZwB+gIUAlYCzAPCBLgFkgYsCMYKjAteDFQOGg5MDn4O/BDiEVgSKhRMFQIWaBciF6gYBhjIGT4ewBlQGqIc4B0CHhgelh7AHuoAAQAmAE8AWABbAF8AnAC0ALYAtwC4AL8AwgDDAMQAyQDLAMwAzQDRANUA1wDYANoA4gDmAOcA6ADpAOoA7ADuAPAA9QD3APoA/wECASEBbQA9AEf/7ABI/+wASf/sAEv/7ABV/+wAk//sAJj/7AC6/+wAx//sAMj/7AD2/+wBAv/sAR3/7AEh/+wBOf/sAUv/7AFM/+wBVv/sAm7/7AJv/+wCcP/sAnH/7AJy/+wCiv/sAoz/7AKO/+wCkP/sApL/7AKU/+wClv/sApj/7AKa/+wCnP/sAp7/7AKg/+wCov/sAqT/7ANr/+wDkf/sA5X/7AOY/+wDs//sA7n/7AO+/+wDzP/sA87/7APP/+wD2//sA+z/7AQI/+wECv/sBAz/7AQO/+wEEP/sBBL/7AQU/+wEFv/sBCr/7AQs/+wELv/sBDL/7AAXAFP/7AEX/+wCeP/sAnn/7AJ6/+wCe//sAnz/7ALG/+wCyP/sAsr/7ANx/+wDd//sA5P/7APZ/+wD3f/sBBz/7AQe/+wEIP/sBCL/7AQk/+wEJv/sBCj/7AQw/+wABgAQ/4QAEv+EAW7/hAFy/4QBdv+EAXf/hAAQAC7/7AA5/+wCYv/sAmP/7AJk/+wCZf/sArL/7ALh/+wC4//sAuX/7ALn/+wC6f/sAuv/7AN//+wEM//sBDX/7AAdAAb/8gAL//IAWv/zAF3/8wC8//MBGf/zAWz/8gFt//IBb//yAXD/8gFx//ICgf/zAoL/8wLw//MDc//zA5b/8wOf//MDp//zA6j/8gOp//IDrP/yA7j/8wPA//MD4f/zA+P/8wPl//MEQv/zBET/8wRG//MAPQAn//MAK//zADP/8wA1//MAg//zAJL/8wCX//MAsv/zANL/8wEH//MBFv/zARr/8wEc//MBHv/zASD/8wE4//MBVf/zAij/8wIp//MCK//zAiz/8wJT//MCXf/zAl7/8wJf//MCYP/zAmH/8wKJ//MCi//zAo3/8wKP//MCnf/zAp//8wKh//MCo//zAsX/8wLH//MCyf/zAvr/8wNX//MDZP/zA4r/8wON//MDuv/zA73/8wPY//MD2v/zA9z/8wQb//MEHf/zBB//8wQh//MEI//zBCX/8wQn//MEKf/zBCv/8wQt//MEL//zBDH/8wSq//MAPQAn/+YAK//mADP/5gA1/+YAg//mAJL/5gCX/+YAsv/mANL/5gEH/+YBFv/mARr/5gEc/+YBHv/mASD/5gE4/+YBVf/mAij/5gIp/+YCK//mAiz/5gJT/+YCXf/mAl7/5gJf/+YCYP/mAmH/5gKJ/+YCi//mAo3/5gKP/+YCnf/mAp//5gKh/+YCo//mAsX/5gLH/+YCyf/mAvr/5gNX/+YDZP/mA4r/5gON/+YDuv/mA73/5gPY/+YD2v/mA9z/5gQb/+YEHf/mBB//5gQh/+YEI//mBCX/5gQn/+YEKf/mBCv/5gQt/+YEL//mBDH/5gSq/+YANgAl/+QAPP/SAD3/0wCx/+QAs//kANn/0gEM/+QCTP/kAk3/5AJO/+QCT//kAlD/5AJR/+QCUv/kAmb/0wKD/+QChf/kAof/5ALv/9MC8f/TA1P/5ANY/9MDW//kA2f/0wNo/9IDav/TA4P/5AOP/9IDpv/TA6//5AO//9MDwv/SA8X/5APH/+QD0P/SA+r/0gPv/+QD8f/kA/P/5AP1/+QD9//kA/n/5AP7/+QD/f/kA///5AQB/+QEA//kBAX/5ARB/9MEQ//TBEX/0wRP/9IEV//SBGr/0wAmABD/HgAS/x4AJf/NALH/zQCz/80BDP/NAW7/HgFy/x4Bdv8eAXf/HgJM/80CTf/NAk7/zQJP/80CUP/NAlH/zQJS/80Cg//NAoX/zQKH/80DU//NA1v/zQOD/80Dr//NA8X/zQPH/80D7//NA/H/zQPz/80D9f/NA/f/zQP5/80D+//NA/3/zQP//80EAf/NBAP/zQQF/80ApgBH/9wASP/cAEn/3ABL/9wAUf/zAFL/8wBT/9YAVP/zAFX/3ABZ/90AWv/hAF3/4QCT/9wAmP/cAJr/3QC6/9wAvP/hAMD/8wDH/9wAyP/cAMr/3QDr//MA7//zAPD/8wDy//MA8//zAPT/8wD2/9wA9//zAPn/8wD6//MA/f/zAP//8wEC/9wBBP/zARf/1gEZ/+EBHf/cASH/3AE1//MBOf/cAUT/8wFJ//MBS//cAUz/3AFW/9wCbv/cAm//3AJw/9wCcf/cAnL/3AJ3//MCeP/WAnn/1gJ6/9YCe//WAnz/1gJ9/90Cfv/dAn//3QKA/90Cgf/hAoL/4QKK/9wCjP/cAo7/3AKQ/9wCkv/cApT/3AKW/9wCmP/cApr/3AKc/9wCnv/cAqD/3AKi/9wCpP/cAr//8wLB//MCw//zAsT/8wLG/9YCyP/WAsr/1gLi/90C5P/dAub/3QLo/90C6v/dAuz/3QLw/+EDa//cA23/8wNv/90Dcf/WA3P/4QN2/90Dd//WA3j/3QOR/9wDkv/zA5P/1gOU//MDlf/cA5b/4QOY/9wDmf/zA57/8wOf/+EDp//hA67/8wOz/9wDtP/zA7j/4QO5/9wDvv/cA8D/4QPM/9wDzv/cA8//3APV//MD1//zA9n/1gPb/9wD3f/WA+H/4QPj/+ED5f/hA+n/8wPs/9wECP/cBAr/3AQM/9wEDv/cBBD/3AQS/9wEFP/cBBb/3AQc/9YEHv/WBCD/1gQi/9YEJP/WBCb/1gQo/9YEKv/cBCz/3AQu/9wEMP/WBDL/3AQ0/90ENv/dBDj/3QQ6/90EPP/dBD7/3QRA/90EQv/hBET/4QRG/+EESv/zBEz/8wRW//MEY//zBGX/8wRn//MAcQAG/9oAC//aAEf/8ABI//AASf/wAEv/8ABV//AAWf/vAFr/3ABd/9wAk//wAJj/8ACa/+8Auv/wALz/3ADH//AAyP/wAMr/7wD2//ABAv/wARn/3AEd//ABIf/wATn/8AFL//ABTP/wAVb/8AFs/9oBbf/aAW//2gFw/9oBcf/aAm7/8AJv//ACcP/wAnH/8AJy//ACff/vAn7/7wJ//+8CgP/vAoH/3AKC/9wCiv/wAoz/8AKO//ACkP/wApL/8AKU//AClv/wApj/8AKa//ACnP/wAp7/8AKg//ACov/wAqT/8ALi/+8C5P/vAub/7wLo/+8C6v/vAuz/7wLw/9wDa//wA2//7wNz/9wDdv/vA3j/7wOR//ADlf/wA5b/3AOY//ADn//cA6f/3AOo/9oDqf/aA6z/2gOz//ADuP/cA7n/8AO+//ADwP/cA8z/8APO//ADz//wA9v/8APh/9wD4//cA+X/3APs//AECP/wBAr/8AQM//AEDv/wBBD/8AQS//AEFP/wBBb/8AQq//AELP/wBC7/8AQy//AENP/vBDb/7wQ4/+8EOv/vBDz/7wQ+/+8EQP/vBEL/3ARE/9wERv/cADQABv+gAAv/oABZ//EAWv/FAF3/xQCa//EAvP/FAMr/8QEZ/8UBbP+gAW3/oAFv/6ABcP+gAXH/oAJ9//ECfv/xAn//8QKA//ECgf/FAoL/xQLi//EC5P/xAub/8QLo//EC6v/xAuz/8QLw/8UDb//xA3P/xQN2//EDeP/xA5b/xQOf/8UDp//FA6j/oAOp/6ADrP+gA7j/xQPA/8UD4f/FA+P/xQPl/8UENP/xBDb/8QQ4//EEOv/xBDz/8QQ+//EEQP/xBEL/xQRE/8UERv/FAD0AR//nAEj/5wBJ/+cAS//nAFX/5wCT/+cAmP/nALr/5wDH/+cAyP/nAPb/5wEC/+cBHf/nASH/5wE5/+cBS//nAUz/5wFW/+cCbv/nAm//5wJw/+cCcf/nAnL/5wKK/+cCjP/nAo7/5wKQ/+cCkv/nApT/5wKW/+cCmP/nApr/5wKc/+cCnv/nAqD/5wKi/+cCpP/nA2v/5wOR/+cDlf/nA5j/5wOz/+cDuf/nA77/5wPM/+cDzv/nA8//5wPb/+cD7P/nBAj/5wQK/+cEDP/nBA7/5wQQ/+cEEv/nBBT/5wQW/+cEKv/nBCz/5wQu/+cEMv/nAHEABgAMAAsADABH/+gASP/oAEn/6ABL/+gAU//qAFX/6ABaAAsAXQALAJP/6ACY/+gAuv/oALwACwDH/+gAyP/oAPb/6AEC/+gBF//qARkACwEd/+gBIf/oATn/6AFL/+gBTP/oAVb/6AFsAAwBbQAMAW8ADAFwAAwBcQAMAm7/6AJv/+gCcP/oAnH/6AJy/+gCeP/qAnn/6gJ6/+oCe//qAnz/6gKBAAsCggALAor/6AKM/+gCjv/oApD/6AKS/+gClP/oApb/6AKY/+gCmv/oApz/6AKe/+gCoP/oAqL/6AKk/+gCxv/qAsj/6gLK/+oC8AALA2v/6ANx/+oDcwALA3f/6gOR/+gDk//qA5X/6AOWAAsDmP/oA58ACwOnAAsDqAAMA6kADAOsAAwDs//oA7gACwO5/+gDvv/oA8AACwPM/+gDzv/oA8//6APZ/+oD2//oA93/6gPhAAsD4wALA+UACwPs/+gECP/oBAr/6AQM/+gEDv/oBBD/6AQS/+gEFP/oBBb/6AQc/+oEHv/qBCD/6gQi/+oEJP/qBCb/6gQo/+oEKv/oBCz/6AQu/+gEMP/qBDL/6ARCAAsERAALBEYACwAMAFz/7QBe/+0A7f/tAvP/7QL1/+0C9//tA5f/7QPD/+0D0f/tA+v/7QRQ/+0EWP/tAAwAXP/yAF7/8gDt//IC8//yAvX/8gL3//IDl//yA8P/8gPR//ID6//yBFD/8gRY//IAHwBa//QAXP/yAF3/9ABe//MAvP/0AO3/8gEZ//QCgf/0AoL/9ALw//QC8//zAvX/8wL3//MDc//0A5b/9AOX//IDn//0A6f/9AO4//QDwP/0A8P/8gPR//ID4f/0A+P/9APl//QD6//yBEL/9ARE//QERv/0BFD/8gRY//IAeQAG/8oAC//KADj/0gA6/9QAPP/0AD3/0wBR/9EAUv/RAFT/0QBa/+YAXP/vAF3/5gC8/+YAwP/RANH/0gDV/9IA2f/0AN3/7QDg/+EA6//RAO3/7wDv/9EA8P/RAPL/0QDz/9EA9P/RAPf/0QD5/9EA+v/RAP3/0QD//9EBBP/RARj/1AEZ/+YBMv/SATX/0QE6/9IBRP/RAUn/0QFs/8oBbf/KAW//ygFw/8oBcf/KAmb/0wJ3/9ECgf/mAoL/5gK//9ECwf/RAsP/0QLE/9EC2//SAt3/0gLf/9IC7//TAvD/5gLx/9MDWP/TA2f/0wNo//QDav/TA23/0QNz/+YDgv/tA47/0gOP//QDkv/RA5T/0QOW/+YDl//vA5n/0QOe/9EDn//mA6b/0wOn/+YDqP/KA6n/ygOs/8oDrv/RA7T/0QO3/9QDuP/mA7//0wPA/+YDwv/0A8P/7wPQ//QD0f/vA9X/0QPX/9ED4P/tA+H/5gPi/+0D4//mA+T/7QPl/+YD5v/hA+n/0QPq//QD6//vBEH/0wRC/+YEQ//TBET/5gRF/9MERv/mBEr/0QRM/9EETf/SBE//9ARQ/+8EUf/hBFP/4QRW/9EEV//0BFj/7wRj/9EEZf/RBGf/0QRq/9MAHQA4/74AWv/vAF3/7wC8/+8A0f++ANX/vgEZ/+8BMv++ATr/vgKB/+8Cgv/vAtv/vgLd/74C3/++AvD/7wNz/+8Djv++A5b/7wOf/+8Dp//vA7j/7wPA/+8D4f/vA+P/7wPl/+8EQv/vBET/7wRG/+8ETf++ADQAOP/mADr/5wA8//IAPf/nAFz/8QDR/+YA1f/mANn/8gDd/+4A4P/oAO3/8QEY/+cBMv/mATr/5gJm/+cC2//mAt3/5gLf/+YC7//nAvH/5wNY/+cDZ//nA2j/8gNq/+cDgv/uA47/5gOP//IDl//xA6b/5wO3/+cDv//nA8L/8gPD//ED0P/yA9H/8QPg/+4D4v/uA+T/7gPm/+gD6v/yA+v/8QRB/+cEQ//nBEX/5wRN/+YET//yBFD/8QRR/+gEU//oBFf/8gRY//EEav/nAIgAJQAQACf/6AAr/+gAM//oADX/6AA4/+AAOv/gAD3/3wCD/+gAkv/oAJf/6ACxABAAsv/oALMAEADR/+AA0v/oANMAEADV/+AA3AAQAOD/4QDxABAA+P/gAQMAEAEH/+gBDAAQARb/6AEY/+ABGv/oARz/6AEe/+gBIP/oATL/4AE4/+gBOv/gAVEAEAFV/+gCKP/oAin/6AIr/+gCLP/oAkwAEAJNABACTgAQAk8AEAJQABACUQAQAlIAEAJT/+gCXf/oAl7/6AJf/+gCYP/oAmH/6AJm/98CgwAQAoUAEAKHABACif/oAov/6AKN/+gCj//oAp3/6AKf/+gCof/oAqP/6ALF/+gCx//oAsn/6ALb/+AC3f/gAt//4ALv/98C8f/fAvr/6ANTABADV//oA1j/3wNbABADZP/oA2f/3wNq/98DgwAQA4r/6AON/+gDjv/gA6b/3wOvABADt//gA7r/6AO9/+gDv//fA8UAEAPHABAD2P/oA9r/6APc/+gD5v/hA+f/4APtABAD7gAQA+8AEAPxABAD8wAQA/UAEAP3ABAD+QAQA/sAEAP9ABAD/wAQBAEAEAQDABAEBQAQBBv/6AQd/+gEH//oBCH/6AQj/+gEJf/oBCf/6AQp/+gEK//oBC3/6AQv/+gEMf/oBEH/3wRD/98ERf/fBE3/4ARR/+EEUv/gBFP/4QRU/+AEaAAQBGkAEARq/98Eqv/oAC0AOP/xADr/9AA8//QAPf/wANH/8QDT//UA1f/xANn/9ADc//UA3f/zARj/9AEy//EBOv/xAVH/9QJm//AC2//xAt3/8QLf//EC7//wAvH/8ANY//ADZ//wA2j/9ANq//ADgv/zA47/8QOP//QDpv/wA7f/9AO///ADwv/0A9D/9APg//MD4v/zA+T/8wPq//QD7f/1BEH/8ARD//AERf/wBE3/8QRP//QEV//0BGj/9QRq//AAWQAlAA8AOP/mADr/5gA8AA4APf/mALEADwCzAA8A0f/mANMADgDV/+YA2QAOANwADgDdAAsA4P/lAPEADwD4/+gBAwAPAQwADwEY/+YBMv/mATr/5gFRAA4CTAAPAk0ADwJOAA8CTwAPAlAADwJRAA8CUgAPAmb/5gKDAA8ChQAPAocADwLb/+YC3f/mAt//5gLv/+YC8f/mA1MADwNY/+YDWwAPA2f/5gNoAA4Dav/mA4IACwODAA8Djv/mA48ADgOm/+YDrwAPA7f/5gO//+YDwgAOA8UADwPHAA8D0AAOA+AACwPiAAsD5AALA+b/5QPn/+gD6gAO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ABADogOiABADpAOkABADpgOmAA8DpwOnABkDqAOpAB0DrAOsAB0DrQOtAAIDrgOuABcDsAOwABMDsQOxAAUDswOzABYDtwO3AA0DuAO4ABkDvQO9AAQDvgO+ABQDvwO/AA8DwAPAABkDwQPBAAIDwgPCAA4DwwPDABsDxAPEAAIDxgPGABMDyAPIABMDywPLAAUDzAPMABYDzgPPABYD0APQAA4D0QPRABsD2APYAAMD2QPZABgD3QPdABgD3wPfABUD4APgABID4QPhABkD4gPiABID4wPjABkD5APkABID5QPlABkD6gPqAA4D6wPrABsD8APwABMD8gPyABMD9AP0ABMD9gP2ABMD+AP4ABMD+gP6ABMD/AP8ABMD/gP+ABMEAAQAABMEAgQCABMEBAQEABMEBgQGABMEBwQHAAUECAQIABYECQQJAAUECgQKABYECwQLAAUEDAQMABYEDQQNAAUEDgQOABYEDwQPAAUEEAQQABYEEQQRAAUEEgQSABYEEwQTAAUEFAQUABYEFQQVAAUEFgQWABYEFwQXAAIEGQQZAAIEGwQbAAMEHAQcABgEHQQdAAMEHgQeABgEHwQfAAMEIAQgABgEIQQhAAMEIgQiABgEIwQjAAMEJAQkABgEJQQlAAMEJgQmABgEJwQnAAMEKAQoABgEMAQwABgEMwQzAAwENQQ1AAwEQQRBAA8EQgRCABkEQwRDAA8ERAREABkERQRFAA8ERgRGABkESQRJAAkESwRLAAIETQRNAAYETwRPAA4EUARQABsEVQRVAAcEVgRWAAgEVwRXAA4EWARYABsEWwRbABcEXQRdAB8EXgReAAcEYARgAAkEZARkAAIEZgRmAAIEagRqAA8EqgSqAAMAAgFtAAYABgAHAAsACwAHABAAEAATABEAEQAXABIAEgATACUAJQARACcAJwAFACsAKwAFAC4ALgAcADMAMwAFADUANQAFADcANwAZADgAOAAKADkAOQAGADoAOgANADsAOwAJADwAPAASAD0APQAOAD4APgAUAEUARQAaAEcASQAVAEsASwAVAFEAUgAYAFMAUwAIAFQAVAAYAFUAVQAVAFcAVwAbAFkAWQALAFoAWgACAFwAXAAWAF0AXQACAF4AXgAMAIMAgwAFAJIAkgAFAJMAkwAVAJcAlwAFAJgAmAAVAJoAmgALALEAsQAR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b20EbGRub20EbGRub20EbGZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmxpZ2EEfGxpZ2EEhGxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxvY2wEkGxvY2wElmxvY2wEnG51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqHBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5AAAAAEAAAAAAAIAAgADAAAAAQAHAAAAAQAYAAAAAwAVABYAFwAAAAIACAAJAAAAAQAJAAAAAQAUAAAAAQAEAAAAAQAGAAAAAQAFAAAAAQAZAAAAAQARAAAAAQATAAAAAQABAAAAAQAKAAAAAQALAAAAAQAMAAAAAQANAAAAAQAOAAAAAQAPAAAAAQAQAAAAAQASABsAOAPGBrQHYA3wDfAOBg4oDl4OhA6yDsYO2g7uDwAPGg9cD3oPmA/KD/wQLhBCEHoQbBB6EKYAAQAAAAEACAACAcQA3wHnAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHoAekCRAI7AeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AgACAQTdAgICAwIEAgUCBgIHAggCCQIKAgsCLwIPAhACEQIUAhUCFgIXAhgCGQIbAhwCHgIdAvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSBKsErAStBK4ErwSwBLEEsgSzBLQEtQS2BLcEuAS5BLoEuwS8BL0EvgS/BMAEwQTCBMMExATFBMYB/wTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNgE2QTbAhoE3AIOBNcCEwINBNoCDAISAAEA3wAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAhQCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkcCSAJKAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAoMChQKHAokCiwKNAo8CkQKTApUClwKZApsCnQKfAqECowKlAqcCqQKrAq0CrwKyArQCtgK4AroCvAK+AsACwgLFAscCyQLLAs0CzwLRAtMC1QLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvIC9AL2A1MDVANVA1YDVwNYA1kDWwNcA10DXgNfA2ADYQNiA2QDZQNmA2cDaANpA2oDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwO7A70DvwPUA9oD4ARJBEsETwRXBFkEXgRqAAEAAAABAAgAAgF0ALcBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAv0DMAI7AfoEygTLAfsB/AH9Af4B/wIABM4EzwTRBNQE3QICAgMCBAIFAgYCBwIIAgkCCgILAfQB9QH2AfcB+AH5Ai8CDwIQAhECFAIVAhcCGQL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZA08DGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNQA1EDUgTJBMwEzQTQBNIE0wIBBNUEwQTCBMMExATFBMYExwTIBNYE2ATZAhgE2wIaBNwC/AIOBNcCEwINBNoCFgIMAhIAAQC3AEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCHAIwAkwDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEtATEBMwE5ATsBPQFAAUcCSwJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoQChgKIAooCjAKOApACkgKUApYCmAKaApwCngKgAqICpAKmAqgCqgKsAq4CswK1ArcCuQK7Ar0CvwLBAsMCxgLIAsoCzALOAtAC0gLUAtYC2gLcAt4C4ALiAuQC5gLoAuoC7ALuAvAC8wL1AvcDkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwO8A74DwAPOA9UD2wPhBEcESgRMBFAEWARaBFsEXwRrAAYAAAAGABIAKgBCAFoAcgCKAAMAAAABABIAAQCQAAEAAAAaAAEAAQBNAAMAAAABABIAAQB4AAEAAAAaAAEAAQBOAAMAAAABABIAAQBgAAEAAAAaAAEAAQKuAAMAAAABABIAAQBIAAEAAAAaAAEAAQObAAMAAAABABIAAQAwAAEAAAAaAAEAAQOdAAMAAAABABIAAQAYAAEAAAAaAAEAAQQaAAIAAQCnAKsAAAAEAAAAAQAIAAEGHgA2AHIApACuALgAygD8AQ4BGAFKAWQBfgGQAboB7AH2AhgCMgJEAnYCiAKiAswC3gMQAxoDJAM2A2gDcgN8A4YDoAO6A8wD9gQoBDIEVARuBIAEsgTEBN4FCAUaBSQFLgU4BUIFbAWWBcAF6gYUAAYADgAUABoAIAAmACwCTAACAKcCTQACAKgCTwACAKkD8QACAKoEewACAKsD7wACAKwAAQAEBIgAAgCsAAEABAKJAAIAqAACAAYADASKAAIArASMAAIBogAGAA4AFAAaACAAJgAsAlQAAgCnAlUAAgCoBAsAAgCpBAkAAgCqBH0AAgCrBAcAAgCsAAIABgAMBHcAAgCoAqMAAgGiAAEABASOAAIArAAGAA4AFAAaACAAJgAsAlgAAgCnAlkAAgCoAqcAAgCpBBcAAgCqBH8AAgCrBBkAAgCsAAMACAAOABQEkAACAKgEkgACAKwCtAACAaIAAwAIAA4AFAK2AAIAqASUAAIArAK4AAIBogACAAYADAOtAAIAqASWAAIArAAFAAwAEgAYAB4AJAR5AAIApwK+AAIAqAJcAAIAqQSYAAIArALAAAIBogAGAA4AFAAaACAAJgAsAl0AAgCnAl4AAgCoAmAAAgCpBB0AAgCqBIEAAgCrBBsAAgCsAAEABASaAAIAqAAEAAoAEAAWABwCywACAKgEgwACAKsEnAACAKwCzQACAaIAAwAIAA4AFALRAAIAqASeAAIArALXAAIBogACAAYADASgAAIArALbAAIBogAGAA4AFAAaACAAJgAsAmIAAgCnAmMAAgCoAuEAAgCpBDUAAgCqBIUAAgCrBDMAAgCsAAIABgAMBKIAAgCpBKQAAgCsAAMACAAOABQDoAACAKcDogACAKgEpgACAKwABQAMABIAGAAeACQDpgACAKcCZgACAKgERQACAKkEQwACAKoEQQACAKwAAgAGAAwC8gACAKgEqAACAKwABgAOABQAGgAgACYALAJnAAIApwJoAAIAqAJqAAIAqQPyAAIAqgR8AAIAqwPwAAIArAABAAQEiQACAKwAAQAEAooAAgCoAAIABgAMBIsAAgCsBI0AAgGiAAYADgAUABoAIAAmACwCbwACAKcCcAACAKgEDAACAKkECgACAKoEfgACAKsECAACAKwAAQAEBHgAAgCoAAEABASPAAIArAABAAQEGgACAKwAAwAIAA4AFASRAAIAqASTAAIArAK1AAIBogADAAgADgAUArcAAgCoBJUAAgCsArkAAgGiAAIABgAMA64AAgCoBJcAAgCsAAUADAASABgAHgAkBHoAAgCnAr8AAgCoAncAAgCpBJkAAgCsAsEAAgGiAAYADgAUABoAIAAmACwCeAACAKcCeQACAKgCewACAKkEHgACAKoEggACAKsEHAACAKwAAQAEBJsAAgCoAAQACgAQABYAHALMAAIAqASEAAIAqwSdAAIArALOAAIBogADAAgADgAUAtIAAgCoBJ8AAgCsAtgAAgGiAAIABgAMBKEAAgCsAtwAAgGiAAYADgAUABoAIAAmACwCfQACAKcCfgACAKgC4gACAKkENgACAKoEhgACAKsENAACAKwAAgAGAAwEowACAKkEpQACAKwAAwAIAA4AFAOhAAIApwOjAAIAqASnAAIArAAFAAwAEgAYAB4AJAOnAAIApwKBAAIAqARGAAIAqQREAAIAqgRCAAIArAACAAYADALzAAIAqASpAAIArAABAAQC+AACAKgAAQAEAvoAAgCoAAEABAL5AAIAqAABAAQC+wACAKgABQAMABIAGAAeACQCcwACAKcCdAACAKgCqAACAKkEGAACAKoEgAACAKsABQAMABIAGAAeACQEKwACAKcEKQACAKgELwACAKkELQACAKoEMQACAKwABQAMABIAGAAeACQELAACAKcEKgACAKgEMAACAKkELgACAKoEMgACAKwABQAMABIAGAAeACQEOQACAKcENwACAKgEPQACAKkEOwACAKoEPwACAKwABQAMABIAGAAeACQEOgACAKcEOAACAKgEPgACAKkEPAACAKoEQAACAKwAAQAEBIcAAgCoAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCMAIwAMACXAJoAMQDPAM8ANQABAAAAAQAIAAEABgACAAEAAgLVAtYAAQAAAAEACAACAA4ABATeBN8E4AThAAEABAKHAogCmQKaAAQAAAABAAgAAQAmAAIACgAcAAIABgAMAaMAAgBKAagAAgBYAAEABAGpAAIAWAABAAIASgBXAAQAAAABAAgAAQBEAAIACgAUAAEABAGkAAIATQABAAQBpgACAE0ABAAAAAEACAABAB4AAgAKABQAAQAEAaUAAgBQAAEABAGnAAIAUAABAAIASgGjAAEAAAABAAgAAQAGAZUAAQABAEsAAQAAAAEACAABAAYBJwABAAEAugABAAAAAQAIAAEABgGsAAEAAQA2AAEAAAABAAgAAgAcAAIB4wHkAAEAAAABAAgAAgAKAAIB5QHmAAEAAgAvAE8AAQAAAAEACAACAB4ADAIoAioCKQIrAiwCHwIgAiECIgGuAiQCJQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAQAAAAEACAACAAwAAwImAicCJwABAAMASQBLAiIAAQAAAAEACAACAGYACAI9Ai0CLgIwAjECOQI6AjwAAQAAAAEACAACABYACAAbABUAFgAXABgAGQAdABQAAQAIAa0CIwRxBHIEcwR0BHUEdgABAAAAAQAIAAIAFgAIBHYCIwRxBHIEcwR0Aa0EdQABAAgAFAAVABYAFwAYABkAGwAdAAEAAAABAAgAAgAWAAgAFQAWABcAGAAZABsAHQAUAAEACAItAi4CMAIxAjkCOgI8Aj0AAQAAAAEACAABAAYBaQABAAEAEwAGAAAAAQAIAAMAAQASAAEAUgAAAAEAAAAaAAIAAgF8AXwAAAHUAd0AAQABAAAAAQAIAAEAKAHAAAEAAAABAAgAAgAaAAoCMgB6AHMAdAIzAjQCNQI2AjcCOAACAAEAFAAdAAAAAQAAAAEACAACACYAEAHUAdUB1gHXAdgB2QHaAdsB3AHdAkACPgJBAkICPwJDAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgKuA5sDnQQa"}},777:function(A){var t;"undefined"!=typeof self&&self,t=function(){return function(){var A={41783:function(A,t){"use strict";t.OP=0,t.CL=1,t.CP=2,t.QU=3,t.GL=4,t.NS=5,t.EX=6,t.SY=7,t.IS=8,t.PR=9,t.PO=10,t.NU=11,t.AL=12,t.HL=13,t.ID=14,t.IN=15,t.HY=16,t.BA=17,t.BB=18,t.B2=19,t.ZW=20,t.CM=21,t.WJ=22,t.H2=23,t.H3=24,t.JL=25,t.JV=26,t.JT=27,t.RI=28,t.EB=29,t.EM=30,t.ZWJ=31,t.CB=32,t.AI=33,t.BK=34,t.CJ=35,t.CR=36,t.LF=37,t.NL=38,t.SA=39,t.SG=40,t.SP=41,t.XX=42},98282:function(A,t){"use strict";t.DI_BRK=0,t.IN_BRK=1,t.CI_BRK=2,t.CP_BRK=3,t.PR_BRK=4,t.pairTable=[[4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4],[0,4,4,1,1,4,4,4,4,1,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,4,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[4,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,1],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,1],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,1,0,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,0,0,1,1,1,1,1,1,1,0,0,4,2,4,1,1,1,1,1,0,1,1,1,0],[1,4,4,1,1,1,4,4,4,0,0,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,0,1,4,4,4,0,0,1,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,0,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,4,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,1,1,1,1,1,1,4,2,4,1,1,1,1,1,1,1,1,1,1],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,1,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,1,1,1,1,0,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,1,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,1,0,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,0,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,1,0,0,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,1,1,0],[0,4,4,1,1,1,4,4,4,0,1,0,0,0,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[1,4,4,1,1,1,4,4,4,1,1,1,1,1,0,1,1,1,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0],[0,4,4,1,1,0,4,4,4,0,0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,0,0,0,0,0,0,1,0]]},57013:function(A,t,e){"use strict";e(18756),t.EncodeStream=e(16176),t.DecodeStream=e(78984),t.Array=e(38637),t.LazyArray=e(88687),t.Bitfield=e(72959),t.Boolean=e(64888),t.Buffer=e(77324),t.Enum=e(71499),t.Optional=e(72526),t.Reserved=e(10298),t.String=e(36291),t.Struct=e(2731),t.VersionedStruct=e(48084);var s=e(76949),i=e(63787),n=e(41545);Object.assign(t,s,i,n)},38637:function(A,t,e){"use strict";function s(A,t){var e="undefined"!=typeof Symbol&&A[Symbol.iterator]||A["@@iterator"];if(e)return(e=e.call(A)).next.bind(e);if(Array.isArray(A)||(e=function(A,t){if(A){if("string"==typeof A)return i(A,t);var e=Object.prototype.toString.call(A).slice(8,-1);return"Object"===e&&A.constructor&&(e=A.constructor.name),"Map"===e||"Set"===e?Array.from(A):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?i(A,t):void 0}}(A))||t&&A&&"number"==typeof A.length){e&&(A=e);var s=0;return function(){return s>=A.length?{done:!0}:{done:!1,value:A[s++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function i(A,t){(null==t||t>A.length)&&(t=A.length);for(var e=0,s=new Array(t);ethis.buffer.length)return this.flush()},B.flush=function(){if(this.bufferOffset>0)return this.push(i.from(this.buffer.slice(0,this.bufferOffset))),this.bufferOffset=0},B.writeBuffer=function(A){return this.flush(),this.push(A),this.pos+=A.length},B.writeString=function(A,t){switch(void 0===t&&(t="ascii"),t){case"utf16le":case"ucs2":case"utf8":case"ascii":return this.writeBuffer(i.from(A,t));case"utf16be":for(var e=i.from(A,"utf16le"),n=0,r=e.length-1;n>>16&255,this.buffer[this.bufferOffset++]=A>>>8&255,this.buffer[this.bufferOffset++]=255&A,this.pos+=3},B.writeUInt24LE=function(A){return this.ensure(3),this.buffer[this.bufferOffset++]=255&A,this.buffer[this.bufferOffset++]=A>>>8&255,this.buffer[this.bufferOffset++]=A>>>16&255,this.pos+=3},B.writeInt24BE=function(A){return A>=0?this.writeUInt24BE(A):this.writeUInt24BE(A+16777215+1)},B.writeInt24LE=function(A){return A>=0?this.writeUInt24LE(A):this.writeUInt24LE(A+16777215+1)},B.fill=function(A,t){if(t=this.length)){if(null==this.items[A]){var t=this.stream.pos;this.stream.pos=this.base+this.type.size(null,this.ctx)*A,this.items[A]=this.type.decode(this.stream,this.ctx),this.stream.pos=t}return this.items[A]}},t.toArray=function(){for(var A=[],t=0,e=this.length;t>1),(i=A.call(this,"Int"+t,e)||this)._point=1<w)throw new RangeError('The value "'+A+'" is invalid for option "size"');var t=new Uint8Array(A);return Object.setPrototypeOf(t,a.prototype),t}function a(A,t,e){if("number"==typeof A){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return C(A)}return c(A,t,e)}function c(A,t,e){if("string"==typeof A)return function(A,t){if("string"==typeof t&&""!==t||(t="utf8"),!a.isEncoding(t))throw new TypeError("Unknown encoding: "+t);var e=0|I(A,t),s=g(e),i=s.write(A,t);return i!==e&&(s=s.slice(0,i)),s}(A,t);if(ArrayBuffer.isView(A))return function(A){if($(A,Uint8Array)){var t=new Uint8Array(A);return u(t.buffer,t.byteOffset,t.byteLength)}return h(A)}(A);if(null==A)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A);if($(A,ArrayBuffer)||A&&$(A.buffer,ArrayBuffer))return u(A,t,e);if("undefined"!=typeof SharedArrayBuffer&&($(A,SharedArrayBuffer)||A&&$(A.buffer,SharedArrayBuffer)))return u(A,t,e);if("number"==typeof A)throw new TypeError('The "value" argument must not be of type number. Received type number');var s=A.valueOf&&A.valueOf();if(null!=s&&s!==A)return a.from(s,t,e);var i=function(A){if(a.isBuffer(A)){var t=0|l(A.length),e=g(t);return 0===e.length||A.copy(e,0,0,t),e}return void 0!==A.length?"number"!=typeof A.length||AA(A.length)?g(0):h(A):"Buffer"===A.type&&Array.isArray(A.data)?h(A.data):void 0}(A);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof A[Symbol.toPrimitive])return a.from(A[Symbol.toPrimitive]("string"),t,e);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof A)}function Q(A){if("number"!=typeof A)throw new TypeError('"size" argument must be of type number');if(A<0)throw new RangeError('The value "'+A+'" is invalid for option "size"')}function C(A){return Q(A),g(A<0?0:0|l(A))}function h(A){for(var t=A.length<0?0:0|l(A.length),e=g(t),s=0;s=w)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+w.toString(16)+" bytes");return 0|A}function I(A,t){if(a.isBuffer(A))return A.length;if(ArrayBuffer.isView(A)||$(A,ArrayBuffer))return A.byteLength;if("string"!=typeof A)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof A);var e=A.length,s=arguments.length>2&&!0===arguments[2];if(!s&&0===e)return 0;for(var i=!1;;)switch(t){case"ascii":case"latin1":case"binary":return e;case"utf8":case"utf-8":return X(A).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*e;case"hex":return e>>>1;case"base64":return q(A).length;default:if(i)return s?-1:X(A).length;t=(""+t).toLowerCase(),i=!0}}function f(A,t,e){var s=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===e||e>this.length)&&(e=this.length),e<=0)return"";if((e>>>=0)<=(t>>>=0))return"";for(A||(A="utf8");;)switch(A){case"hex":return G(this,t,e);case"utf8":case"utf-8":return R(this,t,e);case"ascii":return x(this,t,e);case"latin1":case"binary":return p(this,t,e);case"base64":return L(this,t,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return W(this,t,e);default:if(s)throw new TypeError("Unknown encoding: "+A);A=(A+"").toLowerCase(),s=!0}}function D(A,t,e){var s=A[t];A[t]=A[e],A[e]=s}function b(A,t,e,s,i){if(0===A.length)return-1;if("string"==typeof e?(s=e,e=0):e>2147483647?e=2147483647:e<-2147483648&&(e=-2147483648),AA(e=+e)&&(e=i?0:A.length-1),e<0&&(e=A.length+e),e>=A.length){if(i)return-1;e=A.length-1}else if(e<0){if(!i)return-1;e=0}if("string"==typeof t&&(t=a.from(t,s)),a.isBuffer(t))return 0===t.length?-1:d(A,t,e,s,i);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(A,t,e):Uint8Array.prototype.lastIndexOf.call(A,t,e):d(A,[t],e,s,i);throw new TypeError("val must be string, number or Buffer")}function d(A,t,e,s,i){var n,r=1,B=A.length,o=t.length;if(void 0!==s&&("ucs2"===(s=String(s).toLowerCase())||"ucs-2"===s||"utf16le"===s||"utf-16le"===s)){if(A.length<2||t.length<2)return-1;r=2,B/=2,o/=2,e/=2}function E(A,t){return 1===r?A[t]:A.readUInt16BE(t*r)}if(i){var w=-1;for(n=e;nB&&(e=B-o),n=e;n>=0;n--){for(var g=!0,a=0;ai&&(s=i):s=i;var n,r=t.length;for(s>r/2&&(s=r/2),n=0;n>8,i=e%256,n.push(i),n.push(s);return n}(t,A.length-e),A,e,s)}function L(A,t,e){return 0===t&&e===A.length?B.fromByteArray(A):B.fromByteArray(A.slice(t,e))}function R(A,t,e){e=Math.min(A.length,e);for(var s=[],i=t;i239?4:n>223?3:n>191?2:1;if(i+B<=e){var o=void 0,E=void 0,w=void 0,g=void 0;switch(B){case 1:n<128&&(r=n);break;case 2:128==(192&(o=A[i+1]))&&(g=(31&n)<<6|63&o)>127&&(r=g);break;case 3:o=A[i+1],E=A[i+2],128==(192&o)&&128==(192&E)&&(g=(15&n)<<12|(63&o)<<6|63&E)>2047&&(g<55296||g>57343)&&(r=g);break;case 4:o=A[i+1],E=A[i+2],w=A[i+3],128==(192&o)&&128==(192&E)&&128==(192&w)&&(g=(15&n)<<18|(63&o)<<12|(63&E)<<6|63&w)>65535&&g<1114112&&(r=g)}}null===r?(r=65533,B=1):r>65535&&(r-=65536,s.push(r>>>10&1023|55296),r=56320|1023&r),s.push(r),i+=B}return function(A){var t=A.length;if(t<=m)return String.fromCharCode.apply(String,A);for(var e="",s=0;ss.length?(a.isBuffer(n)||(n=a.from(n)),n.copy(s,i)):Uint8Array.prototype.set.call(s,n,i);else{if(!a.isBuffer(n))throw new TypeError('"list" argument must be an Array of Buffers');n.copy(s,i)}i+=n.length}return s},a.byteLength=I,a.prototype._isBuffer=!0,a.prototype.swap16=function(){var A=this.length;if(A%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var t=0;te&&(A+=" ... "),""},E&&(a.prototype[E]=a.prototype.inspect),a.prototype.compare=function(A,t,e,s,i){if($(A,Uint8Array)&&(A=a.from(A,A.offset,A.byteLength)),!a.isBuffer(A))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof A);if(void 0===t&&(t=0),void 0===e&&(e=A?A.length:0),void 0===s&&(s=0),void 0===i&&(i=this.length),t<0||e>A.length||s<0||i>this.length)throw new RangeError("out of range index");if(s>=i&&t>=e)return 0;if(s>=i)return-1;if(t>=e)return 1;if(this===A)return 0;for(var n=(i>>>=0)-(s>>>=0),r=(e>>>=0)-(t>>>=0),B=Math.min(n,r),o=this.slice(s,i),E=A.slice(t,e),w=0;w>>=0,isFinite(e)?(e>>>=0,void 0===s&&(s="utf8")):(s=e,e=void 0)}var i=this.length-t;if((void 0===e||e>i)&&(e=i),A.length>0&&(e<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");s||(s="utf8");for(var n=!1;;)switch(s){case"hex":return v(this,A,t,e);case"utf8":case"utf-8":return Y(this,A,t,e);case"ascii":case"latin1":case"binary":return F(this,A,t,e);case"base64":return M(this,A,t,e);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return y(this,A,t,e);default:if(n)throw new TypeError("Unknown encoding: "+s);s=(""+s).toLowerCase(),n=!0}},a.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var m=4096;function x(A,t,e){var s="";e=Math.min(A.length,e);for(var i=t;is)&&(e=s);for(var i="",n=t;ne)throw new RangeError("Trying to access beyond buffer length")}function H(A,t,e,s,i,n){if(!a.isBuffer(A))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>i||tA.length)throw new RangeError("Index out of range")}function S(A,t,e,s,i){z(t,s,i,A,e,7);var n=Number(t&BigInt(4294967295));A[e++]=n,n>>=8,A[e++]=n,n>>=8,A[e++]=n,n>>=8,A[e++]=n;var r=Number(t>>BigInt(32)&BigInt(4294967295));return A[e++]=r,r>>=8,A[e++]=r,r>>=8,A[e++]=r,r>>=8,A[e++]=r,e}function U(A,t,e,s,i){z(t,s,i,A,e,7);var n=Number(t&BigInt(4294967295));A[e+7]=n,n>>=8,A[e+6]=n,n>>=8,A[e+5]=n,n>>=8,A[e+4]=n;var r=Number(t>>BigInt(32)&BigInt(4294967295));return A[e+3]=r,r>>=8,A[e+2]=r,r>>=8,A[e+1]=r,r>>=8,A[e]=r,e+8}function N(A,t,e,s,i,n){if(e+s>A.length)throw new RangeError("Index out of range");if(e<0)throw new RangeError("Index out of range")}function T(A,t,e,s,i){return t=+t,e>>>=0,i||N(A,0,e,4),o.write(A,t,e,s,23,4),e+4}function V(A,t,e,s,i){return t=+t,e>>>=0,i||N(A,0,e,8),o.write(A,t,e,s,52,8),e+8}a.prototype.slice=function(A,t){var e=this.length;(A=~~A)<0?(A+=e)<0&&(A=0):A>e&&(A=e),(t=void 0===t?e:~~t)<0?(t+=e)<0&&(t=0):t>e&&(t=e),t>>=0,t>>>=0,e||P(A,t,this.length);for(var s=this[A],i=1,n=0;++n>>=0,t>>>=0,e||P(A,t,this.length);for(var s=this[A+--t],i=1;t>0&&(i*=256);)s+=this[A+--t]*i;return s},a.prototype.readUint8=a.prototype.readUInt8=function(A,t){return A>>>=0,t||P(A,1,this.length),this[A]},a.prototype.readUint16LE=a.prototype.readUInt16LE=function(A,t){return A>>>=0,t||P(A,2,this.length),this[A]|this[A+1]<<8},a.prototype.readUint16BE=a.prototype.readUInt16BE=function(A,t){return A>>>=0,t||P(A,2,this.length),this[A]<<8|this[A+1]},a.prototype.readUint32LE=a.prototype.readUInt32LE=function(A,t){return A>>>=0,t||P(A,4,this.length),(this[A]|this[A+1]<<8|this[A+2]<<16)+16777216*this[A+3]},a.prototype.readUint32BE=a.prototype.readUInt32BE=function(A,t){return A>>>=0,t||P(A,4,this.length),16777216*this[A]+(this[A+1]<<16|this[A+2]<<8|this[A+3])},a.prototype.readBigUInt64LE=eA((function(A){K(A>>>=0,"offset");var t=this[A],e=this[A+7];void 0!==t&&void 0!==e||O(A,this.length-8);var s=t+this[++A]*Math.pow(2,8)+this[++A]*Math.pow(2,16)+this[++A]*Math.pow(2,24),i=this[++A]+this[++A]*Math.pow(2,8)+this[++A]*Math.pow(2,16)+e*Math.pow(2,24);return BigInt(s)+(BigInt(i)<>>=0,"offset");var t=this[A],e=this[A+7];void 0!==t&&void 0!==e||O(A,this.length-8);var s=t*Math.pow(2,24)+this[++A]*Math.pow(2,16)+this[++A]*Math.pow(2,8)+this[++A],i=this[++A]*Math.pow(2,24)+this[++A]*Math.pow(2,16)+this[++A]*Math.pow(2,8)+e;return(BigInt(s)<>>=0,t>>>=0,e||P(A,t,this.length);for(var s=this[A],i=1,n=0;++n=(i*=128)&&(s-=Math.pow(2,8*t)),s},a.prototype.readIntBE=function(A,t,e){A>>>=0,t>>>=0,e||P(A,t,this.length);for(var s=t,i=1,n=this[A+--s];s>0&&(i*=256);)n+=this[A+--s]*i;return n>=(i*=128)&&(n-=Math.pow(2,8*t)),n},a.prototype.readInt8=function(A,t){return A>>>=0,t||P(A,1,this.length),128&this[A]?-1*(255-this[A]+1):this[A]},a.prototype.readInt16LE=function(A,t){A>>>=0,t||P(A,2,this.length);var e=this[A]|this[A+1]<<8;return 32768&e?4294901760|e:e},a.prototype.readInt16BE=function(A,t){A>>>=0,t||P(A,2,this.length);var e=this[A+1]|this[A]<<8;return 32768&e?4294901760|e:e},a.prototype.readInt32LE=function(A,t){return A>>>=0,t||P(A,4,this.length),this[A]|this[A+1]<<8|this[A+2]<<16|this[A+3]<<24},a.prototype.readInt32BE=function(A,t){return A>>>=0,t||P(A,4,this.length),this[A]<<24|this[A+1]<<16|this[A+2]<<8|this[A+3]},a.prototype.readBigInt64LE=eA((function(A){K(A>>>=0,"offset");var t=this[A],e=this[A+7];void 0!==t&&void 0!==e||O(A,this.length-8);var s=this[A+4]+this[A+5]*Math.pow(2,8)+this[A+6]*Math.pow(2,16)+(e<<24);return(BigInt(s)<>>=0,"offset");var t=this[A],e=this[A+7];void 0!==t&&void 0!==e||O(A,this.length-8);var s=(t<<24)+this[++A]*Math.pow(2,16)+this[++A]*Math.pow(2,8)+this[++A];return(BigInt(s)<>>=0,t||P(A,4,this.length),o.read(this,A,!0,23,4)},a.prototype.readFloatBE=function(A,t){return A>>>=0,t||P(A,4,this.length),o.read(this,A,!1,23,4)},a.prototype.readDoubleLE=function(A,t){return A>>>=0,t||P(A,8,this.length),o.read(this,A,!0,52,8)},a.prototype.readDoubleBE=function(A,t){return A>>>=0,t||P(A,8,this.length),o.read(this,A,!1,52,8)},a.prototype.writeUintLE=a.prototype.writeUIntLE=function(A,t,e,s){A=+A,t>>>=0,e>>>=0,s||H(this,A,t,e,Math.pow(2,8*e)-1,0);var i=1,n=0;for(this[t]=255&A;++n>>=0,e>>>=0,s||H(this,A,t,e,Math.pow(2,8*e)-1,0);var i=e-1,n=1;for(this[t+i]=255&A;--i>=0&&(n*=256);)this[t+i]=A/n&255;return t+e},a.prototype.writeUint8=a.prototype.writeUInt8=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,1,255,0),this[t]=255&A,t+1},a.prototype.writeUint16LE=a.prototype.writeUInt16LE=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,2,65535,0),this[t]=255&A,this[t+1]=A>>>8,t+2},a.prototype.writeUint16BE=a.prototype.writeUInt16BE=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,2,65535,0),this[t]=A>>>8,this[t+1]=255&A,t+2},a.prototype.writeUint32LE=a.prototype.writeUInt32LE=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,4,4294967295,0),this[t+3]=A>>>24,this[t+2]=A>>>16,this[t+1]=A>>>8,this[t]=255&A,t+4},a.prototype.writeUint32BE=a.prototype.writeUInt32BE=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,4,4294967295,0),this[t]=A>>>24,this[t+1]=A>>>16,this[t+2]=A>>>8,this[t+3]=255&A,t+4},a.prototype.writeBigUInt64LE=eA((function(A,t){return void 0===t&&(t=0),S(this,A,t,BigInt(0),BigInt("0xffffffffffffffff"))})),a.prototype.writeBigUInt64BE=eA((function(A,t){return void 0===t&&(t=0),U(this,A,t,BigInt(0),BigInt("0xffffffffffffffff"))})),a.prototype.writeIntLE=function(A,t,e,s){if(A=+A,t>>>=0,!s){var i=Math.pow(2,8*e-1);H(this,A,t,e,i-1,-i)}var n=0,r=1,B=0;for(this[t]=255&A;++n>0)-B&255;return t+e},a.prototype.writeIntBE=function(A,t,e,s){if(A=+A,t>>>=0,!s){var i=Math.pow(2,8*e-1);H(this,A,t,e,i-1,-i)}var n=e-1,r=1,B=0;for(this[t+n]=255&A;--n>=0&&(r*=256);)A<0&&0===B&&0!==this[t+n+1]&&(B=1),this[t+n]=(A/r>>0)-B&255;return t+e},a.prototype.writeInt8=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,1,127,-128),A<0&&(A=255+A+1),this[t]=255&A,t+1},a.prototype.writeInt16LE=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,2,32767,-32768),this[t]=255&A,this[t+1]=A>>>8,t+2},a.prototype.writeInt16BE=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,2,32767,-32768),this[t]=A>>>8,this[t+1]=255&A,t+2},a.prototype.writeInt32LE=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,4,2147483647,-2147483648),this[t]=255&A,this[t+1]=A>>>8,this[t+2]=A>>>16,this[t+3]=A>>>24,t+4},a.prototype.writeInt32BE=function(A,t,e){return A=+A,t>>>=0,e||H(this,A,t,4,2147483647,-2147483648),A<0&&(A=4294967295+A+1),this[t]=A>>>24,this[t+1]=A>>>16,this[t+2]=A>>>8,this[t+3]=255&A,t+4},a.prototype.writeBigInt64LE=eA((function(A,t){return void 0===t&&(t=0),S(this,A,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),a.prototype.writeBigInt64BE=eA((function(A,t){return void 0===t&&(t=0),U(this,A,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),a.prototype.writeFloatLE=function(A,t,e){return T(this,A,t,!0,e)},a.prototype.writeFloatBE=function(A,t,e){return T(this,A,t,!1,e)},a.prototype.writeDoubleLE=function(A,t,e){return V(this,A,t,!0,e)},a.prototype.writeDoubleBE=function(A,t,e){return V(this,A,t,!1,e)},a.prototype.copy=function(A,t,e,s){if(!a.isBuffer(A))throw new TypeError("argument should be a Buffer");if(e||(e=0),s||0===s||(s=this.length),t>=A.length&&(t=A.length),t||(t=0),s>0&&s=this.length)throw new RangeError("Index out of range");if(s<0)throw new RangeError("sourceEnd out of bounds");s>this.length&&(s=this.length),A.length-t>>=0,e=void 0===e?this.length:e>>>0,A||(A=0),"number"==typeof A)for(n=t;n=s+4;e-=3)t="_"+A.slice(e-3,e)+t;return""+A.slice(0,e)+t}function z(A,t,e,s,i,n){if(A>e||A3?0===t||t===BigInt(0)?">= 0"+B+" and < 2"+B+" ** "+8*(n+1)+B:">= -(2"+B+" ** "+(8*(n+1)-1)+B+") and < 2 ** "+(8*(n+1)-1)+B:">= "+t+B+" and <= "+e+B,new j.ERR_OUT_OF_RANGE("value",r,A)}!function(A,t,e){K(t,"offset"),void 0!==A[t]&&void 0!==A[t+e]||O(t,A.length-(e+1))}(s,i,n)}function K(A,t){if("number"!=typeof A)throw new j.ERR_INVALID_ARG_TYPE(t,"number",A)}function O(A,t,e){if(Math.floor(A)!==A)throw K(A,e),new j.ERR_OUT_OF_RANGE(e||"offset","an integer",A);if(t<0)throw new j.ERR_BUFFER_OUT_OF_BOUNDS;throw new j.ERR_OUT_OF_RANGE(e||"offset",">= "+(e?1:0)+" and <= "+t,A)}k("ERR_BUFFER_OUT_OF_BOUNDS",(function(A){return A?A+" is outside of buffer bounds":"Attempt to access memory outside buffer bounds"}),RangeError),k("ERR_INVALID_ARG_TYPE",(function(A,t){return'The "'+A+'" argument must be of type number. Received type '+typeof t}),TypeError),k("ERR_OUT_OF_RANGE",(function(A,t,e){var s='The value of "'+A+'" is out of range.',i=e;return Number.isInteger(e)&&Math.abs(e)>Math.pow(2,32)?i=J(String(e)):"bigint"==typeof e&&(i=String(e),(e>Math.pow(BigInt(2),BigInt(32))||e<-Math.pow(BigInt(2),BigInt(32)))&&(i=J(i)),i+="n"),s+" It must be "+t+". Received "+i}),RangeError);var Z=/[^+/0-9A-Za-z-_]/g;function X(A,t){var e;t=t||1/0;for(var s=A.length,i=null,n=[],r=0;r55295&&e<57344){if(!i){if(e>56319){(t-=3)>-1&&n.push(239,191,189);continue}if(r+1===s){(t-=3)>-1&&n.push(239,191,189);continue}i=e;continue}if(e<56320){(t-=3)>-1&&n.push(239,191,189),i=e;continue}e=65536+(i-55296<<10|e-56320)}else i&&(t-=3)>-1&&n.push(239,191,189);if(i=null,e<128){if((t-=1)<0)break;n.push(e)}else if(e<2048){if((t-=2)<0)break;n.push(e>>6|192,63&e|128)}else if(e<65536){if((t-=3)<0)break;n.push(e>>12|224,e>>6&63|128,63&e|128)}else{if(!(e<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;n.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}}return n}function q(A){return B.toByteArray(function(A){if((A=(A=A.split("=")[0]).trim().replace(Z,"")).length<2)return"";for(;A.length%4!=0;)A+="=";return A}(A))}function _(A,t,e,s){var i;for(i=0;i=t.length||i>=A.length);++i)t[i+e]=A[i];return i}function $(A,t){return A instanceof t||null!=A&&null!=A.constructor&&null!=A.constructor.name&&A.constructor.name===t.name}function AA(A){return A!=A}var tA=function(){for(var A="0123456789abcdef",t=new Array(256),e=0;e<16;++e)for(var s=16*e,i=0;i<16;++i)t[s+i]=A[e]+A[i];return t}();function eA(A){return"undefined"==typeof BigInt?sA:A}function sA(){throw new Error("BigInt not supported")}},38719:function(A,t,e){"use strict";e(10720),e(14032),A.exports="undefined"!=typeof ArrayBuffer&&"undefined"!=typeof DataView},36597:function(A,t,e){"use strict";var s,i,n,r=e(38719),B=e(15567),o=e(32010),E=e(94578),w=e(24517),g=e(20340),a=e(52564),c=e(68664),Q=e(48914),C=e(13711),h=e(95892).f,u=e(70176),l=e(69548),I=e(3840),f=e(38688),D=e(46859),b=o.Int8Array,d=b&&b.prototype,v=o.Uint8ClampedArray,Y=v&&v.prototype,F=b&&l(b),M=d&&l(d),y=Object.prototype,L=o.TypeError,R=f("toStringTag"),m=D("TYPED_ARRAY_TAG"),x=D("TYPED_ARRAY_CONSTRUCTOR"),p=r&&!!I&&"Opera"!==a(o.opera),G=!1,W={Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},P={BigInt64Array:8,BigUint64Array:8},H=function(A){if(!w(A))return!1;var t=a(A);return g(W,t)||g(P,t)};for(s in W)(n=(i=o[s])&&i.prototype)?Q(n,x,i):p=!1;for(s in P)(n=(i=o[s])&&i.prototype)&&Q(n,x,i);if((!p||!E(F)||F===Function.prototype)&&(F=function(){throw L("Incorrect invocation")},p))for(s in W)o[s]&&I(o[s],F);if((!p||!M||M===y)&&(M=F.prototype,p))for(s in W)o[s]&&I(o[s].prototype,M);if(p&&l(Y)!==M&&I(Y,M),B&&!g(M,R))for(s in G=!0,h(M,R,{get:function(){return w(this)?this[m]:void 0}}),W)o[s]&&Q(o[s],m,s);A.exports={NATIVE_ARRAY_BUFFER_VIEWS:p,TYPED_ARRAY_CONSTRUCTOR:x,TYPED_ARRAY_TAG:G&&m,aTypedArray:function(A){if(H(A))return A;throw L("Target is not a typed array")},aTypedArrayConstructor:function(A){if(E(A)&&(!I||u(F,A)))return A;throw L(c(A)+" is not a typed array constructor")},exportTypedArrayMethod:function(A,t,e){if(B){if(e)for(var s in W){var i=o[s];if(i&&g(i.prototype,A))try{delete i.prototype[A]}catch(A){}}M[A]&&!e||C(M,A,e?t:p&&d[A]||t)}},exportTypedArrayStaticMethod:function(A,t,e){var s,i;if(B){if(I){if(e)for(s in W)if((i=o[s])&&g(i,A))try{delete i[A]}catch(A){}if(F[A]&&!e)return;try{return C(F,A,e?t:p&&F[A]||t)}catch(A){}}for(s in W)!(i=o[s])||i[A]&&!e||C(i,A,t)}},isView:function(A){if(!w(A))return!1;var t=a(A);return"DataView"===t||g(W,t)||g(P,t)},isTypedArray:H,TypedArray:F,TypedArrayPrototype:M}},89987:function(A,t,e){"use strict";e(24863);var s=e(32010),i=e(38347),n=e(15567),r=e(38719),B=e(7081),o=e(48914),E=e(15341),w=e(47044),g=e(2868),a=e(26882),c=e(23417),Q=e(71265),C=e(64397),h=e(69548),u=e(3840),l=e(6611).f,I=e(95892).f,f=e(72864),D=e(73163),b=e(15216),d=e(70172),v=B.PROPER,Y=B.CONFIGURABLE,F=d.get,M=d.set,y="ArrayBuffer",L="DataView",R="prototype",m="Wrong index",x=s[y],p=x,G=p&&p[R],W=s[L],P=W&&W[R],H=Object.prototype,S=s.Array,U=s.RangeError,N=i(f),T=i([].reverse),V=C.pack,j=C.unpack,k=function(A){return[255&A]},J=function(A){return[255&A,A>>8&255]},z=function(A){return[255&A,A>>8&255,A>>16&255,A>>24&255]},K=function(A){return A[3]<<24|A[2]<<16|A[1]<<8|A[0]},O=function(A){return V(A,23,4)},Z=function(A){return V(A,52,8)},X=function(A,t){I(A[R],t,{get:function(){return F(this)[t]}})},q=function(A,t,e,s){var i=Q(e),n=F(A);if(i+t>n.byteLength)throw U(m);var r=F(n.buffer).bytes,B=i+n.byteOffset,o=D(r,B,B+t);return s?o:T(o)},_=function(A,t,e,s,i,n){var r=Q(e),B=F(A);if(r+t>B.byteLength)throw U(m);for(var o=F(B.buffer).bytes,E=r+B.byteOffset,w=s(+i),g=0;geA;)(AA=tA[eA++])in p||o(p,AA,x[AA]);G.constructor=p}u&&h(P)!==H&&u(P,H);var sA=new W(new p(2)),iA=i(P.setInt8);sA.setInt8(0,2147483648),sA.setInt8(1,2147483649),!sA.getInt8(0)&&sA.getInt8(1)||E(P,{setInt8:function(A,t){iA(this,A,t<<24>>24)},setUint8:function(A,t){iA(this,A,t<<24>>24)}},{unsafe:!0})}else G=(p=function(A){g(this,G);var t=Q(A);M(this,{bytes:N(S(t),0),byteLength:t}),n||(this.byteLength=t)})[R],P=(W=function(A,t,e){g(this,P),g(A,G);var s=F(A).byteLength,i=a(t);if(i<0||i>s)throw U("Wrong offset");if(i+(e=void 0===e?s-i:c(e))>s)throw U("Wrong length");M(this,{buffer:A,byteLength:e,byteOffset:i}),n||(this.buffer=A,this.byteLength=e,this.byteOffset=i)})[R],n&&(X(p,"byteLength"),X(W,"buffer"),X(W,"byteLength"),X(W,"byteOffset")),E(P,{getInt8:function(A){return q(this,1,A)[0]<<24>>24},getUint8:function(A){return q(this,1,A)[0]},getInt16:function(A){var t=q(this,2,A,arguments.length>1?arguments[1]:void 0);return(t[1]<<8|t[0])<<16>>16},getUint16:function(A){var t=q(this,2,A,arguments.length>1?arguments[1]:void 0);return t[1]<<8|t[0]},getInt32:function(A){return K(q(this,4,A,arguments.length>1?arguments[1]:void 0))},getUint32:function(A){return K(q(this,4,A,arguments.length>1?arguments[1]:void 0))>>>0},getFloat32:function(A){return j(q(this,4,A,arguments.length>1?arguments[1]:void 0),23)},getFloat64:function(A){return j(q(this,8,A,arguments.length>1?arguments[1]:void 0),52)},setInt8:function(A,t){_(this,1,A,k,t)},setUint8:function(A,t){_(this,1,A,k,t)},setInt16:function(A,t){_(this,2,A,J,t,arguments.length>2?arguments[2]:void 0)},setUint16:function(A,t){_(this,2,A,J,t,arguments.length>2?arguments[2]:void 0)},setInt32:function(A,t){_(this,4,A,z,t,arguments.length>2?arguments[2]:void 0)},setUint32:function(A,t){_(this,4,A,z,t,arguments.length>2?arguments[2]:void 0)},setFloat32:function(A,t){_(this,4,A,O,t,arguments.length>2?arguments[2]:void 0)},setFloat64:function(A,t){_(this,8,A,Z,t,arguments.length>2?arguments[2]:void 0)}});b(p,y),b(W,L),A.exports={ArrayBuffer:p,DataView:W}},10720:function(A,t,e){"use strict";var s=e(56475),i=e(32010),n=e(89987),r=e(51334),B="ArrayBuffer",o=n[B];s({global:!0,forced:i[B]!==o},{ArrayBuffer:o}),r(B)},6993:function(A,t,e){"use strict";var s;A.exports=(s=e(34559),e(49300),e(72342),e(36572),e(28395),function(){var A=s,t=A.lib.BlockCipher,e=A.algo,i=[],n=[],r=[],B=[],o=[],E=[],w=[],g=[],a=[],c=[];!function(){for(var A=[],t=0;t<256;t++)A[t]=t<128?t<<1:t<<1^283;var e=0,s=0;for(t=0;t<256;t++){var Q=s^s<<1^s<<2^s<<3^s<<4;Q=Q>>>8^255&Q^99,i[e]=Q,n[Q]=e;var C=A[e],h=A[C],u=A[h],l=257*A[Q]^16843008*Q;r[e]=l<<24|l>>>8,B[e]=l<<16|l>>>16,o[e]=l<<8|l>>>24,E[e]=l,l=16843009*u^65537*h^257*C^16843008*e,w[Q]=l<<24|l>>>8,g[Q]=l<<16|l>>>16,a[Q]=l<<8|l>>>24,c[Q]=l,e?(e=C^A[A[A[u^C]]],s^=A[A[s]]):e=s=1}}();var Q=[0,1,2,4,8,16,32,64,128,27,54],C=e.AES=t.extend({_doReset:function(){if(!this._nRounds||this._keyPriorReset!==this._key){for(var A=this._keyPriorReset=this._key,t=A.words,e=A.sigBytes/4,s=4*((this._nRounds=e+6)+1),n=this._keySchedule=[],r=0;r6&&r%e==4&&(E=i[E>>>24]<<24|i[E>>>16&255]<<16|i[E>>>8&255]<<8|i[255&E]):(E=i[(E=E<<8|E>>>24)>>>24]<<24|i[E>>>16&255]<<16|i[E>>>8&255]<<8|i[255&E],E^=Q[r/e|0]<<24),n[r]=n[r-e]^E);for(var B=this._invKeySchedule=[],o=0;o>>24]]^g[i[E>>>16&255]]^a[i[E>>>8&255]]^c[i[255&E]]}}},encryptBlock:function(A,t){this._doCryptBlock(A,t,this._keySchedule,r,B,o,E,i)},decryptBlock:function(A,t){var e=A[t+1];A[t+1]=A[t+3],A[t+3]=e,this._doCryptBlock(A,t,this._invKeySchedule,w,g,a,c,n),e=A[t+1],A[t+1]=A[t+3],A[t+3]=e},_doCryptBlock:function(A,t,e,s,i,n,r,B){for(var o=this._nRounds,E=A[t]^e[0],w=A[t+1]^e[1],g=A[t+2]^e[2],a=A[t+3]^e[3],c=4,Q=1;Q>>24]^i[w>>>16&255]^n[g>>>8&255]^r[255&a]^e[c++],h=s[w>>>24]^i[g>>>16&255]^n[a>>>8&255]^r[255&E]^e[c++],u=s[g>>>24]^i[a>>>16&255]^n[E>>>8&255]^r[255&w]^e[c++],l=s[a>>>24]^i[E>>>16&255]^n[w>>>8&255]^r[255&g]^e[c++];E=C,w=h,g=u,a=l}C=(B[E>>>24]<<24|B[w>>>16&255]<<16|B[g>>>8&255]<<8|B[255&a])^e[c++],h=(B[w>>>24]<<24|B[g>>>16&255]<<16|B[a>>>8&255]<<8|B[255&E])^e[c++],u=(B[g>>>24]<<24|B[a>>>16&255]<<16|B[E>>>8&255]<<8|B[255&w])^e[c++],l=(B[a>>>24]<<24|B[E>>>16&255]<<16|B[w>>>8&255]<<8|B[255&g])^e[c++],A[t]=C,A[t+1]=h,A[t+2]=u,A[t+3]=l},keySize:8});A.AES=t._createHelper(C)}(),s.AES)},83122:function(A,t,e){"use strict";var s;A.exports=(s=e(34559),e(49300),e(72342),e(36572),e(28395),function(){var A=s,t=A.lib.BlockCipher,e=A.algo,i=16,n=[608135816,2242054355,320440878,57701188,2752067618,698298832,137296536,3964562569,1160258022,953160567,3193202383,887688300,3232508343,3380367581,1065670069,3041331479,2450970073,2306472731],r=[[3509652390,2564797868,805139163,3491422135,3101798381,1780907670,3128725573,4046225305,614570311,3012652279,134345442,2240740374,1667834072,1901547113,2757295779,4103290238,227898511,1921955416,1904987480,2182433518,2069144605,3260701109,2620446009,720527379,3318853667,677414384,3393288472,3101374703,2390351024,1614419982,1822297739,2954791486,3608508353,3174124327,2024746970,1432378464,3864339955,2857741204,1464375394,1676153920,1439316330,715854006,3033291828,289532110,2706671279,2087905683,3018724369,1668267050,732546397,1947742710,3462151702,2609353502,2950085171,1814351708,2050118529,680887927,999245976,1800124847,3300911131,1713906067,1641548236,4213287313,1216130144,1575780402,4018429277,3917837745,3693486850,3949271944,596196993,3549867205,258830323,2213823033,772490370,2760122372,1774776394,2652871518,566650946,4142492826,1728879713,2882767088,1783734482,3629395816,2517608232,2874225571,1861159788,326777828,3124490320,2130389656,2716951837,967770486,1724537150,2185432712,2364442137,1164943284,2105845187,998989502,3765401048,2244026483,1075463327,1455516326,1322494562,910128902,469688178,1117454909,936433444,3490320968,3675253459,1240580251,122909385,2157517691,634681816,4142456567,3825094682,3061402683,2540495037,79693498,3249098678,1084186820,1583128258,426386531,1761308591,1047286709,322548459,995290223,1845252383,2603652396,3431023940,2942221577,3202600964,3727903485,1712269319,422464435,3234572375,1170764815,3523960633,3117677531,1434042557,442511882,3600875718,1076654713,1738483198,4213154764,2393238008,3677496056,1014306527,4251020053,793779912,2902807211,842905082,4246964064,1395751752,1040244610,2656851899,3396308128,445077038,3742853595,3577915638,679411651,2892444358,2354009459,1767581616,3150600392,3791627101,3102740896,284835224,4246832056,1258075500,768725851,2589189241,3069724005,3532540348,1274779536,3789419226,2764799539,1660621633,3471099624,4011903706,913787905,3497959166,737222580,2514213453,2928710040,3937242737,1804850592,3499020752,2949064160,2386320175,2390070455,2415321851,4061277028,2290661394,2416832540,1336762016,1754252060,3520065937,3014181293,791618072,3188594551,3933548030,2332172193,3852520463,3043980520,413987798,3465142937,3030929376,4245938359,2093235073,3534596313,375366246,2157278981,2479649556,555357303,3870105701,2008414854,3344188149,4221384143,3956125452,2067696032,3594591187,2921233993,2428461,544322398,577241275,1471733935,610547355,4027169054,1432588573,1507829418,2025931657,3646575487,545086370,48609733,2200306550,1653985193,298326376,1316178497,3007786442,2064951626,458293330,2589141269,3591329599,3164325604,727753846,2179363840,146436021,1461446943,4069977195,705550613,3059967265,3887724982,4281599278,3313849956,1404054877,2845806497,146425753,1854211946],[1266315497,3048417604,3681880366,3289982499,290971e4,1235738493,2632868024,2414719590,3970600049,1771706367,1449415276,3266420449,422970021,1963543593,2690192192,3826793022,1062508698,1531092325,1804592342,2583117782,2714934279,4024971509,1294809318,4028980673,1289560198,2221992742,1669523910,35572830,157838143,1052438473,1016535060,1802137761,1753167236,1386275462,3080475397,2857371447,1040679964,2145300060,2390574316,1461121720,2956646967,4031777805,4028374788,33600511,2920084762,1018524850,629373528,3691585981,3515945977,2091462646,2486323059,586499841,988145025,935516892,3367335476,2599673255,2839830854,265290510,3972581182,2759138881,3795373465,1005194799,847297441,406762289,1314163512,1332590856,1866599683,4127851711,750260880,613907577,1450815602,3165620655,3734664991,3650291728,3012275730,3704569646,1427272223,778793252,1343938022,2676280711,2052605720,1946737175,3164576444,3914038668,3967478842,3682934266,1661551462,3294938066,4011595847,840292616,3712170807,616741398,312560963,711312465,1351876610,322626781,1910503582,271666773,2175563734,1594956187,70604529,3617834859,1007753275,1495573769,4069517037,2549218298,2663038764,504708206,2263041392,3941167025,2249088522,1514023603,1998579484,1312622330,694541497,2582060303,2151582166,1382467621,776784248,2618340202,3323268794,2497899128,2784771155,503983604,4076293799,907881277,423175695,432175456,1378068232,4145222326,3954048622,3938656102,3820766613,2793130115,2977904593,26017576,3274890735,3194772133,1700274565,1756076034,4006520079,3677328699,720338349,1533947780,354530856,688349552,3973924725,1637815568,332179504,3949051286,53804574,2852348879,3044236432,1282449977,3583942155,3416972820,4006381244,1617046695,2628476075,3002303598,1686838959,431878346,2686675385,1700445008,1080580658,1009431731,832498133,3223435511,2605976345,2271191193,2516031870,1648197032,4164389018,2548247927,300782431,375919233,238389289,3353747414,2531188641,2019080857,1475708069,455242339,2609103871,448939670,3451063019,1395535956,2413381860,1841049896,1491858159,885456874,4264095073,4001119347,1565136089,3898914787,1108368660,540939232,1173283510,2745871338,3681308437,4207628240,3343053890,4016749493,1699691293,1103962373,3625875870,2256883143,3830138730,1031889488,3479347698,1535977030,4236805024,3251091107,2132092099,1774941330,1199868427,1452454533,157007616,2904115357,342012276,595725824,1480756522,206960106,497939518,591360097,863170706,2375253569,3596610801,1814182875,2094937945,3421402208,1082520231,3463918190,2785509508,435703966,3908032597,1641649973,2842273706,3305899714,1510255612,2148256476,2655287854,3276092548,4258621189,236887753,3681803219,274041037,1734335097,3815195456,3317970021,1899903192,1026095262,4050517792,356393447,2410691914,3873677099,3682840055],[3913112168,2491498743,4132185628,2489919796,1091903735,1979897079,3170134830,3567386728,3557303409,857797738,1136121015,1342202287,507115054,2535736646,337727348,3213592640,1301675037,2528481711,1895095763,1721773893,3216771564,62756741,2142006736,835421444,2531993523,1442658625,3659876326,2882144922,676362277,1392781812,170690266,3921047035,1759253602,3611846912,1745797284,664899054,1329594018,3901205900,3045908486,2062866102,2865634940,3543621612,3464012697,1080764994,553557557,3656615353,3996768171,991055499,499776247,1265440854,648242737,3940784050,980351604,3713745714,1749149687,3396870395,4211799374,3640570775,1161844396,3125318951,1431517754,545492359,4268468663,3499529547,1437099964,2702547544,3433638243,2581715763,2787789398,1060185593,1593081372,2418618748,4260947970,69676912,2159744348,86519011,2512459080,3838209314,1220612927,3339683548,133810670,1090789135,1078426020,1569222167,845107691,3583754449,4072456591,1091646820,628848692,1613405280,3757631651,526609435,236106946,48312990,2942717905,3402727701,1797494240,859738849,992217954,4005476642,2243076622,3870952857,3732016268,765654824,3490871365,2511836413,1685915746,3888969200,1414112111,2273134842,3281911079,4080962846,172450625,2569994100,980381355,4109958455,2819808352,2716589560,2568741196,3681446669,3329971472,1835478071,660984891,3704678404,4045999559,3422617507,3040415634,1762651403,1719377915,3470491036,2693910283,3642056355,3138596744,1364962596,2073328063,1983633131,926494387,3423689081,2150032023,4096667949,1749200295,3328846651,309677260,2016342300,1779581495,3079819751,111262694,1274766160,443224088,298511866,1025883608,3806446537,1145181785,168956806,3641502830,3584813610,1689216846,3666258015,3200248200,1692713982,2646376535,4042768518,1618508792,1610833997,3523052358,4130873264,2001055236,3610705100,2202168115,4028541809,2961195399,1006657119,2006996926,3186142756,1430667929,3210227297,1314452623,4074634658,4101304120,2273951170,1399257539,3367210612,3027628629,1190975929,2062231137,2333990788,2221543033,2438960610,1181637006,548689776,2362791313,3372408396,3104550113,3145860560,296247880,1970579870,3078560182,3769228297,1714227617,3291629107,3898220290,166772364,1251581989,493813264,448347421,195405023,2709975567,677966185,3703036547,1463355134,2715995803,1338867538,1343315457,2802222074,2684532164,233230375,2599980071,2000651841,3277868038,1638401717,4028070440,3237316320,6314154,819756386,300326615,590932579,1405279636,3267499572,3150704214,2428286686,3959192993,3461946742,1862657033,1266418056,963775037,2089974820,2263052895,1917689273,448879540,3550394620,3981727096,150775221,3627908307,1303187396,508620638,2975983352,2726630617,1817252668,1876281319,1457606340,908771278,3720792119,3617206836,2455994898,1729034894,1080033504],[976866871,3556439503,2881648439,1522871579,1555064734,1336096578,3548522304,2579274686,3574697629,3205460757,3593280638,3338716283,3079412587,564236357,2993598910,1781952180,1464380207,3163844217,3332601554,1699332808,1393555694,1183702653,3581086237,1288719814,691649499,2847557200,2895455976,3193889540,2717570544,1781354906,1676643554,2592534050,3230253752,1126444790,2770207658,2633158820,2210423226,2615765581,2414155088,3127139286,673620729,2805611233,1269405062,4015350505,3341807571,4149409754,1057255273,2012875353,2162469141,2276492801,2601117357,993977747,3918593370,2654263191,753973209,36408145,2530585658,25011837,3520020182,2088578344,530523599,2918365339,1524020338,1518925132,3760827505,3759777254,1202760957,3985898139,3906192525,674977740,4174734889,2031300136,2019492241,3983892565,4153806404,3822280332,352677332,2297720250,60907813,90501309,3286998549,1016092578,2535922412,2839152426,457141659,509813237,4120667899,652014361,1966332200,2975202805,55981186,2327461051,676427537,3255491064,2882294119,3433927263,1307055953,942726286,933058658,2468411793,3933900994,4215176142,1361170020,2001714738,2830558078,3274259782,1222529897,1679025792,2729314320,3714953764,1770335741,151462246,3013232138,1682292957,1483529935,471910574,1539241949,458788160,3436315007,1807016891,3718408830,978976581,1043663428,3165965781,1927990952,4200891579,2372276910,3208408903,3533431907,1412390302,2931980059,4132332400,1947078029,3881505623,4168226417,2941484381,1077988104,1320477388,886195818,18198404,3786409e3,2509781533,112762804,3463356488,1866414978,891333506,18488651,661792760,1628790961,3885187036,3141171499,876946877,2693282273,1372485963,791857591,2686433993,3759982718,3167212022,3472953795,2716379847,445679433,3561995674,3504004811,3574258232,54117162,3331405415,2381918588,3769707343,4154350007,1140177722,4074052095,668550556,3214352940,367459370,261225585,2610173221,4209349473,3468074219,3265815641,314222801,3066103646,3808782860,282218597,3406013506,3773591054,379116347,1285071038,846784868,2669647154,3771962079,3550491691,2305946142,453669953,1268987020,3317592352,3279303384,3744833421,2610507566,3859509063,266596637,3847019092,517658769,3462560207,3443424879,370717030,4247526661,2224018117,4143653529,4112773975,2788324899,2477274417,1456262402,2901442914,1517677493,1846949527,2295493580,3734397586,2176403920,1280348187,1908823572,3871786941,846861322,1172426758,3287448474,3383383037,1655181056,3139813346,901632758,1897031941,2986607138,3066810236,3447102507,1393639104,373351379,950779232,625454576,3124240540,4148612726,2007998917,544563296,2244738638,2330496472,2058025392,1291430526,424198748,50039436,29584100,3605783033,2429876329,2791104160,1057563949,3255363231,3075367218,3463963227,1469046755,985887462]],B={pbox:[],sbox:[]};function o(A,t){var e=t>>24&255,s=t>>16&255,i=t>>8&255,n=255&t,r=A.sbox[0][e]+A.sbox[1][s];return(r^=A.sbox[2][i])+A.sbox[3][n]}function E(A,t,e){for(var s,n=t,r=e,B=0;B=e&&(o=0);for(var g=0,a=0,c=0,Q=0;Q1;--B)s=n^=A.pbox[B],n=r=o(A,n)^r,r=s;return s=n,n=r,r=s,r^=A.pbox[1],{left:n^=A.pbox[0],right:r}}(B,A[t],A[t+1]);A[t]=e.left,A[t+1]=e.right},blockSize:2,keySize:4,ivSize:2});A.Blowfish=t._createHelper(w)}(),s.Blowfish)},28395:function(A,t,e){"use strict";var s,i,n,r,B,o,E,w,g,a,c,Q,C,h,u,l,I,f,D;e(39081),e(20731),e(23913),e(14032),e(57114),A.exports=(s=e(34559),e(36572),void(s.lib.Cipher||(i=s,n=i.lib,r=n.Base,B=n.WordArray,o=n.BufferedBlockAlgorithm,E=i.enc,E.Utf8,w=E.Base64,g=i.algo.EvpKDF,a=n.Cipher=o.extend({cfg:r.extend(),createEncryptor:function(A,t){return this.create(this._ENC_XFORM_MODE,A,t)},createDecryptor:function(A,t){return this.create(this._DEC_XFORM_MODE,A,t)},init:function(A,t,e){this.cfg=this.cfg.extend(e),this._xformMode=A,this._key=t,this.reset()},reset:function(){o.reset.call(this),this._doReset()},process:function(A){return this._append(A),this._process()},finalize:function(A){return A&&this._append(A),this._doFinalize()},keySize:4,ivSize:4,_ENC_XFORM_MODE:1,_DEC_XFORM_MODE:2,_createHelper:function(){function A(A){return"string"==typeof A?D:I}return function(t){return{encrypt:function(e,s,i){return A(s).encrypt(t,e,s,i)},decrypt:function(e,s,i){return A(s).decrypt(t,e,s,i)}}}}()}),n.StreamCipher=a.extend({_doFinalize:function(){return this._process(!0)},blockSize:1}),c=i.mode={},Q=n.BlockCipherMode=r.extend({createEncryptor:function(A,t){return this.Encryptor.create(A,t)},createDecryptor:function(A,t){return this.Decryptor.create(A,t)},init:function(A,t){this._cipher=A,this._iv=t}}),C=c.CBC=function(){var A=Q.extend();function t(A,t,e){var s,i=this._iv;i?(s=i,this._iv=void 0):s=this._prevBlock;for(var n=0;n>>2];A.sigBytes-=t}},n.BlockCipher=a.extend({cfg:a.cfg.extend({mode:C,padding:h}),reset:function(){var A;a.reset.call(this);var t=this.cfg,e=t.iv,s=t.mode;this._xformMode==this._ENC_XFORM_MODE?A=s.createEncryptor:(A=s.createDecryptor,this._minBufferSize=1),this._mode&&this._mode.__creator==A?this._mode.init(this,e&&e.words):(this._mode=A.call(s,this,e&&e.words),this._mode.__creator=A)},_doProcessBlock:function(A,t){this._mode.processBlock(A,t)},_doFinalize:function(){var A,t=this.cfg.padding;return this._xformMode==this._ENC_XFORM_MODE?(t.pad(this._data,this.blockSize),A=this._process(!0)):(A=this._process(!0),t.unpad(A)),A},blockSize:4}),u=n.CipherParams=r.extend({init:function(A){this.mixIn(A)},toString:function(A){return(A||this.formatter).stringify(this)}}),l=(i.format={}).OpenSSL={stringify:function(A){var t=A.ciphertext,e=A.salt;return(e?B.create([1398893684,1701076831]).concat(e).concat(t):t).toString(w)},parse:function(A){var t,e=w.parse(A),s=e.words;return 1398893684==s[0]&&1701076831==s[1]&&(t=B.create(s.slice(2,4)),s.splice(0,4),e.sigBytes-=16),u.create({ciphertext:e,salt:t})}},I=n.SerializableCipher=r.extend({cfg:r.extend({format:l}),encrypt:function(A,t,e,s){s=this.cfg.extend(s);var i=A.createEncryptor(e,s),n=i.finalize(t),r=i.cfg;return u.create({ciphertext:n,key:e,iv:r.iv,algorithm:A,mode:r.mode,padding:r.padding,blockSize:A.blockSize,formatter:s.format})},decrypt:function(A,t,e,s){return s=this.cfg.extend(s),t=this._parse(t,s.format),A.createDecryptor(e,s).finalize(t.ciphertext)},_parse:function(A,t){return"string"==typeof A?t.parse(A,this):A}}),f=(i.kdf={}).OpenSSL={execute:function(A,t,e,s,i){if(s||(s=B.random(8)),i)n=g.create({keySize:t+e,hasher:i}).compute(A,s);else var n=g.create({keySize:t+e}).compute(A,s);var r=B.create(n.words.slice(t),4*e);return n.sigBytes=4*t,u.create({key:n,iv:r,salt:s})}},D=n.PasswordBasedCipher=I.extend({cfg:I.cfg.extend({kdf:f}),encrypt:function(A,t,e,s){var i=(s=this.cfg.extend(s)).kdf.execute(e,A.keySize,A.ivSize,s.salt,s.hasher);s.iv=i.iv;var n=I.encrypt.call(this,A,t,i.key,s);return n.mixIn(i),n},decrypt:function(A,t,e,s){s=this.cfg.extend(s),t=this._parse(t,s.format);var i=s.kdf.execute(e,A.keySize,A.ivSize,t.salt,s.hasher);return s.iv=i.iv,I.decrypt.call(this,A,t,i.key,s)}}))))},34559:function(A,t,e){"use strict";var s;e(39081),e(81755),e(94845),e(20731),e(23913),e(14032),e(57114),e(59735),e(73663),e(29883),e(35471),e(21012),e(88997),e(97464),e(2857),e(94715),e(13624),e(91132),e(62514),e(24597),e(88042),e(4660),e(92451),e(44206),e(66288),e(13250),e(3858),e(84538),e(64793),e(74202),e(52529),e(49109),A.exports=(s=s||function(A,t){var s;if("undefined"!=typeof window&&window.crypto&&(s=window.crypto),"undefined"!=typeof self&&self.crypto&&(s=self.crypto),"undefined"!=typeof globalThis&&globalThis.crypto&&(s=globalThis.crypto),!s&&"undefined"!=typeof window&&window.msCrypto&&(s=window.msCrypto),!s&&void 0!==e.g&&e.g.crypto&&(s=e.g.crypto),!s)try{s=e(50477)}catch(A){}var i=function(){if(s){if("function"==typeof s.getRandomValues)try{return s.getRandomValues(new Uint32Array(1))[0]}catch(A){}if("function"==typeof s.randomBytes)try{return s.randomBytes(4).readInt32LE()}catch(A){}}throw new Error("Native crypto module could not be used to get secure random number.")},n=Object.create||function(){function A(){}return function(t){var e;return A.prototype=t,e=new A,A.prototype=null,e}}(),r={},B=r.lib={},o=B.Base={extend:function(A){var t=n(this);return A&&t.mixIn(A),t.hasOwnProperty("init")&&this.init!==t.init||(t.init=function(){t.$super.init.apply(this,arguments)}),t.init.prototype=t,t.$super=this,t},create:function(){var A=this.extend();return A.init.apply(A,arguments),A},init:function(){},mixIn:function(A){for(var t in A)A.hasOwnProperty(t)&&(this[t]=A[t]);A.hasOwnProperty("toString")&&(this.toString=A.toString)},clone:function(){return this.init.prototype.extend(this)}},E=B.WordArray=o.extend({init:function(A,t){A=this.words=A||[],this.sigBytes=null!=t?t:4*A.length},toString:function(A){return(A||g).stringify(this)},concat:function(A){var t=this.words,e=A.words,s=this.sigBytes,i=A.sigBytes;if(this.clamp(),s%4)for(var n=0;n>>2]>>>24-n%4*8&255;t[s+n>>>2]|=r<<24-(s+n)%4*8}else for(var B=0;B>>2]=e[B>>>2];return this.sigBytes+=i,this},clamp:function(){var t=this.words,e=this.sigBytes;t[e>>>2]&=4294967295<<32-e%4*8,t.length=A.ceil(e/4)},clone:function(){var A=o.clone.call(this);return A.words=this.words.slice(0),A},random:function(A){for(var t=[],e=0;e>>2]>>>24-i%4*8&255;s.push((n>>>4).toString(16)),s.push((15&n).toString(16))}return s.join("")},parse:function(A){for(var t=A.length,e=[],s=0;s>>3]|=parseInt(A.substr(s,2),16)<<24-s%8*4;return new E.init(e,t/2)}},a=w.Latin1={stringify:function(A){for(var t=A.words,e=A.sigBytes,s=[],i=0;i>>2]>>>24-i%4*8&255;s.push(String.fromCharCode(n))}return s.join("")},parse:function(A){for(var t=A.length,e=[],s=0;s>>2]|=(255&A.charCodeAt(s))<<24-s%4*8;return new E.init(e,t)}},c=w.Utf8={stringify:function(A){try{return decodeURIComponent(escape(a.stringify(A)))}catch(A){throw new Error("Malformed UTF-8 data")}},parse:function(A){return a.parse(unescape(encodeURIComponent(A)))}},Q=B.BufferedBlockAlgorithm=o.extend({reset:function(){this._data=new E.init,this._nDataBytes=0},_append:function(A){"string"==typeof A&&(A=c.parse(A)),this._data.concat(A),this._nDataBytes+=A.sigBytes},_process:function(t){var e,s=this._data,i=s.words,n=s.sigBytes,r=this.blockSize,B=n/(4*r),o=(B=t?A.ceil(B):A.max((0|B)-this._minBufferSize,0))*r,w=A.min(4*o,n);if(o){for(var g=0;g>>2]>>>24-n%4*8&255)<<16|(t[n+1>>>2]>>>24-(n+1)%4*8&255)<<8|t[n+2>>>2]>>>24-(n+2)%4*8&255,B=0;B<4&&n+.75*B>>6*(3-B)&63));var o=s.charAt(64);if(o)for(;i.length%4;)i.push(o);return i.join("")},parse:function(A){var t=A.length,e=this._map,s=this._reverseMap;if(!s){s=this._reverseMap=[];for(var i=0;i>>6-r%4*2;s[i>>>2]|=B<<24-i%4*8,i++}return n.create(s,i)}(A,t,s)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="},s.enc.Base64)},375:function(A,t,e){"use strict";var s,i,n;e(94845),A.exports=(s=e(34559),n=(i=s).lib.WordArray,i.enc.Base64url={stringify:function(A,t){void 0===t&&(t=!0);var e=A.words,s=A.sigBytes,i=t?this._safe_map:this._map;A.clamp();for(var n=[],r=0;r>>2]>>>24-r%4*8&255)<<16|(e[r+1>>>2]>>>24-(r+1)%4*8&255)<<8|e[r+2>>>2]>>>24-(r+2)%4*8&255,o=0;o<4&&r+.75*o>>6*(3-o)&63));var E=i.charAt(64);if(E)for(;n.length%4;)n.push(E);return n.join("")},parse:function(A,t){void 0===t&&(t=!0);var e=A.length,s=t?this._safe_map:this._map,i=this._reverseMap;if(!i){i=this._reverseMap=[];for(var r=0;r>>6-r%4*2;s[i>>>2]|=B<<24-i%4*8,i++}return n.create(s,i)}(A,e,i)},_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",_safe_map:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"},s.enc.Base64url)},56217:function(A,t,e){"use strict";var s;e(94845),A.exports=(s=e(34559),function(){var A=s,t=A.lib.WordArray,e=A.enc;function i(A){return A<<8&4278255360|A>>>8&16711935}e.Utf16=e.Utf16BE={stringify:function(A){for(var t=A.words,e=A.sigBytes,s=[],i=0;i>>2]>>>16-i%4*8&65535;s.push(String.fromCharCode(n))}return s.join("")},parse:function(A){for(var e=A.length,s=[],i=0;i>>1]|=A.charCodeAt(i)<<16-i%2*16;return t.create(s,2*e)}},e.Utf16LE={stringify:function(A){for(var t=A.words,e=A.sigBytes,s=[],n=0;n>>2]>>>16-n%4*8&65535);s.push(String.fromCharCode(r))}return s.join("")},parse:function(A){for(var e=A.length,s=[],n=0;n>>1]|=i(A.charCodeAt(n)<<16-n%2*16);return t.create(s,2*e)}}}(),s.enc.Utf16)},36572:function(A,t,e){"use strict";var s,i,n,r,B,o,E,w;e(39081),A.exports=(w=e(34559),e(76289),e(30443),n=(i=(s=w).lib).Base,r=i.WordArray,o=(B=s.algo).MD5,E=B.EvpKDF=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:1}),init:function(A){this.cfg=this.cfg.extend(A)},compute:function(A,t){for(var e,s=this.cfg,i=s.hasher.create(),n=r.create(),B=n.words,o=s.keySize,E=s.iterations;B.lengths&&(t=A.finalize(t)),t.clamp();for(var i=this._oKey=t.clone(),r=this._iKey=t.clone(),B=i.words,o=r.words,E=0;E>>2]|=A[i]<<24-i%4*8;t.call(this,s,e)}else t.apply(this,arguments)};e.prototype=A}}(),s.lib.WordArray)},72342:function(A,t,e){"use strict";var s;A.exports=(s=e(34559),function(A){var t=s,e=t.lib,i=e.WordArray,n=e.Hasher,r=t.algo,B=[];!function(){for(var t=0;t<64;t++)B[t]=4294967296*A.abs(A.sin(t+1))|0}();var o=r.MD5=n.extend({_doReset:function(){this._hash=new i.init([1732584193,4023233417,2562383102,271733878])},_doProcessBlock:function(A,t){for(var e=0;e<16;e++){var s=t+e,i=A[s];A[s]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var n=this._hash.words,r=A[t+0],o=A[t+1],c=A[t+2],Q=A[t+3],C=A[t+4],h=A[t+5],u=A[t+6],l=A[t+7],I=A[t+8],f=A[t+9],D=A[t+10],b=A[t+11],d=A[t+12],v=A[t+13],Y=A[t+14],F=A[t+15],M=n[0],y=n[1],L=n[2],R=n[3];M=E(M,y,L,R,r,7,B[0]),R=E(R,M,y,L,o,12,B[1]),L=E(L,R,M,y,c,17,B[2]),y=E(y,L,R,M,Q,22,B[3]),M=E(M,y,L,R,C,7,B[4]),R=E(R,M,y,L,h,12,B[5]),L=E(L,R,M,y,u,17,B[6]),y=E(y,L,R,M,l,22,B[7]),M=E(M,y,L,R,I,7,B[8]),R=E(R,M,y,L,f,12,B[9]),L=E(L,R,M,y,D,17,B[10]),y=E(y,L,R,M,b,22,B[11]),M=E(M,y,L,R,d,7,B[12]),R=E(R,M,y,L,v,12,B[13]),L=E(L,R,M,y,Y,17,B[14]),M=w(M,y=E(y,L,R,M,F,22,B[15]),L,R,o,5,B[16]),R=w(R,M,y,L,u,9,B[17]),L=w(L,R,M,y,b,14,B[18]),y=w(y,L,R,M,r,20,B[19]),M=w(M,y,L,R,h,5,B[20]),R=w(R,M,y,L,D,9,B[21]),L=w(L,R,M,y,F,14,B[22]),y=w(y,L,R,M,C,20,B[23]),M=w(M,y,L,R,f,5,B[24]),R=w(R,M,y,L,Y,9,B[25]),L=w(L,R,M,y,Q,14,B[26]),y=w(y,L,R,M,I,20,B[27]),M=w(M,y,L,R,v,5,B[28]),R=w(R,M,y,L,c,9,B[29]),L=w(L,R,M,y,l,14,B[30]),M=g(M,y=w(y,L,R,M,d,20,B[31]),L,R,h,4,B[32]),R=g(R,M,y,L,I,11,B[33]),L=g(L,R,M,y,b,16,B[34]),y=g(y,L,R,M,Y,23,B[35]),M=g(M,y,L,R,o,4,B[36]),R=g(R,M,y,L,C,11,B[37]),L=g(L,R,M,y,l,16,B[38]),y=g(y,L,R,M,D,23,B[39]),M=g(M,y,L,R,v,4,B[40]),R=g(R,M,y,L,r,11,B[41]),L=g(L,R,M,y,Q,16,B[42]),y=g(y,L,R,M,u,23,B[43]),M=g(M,y,L,R,f,4,B[44]),R=g(R,M,y,L,d,11,B[45]),L=g(L,R,M,y,F,16,B[46]),M=a(M,y=g(y,L,R,M,c,23,B[47]),L,R,r,6,B[48]),R=a(R,M,y,L,l,10,B[49]),L=a(L,R,M,y,Y,15,B[50]),y=a(y,L,R,M,h,21,B[51]),M=a(M,y,L,R,d,6,B[52]),R=a(R,M,y,L,Q,10,B[53]),L=a(L,R,M,y,D,15,B[54]),y=a(y,L,R,M,o,21,B[55]),M=a(M,y,L,R,I,6,B[56]),R=a(R,M,y,L,F,10,B[57]),L=a(L,R,M,y,u,15,B[58]),y=a(y,L,R,M,v,21,B[59]),M=a(M,y,L,R,C,6,B[60]),R=a(R,M,y,L,b,10,B[61]),L=a(L,R,M,y,c,15,B[62]),y=a(y,L,R,M,f,21,B[63]),n[0]=n[0]+M|0,n[1]=n[1]+y|0,n[2]=n[2]+L|0,n[3]=n[3]+R|0},_doFinalize:function(){var t=this._data,e=t.words,s=8*this._nDataBytes,i=8*t.sigBytes;e[i>>>5]|=128<<24-i%32;var n=A.floor(s/4294967296),r=s;e[15+(i+64>>>9<<4)]=16711935&(n<<8|n>>>24)|4278255360&(n<<24|n>>>8),e[14+(i+64>>>9<<4)]=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),t.sigBytes=4*(e.length+1),this._process();for(var B=this._hash,o=B.words,E=0;E<4;E++){var w=o[E];o[E]=16711935&(w<<8|w>>>24)|4278255360&(w<<24|w>>>8)}return B},clone:function(){var A=n.clone.call(this);return A._hash=this._hash.clone(),A}});function E(A,t,e,s,i,n,r){var B=A+(t&e|~t&s)+i+r;return(B<>>32-n)+t}function w(A,t,e,s,i,n,r){var B=A+(t&s|e&~s)+i+r;return(B<>>32-n)+t}function g(A,t,e,s,i,n,r){var B=A+(t^e^s)+i+r;return(B<>>32-n)+t}function a(A,t,e,s,i,n,r){var B=A+(e^(t|~s))+i+r;return(B<>>32-n)+t}t.MD5=n._createHelper(o),t.HmacMD5=n._createHmacHelper(o)}(Math),s.MD5)},2727:function(A,t,e){"use strict";var s;e(20731),A.exports=(s=e(34559),e(28395),s.mode.CFB=function(){var A=s.lib.BlockCipherMode.extend();function t(A,t,e,s){var i,n=this._iv;n?(i=n.slice(0),this._iv=void 0):i=this._prevBlock,s.encryptBlock(i,0);for(var r=0;r>24&255)){var t=A>>16&255,e=A>>8&255,s=255&A;255===t?(t=0,255===e?(e=0,255===s?s=0:++s):++e):++t,A=0,A+=t<<16,A+=e<<8,A+=s}else A+=1<<24;return A}var e=A.Encryptor=A.extend({processBlock:function(A,e){var s=this._cipher,i=s.blockSize,n=this._iv,r=this._counter;n&&(r=this._counter=n.slice(0),this._iv=void 0),function(A){0===(A[0]=t(A[0]))&&(A[1]=t(A[1]))}(r);var B=r.slice(0);s.encryptBlock(B,0);for(var o=0;o>>2]|=i<<24-n%4*8,A.sigBytes+=i},unpad:function(A){var t=255&A.words[A.sigBytes-1>>>2];A.sigBytes-=t}},s.pad.Ansix923)},99215:function(A,t,e){"use strict";var s;e(39081),A.exports=(s=e(34559),e(28395),s.pad.Iso10126={pad:function(A,t){var e=4*t,i=e-A.sigBytes%e;A.concat(s.lib.WordArray.random(i-1)).concat(s.lib.WordArray.create([i<<24],1))},unpad:function(A){var t=255&A.words[A.sigBytes-1>>>2];A.sigBytes-=t}},s.pad.Iso10126)},43960:function(A,t,e){"use strict";var s;e(39081),A.exports=(s=e(34559),e(28395),s.pad.Iso97971={pad:function(A,t){A.concat(s.lib.WordArray.create([2147483648],1)),s.pad.ZeroPadding.pad(A,t)},unpad:function(A){s.pad.ZeroPadding.unpad(A),A.sigBytes--}},s.pad.Iso97971)},16934:function(A,t,e){"use strict";var s;A.exports=(s=e(34559),e(28395),s.pad.NoPadding={pad:function(){},unpad:function(){}},s.pad.NoPadding)},40681:function(A,t,e){"use strict";var s;A.exports=(s=e(34559),e(28395),s.pad.ZeroPadding={pad:function(A,t){var e=4*t;A.clamp(),A.sigBytes+=e-(A.sigBytes%e||e)},unpad:function(A){var t=A.words,e=A.sigBytes-1;for(e=A.sigBytes-1;e>=0;e--)if(t[e>>>2]>>>24-e%4*8&255){A.sigBytes=e+1;break}}},s.pad.ZeroPadding)},95729:function(A,t,e){"use strict";var s,i,n,r,B,o,E,w,g;e(39081),A.exports=(g=e(34559),e(26739),e(30443),n=(i=(s=g).lib).Base,r=i.WordArray,o=(B=s.algo).SHA256,E=B.HMAC,w=B.PBKDF2=n.extend({cfg:n.extend({keySize:4,hasher:o,iterations:25e4}),init:function(A){this.cfg=this.cfg.extend(A)},compute:function(A,t){for(var e=this.cfg,s=E.create(e.hasher,A),i=r.create(),n=r.create([1]),B=i.words,o=n.words,w=e.keySize,g=e.iterations;B.length>>16,A[1],A[0]<<16|A[3]>>>16,A[2],A[1]<<16|A[0]>>>16,A[3],A[2]<<16|A[1]>>>16],s=this._C=[A[2]<<16|A[2]>>>16,4294901760&A[0]|65535&A[1],A[3]<<16|A[3]>>>16,4294901760&A[1]|65535&A[2],A[0]<<16|A[0]>>>16,4294901760&A[2]|65535&A[3],A[1]<<16|A[1]>>>16,4294901760&A[3]|65535&A[0]];this._b=0;for(var i=0;i<4;i++)o.call(this);for(i=0;i<8;i++)s[i]^=e[i+4&7];if(t){var n=t.words,r=n[0],B=n[1],E=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),w=16711935&(B<<8|B>>>24)|4278255360&(B<<24|B>>>8),g=E>>>16|4294901760&w,a=w<<16|65535&E;for(s[0]^=E,s[1]^=g,s[2]^=w,s[3]^=a,s[4]^=E,s[5]^=g,s[6]^=w,s[7]^=a,i=0;i<4;i++)o.call(this)}},_doProcessBlock:function(A,t){var e=this._X;o.call(this),i[0]=e[0]^e[5]>>>16^e[3]<<16,i[1]=e[2]^e[7]>>>16^e[5]<<16,i[2]=e[4]^e[1]>>>16^e[7]<<16,i[3]=e[6]^e[3]>>>16^e[1]<<16;for(var s=0;s<4;s++)i[s]=16711935&(i[s]<<8|i[s]>>>24)|4278255360&(i[s]<<24|i[s]>>>8),A[t+s]^=i[s]},blockSize:4,ivSize:2});function o(){for(var A=this._X,t=this._C,e=0;e<8;e++)n[e]=t[e];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,e=0;e<8;e++){var s=A[e]+t[e],i=65535&s,B=s>>>16,o=((i*i>>>17)+i*B>>>15)+B*B,E=((4294901760&s)*s|0)+((65535&s)*s|0);r[e]=o^E}A[0]=r[0]+(r[7]<<16|r[7]>>>16)+(r[6]<<16|r[6]>>>16)|0,A[1]=r[1]+(r[0]<<8|r[0]>>>24)+r[7]|0,A[2]=r[2]+(r[1]<<16|r[1]>>>16)+(r[0]<<16|r[0]>>>16)|0,A[3]=r[3]+(r[2]<<8|r[2]>>>24)+r[1]|0,A[4]=r[4]+(r[3]<<16|r[3]>>>16)+(r[2]<<16|r[2]>>>16)|0,A[5]=r[5]+(r[4]<<8|r[4]>>>24)+r[3]|0,A[6]=r[6]+(r[5]<<16|r[5]>>>16)+(r[4]<<16|r[4]>>>16)|0,A[7]=r[7]+(r[6]<<8|r[6]>>>24)+r[5]|0}A.RabbitLegacy=t._createHelper(B)}(),s.RabbitLegacy)},55380:function(A,t,e){"use strict";var s;A.exports=(s=e(34559),e(49300),e(72342),e(36572),e(28395),function(){var A=s,t=A.lib.StreamCipher,e=A.algo,i=[],n=[],r=[],B=e.Rabbit=t.extend({_doReset:function(){for(var A=this._key.words,t=this.cfg.iv,e=0;e<4;e++)A[e]=16711935&(A[e]<<8|A[e]>>>24)|4278255360&(A[e]<<24|A[e]>>>8);var s=this._X=[A[0],A[3]<<16|A[2]>>>16,A[1],A[0]<<16|A[3]>>>16,A[2],A[1]<<16|A[0]>>>16,A[3],A[2]<<16|A[1]>>>16],i=this._C=[A[2]<<16|A[2]>>>16,4294901760&A[0]|65535&A[1],A[3]<<16|A[3]>>>16,4294901760&A[1]|65535&A[2],A[0]<<16|A[0]>>>16,4294901760&A[2]|65535&A[3],A[1]<<16|A[1]>>>16,4294901760&A[3]|65535&A[0]];for(this._b=0,e=0;e<4;e++)o.call(this);for(e=0;e<8;e++)i[e]^=s[e+4&7];if(t){var n=t.words,r=n[0],B=n[1],E=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),w=16711935&(B<<8|B>>>24)|4278255360&(B<<24|B>>>8),g=E>>>16|4294901760&w,a=w<<16|65535&E;for(i[0]^=E,i[1]^=g,i[2]^=w,i[3]^=a,i[4]^=E,i[5]^=g,i[6]^=w,i[7]^=a,e=0;e<4;e++)o.call(this)}},_doProcessBlock:function(A,t){var e=this._X;o.call(this),i[0]=e[0]^e[5]>>>16^e[3]<<16,i[1]=e[2]^e[7]>>>16^e[5]<<16,i[2]=e[4]^e[1]>>>16^e[7]<<16,i[3]=e[6]^e[3]>>>16^e[1]<<16;for(var s=0;s<4;s++)i[s]=16711935&(i[s]<<8|i[s]>>>24)|4278255360&(i[s]<<24|i[s]>>>8),A[t+s]^=i[s]},blockSize:4,ivSize:2});function o(){for(var A=this._X,t=this._C,e=0;e<8;e++)n[e]=t[e];for(t[0]=t[0]+1295307597+this._b|0,t[1]=t[1]+3545052371+(t[0]>>>0>>0?1:0)|0,t[2]=t[2]+886263092+(t[1]>>>0>>0?1:0)|0,t[3]=t[3]+1295307597+(t[2]>>>0>>0?1:0)|0,t[4]=t[4]+3545052371+(t[3]>>>0>>0?1:0)|0,t[5]=t[5]+886263092+(t[4]>>>0>>0?1:0)|0,t[6]=t[6]+1295307597+(t[5]>>>0>>0?1:0)|0,t[7]=t[7]+3545052371+(t[6]>>>0>>0?1:0)|0,this._b=t[7]>>>0>>0?1:0,e=0;e<8;e++){var s=A[e]+t[e],i=65535&s,B=s>>>16,o=((i*i>>>17)+i*B>>>15)+B*B,E=((4294901760&s)*s|0)+((65535&s)*s|0);r[e]=o^E}A[0]=r[0]+(r[7]<<16|r[7]>>>16)+(r[6]<<16|r[6]>>>16)|0,A[1]=r[1]+(r[0]<<8|r[0]>>>24)+r[7]|0,A[2]=r[2]+(r[1]<<16|r[1]>>>16)+(r[0]<<16|r[0]>>>16)|0,A[3]=r[3]+(r[2]<<8|r[2]>>>24)+r[1]|0,A[4]=r[4]+(r[3]<<16|r[3]>>>16)+(r[2]<<16|r[2]>>>16)|0,A[5]=r[5]+(r[4]<<8|r[4]>>>24)+r[3]|0,A[6]=r[6]+(r[5]<<16|r[5]>>>16)+(r[4]<<16|r[4]>>>16)|0,A[7]=r[7]+(r[6]<<8|r[6]>>>24)+r[5]|0}A.Rabbit=t._createHelper(B)}(),s.Rabbit)},76635:function(A,t,e){"use strict";var s;e(14032),e(68067),A.exports=(s=e(34559),e(49300),e(72342),e(36572),e(28395),function(){var A=s,t=A.lib.StreamCipher,e=A.algo,i=e.RC4=t.extend({_doReset:function(){for(var A=this._key,t=A.words,e=A.sigBytes,s=this._S=[],i=0;i<256;i++)s[i]=i;i=0;for(var n=0;i<256;i++){var r=i%e,B=t[r>>>2]>>>24-r%4*8&255;n=(n+s[i]+B)%256;var o=s[i];s[i]=s[n],s[n]=o}this._i=this._j=0},_doProcessBlock:function(A,t){A[t]^=n.call(this)},keySize:8,ivSize:0});function n(){for(var A=this._S,t=this._i,e=this._j,s=0,i=0;i<4;i++){e=(e+A[t=(t+1)%256])%256;var n=A[t];A[t]=A[e],A[e]=n,s|=A[(A[t]+A[e])%256]<<24-8*i}return this._i=t,this._j=e,s}A.RC4=t._createHelper(i);var r=e.RC4Drop=i.extend({cfg:i.cfg.extend({drop:192}),_doReset:function(){i._doReset.call(this);for(var A=this.cfg.drop;A>0;A--)n.call(this)}});A.RC4Drop=t._createHelper(r)}(),s.RC4)},76930:function(A,t,e){"use strict";var s;A.exports=(s=e(34559),function(A){var t=s,e=t.lib,i=e.WordArray,n=e.Hasher,r=t.algo,B=i.create([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13]),o=i.create([5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11]),E=i.create([11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6]),w=i.create([8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]),g=i.create([0,1518500249,1859775393,2400959708,2840853838]),a=i.create([1352829926,1548603684,1836072691,2053994217,0]),c=r.RIPEMD160=n.extend({_doReset:function(){this._hash=i.create([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(A,t){for(var e=0;e<16;e++){var s=t+e,i=A[s];A[s]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8)}var n,r,c,f,D,b,d,v,Y,F,M,y=this._hash.words,L=g.words,R=a.words,m=B.words,x=o.words,p=E.words,G=w.words;for(b=n=y[0],d=r=y[1],v=c=y[2],Y=f=y[3],F=D=y[4],e=0;e<80;e+=1)M=n+A[t+m[e]]|0,M+=e<16?Q(r,c,f)+L[0]:e<32?C(r,c,f)+L[1]:e<48?h(r,c,f)+L[2]:e<64?u(r,c,f)+L[3]:l(r,c,f)+L[4],M=(M=I(M|=0,p[e]))+D|0,n=D,D=f,f=I(c,10),c=r,r=M,M=b+A[t+x[e]]|0,M+=e<16?l(d,v,Y)+R[0]:e<32?u(d,v,Y)+R[1]:e<48?h(d,v,Y)+R[2]:e<64?C(d,v,Y)+R[3]:Q(d,v,Y)+R[4],M=(M=I(M|=0,G[e]))+F|0,b=F,F=Y,Y=I(v,10),v=d,d=M;M=y[1]+c+Y|0,y[1]=y[2]+f+F|0,y[2]=y[3]+D+b|0,y[3]=y[4]+n+d|0,y[4]=y[0]+r+v|0,y[0]=M},_doFinalize:function(){var A=this._data,t=A.words,e=8*this._nDataBytes,s=8*A.sigBytes;t[s>>>5]|=128<<24-s%32,t[14+(s+64>>>9<<4)]=16711935&(e<<8|e>>>24)|4278255360&(e<<24|e>>>8),A.sigBytes=4*(t.length+1),this._process();for(var i=this._hash,n=i.words,r=0;r<5;r++){var B=n[r];n[r]=16711935&(B<<8|B>>>24)|4278255360&(B<<24|B>>>8)}return i},clone:function(){var A=n.clone.call(this);return A._hash=this._hash.clone(),A}});function Q(A,t,e){return A^t^e}function C(A,t,e){return A&t|~A&e}function h(A,t,e){return(A|~t)^e}function u(A,t,e){return A&e|t&~e}function l(A,t,e){return A^(t|~e)}function I(A,t){return A<>>32-t}t.RIPEMD160=n._createHelper(c),t.HmacRIPEMD160=n._createHmacHelper(c)}(Math),s.RIPEMD160)},76289:function(A,t,e){"use strict";var s,i,n,r,B,o,E,w;A.exports=(i=(s=w=e(34559)).lib,n=i.WordArray,r=i.Hasher,B=s.algo,o=[],E=B.SHA1=r.extend({_doReset:function(){this._hash=new n.init([1732584193,4023233417,2562383102,271733878,3285377520])},_doProcessBlock:function(A,t){for(var e=this._hash.words,s=e[0],i=e[1],n=e[2],r=e[3],B=e[4],E=0;E<80;E++){if(E<16)o[E]=0|A[t+E];else{var w=o[E-3]^o[E-8]^o[E-14]^o[E-16];o[E]=w<<1|w>>>31}var g=(s<<5|s>>>27)+B+o[E];g+=E<20?1518500249+(i&n|~i&r):E<40?1859775393+(i^n^r):E<60?(i&n|i&r|n&r)-1894007588:(i^n^r)-899497514,B=r,r=n,n=i<<30|i>>>2,i=s,s=g}e[0]=e[0]+s|0,e[1]=e[1]+i|0,e[2]=e[2]+n|0,e[3]=e[3]+r|0,e[4]=e[4]+B|0},_doFinalize:function(){var A=this._data,t=A.words,e=8*this._nDataBytes,s=8*A.sigBytes;return t[s>>>5]|=128<<24-s%32,t[14+(s+64>>>9<<4)]=Math.floor(e/4294967296),t[15+(s+64>>>9<<4)]=e,A.sigBytes=4*t.length,this._process(),this._hash},clone:function(){var A=r.clone.call(this);return A._hash=this._hash.clone(),A}}),s.SHA1=r._createHelper(E),s.HmacSHA1=r._createHmacHelper(E),w.SHA1)},75230:function(A,t,e){"use strict";var s,i,n,r,B,o;A.exports=(o=e(34559),e(26739),i=(s=o).lib.WordArray,n=s.algo,r=n.SHA256,B=n.SHA224=r.extend({_doReset:function(){this._hash=new i.init([3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])},_doFinalize:function(){var A=r._doFinalize.call(this);return A.sigBytes-=4,A}}),s.SHA224=r._createHelper(B),s.HmacSHA224=r._createHmacHelper(B),o.SHA224)},26739:function(A,t,e){"use strict";var s;e(20731),A.exports=(s=e(34559),function(A){var t=s,e=t.lib,i=e.WordArray,n=e.Hasher,r=t.algo,B=[],o=[];!function(){function t(t){for(var e=A.sqrt(t),s=2;s<=e;s++)if(!(t%s))return!1;return!0}function e(A){return 4294967296*(A-(0|A))|0}for(var s=2,i=0;i<64;)t(s)&&(i<8&&(B[i]=e(A.pow(s,.5))),o[i]=e(A.pow(s,1/3)),i++),s++}();var E=[],w=r.SHA256=n.extend({_doReset:function(){this._hash=new i.init(B.slice(0))},_doProcessBlock:function(A,t){for(var e=this._hash.words,s=e[0],i=e[1],n=e[2],r=e[3],B=e[4],w=e[5],g=e[6],a=e[7],c=0;c<64;c++){if(c<16)E[c]=0|A[t+c];else{var Q=E[c-15],C=(Q<<25|Q>>>7)^(Q<<14|Q>>>18)^Q>>>3,h=E[c-2],u=(h<<15|h>>>17)^(h<<13|h>>>19)^h>>>10;E[c]=C+E[c-7]+u+E[c-16]}var l=s&i^s&n^i&n,I=(s<<30|s>>>2)^(s<<19|s>>>13)^(s<<10|s>>>22),f=a+((B<<26|B>>>6)^(B<<21|B>>>11)^(B<<7|B>>>25))+(B&w^~B&g)+o[c]+E[c];a=g,g=w,w=B,B=r+f|0,r=n,n=i,i=s,s=f+(I+l)|0}e[0]=e[0]+s|0,e[1]=e[1]+i|0,e[2]=e[2]+n|0,e[3]=e[3]+r|0,e[4]=e[4]+B|0,e[5]=e[5]+w|0,e[6]=e[6]+g|0,e[7]=e[7]+a|0},_doFinalize:function(){var t=this._data,e=t.words,s=8*this._nDataBytes,i=8*t.sigBytes;return e[i>>>5]|=128<<24-i%32,e[14+(i+64>>>9<<4)]=A.floor(s/4294967296),e[15+(i+64>>>9<<4)]=s,t.sigBytes=4*e.length,this._process(),this._hash},clone:function(){var A=n.clone.call(this);return A._hash=this._hash.clone(),A}});t.SHA256=n._createHelper(w),t.HmacSHA256=n._createHmacHelper(w)}(Math),s.SHA256)},80767:function(A,t,e){"use strict";var s;e(20731),A.exports=(s=e(34559),e(26478),function(A){var t=s,e=t.lib,i=e.WordArray,n=e.Hasher,r=t.x64.Word,B=t.algo,o=[],E=[],w=[];!function(){for(var A=1,t=0,e=0;e<24;e++){o[A+5*t]=(e+1)*(e+2)/2%64;var s=(2*A+3*t)%5;A=t%5,t=s}for(A=0;A<5;A++)for(t=0;t<5;t++)E[A+5*t]=t+(2*A+3*t)%5*5;for(var i=1,n=0;n<24;n++){for(var B=0,g=0,a=0;a<7;a++){if(1&i){var c=(1<>>24)|4278255360&(n<<24|n>>>8),r=16711935&(r<<8|r>>>24)|4278255360&(r<<24|r>>>8),(y=e[i]).high^=r,y.low^=n}for(var B=0;B<24;B++){for(var a=0;a<5;a++){for(var c=0,Q=0,C=0;C<5;C++)c^=(y=e[a+5*C]).high,Q^=y.low;var h=g[a];h.high=c,h.low=Q}for(a=0;a<5;a++){var u=g[(a+4)%5],l=g[(a+1)%5],I=l.high,f=l.low;for(c=u.high^(I<<1|f>>>31),Q=u.low^(f<<1|I>>>31),C=0;C<5;C++)(y=e[a+5*C]).high^=c,y.low^=Q}for(var D=1;D<25;D++){var b=(y=e[D]).high,d=y.low,v=o[D];v<32?(c=b<>>32-v,Q=d<>>32-v):(c=d<>>64-v,Q=b<>>64-v);var Y=g[E[D]];Y.high=c,Y.low=Q}var F=g[0],M=e[0];for(F.high=M.high,F.low=M.low,a=0;a<5;a++)for(C=0;C<5;C++){var y=e[D=a+5*C],L=g[D],R=g[(a+1)%5+5*C],m=g[(a+2)%5+5*C];y.high=L.high^~R.high&m.high,y.low=L.low^~R.low&m.low}y=e[0];var x=w[B];y.high^=x.high,y.low^=x.low}},_doFinalize:function(){var t=this._data,e=t.words,s=(this._nDataBytes,8*t.sigBytes),n=32*this.blockSize;e[s>>>5]|=1<<24-s%32,e[(A.ceil((s+1)/n)*n>>>5)-1]|=128,t.sigBytes=4*e.length,this._process();for(var r=this._state,B=this.cfg.outputLength/8,o=B/8,E=[],w=0;w>>24)|4278255360&(a<<24|a>>>8),c=16711935&(c<<8|c>>>24)|4278255360&(c<<24|c>>>8),E.push(c),E.push(a)}return new i.init(E,B)},clone:function(){for(var A=n.clone.call(this),t=A._state=this._state.slice(0),e=0;e<25;e++)t[e]=t[e].clone();return A}});t.SHA3=n._createHelper(a),t.HmacSHA3=n._createHmacHelper(a)}(Math),s.SHA3)},371:function(A,t,e){"use strict";var s,i,n,r,B,o,E,w;A.exports=(w=e(34559),e(26478),e(97074),i=(s=w).x64,n=i.Word,r=i.WordArray,B=s.algo,o=B.SHA512,E=B.SHA384=o.extend({_doReset:function(){this._hash=new r.init([new n.init(3418070365,3238371032),new n.init(1654270250,914150663),new n.init(2438529370,812702999),new n.init(355462360,4144912697),new n.init(1731405415,4290775857),new n.init(2394180231,1750603025),new n.init(3675008525,1694076839),new n.init(1203062813,3204075428)])},_doFinalize:function(){var A=o._doFinalize.call(this);return A.sigBytes-=16,A}}),s.SHA384=o._createHelper(E),s.HmacSHA384=o._createHmacHelper(E),w.SHA384)},97074:function(A,t,e){"use strict";var s;A.exports=(s=e(34559),e(26478),function(){var A=s,t=A.lib.Hasher,e=A.x64,i=e.Word,n=e.WordArray,r=A.algo;function B(){return i.create.apply(i,arguments)}var o=[B(1116352408,3609767458),B(1899447441,602891725),B(3049323471,3964484399),B(3921009573,2173295548),B(961987163,4081628472),B(1508970993,3053834265),B(2453635748,2937671579),B(2870763221,3664609560),B(3624381080,2734883394),B(310598401,1164996542),B(607225278,1323610764),B(1426881987,3590304994),B(1925078388,4068182383),B(2162078206,991336113),B(2614888103,633803317),B(3248222580,3479774868),B(3835390401,2666613458),B(4022224774,944711139),B(264347078,2341262773),B(604807628,2007800933),B(770255983,1495990901),B(1249150122,1856431235),B(1555081692,3175218132),B(1996064986,2198950837),B(2554220882,3999719339),B(2821834349,766784016),B(2952996808,2566594879),B(3210313671,3203337956),B(3336571891,1034457026),B(3584528711,2466948901),B(113926993,3758326383),B(338241895,168717936),B(666307205,1188179964),B(773529912,1546045734),B(1294757372,1522805485),B(1396182291,2643833823),B(1695183700,2343527390),B(1986661051,1014477480),B(2177026350,1206759142),B(2456956037,344077627),B(2730485921,1290863460),B(2820302411,3158454273),B(3259730800,3505952657),B(3345764771,106217008),B(3516065817,3606008344),B(3600352804,1432725776),B(4094571909,1467031594),B(275423344,851169720),B(430227734,3100823752),B(506948616,1363258195),B(659060556,3750685593),B(883997877,3785050280),B(958139571,3318307427),B(1322822218,3812723403),B(1537002063,2003034995),B(1747873779,3602036899),B(1955562222,1575990012),B(2024104815,1125592928),B(2227730452,2716904306),B(2361852424,442776044),B(2428436474,593698344),B(2756734187,3733110249),B(3204031479,2999351573),B(3329325298,3815920427),B(3391569614,3928383900),B(3515267271,566280711),B(3940187606,3454069534),B(4118630271,4000239992),B(116418474,1914138554),B(174292421,2731055270),B(289380356,3203993006),B(460393269,320620315),B(685471733,587496836),B(852142971,1086792851),B(1017036298,365543100),B(1126000580,2618297676),B(1288033470,3409855158),B(1501505948,4234509866),B(1607167915,987167468),B(1816402316,1246189591)],E=[];!function(){for(var A=0;A<80;A++)E[A]=B()}();var w=r.SHA512=t.extend({_doReset:function(){this._hash=new n.init([new i.init(1779033703,4089235720),new i.init(3144134277,2227873595),new i.init(1013904242,4271175723),new i.init(2773480762,1595750129),new i.init(1359893119,2917565137),new i.init(2600822924,725511199),new i.init(528734635,4215389547),new i.init(1541459225,327033209)])},_doProcessBlock:function(A,t){for(var e=this._hash.words,s=e[0],i=e[1],n=e[2],r=e[3],B=e[4],w=e[5],g=e[6],a=e[7],c=s.high,Q=s.low,C=i.high,h=i.low,u=n.high,l=n.low,I=r.high,f=r.low,D=B.high,b=B.low,d=w.high,v=w.low,Y=g.high,F=g.low,M=a.high,y=a.low,L=c,R=Q,m=C,x=h,p=u,G=l,W=I,P=f,H=D,S=b,U=d,N=v,T=Y,V=F,j=M,k=y,J=0;J<80;J++){var z,K,O=E[J];if(J<16)K=O.high=0|A[t+2*J],z=O.low=0|A[t+2*J+1];else{var Z=E[J-15],X=Z.high,q=Z.low,_=(X>>>1|q<<31)^(X>>>8|q<<24)^X>>>7,$=(q>>>1|X<<31)^(q>>>8|X<<24)^(q>>>7|X<<25),AA=E[J-2],tA=AA.high,eA=AA.low,sA=(tA>>>19|eA<<13)^(tA<<3|eA>>>29)^tA>>>6,iA=(eA>>>19|tA<<13)^(eA<<3|tA>>>29)^(eA>>>6|tA<<26),nA=E[J-7],rA=nA.high,BA=nA.low,oA=E[J-16],EA=oA.high,wA=oA.low;K=(K=(K=_+rA+((z=$+BA)>>>0<$>>>0?1:0))+sA+((z+=iA)>>>0>>0?1:0))+EA+((z+=wA)>>>0>>0?1:0),O.high=K,O.low=z}var gA,aA=H&U^~H&T,cA=S&N^~S&V,QA=L&m^L&p^m&p,CA=R&x^R&G^x&G,hA=(L>>>28|R<<4)^(L<<30|R>>>2)^(L<<25|R>>>7),uA=(R>>>28|L<<4)^(R<<30|L>>>2)^(R<<25|L>>>7),lA=(H>>>14|S<<18)^(H>>>18|S<<14)^(H<<23|S>>>9),IA=(S>>>14|H<<18)^(S>>>18|H<<14)^(S<<23|H>>>9),fA=o[J],DA=fA.high,bA=fA.low,dA=j+lA+((gA=k+IA)>>>0>>0?1:0),vA=uA+CA;j=T,k=V,T=U,V=N,U=H,N=S,H=W+(dA=(dA=(dA=dA+aA+((gA+=cA)>>>0>>0?1:0))+DA+((gA+=bA)>>>0>>0?1:0))+K+((gA+=z)>>>0>>0?1:0))+((S=P+gA|0)>>>0

>>0?1:0)|0,W=p,P=G,p=m,G=x,m=L,x=R,L=dA+(hA+QA+(vA>>>0>>0?1:0))+((R=gA+vA|0)>>>0>>0?1:0)|0}Q=s.low=Q+R,s.high=c+L+(Q>>>0>>0?1:0),h=i.low=h+x,i.high=C+m+(h>>>0>>0?1:0),l=n.low=l+G,n.high=u+p+(l>>>0>>0?1:0),f=r.low=f+P,r.high=I+W+(f>>>0

>>0?1:0),b=B.low=b+S,B.high=D+H+(b>>>0>>0?1:0),v=w.low=v+N,w.high=d+U+(v>>>0>>0?1:0),F=g.low=F+V,g.high=Y+T+(F>>>0>>0?1:0),y=a.low=y+k,a.high=M+j+(y>>>0>>0?1:0)},_doFinalize:function(){var A=this._data,t=A.words,e=8*this._nDataBytes,s=8*A.sigBytes;return t[s>>>5]|=128<<24-s%32,t[30+(s+128>>>10<<5)]=Math.floor(e/4294967296),t[31+(s+128>>>10<<5)]=e,A.sigBytes=4*t.length,this._process(),this._hash.toX32()},clone:function(){var A=t.clone.call(this);return A._hash=this._hash.clone(),A},blockSize:32});A.SHA512=t._createHelper(w),A.HmacSHA512=t._createHmacHelper(w)}(),s.SHA512)},64390:function(A,t,e){"use strict";var s;e(20731),A.exports=(s=e(34559),e(49300),e(72342),e(36572),e(28395),function(){var A=s,t=A.lib,e=t.WordArray,i=t.BlockCipher,n=A.algo,r=[57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4],B=[14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32],o=[1,2,4,6,8,10,12,14,15,17,19,21,23,25,27,28],E=[{0:8421888,268435456:32768,536870912:8421378,805306368:2,1073741824:512,1342177280:8421890,1610612736:8389122,1879048192:8388608,2147483648:514,2415919104:8389120,2684354560:33280,2952790016:8421376,3221225472:32770,3489660928:8388610,3758096384:0,4026531840:33282,134217728:0,402653184:8421890,671088640:33282,939524096:32768,1207959552:8421888,1476395008:512,1744830464:8421378,2013265920:2,2281701376:8389120,2550136832:33280,2818572288:8421376,3087007744:8389122,3355443200:8388610,3623878656:32770,3892314112:514,4160749568:8388608,1:32768,268435457:2,536870913:8421888,805306369:8388608,1073741825:8421378,1342177281:33280,1610612737:512,1879048193:8389122,2147483649:8421890,2415919105:8421376,2684354561:8388610,2952790017:33282,3221225473:514,3489660929:8389120,3758096385:32770,4026531841:0,134217729:8421890,402653185:8421376,671088641:8388608,939524097:512,1207959553:32768,1476395009:8388610,1744830465:2,2013265921:33282,2281701377:32770,2550136833:8389122,2818572289:514,3087007745:8421888,3355443201:8389120,3623878657:0,3892314113:33280,4160749569:8421378},{0:1074282512,16777216:16384,33554432:524288,50331648:1074266128,67108864:1073741840,83886080:1074282496,100663296:1073758208,117440512:16,134217728:540672,150994944:1073758224,167772160:1073741824,184549376:540688,201326592:524304,218103808:0,234881024:16400,251658240:1074266112,8388608:1073758208,25165824:540688,41943040:16,58720256:1073758224,75497472:1074282512,92274688:1073741824,109051904:524288,125829120:1074266128,142606336:524304,159383552:0,176160768:16384,192937984:1074266112,209715200:1073741840,226492416:540672,243269632:1074282496,260046848:16400,268435456:0,285212672:1074266128,301989888:1073758224,318767104:1074282496,335544320:1074266112,352321536:16,369098752:540688,385875968:16384,402653184:16400,419430400:524288,436207616:524304,452984832:1073741840,469762048:540672,486539264:1073758208,503316480:1073741824,520093696:1074282512,276824064:540688,293601280:524288,310378496:1074266112,327155712:16384,343932928:1073758208,360710144:1074282512,377487360:16,394264576:1073741824,411041792:1074282496,427819008:1073741840,444596224:1073758224,461373440:524304,478150656:0,494927872:16400,511705088:1074266128,528482304:540672},{0:260,1048576:0,2097152:67109120,3145728:65796,4194304:65540,5242880:67108868,6291456:67174660,7340032:67174400,8388608:67108864,9437184:67174656,10485760:65792,11534336:67174404,12582912:67109124,13631488:65536,14680064:4,15728640:256,524288:67174656,1572864:67174404,2621440:0,3670016:67109120,4718592:67108868,5767168:65536,6815744:65540,7864320:260,8912896:4,9961472:256,11010048:67174400,12058624:65796,13107200:65792,14155776:67109124,15204352:67174660,16252928:67108864,16777216:67174656,17825792:65540,18874368:65536,19922944:67109120,20971520:256,22020096:67174660,23068672:67108868,24117248:0,25165824:67109124,26214400:67108864,27262976:4,28311552:65792,29360128:67174400,30408704:260,31457280:65796,32505856:67174404,17301504:67108864,18350080:260,19398656:67174656,20447232:0,21495808:65540,22544384:67109120,23592960:256,24641536:67174404,25690112:65536,26738688:67174660,27787264:65796,28835840:67108868,29884416:67109124,30932992:67174400,31981568:4,33030144:65792},{0:2151682048,65536:2147487808,131072:4198464,196608:2151677952,262144:0,327680:4198400,393216:2147483712,458752:4194368,524288:2147483648,589824:4194304,655360:64,720896:2147487744,786432:2151678016,851968:4160,917504:4096,983040:2151682112,32768:2147487808,98304:64,163840:2151678016,229376:2147487744,294912:4198400,360448:2151682112,425984:0,491520:2151677952,557056:4096,622592:2151682048,688128:4194304,753664:4160,819200:2147483648,884736:4194368,950272:4198464,1015808:2147483712,1048576:4194368,1114112:4198400,1179648:2147483712,1245184:0,1310720:4160,1376256:2151678016,1441792:2151682048,1507328:2147487808,1572864:2151682112,1638400:2147483648,1703936:2151677952,1769472:4198464,1835008:2147487744,1900544:4194304,1966080:64,2031616:4096,1081344:2151677952,1146880:2151682112,1212416:0,1277952:4198400,1343488:4194368,1409024:2147483648,1474560:2147487808,1540096:64,1605632:2147483712,1671168:4096,1736704:2147487744,1802240:2151678016,1867776:4160,1933312:2151682048,1998848:4194304,2064384:4198464},{0:128,4096:17039360,8192:262144,12288:536870912,16384:537133184,20480:16777344,24576:553648256,28672:262272,32768:16777216,36864:537133056,40960:536871040,45056:553910400,49152:553910272,53248:0,57344:17039488,61440:553648128,2048:17039488,6144:553648256,10240:128,14336:17039360,18432:262144,22528:537133184,26624:553910272,30720:536870912,34816:537133056,38912:0,43008:553910400,47104:16777344,51200:536871040,55296:553648128,59392:16777216,63488:262272,65536:262144,69632:128,73728:536870912,77824:553648256,81920:16777344,86016:553910272,90112:537133184,94208:16777216,98304:553910400,102400:553648128,106496:17039360,110592:537133056,114688:262272,118784:536871040,122880:0,126976:17039488,67584:553648256,71680:16777216,75776:17039360,79872:537133184,83968:536870912,88064:17039488,92160:128,96256:553910272,100352:262272,104448:553910400,108544:0,112640:553648128,116736:16777344,120832:262144,124928:537133056,129024:536871040},{0:268435464,256:8192,512:270532608,768:270540808,1024:268443648,1280:2097152,1536:2097160,1792:268435456,2048:0,2304:268443656,2560:2105344,2816:8,3072:270532616,3328:2105352,3584:8200,3840:270540800,128:270532608,384:270540808,640:8,896:2097152,1152:2105352,1408:268435464,1664:268443648,1920:8200,2176:2097160,2432:8192,2688:268443656,2944:270532616,3200:0,3456:270540800,3712:2105344,3968:268435456,4096:268443648,4352:270532616,4608:270540808,4864:8200,5120:2097152,5376:268435456,5632:268435464,5888:2105344,6144:2105352,6400:0,6656:8,6912:270532608,7168:8192,7424:268443656,7680:270540800,7936:2097160,4224:8,4480:2105344,4736:2097152,4992:268435464,5248:268443648,5504:8200,5760:270540808,6016:270532608,6272:270540800,6528:270532616,6784:8192,7040:2105352,7296:2097160,7552:0,7808:268435456,8064:268443656},{0:1048576,16:33555457,32:1024,48:1049601,64:34604033,80:0,96:1,112:34603009,128:33555456,144:1048577,160:33554433,176:34604032,192:34603008,208:1025,224:1049600,240:33554432,8:34603009,24:0,40:33555457,56:34604032,72:1048576,88:33554433,104:33554432,120:1025,136:1049601,152:33555456,168:34603008,184:1048577,200:1024,216:34604033,232:1,248:1049600,256:33554432,272:1048576,288:33555457,304:34603009,320:1048577,336:33555456,352:34604032,368:1049601,384:1025,400:34604033,416:1049600,432:1,448:0,464:34603008,480:33554433,496:1024,264:1049600,280:33555457,296:34603009,312:1,328:33554432,344:1048576,360:1025,376:34604032,392:33554433,408:34603008,424:0,440:34604033,456:1049601,472:1024,488:33555456,504:1048577},{0:134219808,1:131072,2:134217728,3:32,4:131104,5:134350880,6:134350848,7:2048,8:134348800,9:134219776,10:133120,11:134348832,12:2080,13:0,14:134217760,15:133152,2147483648:2048,2147483649:134350880,2147483650:134219808,2147483651:134217728,2147483652:134348800,2147483653:133120,2147483654:133152,2147483655:32,2147483656:134217760,2147483657:2080,2147483658:131104,2147483659:134350848,2147483660:0,2147483661:134348832,2147483662:134219776,2147483663:131072,16:133152,17:134350848,18:32,19:2048,20:134219776,21:134217760,22:134348832,23:131072,24:0,25:131104,26:134348800,27:134219808,28:134350880,29:133120,30:2080,31:134217728,2147483664:131072,2147483665:2048,2147483666:134348832,2147483667:133152,2147483668:32,2147483669:134348800,2147483670:134217728,2147483671:134219808,2147483672:134350880,2147483673:134217760,2147483674:134219776,2147483675:0,2147483676:133120,2147483677:2080,2147483678:131104,2147483679:134350848}],w=[4160749569,528482304,33030144,2064384,129024,8064,504,2147483679],g=n.DES=i.extend({_doReset:function(){for(var A=this._key.words,t=[],e=0;e<56;e++){var s=r[e]-1;t[e]=A[s>>>5]>>>31-s%32&1}for(var i=this._subKeys=[],n=0;n<16;n++){var E=i[n]=[],w=o[n];for(e=0;e<24;e++)E[e/6|0]|=t[(B[e]-1+w)%28]<<31-e%6,E[4+(e/6|0)]|=t[28+(B[e+24]-1+w)%28]<<31-e%6;for(E[0]=E[0]<<1|E[0]>>>31,e=1;e<7;e++)E[e]=E[e]>>>4*(e-1)+3;E[7]=E[7]<<5|E[7]>>>27}var g=this._invSubKeys=[];for(e=0;e<16;e++)g[e]=i[15-e]},encryptBlock:function(A,t){this._doCryptBlock(A,t,this._subKeys)},decryptBlock:function(A,t){this._doCryptBlock(A,t,this._invSubKeys)},_doCryptBlock:function(A,t,e){this._lBlock=A[t],this._rBlock=A[t+1],a.call(this,4,252645135),a.call(this,16,65535),c.call(this,2,858993459),c.call(this,8,16711935),a.call(this,1,1431655765);for(var s=0;s<16;s++){for(var i=e[s],n=this._lBlock,r=this._rBlock,B=0,o=0;o<8;o++)B|=E[o][((r^i[o])&w[o])>>>0];this._lBlock=r,this._rBlock=n^B}var g=this._lBlock;this._lBlock=this._rBlock,this._rBlock=g,a.call(this,1,1431655765),c.call(this,8,16711935),c.call(this,2,858993459),a.call(this,16,65535),a.call(this,4,252645135),A[t]=this._lBlock,A[t+1]=this._rBlock},keySize:2,ivSize:2,blockSize:2});function a(A,t){var e=(this._lBlock>>>A^this._rBlock)&t;this._rBlock^=e,this._lBlock^=e<>>A^this._lBlock)&t;this._lBlock^=e,this._rBlock^=e<192.");var t=A.slice(0,2),s=A.length<4?A.slice(0,2):A.slice(2,4),i=A.length<6?A.slice(0,2):A.slice(4,6);this._des1=g.createEncryptor(e.create(t)),this._des2=g.createEncryptor(e.create(s)),this._des3=g.createEncryptor(e.create(i))},encryptBlock:function(A,t){this._des1.encryptBlock(A,t),this._des2.decryptBlock(A,t),this._des3.encryptBlock(A,t)},decryptBlock:function(A,t){this._des3.decryptBlock(A,t),this._des2.encryptBlock(A,t),this._des1.decryptBlock(A,t)},keySize:6,ivSize:2,blockSize:2});A.TripleDES=i._createHelper(Q)}(),s.TripleDES)},26478:function(A,t,e){"use strict";var s,i,n,r,B,o;e(20731),A.exports=(s=e(34559),n=(i=s).lib,r=n.Base,B=n.WordArray,(o=i.x64={}).Word=r.extend({init:function(A,t){this.high=A,this.low=t}}),o.WordArray=r.extend({init:function(A,t){A=this.words=A||[],this.sigBytes=null!=t?t:8*A.length},toX32:function(){for(var A=this.words,t=A.length,e=[],s=0;s=A.length?{done:!0}:{done:!1,value:A[s++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function i(A,t){(null==t||t>A.length)&&(t=A.length);for(var e=0,s=new Array(t);e=0;--n){var r=this.tryEntries[n],B=r.completion;if("root"===r.tryLoc)return i("end");if(r.tryLoc<=this.prev){var o=s.call(r,"catchLoc"),E=s.call(r,"finallyLoc");if(o&&E){if(this.prev=0;--e){var i=this.tryEntries[e];if(i.tryLoc<=this.prev&&s.call(i,"finallyLoc")&&this.prev=0;--t){var e=this.tryEntries[t];if(e.finallyLoc===A)return this.complete(e.completion,e.afterLoc),R(e),u}},catch:function(A){for(var t=this.tryEntries.length-1;t>=0;--t){var e=this.tryEntries[t];if(e.tryLoc===A){var s=e.completion;if("throw"===s.type){var i=s.arg;R(e)}return i}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,s){return this.delegate={iterator:x(t),resultName:e,nextLoc:s},"next"===this.method&&(this.arg=A),u}},t}e(35877),e(38178),e(11765),e(24863),e(43448),e(63956),e(71950),e(68067),e(57114),e(42437),e(65292),e(73844),e(69330),e(81755),e(20731),e(14032),e(61726),e(58281),e(6422),e(94712);var r=function(){function A(A){this.stateTable=A.stateTable,this.accepting=A.accepting,this.tags=A.tags}var t=A.prototype;return t.match=function(A){var t,e=this;return(t={})[Symbol.iterator]=n().mark((function t(){var s,i,r,B,o,E;return n().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:s=1,i=null,r=null,B=null,o=0;case 5:if(!(o=i)){t.next=13;break}return t.next=13,[i,r,e.tags[B]];case 13:s=e.stateTable[1][E],i=null;case 15:0!==s&&null==i&&(i=o),e.accepting[s]&&(r=o),0===s&&(s=1);case 18:o++,t.next=5;break;case 21:if(!(null!=i&&null!=r&&r>=i)){t.next=24;break}return t.next=24,[i,r,e.tags[s]];case 24:case"end":return t.stop()}}),t)})),t},t.apply=function(A,t){for(var e,i=s(this.match(A));!(e=i()).done;)for(var n,r=e.value,B=r[0],o=r[1],E=s(r[2]);!(n=E()).done;){var w=n.value;"function"==typeof t[w]&&t[w](B,o,A.slice(B,o+1))}},A}();A.exports=r},80646:function(A,t,e){"use strict";var s=e(50621).Buffer;e(58028),e(20731),e(14032),e(68067);var i=e(48181),n=e(6729);A.exports=function(){function A(A){var t;for(this.data=A,this.pos=8,this.palette=[],this.imgData=[],this.transparency={},this.text={};;){var e=this.readUInt32(),i="";for(t=0;t<4;t++)i+=String.fromCharCode(this.data[this.pos++]);switch(i){case"IHDR":this.width=this.readUInt32(),this.height=this.readUInt32(),this.bits=this.data[this.pos++],this.colorType=this.data[this.pos++],this.compressionMethod=this.data[this.pos++],this.filterMethod=this.data[this.pos++],this.interlaceMethod=this.data[this.pos++];break;case"PLTE":this.palette=this.read(e);break;case"IDAT":for(t=0;t0)for(t=0;tthis.data.length)throw new Error("Incomplete or corrupt PNG file")}}A.decode=function(t,e){return i.readFile(t,(function(t,s){return new A(s).decode((function(A){return e(A)}))}))},A.load=function(t){return new A(i.readFileSync(t))};var t=A.prototype;return t.read=function(A){for(var t=new Array(A),e=0;e=2*(1<<30))throw new RangeError('The value "'+A+'" is invalid for option "size"');var s=r(A);return t&&0!==t.length?"string"==typeof e?s.fill(t,e):s.fill(t):s.fill(0),s}),!B.kStringMaxLength)try{B.kStringMaxLength=s.binding("buffer").kStringMaxLength}catch(A){}B.constants||(B.constants={MAX_LENGTH:B.kMaxLength},B.kStringMaxLength&&(B.constants.MAX_STRING_LENGTH=B.kStringMaxLength)),A.exports=B},57540:function(A,t,e){"use strict";function s(A,t){var e=Object.keys(A);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(A);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(A,t).enumerable}))),e.push.apply(e,s)}return e}function i(A){for(var t=1;t0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:"unshift",value:function(A){var t={data:A,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:"shift",value:function(){if(0!==this.length){var A=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,A}}},{key:"clear",value:function(){this.head=this.tail=null,this.length=0}},{key:"join",value:function(A){if(0===this.length)return"";for(var t=this.head,e=""+t.data;t=t.next;)e+=A+t.data;return e}},{key:"concat",value:function(A){if(0===this.length)return o.alloc(0);for(var t,e,s,i=o.allocUnsafe(A>>>0),n=this.head,r=0;n;)t=n.data,e=i,s=r,o.prototype.copy.call(t,e,s),r+=n.data.length,n=n.next;return i}},{key:"consume",value:function(A,t){var e;return Ai.length?i.length:A;if(n===i.length?s+=i:s+=i.slice(0,A),0==(A-=n)){n===i.length?(++e,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=i.slice(n));break}++e}return this.length-=e,s}},{key:"_getBuffer",value:function(A){var t=o.allocUnsafe(A),e=this.head,s=1;for(e.data.copy(t),A-=e.data.length;e=e.next;){var i=e.data,n=A>i.length?i.length:A;if(i.copy(t,t.length-A,0,n),0==(A-=n)){n===i.length?(++s,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=i.slice(n));break}++s}return this.length-=s,t}},{key:w,value:function(A,t){return E(this,i(i({},t),{},{depth:0,customInspect:!1}))}}])&&r(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),A}()},72361:function(A,t,e){"use strict";e(41584);var s=e(50621),i=s.Buffer;function n(A,t){for(var e in A)t[e]=A[e]}function r(A,t,e){return i(A,t,e)}i.from&&i.alloc&&i.allocUnsafe&&i.allocUnsafeSlow?A.exports=s:(n(s,t),t.Buffer=r),n(i,r),r.from=function(A,t,e){if("number"==typeof A)throw new TypeError("Argument must not be a number");return i(A,t,e)},r.alloc=function(A,t,e){if("number"!=typeof A)throw new TypeError("Argument must be a number");var s=i(A);return void 0!==t?"string"==typeof e?s.fill(t,e):s.fill(t):s.fill(0),s},r.allocUnsafe=function(A){if("number"!=typeof A)throw new TypeError("Argument must be a number");return i(A)},r.allocUnsafeSlow=function(A){if("number"!=typeof A)throw new TypeError("Argument must be a number");return s.SlowBuffer(A)}},41209:function(A,t,e){"use strict";e(81755),e(20731),e(14032),e(56912),e(59735),e(73663),e(29883),e(35471),e(21012),e(88997),e(97464),e(2857),e(94715),e(13624),e(91132),e(62514),e(24597),e(88042),e(4660),e(92451),e(44206),e(66288),e(13250),e(3858),e(84538),e(64793),e(74202),e(52529);var s=e(3483),i=e(51014).swap32LE,n=function(){function A(A){var t="function"==typeof A.readUInt32BE&&"function"==typeof A.slice;if(t||A instanceof Uint8Array){var e;if(t)this.highStart=A.readUInt32LE(0),this.errorValue=A.readUInt32LE(4),e=A.readUInt32LE(8),A=A.slice(12);else{var n=new DataView(A.buffer);this.highStart=n.getUint32(0,!0),this.errorValue=n.getUint32(4,!0),e=n.getUint32(8,!0),A=A.subarray(12)}A=s(A,new Uint8Array(e)),A=s(A,new Uint8Array(e)),i(A),this.data=new Uint32Array(A.buffer)}else{var r=A;this.data=r.data,this.highStart=r.highStart,this.errorValue=r.errorValue}}return A.prototype.get=function(A){var t;return A<0||A>1114111?this.errorValue:A<55296||A>56319&&A<=65535?(t=(this.data[A>>5]<<2)+(31&A),this.data[t]):A<=65535?(t=(this.data[2048+(A-55296>>5)]<<2)+(31&A),this.data[t]):A>11)],t=((t=this.data[t+(A>>5&63)])<<2)+(31&A),this.data[t]):this.data[this.data.length-4]},A}();A.exports=n},51014:function(A,t,e){"use strict";e(81755),e(14032),e(56912),e(59735),e(73663),e(29883),e(35471),e(21012),e(88997),e(97464),e(2857),e(94715),e(13624),e(91132),e(62514),e(24597),e(88042),e(4660),e(92451),e(44206),e(66288),e(13250),e(3858),e(84538),e(64793),e(74202),e(52529);var s=18===new Uint8Array(new Uint32Array([305419896]).buffer)[0],i=function(A,t,e){var s=A[t];A[t]=A[e],A[e]=s};A.exports={swap32LE:function(A){s&&function(A){for(var t=A.length,e=0;e/)){for(;s=A();)r.childNodes.push(s),s.parentNode=r,r.textContent+=3===s.nodeType||4===s.nodeType?s.nodeValue:s.textContent;return(e=i.match(/^<\/([\w:.-]+)\s*>/,!0))?(e[1]===r.nodeName||(LA('parseXml: tag not matching, opening "'+r.nodeName+'" & closing "'+e[1]+'"'),n=!0),r):(LA('parseXml: tag not matching, opening "'+r.nodeName+'" & not closing'),n=!0,r)}if(i.match(/^\/>/))return r;LA('parseXml: tag could not be parsed "'+r.nodeName+'"'),n=!0}else{if(e=i.match(/^/))return new t(null,8,e,n);if(e=i.match(/^<\?[\s\S]*?\?>/))return new t(null,7,e,n);if(e=i.match(/^/))return new t(null,10,e,n);if(e=i.match(/^/,!0))return new t("#cdata-section",4,e[1],n);if(e=i.match(/^([^<]+)/,!0))return new t("#text",3,D(e[1]),n)}};s=r();)1!==s.nodeType||e?(1===s.nodeType||3===s.nodeType&&""!==s.nodeValue.trim())&&LA("parseXml: data after document end has been discarded"):e=s;return i.matchAll()&&LA("parseXml: parsing error"),e}function D(A){return A.replace(/&(?:#([0-9]+)|#[xX]([0-9A-Fa-f]+)|([0-9A-Za-z]+));/g,(function(A,t,e,s){return t?String.fromCharCode(parseInt(t,10)):e?String.fromCharCode(parseInt(e,16)):s&&B[s]?String.fromCharCode(B[s]):A}))}function b(A){var t,e;return A=(A||"").trim(),(t=n[A])?e=[t.slice(),1]:(t=A.match(/^rgba\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9.]+)\s*\)$/i))?(t[1]=parseInt(t[1]),t[2]=parseInt(t[2]),t[3]=parseInt(t[3]),t[4]=parseFloat(t[4]),t[1]<256&&t[2]<256&&t[3]<256&&t[4]<=1&&(e=[t.slice(1,4),t[4]])):(t=A.match(/^rgb\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)$/i))?(t[1]=parseInt(t[1]),t[2]=parseInt(t[2]),t[3]=parseInt(t[3]),t[1]<256&&t[2]<256&&t[3]<256&&(e=[t.slice(1,4),1])):(t=A.match(/^rgb\(\s*([0-9.]+)%\s*,\s*([0-9.]+)%\s*,\s*([0-9.]+)%\s*\)$/i))?(t[1]=2.55*parseFloat(t[1]),t[2]=2.55*parseFloat(t[2]),t[3]=2.55*parseFloat(t[3]),t[1]<256&&t[2]<256&&t[3]<256&&(e=[t.slice(1,4),1])):(t=A.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i))?e=[[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)],1]:(t=A.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i))&&(e=[[17*parseInt(t[1],16),17*parseInt(t[2],16),17*parseInt(t[3],16)],1]),xA?xA(e,A):e}function d(A,t,e){var s=A[0].slice(),i=A[1]*t;if(e){for(var n=0;n=0;e--)t=v(WA[e].savedMatrix,t);return t}function M(){return(new Z).M(0,0).L(A.page.width,0).L(A.page.width,A.page.height).L(0,A.page.height).transform(y(F())).getBoundingBox()}function y(A){var t=A[0]*A[3]-A[1]*A[2];return[A[3]/t,-A[1]/t,-A[2]/t,A[0]/t,(A[2]*A[5]-A[3]*A[4])/t,(A[1]*A[4]-A[0]*A[5])/t]}function L(A){var t=G(A[0]),e=G(A[1]),s=G(A[2]),i=G(A[3]),n=G(A[4]),r=G(A[5]);if(p(t*i-e*s,0))return[t,e,s,i,n,r]}function R(A){var t=A[2]||0,e=A[1]||0,s=A[0]||0;if(x(t,0)&&x(e,0))return[];if(x(t,0))return[-s/e];var i=e*e-4*t*s;return p(i,0)&&i>0?[(-e+Math.sqrt(i))/(2*t),(-e-Math.sqrt(i))/(2*t)]:x(i,0)?[-e/(2*t)]:[]}function m(A,t){return(t[0]||0)+(t[1]||0)*A+(t[2]||0)*A*A+(t[3]||0)*A*A*A}function x(A,t){return Math.abs(A-t)<1e-10}function p(A,t){return Math.abs(A-t)>=1e-10}function G(A){return A>-1e21&&A<1e21?Math.round(1e6*A)/1e6:0}function W(A){for(var t,e=new z((A||"").trim()),s=[1,0,0,1,0,0];t=e.match(/^([A-Za-z]+)\s*[(]([^(]+)[)]/,!0);){for(var i=t[1],n=[],r=new z(t[2].trim()),B=void 0;B=r.matchNumber();)n.push(Number(B)),r.matchSeparator();if("matrix"===i&&6===n.length)s=v(s,[n[0],n[1],n[2],n[3],n[4],n[5]]);else if("translate"===i&&2===n.length)s=v(s,[1,0,0,1,n[0],n[1]]);else if("translate"===i&&1===n.length)s=v(s,[1,0,0,1,n[0],0]);else if("scale"===i&&2===n.length)s=v(s,[n[0],0,0,n[1],0,0]);else if("scale"===i&&1===n.length)s=v(s,[n[0],0,0,n[0],0,0]);else if("rotate"===i&&3===n.length){var o=n[0]*Math.PI/180;s=v(s,[1,0,0,1,n[1],n[2]],[Math.cos(o),Math.sin(o),-Math.sin(o),Math.cos(o),0,0],[1,0,0,1,-n[1],-n[2]])}else if("rotate"===i&&1===n.length){var E=n[0]*Math.PI/180;s=v(s,[Math.cos(E),Math.sin(E),-Math.sin(E),Math.cos(E),0,0])}else if("skewX"===i&&1===n.length){var w=n[0]*Math.PI/180;s=v(s,[1,0,Math.tan(w),1,0,0])}else{if("skewY"!==i||1!==n.length)return;var g=n[0]*Math.PI/180;s=v(s,[1,Math.tan(g),0,1,0,0])}e.matchSeparator()}if(!e.matchAll())return s}function P(A,t,e,s,i,n){var r=(A||"").trim().match(/^(none)$|^x(Min|Mid|Max)Y(Min|Mid|Max)(?:\s+(meet|slice))?$/)||[],B=r[1]||r[4]||"meet",o=r[2]||"Mid",E=r[3]||"Mid",w=t/s,g=e/i,a={Min:0,Mid:.5,Max:1}[o]-(n||0),c={Min:0,Mid:.5,Max:1}[E]-(n||0);return"slice"===B?g=w=Math.max(w,g):"meet"===B&&(g=w=Math.min(w,g)),[w,0,0,g,a*(t-s*w),c*(e-i*g)]}function H(A){var t=Object.create(null);A=(A||"").trim().split(/;/);for(var e=0;es&&(A=s,s=t,t=A),e>i&&(A=i,i=e,e=A);for(var n=R(g),r=0;r=0&&n[r]<=1){var B=m(n[r],E);Bs&&(s=B)}for(var o=R(a),c=0;c=0&&o[c]<=1){var Q=m(o[c],w);Qi&&(i=Q)}return[t,e,s,i]},this.getPointAtLength=function(A){if(x(A,0))return this.startPoint;if(x(A,this.totalLength))return this.endPoint;if(!(A<0||A>this.totalLength))for(var t=1;t<=o;t++){var e=c[t-1],s=c[t];if(e<=A&&A<=s){var i=(t-(s-A)/(s-e))/o,n=m(i,E),r=m(i,w),B=m(i,g),Q=m(i,a);return[n,r,Math.atan2(Q,B)]}}}},O=function(A,t,e,s){this.totalLength=Math.sqrt((e-A)*(e-A)+(s-t)*(s-t)),this.startPoint=[A,t,Math.atan2(s-t,e-A)],this.endPoint=[e,s,Math.atan2(s-t,e-A)],this.getBoundingBox=function(){return[Math.min(this.startPoint[0],this.endPoint[0]),Math.min(this.startPoint[1],this.endPoint[1]),Math.max(this.startPoint[0],this.endPoint[0]),Math.max(this.startPoint[1],this.endPoint[1])]},this.getPointAtLength=function(A){if(A>=0&&A<=this.totalLength){var t=A/this.totalLength||0;return[this.startPoint[0]+t*(this.endPoint[0]-this.startPoint[0]),this.startPoint[1]+t*(this.endPoint[1]-this.startPoint[1]),this.startPoint[2]]}}},Z=function t(){this.pathCommands=[],this.pathSegments=[],this.startPoint=null,this.endPoint=null,this.totalLength=0;var e,s,i,n=0,r=0,B=0,w=0;this.move=function(A,t){return n=B=A,r=w=t,null},this.line=function(A,t){var e=new O(B,w,A,t);return B=A,w=t,e},this.curve=function(A,t,e,s,i,n){var r=new K(B,w,A,t,e,s,i,n);return B=i,w=n,r},this.close=function(){var A=new O(B,w,n,r);return B=n,w=r,A},this.addCommand=function(A){this.pathCommands.push(A);var t=this[A[0]].apply(this,A.slice(3));t&&(t.hasStart=A[1],t.hasEnd=A[2],this.startPoint=this.startPoint||t.startPoint,this.endPoint=t.endPoint,this.pathSegments.push(t),this.totalLength+=t.totalLength)},this.M=function(A,t){return this.addCommand(["move",!0,!0,A,t]),e="M",this},this.m=function(A,t){return this.M(B+A,w+t)},this.Z=this.z=function(){return this.addCommand(["close",!0,!0]),e="Z",this},this.L=function(A,t){return this.addCommand(["line",!0,!0,A,t]),e="L",this},this.l=function(A,t){return this.L(B+A,w+t)},this.H=function(A){return this.L(A,w)},this.h=function(A){return this.L(B+A,w)},this.V=function(A){return this.L(B,A)},this.v=function(A){return this.L(B,w+A)},this.C=function(A,t,n,r,B,o){return this.addCommand(["curve",!0,!0,A,t,n,r,B,o]),e="C",s=n,i=r,this},this.c=function(A,t,e,s,i,n){return this.C(B+A,w+t,B+e,w+s,B+i,w+n)},this.S=function(A,t,n,r){return this.C(B+("C"===e?B-s:0),w+("C"===e?w-i:0),A,t,n,r)},this.s=function(A,t,n,r){return this.C(B+("C"===e?B-s:0),w+("C"===e?w-i:0),B+A,w+t,B+n,w+r)},this.Q=function(A,t,n,r){var o=B+2/3*(A-B),E=w+2/3*(t-w),g=n+2/3*(A-n),a=r+2/3*(t-r);return this.addCommand(["curve",!0,!0,o,E,g,a,n,r]),e="Q",s=A,i=t,this},this.q=function(A,t,e,s){return this.Q(B+A,w+t,B+e,w+s)},this.T=function(A,t){return this.Q(B+("Q"===e?B-s:0),w+("Q"===e?w-i:0),A,t)},this.t=function(A,t){return this.Q(B+("Q"===e?B-s:0),w+("Q"===e?w-i:0),B+A,w+t)},this.A=function(A,t,s,i,n,r,o){if(x(A,0)||x(t,0))this.addCommand(["line",!0,!0,r,o]);else{s*=Math.PI/180,A=Math.abs(A),t=Math.abs(t),i=1*!!i,n=1*!!n;var E=Math.cos(s)*(B-r)/2+Math.sin(s)*(w-o)/2,g=Math.cos(s)*(w-o)/2-Math.sin(s)*(B-r)/2,a=E*E/(A*A)+g*g/(t*t);a>1&&(A*=Math.sqrt(a),t*=Math.sqrt(a));var c=Math.sqrt(Math.max(0,A*A*t*t-A*A*g*g-t*t*E*E)/(A*A*g*g+t*t*E*E)),Q=(i===n?-1:1)*c*A*g/t,C=(i===n?1:-1)*c*t*E/A,h=Math.cos(s)*Q-Math.sin(s)*C+(B+r)/2,u=Math.sin(s)*Q+Math.cos(s)*C+(w+o)/2,l=Math.atan2((g-C)/t,(E-Q)/A),I=Math.atan2((-g-C)/t,(-E-Q)/A);0===n&&I-l>0?I-=2*Math.PI:1===n&&I-l<0&&(I+=2*Math.PI);for(var f=Math.ceil(Math.abs(I-l)/(Math.PI/GA)),D=0;Dt[2]&&(t[2]=A[2]),A[1]t[3]&&(t[3]=A[3]);return t[0]===1/0&&(t[0]=0),t[1]===1/0&&(t[1]=0),t[2]===-1/0&&(t[2]=0),t[3]===-1/0&&(t[3]=0),t},this.getPointAtLength=function(A){if(A>=0&&A<=this.totalLength){for(var t,e=0;ei.selector.specificity||(t[n]=i.css[n],e[n]=i.selector.specificity)}return t}(A),this.allowedChildren=[],this.attr=function(t){if("function"==typeof A.getAttribute)return A.getAttribute(t)},this.resolveUrl=function(A){var e,s=(A||"").match(/^\s*(?:url\("(.*)#(.*)"\)|url\('(.*)#(.*)'\)|url\((.*)#(.*)\)|(.*)#(.*))\s*$/)||[],i=s[1]||s[3]||s[5]||s[7],n=s[2]||s[4]||s[6]||s[8];if(n){if(!i){var r=t.getElementById(n);if(r)return-1===this.stack.indexOf(r)?r:void LA('SVGtoPDF: loop of circular references for id "'+n+'"')}if(pA){var B=PA[i];if(!B){("object"!=typeof(e=B=pA(i))||null===e||"number"!=typeof e.length)&&(B=[B]);for(var o=0;o=0&&e[3]>=0?e:t},this.getPercent=function(A,t){var e=this.attr(A),s=new z((e||"").trim()),i=s.matchNumber();return i?(s.match("%")&&(i*=.01),s.matchAll()?t:Math.max(0,Math.min(1,i))):t},this.chooseValue=function(A){for(var t=0;t=0&&(e=r);break;case"stroke-miterlimit":null!=(r=parseFloat(t))&&r>=1&&(e=r);break;case"word-spacing":case"letter-spacing":e=this.computeLength(t,this.getViewport());break;case"stroke-dashoffset":if(null!=(e=this.computeLength(t,this.getViewport()))&&e<0)for(var c=this.get("stroke-dasharray"),Q=0;Q0?A:this.ref?this.ref.getChildren():[]},this.getPaint=function(t,e,s,n){var r="userSpaceOnUse"!==this.attr("patternUnits"),B="objectBoundingBox"===this.attr("patternContentUnits"),o=this.getLength("x",r?1:this.getParentVWidth(),0),E=this.getLength("y",r?1:this.getParentVHeight(),0),w=this.getLength("width",r?1:this.getParentVWidth(),0),c=this.getLength("height",r?1:this.getParentVHeight(),0);B&&!r?(o=(o-t[0])/(t[2]-t[0])||0,E=(E-t[1])/(t[3]-t[1])||0,w=w/(t[2]-t[0])||0,c=c/(t[3]-t[1])||0):!B&&r&&(o=t[0]+o*(t[2]-t[0]),E=t[1]+E*(t[3]-t[1]),w*=t[2]-t[0],c*=t[3]-t[1]);var Q=this.getViewbox("viewBox",[0,0,w,c]),h=v(P((this.attr("preserveAspectRatio")||"").trim(),w,c,Q[2],Q[3],0),[1,0,0,1,-Q[0],-Q[1]]),u=W(this.attr("patternTransform"));if(B&&(u=v([t[2]-t[0],0,0,t[3]-t[1],t[0],t[1]],u)),(u=L(u=v(u,[1,0,0,1,o,E])))&&(h=L(h))&&(w=G(w))&&(c=G(c))){var l=g([0,0,w,c]);return A.transform.apply(A,h),this.drawChildren(s,n),a(l),[C(l,w,c,u),e]}return i?[i[0],i[1]*e]:void 0},this.getVWidth=function(){var A="userSpaceOnUse"!==this.attr("patternUnits"),t=this.getLength("width",A?1:this.getParentVWidth(),0);return this.getViewbox("viewBox",[0,0,t,0])[2]},this.getVHeight=function(){var A="userSpaceOnUse"!==this.attr("patternUnits"),t=this.getLength("height",A?1:this.getParentVHeight(),0);return this.getViewbox("viewBox",[0,0,0,t])[3]}},BA=function t(e,s,i){X.call(this,e,s),this.allowedChildren=["stop"],this.ref=function(){var A=this.getUrl("href")||this.getUrl("xlink:href");if(A&&A.nodeName===e.nodeName)return new t(A,s,i)}.call(this);var n=this.attr;this.attr=function(A){var t=n.call(this,A);return null!=t||"href"===A||"xlink:href"===A?t:this.ref?this.ref.attr(A):null};var B=this.getChildren;this.getChildren=function(){var A=B.call(this);return A.length>0?A:this.ref?this.ref.getChildren():[]},this.getPaint=function(t,e,s,n){var B=this.getChildren();if(0!==B.length){if(1===B.length){var o=B[0],E=o.get("stop-color");if("none"===E)return;return d(E,o.get("stop-opacity")*e,n)}var w,g,a,c,Q,C,h="userSpaceOnUse"!==this.attr("gradientUnits"),u=W(this.attr("gradientTransform")),l=this.attr("spreadMethod"),I=0,f=0,D=1;if(h&&(u=v([t[2]-t[0],0,0,t[3]-t[1],t[0],t[1]],u)),u=L(u)){if("linearGradient"===this.name)g=this.getLength("x1",h?1:this.getVWidth(),0),a=this.getLength("x2",h?1:this.getVWidth(),h?1:this.getVWidth()),c=this.getLength("y1",h?1:this.getVHeight(),0),Q=this.getLength("y2",h?1:this.getVHeight(),0);else{a=this.getLength("cx",h?1:this.getVWidth(),h?.5:.5*this.getVWidth()),Q=this.getLength("cy",h?1:this.getVHeight(),h?.5:.5*this.getVHeight()),C=this.getLength("r",h?1:this.getViewport(),h?.5:.5*this.getViewport()),g=this.getLength("fx",h?1:this.getVWidth(),a),c=this.getLength("fy",h?1:this.getVHeight(),Q),C<0&&LA("SvgElemGradient: negative r value");var b=Math.sqrt(Math.pow(a-g,2)+Math.pow(Q-c,2)),F=1;b>C&&(g=a+(g-a)*(F=C/b),c=Q+(c-Q)*F),C=Math.max(C,b*F*1.000001)}if("reflect"===l||"repeat"===l){var M=y(u),R=Y([t[0],t[1]],M),m=Y([t[2],t[1]],M),x=Y([t[2],t[3]],M),p=Y([t[0],t[3]],M);"linearGradient"===this.name?(I=Math.max((R[0]-a)*(a-g)+(R[1]-Q)*(Q-c),(m[0]-a)*(a-g)+(m[1]-Q)*(Q-c),(x[0]-a)*(a-g)+(x[1]-Q)*(Q-c),(p[0]-a)*(a-g)+(p[1]-Q)*(Q-c))/(Math.pow(a-g,2)+Math.pow(Q-c,2)),f=Math.max((R[0]-g)*(g-a)+(R[1]-c)*(c-Q),(m[0]-g)*(g-a)+(m[1]-c)*(c-Q),(x[0]-g)*(g-a)+(x[1]-c)*(c-Q),(p[0]-g)*(g-a)+(p[1]-c)*(c-Q))/(Math.pow(a-g,2)+Math.pow(Q-c,2))):I=Math.sqrt(Math.max(Math.pow(R[0]-a,2)+Math.pow(R[1]-Q,2),Math.pow(m[0]-a,2)+Math.pow(m[1]-Q,2),Math.pow(x[0]-a,2)+Math.pow(x[1]-Q,2),Math.pow(p[0]-a,2)+Math.pow(p[1]-Q,2)))/C-1,I=Math.ceil(I+.5),D=(f=Math.ceil(f+.5))+1+I}w="linearGradient"===this.name?A.linearGradient(g-f*(a-g),c-f*(Q-c),a+I*(a-g),Q+I*(Q-c)):A.radialGradient(g,c,0,a,Q,C+I*C);for(var G=0;G0&&w.stop((G+0)/D,N[0],N[1]),w.stop((G+P)/(I+f+1),N[0],N[1]),S===B.length-1&&P<1&&w.stop((G+1)/D,N[0],N[1])}return w.setTransform.apply(w,u),[w,1]}return i?[i[0],i[1]*e]:void 0}}},oA=function(t,e){q.call(this,t,e),this.dashScale=1,this.getBoundingShape=function(){return this.shape},this.getTransformation=function(){return this.get("transform")},this.drawInDocument=function(t,e){if("hidden"!==this.get("visibility")&&this.shape){if(A.save(),this.transform(),this.clip(),t)this.shape.insertInDocument(),l(r.white),A.fill(this.get("clip-rule"));else{var s;this.mask()&&(s=g(M()));var i=this.shape.getSubPaths(),n=this.getFill(t,e),B=this.getStroke(t,e),o=this.get("stroke-width"),E=this.get("stroke-linecap");if(n||B){if(n&&l(n),B){for(var w=0;w0&&i[w].startPoint&&i[w].startPoint.length>1){var Q=i[w].startPoint[0],C=i[w].startPoint[1];l(B),"square"===E?A.rect(Q-.5*o,C-.5*o,o,o):"round"===E&&A.circle(Q,C,.5*o),A.fill()}var h=this.get("stroke-dasharray"),u=this.get("stroke-dashoffset");if(p(this.dashScale,1)){for(var f=0;f0&&i[D].insertInDocument();n&&B?A.fillAndStroke(this.get("fill-rule")):n?A.fill(this.get("fill-rule")):B&&A.stroke()}var b=this.get("marker-start"),d=this.get("marker-mid"),v=this.get("marker-end");if("none"!==b||"none"!==d||"none"!==v){var Y=this.shape.getMarkers();if("none"!==b&&new hA(b,null).drawMarker(!1,e,Y[0],o),"none"!==d)for(var F=1;F0&&n>0?r&&B?(r=Math.min(r,.5*i),B=Math.min(B,.5*n),this.shape=(new Z).M(e+r,s).L(e+i-r,s).A(r,B,0,0,1,e+i,s+B).L(e+i,s+n-B).A(r,B,0,0,1,e+i-r,s+n).L(e+r,s+n).A(r,B,0,0,1,e,s+n-B).L(e,s+B).A(r,B,0,0,1,e+r,s).Z()):this.shape=(new Z).M(e,s).L(e+i,s).L(e+i,s+n).L(e,s+n).Z():this.shape=new Z},wA=function(A,t){oA.call(this,A,t);var e=this.getLength("cx",this.getVWidth(),0),s=this.getLength("cy",this.getVHeight(),0),i=this.getLength("r",this.getViewport(),0);this.shape=i>0?(new Z).M(e+i,s).A(i,i,0,0,1,e-i,s).A(i,i,0,0,1,e+i,s).Z():new Z},gA=function(A,t){oA.call(this,A,t);var e=this.getLength("cx",this.getVWidth(),0),s=this.getLength("cy",this.getVHeight(),0),i=this.getLength("rx",this.getVWidth(),0),n=this.getLength("ry",this.getVHeight(),0);this.shape=i>0&&n>0?(new Z).M(e+i,s).A(i,n,0,0,1,e-i,s).A(i,n,0,0,1,e+i,s).Z():new Z},aA=function(A,t){oA.call(this,A,t);var e=this.getLength("x1",this.getVWidth(),0),s=this.getLength("y1",this.getVHeight(),0),i=this.getLength("x2",this.getVWidth(),0),n=this.getLength("y2",this.getVHeight(),0);this.shape=(new Z).M(e,s).L(i,n)},cA=function(A,t){oA.call(this,A,t);var e=this.getNumberList("points");this.shape=new Z;for(var s=0;s0?e:void 0,this.dashScale=void 0!==this.pathLength?this.shape.totalLength/this.pathLength:1},hA=function(t,e){_.call(this,t,e);var s=this.getLength("markerWidth",this.getParentVWidth(),3),i=this.getLength("markerHeight",this.getParentVHeight(),3),n=this.getViewbox("viewBox",[0,0,s,i]);this.getVWidth=function(){return n[2]},this.getVHeight=function(){return n[3]},this.drawMarker=function(t,e,r,B){A.save();var o=this.attr("orient"),E=this.attr("markerUnits"),w="auto"===o?r[2]:(parseFloat(o)||0)*Math.PI/180,Q="userSpaceOnUse"===E?1:B;A.transform(Math.cos(w)*Q,Math.sin(w)*Q,-Math.sin(w)*Q,Math.cos(w)*Q,r[0],r[1]);var C,h=this.getLength("refX",this.getVWidth(),0),u=this.getLength("refY",this.getVHeight(),0),l=P(this.attr("preserveAspectRatio"),s,i,n[2],n[3],.5);"hidden"===this.get("overflow")&&A.rect(l[0]*(n[0]+n[2]/2-h)-s/2,l[3]*(n[1]+n[3]/2-u)-i/2,s,i).clip(),A.transform.apply(A,l),A.translate(-h,-u),this.get("opacity")<1&&!t&&(C=g(M())),this.drawChildren(t,e),C&&(a(C),A.fillOpacity(this.get("opacity")),c(C)),A.restore()}},uA=function(t,e){_.call(this,t,e),this.useMask=function(t){var e=g(M());A.save(),"objectBoundingBox"===this.attr("clipPathUnits")&&A.transform(t[2]-t[0],0,0,t[3]-t[1],t[0],t[1]),this.clip(),this.drawChildren(!0,!1),A.restore(),a(e),Q(e,!0)}},lA=function(t,e){_.call(this,t,e),this.useMask=function(t){var e,s,i,n,r=g(M());A.save(),"userSpaceOnUse"===this.attr("maskUnits")?(e=this.getLength("x",this.getVWidth(),-.1*(t[2]-t[0])+t[0]),s=this.getLength("y",this.getVHeight(),-.1*(t[3]-t[1])+t[1]),i=this.getLength("width",this.getVWidth(),1.2*(t[2]-t[0])),n=this.getLength("height",this.getVHeight(),1.2*(t[3]-t[1]))):(e=this.getLength("x",this.getVWidth(),-.1)*(t[2]-t[0])+t[0],s=this.getLength("y",this.getVHeight(),-.1)*(t[3]-t[1])+t[1],i=this.getLength("width",this.getVWidth(),1.2)*(t[2]-t[0]),n=this.getLength("height",this.getVHeight(),1.2)*(t[3]-t[1])),A.rect(e,s,i,n).clip(),"objectBoundingBox"===this.attr("maskContentUnits")&&A.transform(t[2]-t[0],0,0,t[3]-t[1],t[0],t[1]),this.clip(),this.drawChildren(!1,!0),A.restore(),a(r),Q(r,!0)}},IA=function(t,e){q.call(this,t,e),this.allowedChildren=["tspan","#text","#cdata-section","a"],this.isText=!0,this.getBoundingShape=function(){for(var A=new Z,t=0;t Tj")}A.addContent("ET")}}}"line-through"===this.get("text-decoration")&&this.decorate(.05*this._font.size,.5*(V(this._font.font,this._font.size)+j(this._font.font,this._font.size)),t,e)},this.decorate=function(t,e,s,i){var n=this.getFill(s,i),r=this.getStroke(s,i);n&&l(n),r&&(I(r),A.lineWidth(this.get("stroke-width")).miterLimit(this.get("stroke-miterlimit")).lineJoin(this.get("stroke-linejoin")).lineCap(this.get("stroke-linecap")).dash(this.get("stroke-dasharray"),{phase:this.get("stroke-dashoffset")}));for(var B=0,o=this._pos;B0?s:this.pathObject.totalLength,this.pathScale=this.pathObject.totalLength/this.pathLength}else if((e=this.getUrl("href")||this.getUrl("xlink:href"))&&"path"===e.nodeName){var i=new CA(e,this);this.pathObject=i.shape.clone().transform(i.get("transform")),this.pathLength=this.chooseValue(i.pathLength,this.pathObject.totalLength),this.pathScale=this.pathObject.totalLength/this.pathLength}},dA=function(t,e){IA.call(this,t,e),this.allowedChildren=["textPath","tspan","#text","#cdata-section","a"],function(e){var s,i,n="",r=t.textContent,B=[],o=[],E=0,w=0;function g(){if(o.length)for(var A=o[o.length-1],t=o[0],e=A.x+A.width-t.x,n={startltr:0,middleltr:.5,endltr:1,startrtl:1,middlertl:.5,endrtl:0}[s+i]*e||0,r=0;re||r<0)A._pos[n].hidden=!0;else{var B=t.getPointAtLength(r*s);p(s,1)&&(A._pos[n].scale*=s,A._pos[n].width*=s),A._pos[n].x=B[0]-.5*A._pos[n].width*Math.cos(B[2])-A._pos[n].y*Math.sin(B[2]),A._pos[n].y=B[1]-.5*A._pos[n].width*Math.sin(B[2])+A._pos[n].y*Math.cos(B[2]),A._pos[n].rotate=B[2]+A._pos[n].rotate,A._pos[n].continuous=!1}}else for(var o=0;o0&&B<1/0)for(var o=0;o=2)for(var w=(t-(r-n))/(A.length-1),g=0;gA.length)&&(t=A.length);for(var e=0,s=new Array(t);e=A.length?{done:!0}:{done:!1,value:A[s++]}},e:function(A){throw A},f:i}}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 n,r=!0,B=!1;return{s:function(){e=A[Symbol.iterator]()},n:function(){var A=e.next();return r=A.done,A},e:function(A){B=!0,n=A},f:function(){try{r||null==e.return||e.return()}finally{if(B)throw n}}}}var L=function(){function A(){c(this,A)}return C(A,[{key:"toString",value:function(){throw new Error("Must be implemented by subclasses")}}]),A}(),R=function(){function A(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};c(this,A),this._items={},this.limits="boolean"!=typeof t.limits||t.limits}return C(A,[{key:"add",value:function(A,t){return this._items[A]=t}},{key:"get",value:function(A){return this._items[A]}},{key:"toString",value:function(){var A=this,t=Object.keys(this._items).sort((function(t,e){return A._compareKeys(t,e)})),e=["<<"];if(this.limits&&t.length>1){var s=t[0],i=t[t.length-1];e.push(" /Limits ".concat(G.convert([this._dataForKey(s),this._dataForKey(i)])))}e.push(" /".concat(this._keysName()," ["));var n,r=y(t);try{for(r.s();!(n=r.n()).done;){var B=n.value;e.push(" ".concat(G.convert(this._dataForKey(B))," ").concat(G.convert(this._items[B])))}}catch(A){r.e(A)}finally{r.f()}return e.push("]"),e.push(">>"),e.join("\n")}},{key:"_compareKeys",value:function(){throw new Error("Must be implemented by subclasses")}},{key:"_keysName",value:function(){throw new Error("Must be implemented by subclasses")}},{key:"_dataForKey",value:function(){throw new Error("Must be implemented by subclasses")}}]),A}(),m=function(A,t){return(Array(t+1).join("0")+A).slice(-t)},x=/[\n\r\t\b\f()\\]/g,p={"\n":"\\n","\r":"\\r","\t":"\\t","\b":"\\b","\f":"\\f","\\":"\\\\","(":"\\(",")":"\\)"},G=function(){function A(){c(this,A)}return C(A,null,[{key:"convert",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if("string"==typeof t)return"/".concat(t);if(t instanceof String){for(var i,n=t,r=!1,B=0,o=n.length;B127){r=!0;break}return i=r?function(A){var t=A.length;if(1&t)throw new Error("Buffer length must be even");for(var e=0,s=t-1;e");if(t instanceof L||t instanceof R)return t.toString();if(t instanceof Date){var E="D:".concat(m(t.getUTCFullYear(),4))+m(t.getUTCMonth()+1,2)+m(t.getUTCDate(),2)+m(t.getUTCHours(),2)+m(t.getUTCMinutes(),2)+m(t.getUTCSeconds(),2)+"Z";return e&&(E=(E=e(s.from(E,"ascii")).toString("binary")).replace(x,(function(A){return p[A]}))),"(".concat(E,")")}if(Array.isArray(t)){var w=t.map((function(t){return A.convert(t,e)})).join(" ");return"[".concat(w,"]")}if("[object Object]"==={}.toString.call(t)){var g=["<<"];for(var a in t){var c=t[a];g.push("/".concat(a," ").concat(A.convert(c,e)))}return g.push(">>"),g.join("\n")}return"number"==typeof t?A.number(t):"".concat(t)}},{key:"number",value:function(A){if(A>-1e21&&A<1e21)return Math.round(1e6*A)/1e6;throw new Error("unsupported number: ".concat(A))}}]),A}(),W=function(A){I(e,A);var t=d(e);function e(A,s){var i,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return c(this,e),(i=t.call(this)).document=A,i.id=s,i.data=n,i.gen=0,i.compress=i.document.compress&&!i.data.Filter,i.uncompressedLength=0,i.buffer=[],i}return C(e,[{key:"write",value:function(A){if(s.isBuffer(A)||(A=s.from(A+"\n","binary")),this.uncompressedLength+=A.length,null==this.data.Length&&(this.data.Length=0),this.buffer.push(A),this.data.Length+=A.length,this.compress)return this.data.Filter="FlateDecode"}},{key:"end",value:function(A){return A&&this.write(A),this.finalize()}},{key:"finalize",value:function(){this.offset=this.document._offset;var A=this.document._security?this.document._security.getEncryptFn(this.id,this.gen):null;this.buffer.length&&(this.buffer=s.concat(this.buffer),this.compress&&(this.buffer=n.default.deflateSync(this.buffer)),A&&(this.buffer=A(this.buffer)),this.data.Length=this.buffer.length),this.document._write("".concat(this.id," ").concat(this.gen," obj")),this.document._write(G.convert(this.data,A)),this.buffer.length&&(this.document._write("stream"),this.document._write(this.buffer),this.buffer=[],this.document._write("\nendstream")),this.document._write("endobj"),this.document._refEnd(this)}},{key:"toString",value:function(){return"".concat(this.id," ").concat(this.gen," R")}}]),e}(L),P={top:72,left:72,bottom:72,right:72},H={"4A0":[4767.87,6740.79],"2A0":[3370.39,4767.87],A0:[2383.94,3370.39],A1:[1683.78,2383.94],A2:[1190.55,1683.78],A3:[841.89,1190.55],A4:[595.28,841.89],A5:[419.53,595.28],A6:[297.64,419.53],A7:[209.76,297.64],A8:[147.4,209.76],A9:[104.88,147.4],A10:[73.7,104.88],B0:[2834.65,4008.19],B1:[2004.09,2834.65],B2:[1417.32,2004.09],B3:[1000.63,1417.32],B4:[708.66,1000.63],B5:[498.9,708.66],B6:[354.33,498.9],B7:[249.45,354.33],B8:[175.75,249.45],B9:[124.72,175.75],B10:[87.87,124.72],C0:[2599.37,3676.54],C1:[1836.85,2599.37],C2:[1298.27,1836.85],C3:[918.43,1298.27],C4:[649.13,918.43],C5:[459.21,649.13],C6:[323.15,459.21],C7:[229.61,323.15],C8:[161.57,229.61],C9:[113.39,161.57],C10:[79.37,113.39],RA0:[2437.8,3458.27],RA1:[1729.13,2437.8],RA2:[1218.9,1729.13],RA3:[864.57,1218.9],RA4:[609.45,864.57],SRA0:[2551.18,3628.35],SRA1:[1814.17,2551.18],SRA2:[1275.59,1814.17],SRA3:[907.09,1275.59],SRA4:[637.8,907.09],EXECUTIVE:[521.86,756],FOLIO:[612,936],LEGAL:[612,1008],LETTER:[612,792],TABLOID:[792,1224]},S=function(){function A(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};c(this,A),this.document=t,this.size=e.size||"letter",this.layout=e.layout||"portrait","number"==typeof e.margin?this.margins={top:e.margin,left:e.margin,bottom:e.margin,right:e.margin}:this.margins=e.margins||P;var s=Array.isArray(this.size)?this.size:H[this.size.toUpperCase()];this.width=s["portrait"===this.layout?0:1],this.height=s["portrait"===this.layout?1:0],this.content=this.document.ref(),this.resources=this.document.ref({ProcSet:["PDF","Text","ImageB","ImageC","ImageI"]}),this.dictionary=this.document.ref({Type:"Page",Parent:this.document._root.data.Pages,MediaBox:[0,0,this.width,this.height],Contents:this.content,Resources:this.resources}),this.markings=[]}return C(A,[{key:"maxY",value:function(){return this.height-this.margins.bottom}},{key:"write",value:function(A){return this.content.write(A)}},{key:"end",value:function(){return this.dictionary.end(),this.resources.end(),this.content.end()}},{key:"fonts",get:function(){var A=this.resources.data;return null!=A.Font?A.Font:A.Font={}}},{key:"xobjects",get:function(){var A=this.resources.data;return null!=A.XObject?A.XObject:A.XObject={}}},{key:"ext_gstates",get:function(){var A=this.resources.data;return null!=A.ExtGState?A.ExtGState:A.ExtGState={}}},{key:"patterns",get:function(){var A=this.resources.data;return null!=A.Pattern?A.Pattern:A.Pattern={}}},{key:"colorSpaces",get:function(){var A=this.resources.data;return A.ColorSpace||(A.ColorSpace={})}},{key:"annotations",get:function(){var A=this.dictionary.data;return null!=A.Annots?A.Annots:A.Annots=[]}},{key:"structParentTreeKey",get:function(){var A=this.dictionary.data;return null!=A.StructParents?A.StructParents:A.StructParents=this.document.createStructParentTreeNextKey()}}]),A}(),U=function(A){I(e,A);var t=d(e);function e(){return c(this,e),t.apply(this,arguments)}return C(e,[{key:"_compareKeys",value:function(A,t){return A.localeCompare(t)}},{key:"_keysName",value:function(){return"Names"}},{key:"_dataForKey",value:function(A){return new String(A)}}]),e}(R);function N(A,t){if(A=t[n]&&A<=t[n+1])return!0;A>t[n+1]?e=i+1:s=i-1}return!1}var T=[545,545,564,591,686,687,751,767,848,863,880,883,886,889,891,893,895,899,907,907,909,909,930,930,975,975,1015,1023,1159,1159,1231,1231,1270,1271,1274,1279,1296,1328,1367,1368,1376,1376,1416,1416,1419,1424,1442,1442,1466,1466,1477,1487,1515,1519,1525,1547,1549,1562,1564,1566,1568,1568,1595,1599,1622,1631,1774,1775,1791,1791,1806,1806,1837,1839,1867,1919,1970,2304,2308,2308,2362,2363,2382,2383,2389,2391,2417,2432,2436,2436,2445,2446,2449,2450,2473,2473,2481,2481,2483,2485,2490,2491,2493,2493,2501,2502,2505,2506,2510,2518,2520,2523,2526,2526,2532,2533,2555,2561,2563,2564,2571,2574,2577,2578,2601,2601,2609,2609,2612,2612,2615,2615,2618,2619,2621,2621,2627,2630,2633,2634,2638,2648,2653,2653,2655,2661,2677,2688,2692,2692,2700,2700,2702,2702,2706,2706,2729,2729,2737,2737,2740,2740,2746,2747,2758,2758,2762,2762,2766,2767,2769,2783,2785,2789,2800,2816,2820,2820,2829,2830,2833,2834,2857,2857,2865,2865,2868,2869,2874,2875,2884,2886,2889,2890,2894,2901,2904,2907,2910,2910,2914,2917,2929,2945,2948,2948,2955,2957,2961,2961,2966,2968,2971,2971,2973,2973,2976,2978,2981,2983,2987,2989,2998,2998,3002,3005,3011,3013,3017,3017,3022,3030,3032,3046,3059,3072,3076,3076,3085,3085,3089,3089,3113,3113,3124,3124,3130,3133,3141,3141,3145,3145,3150,3156,3159,3167,3170,3173,3184,3201,3204,3204,3213,3213,3217,3217,3241,3241,3252,3252,3258,3261,3269,3269,3273,3273,3278,3284,3287,3293,3295,3295,3298,3301,3312,3329,3332,3332,3341,3341,3345,3345,3369,3369,3386,3389,3396,3397,3401,3401,3406,3414,3416,3423,3426,3429,3440,3457,3460,3460,3479,3481,3506,3506,3516,3516,3518,3519,3527,3529,3531,3534,3541,3541,3543,3543,3552,3569,3573,3584,3643,3646,3676,3712,3715,3715,3717,3718,3721,3721,3723,3724,3726,3731,3736,3736,3744,3744,3748,3748,3750,3750,3752,3753,3756,3756,3770,3770,3774,3775,3781,3781,3783,3783,3790,3791,3802,3803,3806,3839,3912,3912,3947,3952,3980,3983,3992,3992,4029,4029,4045,4046,4048,4095,4130,4130,4136,4136,4139,4139,4147,4149,4154,4159,4186,4255,4294,4303,4345,4346,4348,4351,4442,4446,4515,4519,4602,4607,4615,4615,4679,4679,4681,4681,4686,4687,4695,4695,4697,4697,4702,4703,4743,4743,4745,4745,4750,4751,4783,4783,4785,4785,4790,4791,4799,4799,4801,4801,4806,4807,4815,4815,4823,4823,4847,4847,4879,4879,4881,4881,4886,4887,4895,4895,4935,4935,4955,4960,4989,5023,5109,5120,5751,5759,5789,5791,5873,5887,5901,5901,5909,5919,5943,5951,5972,5983,5997,5997,6001,6001,6004,6015,6109,6111,6122,6143,6159,6159,6170,6175,6264,6271,6314,7679,7836,7839,7930,7935,7958,7959,7966,7967,8006,8007,8014,8015,8024,8024,8026,8026,8028,8028,8030,8030,8062,8063,8117,8117,8133,8133,8148,8149,8156,8156,8176,8177,8181,8181,8191,8191,8275,8278,8280,8286,8292,8297,8306,8307,8335,8351,8370,8399,8427,8447,8507,8508,8524,8530,8580,8591,9167,9215,9255,9279,9291,9311,9471,9471,9748,9749,9752,9752,9854,9855,9866,9984,9989,9989,9994,9995,10024,10024,10060,10060,10062,10062,10067,10069,10071,10071,10079,10080,10133,10135,10160,10160,10175,10191,10220,10223,11008,11903,11930,11930,12020,12031,12246,12271,12284,12287,12352,12352,12439,12440,12544,12548,12589,12592,12687,12687,12728,12783,12829,12831,12868,12880,12924,12926,13004,13007,13055,13055,13175,13178,13278,13279,13311,13311,19894,19967,40870,40959,42125,42127,42183,44031,55204,55295,64046,64047,64107,64255,64263,64274,64280,64284,64311,64311,64317,64317,64319,64319,64322,64322,64325,64325,64434,64466,64832,64847,64912,64913,64968,64975,65021,65023,65040,65055,65060,65071,65095,65096,65107,65107,65127,65127,65132,65135,65141,65141,65277,65278,65280,65280,65471,65473,65480,65481,65488,65489,65496,65497,65501,65503,65511,65511,65519,65528,65536,66303,66335,66335,66340,66351,66379,66559,66598,66599,66638,118783,119030,119039,119079,119081,119262,119807,119893,119893,119965,119965,119968,119969,119971,119972,119975,119976,119981,119981,119994,119994,119996,119996,120001,120001,120004,120004,120070,120070,120075,120076,120085,120085,120093,120093,120122,120122,120127,120127,120133,120133,120135,120137,120145,120145,120484,120487,120778,120781,120832,131069,173783,194559,195102,196605,196608,262141,262144,327677,327680,393213,393216,458749,458752,524285,524288,589821,589824,655357,655360,720893,720896,786429,786432,851965,851968,917501,917504,917504,917506,917535,917632,983037],V=function(A){return N(A,T)},j=[173,173,847,847,6150,6150,6155,6155,6156,6156,6157,6157,8203,8203,8204,8204,8205,8205,8288,8288,65024,65024,65025,65025,65026,65026,65027,65027,65028,65028,65029,65029,65030,65030,65031,65031,65032,65032,65033,65033,65034,65034,65035,65035,65036,65036,65037,65037,65038,65038,65039,65039,65279,65279],k=[160,160,5760,5760,8192,8192,8193,8193,8194,8194,8195,8195,8196,8196,8197,8197,8198,8198,8199,8199,8200,8200,8201,8201,8202,8202,8203,8203,8239,8239,8287,8287,12288,12288],J=[128,159,1757,1757,1807,1807,6158,6158,8204,8204,8205,8205,8232,8232,8233,8233,8288,8288,8289,8289,8290,8290,8291,8291,8298,8303,65279,65279,65529,65532,119155,119162],z=[64976,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1114110,1114111],K=[0,31,127,127,832,832,833,833,8206,8206,8207,8207,8234,8234,8235,8235,8236,8236,8237,8237,8238,8238,8298,8298,8299,8299,8300,8300,8301,8301,8302,8302,8303,8303,12272,12283,55296,57343,57344,63743,65529,65529,65530,65530,65531,65531,65532,65532,65533,65533,917505,917505,917536,917631,983040,1048573,1048576,1114109],O=function(A){return N(A,k)||N(A,K)||N(A,J)||N(A,z)},Z=[1470,1470,1472,1472,1475,1475,1488,1514,1520,1524,1563,1563,1567,1567,1569,1594,1600,1610,1645,1647,1649,1749,1757,1757,1765,1766,1786,1790,1792,1805,1808,1808,1810,1836,1920,1957,1969,1969,8207,8207,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65020,65136,65140,65142,65276],X=function(A){return N(A,Z)},q=[65,90,97,122,170,170,181,181,186,186,192,214,216,246,248,544,546,563,592,685,688,696,699,705,720,721,736,740,750,750,890,890,902,902,904,906,908,908,910,929,931,974,976,1013,1024,1154,1162,1230,1232,1269,1272,1273,1280,1295,1329,1366,1369,1375,1377,1415,1417,1417,2307,2307,2309,2361,2365,2368,2377,2380,2384,2384,2392,2401,2404,2416,2434,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2494,2496,2503,2504,2507,2508,2519,2519,2524,2525,2527,2529,2534,2545,2548,2554,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2622,2624,2649,2652,2654,2654,2662,2671,2674,2676,2691,2691,2693,2699,2701,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2752,2761,2761,2763,2764,2768,2768,2784,2784,2790,2799,2818,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2870,2873,2877,2878,2880,2880,2887,2888,2891,2892,2903,2903,2908,2909,2911,2913,2918,2928,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,2997,2999,3001,3006,3007,3009,3010,3014,3016,3018,3020,3031,3031,3047,3058,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3137,3140,3168,3169,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3262,3262,3264,3268,3271,3272,3274,3275,3285,3286,3294,3294,3296,3297,3302,3311,3330,3331,3333,3340,3342,3344,3346,3368,3370,3385,3390,3392,3398,3400,3402,3404,3415,3415,3424,3425,3430,3439,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3535,3537,3544,3551,3570,3572,3585,3632,3634,3635,3648,3654,3663,3675,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3792,3801,3804,3805,3840,3863,3866,3892,3894,3894,3896,3896,3902,3911,3913,3946,3967,3967,3973,3973,3976,3979,4030,4037,4039,4044,4047,4047,4096,4129,4131,4135,4137,4138,4140,4140,4145,4145,4152,4152,4160,4183,4256,4293,4304,4344,4347,4347,4352,4441,4447,4514,4520,4601,4608,4614,4616,4678,4680,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4742,4744,4744,4746,4749,4752,4782,4784,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4814,4816,4822,4824,4846,4848,4878,4880,4880,4882,4885,4888,4894,4896,4934,4936,4954,4961,4988,5024,5108,5121,5750,5761,5786,5792,5872,5888,5900,5902,5905,5920,5937,5941,5942,5952,5969,5984,5996,5998,6e3,6016,6070,6078,6085,6087,6088,6100,6106,6108,6108,6112,6121,6160,6169,6176,6263,6272,6312,7680,7835,7840,7929,7936,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8206,8206,8305,8305,8319,8319,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8497,8499,8505,8509,8511,8517,8521,8544,8579,9014,9082,9109,9109,9372,9449,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12588,12593,12686,12688,12727,12784,12828,12832,12867,12896,12923,12927,12976,12992,13003,13008,13054,13056,13174,13179,13277,13280,13310,13312,19893,19968,40869,40960,42124,44032,55203,55296,64045,64048,64106,64256,64262,64275,64279,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500,66304,66334,66336,66339,66352,66378,66560,66597,66600,66637,118784,119029,119040,119078,119082,119142,119146,119154,119171,119172,119180,119209,119214,119261,119808,119892,119894,119964,119966,119967,119970,119970,119973,119974,119977,119980,119982,119993,119995,119995,119997,12e4,120002,120003,120005,120069,120071,120074,120077,120084,120086,120092,120094,120121,120123,120126,120128,120132,120134,120134,120138,120144,120146,120483,120488,120777,131072,173782,194560,195101,983040,1048573,1048576,1114109],_=function(A){return N(A,q)},$=function(A){return A.codePointAt(0)};function AA(A){for(var t=[],e=A.length,s=0;s=55296&&i<=56319&&e>s+1){var n=A.charCodeAt(s+1);if(n>=56320&&n<=57343){t.push(1024*(i-55296)+n-56320+65536),s+=1;continue}}t.push(i)}return t}var tA=function(){function A(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(c(this,A),!e.ownerPassword&&!e.userPassword)throw new Error("None of owner password and user password is defined.");this.document=t,this._setupEncryption(e)}return C(A,null,[{key:"generateFileID",value:function(){var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t="".concat(A.CreationDate.getTime(),"\n");for(var e in A)A.hasOwnProperty(e)&&(t+="".concat(e,": ").concat(A[e].valueOf(),"\n"));return rA(r.default.MD5(t))}},{key:"generateRandomWordArray",value:function(A){return r.default.lib.WordArray.random(A)}},{key:"create",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.ownerPassword||e.userPassword?new A(t,e):null}}]),C(A,[{key:"_setupEncryption",value:function(A){switch(A.pdfVersion){case"1.4":case"1.5":this.version=2;break;case"1.6":case"1.7":this.version=4;break;case"1.7ext3":this.version=5;break;default:this.version=1}var t={Filter:"Standard"};switch(this.version){case 1:case 2:case 4:this._setupEncryptionV1V2V4(this.version,t,A);break;case 5:this._setupEncryptionV5(t,A)}this.dictionary=this.document.ref(t)}},{key:"_setupEncryptionV1V2V4",value:function(A,t,e){var s,i;switch(A){case 1:s=2,this.keyBits=40,i=function(){var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=-64;return A.printing&&(t|=4),A.modifying&&(t|=8),A.copying&&(t|=16),A.annotating&&(t|=32),t}(e.permissions);break;case 2:s=3,this.keyBits=128,i=eA(e.permissions);break;case 4:s=4,this.keyBits=128,i=eA(e.permissions)}var n,B,o=sA(e.userPassword),E=e.ownerPassword?sA(e.ownerPassword):o,w=function(A,t,e,s){for(var i=s,n=A>=3?51:1,B=0;B=3?20:1;for(var w=0;w=3?51:1,E=0;E=2&&(t.Length=this.keyBits),4===A&&(t.CF={StdCF:{AuthEvent:"DocOpen",CFM:"AESV2",Length:this.keyBits/8}},t.StmF="StdCF",t.StrF="StdCF"),t.R=s,t.O=rA(w),t.U=rA(n),t.P=i}},{key:"_setupEncryptionV5",value:function(t,e){this.keyBits=256;var s=eA(e.permissions),i=iA(e.userPassword),n=e.ownerPassword?iA(e.ownerPassword):i;this.encryptionKey=(0,A.generateRandomWordArray)(32);var B=function(A,t){var e=t(8),s=t(8);return r.default.SHA256(A.clone().concat(e)).concat(e).concat(s)}(i,A.generateRandomWordArray),o=function(A,t,e){var s=r.default.SHA256(A.clone().concat(t)),i={mode:r.default.mode.CBC,padding:r.default.pad.NoPadding,iv:r.default.lib.WordArray.create(null,16)};return r.default.AES.encrypt(e,s,i).ciphertext}(i,r.default.lib.WordArray.create(B.words.slice(10,12),8),this.encryptionKey),E=function(A,t,e){var s=e(8),i=e(8);return r.default.SHA256(A.clone().concat(s).concat(t)).concat(s).concat(i)}(n,B,A.generateRandomWordArray),w=function(A,t,e,s){var i=r.default.SHA256(A.clone().concat(t).concat(e)),n={mode:r.default.mode.CBC,padding:r.default.pad.NoPadding,iv:r.default.lib.WordArray.create(null,16)};return r.default.AES.encrypt(s,i,n).ciphertext}(n,r.default.lib.WordArray.create(E.words.slice(10,12),8),B,this.encryptionKey),g=function(A,t,e){var s=r.default.lib.WordArray.create([nA(A),4294967295,1415668834],12).concat(e(4)),i={mode:r.default.mode.ECB,padding:r.default.pad.NoPadding};return r.default.AES.encrypt(s,t,i).ciphertext}(s,this.encryptionKey,A.generateRandomWordArray);t.V=5,t.Length=this.keyBits,t.CF={StdCF:{AuthEvent:"DocOpen",CFM:"AESV3",Length:this.keyBits/8}},t.StmF="StdCF",t.StrF="StdCF",t.R=5,t.O=rA(E),t.OE=rA(w),t.U=rA(B),t.UE=rA(o),t.P=s,t.Perms=rA(g)}},{key:"getEncryptFn",value:function(t,e){var s,i;if(this.version<5&&(s=this.encryptionKey.clone().concat(r.default.lib.WordArray.create([(255&t)<<24|(65280&t)<<8|t>>8&65280|255&e,(65280&e)<<16],5))),1===this.version||2===this.version){var n=r.default.MD5(s);return n.sigBytes=Math.min(16,this.keyBits/8+5),function(A){return rA(r.default.RC4.encrypt(r.default.lib.WordArray.create(A),n).ciphertext)}}i=4===this.version?r.default.MD5(s.concat(r.default.lib.WordArray.create([1933667412],4))):this.encryptionKey;var B=A.generateRandomWordArray(16),o={mode:r.default.mode.CBC,padding:r.default.pad.Pkcs7,iv:B};return function(A){return rA(B.clone().concat(r.default.AES.encrypt(r.default.lib.WordArray.create(A),i,o).ciphertext))}}},{key:"end",value:function(){this.dictionary.end()}}]),A}();function eA(){var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=-3904;return"lowResolution"===A.printing&&(t|=4),"highResolution"===A.printing&&(t|=2052),A.modifying&&(t|=8),A.copying&&(t|=16),A.annotating&&(t|=32),A.fillingForms&&(t|=256),A.contentAccessibility&&(t|=512),A.documentAssembly&&(t|=1024),t}function sA(){for(var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=s.alloc(32),e=A.length,i=0;i255)throw new Error("Password contains one or more invalid characters.");t[i]=n,i++}for(;i<32;)t[i]=cA[i-e],i++;return r.default.lib.WordArray.create(t)}function iA(){var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";A=unescape(encodeURIComponent(function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if("string"!=typeof A)throw new TypeError("Expected string.");if(0===A.length)return"";var e=AA(A).map((function(A){return function(A){return N(A,k)}(A)?32:A})).filter((function(A){return!function(A){return N(A,j)}(A)})),s=String.fromCodePoint.apply(null,e).normalize("NFKC"),i=AA(s);if(i.some(O))throw new Error("Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3");if(!0!==t.allowUnassigned&&i.some(V))throw new Error("Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5");var n=i.some(X),r=i.some(_);if(n&&r)throw new Error("String must not contain RandALCat and LCat at the same time, see https://tools.ietf.org/html/rfc3454#section-6");var B=X($(s[0])),o=X($(function(A){return A[A.length-1]}(s)));if(n&&(!B||!o))throw new Error("Bidirectional RandALCat character must be the first and the last character of the string, see https://tools.ietf.org/html/rfc3454#section-6");return s}(A)));for(var t=Math.min(127,A.length),e=s.alloc(t),i=0;i>8&65280|A>>24&255}function rA(A){for(var t=[],e=0;e>8*(3-e%4)&255);return s.from(t)}var BA,oA,EA,wA,gA,aA,cA=[40,191,78,94,78,117,138,65,100,0,78,86,255,250,1,8,46,46,0,182,208,104,62,128,47,12,169,254,100,83,105,122],QA=G.number,CA=function(){function A(t){c(this,A),this.doc=t,this.stops=[],this.embedded=!1,this.transform=[1,0,0,1,0,0]}return C(A,[{key:"stop",value:function(A,t,e){if(null==e&&(e=1),t=this.doc._normalizeColor(t),0===this.stops.length)if(3===t.length)this._colorSpace="DeviceRGB";else if(4===t.length)this._colorSpace="DeviceCMYK";else{if(1!==t.length)throw new Error("Unknown color space");this._colorSpace="DeviceGray"}else if("DeviceRGB"===this._colorSpace&&3!==t.length||"DeviceCMYK"===this._colorSpace&&4!==t.length||"DeviceGray"===this._colorSpace&&1!==t.length)throw new Error("All gradient stops must use the same color space");return e=Math.max(0,Math.min(1,e)),this.stops.push([A,t,e]),this}},{key:"setTransform",value:function(A,t,e,s,i,n){return this.transform=[A,t,e,s,i,n],this}},{key:"embed",value:function(A){var t,e=this.stops.length;if(0!==e){this.embedded=!0,this.matrix=A;var s=this.stops[e-1];s[0]<1&&this.stops.push([1,s[1],s[2]]);for(var i=[],n=[],r=[],B=0;B>16,t>>8&255,255&t]}else dA[A]&&(A=dA[A]);return Array.isArray(A)?(3===A.length?A=A.map((function(A){return A/255})):4===A.length&&(A=A.map((function(A){return A/100}))),A):null},_setColor:function(A,t){return A instanceof lA?(A.apply(t),!0):Array.isArray(A)&&A[0]instanceof DA?(A[0].apply(t,A[1]),!0):this._setColorCore(A,t)},_setColorCore:function(A,t){if(!(A=this._normalizeColor(A)))return!1;var e=t?"SCN":"scn",s=this._getColorSpace(A);return this._setColorSpace(s,t),A=A.join(" "),this.addContent("".concat(A," ").concat(e)),!0},_setColorSpace:function(A,t){var e=t?"CS":"cs";return this.addContent("/".concat(A," ").concat(e))},_getColorSpace:function(A){return 4===A.length?"DeviceCMYK":"DeviceRGB"},fillColor:function(A,t){return this._setColor(A,!1)&&this.fillOpacity(t),this._fillColor=[A,t],this},strokeColor:function(A,t){return this._setColor(A,!0)&&this.strokeOpacity(t),this},opacity:function(A){return this._doOpacity(A,A),this},fillOpacity:function(A){return this._doOpacity(A,null),this},strokeOpacity:function(A){return this._doOpacity(null,A),this},_doOpacity:function(A,t){var e,s;if(null!=A||null!=t){null!=A&&(A=Math.max(0,Math.min(1,A))),null!=t&&(t=Math.max(0,Math.min(1,t)));var i="".concat(A,"_").concat(t);if(this._opacityRegistry[i]){var n=v(this._opacityRegistry[i],2);e=n[0],s=n[1]}else{e={Type:"ExtGState"},null!=A&&(e.ca=A),null!=t&&(e.CA=t),(e=this.ref(e)).end();var r=++this._opacityCount;s="Gs".concat(r),this._opacityRegistry[i]=[e,s]}return this.page.ext_gstates[s]=e,this.addContent("/".concat(s," gs"))}},linearGradient:function(A,t,e,s){return new IA(this,A,t,e,s)},radialGradient:function(A,t,e,s,i,n){return new fA(this,A,t,e,s,i,n)},pattern:function(A,t,e,s){return new DA(this,A,t,e,s)}},dA={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]};BA=oA=EA=wA=gA=aA=0;var vA={A:7,a:7,C:6,c:6,H:1,h:1,L:2,l:2,M:2,m:2,Q:4,q:4,S:4,s:4,T:2,t:2,V:1,v:1,Z:0,z:0},YA={M:function(A,t){return BA=t[0],oA=t[1],EA=wA=null,gA=BA,aA=oA,A.moveTo(BA,oA)},m:function(A,t){return BA+=t[0],oA+=t[1],EA=wA=null,gA=BA,aA=oA,A.moveTo(BA,oA)},C:function(A,t){return BA=t[4],oA=t[5],EA=t[2],wA=t[3],A.bezierCurveTo.apply(A,Y(t))},c:function(A,t){return A.bezierCurveTo(t[0]+BA,t[1]+oA,t[2]+BA,t[3]+oA,t[4]+BA,t[5]+oA),EA=BA+t[2],wA=oA+t[3],BA+=t[4],oA+=t[5]},S:function(A,t){return null===EA&&(EA=BA,wA=oA),A.bezierCurveTo(BA-(EA-BA),oA-(wA-oA),t[0],t[1],t[2],t[3]),EA=t[0],wA=t[1],BA=t[2],oA=t[3]},s:function(A,t){return null===EA&&(EA=BA,wA=oA),A.bezierCurveTo(BA-(EA-BA),oA-(wA-oA),BA+t[0],oA+t[1],BA+t[2],oA+t[3]),EA=BA+t[0],wA=oA+t[1],BA+=t[2],oA+=t[3]},Q:function(A,t){return EA=t[0],wA=t[1],BA=t[2],oA=t[3],A.quadraticCurveTo(t[0],t[1],BA,oA)},q:function(A,t){return A.quadraticCurveTo(t[0]+BA,t[1]+oA,t[2]+BA,t[3]+oA),EA=BA+t[0],wA=oA+t[1],BA+=t[2],oA+=t[3]},T:function(A,t){return null===EA?(EA=BA,wA=oA):(EA=BA-(EA-BA),wA=oA-(wA-oA)),A.quadraticCurveTo(EA,wA,t[0],t[1]),EA=BA-(EA-BA),wA=oA-(wA-oA),BA=t[0],oA=t[1]},t:function(A,t){return null===EA?(EA=BA,wA=oA):(EA=BA-(EA-BA),wA=oA-(wA-oA)),A.quadraticCurveTo(EA,wA,BA+t[0],oA+t[1]),BA+=t[0],oA+=t[1]},A:function(A,t){return FA(A,BA,oA,t),BA=t[5],oA=t[6]},a:function(A,t){return t[5]+=BA,t[6]+=oA,FA(A,BA,oA,t),BA=t[5],oA=t[6]},L:function(A,t){return BA=t[0],oA=t[1],EA=wA=null,A.lineTo(BA,oA)},l:function(A,t){return BA+=t[0],oA+=t[1],EA=wA=null,A.lineTo(BA,oA)},H:function(A,t){return BA=t[0],EA=wA=null,A.lineTo(BA,oA)},h:function(A,t){return BA+=t[0],EA=wA=null,A.lineTo(BA,oA)},V:function(A,t){return oA=t[0],EA=wA=null,A.lineTo(BA,oA)},v:function(A,t){return oA+=t[0],EA=wA=null,A.lineTo(BA,oA)},Z:function(A){return A.closePath(),BA=gA,oA=aA},z:function(A){return A.closePath(),BA=gA,oA=aA}},FA=function(A,t,e,s){var i,n=v(s,7),r=n[0],B=n[1],o=n[2],E=n[3],w=n[4],g=n[5],a=n[6],c=y(MA(g,a,r,B,E,w,o,t,e));try{for(c.s();!(i=c.n()).done;){var Q=i.value,C=yA.apply(void 0,Y(Q));A.bezierCurveTo.apply(A,Y(C))}}catch(A){c.e(A)}finally{c.f()}},MA=function(A,t,e,s,i,n,r,B,o){var E=r*(Math.PI/180),w=Math.sin(E),g=Math.cos(E);e=Math.abs(e),s=Math.abs(s);var a=(EA=g*(B-A)*.5+w*(o-t)*.5)*EA/(e*e)+(wA=g*(o-t)*.5-w*(B-A)*.5)*wA/(s*s);a>1&&(e*=a=Math.sqrt(a),s*=a);var c=g/e,Q=w/e,C=-w/s,h=g/s,u=c*B+Q*o,l=C*B+h*o,I=c*A+Q*t,f=C*A+h*t,D=1/((I-u)*(I-u)+(f-l)*(f-l))-.25;D<0&&(D=0);var b=Math.sqrt(D);n===i&&(b=-b);var d=.5*(u+I)-b*(f-l),v=.5*(l+f)+b*(I-u),Y=Math.atan2(l-v,u-d),F=Math.atan2(f-v,I-d)-Y;F<0&&1===n?F+=2*Math.PI:F>0&&0===n&&(F-=2*Math.PI);for(var M=Math.ceil(Math.abs(F/(.5*Math.PI+.001))),y=[],L=0;L0&&(i[i.length]=+n),s[s.length]={cmd:t,args:i},i=[],n="",r=!1),t=E;else if([" ",","].includes(E)||"-"===E&&n.length>0&&"e"!==n[n.length-1]||"."===E&&r){if(0===n.length)continue;i.length===B?(s[s.length]={cmd:t,args:i},i=[+n],"M"===t&&(t="L"),"m"===t&&(t="l")):i[i.length]=+n,r="."===E,n=["-","."].includes(E)?E:""}else n+=E,"."===E&&(r=!0)}}catch(A){o.e(A)}finally{o.f()}return n.length>0&&(i.length===B?(s[s.length]={cmd:t,args:i},i=[+n],"M"===t&&(t="L"),"m"===t&&(t="l")):i[i.length]=+n),s[s.length]={cmd:t,args:i},s}(t);!function(A,t){BA=oA=EA=wA=gA=aA=0;for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:{},e=A;if(Array.isArray(A)||(A=[A,t.space||A]),!A.every((function(A){return Number.isFinite(A)&&A>0})))throw new Error("dash(".concat(JSON.stringify(e),", ").concat(JSON.stringify(t),") invalid, lengths must be numeric and greater than zero"));return A=A.map(RA).join(" "),this.addContent("[".concat(A,"] ").concat(RA(t.phase||0)," d"))},undash:function(){return this.addContent("[] 0 d")},moveTo:function(A,t){return this.addContent("".concat(RA(A)," ").concat(RA(t)," m"))},lineTo:function(A,t){return this.addContent("".concat(RA(A)," ").concat(RA(t)," l"))},bezierCurveTo:function(A,t,e,s,i,n){return this.addContent("".concat(RA(A)," ").concat(RA(t)," ").concat(RA(e)," ").concat(RA(s)," ").concat(RA(i)," ").concat(RA(n)," c"))},quadraticCurveTo:function(A,t,e,s){return this.addContent("".concat(RA(A)," ").concat(RA(t)," ").concat(RA(e)," ").concat(RA(s)," v"))},rect:function(A,t,e,s){return this.addContent("".concat(RA(A)," ").concat(RA(t)," ").concat(RA(e)," ").concat(RA(s)," re"))},roundedRect:function(A,t,e,s,i){null==i&&(i=0);var n=(i=Math.min(i,.5*e,.5*s))*(1-mA);return this.moveTo(A+i,t),this.lineTo(A+e-i,t),this.bezierCurveTo(A+e-n,t,A+e,t+n,A+e,t+i),this.lineTo(A+e,t+s-i),this.bezierCurveTo(A+e,t+s-n,A+e-n,t+s,A+e-i,t+s),this.lineTo(A+i,t+s),this.bezierCurveTo(A+n,t+s,A,t+s-n,A,t+s-i),this.lineTo(A,t+i),this.bezierCurveTo(A,t+n,A+n,t,A+i,t),this.closePath()},ellipse:function(A,t,e,s){null==s&&(s=e);var i=e*mA,n=s*mA,r=(A-=e)+2*e,B=(t-=s)+2*s,o=A+e,E=t+s;return this.moveTo(A,E),this.bezierCurveTo(A,E-n,o-i,t,o,t),this.bezierCurveTo(o+i,t,r,E-n,r,E),this.bezierCurveTo(r,E+n,o+i,B,o,B),this.bezierCurveTo(o-i,B,A,E+n,A,E),this.closePath()},circle:function(A,t,e){return this.ellipse(A,t,e)},arc:function(A,t,e,s,i,n){null==n&&(n=!1);var r=2*Math.PI,B=.5*Math.PI,o=i-s;Math.abs(o)>r?o=r:0!==o&&n!==o<0&&(o=(n?-1:1)*r+o);var E=Math.ceil(Math.abs(o)/B),w=o/E,g=w/B*mA*e,a=s,c=-Math.sin(a)*g,Q=Math.cos(a)*g,C=A+Math.cos(a)*e,h=t+Math.sin(a)*e;this.moveTo(C,h);for(var u=0;u1&&void 0!==arguments[1]?arguments[1]:{},s=A*Math.PI/180,i=Math.cos(s),n=Math.sin(s),r=t=0;if(null!=e.origin){var B=v(e.origin,2),o=(r=B[0])*n+(t=B[1])*i;r-=r*i-t*n,t-=o}return this.transform(i,n,-n,i,r,t)},scale:function(A,t){var e,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};null==t&&(t=A),"object"==typeof t&&(s=t,t=A);var i=e=0;if(null!=s.origin){var n=v(s.origin,2);i=n[0],e=n[1],i-=A*i,e-=t*e}return this.transform(A,0,0,t,i,e)}},pA={402:131,8211:150,8212:151,8216:145,8217:146,8218:130,8220:147,8221:148,8222:132,8224:134,8225:135,8226:149,8230:133,8364:128,8240:137,8249:139,8250:155,710:136,8482:153,338:140,339:156,732:152,352:138,353:154,376:159,381:142,382:158},GA=".notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n.notdef .notdef .notdef .notdef\n \nspace exclam quotedbl numbersign\ndollar percent ampersand quotesingle\nparenleft parenright asterisk plus\ncomma hyphen period slash\nzero one two three\nfour five six seven\neight nine colon semicolon\nless equal greater question\n \nat A B C\nD E F G\nH I J K\nL M N O\nP Q R S\nT U V W\nX Y Z bracketleft\nbackslash bracketright asciicircum underscore\n \ngrave a b c\nd e f g\nh i j k\nl m n o\np q r s\nt u v w\nx y z braceleft\nbar braceright asciitilde .notdef\n \nEuro .notdef quotesinglbase florin\nquotedblbase ellipsis dagger daggerdbl\ncircumflex perthousand Scaron guilsinglleft\nOE .notdef Zcaron .notdef\n.notdef quoteleft quoteright quotedblleft\nquotedblright bullet endash emdash\ntilde trademark scaron guilsinglright\noe .notdef zcaron ydieresis\n \nspace exclamdown cent sterling\ncurrency yen brokenbar section\ndieresis copyright ordfeminine guillemotleft\nlogicalnot hyphen registered macron\ndegree plusminus twosuperior threesuperior\nacute mu paragraph periodcentered\ncedilla onesuperior ordmasculine guillemotright\nonequarter onehalf threequarters questiondown\n \nAgrave Aacute Acircumflex Atilde\nAdieresis Aring AE Ccedilla\nEgrave Eacute Ecircumflex Edieresis\nIgrave Iacute Icircumflex Idieresis\nEth Ntilde Ograve Oacute\nOcircumflex Otilde Odieresis multiply\nOslash Ugrave Uacute Ucircumflex\nUdieresis Yacute Thorn germandbls\n \nagrave aacute acircumflex atilde\nadieresis aring ae ccedilla\negrave eacute ecircumflex edieresis\nigrave iacute icircumflex idieresis\neth ntilde ograve oacute\nocircumflex otilde odieresis divide\noslash ugrave uacute ucircumflex\nudieresis yacute thorn ydieresis".split(/\s+/),WA=function(){function A(t){c(this,A),this.contents=t,this.attributes={},this.glyphWidths={},this.boundingBoxes={},this.kernPairs={},this.parse(),this.charWidths=new Array(256);for(var e=0;e<=255;e++)this.charWidths[e]=this.glyphWidths[GA[e]];this.bbox=this.attributes.FontBBox.split(/\s+/).map((function(A){return+A})),this.ascender=+(this.attributes.Ascender||0),this.descender=+(this.attributes.Descender||0),this.xHeight=+(this.attributes.XHeight||0),this.capHeight=+(this.attributes.CapHeight||0),this.lineGap=this.bbox[3]-this.bbox[1]-(this.ascender-this.descender)}return C(A,null,[{key:"open",value:function(t){return new A(a.readFileSync(t,"utf8"))}}]),C(A,[{key:"parse",value:function(){var A,t="",e=y(this.contents.split("\n"));try{for(e.s();!(A=e.n()).done;){var s,i,n=A.value;if(s=n.match(/^Start(\w+)/))t=s[1];else if(s=n.match(/^End(\w+)/))t="";else switch(t){case"FontMetrics":var r=(s=n.match(/(^\w+)\s+(.*)/))[1],B=s[2];(i=this.attributes[r])?(Array.isArray(i)||(i=this.attributes[r]=[i]),i.push(B)):this.attributes[r]=B;break;case"CharMetrics":if(!/^CH?\s/.test(n))continue;var o=n.match(/\bN\s+(\.?\w+)\s*;/)[1];this.glyphWidths[o]=+n.match(/\bWX\s+(\d+)\s*;/)[1];break;case"KernPairs":(s=n.match(/^KPX\s+(\.?\w+)\s+(\.?\w+)\s+(-?\d+)/))&&(this.kernPairs[s[1]+"\0"+s[2]]=parseInt(s[3]))}}}catch(A){e.e(A)}finally{e.f()}}},{key:"encodeText",value:function(A){for(var t=[],e=0,s=A.length;e>8,n=0;this.font.post.isFixedPitch&&(n|=1),1<=i&&i<=7&&(n|=2),n|=4,10===i&&(n|=8),this.font.head.macStyle.italic&&(n|=64);var r=[1,2,3,4,5,6].map((function(t){return String.fromCharCode((A.id.charCodeAt(t)||73)+17)})).join("")+"+"+this.font.postscriptName,B=this.font.bbox,o=this.document.ref({Type:"FontDescriptor",FontName:r,Flags:n,FontBBox:[B.minX*this.scale,B.minY*this.scale,B.maxX*this.scale,B.maxY*this.scale],ItalicAngle:this.font.italicAngle,Ascent:this.ascender,Descent:this.descender,CapHeight:(this.font.capHeight||this.font.ascent)*this.scale,XHeight:(this.font.xHeight||0)*this.scale,StemV:0});if(t?o.data.FontFile3=e:o.data.FontFile2=e,this.document.subset){var E=s.from("FFFFFFFFC0","hex"),w=this.document.ref();w.write(E),w.end(),o.data.CIDSet=w}o.end();var g={Type:"Font",Subtype:"CIDFontType0",BaseFont:r,CIDSystemInfo:{Registry:new String("Adobe"),Ordering:new String("Identity"),Supplement:0},FontDescriptor:o,W:[0,this.widths]};t||(g.Subtype="CIDFontType2",g.CIDToGIDMap="Identity");var a=this.document.ref(g);return a.end(),this.dictionary.data={Type:"Font",Subtype:"Type0",BaseFont:r,Encoding:"Identity-H",DescendantFonts:[a],ToUnicode:this.toUnicodeCmap()},this.dictionary.end()}},{key:"toUnicodeCmap",value:function(){var A,t=this.document.ref(),e=[],s=y(this.unicode);try{for(s.s();!(A=s.n()).done;){var i,n=A.value,r=[],B=y(n);try{for(B.s();!(i=B.n()).done;){var o=i.value;o>65535&&(o-=65536,r.push(UA(o>>>10&1023|55296)),o=56320|1023&o),r.push(UA(o))}}catch(A){B.e(A)}finally{B.f()}e.push("<".concat(r.join(" "),">"))}}catch(A){s.e(A)}finally{s.f()}return t.end("/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo <<\n /Registry (Adobe)\n /Ordering (UCS)\n /Supplement 0\n>> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n1 begincodespacerange\n<0000>\nendcodespacerange\n1 beginbfrange\n<0000> <".concat(UA(e.length-1),"> [").concat(e.join(" "),"]\nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend")),t}}]),e}(PA),TA=function(){function A(){c(this,A)}return C(A,null,[{key:"open",value:function(A,t,e,i){var n;if("string"==typeof t){if(SA.isStandardFont(t))return new SA(A,t,i);t=a.readFileSync(t)}if(s.isBuffer(t)?n=B.default.create(t,e):t instanceof Uint8Array?n=B.default.create(s.from(t),e):t instanceof ArrayBuffer&&(n=B.default.create(s.from(new Uint8Array(t)),e)),null==n)throw new Error("Not a supported font format or standard PDF font.");return new NA(A,n,i)}}]),A}(),VA={initFonts:function(){var A=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"Helvetica";this._fontFamilies={},this._fontCount=0,this._fontSize=12,this._font=null,this._registeredFonts={},A&&this.font(A)},font:function(A,t,e){var s,i;if("number"==typeof t&&(e=t,t=null),"string"==typeof A&&this._registeredFonts[A]){s=A;var n=this._registeredFonts[A];A=n.src,t=n.family}else"string"!=typeof(s=t||A)&&(s=null);if(null!=e&&this.fontSize(e),i=this._fontFamilies[s])return this._font=i,this;var r="F".concat(++this._fontCount);return this._font=TA.open(this,A,t,r),(i=this._fontFamilies[this._font.name])?(this._font=i,this):(s&&(this._fontFamilies[s]=this._font),this._font.name&&(this._fontFamilies[this._font.name]=this._font),this)},fontSize:function(A){return this._fontSize=A,this},currentLineHeight:function(A){return null==A&&(A=!1),this._font.lineHeight(this._fontSize,A)},registerFont:function(A,t,e){return this._registeredFonts[A]={src:t,family:e},this}},jA=function(A){I(e,A);var t=d(e);function e(A,s){var i;return c(this,e),(i=t.call(this)).document=A,i.indent=s.indent||0,i.characterSpacing=s.characterSpacing||0,i.wordSpacing=0===s.wordSpacing,i.columns=s.columns||1,i.columnGap=null!=s.columnGap?s.columnGap:18,i.lineWidth=(s.width-i.columnGap*(i.columns-1))/i.columns,i.spaceLeft=i.lineWidth,i.startX=i.document.x,i.startY=i.document.y,i.column=1,i.ellipsis=s.ellipsis,i.continuedX=0,i.features=s.features,null!=s.height?(i.height=s.height,i.maxY=i.startY+s.height):i.maxY=i.document.page.maxY(),i.on("firstLine",(function(A){var t=i.continuedX||i.indent;return i.document.x+=t,i.lineWidth-=t,i.once("line",(function(){if(i.document.x-=t,i.lineWidth+=t,A.continued&&!i.continuedX&&(i.continuedX=i.indent),!A.continued)return i.continuedX=0}))})),i.on("lastLine",(function(A){var t=A.align;return"justify"===t&&(A.align="left"),i.lastLine=!0,i.once("line",(function(){return i.document.y+=A.paragraphGap||0,A.align=t,i.lastLine=!1}))})),i}return C(e,[{key:"wordWidth",value:function(A){return this.document.widthOfString(A,this)+this.characterSpacing+this.wordSpacing}},{key:"eachWord",value:function(A,t){for(var e,s=new E.default(A),i=null,n=Object.create(null);e=s.nextBreak();){var r,B=A.slice((null!=i?i.position:void 0)||0,e.position),o=null!=n[B]?n[B]:n[B]=this.wordWidth(B);if(o>this.lineWidth+this.continuedX)for(var w=i,g={};B.length;){var a,c;o>this.spaceLeft?(a=Math.ceil(this.spaceLeft/(o/B.length)),c=(o=this.wordWidth(B.slice(0,a)))<=this.spaceLeft&&athis.spaceLeft&&a>0;Q||c;)Q?Q=(o=this.wordWidth(B.slice(0,--a)))>this.spaceLeft&&a>0:(Q=(o=this.wordWidth(B.slice(0,++a)))>this.spaceLeft&&a>0,c=o<=this.spaceLeft&&athis.maxY||s>this.maxY)&&this.nextSection();var i="",n=0,r=0,B=0,o=this.document.y,E=function(){return t.textWidth=n+e.wordSpacing*(r-1),t.wordCount=r,t.lineWidth=e.lineWidth,o=e.document.y,e.emit("line",i,t,e),B++};return this.emit("sectionStart",t,this),this.eachWord(A,(function(A,s,B,o){if((null==o||o.required)&&(e.emit("firstLine",t,e),e.spaceLeft=e.lineWidth),s<=e.spaceLeft&&(i+=A,n+=s,r++),B.required||s>e.spaceLeft){var w=e.document.currentLineHeight(!0);if(null!=e.height&&e.ellipsis&&e.document.y+2*w>e.maxY&&e.column>=e.columns){for(!0===e.ellipsis&&(e.ellipsis="…"),i=i.replace(/\s+$/,""),n=e.wordWidth(i+e.ellipsis);i&&n>e.lineWidth;)i=i.slice(0,-1).replace(/\s+$/,""),n=e.wordWidth(i+e.ellipsis);n<=e.lineWidth&&(i+=e.ellipsis),n=e.wordWidth(i)}return B.required&&(s>e.spaceLeft&&(E(),i=A,n=s,r=1),e.emit("lastLine",t,e)),E(),e.document.y+w>e.maxY&&!e.nextSection()?(r=0,i="",!1):B.required?(e.spaceLeft=e.lineWidth,i="",n=0,r=0):(e.spaceLeft=e.lineWidth-s,i=A,n=s,r=1)}return e.spaceLeft-=s})),r>0&&(this.emit("lastLine",t,this),E()),this.emit("sectionEnd",t,this),!0===t.continued?(B>1&&(this.continuedX=0),this.continuedX+=t.textWidth||0,this.document.y=o):this.document.x=this.startX}},{key:"nextSection",value:function(A){if(this.emit("sectionEnd",A,this),++this.column>this.columns){if(null!=this.height)return!1;var t;this.document.continueOnNewPage(),this.column=1,this.startY=this.document.page.margins.top,this.maxY=this.document.page.maxY(),this.document.x=this.startX,this.document._fillColor&&(t=this.document).fillColor.apply(t,Y(this.document._fillColor)),this.emit("pageBreak",A,this)}else this.document.x+=this.lineWidth+this.columnGap,this.document.y=this.startY,this.emit("columnBreak",A,this);return this.emit("sectionStart",A,this),!0}}]),e}(o.EventEmitter),kA=G.number,JA={initText:function(){return this._line=this._line.bind(this),this.x=0,this.y=0,this._lineGap=0},lineGap:function(A){return this._lineGap=A,this},moveDown:function(A){return null==A&&(A=1),this.y+=this.currentLineHeight(!0)*A+this._lineGap,this},moveUp:function(A){return null==A&&(A=1),this.y-=this.currentLineHeight(!0)*A+this._lineGap,this},_text:function(A,t,e,s,i){var n=this;s=this._initOptions(t,e,s),A=null==A?"":"".concat(A),s.wordSpacing&&(A=A.replace(/\s{2,}/g," "));var r=function(){s.structParent&&s.structParent.add(n.struct(s.structType||"P",[n.markStructureContent(s.structType||"P")]))};if(s.width){var B=this._wrapper;B||((B=new jA(this,s)).on("line",i),B.on("firstLine",r)),this._wrapper=s.continued?B:null,this._textOptions=s.continued?s:null,B.wrap(A,s)}else{var o,E=y(A.split("\n"));try{for(E.s();!(o=E.n()).done;){var w=o.value;r(),i(w,s)}}catch(A){E.e(A)}finally{E.f()}}return this},text:function(A,t,e,s){return this._text(A,t,e,s,this._line)},widthOfString:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return this._font.widthOfString(A,this._fontSize,t.features)+(t.characterSpacing||0)*(A.length-1)},heightOfString:function(A,t){var e=this,s=this.x,i=this.y;(t=this._initOptions(t)).height=1/0;var n=t.lineGap||this._lineGap||0;this._text(A,this.x,this.y,t,(function(){return e.y+=e.currentLineHeight(!0)+n}));var r=this.y-i;return this.x=s,this.y=i,r},list:function(A,t,e,s,i){var n=this,r=(s=this._initOptions(t,e,s)).listType||"bullet",B=Math.round(this._font.ascender/1e3*this._fontSize),o=B/2,E=s.bulletRadius||B/3,w=s.textIndent||("bullet"===r?5*E:2*B),g=s.bulletIndent||("bullet"===r?8*E:2*B),a=1,c=[],Q=[],C=[];!function A(t){for(var e=1,s=0;s0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0,e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};"object"==typeof A&&(e=A,A=null);var s=Object.assign({},e);if(this._textOptions)for(var i in this._textOptions){var n=this._textOptions[i];"continued"!==i&&void 0===s[i]&&(s[i]=n)}return null!=A&&(this.x=A),null!=t&&(this.y=t),!1!==s.lineBreak&&(null==s.width&&(s.width=this.page.width-this.x-this.page.margins.right),s.width=Math.max(s.width,0)),s.columns||(s.columns=0),null==s.columnGap&&(s.columnGap=18),s},_line:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=arguments.length>2?arguments[2]:void 0;this._fragment(A,this.x,this.y,t);var s=t.lineGap||this._lineGap||0;return e?this.y+=this.currentLineHeight(!0)+s:this.x+=this.widthOfString(A)},_fragment:function(A,t,e,s){var i,n,r,B,o,E,w=this;if(0!==(A="".concat(A).replace(/\n/g,"")).length){var g=s.align||"left",a=s.wordSpacing||0,c=s.characterSpacing||0;if(s.width)switch(g){case"right":o=this.widthOfString(A.replace(/\s+$/,""),s),t+=s.lineWidth-o;break;case"center":t+=s.lineWidth/2-s.textWidth/2;break;case"justify":E=A.trim().split(/\s+/),o=this.widthOfString(A.replace(/\s+/g,""),s);var Q=this.widthOfString(" ")+c;a=Math.max(0,(s.lineWidth-o)/Math.max(1,E.length-1)-Q)}if("number"==typeof s.baseline)i=-s.baseline;else{switch(s.baseline){case"svg-middle":i=.5*this._font.xHeight;break;case"middle":case"svg-central":i=.5*(this._font.descender+this._font.ascender);break;case"bottom":case"ideographic":i=this._font.descender;break;case"alphabetic":i=0;break;case"mathematical":i=.5*this._font.ascender;break;case"hanging":i=.8*this._font.ascender;break;default:i=this._font.ascender}i=i/1e3*this._fontSize}var C,h=s.textWidth+a*(s.wordCount-1)+c*(A.length-1);if(null!=s.link&&this.link(t,e,h,this.currentLineHeight(),s.link),null!=s.goTo&&this.goTo(t,e,h,this.currentLineHeight(),s.goTo),null!=s.destination&&this.addNamedDestination(s.destination,"XYZ",t,e,null),s.underline){this.save(),s.stroke||this.strokeColor.apply(this,Y(this._fillColor||[]));var u=this._fontSize<10?.5:Math.floor(this._fontSize/10);this.lineWidth(u);var l=e+this.currentLineHeight()-u;this.moveTo(t,l),this.lineTo(t+h,l),this.stroke(),this.restore()}if(s.strike){this.save(),s.stroke||this.strokeColor.apply(this,Y(this._fillColor||[]));var I=this._fontSize<10?.5:Math.floor(this._fontSize/10);this.lineWidth(I);var f=e+this.currentLineHeight()/2;this.moveTo(t,f),this.lineTo(t+h,f),this.stroke(),this.restore()}this.save(),s.oblique&&(C="number"==typeof s.oblique?-Math.tan(s.oblique*Math.PI/180):-.25,this.transform(1,0,0,1,t,e),this.transform(1,0,C,1,-C*i,0),this.transform(1,0,0,1,-t,-e)),this.transform(1,0,0,-1,0,this.page.height),e=this.page.height-e-i,null==this.page.fonts[this._font.id]&&(this.page.fonts[this._font.id]=this._font.ref()),this.addContent("BT"),this.addContent("1 0 0 1 ".concat(kA(t)," ").concat(kA(e)," Tm")),this.addContent("/".concat(this._font.id," ").concat(kA(this._fontSize)," Tf"));var D=s.fill&&s.stroke?2:s.stroke?1:0;if(D&&this.addContent("".concat(D," Tr")),c&&this.addContent("".concat(kA(c)," Tc")),a){E=A.trim().split(/\s+/),a+=this.widthOfString(" ")+c,a*=1e3/this._fontSize,n=[],B=[];var b,d=y(E);try{for(d.s();!(b=d.n()).done;){var F=b.value,M=v(this._font.encode(F,s.features),2),L=M[0],R=M[1];n=n.concat(L),B=B.concat(R);var m={},x=B[B.length-1];for(var p in x){var G=x[p];m[p]=G}m.xAdvance+=a,B[B.length-1]=m}}catch(A){d.e(A)}finally{d.f()}}else{var W=v(this._font.encode(A,s.features),2);n=W[0],B=W[1]}var P=this._fontSize/1e3,H=[],S=0,U=!1,N=function(A){if(S ").concat(kA(-e)))}return S=A},T=function(A){if(N(A),H.length>0)return w.addContent("[".concat(H.join(" "),"] TJ")),H.length=0};for(r=0;r3&&void 0!==arguments[3]?arguments[3]:{};"object"==typeof t&&(w=t,t=null),t=null!=(o=null!=t?t:w.x)?o:this.x,e=null!=(E=null!=e?e:w.y)?E:this.y,"string"==typeof A&&(r=this._imageRegistry[A]),r||(r=A.width&&A.height?A:this.openImage(A)),r.obj||r.embed(this),null==this.page.xobjects[r.label]&&(this.page.xobjects[r.label]=r.obj);var g=w.width||r.width,a=w.height||r.height;if(w.width&&!w.height){var c=g/r.width;g=r.width*c,a=r.height*c}else if(w.height&&!w.width){var Q=a/r.height;g=r.width*Q,a=r.height*Q}else if(w.scale)g=r.width*w.scale,a=r.height*w.scale;else if(w.fit){var C=v(w.fit,2);i=(n=C[0])/(s=C[1]),(B=r.width/r.height)>i?(g=n,a=n/B):(a=s,g=s*B)}else if(w.cover){var h=v(w.cover,2);i=(n=h[0])/(s=h[1]),(B=r.width/r.height)>i?(a=s,g=s*B):(g=n,a=n/B)}return(w.fit||w.cover)&&("center"===w.align?t=t+n/2-g/2:"right"===w.align&&(t=t+n-g),"center"===w.valign?e=e+s/2-a/2:"bottom"===w.valign&&(e=e+s-a)),null!=w.link&&this.link(t,e,g,a,w.link),null!=w.goTo&&this.goTo(t,e,g,a,w.goTo),null!=w.destination&&this.addNamedDestination(w.destination,"XYZ",t,e,null),this.y===e&&(this.y+=a),this.save(),this.transform(g,0,0,-a,t,e+a),this.addContent("/".concat(r.label," Do")),this.restore(),this},openImage:function(A){var t;return"string"==typeof A&&(t=this._imageRegistry[A]),t||(t=XA.open(A,"I".concat(++this._imageCount)),"string"==typeof A&&(this._imageRegistry[A]=t)),t}},_A={annotate:function(A,t,e,s,i){for(var n in i.Type="Annot",i.Rect=this._convertRect(A,t,e,s),i.Border=[0,0,0],"Link"===i.Subtype&&void 0===i.F&&(i.F=4),"Link"!==i.Subtype&&null==i.C&&(i.C=this._normalizeColor(i.color||[0,0,0])),delete i.color,"string"==typeof i.Dest&&(i.Dest=new String(i.Dest)),i){var r=i[n];i[n[0].toUpperCase()+n.slice(1)]=r}var B=this.ref(i);return this.page.annotations.push(B),B.end(),this},note:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return n.Subtype="Text",n.Contents=new String(i),n.Name="Comment",null==n.color&&(n.color=[243,223,92]),this.annotate(A,t,e,s,n)},goTo:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return n.Subtype="Link",n.A=this.ref({S:"GoTo",D:new String(i)}),n.A.end(),this.annotate(A,t,e,s,n)},link:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};if(n.Subtype="Link","number"==typeof i){var r=this._root.data.Pages.data;if(!(i>=0&&i4&&void 0!==arguments[4]?arguments[4]:{},n=v(this._convertRect(A,t,e,s),4),r=n[0],B=n[1],o=n[2],E=n[3];return i.QuadPoints=[r,E,o,E,r,B,o,B],i.Contents=new String,this.annotate(A,t,e,s,i)},highlight:function(A,t,e,s){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return i.Subtype="Highlight",null==i.color&&(i.color=[241,238,148]),this._markup(A,t,e,s,i)},underline:function(A,t,e,s){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return i.Subtype="Underline",this._markup(A,t,e,s,i)},strike:function(A,t,e,s){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return i.Subtype="StrikeOut",this._markup(A,t,e,s,i)},lineAnnotation:function(A,t,e,s){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return i.Subtype="Line",i.Contents=new String,i.L=[A,this.page.height-t,e,this.page.height-s],this.annotate(A,t,e,s,i)},rectAnnotation:function(A,t,e,s){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return i.Subtype="Square",i.Contents=new String,this.annotate(A,t,e,s,i)},ellipseAnnotation:function(A,t,e,s){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return i.Subtype="Circle",i.Contents=new String,this.annotate(A,t,e,s,i)},textAnnotation:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return n.Subtype="FreeText",n.Contents=new String(i),n.DA=new String,this.annotate(A,t,e,s,n)},fileAnnotation:function(A,t,e,s){var i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{},n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{},r=this.file(i.src,Object.assign({hidden:!0},i));return n.Subtype="FileAttachment",n.FS=r,n.Contents?n.Contents=new String(n.Contents):r.data.Desc&&(n.Contents=r.data.Desc),this.annotate(A,t,e,s,n)},_convertRect:function(A,t,e,s){var i=t;t+=s;var n=A+e,r=v(this._ctm,6),B=r[0],o=r[1],E=r[2],w=r[3],g=r[4],a=r[5];return[A=B*A+E*t+g,t=o*A+w*t+a,n=B*n+E*i+g,i=o*n+w*i+a]}},$A=function(){function A(t,e,s,i){var n=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{expanded:!1};c(this,A),this.document=t,this.options=n,this.outlineData={},null!==i&&(this.outlineData.Dest=[i.dictionary,"Fit"]),null!==e&&(this.outlineData.Parent=e),null!==s&&(this.outlineData.Title=new String(s)),this.dictionary=this.document.ref(this.outlineData),this.children=[]}return C(A,[{key:"addItem",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{expanded:!1},s=new A(this.document,this.dictionary,t,this.document.page,e);return this.children.push(s),s}},{key:"endOutline",value:function(){if(this.children.length>0){this.options.expanded&&(this.outlineData.Count=this.children.length);var A=this.children[0],t=this.children[this.children.length-1];this.outlineData.First=A.dictionary,this.outlineData.Last=t.dictionary;for(var e=0,s=this.children.length;e0&&(i.outlineData.Prev=this.children[e-1].dictionary),e0)return this._root.data.Outlines=this.outline.dictionary,this._root.data.PageMode="UseOutlines"}},tt=function(){function A(t,e){c(this,A),this.refs=[{pageRef:t,mcid:e}]}return C(A,[{key:"push",value:function(A){var t=this;A.refs.forEach((function(A){return t.refs.push(A)}))}}]),A}(),et=function(){function A(t,e){var s=this,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;c(this,A),this.document=t,this._attached=!1,this._ended=!1,this._flushed=!1,this.dictionary=t.ref({S:e});var r=this.dictionary.data;(Array.isArray(i)||this._isValidChild(i))&&(n=i,i={}),void 0!==i.title&&(r.T=new String(i.title)),void 0!==i.lang&&(r.Lang=new String(i.lang)),void 0!==i.alt&&(r.Alt=new String(i.alt)),void 0!==i.expanded&&(r.E=new String(i.expanded)),void 0!==i.actual&&(r.ActualText=new String(i.actual)),this._children=[],n&&(Array.isArray(n)||(n=[n]),n.forEach((function(A){return s.add(A)})),this.end())}return C(A,[{key:"add",value:function(t){if(this._ended)throw new Error("Cannot add child to already-ended structure element");if(!this._isValidChild(t))throw new Error("Invalid structure element child");return t instanceof A&&(t.setParent(this.dictionary),this._attached&&t.setAttached()),t instanceof tt&&this._addContentToParentTree(t),"function"==typeof t&&this._attached&&(t=this._contentForClosure(t)),this._children.push(t),this}},{key:"_addContentToParentTree",value:function(A){var t=this;A.refs.forEach((function(A){var e=A.pageRef,s=A.mcid;t.document.getStructParentTree().get(e.data.StructParents)[s]=t.dictionary}))}},{key:"setParent",value:function(A){if(this.dictionary.data.P)throw new Error("Structure element added to more than one parent");this.dictionary.data.P=A,this._flush()}},{key:"setAttached",value:function(){var t=this;this._attached||(this._children.forEach((function(e,s){e instanceof A&&e.setAttached(),"function"==typeof e&&(t._children[s]=t._contentForClosure(e))})),this._attached=!0,this._flush())}},{key:"end",value:function(){this._ended||(this._children.filter((function(t){return t instanceof A})).forEach((function(A){return A.end()})),this._ended=!0,this._flush())}},{key:"_isValidChild",value:function(t){return t instanceof A||t instanceof tt||"function"==typeof t}},{key:"_contentForClosure",value:function(A){var t=this.document.markStructureContent(this.dictionary.data.S);return A(),this.document.endMarkedContent(),this._addContentToParentTree(t),t}},{key:"_isFlushable",value:function(){return!(!this.dictionary.data.P||!this._ended)&&this._children.every((function(t){return"function"!=typeof t&&(!(t instanceof A)||t._isFlushable())}))}},{key:"_flush",value:function(){var A=this;!this._flushed&&this._isFlushable()&&(this.dictionary.data.K=[],this._children.forEach((function(t){return A._flushChild(t)})),this.dictionary.end(),this._children=[],this.dictionary.data.K=null,this._flushed=!0)}},{key:"_flushChild",value:function(t){var e=this;t instanceof A&&this.dictionary.data.K.push(t.dictionary),t instanceof tt&&t.refs.forEach((function(A){var t=A.pageRef,s=A.mcid;e.dictionary.data.Pg||(e.dictionary.data.Pg=t),e.dictionary.data.Pg===t?e.dictionary.data.K.push(s):e.dictionary.data.K.push({Type:"MCR",Pg:t,MCID:s})}))}}]),A}(),st=function(A){I(e,A);var t=d(e);function e(){return c(this,e),t.apply(this,arguments)}return C(e,[{key:"_compareKeys",value:function(A,t){return parseInt(A)-parseInt(t)}},{key:"_keysName",value:function(){return"Nums"}},{key:"_dataForKey",value:function(A){return parseInt(A)}}]),e}(R),it={initMarkings:function(A){this.structChildren=[],A.tagged&&(this.getMarkInfoDictionary().data.Marked=!0,this.getStructTreeRoot())},markContent:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if("Artifact"===A||t&&t.mcid){var e=0;for(this.page.markings.forEach((function(A){(e||A.structContent||"Artifact"===A.tag)&&e++}));e--;)this.endMarkedContent()}if(!t)return this.page.markings.push({tag:A}),this.addContent("/".concat(A," BMC")),this;this.page.markings.push({tag:A,options:t});var s={};return void 0!==t.mcid&&(s.MCID=t.mcid),"Artifact"===A&&("string"==typeof t.type&&(s.Type=t.type),Array.isArray(t.bbox)&&(s.BBox=[t.bbox[0],this.page.height-t.bbox[3],t.bbox[2],this.page.height-t.bbox[1]]),Array.isArray(t.attached)&&t.attached.every((function(A){return"string"==typeof A}))&&(s.Attached=t.attached)),"Span"===A&&(t.lang&&(s.Lang=new String(t.lang)),t.alt&&(s.Alt=new String(t.alt)),t.expanded&&(s.E=new String(t.expanded)),t.actual&&(s.ActualText=new String(t.actual))),this.addContent("/".concat(A," ").concat(G.convert(s)," BDC")),this},markStructureContent:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=this.getStructParentTree().get(this.page.structParentTreeKey),s=e.length;e.push(null),this.markContent(A,l(l({},t),{},{mcid:s}));var i=new tt(this.page.dictionary,s);return this.page.markings.slice(-1)[0].structContent=i,i},endMarkedContent:function(){return this.page.markings.pop(),this.addContent("EMC"),this},struct:function(A){return new et(this,A,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},arguments.length>2&&void 0!==arguments[2]?arguments[2]:null)},addStructure:function(A){var t=this.getStructTreeRoot();return A.setParent(t),A.setAttached(),this.structChildren.push(A),t.data.K||(t.data.K=[]),t.data.K.push(A.dictionary),this},initPageMarkings:function(A){var t=this;A.forEach((function(A){if(A.structContent){var e=A.structContent,s=t.markStructureContent(A.tag,A.options);e.push(s),t.page.markings.slice(-1)[0].structContent=e}else t.markContent(A.tag,A.options)}))},endPageMarkings:function(A){var t=A.markings;return t.forEach((function(){return A.write("EMC")})),A.markings=[],t},getMarkInfoDictionary:function(){return this._root.data.MarkInfo||(this._root.data.MarkInfo=this.ref({})),this._root.data.MarkInfo},getStructTreeRoot:function(){return this._root.data.StructTreeRoot||(this._root.data.StructTreeRoot=this.ref({Type:"StructTreeRoot",ParentTree:new st,ParentTreeNextKey:0})),this._root.data.StructTreeRoot},getStructParentTree:function(){return this.getStructTreeRoot().data.ParentTree},createStructParentTreeNextKey:function(){this.getMarkInfoDictionary();var A=this.getStructTreeRoot(),t=A.data.ParentTreeNextKey++;return A.data.ParentTree.add(t,[]),t},endMarkings:function(){var A=this._root.data.StructTreeRoot;A&&(A.end(),this.structChildren.forEach((function(A){return A.end()}))),this._root.data.MarkInfo&&this._root.data.MarkInfo.end()}},nt={readOnly:1,required:2,noExport:4,multiline:4096,password:8192,toggleToOffButton:16384,radioButton:32768,pushButton:65536,combo:131072,edit:262144,sort:524288,multiSelect:2097152,noSpell:4194304},rt={left:0,center:1,right:2},Bt={value:"V",defaultValue:"DV"},ot={zip:"0",zipPlus4:"1",zip4:"1",phone:"2",ssn:"3"},Et={nDec:0,sepComma:!1,negStyle:"MinusBlack",currency:"",currencyPrepend:!0},wt={nDec:0,sepComma:!1},gt={initForm:function(){if(!this._font)throw new Error("Must set a font before calling initForm method");this._acroform={fonts:{},defaultFont:this._font.name},this._acroform.fonts[this._font.id]=this._font.ref();var A={Fields:[],NeedAppearances:!0,DA:new String("/".concat(this._font.id," 0 Tf 0 g")),DR:{Font:{}}};A.DR.Font[this._font.id]=this._font.ref();var t=this.ref(A);return this._root.data.AcroForm=t,this},endAcroForm:function(){var A=this;if(this._root.data.AcroForm){if(!Object.keys(this._acroform.fonts).length&&!this._acroform.defaultFont)throw new Error("No fonts specified for PDF form");var t=this._root.data.AcroForm.data.DR.Font;Object.keys(this._acroform.fonts).forEach((function(e){t[e]=A._acroform.fonts[e]})),this._root.data.AcroForm.data.Fields.forEach((function(t){A._endChild(t)})),this._root.data.AcroForm.end()}return this},_endChild:function(A){var t=this;return Array.isArray(A.data.Kids)&&(A.data.Kids.forEach((function(A){t._endChild(A)})),A.end()),this},formField:function(A){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=this._fieldDict(A,null,t),s=this.ref(e);return this._addToParent(s),s},formAnnotation:function(A,t,e,s,i,n){var r=arguments.length>6&&void 0!==arguments[6]?arguments[6]:{},B=this._fieldDict(A,t,r);B.Subtype="Widget",void 0===B.F&&(B.F=4),this.annotate(e,s,i,n,B);var o=this.page.annotations[this.page.annotations.length-1];return this._addToParent(o)},formText:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return this.formAnnotation(A,"text",t,e,s,i,n)},formPushButton:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return this.formAnnotation(A,"pushButton",t,e,s,i,n)},formCombo:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return this.formAnnotation(A,"combo",t,e,s,i,n)},formList:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return this.formAnnotation(A,"list",t,e,s,i,n)},formRadioButton:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return this.formAnnotation(A,"radioButton",t,e,s,i,n)},formCheckbox:function(A,t,e,s,i){var n=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};return this.formAnnotation(A,"checkbox",t,e,s,i,n)},_addToParent:function(A){var t=A.data.Parent;return t?(t.data.Kids||(t.data.Kids=[]),t.data.Kids.push(A)):this._root.data.AcroForm.data.Fields.push(A),this},_fieldDict:function(A,t){var e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!this._acroform)throw new Error("Call document.initForms() method before adding form elements to document");var s=Object.assign({},e);return null!==t&&(s=this._resolveType(t,e)),s=this._resolveFlags(s),s=this._resolveJustify(s),s=this._resolveFont(s),s=this._resolveStrings(s),s=this._resolveColors(s),(s=this._resolveFormat(s)).T=new String(A),s.parent&&(s.Parent=s.parent,delete s.parent),s},_resolveType:function(A,t){if("text"===A)t.FT="Tx";else if("pushButton"===A)t.FT="Btn",t.pushButton=!0;else if("radioButton"===A)t.FT="Btn",t.radioButton=!0;else if("checkbox"===A)t.FT="Btn";else if("combo"===A)t.FT="Ch",t.combo=!0;else{if("list"!==A)throw new Error("Invalid form annotation type '".concat(A,"'"));t.FT="Ch"}return t},_resolveFormat:function(A){var t=A.format;if(t&&t.type){var e,s,i="";if(void 0!==ot[t.type])e="AFSpecial_Keystroke",s="AFSpecial_Format",i=ot[t.type];else{var n=t.type.charAt(0).toUpperCase()+t.type.slice(1);if(e="AF".concat(n,"_Keystroke"),s="AF".concat(n,"_Format"),"date"===t.type)e+="Ex",i=String(t.param);else if("time"===t.type)i=String(t.param);else if("number"===t.type){var r=Object.assign({},Et,t);i=String([String(r.nDec),r.sepComma?"0":"1",'"'+r.negStyle+'"',"null",'"'+r.currency+'"',String(r.currencyPrepend)].join(","))}else if("percent"===t.type){var B=Object.assign({},wt,t);i=String([String(B.nDec),B.sepComma?"0":"1"].join(","))}}A.AA=A.AA?A.AA:{},A.AA.K={S:"JavaScript",JS:new String("".concat(e,"(").concat(i,");"))},A.AA.F={S:"JavaScript",JS:new String("".concat(s,"(").concat(i,");"))}}return delete A.format,A},_resolveColors:function(A){var t=this._normalizeColor(A.backgroundColor);return t&&(A.MK||(A.MK={}),A.MK.BG=t),(t=this._normalizeColor(A.borderColor))&&(A.MK||(A.MK={}),A.MK.BC=t),delete A.backgroundColor,delete A.borderColor,A},_resolveFlags:function(A){var t=0;return Object.keys(A).forEach((function(e){nt[e]&&(t|=nt[e],delete A[e])})),0!==t&&(A.Ff=A.Ff?A.Ff:0,A.Ff|=t),A},_resolveJustify:function(A){var t=0;return void 0!==A.align&&("number"==typeof rt[A.align]&&(t=rt[A.align]),delete A.align),0!==t&&(A.Q=t),A},_resolveFont:function(A){if(null===this._acroform.fonts[this._font.id]&&(this._acroform.fonts[this._font.id]=this._font.ref()),this._acroform.defaultFont!==this._font.name){A.DR={Font:{}};var t=A.fontSize||0;A.DR.Font[this._font.id]=this._font.ref(),A.DA=new String("/".concat(this._font.id," ").concat(t," Tf 0 g"))}return A},_resolveStrings:function(A){var t=[];function e(A){if(Array.isArray(A))for(var e=0;e1&&void 0!==arguments[1]?arguments[1]:{};t.name=t.name||A;var e,i={Type:"EmbeddedFile",Params:{}};if(!A)throw new Error("No src specified");if(s.isBuffer(A))e=A;else if(A instanceof ArrayBuffer)e=s.from(new Uint8Array(A));else{var n;if(n=/^data:(.*);base64,(.*)$/.exec(A))n[1]&&(i.Subtype=n[1].replace("/","#2F")),e=s.from(n[2],"base64");else{if(!(e=a.readFileSync(A)))throw new Error("Could not read contents of file at filepath ".concat(A));var B=a.statSync(A),o=B.birthtime,E=B.ctime;i.Params.CreationDate=o,i.Params.ModDate=E}}t.creationDate instanceof Date&&(i.Params.CreationDate=t.creationDate),t.modifiedDate instanceof Date&&(i.Params.ModDate=t.modifiedDate),t.type&&(i.Subtype=t.type.replace("/","#2F"));var w,g=r.default.MD5(r.default.lib.WordArray.create(new Uint8Array(e)));i.Params.CheckSum=new String(g),i.Params.Size=e.byteLength,this._fileRegistry||(this._fileRegistry={});var c,Q,C=this._fileRegistry[t.name];C&&(Q=C,(c=i).Subtype===Q.Subtype&&c.Params.CheckSum.toString()===Q.Params.CheckSum.toString()&&c.Params.Size===Q.Params.Size&&c.Params.CreationDate===Q.Params.CreationDate&&c.Params.ModDate===Q.Params.ModDate)?w=C.ref:((w=this.ref(i)).end(e),this._fileRegistry[t.name]=l(l({},i),{},{ref:w}));var h={Type:"Filespec",F:new String(t.name),EF:{F:w},UF:new String(t.name)};t.description&&(h.Desc=new String(t.description));var u=this.ref(h);return u.end(),t.hidden||this.addNamedEmbeddedFile(t.name,u),u}},ct={initPDFA:function(A){"-"===A.charAt(A.length-3)?(this.subset_conformance=A.charAt(A.length-1).toUpperCase(),this.subset=parseInt(A.charAt(A.length-2))):(this.subset_conformance="B",this.subset=parseInt(A.charAt(A.length-1)))},endSubset:function(){this._addPdfaMetadata();var A="".concat("/","/data/sRGB_IEC61966_2_1.icc"),t="".concat("/","/../color_profiles/sRGB_IEC61966_2_1.icc");this._addColorOutputIntent(a.existsSync(A)?A:t)},_addColorOutputIntent:function(A){var t=a.readFileSync(A),e=this.ref({Length:t.length,N:3});e.write(t),e.end();var s=this.ref({Type:"OutputIntent",S:"GTS_PDFA1",Info:new String("sRGB IEC61966-2.1"),OutputConditionIdentifier:new String("sRGB IEC61966-2.1"),DestOutputProfile:e});s.end(),this._root.data.OutputIntents=[s]},_getPdfaid:function(){return'\n \n '.concat(this.subset,"\n ").concat(this.subset_conformance,"\n \n ")},_addPdfaMetadata:function(){this.appendXML(this._getPdfaid())}},Qt={_importSubset:function(A){Object.assign(this,A)},initSubset:function(A){switch(A.subset){case"PDF/A-1":case"PDF/A-1a":case"PDF/A-1b":case"PDF/A-2":case"PDF/A-2a":case"PDF/A-2b":case"PDF/A-3":case"PDF/A-3a":case"PDF/A-3b":this._importSubset(ct),this.initPDFA(A.subset)}}},Ct=function(){function A(){c(this,A),this._metadata='\n \n \n \n '}return C(A,[{key:"_closeTags",value:function(){this._metadata=this._metadata.concat('\n \n \n \n ')}},{key:"append",value:function(A){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this._metadata=this._metadata.concat(A),t&&(this._metadata=this._metadata.concat("\n"))}},{key:"getXML",value:function(){return this._metadata}},{key:"getLength",value:function(){return this._metadata.length}},{key:"end",value:function(){this._closeTags(),this._metadata=this._metadata.trim()}}]),A}(),ht={initMetadata:function(){this.metadata=new Ct},appendXML:function(A){var t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1];this.metadata.append(A,t)},_addInfo:function(){this.appendXML('\n \n '.concat(this.info.CreationDate.toISOString().split(".")[0]+"Z","\n ").concat(this.info.Creator,"\n \n ")),(this.info.Title||this.info.Author||this.info.Subject)&&(this.appendXML('\n \n '),this.info.Title&&this.appendXML('\n \n \n '.concat(this.info.Title,"\n \n \n ")),this.info.Author&&this.appendXML("\n \n \n ".concat(this.info.Author,"\n \n \n ")),this.info.Subject&&this.appendXML('\n \n \n '.concat(this.info.Subject,"\n \n \n ")),this.appendXML("\n \n ")),this.appendXML('\n \n '.concat(this.info.Creator,""),!1),this.info.Keywords&&this.appendXML("\n ".concat(this.info.Keywords,""),!1),this.appendXML("\n \n ")},endMetadata:function(){this._addInfo(),this.metadata.end(),1.3!=this.version&&(this.metadataRef=this.ref({length:this.metadata.getLength(),Type:"Metadata",Subtype:"XML"}),this.metadataRef.compress=!1,this.metadataRef.write(s.from(this.metadata.getXML(),"utf-8")),this.metadataRef.end(),this._root.data.Metadata=this.metadataRef)}},ut=function(A){I(e,A);var t=d(e);function e(){var A,s=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};switch(c(this,e),(A=t.call(this,s)).options=s,s.pdfVersion){case"1.4":A.version=1.4;break;case"1.5":A.version=1.5;break;case"1.6":A.version=1.6;break;case"1.7":case"1.7ext3":A.version=1.7;break;default:A.version=1.3}A.compress=null==A.options.compress||A.options.compress,A._pageBuffer=[],A._pageBufferStart=0,A._offsets=[],A._waiting=0,A._ended=!1,A._offset=0;var i=A.ref({Type:"Pages",Count:0,Kids:[]}),n=A.ref({Dests:new U});if(A._root=A.ref({Type:"Catalog",Pages:i,Names:n}),A.options.lang&&(A._root.data.Lang=new String(A.options.lang)),A.page=null,A.initMetadata(),A.initColor(),A.initVector(),A.initFonts(s.font),A.initText(),A.initImages(),A.initOutline(),A.initMarkings(s),A.initSubset(s),A.info={Producer:"PDFKit",Creator:"PDFKit",CreationDate:new Date},A.options.info)for(var r in A.options.info){var B=A.options.info[r];A.info[r]=B}return A.options.displayTitle&&(A._root.data.ViewerPreferences=A.ref({DisplayDocTitle:!0})),A._id=tA.generateFileID(A.info),A._security=tA.create(b(A),s),A._write("%PDF-".concat(A.version)),A._write("%ÿÿÿÿ"),!1!==A.options.autoFirstPage&&A.addPage(),A}return C(e,[{key:"addPage",value:function(A){null==A&&(A=this.options),this.options.bufferPages||this.flushPages(),this.page=new S(this,A),this._pageBuffer.push(this.page);var t=this._root.data.Pages.data;return t.Kids.push(this.page.dictionary),t.Count++,this.x=this.page.margins.left,this.y=this.page.margins.top,this._ctm=[1,0,0,1,0,0],this.transform(1,0,0,-1,0,this.page.height),this.emit("pageAdded"),this}},{key:"continueOnNewPage",value:function(A){var t=this.endPageMarkings(this.page);return this.addPage(A),this.initPageMarkings(t),this}},{key:"bufferedPageRange",value:function(){return{start:this._pageBufferStart,count:this._pageBuffer.length}}},{key:"switchToPage",value:function(A){var t;if(!(t=this._pageBuffer[A-this._pageBufferStart]))throw new Error("switchToPage(".concat(A,") out of bounds, current buffer covers pages ").concat(this._pageBufferStart," to ").concat(this._pageBufferStart+this._pageBuffer.length-1));return this.page=t}},{key:"flushPages",value:function(){var A=this._pageBuffer;this._pageBuffer=[],this._pageBufferStart+=A.length;var t,e=y(A);try{for(e.s();!(t=e.n()).done;){var s=t.value;this.endPageMarkings(s),s.end()}}catch(A){e.e(A)}finally{e.f()}}},{key:"addNamedDestination",value:function(A){for(var t=arguments.length,e=new Array(t>1?t-1:0),s=1;s1?e-1:0),i=1;i1?e-1:0),i=1;i1?e-1:0),i=1;i1?e-1:0),i=1;iA.length)&&(e=A.length),A.substring(e-t.length,e)===t}var I="",f="",D="",b="",d={deepStrictEqual:"Expected values to be strictly deep-equal:",strictEqual:"Expected values to be strictly equal:",strictEqualObject:'Expected "actual" to be reference-equal to "expected":',deepEqual:"Expected values to be loosely deep-equal:",equal:"Expected values to be loosely equal:",notDeepStrictEqual:'Expected "actual" not to be strictly deep-equal to:',notStrictEqual:'Expected "actual" to be strictly unequal to:',notStrictEqualObject:'Expected "actual" not to be reference-equal to "expected":',notDeepEqual:'Expected "actual" not to be loosely deep-equal to:',notEqual:'Expected "actual" to be loosely unequal to:',notIdentical:"Values identical but not reference-equal:"};function v(A){var t=Object.keys(A),e=Object.create(Object.getPrototypeOf(A));return t.forEach((function(t){e[t]=A[t]})),Object.defineProperty(e,"message",{value:A.message}),e}function Y(A){return h(A,{compact:!1,customInspect:!1,depth:1e3,maxArrayLength:1/0,showHidden:!1,breakLength:1/0,showProxy:!1,sorted:!0,getters:!0})}var F=function(A,t){!function(A,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");A.prototype=Object.create(t&&t.prototype,{constructor:{value:A,writable:!0,configurable:!0}}),Object.defineProperty(A,"prototype",{writable:!1}),t&&c(A,t)}(F,A);var e,i,B,w,g=(e=F,i=a(),function(){var A,t=Q(e);if(i){var s=Q(this).constructor;A=Reflect.construct(t,arguments,s)}else A=t.apply(this,arguments);return o(this,A)});function F(A){var t;if(function(A,t){if(!(A instanceof t))throw new TypeError("Cannot call a class as a function")}(this,F),"object"!==C(A)||null===A)throw new u("options","Object",A);var e=A.message,i=A.operator,n=A.stackStartFn,r=A.actual,B=A.expected,w=Error.stackTraceLimit;if(Error.stackTraceLimit=0,null!=e)t=g.call(this,String(e));else if(s.stderr&&s.stderr.isTTY&&(s.stderr&&s.stderr.getColorDepth&&1!==s.stderr.getColorDepth()?(I="",f="",b="",D=""):(I="",f="",b="",D="")),"object"===C(r)&&null!==r&&"object"===C(B)&&null!==B&&"stack"in r&&r instanceof Error&&"stack"in B&&B instanceof Error&&(r=v(r),B=v(B)),"deepStrictEqual"===i||"strictEqual"===i)t=g.call(this,function(A,t,e){var i="",n="",r=0,B="",o=!1,E=Y(A),w=E.split("\n"),g=Y(t).split("\n"),a=0,c="";if("strictEqual"===e&&"object"===C(A)&&"object"===C(t)&&null!==A&&null!==t&&(e="strictEqualObject"),1===w.length&&1===g.length&&w[0]!==g[0]){var Q=w[0].length+g[0].length;if(Q<=10){if(!("object"===C(A)&&null!==A||"object"===C(t)&&null!==t||0===A&&0===t))return"".concat(d[e],"\n\n")+"".concat(w[0]," !== ").concat(g[0],"\n")}else if("strictEqualObject"!==e&&Q<(s.stderr&&s.stderr.isTTY?s.stderr.columns:80)){for(;w[0][a]===g[0][a];)a++;a>2&&(c="\n ".concat(function(A,t){if(t=Math.floor(t),0==A.length||0==t)return"";var e=A.length*t;for(t=Math.floor(Math.log(t)/Math.log(2));t;)A+=A,t--;return A+A.substring(0,e-A.length)}(" ",a),"^"),a=0)}}for(var h=w[w.length-1],u=g[g.length-1];h===u&&(a++<2?B="\n ".concat(h).concat(B):i=h,w.pop(),g.pop(),0!==w.length&&0!==g.length);)h=w[w.length-1],u=g[g.length-1];var v=Math.max(w.length,g.length);if(0===v){var F=E.split("\n");if(F.length>30)for(F[26]="".concat(I,"...").concat(b);F.length>27;)F.pop();return"".concat(d.notIdentical,"\n\n").concat(F.join("\n"),"\n")}a>3&&(B="\n".concat(I,"...").concat(b).concat(B),o=!0),""!==i&&(B="\n ".concat(i).concat(B),i="");var M=0,y=d[e]+"\n".concat(f,"+ actual").concat(b," ").concat(D,"- expected").concat(b),L=" ".concat(I,"...").concat(b," Lines skipped");for(a=0;a1&&a>2&&(R>4?(n+="\n".concat(I,"...").concat(b),o=!0):R>3&&(n+="\n ".concat(g[a-2]),M++),n+="\n ".concat(g[a-1]),M++),r=a,i+="\n".concat(D,"-").concat(b," ").concat(g[a]),M++;else if(g.length1&&a>2&&(R>4?(n+="\n".concat(I,"...").concat(b),o=!0):R>3&&(n+="\n ".concat(w[a-2]),M++),n+="\n ".concat(w[a-1]),M++),r=a,n+="\n".concat(f,"+").concat(b," ").concat(w[a]),M++;else{var m=g[a],x=w[a],p=x!==m&&(!l(x,",")||x.slice(0,-1)!==m);p&&l(m,",")&&m.slice(0,-1)===x&&(p=!1,x+=","),p?(R>1&&a>2&&(R>4?(n+="\n".concat(I,"...").concat(b),o=!0):R>3&&(n+="\n ".concat(w[a-2]),M++),n+="\n ".concat(w[a-1]),M++),r=a,n+="\n".concat(f,"+").concat(b," ").concat(x),i+="\n".concat(D,"-").concat(b," ").concat(m),M+=2):(n+=i,i="",1!==R&&0!==a||(n+="\n ".concat(x),M++))}if(M>20&&a30)for(c[26]="".concat(I,"...").concat(b);c.length>27;)c.pop();t=1===c.length?g.call(this,"".concat(a," ").concat(c[0])):g.call(this,"".concat(a,"\n\n").concat(c.join("\n"),"\n"))}else{var Q=Y(r),h="",M=d[i];"notDeepEqual"===i||"notEqual"===i?(Q="".concat(d[i],"\n\n").concat(Q)).length>1024&&(Q="".concat(Q.slice(0,1021),"...")):(h="".concat(Y(B)),Q.length>512&&(Q="".concat(Q.slice(0,509),"...")),h.length>512&&(h="".concat(h.slice(0,509),"...")),"deepEqual"===i||"equal"===i?Q="".concat(M,"\n\n").concat(Q,"\n\nshould equal\n\n"):h=" ".concat(i," ").concat(h)),t=g.call(this,"".concat(Q).concat(h))}return Error.stackTraceLimit=w,t.generatedMessage=!e,Object.defineProperty(E(t),"name",{value:"AssertionError [ERR_ASSERTION]",enumerable:!1,writable:!0,configurable:!0}),t.code="ERR_ASSERTION",t.actual=r,t.expected=B,t.operator=i,Error.captureStackTrace&&Error.captureStackTrace(E(t),n),t.stack,t.name="AssertionError",o(t)}return B=F,(w=[{key:"toString",value:function(){return"".concat(this.name," [").concat(this.code,"]: ").concat(this.message)}},{key:t,value:function(A,t){return h(this,n(n({},t),{},{customInspect:!1,depth:0}))}}])&&r(B.prototype,w),Object.defineProperty(B,"prototype",{writable:!1}),F}(w(Error),h.custom);A.exports=F},35403:function(A,t,e){"use strict";function s(A){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(A){return typeof A}:function(A){return A&&"function"==typeof Symbol&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A},s(A)}function i(A,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(A,t){return A.__proto__=t,A},i(A,t)}function n(A){return n=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(A){return A.__proto__||Object.getPrototypeOf(A)},n(A)}var r,B,o={};function E(A,t,e){e||(e=Error);var r=function(e){!function(A,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");A.prototype=Object.create(t&&t.prototype,{constructor:{value:A,writable:!0,configurable:!0}}),Object.defineProperty(A,"prototype",{writable:!1}),t&&i(A,t)}(w,e);var r,B,o,E=(B=w,o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(A){return!1}}(),function(){var A,t=n(B);if(o){var e=n(this).constructor;A=Reflect.construct(t,arguments,e)}else A=t.apply(this,arguments);return function(A,t){if(t&&("object"===s(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(A){if(void 0===A)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return A}(A)}(this,A)});function w(e,s,i){var n;return function(A,t){if(!(A instanceof t))throw new TypeError("Cannot call a class as a function")}(this,w),n=E.call(this,function(A,e,s){return"string"==typeof t?t:t(A,e,s)}(e,s,i)),n.code=A,n}return r=w,Object.defineProperty(r,"prototype",{writable:!1}),r}(e);o[A]=r}function w(A,t){if(Array.isArray(A)){var e=A.length;return A=A.map((function(A){return String(A)})),e>2?"one of ".concat(t," ").concat(A.slice(0,e-1).join(", "),", or ")+A[e-1]:2===e?"one of ".concat(t," ").concat(A[0]," or ").concat(A[1]):"of ".concat(t," ").concat(A[0])}return"of ".concat(t," ").concat(String(A))}E("ERR_AMBIGUOUS_ARGUMENT",'The "%s" argument is ambiguous. %s',TypeError),E("ERR_INVALID_ARG_TYPE",(function(A,t,i){var n,B,o,E,g;if(void 0===r&&(r=e(80182)),r("string"==typeof A,"'name' must be a string"),"string"==typeof t&&(B="not ",t.substr(0,4)===B)?(n="must not be",t=t.replace(/^not /,"")):n="must be",function(A,t,e){return(void 0===e||e>A.length)&&(e=A.length),A.substring(e-9,e)===t}(A," argument"))o="The ".concat(A," ").concat(n," ").concat(w(t,"type"));else{var a=("number"!=typeof g&&(g=0),g+1>(E=A).length||-1===E.indexOf(".",g)?"argument":"property");o='The "'.concat(A,'" ').concat(a," ").concat(n," ").concat(w(t,"type"))}return o+". Received type ".concat(s(i))}),TypeError),E("ERR_INVALID_ARG_VALUE",(function(A,t){var s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"is invalid";void 0===B&&(B=e(7187));var i=B.inspect(t);return i.length>128&&(i="".concat(i.slice(0,128),"...")),"The argument '".concat(A,"' ").concat(s,". Received ").concat(i)}),TypeError,RangeError),E("ERR_INVALID_RETURN_VALUE",(function(A,t,e){var i;return i=e&&e.constructor&&e.constructor.name?"instance of ".concat(e.constructor.name):"type ".concat(s(e)),"Expected ".concat(A,' to be returned from the "').concat(t,'"')+" function but got ".concat(i,".")}),TypeError),E("ERR_MISSING_ARGS",(function(){for(var A=arguments.length,t=new Array(A),s=0;s0,"At least one arg needs to be specified");var i="The ",n=t.length;switch(t=t.map((function(A){return'"'.concat(A,'"')})),n){case 1:i+="".concat(t[0]," argument");break;case 2:i+="".concat(t[0]," and ").concat(t[1]," arguments");break;default:i+=t.slice(0,n-1).join(", "),i+=", and ".concat(t[n-1]," arguments")}return"".concat(i," must be specified")}),TypeError),A.exports.codes=o},86781:function(A,t,e){"use strict";function s(A,t){return function(A){if(Array.isArray(A))return A}(A)||function(A,t){var e=null==A?null:"undefined"!=typeof Symbol&&A[Symbol.iterator]||A["@@iterator"];if(null!=e){var s,i,n,r,B=[],o=!0,E=!1;try{if(n=(e=e.call(A)).next,0===t){if(Object(e)!==e)return;o=!1}else for(;!(o=(s=n.call(e)).done)&&(B.push(s.value),B.length!==t);o=!0);}catch(A){E=!0,i=A}finally{try{if(!o&&null!=e.return&&(r=e.return(),Object(r)!==r))return}finally{if(E)throw i}}return B}}(A,t)||function(A,t){if(A){if("string"==typeof A)return i(A,t);var e=Object.prototype.toString.call(A).slice(8,-1);return"Object"===e&&A.constructor&&(e=A.constructor.name),"Map"===e||"Set"===e?Array.from(A):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?i(A,t):void 0}}(A,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(A,t){(null==t||t>A.length)&&(t=A.length);for(var e=0,s=new Array(t);e10)return!0;for(var t=0;t57)return!0}return 10===A.length&&A>=Math.pow(2,32)}function p(A){return Object.keys(A).filter(x).concat(w(A).filter(Object.prototype.propertyIsEnumerable.bind(A)))}function G(A,t){if(A===t)return 0;for(var e=A.length,s=t.length,i=0,n=Math.min(e,s);i0?r-4:r;for(e=0;e>16&255,E[w++]=t>>8&255,E[w++]=255&t;return 2===o&&(t=s[A.charCodeAt(e)]<<2|s[A.charCodeAt(e+1)]>>4,E[w++]=255&t),1===o&&(t=s[A.charCodeAt(e)]<<10|s[A.charCodeAt(e+1)]<<4|s[A.charCodeAt(e+2)]>>2,E[w++]=t>>8&255,E[w++]=255&t),E},t.fromByteArray=function(A){for(var t,s=A.length,i=s%3,n=[],r=16383,B=0,E=s-i;BE?E:B+r));return 1===i?(t=A[s-1],n.push(e[t>>2]+e[t<<4&63]+"==")):2===i&&(t=(A[s-2]<<8)+A[s-1],n.push(e[t>>10]+e[t>>4&63]+e[t<<2&63]+"=")),n.join("")};for(var e=[],s=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r=0;r<64;++r)e[r]=n[r],s[n.charCodeAt(r)]=r;function B(A){var t=A.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var e=A.indexOf("=");return-1===e&&(e=t),[e,e===t?0:4-e%4]}function o(A,t,s){for(var i,n,r=[],B=t;B>18&63]+e[n>>12&63]+e[n>>6&63]+e[63&n]);return r.join("")}s["-".charCodeAt(0)]=62,s["_".charCodeAt(0)]=63},34097:function(A){var t=4096,e=new Uint32Array([0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215]);function s(A){this.buf_=new Uint8Array(8224),this.input_=A,this.reset()}s.READ_SIZE=t,s.IBUF_MASK=8191,s.prototype.reset=function(){this.buf_ptr_=0,this.val_=0,this.pos_=0,this.bit_pos_=0,this.bit_end_pos_=0,this.eos_=0,this.readMoreInput();for(var A=0;A<4;A++)this.val_|=this.buf_[this.pos_]<<8*A,++this.pos_;return this.bit_end_pos_>0},s.prototype.readMoreInput=function(){if(!(this.bit_end_pos_>256))if(this.eos_){if(this.bit_pos_>this.bit_end_pos_)throw new Error("Unexpected end of input "+this.bit_pos_+" "+this.bit_end_pos_)}else{var A=this.buf_ptr_,e=this.input_.read(this.buf_,A,t);if(e<0)throw new Error("Unexpected end of input");if(e=8;)this.val_>>>=8,this.val_|=this.buf_[8191&this.pos_]<<24,++this.pos_,this.bit_pos_=this.bit_pos_-8>>>0,this.bit_end_pos_=this.bit_end_pos_-8>>>0},s.prototype.readBits=function(A){32-this.bit_pos_>>this.bit_pos_&e[A];return this.bit_pos_+=A,t},A.exports=s},7043:function(A,t){t.lookup=new Uint8Array([0,0,0,0,0,0,0,0,0,4,4,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,12,16,12,12,20,12,16,24,28,12,12,32,12,36,12,44,44,44,44,44,44,44,44,44,44,32,32,24,40,28,12,12,48,52,52,52,48,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,48,52,52,52,52,52,24,12,28,12,12,12,56,60,60,60,56,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,56,60,60,60,60,60,24,12,28,12,0,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,0,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,40,48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,56,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,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,52,53,54,55,56,57,58,59,60,61,62,63,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,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,52,53,54,55,56,57,58,59,60,61,62,63,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,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,52,53,54,55,56,57,58,59,60,61,62,63,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,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,52,53,54,55,56,57,58,59,60,61,62,63,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,7,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,11,11,11,11,12,12,12,12,13,13,13,13,14,14,14,14,15,15,15,15,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,22,22,22,22,23,23,23,23,24,24,24,24,25,25,25,25,26,26,26,26,27,27,27,27,28,28,28,28,29,29,29,29,30,30,30,30,31,31,31,31,32,32,32,32,33,33,33,33,34,34,34,34,35,35,35,35,36,36,36,36,37,37,37,37,38,38,38,38,39,39,39,39,40,40,40,40,41,41,41,41,42,42,42,42,43,43,43,43,44,44,44,44,45,45,45,45,46,46,46,46,47,47,47,47,48,48,48,48,49,49,49,49,50,50,50,50,51,51,51,51,52,52,52,52,53,53,53,53,54,54,54,54,55,55,55,55,56,56,56,56,57,57,57,57,58,58,58,58,59,59,59,59,60,60,60,60,61,61,61,61,62,62,62,62,63,63,63,63,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),t.lookupOffsets=new Uint16Array([1024,1536,1280,1536,0,256,768,512])},20980:function(A,t,e){var s=e(98197).z,i=e(98197).y,n=e(34097),r=e(80614),B=e(81561).z,o=e(81561).u,E=e(7043),w=e(42210),g=e(87984),a=8,c=16,Q=8,C=255,h=1080,u=18,l=new Uint8Array([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),I=16,f=new Uint8Array([3,2,1,0,3,3,3,3,3,3,2,2,2,2,2,2]),D=new Int8Array([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),b=new Uint16Array([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]);function d(A){var t;return 0===A.readBits(1)?16:(t=A.readBits(3))>0?17+t:(t=A.readBits(3))>0?8+t:17}function v(A){if(A.readBits(1)){var t=A.readBits(3);return 0===t?1:A.readBits(t)+(1<1&&0===n)throw new Error("Invalid size byte");i.meta_block_length|=n<<8*s}}else for(s=0;s4&&0===r)throw new Error("Invalid size nibble");i.meta_block_length|=r<<4*s}return++i.meta_block_length,i.input_end||i.is_metadata||(i.is_uncompressed=A.readBits(1)),i}function M(A,t,e){var s;return e.fillBitWindow(),(s=A[t+=e.val_>>>e.bit_pos_&C].bits-Q)>0&&(e.bit_pos_+=Q,t+=A[t].value,t+=e.val_>>>e.bit_pos_&(1<>=1,++w;for(h=0;h0;++h){var d,v=l[h],Y=0;s.fillBitWindow(),Y+=s.val_>>>s.bit_pos_&15,s.bit_pos_+=b[Y].bits,d=b[Y].value,I[v]=d,0!==d&&(f-=32>>d,++D)}if(1!==D&&0!==f)throw new Error("[ReadHuffmanCode] invalid num_codes or space");!function(A,t,e,s){for(var i=0,n=a,r=0,E=0,w=32768,g=[],Q=0;Q<32;Q++)g.push(new B(0,0));for(o(g,0,5,A,u);i0;){var C,h=0;if(s.readMoreInput(),s.fillBitWindow(),h+=s.val_>>>s.bit_pos_&31,s.bit_pos_+=g[h].bits,(C=255&g[h].value)>C);else{var l,I,f=C-14,D=0;if(C===c&&(D=n),E!==D&&(r=0,E=D),l=r,r>0&&(r-=2,r<<=f),i+(I=(r+=s.readBits(f)+3)-l)>t)throw new Error("[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols");for(var b=0;b>>5]),this.htrees=new Uint32Array(t)}function p(A,t){var e,s,i={num_htrees:null,context_map:null},n=0;t.readMoreInput();var r=i.num_htrees=v(t)+1,o=i.context_map=new Uint8Array(A);if(r<=1)return i;for(t.readBits(1)&&(n=t.readBits(4)+1),e=[],s=0;s=A)throw new Error("[DecodeContextMap] i >= context_map_size");o[s]=0,++s}else o[s]=E-n,++s}return t.readBits(1)&&function(A,t){var e,s=new Uint8Array(256);for(e=0;e<256;++e)s[e]=e;for(e=0;e=A&&(B-=A),s[e]=B,i[o+(1&n[E])]=B,++n[E]}function W(A,t,e,s,i,r){var B,o=i+1,E=e&i,w=r.pos_&n.IBUF_MASK;if(t<8||r.bit_pos_+(t<<3)0;)r.readMoreInput(),s[E++]=r.readBits(8),E===o&&(A.write(s,o),E=0);else{if(r.bit_end_pos_<32)throw new Error("[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32");for(;r.bit_pos_<32;)s[E]=r.val_>>>r.bit_pos_,r.bit_pos_+=8,++E,--t;if(w+(B=r.bit_end_pos_-r.bit_pos_>>3)>n.IBUF_MASK){for(var g=n.IBUF_MASK+1-w,a=0;a=o)for(A.write(s,o),E-=o,a=0;a=o;){if(B=o-E,r.input_.read(s,E,B)t.buffer.length){var cA=new Uint8Array(f+$);cA.set(t.buffer),t.buffer=cA}if(D=aA.input_end,V=aA.is_uncompressed,aA.is_metadata)for(P(l);$>0;--$)l.readMoreInput(),l.readBits(8);else if(0!==$)if(V)l.bit_pos_=l.bit_pos_+7&-8,W(t,$,f,c,a,l),f+=$;else{for(e=0;e<3;++e)eA[e]=v(l)+1,eA[e]>=2&&(y(eA[e]+2,C,e*h,l),y(26,u,e*h,l),AA[e]=L(u,e*h,l),iA[e]=1);for(l.readMoreInput(),J=(1<<(j=l.readBits(2)))-1,z=(k=I+(l.readBits(4)<0;){var hA,uA,lA,IA,fA,DA,bA,dA,vA,YA,FA,MA;for(l.readMoreInput(),0===AA[1]&&(G(eA[1],C,1,tA,sA,iA,l),AA[1]=L(u,h,l),_=U[1].htrees[tA[1]]),--AA[1],(uA=(hA=M(U[1].codes,_,l))>>6)>=2?(uA-=2,bA=-1):bA=0,lA=w.kInsertRangeLut[uA]+(hA>>3&7),IA=w.kCopyRangeLut[uA]+(7&hA),fA=w.kInsertLengthPrefixCode[lA].offset+l.readBits(w.kInsertLengthPrefixCode[lA].nbits),DA=w.kCopyLengthPrefixCode[IA].offset+l.readBits(w.kCopyLengthPrefixCode[IA].nbits),H=c[f-1&a],S=c[f-2&a],vA=0;vA4?3:DA-2))],(bA=M(U[2].codes,U[2].htrees[EA],l))>=k&&(MA=(bA-=k)&J,bA=k+((yA=(2+(1&(bA>>=j))<<(FA=1+(bA>>1)))-4)+l.readBits(FA)<(b=f=r.minDictionaryWordLength&&DA<=r.maxDictionaryWordLength))throw new Error("Invalid backward reference. pos: "+f+" distance: "+dA+" len: "+DA+" bytes left: "+$);var yA=r.offsetsByLength[DA],LA=dA-b-1,RA=r.sizeBitsByLength[DA],mA=LA>>RA;if(yA+=(LA&(1<=Q){t.write(c,o);for(var pA=0;pA0&&(Y[3&m]=dA,++m),DA>$)throw new Error("Invalid backward reference. pos: "+f+" distance: "+dA+" len: "+DA+" bytes left: "+$);for(vA=0;vA>=1;return(A&e-1)+e}function i(A,t,s,i,n){do{A[t+(i-=s)]=new e(n.bits,n.value)}while(i>0)}function n(A,t,e){for(var s=1<0;--f[E])i(A,t+g,a,h,new e(255&E,65535&l[w++])),g=s(g,E);for(Q=u-1,c=-1,E=r+1,a=2;E<=15;++E,a<<=1)for(;f[E]>0;--f[E])(g&Q)!==c&&(t+=h,u+=h=1<<(C=n(f,E,r)),A[I+(c=g&Q)]=new e(C+r&255,t-I-c&65535)),i(A,t+(g>>r),a,h,new e(E-r&255,65535&l[w++])),g=s(g,E);return u}},42210:function(A,t){function e(A,t){this.offset=A,this.nbits=t}t.kBlockLengthPrefixCode=[new e(1,2),new e(5,2),new e(9,2),new e(13,2),new e(17,3),new e(25,3),new e(33,3),new e(41,3),new e(49,4),new e(65,4),new e(81,4),new e(97,4),new e(113,5),new e(145,5),new e(177,5),new e(209,5),new e(241,6),new e(305,6),new e(369,7),new e(497,8),new e(753,9),new e(1265,10),new e(2289,11),new e(4337,12),new e(8433,13),new e(16625,24)],t.kInsertLengthPrefixCode=[new e(0,0),new e(1,0),new e(2,0),new e(3,0),new e(4,0),new e(5,0),new e(6,1),new e(8,1),new e(10,2),new e(14,2),new e(18,3),new e(26,3),new e(34,4),new e(50,4),new e(66,5),new e(98,5),new e(130,6),new e(194,7),new e(322,8),new e(578,9),new e(1090,10),new e(2114,12),new e(6210,14),new e(22594,24)],t.kCopyLengthPrefixCode=[new e(2,0),new e(3,0),new e(4,0),new e(5,0),new e(6,0),new e(7,0),new e(8,0),new e(9,0),new e(10,1),new e(12,1),new e(14,2),new e(18,2),new e(22,3),new e(30,3),new e(38,4),new e(54,4),new e(70,5),new e(102,5),new e(134,6),new e(198,7),new e(326,8),new e(582,9),new e(1094,10),new e(2118,24)],t.kInsertRangeLut=[0,0,8,8,0,16,8,16,16],t.kCopyRangeLut=[0,8,0,8,16,0,16,8,16]},98197:function(A,t){function e(A){this.buffer=A,this.pos=0}function s(A){this.buffer=A,this.pos=0}e.prototype.read=function(A,t,e){this.pos+e>this.buffer.length&&(e=this.buffer.length-this.pos);for(var s=0;sthis.buffer.length)throw new Error("Output buffer is not large enough");return this.buffer.set(A.subarray(0,t),this.pos),this.pos+=t,t},t.y=s},87984:function(A,t,e){var s=e(80614),i=10,n=11;function r(A,t,e){this.prefix=new Uint8Array(A.length),this.transform=t,this.suffix=new Uint8Array(e.length);for(var s=0;s'),new r("",0,"\n"),new r("",3,""),new r("",0,"]"),new r("",0," for "),new r("",14,""),new r("",2,""),new r("",0," a "),new r("",0," that "),new r(" ",i,""),new r("",0,". "),new r(".",0,""),new r(" ",0,", "),new r("",15,""),new r("",0," with "),new r("",0,"'"),new r("",0," from "),new r("",0," by "),new r("",16,""),new r("",17,""),new r(" the ",0,""),new r("",4,""),new r("",0,". The "),new r("",n,""),new r("",0," on "),new r("",0," as "),new r("",0," is "),new r("",7,""),new r("",1,"ing "),new r("",0,"\n\t"),new r("",0,":"),new r(" ",0,". "),new r("",0,"ed "),new r("",20,""),new r("",18,""),new r("",6,""),new r("",0,"("),new r("",i,", "),new r("",8,""),new r("",0," at "),new r("",0,"ly "),new r(" the ",0," of "),new r("",5,""),new r("",9,""),new r(" ",i,", "),new r("",i,'"'),new r(".",0,"("),new r("",n," "),new r("",i,'">'),new r("",0,'="'),new r(" ",0,"."),new r(".com/",0,""),new r(" the ",0," of the "),new r("",i,"'"),new r("",0,". This "),new r("",0,","),new r(".",0," "),new r("",i,"("),new r("",i,"."),new r("",0," not "),new r(" ",0,'="'),new r("",0,"er "),new r(" ",n," "),new r("",0,"al "),new r(" ",n,""),new r("",0,"='"),new r("",n,'"'),new r("",i,". "),new r(" ",0,"("),new r("",0,"ful "),new r(" ",i,". "),new r("",0,"ive "),new r("",0,"less "),new r("",n,"'"),new r("",0,"est "),new r(" ",i,"."),new r("",n,'">'),new r(" ",0,"='"),new r("",i,","),new r("",0,"ize "),new r("",n,"."),new r(" ",0,""),new r(" ",0,","),new r("",i,'="'),new r("",n,'="'),new r("",0,"ous "),new r("",n,", "),new r("",i,"='"),new r(" ",i,","),new r(" ",n,'="'),new r(" ",n,", "),new r("",n,","),new r("",n,"("),new r("",n,". "),new r(" ",n,"."),new r("",n,"='"),new r(" ",n,". "),new r(" ",i,'="'),new r(" ",n,"='"),new r(" ",i,"='")];function o(A,t){return A[t]<192?(A[t]>=97&&A[t]<=122&&(A[t]^=32),1):A[t]<224?(A[t+1]^=32,2):(A[t+2]^=5,3)}t.kTransforms=B,t.kNumTransforms=B.length,t.transformDictionaryWord=function(A,t,e,r,E){var w,g=B[E].prefix,a=B[E].suffix,c=B[E].transform,Q=c<12?0:c-11,C=0,h=t;Q>r&&(Q=r);for(var u=0;u0;){var l=o(A,w);w+=l,r-=l}for(var I=0;It.UNZIP)throw new TypeError("Bad argument");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=A,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0}t.NONE=0,t.DEFLATE=1,t.INFLATE=2,t.GZIP=3,t.GUNZIP=4,t.DEFLATERAW=5,t.INFLATERAW=6,t.UNZIP=7,g.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,n(this.init_done,"close before init"),n(this.mode<=t.UNZIP),this.mode===t.DEFLATE||this.mode===t.GZIP||this.mode===t.DEFLATERAW?B.deflateEnd(this.strm):this.mode!==t.INFLATE&&this.mode!==t.GUNZIP&&this.mode!==t.INFLATERAW&&this.mode!==t.UNZIP||o.inflateEnd(this.strm),this.mode=t.NONE,this.dictionary=null)},g.prototype.write=function(A,t,e,s,i,n,r){return this._write(!0,A,t,e,s,i,n,r)},g.prototype.writeSync=function(A,t,e,s,i,n,r){return this._write(!1,A,t,e,s,i,n,r)},g.prototype._write=function(A,e,r,B,o,E,w,g){if(n.equal(arguments.length,8),n(this.init_done,"write before init"),n(this.mode!==t.NONE,"already finalized"),n.equal(!1,this.write_in_progress,"write already in progress"),n.equal(!1,this.pending_close,"close is pending"),this.write_in_progress=!0,n.equal(!1,void 0===e,"must provide flush value"),this.write_in_progress=!0,e!==t.Z_NO_FLUSH&&e!==t.Z_PARTIAL_FLUSH&&e!==t.Z_SYNC_FLUSH&&e!==t.Z_FULL_FLUSH&&e!==t.Z_FINISH&&e!==t.Z_BLOCK)throw new Error("Invalid flush value");if(null==r&&(r=s.alloc(0),o=0,B=0),this.strm.avail_in=o,this.strm.input=r,this.strm.next_in=B,this.strm.avail_out=g,this.strm.output=E,this.strm.next_out=w,this.flush=e,!A)return this._process(),this._checkError()?this._afterSync():void 0;var a=this;return i.nextTick((function(){a._process(),a._after()})),this},g.prototype._afterSync=function(){var A=this.strm.avail_out,t=this.strm.avail_in;return this.write_in_progress=!1,[t,A]},g.prototype._process=function(){var A=null;switch(this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=B.deflate(this.strm,this.flush);break;case t.UNZIP:switch(this.strm.avail_in>0&&(A=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===A)break;if(31!==this.strm.input[A]){this.mode=t.INFLATE;break}if(this.gzip_id_bytes_read=1,A++,1===this.strm.avail_in)break;case 1:if(null===A)break;139===this.strm.input[A]?(this.gzip_id_bytes_read=2,this.mode=t.GUNZIP):this.mode=t.INFLATE;break;default:throw new Error("invalid number of gzip magic number bytes read")}case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:for(this.err=o.inflate(this.strm,this.flush),this.err===t.Z_NEED_DICT&&this.dictionary&&(this.err=o.inflateSetDictionary(this.strm,this.dictionary),this.err===t.Z_OK?this.err=o.inflate(this.strm,this.flush):this.err===t.Z_DATA_ERROR&&(this.err=t.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===t.GUNZIP&&this.err===t.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=o.inflate(this.strm,this.flush);break;default:throw new Error("Unknown mode "+this.mode)}},g.prototype._checkError=function(){switch(this.err){case t.Z_OK:case t.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===t.Z_FINISH)return this._error("unexpected end of file"),!1;break;case t.Z_STREAM_END:break;case t.Z_NEED_DICT:return null==this.dictionary?this._error("Missing dictionary"):this._error("Bad dictionary"),!1;default:return this._error("Zlib error"),!1}return!0},g.prototype._after=function(){if(this._checkError()){var A=this.strm.avail_out,t=this.strm.avail_in;this.write_in_progress=!1,this.callback(t,A),this.pending_close&&this.close()}},g.prototype._error=function(A){this.strm.msg&&(A=this.strm.msg),this.onerror(A,this.err),this.write_in_progress=!1,this.pending_close&&this.close()},g.prototype.init=function(A,e,s,i,r){n(4===arguments.length||5===arguments.length,"init(windowBits, level, memLevel, strategy, [dictionary])"),n(A>=8&&A<=15,"invalid windowBits"),n(e>=-1&&e<=9,"invalid compression level"),n(s>=1&&s<=9,"invalid memlevel"),n(i===t.Z_FILTERED||i===t.Z_HUFFMAN_ONLY||i===t.Z_RLE||i===t.Z_FIXED||i===t.Z_DEFAULT_STRATEGY,"invalid strategy"),this._init(e,A,s,i,r),this._setDictionary()},g.prototype.params=function(){throw new Error("deflateParams Not supported")},g.prototype.reset=function(){this._reset(),this._setDictionary()},g.prototype._init=function(A,e,s,i,n){switch(this.level=A,this.windowBits=e,this.memLevel=s,this.strategy=i,this.flush=t.Z_NO_FLUSH,this.err=t.Z_OK,this.mode!==t.GZIP&&this.mode!==t.GUNZIP||(this.windowBits+=16),this.mode===t.UNZIP&&(this.windowBits+=32),this.mode!==t.DEFLATERAW&&this.mode!==t.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new r,this.mode){case t.DEFLATE:case t.GZIP:case t.DEFLATERAW:this.err=B.deflateInit2(this.strm,this.level,t.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case t.INFLATE:case t.GUNZIP:case t.INFLATERAW:case t.UNZIP:this.err=o.inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode)}this.err!==t.Z_OK&&this._error("Init error"),this.dictionary=n,this.write_in_progress=!1,this.init_done=!0},g.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:this.err=B.deflateSetDictionary(this.strm,this.dictionary)}this.err!==t.Z_OK&&this._error("Failed to set dictionary")}},g.prototype._reset=function(){switch(this.err=t.Z_OK,this.mode){case t.DEFLATE:case t.DEFLATERAW:case t.GZIP:this.err=B.deflateReset(this.strm);break;case t.INFLATE:case t.INFLATERAW:case t.GUNZIP:this.err=o.inflateReset(this.strm)}this.err!==t.Z_OK&&this._error("Failed to reset stream")},t.Zlib=g},6729:function(A,t,e){"use strict";var s=e(9964),i=e(50621).Buffer,n=e(9760).Transform,r=e(72908),B=e(7187),o=e(80182).ok,E=e(50621).kMaxLength,w="Cannot create final Buffer. It would be larger than 0x"+E.toString(16)+" bytes";r.Z_MIN_WINDOWBITS=8,r.Z_MAX_WINDOWBITS=15,r.Z_DEFAULT_WINDOWBITS=15,r.Z_MIN_CHUNK=64,r.Z_MAX_CHUNK=1/0,r.Z_DEFAULT_CHUNK=16384,r.Z_MIN_MEMLEVEL=1,r.Z_MAX_MEMLEVEL=9,r.Z_DEFAULT_MEMLEVEL=8,r.Z_MIN_LEVEL=-1,r.Z_MAX_LEVEL=9,r.Z_DEFAULT_LEVEL=r.Z_DEFAULT_COMPRESSION;for(var g=Object.keys(r),a=0;a=E?r=new RangeError(w):t=i.concat(s,n),s=[],A.close(),e(r,t)}A.on("error",(function(t){A.removeListener("end",B),A.removeListener("readable",r),e(t)})),A.on("end",B),A.end(t),r()}function I(A,t){if("string"==typeof t&&(t=i.from(t)),!i.isBuffer(t))throw new TypeError("Not a string or buffer");var e=A._finishFlushFlag;return A._processChunk(t,e)}function f(A){if(!(this instanceof f))return new f(A);y.call(this,A,r.DEFLATE)}function D(A){if(!(this instanceof D))return new D(A);y.call(this,A,r.INFLATE)}function b(A){if(!(this instanceof b))return new b(A);y.call(this,A,r.GZIP)}function d(A){if(!(this instanceof d))return new d(A);y.call(this,A,r.GUNZIP)}function v(A){if(!(this instanceof v))return new v(A);y.call(this,A,r.DEFLATERAW)}function Y(A){if(!(this instanceof Y))return new Y(A);y.call(this,A,r.INFLATERAW)}function F(A){if(!(this instanceof F))return new F(A);y.call(this,A,r.UNZIP)}function M(A){return A===r.Z_NO_FLUSH||A===r.Z_PARTIAL_FLUSH||A===r.Z_SYNC_FLUSH||A===r.Z_FULL_FLUSH||A===r.Z_FINISH||A===r.Z_BLOCK}function y(A,e){var s=this;if(this._opts=A=A||{},this._chunkSize=A.chunkSize||t.Z_DEFAULT_CHUNK,n.call(this,A),A.flush&&!M(A.flush))throw new Error("Invalid flush flag: "+A.flush);if(A.finishFlush&&!M(A.finishFlush))throw new Error("Invalid flush flag: "+A.finishFlush);if(this._flushFlag=A.flush||r.Z_NO_FLUSH,this._finishFlushFlag=void 0!==A.finishFlush?A.finishFlush:r.Z_FINISH,A.chunkSize&&(A.chunkSizet.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+A.chunkSize);if(A.windowBits&&(A.windowBitst.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+A.windowBits);if(A.level&&(A.levelt.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+A.level);if(A.memLevel&&(A.memLevelt.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+A.memLevel);if(A.strategy&&A.strategy!=t.Z_FILTERED&&A.strategy!=t.Z_HUFFMAN_ONLY&&A.strategy!=t.Z_RLE&&A.strategy!=t.Z_FIXED&&A.strategy!=t.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+A.strategy);if(A.dictionary&&!i.isBuffer(A.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._handle=new r.Zlib(e);var B=this;this._hadError=!1,this._handle.onerror=function(A,e){L(B),B._hadError=!0;var s=new Error(A);s.errno=e,s.code=t.codes[e],B.emit("error",s)};var o=t.Z_DEFAULT_COMPRESSION;"number"==typeof A.level&&(o=A.level);var E=t.Z_DEFAULT_STRATEGY;"number"==typeof A.strategy&&(E=A.strategy),this._handle.init(A.windowBits||t.Z_DEFAULT_WINDOWBITS,o,A.memLevel||t.Z_DEFAULT_MEMLEVEL,E,A.dictionary),this._buffer=i.allocUnsafe(this._chunkSize),this._offset=0,this._level=o,this._strategy=E,this.once("end",this.close),Object.defineProperty(this,"_closed",{get:function(){return!s._handle},configurable:!0,enumerable:!0})}function L(A,t){t&&s.nextTick(t),A._handle&&(A._handle.close(),A._handle=null)}function R(A){A.emit("close")}Object.defineProperty(t,"codes",{enumerable:!0,value:Object.freeze(Q),writable:!1}),t.Deflate=f,t.Inflate=D,t.Gzip=b,t.Gunzip=d,t.DeflateRaw=v,t.InflateRaw=Y,t.Unzip=F,t.createDeflate=function(A){return new f(A)},t.createInflate=function(A){return new D(A)},t.createDeflateRaw=function(A){return new v(A)},t.createInflateRaw=function(A){return new Y(A)},t.createGzip=function(A){return new b(A)},t.createGunzip=function(A){return new d(A)},t.createUnzip=function(A){return new F(A)},t.deflate=function(A,t,e){return"function"==typeof t&&(e=t,t={}),l(new f(t),A,e)},t.deflateSync=function(A,t){return I(new f(t),A)},t.gzip=function(A,t,e){return"function"==typeof t&&(e=t,t={}),l(new b(t),A,e)},t.gzipSync=function(A,t){return I(new b(t),A)},t.deflateRaw=function(A,t,e){return"function"==typeof t&&(e=t,t={}),l(new v(t),A,e)},t.deflateRawSync=function(A,t){return I(new v(t),A)},t.unzip=function(A,t,e){return"function"==typeof t&&(e=t,t={}),l(new F(t),A,e)},t.unzipSync=function(A,t){return I(new F(t),A)},t.inflate=function(A,t,e){return"function"==typeof t&&(e=t,t={}),l(new D(t),A,e)},t.inflateSync=function(A,t){return I(new D(t),A)},t.gunzip=function(A,t,e){return"function"==typeof t&&(e=t,t={}),l(new d(t),A,e)},t.gunzipSync=function(A,t){return I(new d(t),A)},t.inflateRaw=function(A,t,e){return"function"==typeof t&&(e=t,t={}),l(new Y(t),A,e)},t.inflateRawSync=function(A,t){return I(new Y(t),A)},B.inherits(y,n),y.prototype.params=function(A,e,i){if(At.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+A);if(e!=t.Z_FILTERED&&e!=t.Z_HUFFMAN_ONLY&&e!=t.Z_RLE&&e!=t.Z_FIXED&&e!=t.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+e);if(this._level!==A||this._strategy!==e){var n=this;this.flush(r.Z_SYNC_FLUSH,(function(){o(n._handle,"zlib binding closed"),n._handle.params(A,e),n._hadError||(n._level=A,n._strategy=e,i&&i())}))}else s.nextTick(i)},y.prototype.reset=function(){return o(this._handle,"zlib binding closed"),this._handle.reset()},y.prototype._flush=function(A){this._transform(i.alloc(0),"",A)},y.prototype.flush=function(A,t){var e=this,n=this._writableState;("function"==typeof A||void 0===A&&!t)&&(t=A,A=r.Z_FULL_FLUSH),n.ended?t&&s.nextTick(t):n.ending?t&&this.once("end",t):n.needDrain?t&&this.once("drain",(function(){return e.flush(A,t)})):(this._flushFlag=A,this.write(i.alloc(0),"",t))},y.prototype.close=function(A){L(this,A),s.nextTick(R,this)},y.prototype._transform=function(A,t,e){var s,n=this._writableState,B=(n.ending||n.ended)&&(!A||n.length===A.length);return null===A||i.isBuffer(A)?this._handle?(B?s=this._finishFlushFlag:(s=this._flushFlag,A.length>=n.length&&(this._flushFlag=this._opts.flush||r.Z_NO_FLUSH)),void this._processChunk(A,s,e)):e(new Error("zlib binding closed")):e(new Error("invalid input"))},y.prototype._processChunk=function(A,t,e){var s=A&&A.length,n=this._chunkSize-this._offset,r=0,B=this,g="function"==typeof e;if(!g){var a,c=[],Q=0;this.on("error",(function(A){a=A})),o(this._handle,"zlib binding closed");do{var C=this._handle.writeSync(t,A,r,s,this._buffer,this._offset,n)}while(!this._hadError&&l(C[0],C[1]));if(this._hadError)throw a;if(Q>=E)throw L(this),new RangeError(w);var h=i.concat(c,Q);return L(this),h}o(this._handle,"zlib binding closed");var u=this._handle.write(t,A,r,s,this._buffer,this._offset,n);function l(E,w){if(this&&(this.buffer=null,this.callback=null),!B._hadError){var a=n-w;if(o(a>=0,"have should not go down"),a>0){var C=B._buffer.slice(B._offset,B._offset+a);B._offset+=a,g?B.push(C):(c.push(C),Q+=C.length)}if((0===w||B._offset>=B._chunkSize)&&(n=B._chunkSize,B._offset=0,B._buffer=i.allocUnsafe(B._chunkSize)),0===w){if(r+=s-E,s=E,!g)return!0;var h=B._handle.write(t,A,r,s,B._buffer,B._offset,B._chunkSize);return h.callback=l,void(h.buffer=A)}if(!g)return!1;e()}}u.buffer=A,u.callback=l},B.inherits(f,y),B.inherits(D,y),B.inherits(b,y),B.inherits(d,y),B.inherits(v,y),B.inherits(Y,y),B.inherits(F,y)},67913:function(A,t,e){"use strict";var s=e(28651),i=e(26601),n=i(s("String.prototype.indexOf"));A.exports=function(A,t){var e=s(A,!!t);return"function"==typeof e&&n(A,".prototype.")>-1?i(e):e}},26601:function(A,t,e){"use strict";var s=e(5049),i=e(28651),n=e(86255),r=e(96785),B=i("%Function.prototype.apply%"),o=i("%Function.prototype.call%"),E=i("%Reflect.apply%",!0)||s.call(o,B),w=e(56649),g=i("%Math.max%");A.exports=function(A){if("function"!=typeof A)throw new r("a function is required");var t=E(s,o,arguments);return n(t,1+g(0,A.length-(arguments.length-1)),!0)};var a=function(){return E(s,B,arguments)};w?w(A.exports,"apply",{value:a}):A.exports.apply=a},41613:function(A,t,e){var s=e(50621).Buffer,i=function(){"use strict";function A(t,i,n,r){"object"==typeof i&&(n=i.depth,r=i.prototype,i.filter,i=i.circular);var B=[],o=[],E=void 0!==s;return void 0===i&&(i=!0),void 0===n&&(n=1/0),function t(n,w){if(null===n)return null;if(0==w)return n;var g,a;if("object"!=typeof n)return n;if(A.__isArray(n))g=[];else if(A.__isRegExp(n))g=new RegExp(n.source,e(n)),n.lastIndex&&(g.lastIndex=n.lastIndex);else if(A.__isDate(n))g=new Date(n.getTime());else{if(E&&s.isBuffer(n))return g=s.allocUnsafe?s.allocUnsafe(n.length):new s(n.length),n.copy(g),g;void 0===r?(a=Object.getPrototypeOf(n),g=Object.create(a)):(g=Object.create(r),a=r)}if(i){var c=B.indexOf(n);if(-1!=c)return o[c];B.push(n),o.push(g)}for(var Q in n){var C;a&&(C=Object.getOwnPropertyDescriptor(a,Q)),C&&null==C.set||(g[Q]=t(n[Q],w-1))}return g}(t,n)}function t(A){return Object.prototype.toString.call(A)}function e(A){var t="";return A.global&&(t+="g"),A.ignoreCase&&(t+="i"),A.multiline&&(t+="m"),t}return A.clonePrototype=function(A){if(null===A)return null;var t=function(){};return t.prototype=A,new t},A.__objToStr=t,A.__isDate=function(A){return"object"==typeof A&&"[object Date]"===t(A)},A.__isArray=function(A){return"object"==typeof A&&"[object Array]"===t(A)},A.__isRegExp=function(A){return"object"==typeof A&&"[object RegExp]"===t(A)},A.__getRegExpFlags=e,A}();A.exports&&(A.exports=i)},83043:function(A,t,e){e(59883);var s=e(11206);A.exports=s.Object.values},42075:function(A,t,e){e(94910),e(81755),e(14032),e(68067),e(77074),e(44455),e(58605),e(58281);var s=e(11206);A.exports=s.Promise},98168:function(A,t,e){var s=e(90780);e(84151),e(98443),e(49261),e(67858),A.exports=s},32631:function(A,t,e){var s=e(32010),i=e(94578),n=e(68664),r=s.TypeError;A.exports=function(A){if(i(A))return A;throw r(n(A)+" is not a function")}},69075:function(A,t,e){var s=e(32010),i=e(20884),n=e(68664),r=s.TypeError;A.exports=function(A){if(i(A))return A;throw r(n(A)+" is not a constructor")}},58659:function(A,t,e){var s=e(32010),i=e(94578),n=s.String,r=s.TypeError;A.exports=function(A){if("object"==typeof A||i(A))return A;throw r("Can't set "+n(A)+" as a prototype")}},71156:function(A,t,e){var s=e(38688),i=e(10819),n=e(95892),r=s("unscopables"),B=Array.prototype;null==B[r]&&n.f(B,r,{configurable:!0,value:i(null)}),A.exports=function(A){B[r][A]=!0}},36352:function(A,t,e){"use strict";var s=e(69510).charAt;A.exports=function(A,t,e){return t+(e?s(A,t).length:1)}},2868:function(A,t,e){var s=e(32010),i=e(70176),n=s.TypeError;A.exports=function(A,t){if(i(t,A))return A;throw n("Incorrect invocation")}},34984:function(A,t,e){var s=e(32010),i=e(24517),n=s.String,r=s.TypeError;A.exports=function(A){if(i(A))return A;throw r(n(A)+" is not an object")}},92642:function(A,t,e){"use strict";var s=e(43162),i=e(74841),n=e(45495),r=Math.min;A.exports=[].copyWithin||function(A,t){var e=s(this),B=n(e),o=i(A,B),E=i(t,B),w=arguments.length>2?arguments[2]:void 0,g=r((void 0===w?B:i(w,B))-E,B-o),a=1;for(E0;)E in e?e[o]=e[E]:delete e[o],o+=a,E+=a;return e}},72864:function(A,t,e){"use strict";var s=e(43162),i=e(74841),n=e(45495);A.exports=function(A){for(var t=s(this),e=n(t),r=arguments.length,B=i(r>1?arguments[1]:void 0,e),o=r>2?arguments[2]:void 0,E=void 0===o?e:i(o,e);E>B;)t[B++]=A;return t}},82938:function(A,t,e){"use strict";var s=e(91102).forEach,i=e(81007)("forEach");A.exports=i?[].forEach:function(A){return s(this,A,arguments.length>1?arguments[1]:void 0)}},34269:function(A){A.exports=function(A,t){for(var e=0,s=t.length,i=new A(s);s>e;)i[e]=t[e++];return i}},95717:function(A,t,e){"use strict";var s=e(32010),i=e(25567),n=e(2834),r=e(43162),B=e(97738),o=e(89564),E=e(20884),w=e(45495),g=e(38639),a=e(15892),c=e(13872),Q=s.Array;A.exports=function(A){var t=r(A),e=E(this),s=arguments.length,C=s>1?arguments[1]:void 0,h=void 0!==C;h&&(C=i(C,s>2?arguments[2]:void 0));var u,l,I,f,D,b,d=c(t),v=0;if(!d||this==Q&&o(d))for(u=w(t),l=e?new this(u):Q(u);u>v;v++)b=h?C(t[v],v):t[v],g(l,v,b);else for(D=(f=a(t,d)).next,l=e?new this:[];!(I=n(D,f)).done;v++)b=h?B(f,C,[I.value,v],!0):I.value,g(l,v,b);return l.length=v,l}},12636:function(A,t,e){var s=e(98086),i=e(74841),n=e(45495),r=function(A){return function(t,e,r){var B,o=s(t),E=n(o),w=i(r,E);if(A&&e!=e){for(;E>w;)if((B=o[w++])!=B)return!0}else for(;E>w;w++)if((A||w in o)&&o[w]===e)return A||w||0;return!A&&-1}};A.exports={includes:r(!0),indexOf:r(!1)}},91102:function(A,t,e){var s=e(25567),i=e(38347),n=e(7514),r=e(43162),B=e(45495),o=e(45744),E=i([].push),w=function(A){var t=1==A,e=2==A,i=3==A,w=4==A,g=6==A,a=7==A,c=5==A||g;return function(Q,C,h,u){for(var l,I,f=r(Q),D=n(f),b=s(C,h),d=B(D),v=0,Y=u||o,F=t?Y(Q,d):e||a?Y(Q,0):void 0;d>v;v++)if((c||v in D)&&(I=b(l=D[v],v,f),A))if(t)F[v]=I;else if(I)switch(A){case 3:return!0;case 5:return l;case 6:return v;case 2:E(F,l)}else switch(A){case 4:return!1;case 7:E(F,l)}return g?-1:i||w?w:F}};A.exports={forEach:w(0),map:w(1),filter:w(2),some:w(3),every:w(4),find:w(5),findIndex:w(6),filterReject:w(7)}},84320:function(A,t,e){"use strict";var s=e(58448),i=e(98086),n=e(26882),r=e(45495),B=e(81007),o=Math.min,E=[].lastIndexOf,w=!!E&&1/[1].lastIndexOf(1,-0)<0,g=B("lastIndexOf"),a=w||!g;A.exports=a?function(A){if(w)return s(E,this,arguments)||0;var t=i(this),e=r(t),B=e-1;for(arguments.length>1&&(B=o(B,n(arguments[1]))),B<0&&(B=e+B);B>=0;B--)if(B in t&&t[B]===A)return B||0;return-1}:E},56280:function(A,t,e){var s=e(47044),i=e(38688),n=e(70091),r=i("species");A.exports=function(A){return n>=51||!s((function(){var t=[];return(t.constructor={})[r]=function(){return{foo:1}},1!==t[A](Boolean).foo}))}},81007:function(A,t,e){"use strict";var s=e(47044);A.exports=function(A,t){var e=[][A];return!!e&&s((function(){e.call(null,t||function(){throw 1},1)}))}},32843:function(A,t,e){var s=e(32010),i=e(32631),n=e(43162),r=e(7514),B=e(45495),o=s.TypeError,E=function(A){return function(t,e,s,E){i(e);var w=n(t),g=r(w),a=B(w),c=A?a-1:0,Q=A?-1:1;if(s<2)for(;;){if(c in g){E=g[c],c+=Q;break}if(c+=Q,A?c<0:a<=c)throw o("Reduce of empty array with no initial value")}for(;A?c>=0:a>c;c+=Q)c in g&&(E=e(E,g[c],c,w));return E}};A.exports={left:E(!1),right:E(!0)}},73163:function(A,t,e){var s=e(38347);A.exports=s([].slice)},43977:function(A,t,e){var s=e(73163),i=Math.floor,n=function(A,t){var e=A.length,o=i(e/2);return e<8?r(A,t):B(A,n(s(A,0,o),t),n(s(A,o),t),t)},r=function(A,t){for(var e,s,i=A.length,n=1;n0;)A[s]=A[--s];s!==n++&&(A[s]=e)}return A},B=function(A,t,e,s){for(var i=t.length,n=e.length,r=0,B=0;r1?arguments[1]:void 0);t=t?t.next:e.first;)for(s(t.value,t.key,this);t&&t.removed;)t=t.previous},has:function(A){return!!l(this,A)}}),n(c,e?{get:function(A){var t=l(this,A);return t&&t.value},set:function(A,t){return u(this,0===A?0:A,t)}}:{add:function(A){return u(this,A=0===A?0:A,A)}}),g&&s(c,"size",{get:function(){return h(this).size}}),w},setStrong:function(A,t,e){var s=t+" Iterator",i=C(t),n=C(s);E(A,t,(function(A,t){Q(this,{type:s,target:A,state:i(A),kind:t,last:void 0})}),(function(){for(var A=n(this),t=A.kind,e=A.last;e&&e.removed;)e=e.previous;return A.target&&(A.last=e=e?e.next:A.state.first)?"keys"==t?{value:e.key,done:!1}:"values"==t?{value:e.value,done:!1}:{value:[e.key,e.value],done:!1}:(A.target=void 0,{value:void 0,done:!0})}),e?"entries":"values",!e,!0),w(t)}}},36673:function(A,t,e){"use strict";var s=e(56475),i=e(32010),n=e(38347),r=e(39599),B=e(13711),o=e(62148),E=e(80383),w=e(2868),g=e(94578),a=e(24517),c=e(47044),Q=e(46769),C=e(15216),h=e(51868);A.exports=function(A,t,e){var u=-1!==A.indexOf("Map"),l=-1!==A.indexOf("Weak"),I=u?"set":"add",f=i[A],D=f&&f.prototype,b=f,d={},v=function(A){var t=n(D[A]);B(D,A,"add"==A?function(A){return t(this,0===A?0:A),this}:"delete"==A?function(A){return!(l&&!a(A))&&t(this,0===A?0:A)}:"get"==A?function(A){return l&&!a(A)?void 0:t(this,0===A?0:A)}:"has"==A?function(A){return!(l&&!a(A))&&t(this,0===A?0:A)}:function(A,e){return t(this,0===A?0:A,e),this})};if(r(A,!g(f)||!(l||D.forEach&&!c((function(){(new f).entries().next()})))))b=e.getConstructor(t,A,u,I),o.enable();else if(r(A,!0)){var Y=new b,F=Y[I](l?{}:-0,1)!=Y,M=c((function(){Y.has(1)})),y=Q((function(A){new f(A)})),L=!l&&c((function(){for(var A=new f,t=5;t--;)A[I](t,t);return!A.has(-0)}));y||((b=t((function(A,t){w(A,D);var e=h(new f,A,b);return null!=t&&E(t,e[I],{that:e,AS_ENTRIES:u}),e}))).prototype=D,D.constructor=b),(M||L)&&(v("delete"),v("has"),u&&v("get")),(L||F)&&v(I),l&&D.clear&&delete D.clear}return d[A]=b,s({global:!0,forced:b!=f},d),C(b,A),l||e.setStrong(b,A,u),b}},2675:function(A,t,e){var s=e(20340),i=e(21594),n=e(72062),r=e(95892);A.exports=function(A,t){for(var e=i(t),B=r.f,o=n.f,E=0;E"+o+""}},13945:function(A,t,e){"use strict";var s=e(5844).IteratorPrototype,i=e(10819),n=e(97841),r=e(15216),B=e(15366),o=function(){return this};A.exports=function(A,t,e){var E=t+" Iterator";return A.prototype=i(s,{next:n(1,e)}),r(A,E,!1,!0),B[E]=o,A}},48914:function(A,t,e){var s=e(15567),i=e(95892),n=e(97841);A.exports=s?function(A,t,e){return i.f(A,t,n(1,e))}:function(A,t,e){return A[t]=e,A}},97841:function(A){A.exports=function(A,t){return{enumerable:!(1&A),configurable:!(2&A),writable:!(4&A),value:t}}},38639:function(A,t,e){"use strict";var s=e(63918),i=e(95892),n=e(97841);A.exports=function(A,t,e){var r=s(t);r in A?i.f(A,r,n(0,e)):A[r]=e}},53087:function(A,t,e){"use strict";var s=e(32010),i=e(34984),n=e(39629),r=s.TypeError;A.exports=function(A){if(i(this),"string"===A||"default"===A)A="string";else if("number"!==A)throw r("Incorrect hint");return n(this,A)}},97001:function(A,t,e){"use strict";var s=e(56475),i=e(2834),n=e(63432),r=e(7081),B=e(94578),o=e(13945),E=e(69548),w=e(3840),g=e(15216),a=e(48914),c=e(13711),Q=e(38688),C=e(15366),h=e(5844),u=r.PROPER,l=r.CONFIGURABLE,I=h.IteratorPrototype,f=h.BUGGY_SAFARI_ITERATORS,D=Q("iterator"),b="keys",d="values",v="entries",Y=function(){return this};A.exports=function(A,t,e,r,Q,h,F){o(e,t,r);var M,y,L,R=function(A){if(A===Q&&W)return W;if(!f&&A in p)return p[A];switch(A){case b:case d:case v:return function(){return new e(this,A)}}return function(){return new e(this)}},m=t+" Iterator",x=!1,p=A.prototype,G=p[D]||p["@@iterator"]||Q&&p[Q],W=!f&&G||R(Q),P="Array"==t&&p.entries||G;if(P&&(M=E(P.call(new A)))!==Object.prototype&&M.next&&(n||E(M)===I||(w?w(M,I):B(M[D])||c(M,D,Y)),g(M,m,!0,!0),n&&(C[m]=Y)),u&&Q==d&&G&&G.name!==d&&(!n&&l?a(p,"name",d):(x=!0,W=function(){return i(G,this)})),Q)if(y={values:R(d),keys:h?W:R(b),entries:R(v)},F)for(L in y)(f||x||!(L in p))&&c(p,L,y[L]);else s({target:t,proto:!0,forced:f||x},y);return n&&!F||p[D]===W||c(p,D,W,{name:Q}),C[t]=W,y}},46042:function(A,t,e){var s=e(11206),i=e(20340),n=e(75960),r=e(95892).f;A.exports=function(A){var t=s.Symbol||(s.Symbol={});i(t,A)||r(t,A,{value:n.f(A)})}},15567:function(A,t,e){var s=e(47044);A.exports=!s((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]}))},12072:function(A,t,e){var s=e(32010),i=e(24517),n=s.document,r=i(n)&&i(n.createElement);A.exports=function(A){return r?n.createElement(A):{}}},23327:function(A){A.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},67797:function(A,t,e){var s=e(12072)("span").classList,i=s&&s.constructor&&s.constructor.prototype;A.exports=i===Object.prototype?void 0:i},3809:function(A,t,e){var s=e(40715).match(/firefox\/(\d+)/i);A.exports=!!s&&+s[1]},3157:function(A){A.exports="object"==typeof window},21983:function(A,t,e){var s=e(40715);A.exports=/MSIE|Trident/.test(s)},70573:function(A,t,e){var s=e(40715),i=e(32010);A.exports=/ipad|iphone|ipod/i.test(s)&&void 0!==i.Pebble},17716:function(A,t,e){var s=e(40715);A.exports=/(?:ipad|iphone|ipod).*applewebkit/i.test(s)},95053:function(A,t,e){var s=e(93975),i=e(32010);A.exports="process"==s(i.process)},664:function(A,t,e){var s=e(40715);A.exports=/web0s(?!.*chrome)/i.test(s)},40715:function(A,t,e){var s=e(38486);A.exports=s("navigator","userAgent")||""},70091:function(A,t,e){var s,i,n=e(32010),r=e(40715),B=n.process,o=n.Deno,E=B&&B.versions||o&&o.version,w=E&&E.v8;w&&(i=(s=w.split("."))[0]>0&&s[0]<4?1:+(s[0]+s[1])),!i&&r&&(!(s=r.match(/Edge\/(\d+)/))||s[1]>=74)&&(s=r.match(/Chrome\/(\d+)/))&&(i=+s[1]),A.exports=i},41731:function(A,t,e){var s=e(40715).match(/AppleWebKit\/(\d+)\./);A.exports=!!s&&+s[1]},2416:function(A){A.exports=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"]},45144:function(A,t,e){var s=e(47044),i=e(97841);A.exports=!s((function(){var A=Error("a");return!("stack"in A)||(Object.defineProperty(A,"stack",i(1,7)),7!==A.stack)}))},56475:function(A,t,e){var s=e(32010),i=e(72062).f,n=e(48914),r=e(13711),B=e(7421),o=e(2675),E=e(39599);A.exports=function(A,t){var e,w,g,a,c,Q=A.target,C=A.global,h=A.stat;if(e=C?s:h?s[Q]||B(Q,{}):(s[Q]||{}).prototype)for(w in t){if(a=t[w],g=A.noTargetGet?(c=i(e,w))&&c.value:e[w],!E(C?w:Q+(h?".":"#")+w,A.forced)&&void 0!==g){if(typeof a==typeof g)continue;o(a,g)}(A.sham||g&&g.sham)&&n(a,"sham",!0),r(e,w,a,A)}}},47044:function(A){A.exports=function(A){try{return!!A()}catch(A){return!0}}},11813:function(A,t,e){"use strict";e(61726);var s=e(38347),i=e(13711),n=e(49820),r=e(47044),B=e(38688),o=e(48914),E=B("species"),w=RegExp.prototype;A.exports=function(A,t,e,g){var a=B(A),c=!r((function(){var t={};return t[a]=function(){return 7},7!=""[A](t)})),Q=c&&!r((function(){var t=!1,e=/a/;return"split"===A&&((e={}).constructor={},e.constructor[E]=function(){return e},e.flags="",e[a]=/./[a]),e.exec=function(){return t=!0,null},e[a](""),!t}));if(!c||!Q||e){var C=s(/./[a]),h=t(a,""[A],(function(A,t,e,i,r){var B=s(A),o=t.exec;return o===n||o===w.exec?c&&!r?{done:!0,value:C(t,e,i)}:{done:!0,value:B(e,t,i)}:{done:!1}}));i(String.prototype,A,h[0]),i(w,a,h[1])}g&&o(w[a],"sham",!0)}},55481:function(A,t,e){var s=e(47044);A.exports=!s((function(){return Object.isExtensible(Object.preventExtensions({}))}))},58448:function(A){var t=Function.prototype,e=t.apply,s=t.bind,i=t.call;A.exports="object"==typeof Reflect&&Reflect.apply||(s?i.bind(e):function(){return i.apply(e,arguments)})},25567:function(A,t,e){var s=e(38347),i=e(32631),n=s(s.bind);A.exports=function(A,t){return i(A),void 0===t?A:n?n(A,t):function(){return A.apply(t,arguments)}}},5481:function(A,t,e){"use strict";var s=e(32010),i=e(38347),n=e(32631),r=e(24517),B=e(20340),o=e(73163),E=s.Function,w=i([].concat),g=i([].join),a={};A.exports=E.bind||function(A){var t=n(this),e=t.prototype,s=o(arguments,1),i=function(){var e=w(s,o(arguments));return this instanceof i?function(A,t,e){if(!B(a,t)){for(var s=[],i=0;i]*>)/g,w=/\$([$&'`]|\d{1,2})/g;A.exports=function(A,t,e,s,g,a){var c=e+A.length,Q=s.length,C=w;return void 0!==g&&(g=i(g),C=E),B(a,C,(function(i,B){var E;switch(r(B,0)){case"$":return"$";case"&":return A;case"`":return o(t,0,e);case"'":return o(t,c);case"<":E=g[o(B,1,-1)];break;default:var w=+B;if(0===w)return i;if(w>Q){var a=n(w/10);return 0===a?i:a<=Q?void 0===s[a-1]?r(B,1):s[a-1]+r(B,1):i}E=s[w-1]}return void 0===E?"":E}))}},32010:function(A,t,e){var s=function(A){return A&&A.Math==Math&&A};A.exports=s("object"==typeof globalThis&&globalThis)||s("object"==typeof window&&window)||s("object"==typeof self&&self)||s("object"==typeof e.g&&e.g)||function(){return this}()||Function("return this")()},20340:function(A,t,e){var s=e(38347),i=e(43162),n=s({}.hasOwnProperty);A.exports=Object.hasOwn||function(A,t){return n(i(A),t)}},90682:function(A){A.exports={}},61144:function(A,t,e){var s=e(32010);A.exports=function(A,t){var e=s.console;e&&e.error&&(1==arguments.length?e.error(A):e.error(A,t))}},520:function(A,t,e){var s=e(38486);A.exports=s("document","documentElement")},18904:function(A,t,e){var s=e(15567),i=e(47044),n=e(12072);A.exports=!s&&!i((function(){return 7!=Object.defineProperty(n("div"),"a",{get:function(){return 7}}).a}))},64397:function(A,t,e){var s=e(32010).Array,i=Math.abs,n=Math.pow,r=Math.floor,B=Math.log,o=Math.LN2;A.exports={pack:function(A,t,e){var E,w,g,a=s(e),c=8*e-t-1,Q=(1<>1,h=23===t?n(2,-24)-n(2,-77):0,u=A<0||0===A&&1/A<0?1:0,l=0;for((A=i(A))!=A||A===1/0?(w=A!=A?1:0,E=Q):(E=r(B(A)/o),A*(g=n(2,-E))<1&&(E--,g*=2),(A+=E+C>=1?h/g:h*n(2,1-C))*g>=2&&(E++,g/=2),E+C>=Q?(w=0,E=Q):E+C>=1?(w=(A*g-1)*n(2,t),E+=C):(w=A*n(2,C-1)*n(2,t),E=0));t>=8;a[l++]=255&w,w/=256,t-=8);for(E=E<0;a[l++]=255&E,E/=256,c-=8);return a[--l]|=128*u,a},unpack:function(A,t){var e,s=A.length,i=8*s-t-1,r=(1<>1,o=i-7,E=s-1,w=A[E--],g=127&w;for(w>>=7;o>0;g=256*g+A[E],E--,o-=8);for(e=g&(1<<-o)-1,g>>=-o,o+=t;o>0;e=256*e+A[E],E--,o-=8);if(0===g)g=1-B;else{if(g===r)return e?NaN:w?-1/0:1/0;e+=n(2,t),g-=B}return(w?-1:1)*e*n(2,g-t)}}},7514:function(A,t,e){var s=e(32010),i=e(38347),n=e(47044),r=e(93975),B=s.Object,o=i("".split);A.exports=n((function(){return!B("z").propertyIsEnumerable(0)}))?function(A){return"String"==r(A)?o(A,""):B(A)}:B},51868:function(A,t,e){var s=e(94578),i=e(24517),n=e(3840);A.exports=function(A,t,e){var r,B;return n&&s(r=t.constructor)&&r!==e&&i(B=r.prototype)&&B!==e.prototype&&n(A,B),A}},10447:function(A,t,e){var s=e(38347),i=e(94578),n=e(55480),r=s(Function.toString);i(n.inspectSource)||(n.inspectSource=function(A){return r(A)}),A.exports=n.inspectSource},87811:function(A,t,e){var s=e(24517),i=e(48914);A.exports=function(A,t){s(t)&&"cause"in t&&i(A,"cause",t.cause)}},62148:function(A,t,e){var s=e(56475),i=e(38347),n=e(90682),r=e(24517),B=e(20340),o=e(95892).f,E=e(6611),w=e(8807),g=e(46859),a=e(55481),c=!1,Q=g("meta"),C=0,h=Object.isExtensible||function(){return!0},u=function(A){o(A,Q,{value:{objectID:"O"+C++,weakData:{}}})},l=A.exports={enable:function(){l.enable=function(){},c=!0;var A=E.f,t=i([].splice),e={};e[Q]=1,A(e).length&&(E.f=function(e){for(var s=A(e),i=0,n=s.length;il;l++)if((f=L(A[l]))&&w(h,f))return f;return new C(!1)}s=g(A,u)}for(D=s.next;!(b=n(D,s)).done;){try{f=L(b.value)}catch(A){c(s,"throw",A)}if("object"==typeof f&&f&&w(h,f))return f}return new C(!1)}},50194:function(A,t,e){var s=e(2834),i=e(34984),n=e(51839);A.exports=function(A,t,e){var r,B;i(A);try{if(!(r=n(A,"return"))){if("throw"===t)throw e;return e}r=s(r,A)}catch(A){B=!0,r=A}if("throw"===t)throw e;if(B)throw r;return i(r),e}},5844:function(A,t,e){"use strict";var s,i,n,r=e(47044),B=e(94578),o=e(10819),E=e(69548),w=e(13711),g=e(38688),a=e(63432),c=g("iterator"),Q=!1;[].keys&&("next"in(n=[].keys())?(i=E(E(n)))!==Object.prototype&&(s=i):Q=!0),null==s||r((function(){var A={};return s[c].call(A)!==A}))?s={}:a&&(s=o(s)),B(s[c])||w(s,c,(function(){return this})),A.exports={IteratorPrototype:s,BUGGY_SAFARI_ITERATORS:Q}},15366:function(A){A.exports={}},45495:function(A,t,e){var s=e(23417);A.exports=function(A){return s(A.length)}},59804:function(A,t,e){var s,i,n,r,B,o,E,w,g=e(32010),a=e(25567),c=e(72062).f,Q=e(6616).set,C=e(17716),h=e(70573),u=e(664),l=e(95053),I=g.MutationObserver||g.WebKitMutationObserver,f=g.document,D=g.process,b=g.Promise,d=c(g,"queueMicrotask"),v=d&&d.value;v||(s=function(){var A,t;for(l&&(A=D.domain)&&A.exit();i;){t=i.fn,i=i.next;try{t()}catch(A){throw i?r():n=void 0,A}}n=void 0,A&&A.enter()},C||l||u||!I||!f?!h&&b&&b.resolve?((E=b.resolve(void 0)).constructor=b,w=a(E.then,E),r=function(){w(s)}):l?r=function(){D.nextTick(s)}:(Q=a(Q,g),r=function(){Q(s)}):(B=!0,o=f.createTextNode(""),new I(s).observe(o,{characterData:!0}),r=function(){o.data=B=!B})),A.exports=v||function(A){var t={fn:A,next:void 0};n&&(n.next=t),i||(i=t,r()),n=t}},5155:function(A,t,e){var s=e(32010);A.exports=s.Promise},46887:function(A,t,e){var s=e(70091),i=e(47044);A.exports=!!Object.getOwnPropertySymbols&&!i((function(){var A=Symbol();return!String(A)||!(Object(A)instanceof Symbol)||!Symbol.sham&&s&&s<41}))},26168:function(A,t,e){var s=e(32010),i=e(94578),n=e(10447),r=s.WeakMap;A.exports=i(r)&&/native code/.test(n(r))},56614:function(A,t,e){"use strict";var s=e(32631),i=function(A){var t,e;this.promise=new A((function(A,s){if(void 0!==t||void 0!==e)throw TypeError("Bad Promise constructor");t=A,e=s})),this.resolve=s(t),this.reject=s(e)};A.exports.f=function(A){return new i(A)}},86392:function(A,t,e){var s=e(25096);A.exports=function(A,t){return void 0===A?arguments.length<2?"":t:s(A)}},93666:function(A,t,e){var s=e(32010),i=e(28831),n=s.TypeError;A.exports=function(A){if(i(A))throw n("The method doesn't accept regular expressions");return A}},59805:function(A,t,e){var s=e(32010).isFinite;A.exports=Number.isFinite||function(A){return"number"==typeof A&&s(A)}},87146:function(A,t,e){"use strict";var s=e(15567),i=e(38347),n=e(2834),r=e(47044),B=e(84675),o=e(61146),E=e(55574),w=e(43162),g=e(7514),a=Object.assign,c=Object.defineProperty,Q=i([].concat);A.exports=!a||r((function(){if(s&&1!==a({b:1},a(c({},"a",{enumerable:!0,get:function(){c(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var A={},t={},e=Symbol(),i="abcdefghijklmnopqrst";return A[e]=7,i.split("").forEach((function(A){t[A]=A})),7!=a({},A)[e]||B(a({},t)).join("")!=i}))?function(A,t){for(var e=w(A),i=arguments.length,r=1,a=o.f,c=E.f;i>r;)for(var C,h=g(arguments[r++]),u=a?Q(B(h),a(h)):B(h),l=u.length,I=0;l>I;)C=u[I++],s&&!n(c,h,C)||(e[C]=h[C]);return e}:a},10819:function(A,t,e){var s,i=e(34984),n=e(10196),r=e(2416),B=e(90682),o=e(520),E=e(12072),w=e(82194),g="prototype",a="script",c=w("IE_PROTO"),Q=function(){},C=function(A){return"<"+a+">"+A+""},h=function(A){A.write(C("")),A.close();var t=A.parentWindow.Object;return A=null,t},u=function(){try{s=new ActiveXObject("htmlfile")}catch(A){}var A,t,e;u="undefined"!=typeof document?document.domain&&s?h(s):(t=E("iframe"),e="java"+a+":",t.style.display="none",o.appendChild(t),t.src=String(e),(A=t.contentWindow.document).open(),A.write(C("document.F=Object")),A.close(),A.F):h(s);for(var i=r.length;i--;)delete u[g][r[i]];return u()};B[c]=!0,A.exports=Object.create||function(A,t){var e;return null!==A?(Q[g]=i(A),e=new Q,Q[g]=null,e[c]=A):e=u(),void 0===t?e:n(e,t)}},10196:function(A,t,e){var s=e(15567),i=e(95892),n=e(34984),r=e(98086),B=e(84675);A.exports=s?Object.defineProperties:function(A,t){n(A);for(var e,s=r(t),o=B(t),E=o.length,w=0;E>w;)i.f(A,e=o[w++],s[e]);return A}},95892:function(A,t,e){var s=e(32010),i=e(15567),n=e(18904),r=e(34984),B=e(63918),o=s.TypeError,E=Object.defineProperty;t.f=i?E:function(A,t,e){if(r(A),t=B(t),r(e),n)try{return E(A,t,e)}catch(A){}if("get"in e||"set"in e)throw o("Accessors not supported");return"value"in e&&(A[t]=e.value),A}},72062:function(A,t,e){var s=e(15567),i=e(2834),n=e(55574),r=e(97841),B=e(98086),o=e(63918),E=e(20340),w=e(18904),g=Object.getOwnPropertyDescriptor;t.f=s?g:function(A,t){if(A=B(A),t=o(t),w)try{return g(A,t)}catch(A){}if(E(A,t))return r(!i(n.f,A,t),A[t])}},8807:function(A,t,e){var s=e(93975),i=e(98086),n=e(6611).f,r=e(73163),B="object"==typeof window&&window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[];A.exports.f=function(A){return B&&"Window"==s(A)?function(A){try{return n(A)}catch(A){return r(B)}}(A):n(i(A))}},6611:function(A,t,e){var s=e(64429),i=e(2416).concat("length","prototype");t.f=Object.getOwnPropertyNames||function(A){return s(A,i)}},61146:function(A,t){t.f=Object.getOwnPropertySymbols},69548:function(A,t,e){var s=e(32010),i=e(20340),n=e(94578),r=e(43162),B=e(82194),o=e(68494),E=B("IE_PROTO"),w=s.Object,g=w.prototype;A.exports=o?w.getPrototypeOf:function(A){var t=r(A);if(i(t,E))return t[E];var e=t.constructor;return n(e)&&t instanceof e?e.prototype:t instanceof w?g:null}},70176:function(A,t,e){var s=e(38347);A.exports=s({}.isPrototypeOf)},64429:function(A,t,e){var s=e(38347),i=e(20340),n=e(98086),r=e(12636).indexOf,B=e(90682),o=s([].push);A.exports=function(A,t){var e,s=n(A),E=0,w=[];for(e in s)!i(B,e)&&i(s,e)&&o(w,e);for(;t.length>E;)i(s,e=t[E++])&&(~r(w,e)||o(w,e));return w}},84675:function(A,t,e){var s=e(64429),i=e(2416);A.exports=Object.keys||function(A){return s(A,i)}},55574:function(A,t){"use strict";var e={}.propertyIsEnumerable,s=Object.getOwnPropertyDescriptor,i=s&&!e.call({1:2},1);t.f=i?function(A){var t=s(this,A);return!!t&&t.enumerable}:e},3840:function(A,t,e){var s=e(38347),i=e(34984),n=e(58659);A.exports=Object.setPrototypeOf||("__proto__"in{}?function(){var A,t=!1,e={};try{(A=s(Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set))(e,[]),t=e instanceof Array}catch(A){}return function(e,s){return i(e),n(s),t?A(e,s):e.__proto__=s,e}}():void 0)},80754:function(A,t,e){var s=e(15567),i=e(38347),n=e(84675),r=e(98086),B=i(e(55574).f),o=i([].push),E=function(A){return function(t){for(var e,i=r(t),E=n(i),w=E.length,g=0,a=[];w>g;)e=E[g++],s&&!B(i,e)||o(a,A?[e,i[e]]:i[e]);return a}};A.exports={entries:E(!0),values:E(!1)}},52598:function(A,t,e){"use strict";var s=e(24663),i=e(52564);A.exports=s?{}.toString:function(){return"[object "+i(this)+"]"}},39629:function(A,t,e){var s=e(32010),i=e(2834),n=e(94578),r=e(24517),B=s.TypeError;A.exports=function(A,t){var e,s;if("string"===t&&n(e=A.toString)&&!r(s=i(e,A)))return s;if(n(e=A.valueOf)&&!r(s=i(e,A)))return s;if("string"!==t&&n(e=A.toString)&&!r(s=i(e,A)))return s;throw B("Can't convert object to primitive value")}},21594:function(A,t,e){var s=e(38486),i=e(38347),n=e(6611),r=e(61146),B=e(34984),o=i([].concat);A.exports=s("Reflect","ownKeys")||function(A){var t=n.f(B(A)),e=r.f;return e?o(t,e(A)):t}},11206:function(A,t,e){var s=e(32010);A.exports=s},61900:function(A){A.exports=function(A){try{return{error:!1,value:A()}}catch(A){return{error:!0,value:A}}}},28617:function(A,t,e){var s=e(34984),i=e(24517),n=e(56614);A.exports=function(A,t){if(s(A),i(t)&&t.constructor===A)return t;var e=n.f(A);return(0,e.resolve)(t),e.promise}},15341:function(A,t,e){var s=e(13711);A.exports=function(A,t,e){for(var i in t)s(A,i,t[i],e);return A}},13711:function(A,t,e){var s=e(32010),i=e(94578),n=e(20340),r=e(48914),B=e(7421),o=e(10447),E=e(70172),w=e(7081).CONFIGURABLE,g=E.get,a=E.enforce,c=String(String).split("String");(A.exports=function(A,t,e,o){var E,g=!!o&&!!o.unsafe,Q=!!o&&!!o.enumerable,C=!!o&&!!o.noTargetGet,h=o&&void 0!==o.name?o.name:t;i(e)&&("Symbol("===String(h).slice(0,7)&&(h="["+String(h).replace(/^Symbol\(([^)]*)\)/,"$1")+"]"),(!n(e,"name")||w&&e.name!==h)&&r(e,"name",h),(E=a(e)).source||(E.source=c.join("string"==typeof h?h:""))),A!==s?(g?!C&&A[t]&&(Q=!0):delete A[t],Q?A[t]=e:r(A,t,e)):Q?A[t]=e:B(t,e)})(Function.prototype,"toString",(function(){return i(this)&&g(this).source||o(this)}))},66723:function(A,t,e){var s=e(32010),i=e(2834),n=e(34984),r=e(94578),B=e(93975),o=e(49820),E=s.TypeError;A.exports=function(A,t){var e=A.exec;if(r(e)){var s=i(e,A,t);return null!==s&&n(s),s}if("RegExp"===B(A))return i(o,A,t);throw E("RegExp#exec called on incompatible receiver")}},49820:function(A,t,e){"use strict";var s,i,n=e(2834),r=e(38347),B=e(25096),o=e(21182),E=e(74846),w=e(464),g=e(10819),a=e(70172).get,c=e(84030),Q=e(97739),C=w("native-string-replace",String.prototype.replace),h=RegExp.prototype.exec,u=h,l=r("".charAt),I=r("".indexOf),f=r("".replace),D=r("".slice),b=(i=/b*/g,n(h,s=/a/,"a"),n(h,i,"a"),0!==s.lastIndex||0!==i.lastIndex),d=E.UNSUPPORTED_Y||E.BROKEN_CARET,v=void 0!==/()??/.exec("")[1];(b||v||d||c||Q)&&(u=function(A){var t,e,s,i,r,E,w,c=this,Q=a(c),Y=B(A),F=Q.raw;if(F)return F.lastIndex=c.lastIndex,t=n(u,F,Y),c.lastIndex=F.lastIndex,t;var M=Q.groups,y=d&&c.sticky,L=n(o,c),R=c.source,m=0,x=Y;if(y&&(L=f(L,"y",""),-1===I(L,"g")&&(L+="g"),x=D(Y,c.lastIndex),c.lastIndex>0&&(!c.multiline||c.multiline&&"\n"!==l(Y,c.lastIndex-1))&&(R="(?: "+R+")",x=" "+x,m++),e=new RegExp("^(?:"+R+")",L)),v&&(e=new RegExp("^"+R+"$(?!\\s)",L)),b&&(s=c.lastIndex),i=n(h,y?e:c,x),y?i?(i.input=D(i.input,m),i[0]=D(i[0],m),i.index=c.lastIndex,c.lastIndex+=i[0].length):c.lastIndex=0:b&&i&&(c.lastIndex=c.global?i.index+i[0].length:s),v&&i&&i.length>1&&n(C,i[0],e,(function(){for(r=1;rb)","g");return"b"!==A.exec("b").groups.a||"bc"!=="b".replace(A,"$c")}))},83943:function(A,t,e){var s=e(32010).TypeError;A.exports=function(A){if(null==A)throw s("Can't call method on "+A);return A}},7421:function(A,t,e){var s=e(32010),i=Object.defineProperty;A.exports=function(A,t){try{i(s,A,{value:t,configurable:!0,writable:!0})}catch(e){s[A]=t}return t}},51334:function(A,t,e){"use strict";var s=e(38486),i=e(95892),n=e(38688),r=e(15567),B=n("species");A.exports=function(A){var t=s(A),e=i.f;r&&t&&!t[B]&&e(t,B,{configurable:!0,get:function(){return this}})}},15216:function(A,t,e){var s=e(95892).f,i=e(20340),n=e(38688)("toStringTag");A.exports=function(A,t,e){A&&!i(A=e?A:A.prototype,n)&&s(A,n,{configurable:!0,value:t})}},82194:function(A,t,e){var s=e(464),i=e(46859),n=s("keys");A.exports=function(A){return n[A]||(n[A]=i(A))}},55480:function(A,t,e){var s=e(32010),i=e(7421),n="__core-js_shared__",r=s[n]||i(n,{});A.exports=r},464:function(A,t,e){var s=e(63432),i=e(55480);(A.exports=function(A,t){return i[A]||(i[A]=void 0!==t?t:{})})("versions",[]).push({version:"3.19.0",mode:s?"pure":"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})},27754:function(A,t,e){var s=e(34984),i=e(69075),n=e(38688)("species");A.exports=function(A,t){var e,r=s(A).constructor;return void 0===r||null==(e=s(r)[n])?t:i(e)}},7452:function(A,t,e){var s=e(47044);A.exports=function(A){return s((function(){var t=""[A]('"');return t!==t.toLowerCase()||t.split('"').length>3}))}},69510:function(A,t,e){var s=e(38347),i=e(26882),n=e(25096),r=e(83943),B=s("".charAt),o=s("".charCodeAt),E=s("".slice),w=function(A){return function(t,e){var s,w,g=n(r(t)),a=i(e),c=g.length;return a<0||a>=c?A?"":void 0:(s=o(g,a))<55296||s>56319||a+1===c||(w=o(g,a+1))<56320||w>57343?A?B(g,a):s:A?E(g,a,a+2):w-56320+(s-55296<<10)+65536}};A.exports={codeAt:w(!1),charAt:w(!0)}},34858:function(A,t,e){"use strict";var s=e(32010),i=e(26882),n=e(25096),r=e(83943),B=s.RangeError;A.exports=function(A){var t=n(r(this)),e="",s=i(A);if(s<0||s==1/0)throw B("Wrong number of repetitions");for(;s>0;(s>>>=1)&&(t+=t))1&s&&(e+=t);return e}},68899:function(A,t,e){var s=e(7081).PROPER,i=e(47044),n=e(43187);A.exports=function(A){return i((function(){return!!n[A]()||"​…᠎"!=="​…᠎"[A]()||s&&n[A].name!==A}))}},29841:function(A,t,e){var s=e(38347),i=e(83943),n=e(25096),r=e(43187),B=s("".replace),o="["+r+"]",E=RegExp("^"+o+o+"*"),w=RegExp(o+o+"*$"),g=function(A){return function(t){var e=n(i(t));return 1&A&&(e=B(e,E,"")),2&A&&(e=B(e,w,"")),e}};A.exports={start:g(1),end:g(2),trim:g(3)}},6616:function(A,t,e){var s,i,n,r,B=e(32010),o=e(58448),E=e(25567),w=e(94578),g=e(20340),a=e(47044),c=e(520),Q=e(73163),C=e(12072),h=e(17716),u=e(95053),l=B.setImmediate,I=B.clearImmediate,f=B.process,D=B.Dispatch,b=B.Function,d=B.MessageChannel,v=B.String,Y=0,F={},M="onreadystatechange";try{s=B.location}catch(A){}var y=function(A){if(g(F,A)){var t=F[A];delete F[A],t()}},L=function(A){return function(){y(A)}},R=function(A){y(A.data)},m=function(A){B.postMessage(v(A),s.protocol+"//"+s.host)};l&&I||(l=function(A){var t=Q(arguments,1);return F[++Y]=function(){o(w(A)?A:b(A),void 0,t)},i(Y),Y},I=function(A){delete F[A]},u?i=function(A){f.nextTick(L(A))}:D&&D.now?i=function(A){D.now(L(A))}:d&&!h?(r=(n=new d).port2,n.port1.onmessage=R,i=E(r.postMessage,r)):B.addEventListener&&w(B.postMessage)&&!B.importScripts&&s&&"file:"!==s.protocol&&!a(m)?(i=m,B.addEventListener("message",R,!1)):i=M in C("script")?function(A){c.appendChild(C("script"))[M]=function(){c.removeChild(this),y(A)}}:function(A){setTimeout(L(A),0)}),A.exports={set:l,clear:I}},16679:function(A,t,e){var s=e(38347);A.exports=s(1..valueOf)},74841:function(A,t,e){var s=e(26882),i=Math.max,n=Math.min;A.exports=function(A,t){var e=s(A);return e<0?i(e+t,0):n(e,t)}},71265:function(A,t,e){var s=e(32010),i=e(26882),n=e(23417),r=s.RangeError;A.exports=function(A){if(void 0===A)return 0;var t=i(A),e=n(t);if(t!==e)throw r("Wrong length or index");return e}},98086:function(A,t,e){var s=e(7514),i=e(83943);A.exports=function(A){return s(i(A))}},26882:function(A){var t=Math.ceil,e=Math.floor;A.exports=function(A){var s=+A;return s!=s||0===s?0:(s>0?e:t)(s)}},23417:function(A,t,e){var s=e(26882),i=Math.min;A.exports=function(A){return A>0?i(s(A),9007199254740991):0}},43162:function(A,t,e){var s=e(32010),i=e(83943),n=s.Object;A.exports=function(A){return n(i(A))}},80670:function(A,t,e){var s=e(32010),i=e(64913),n=s.RangeError;A.exports=function(A,t){var e=i(A);if(e%t)throw n("Wrong offset");return e}},64913:function(A,t,e){var s=e(32010),i=e(26882),n=s.RangeError;A.exports=function(A){var t=i(A);if(t<0)throw n("The argument can't be less than 0");return t}},2644:function(A,t,e){var s=e(32010),i=e(2834),n=e(24517),r=e(46290),B=e(51839),o=e(39629),E=e(38688),w=s.TypeError,g=E("toPrimitive");A.exports=function(A,t){if(!n(A)||r(A))return A;var e,s=B(A,g);if(s){if(void 0===t&&(t="default"),e=i(s,A,t),!n(e)||r(e))return e;throw w("Can't convert object to primitive value")}return void 0===t&&(t="number"),o(A,t)}},63918:function(A,t,e){var s=e(2644),i=e(46290);A.exports=function(A){var t=s(A,"string");return i(t)?t:t+""}},24663:function(A,t,e){var s={};s[e(38688)("toStringTag")]="z",A.exports="[object z]"===String(s)},25096:function(A,t,e){var s=e(32010),i=e(52564),n=s.String;A.exports=function(A){if("Symbol"===i(A))throw TypeError("Cannot convert a Symbol value to a string");return n(A)}},68664:function(A,t,e){var s=e(32010).String;A.exports=function(A){try{return s(A)}catch(A){return"Object"}}},98828:function(A,t,e){"use strict";var s=e(56475),i=e(32010),n=e(2834),r=e(15567),B=e(28834),o=e(36597),E=e(89987),w=e(2868),g=e(97841),a=e(48914),c=e(17506),Q=e(23417),C=e(71265),h=e(80670),u=e(63918),l=e(20340),I=e(52564),f=e(24517),D=e(46290),b=e(10819),d=e(70176),v=e(3840),Y=e(6611).f,F=e(83590),M=e(91102).forEach,y=e(51334),L=e(95892),R=e(72062),m=e(70172),x=e(51868),p=m.get,G=m.set,W=L.f,P=R.f,H=Math.round,S=i.RangeError,U=E.ArrayBuffer,N=U.prototype,T=E.DataView,V=o.NATIVE_ARRAY_BUFFER_VIEWS,j=o.TYPED_ARRAY_CONSTRUCTOR,k=o.TYPED_ARRAY_TAG,J=o.TypedArray,z=o.TypedArrayPrototype,K=o.aTypedArrayConstructor,O=o.isTypedArray,Z="BYTES_PER_ELEMENT",X="Wrong length",q=function(A,t){K(A);for(var e=0,s=t.length,i=new A(s);s>e;)i[e]=t[e++];return i},_=function(A,t){W(A,t,{get:function(){return p(this)[t]}})},$=function(A){var t;return d(N,A)||"ArrayBuffer"==(t=I(A))||"SharedArrayBuffer"==t},AA=function(A,t){return O(A)&&!D(t)&&t in A&&c(+t)&&t>=0},tA=function(A,t){return t=u(t),AA(A,t)?g(2,A[t]):P(A,t)},eA=function(A,t,e){return t=u(t),!(AA(A,t)&&f(e)&&l(e,"value"))||l(e,"get")||l(e,"set")||e.configurable||l(e,"writable")&&!e.writable||l(e,"enumerable")&&!e.enumerable?W(A,t,e):(A[t]=e.value,A)};r?(V||(R.f=tA,L.f=eA,_(z,"buffer"),_(z,"byteOffset"),_(z,"byteLength"),_(z,"length")),s({target:"Object",stat:!0,forced:!V},{getOwnPropertyDescriptor:tA,defineProperty:eA}),A.exports=function(A,t,e){var r=A.match(/\d+$/)[0]/8,o=A+(e?"Clamped":"")+"Array",E="get"+A,g="set"+A,c=i[o],u=c,l=u&&u.prototype,I={},D=function(A,t){W(A,t,{get:function(){return function(A,t){var e=p(A);return e.view[E](t*r+e.byteOffset,!0)}(this,t)},set:function(A){return function(A,t,s){var i=p(A);e&&(s=(s=H(s))<0?0:s>255?255:255&s),i.view[g](t*r+i.byteOffset,s,!0)}(this,t,A)},enumerable:!0})};V?B&&(u=t((function(A,t,e,s){return w(A,l),x(f(t)?$(t)?void 0!==s?new c(t,h(e,r),s):void 0!==e?new c(t,h(e,r)):new c(t):O(t)?q(u,t):n(F,u,t):new c(C(t)),A,u)})),v&&v(u,J),M(Y(c),(function(A){A in u||a(u,A,c[A])})),u.prototype=l):(u=t((function(A,t,e,s){w(A,l);var i,B,o,E=0,g=0;if(f(t)){if(!$(t))return O(t)?q(u,t):n(F,u,t);i=t,g=h(e,r);var a=t.byteLength;if(void 0===s){if(a%r)throw S(X);if((B=a-g)<0)throw S(X)}else if((B=Q(s)*r)+g>a)throw S(X);o=B/r}else o=C(t),i=new U(B=o*r);for(G(A,{buffer:i,byteOffset:g,byteLength:B,length:o,view:new T(i)});E1?arguments[1]:void 0,f=void 0!==I,D=E(u);if(D&&!w(D))for(C=(Q=o(u,D)).next,u=[];!(c=i(C,Q)).done;)u.push(c.value);for(f&&l>2&&(I=s(I,arguments[2])),e=B(u),a=new(g(h))(e),t=0;e>t;t++)a[t]=f?I(u[t],t):u[t];return a}},34815:function(A,t,e){var s=e(36597),i=e(27754),n=s.TYPED_ARRAY_CONSTRUCTOR,r=s.aTypedArrayConstructor;A.exports=function(A){return r(i(A,A[n]))}},46859:function(A,t,e){var s=e(38347),i=0,n=Math.random(),r=s(1..toString);A.exports=function(A){return"Symbol("+(void 0===A?"":A)+")_"+r(++i+n,36)}},9567:function(A,t,e){var s=e(46887);A.exports=s&&!Symbol.sham&&"symbol"==typeof Symbol.iterator},75960:function(A,t,e){var s=e(38688);t.f=s},38688:function(A,t,e){var s=e(32010),i=e(464),n=e(20340),r=e(46859),B=e(46887),o=e(9567),E=i("wks"),w=s.Symbol,g=w&&w.for,a=o?w:w&&w.withoutSetter||r;A.exports=function(A){if(!n(E,A)||!B&&"string"!=typeof E[A]){var t="Symbol."+A;B&&n(w,A)?E[A]=w[A]:E[A]=o&&g?g(t):a(t)}return E[A]}},43187:function(A){A.exports="\t\n\v\f\r                 \u2028\u2029\ufeff"},94910:function(A,t,e){"use strict";var s=e(56475),i=e(32010),n=e(70176),r=e(69548),B=e(3840),o=e(2675),E=e(10819),w=e(48914),g=e(97841),a=e(34074),c=e(87811),Q=e(80383),C=e(86392),h=e(45144),u=i.Error,l=[].push,I=function(A,t){var e=n(f,this)?this:E(f),s=arguments.length>2?arguments[2]:void 0;B&&(e=B(new u(void 0),r(e))),w(e,"message",C(t,"")),h&&w(e,"stack",a(e.stack,1)),c(e,s);var i=[];return Q(A,l,{that:i}),w(e,"errors",i),e};B?B(I,u):o(I,u);var f=I.prototype=E(u.prototype,{constructor:g(1,I),message:g(1,""),name:g(1,"AggregateError")});s({global:!0},{AggregateError:I})},39081:function(A,t,e){"use strict";var s=e(56475),i=e(32010),n=e(47044),r=e(59113),B=e(24517),o=e(43162),E=e(45495),w=e(38639),g=e(45744),a=e(56280),c=e(38688),Q=e(70091),C=c("isConcatSpreadable"),h=9007199254740991,u="Maximum allowed index exceeded",l=i.TypeError,I=Q>=51||!n((function(){var A=[];return A[C]=!1,A.concat()[0]!==A})),f=a("concat"),D=function(A){if(!B(A))return!1;var t=A[C];return void 0!==t?!!t:r(A)};s({target:"Array",proto:!0,forced:!I||!f},{concat:function(A){var t,e,s,i,n,r=o(this),B=g(r,0),a=0;for(t=-1,s=arguments.length;th)throw l(u);for(e=0;e=h)throw l(u);w(B,a++,n)}return B.length=a,B}})},68626:function(A,t,e){var s=e(56475),i=e(92642),n=e(71156);s({target:"Array",proto:!0},{copyWithin:i}),n("copyWithin")},41584:function(A,t,e){var s=e(56475),i=e(72864),n=e(71156);s({target:"Array",proto:!0},{fill:i}),n("fill")},49063:function(A,t,e){"use strict";var s=e(56475),i=e(91102).filter;s({target:"Array",proto:!0,forced:!e(56280)("filter")},{filter:function(A){return i(this,A,arguments.length>1?arguments[1]:void 0)}})},11765:function(A,t,e){var s=e(56475),i=e(95717);s({target:"Array",stat:!0,forced:!e(46769)((function(A){Array.from(A)}))},{from:i})},58028:function(A,t,e){"use strict";var s=e(56475),i=e(12636).includes,n=e(71156);s({target:"Array",proto:!0},{includes:function(A){return i(this,A,arguments.length>1?arguments[1]:void 0)}}),n("includes")},81755:function(A,t,e){"use strict";var s=e(98086),i=e(71156),n=e(15366),r=e(70172),B=e(97001),o="Array Iterator",E=r.set,w=r.getterFor(o);A.exports=B(Array,"Array",(function(A,t){E(this,{type:o,target:s(A),index:0,kind:t})}),(function(){var A=w(this),t=A.target,e=A.kind,s=A.index++;return!t||s>=t.length?(A.target=void 0,{value:void 0,done:!0}):"keys"==e?{value:s,done:!1}:"values"==e?{value:t[s],done:!1}:{value:[s,t[s]],done:!1}}),"values"),n.Arguments=n.Array,i("keys"),i("values"),i("entries")},94845:function(A,t,e){"use strict";var s=e(56475),i=e(38347),n=e(7514),r=e(98086),B=e(81007),o=i([].join),E=n!=Object,w=B("join",",");s({target:"Array",proto:!0,forced:E||!w},{join:function(A){return o(r(this),void 0===A?",":A)}})},80055:function(A,t,e){"use strict";var s=e(56475),i=e(91102).map;s({target:"Array",proto:!0,forced:!e(56280)("map")},{map:function(A){return i(this,A,arguments.length>1?arguments[1]:void 0)}})},20731:function(A,t,e){"use strict";var s=e(56475),i=e(32010),n=e(59113),r=e(20884),B=e(24517),o=e(74841),E=e(45495),w=e(98086),g=e(38639),a=e(38688),c=e(56280),Q=e(73163),C=c("slice"),h=a("species"),u=i.Array,l=Math.max;s({target:"Array",proto:!0,forced:!C},{slice:function(A,t){var e,s,i,a=w(this),c=E(a),C=o(A,c),I=o(void 0===t?c:t,c);if(n(a)&&(e=a.constructor,(r(e)&&(e===u||n(e.prototype))||B(e)&&null===(e=e[h]))&&(e=void 0),e===u||void 0===e))return Q(a,C,I);for(s=new(void 0===e?u:e)(l(I-C,0)),i=0;C3)){if(c)return!0;if(C)return C<603;var A,t,e,s,i="";for(A=65;A<76;A++){switch(t=String.fromCharCode(A),A){case 66:case 69:case 70:case 72:e=3;break;case 68:case 71:e=4;break;default:e=2}for(s=0;s<47;s++)h.push({k:t+s,v:e})}for(h.sort((function(A,t){return t.v-A.v})),s=0;so(e)?1:-1}}(A)),e=i.length,s=0;s9007199254740991)throw a("Maximum allowed length exceeded");for(i=E(u,s),g=0;gl-s+e;g--)delete u[g-1]}else if(e>s)for(g=l-s;g>I;g--)h=g+e-1,(C=g+s-1)in u?u[h]=u[C]:delete u[h];for(g=0;g2)if(E=l(E),43===(t=v(E,0))||45===t){if(88===(e=v(E,2))||120===e)return NaN}else if(48===t){switch(v(E,1)){case 66:case 98:s=2,i=49;break;case 79:case 111:s=8,i=55;break;default:return+E}for(r=(n=d(E,2)).length,B=0;Bi)return NaN;return parseInt(n,s)}return+E}(t)}(A)),e=this;return w(D,e)&&c((function(){u(e)}))?E(Object(t),e,F):t},M=s?Q(f):"MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,fromString,range".split(","),y=0;M.length>y;y++)o(f,Y=M[y])&&!o(F,Y)&&h(F,Y,C(f,Y));F.prototype=D,D.constructor=F,B(i,I,F)}},58549:function(A,t,e){e(56475)({target:"Number",stat:!0},{EPSILON:Math.pow(2,-52)})},70095:function(A,t,e){e(56475)({target:"Number",stat:!0},{isFinite:e(59805)})},2876:function(A,t,e){e(56475)({target:"Number",stat:!0},{isInteger:e(17506)})},10849:function(A,t,e){"use strict";var s=e(56475),i=e(32010),n=e(38347),r=e(26882),B=e(16679),o=e(34858),E=e(47044),w=i.RangeError,g=i.String,a=Math.floor,c=n(o),Q=n("".slice),C=n(1..toFixed),h=function(A,t,e){return 0===t?e:t%2==1?h(A,t-1,e*A):h(A*A,t/2,e)},u=function(A,t,e){for(var s=-1,i=e;++s<6;)i+=t*A[s],A[s]=i%1e7,i=a(i/1e7)},l=function(A,t){for(var e=6,s=0;--e>=0;)s+=A[e],A[e]=a(s/t),s=s%t*1e7},I=function(A){for(var t=6,e="";--t>=0;)if(""!==e||0===t||0!==A[t]){var s=g(A[t]);e=""===e?s:e+c("0",7-s.length)+s}return e};s({target:"Number",proto:!0,forced:E((function(){return"0.000"!==C(8e-5,3)||"1"!==C(.9,0)||"1.25"!==C(1.255,2)||"1000000000000000128"!==C(0xde0b6b3a7640080,0)}))||!E((function(){C({})}))},{toFixed:function(A){var t,e,s,i,n=B(this),o=r(A),E=[0,0,0,0,0,0],a="",C="0";if(o<0||o>20)throw w("Incorrect fraction digits");if(n!=n)return"NaN";if(n<=-1e21||n>=1e21)return g(n);if(n<0&&(a="-",n=-n),n>1e-21)if(e=(t=function(A){for(var t=0,e=A;e>=4096;)t+=12,e/=4096;for(;e>=2;)t+=1,e/=2;return t}(n*h(2,69,1))-69)<0?n*h(2,-t,1):n/h(2,t,1),e*=4503599627370496,(t=52-t)>0){for(u(E,0,e),s=o;s>=7;)u(E,1e7,0),s-=7;for(u(E,h(10,s,1),0),s=t-1;s>=23;)l(E,1<<23),s-=23;l(E,1<0?a+((i=C.length)<=o?"0."+c("0",o-i)+C:Q(C,0,i-o)+"."+Q(C,i-o)):a+C}})},18756:function(A,t,e){var s=e(56475),i=e(87146);s({target:"Object",stat:!0,forced:Object.assign!==i},{assign:i})},75174:function(A,t,e){var s=e(56475),i=e(55481),n=e(47044),r=e(24517),B=e(62148).onFreeze,o=Object.freeze;s({target:"Object",stat:!0,forced:n((function(){o(1)})),sham:!i},{freeze:function(A){return o&&r(A)?o(B(A)):A}})},57444:function(A,t,e){var s=e(56475),i=e(47044),n=e(98086),r=e(72062).f,B=e(15567),o=i((function(){r(1)}));s({target:"Object",stat:!0,forced:!B||o,sham:!B},{getOwnPropertyDescriptor:function(A,t){return r(n(A),t)}})},28331:function(A,t,e){var s=e(56475),i=e(15567),n=e(21594),r=e(98086),B=e(72062),o=e(38639);s({target:"Object",stat:!0,sham:!i},{getOwnPropertyDescriptors:function(A){for(var t,e,s=r(A),i=B.f,E=n(s),w={},g=0;E.length>g;)void 0!==(e=i(s,t=E[g++]))&&o(w,t,e);return w}})},71950:function(A,t,e){var s=e(56475),i=e(47044),n=e(43162),r=e(69548),B=e(68494);s({target:"Object",stat:!0,forced:i((function(){r(1)})),sham:!B},{getPrototypeOf:function(A){return r(n(A))}})},37309:function(A,t,e){var s=e(56475),i=e(43162),n=e(84675);s({target:"Object",stat:!0,forced:e(47044)((function(){n(1)}))},{keys:function(A){return n(i(A))}})},14032:function(A,t,e){var s=e(24663),i=e(13711),n=e(52598);s||i(Object.prototype,"toString",n,{unsafe:!0})},59883:function(A,t,e){var s=e(56475),i=e(80754).values;s({target:"Object",stat:!0},{values:function(A){return i(A)}})},77074:function(A,t,e){"use strict";var s=e(56475),i=e(2834),n=e(32631),r=e(56614),B=e(61900),o=e(80383);s({target:"Promise",stat:!0},{allSettled:function(A){var t=this,e=r.f(t),s=e.resolve,E=e.reject,w=B((function(){var e=n(t.resolve),r=[],B=0,E=1;o(A,(function(A){var n=B++,o=!1;E++,i(e,t,A).then((function(A){o||(o=!0,r[n]={status:"fulfilled",value:A},--E||s(r))}),(function(A){o||(o=!0,r[n]={status:"rejected",reason:A},--E||s(r))}))})),--E||s(r)}));return w.error&&E(w.value),e.promise}})},44455:function(A,t,e){"use strict";var s=e(56475),i=e(32631),n=e(38486),r=e(2834),B=e(56614),o=e(61900),E=e(80383),w="No one promise resolved";s({target:"Promise",stat:!0},{any:function(A){var t=this,e=n("AggregateError"),s=B.f(t),g=s.resolve,a=s.reject,c=o((function(){var s=i(t.resolve),n=[],B=0,o=1,c=!1;E(A,(function(A){var i=B++,E=!1;o++,r(s,t,A).then((function(A){E||c||(c=!0,g(A))}),(function(A){E||c||(E=!0,n[i]=A,--o||a(new e(n,w)))}))})),--o||a(new e(n,w))}));return c.error&&a(c.value),s.promise}})},58605:function(A,t,e){"use strict";var s=e(56475),i=e(63432),n=e(5155),r=e(47044),B=e(38486),o=e(94578),E=e(27754),w=e(28617),g=e(13711);if(s({target:"Promise",proto:!0,real:!0,forced:!!n&&r((function(){n.prototype.finally.call({then:function(){}},(function(){}))}))},{finally:function(A){var t=E(this,B("Promise")),e=o(A);return this.then(e?function(e){return w(t,A()).then((function(){return e}))}:A,e?function(e){return w(t,A()).then((function(){throw e}))}:A)}}),!i&&o(n)){var a=B("Promise").prototype.finally;n.prototype.finally!==a&&g(n.prototype,"finally",a,{unsafe:!0})}},68067:function(A,t,e){"use strict";var s,i,n,r,B=e(56475),o=e(63432),E=e(32010),w=e(38486),g=e(2834),a=e(5155),c=e(13711),Q=e(15341),C=e(3840),h=e(15216),u=e(51334),l=e(32631),I=e(94578),f=e(24517),D=e(2868),b=e(10447),d=e(80383),v=e(46769),Y=e(27754),F=e(6616).set,M=e(59804),y=e(28617),L=e(61144),R=e(56614),m=e(61900),x=e(70172),p=e(39599),G=e(38688),W=e(3157),P=e(95053),H=e(70091),S=G("species"),U="Promise",N=x.get,T=x.set,V=x.getterFor(U),j=a&&a.prototype,k=a,J=j,z=E.TypeError,K=E.document,O=E.process,Z=R.f,X=Z,q=!!(K&&K.createEvent&&E.dispatchEvent),_=I(E.PromiseRejectionEvent),$="unhandledrejection",AA=!1,tA=p(U,(function(){var A=b(k),t=A!==String(k);if(!t&&66===H)return!0;if(o&&!J.finally)return!0;if(H>=51&&/native code/.test(A))return!1;var e=new k((function(A){A(1)})),s=function(A){A((function(){}),(function(){}))};return(e.constructor={})[S]=s,!(AA=e.then((function(){}))instanceof s)||!t&&W&&!_})),eA=tA||!v((function(A){k.all(A).catch((function(){}))})),sA=function(A){var t;return!(!f(A)||!I(t=A.then))&&t},iA=function(A,t){if(!A.notified){A.notified=!0;var e=A.reactions;M((function(){for(var s=A.value,i=1==A.state,n=0;e.length>n;){var r,B,o,E=e[n++],w=i?E.ok:E.fail,a=E.resolve,c=E.reject,Q=E.domain;try{w?(i||(2===A.rejection&&oA(A),A.rejection=1),!0===w?r=s:(Q&&Q.enter(),r=w(s),Q&&(Q.exit(),o=!0)),r===E.promise?c(z("Promise-chain cycle")):(B=sA(r))?g(B,r,a,c):a(r)):c(s)}catch(A){Q&&!o&&Q.exit(),c(A)}}A.reactions=[],A.notified=!1,t&&!A.rejection&&rA(A)}))}},nA=function(A,t,e){var s,i;q?((s=K.createEvent("Event")).promise=t,s.reason=e,s.initEvent(A,!1,!0),E.dispatchEvent(s)):s={promise:t,reason:e},!_&&(i=E["on"+A])?i(s):A===$&&L("Unhandled promise rejection",e)},rA=function(A){g(F,E,(function(){var t,e=A.facade,s=A.value;if(BA(A)&&(t=m((function(){P?O.emit("unhandledRejection",s,e):nA($,e,s)})),A.rejection=P||BA(A)?2:1,t.error))throw t.value}))},BA=function(A){return 1!==A.rejection&&!A.parent},oA=function(A){g(F,E,(function(){var t=A.facade;P?O.emit("rejectionHandled",t):nA("rejectionhandled",t,A.value)}))},EA=function(A,t,e){return function(s){A(t,s,e)}},wA=function(A,t,e){A.done||(A.done=!0,e&&(A=e),A.value=t,A.state=2,iA(A,!0))},gA=function(A,t,e){if(!A.done){A.done=!0,e&&(A=e);try{if(A.facade===t)throw z("Promise can't be resolved itself");var s=sA(t);s?M((function(){var e={done:!1};try{g(s,t,EA(gA,e,A),EA(wA,e,A))}catch(t){wA(e,t,A)}})):(A.value=t,A.state=1,iA(A,!1))}catch(t){wA({done:!1},t,A)}}};if(tA&&(J=(k=function(A){D(this,J),l(A),g(s,this);var t=N(this);try{A(EA(gA,t),EA(wA,t))}catch(A){wA(t,A)}}).prototype,(s=function(A){T(this,{type:U,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=Q(J,{then:function(A,t){var e=V(this),s=e.reactions,i=Z(Y(this,k));return i.ok=!I(A)||A,i.fail=I(t)&&t,i.domain=P?O.domain:void 0,e.parent=!0,s[s.length]=i,0!=e.state&&iA(e,!1),i.promise},catch:function(A){return this.then(void 0,A)}}),i=function(){var A=new s,t=N(A);this.promise=A,this.resolve=EA(gA,t),this.reject=EA(wA,t)},R.f=Z=function(A){return A===k||A===n?new i(A):X(A)},!o&&I(a)&&j!==Object.prototype)){r=j.then,AA||(c(j,"then",(function(A,t){var e=this;return new k((function(A,t){g(r,e,A,t)})).then(A,t)}),{unsafe:!0}),c(j,"catch",J.catch,{unsafe:!0}));try{delete j.constructor}catch(A){}C&&C(j,J)}B({global:!0,wrap:!0,forced:tA},{Promise:k}),h(k,U,!1,!0),u(U),n=w(U),B({target:U,stat:!0,forced:tA},{reject:function(A){var t=Z(this);return g(t.reject,void 0,A),t.promise}}),B({target:U,stat:!0,forced:o||tA},{resolve:function(A){return y(o&&this===n?k:this,A)}}),B({target:U,stat:!0,forced:eA},{all:function(A){var t=this,e=Z(t),s=e.resolve,i=e.reject,n=m((function(){var e=l(t.resolve),n=[],r=0,B=1;d(A,(function(A){var o=r++,E=!1;B++,g(e,t,A).then((function(A){E||(E=!0,n[o]=A,--B||s(n))}),i)})),--B||s(n)}));return n.error&&i(n.value),e.promise},race:function(A){var t=this,e=Z(t),s=e.reject,i=m((function(){var i=l(t.resolve);d(A,(function(A){g(i,t,A).then(e.resolve,s)}))}));return i.error&&s(i.value),e.promise}})},73228:function(A,t,e){var s=e(56475),i=e(38486),n=e(58448),r=e(5481),B=e(69075),o=e(34984),E=e(24517),w=e(10819),g=e(47044),a=i("Reflect","construct"),c=Object.prototype,Q=[].push,C=g((function(){function A(){}return!(a((function(){}),[],A)instanceof A)})),h=!g((function(){a((function(){}))})),u=C||h;s({target:"Reflect",stat:!0,forced:u,sham:u},{construct:function(A,t){B(A),o(t);var e=arguments.length<3?A:B(arguments[2]);if(h&&!C)return a(A,t,e);if(A==e){switch(t.length){case 0:return new A;case 1:return new A(t[0]);case 2:return new A(t[0],t[1]);case 3:return new A(t[0],t[1],t[2]);case 4:return new A(t[0],t[1],t[2],t[3])}var s=[null];return n(Q,s,t),new(n(r,A,s))}var i=e.prototype,g=w(E(i)?i:c),u=n(A,g,t);return E(u)?u:g}})},61726:function(A,t,e){"use strict";var s=e(56475),i=e(49820);s({target:"RegExp",proto:!0,forced:/./.exec!==i},{exec:i})},74516:function(A,t,e){var s=e(15567),i=e(95892),n=e(21182),r=e(47044),B=RegExp.prototype;s&&r((function(){return"sy"!==Object.getOwnPropertyDescriptor(B,"flags").get.call({dotAll:!0,sticky:!0})}))&&i.f(B,"flags",{configurable:!0,get:n})},57114:function(A,t,e){"use strict";var s=e(38347),i=e(7081).PROPER,n=e(13711),r=e(34984),B=e(70176),o=e(25096),E=e(47044),w=e(21182),g="toString",a=RegExp.prototype,c=a[g],Q=s(w),C=E((function(){return"/a/b"!=c.call({source:"a",flags:"b"})})),h=i&&c.name!=g;(C||h)&&n(RegExp.prototype,g,(function(){var A=r(this),t=o(A.source),e=A.flags;return"/"+t+"/"+o(void 0===e&&B(a,A)&&!("flags"in a)?Q(A):e)}),{unsafe:!0})},76014:function(A,t,e){"use strict";e(36673)("Set",(function(A){return function(){return A(this,arguments.length?arguments[0]:void 0)}}),e(9649))},26663:function(A,t,e){"use strict";var s=e(56475),i=e(69510).codeAt;s({target:"String",proto:!0},{codePointAt:function(A){return i(this,A)}})},65578:function(A,t,e){var s=e(56475),i=e(32010),n=e(38347),r=e(74841),B=i.RangeError,o=String.fromCharCode,E=String.fromCodePoint,w=n([].join);s({target:"String",stat:!0,forced:!!E&&1!=E.length},{fromCodePoint:function(A){for(var t,e=[],s=arguments.length,i=0;s>i;){if(t=+arguments[i++],r(t,1114111)!==t)throw B(t+" is not a valid code point");e[i]=t<65536?o(t):o(55296+((t-=65536)>>10),t%1024+56320)}return w(e,"")}})},47458:function(A,t,e){"use strict";var s=e(56475),i=e(38347),n=e(93666),r=e(83943),B=e(25096),o=e(91151),E=i("".indexOf);s({target:"String",proto:!0,forced:!o("includes")},{includes:function(A){return!!~E(B(r(this)),B(n(A)),arguments.length>1?arguments[1]:void 0)}})},62046:function(A,t,e){"use strict";var s=e(56475),i=e(91159);s({target:"String",proto:!0,forced:e(7452)("italics")},{italics:function(){return i(this,"i","","")}})},58281:function(A,t,e){"use strict";var s=e(69510).charAt,i=e(25096),n=e(70172),r=e(97001),B="String Iterator",o=n.set,E=n.getterFor(B);r(String,"String",(function(A){o(this,{type:B,string:i(A),index:0})}),(function(){var A,t=E(this),e=t.string,i=t.index;return i>=e.length?{value:void 0,done:!0}:(A=s(e,i),t.index+=A.length,{value:A,done:!1})}))},47259:function(A,t,e){"use strict";var s=e(56475),i=e(91159);s({target:"String",proto:!0,forced:e(7452)("link")},{link:function(A){return i(this,"a","href",A)}})},71768:function(A,t,e){"use strict";var s=e(56475),i=e(32010),n=e(2834),r=e(38347),B=e(13945),o=e(83943),E=e(23417),w=e(25096),g=e(34984),a=e(93975),c=e(70176),Q=e(28831),C=e(21182),h=e(51839),u=e(13711),l=e(47044),I=e(38688),f=e(27754),D=e(36352),b=e(66723),d=e(70172),v=e(63432),Y=I("matchAll"),F="RegExp String",M=F+" Iterator",y=d.set,L=d.getterFor(M),R=RegExp.prototype,m=i.TypeError,x=r(C),p=r("".indexOf),G=r("".matchAll),W=!!G&&!l((function(){G("a",/./)})),P=B((function(A,t,e,s){y(this,{type:M,regexp:A,string:t,global:e,unicode:s,done:!1})}),F,(function(){var A=L(this);if(A.done)return{value:void 0,done:!0};var t=A.regexp,e=A.string,s=b(t,e);return null===s?{value:void 0,done:A.done=!0}:A.global?(""===w(s[0])&&(t.lastIndex=D(e,E(t.lastIndex),A.unicode)),{value:s,done:!1}):(A.done=!0,{value:s,done:!1})})),H=function(A){var t,e,s,i,n,r,B=g(this),o=w(A);return t=f(B,RegExp),void 0===(e=B.flags)&&c(R,B)&&!("flags"in R)&&(e=x(B)),s=void 0===e?"":w(e),i=new t(t===RegExp?B.source:B,s),n=!!~p(s,"g"),r=!!~p(s,"u"),i.lastIndex=E(B.lastIndex),new P(i,o,n,r)};s({target:"String",proto:!0,forced:W},{matchAll:function(A){var t,e,s,i,r=o(this);if(null!=A){if(Q(A)&&(t=w(o("flags"in R?A.flags:x(A))),!~p(t,"g")))throw m("`.matchAll` does not allow non-global regexes");if(W)return G(r,A);if(void 0===(s=h(A,Y))&&v&&"RegExp"==a(A)&&(s=H),s)return n(s,A,r)}else if(W)return G(r,A);return e=w(r),i=new RegExp(A,"g"),v?n(H,i,e):i[Y](e)}}),v||Y in R||u(R,Y,H)},6422:function(A,t,e){"use strict";var s=e(2834),i=e(11813),n=e(34984),r=e(23417),B=e(25096),o=e(83943),E=e(51839),w=e(36352),g=e(66723);i("match",(function(A,t,e){return[function(t){var e=o(this),i=null==t?void 0:E(t,A);return i?s(i,t,e):new RegExp(t)[A](B(e))},function(A){var s=n(this),i=B(A),o=e(t,s,i);if(o.done)return o.value;if(!s.global)return g(s,i);var E=s.unicode;s.lastIndex=0;for(var a,c=[],Q=0;null!==(a=g(s,i));){var C=B(a[0]);c[Q]=C,""===C&&(s.lastIndex=w(i,r(s.lastIndex),E)),Q++}return 0===Q?null:c}]}))},28264:function(A,t,e){e(56475)({target:"String",proto:!0},{repeat:e(34858)})},46467:function(A,t,e){"use strict";var s=e(58448),i=e(2834),n=e(38347),r=e(11813),B=e(47044),o=e(34984),E=e(94578),w=e(26882),g=e(23417),a=e(25096),c=e(83943),Q=e(36352),C=e(51839),h=e(29519),u=e(66723),l=e(38688)("replace"),I=Math.max,f=Math.min,D=n([].concat),b=n([].push),d=n("".indexOf),v=n("".slice),Y="$0"==="a".replace(/./,"$0"),F=!!/./[l]&&""===/./[l]("a","$0");r("replace",(function(A,t,e){var n=F?"$":"$0";return[function(A,e){var s=c(this),n=null==A?void 0:C(A,l);return n?i(n,A,s,e):i(t,a(s),A,e)},function(A,i){var r=o(this),B=a(A);if("string"==typeof i&&-1===d(i,n)&&-1===d(i,"$<")){var c=e(t,r,B,i);if(c.done)return c.value}var C=E(i);C||(i=a(i));var l=r.global;if(l){var Y=r.unicode;r.lastIndex=0}for(var F=[];;){var M=u(r,B);if(null===M)break;if(b(F,M),!l)break;""===a(M[0])&&(r.lastIndex=Q(B,g(r.lastIndex),Y))}for(var y,L="",R=0,m=0;m=R&&(L+=v(B,R,p)+S,R=p+x.length)}return L+v(B,R)}]}),!!B((function(){var A=/./;return A.exec=function(){var A=[];return A.groups={a:"7"},A},"7"!=="".replace(A,"$")}))||!Y||F)},7851:function(A,t,e){"use strict";var s=e(58448),i=e(2834),n=e(38347),r=e(11813),B=e(28831),o=e(34984),E=e(83943),w=e(27754),g=e(36352),a=e(23417),c=e(25096),Q=e(51839),C=e(73163),h=e(66723),u=e(49820),l=e(74846),I=e(47044),f=l.UNSUPPORTED_Y,D=4294967295,b=Math.min,d=[].push,v=n(/./.exec),Y=n(d),F=n("".slice),M=!I((function(){var A=/(?:)/,t=A.exec;A.exec=function(){return t.apply(this,arguments)};var e="ab".split(A);return 2!==e.length||"a"!==e[0]||"b"!==e[1]}));r("split",(function(A,t,e){var n;return n="c"=="abbc".split(/(b)*/)[1]||4!="test".split(/(?:)/,-1).length||2!="ab".split(/(?:ab)*/).length||4!=".".split(/(.?)(.?)/).length||".".split(/()()/).length>1||"".split(/.?/).length?function(A,e){var n=c(E(this)),r=void 0===e?D:e>>>0;if(0===r)return[];if(void 0===A)return[n];if(!B(A))return i(t,n,A,r);for(var o,w,g,a=[],Q=(A.ignoreCase?"i":"")+(A.multiline?"m":"")+(A.unicode?"u":"")+(A.sticky?"y":""),h=0,l=new RegExp(A.source,Q+"g");(o=i(u,l,n))&&!((w=l.lastIndex)>h&&(Y(a,F(n,h,o.index)),o.length>1&&o.index=r));)l.lastIndex===o.index&&l.lastIndex++;return h===n.length?!g&&v(l,"")||Y(a,""):Y(a,F(n,h)),a.length>r?C(a,0,r):a}:"0".split(void 0,0).length?function(A,e){return void 0===A&&0===e?[]:i(t,this,A,e)}:t,[function(t,e){var s=E(this),r=null==t?void 0:Q(t,A);return r?i(r,t,s,e):i(n,c(s),t,e)},function(A,s){var i=o(this),r=c(A),B=e(n,i,r,s,n!==t);if(B.done)return B.value;var E=w(i,RegExp),Q=i.unicode,C=(i.ignoreCase?"i":"")+(i.multiline?"m":"")+(i.unicode?"u":"")+(f?"g":"y"),u=new E(f?"^(?:"+i.source+")":i,C),l=void 0===s?D:s>>>0;if(0===l)return[];if(0===r.length)return null===h(u,r)?[r]:[];for(var I=0,d=0,v=[];d2?arguments[2]:void 0)}))},29883:function(A,t,e){"use strict";var s=e(36597),i=e(91102).every,n=s.aTypedArray;(0,s.exportTypedArrayMethod)("every",(function(A){return i(n(this),A,arguments.length>1?arguments[1]:void 0)}))},35471:function(A,t,e){"use strict";var s=e(36597),i=e(2834),n=e(72864),r=s.aTypedArray;(0,s.exportTypedArrayMethod)("fill",(function(A){var t=arguments.length;return i(n,r(this),A,t>1?arguments[1]:void 0,t>2?arguments[2]:void 0)}))},21012:function(A,t,e){"use strict";var s=e(36597),i=e(91102).filter,n=e(59610),r=s.aTypedArray;(0,s.exportTypedArrayMethod)("filter",(function(A){var t=i(r(this),A,arguments.length>1?arguments[1]:void 0);return n(this,t)}))},97464:function(A,t,e){"use strict";var s=e(36597),i=e(91102).findIndex,n=s.aTypedArray;(0,s.exportTypedArrayMethod)("findIndex",(function(A){return i(n(this),A,arguments.length>1?arguments[1]:void 0)}))},88997:function(A,t,e){"use strict";var s=e(36597),i=e(91102).find,n=s.aTypedArray;(0,s.exportTypedArrayMethod)("find",(function(A){return i(n(this),A,arguments.length>1?arguments[1]:void 0)}))},3131:function(A,t,e){e(98828)("Float32",(function(A){return function(t,e,s){return A(this,t,e,s)}}))},90868:function(A,t,e){e(98828)("Float64",(function(A){return function(t,e,s){return A(this,t,e,s)}}))},2857:function(A,t,e){"use strict";var s=e(36597),i=e(91102).forEach,n=s.aTypedArray;(0,s.exportTypedArrayMethod)("forEach",(function(A){i(n(this),A,arguments.length>1?arguments[1]:void 0)}))},83326:function(A,t,e){"use strict";var s=e(28834);(0,e(36597).exportTypedArrayStaticMethod)("from",e(83590),s)},94715:function(A,t,e){"use strict";var s=e(36597),i=e(12636).includes,n=s.aTypedArray;(0,s.exportTypedArrayMethod)("includes",(function(A){return i(n(this),A,arguments.length>1?arguments[1]:void 0)}))},13624:function(A,t,e){"use strict";var s=e(36597),i=e(12636).indexOf,n=s.aTypedArray;(0,s.exportTypedArrayMethod)("indexOf",(function(A){return i(n(this),A,arguments.length>1?arguments[1]:void 0)}))},75626:function(A,t,e){e(98828)("Int16",(function(A){return function(t,e,s){return A(this,t,e,s)}}))},95756:function(A,t,e){e(98828)("Int32",(function(A){return function(t,e,s){return A(this,t,e,s)}}))},65553:function(A,t,e){e(98828)("Int8",(function(A){return function(t,e,s){return A(this,t,e,s)}}))},91132:function(A,t,e){"use strict";var s=e(32010),i=e(38347),n=e(7081).PROPER,r=e(36597),B=e(81755),o=e(38688)("iterator"),E=s.Uint8Array,w=i(B.values),g=i(B.keys),a=i(B.entries),c=r.aTypedArray,Q=r.exportTypedArrayMethod,C=E&&E.prototype[o],h=!!C&&"values"===C.name,u=function(){return w(c(this))};Q("entries",(function(){return a(c(this))})),Q("keys",(function(){return g(c(this))})),Q("values",u,n&&!h),Q(o,u,n&&!h)},62514:function(A,t,e){"use strict";var s=e(36597),i=e(38347),n=s.aTypedArray,r=s.exportTypedArrayMethod,B=i([].join);r("join",(function(A){return B(n(this),A)}))},24597:function(A,t,e){"use strict";var s=e(36597),i=e(58448),n=e(84320),r=s.aTypedArray;(0,s.exportTypedArrayMethod)("lastIndexOf",(function(A){var t=arguments.length;return i(n,r(this),t>1?[A,arguments[1]]:[A])}))},88042:function(A,t,e){"use strict";var s=e(36597),i=e(91102).map,n=e(34815),r=s.aTypedArray;(0,s.exportTypedArrayMethod)("map",(function(A){return i(r(this),A,arguments.length>1?arguments[1]:void 0,(function(A,t){return new(n(A))(t)}))}))},92451:function(A,t,e){"use strict";var s=e(36597),i=e(32843).right,n=s.aTypedArray;(0,s.exportTypedArrayMethod)("reduceRight",(function(A){var t=arguments.length;return i(n(this),A,t,t>1?arguments[1]:void 0)}))},4660:function(A,t,e){"use strict";var s=e(36597),i=e(32843).left,n=s.aTypedArray;(0,s.exportTypedArrayMethod)("reduce",(function(A){var t=arguments.length;return i(n(this),A,t,t>1?arguments[1]:void 0)}))},44206:function(A,t,e){"use strict";var s=e(36597),i=s.aTypedArray,n=s.exportTypedArrayMethod,r=Math.floor;n("reverse",(function(){for(var A,t=this,e=i(t).length,s=r(e/2),n=0;n1?arguments[1]:void 0,1),e=this.length,s=B(A),i=n(s),o=0;if(i+t>e)throw E("Wrong length");for(;on;)E[n]=e[n++];return E}),n((function(){new Int8Array(1).slice()})))},3858:function(A,t,e){"use strict";var s=e(36597),i=e(91102).some,n=s.aTypedArray;(0,s.exportTypedArrayMethod)("some",(function(A){return i(n(this),A,arguments.length>1?arguments[1]:void 0)}))},84538:function(A,t,e){"use strict";var s=e(32010),i=e(38347),n=e(47044),r=e(32631),B=e(43977),o=e(36597),E=e(3809),w=e(21983),g=e(70091),a=e(41731),c=s.Array,Q=o.aTypedArray,C=o.exportTypedArrayMethod,h=s.Uint16Array,u=h&&i(h.prototype.sort),l=!(!u||n((function(){u(new h(2),null)}))&&n((function(){u(new h(2),{})}))),I=!!u&&!n((function(){if(g)return g<74;if(E)return E<67;if(w)return!0;if(a)return a<602;var A,t,e=new h(516),s=c(516);for(A=0;A<516;A++)t=A%4,e[A]=515-A,s[A]=A-2*t+3;for(u(e,(function(A,t){return(A/4|0)-(t/4|0)})),A=0;A<516;A++)if(e[A]!==s[A])return!0}));C("sort",(function(A){return void 0!==A&&r(A),I?u(this,A):B(Q(this),function(A){return function(t,e){return void 0!==A?+A(t,e)||0:e!=e?-1:t!=t?1:0===t&&0===e?1/t>0&&1/e<0?1:-1:t>e}}(A))}),!I||l)},64793:function(A,t,e){"use strict";var s=e(36597),i=e(23417),n=e(74841),r=e(34815),B=s.aTypedArray;(0,s.exportTypedArrayMethod)("subarray",(function(A,t){var e=B(this),s=e.length,o=n(A,s);return new(r(e))(e.buffer,e.byteOffset+o*e.BYTES_PER_ELEMENT,i((void 0===t?s:n(t,s))-o))}))},74202:function(A,t,e){"use strict";var s=e(32010),i=e(58448),n=e(36597),r=e(47044),B=e(73163),o=s.Int8Array,E=n.aTypedArray,w=n.exportTypedArrayMethod,g=[].toLocaleString,a=!!o&&r((function(){g.call(new o(1))}));w("toLocaleString",(function(){return i(g,a?B(E(this)):E(this),B(arguments))}),r((function(){return[1,2].toLocaleString()!=new o([1,2]).toLocaleString()}))||!r((function(){o.prototype.toLocaleString.call([1,2])})))},52529:function(A,t,e){"use strict";var s=e(36597).exportTypedArrayMethod,i=e(47044),n=e(32010),r=e(38347),B=n.Uint8Array,o=B&&B.prototype||{},E=[].toString,w=r([].join);i((function(){E.call({})}))&&(E=function(){return w(this)});var g=o.toString!=E;s("toString",E,g)},47969:function(A,t,e){e(98828)("Uint16",(function(A){return function(t,e,s){return A(this,t,e,s)}}))},59735:function(A,t,e){e(98828)("Uint32",(function(A){return function(t,e,s){return A(this,t,e,s)}}))},56912:function(A,t,e){e(98828)("Uint8",(function(A){return function(t,e,s){return A(this,t,e,s)}}))},58099:function(A,t,e){e(98828)("Uint8",(function(A){return function(t,e,s){return A(this,t,e,s)}}),!0)},84151:function(A,t,e){e(94910)},49109:function(A,t,e){e(64384)},98443:function(A,t,e){e(77074)},67858:function(A,t,e){e(44455)},49261:function(A,t,e){"use strict";var s=e(56475),i=e(56614),n=e(61900);s({target:"Promise",stat:!0},{try:function(A){var t=i.f(this),e=n(A);return(e.error?t.reject:t.resolve)(e.value),t.promise}})},1083:function(A,t,e){e(71768)},42437:function(A,t,e){var s=e(32010),i=e(23327),n=e(67797),r=e(82938),B=e(48914),o=function(A){if(A&&A.forEach!==r)try{B(A,"forEach",r)}catch(t){A.forEach=r}};for(var E in i)i[E]&&o(s[E]&&s[E].prototype);o(n)},94712:function(A,t,e){var s=e(32010),i=e(23327),n=e(67797),r=e(81755),B=e(48914),o=e(38688),E=o("iterator"),w=o("toStringTag"),g=r.values,a=function(A,t){if(A){if(A[E]!==g)try{B(A,E,g)}catch(t){A[E]=g}if(A[w]||B(A,w,t),i[t])for(var e in r)if(A[e]!==r[e])try{B(A,e,r[e])}catch(t){A[e]=r[e]}}};for(var c in i)a(s[c]&&s[c].prototype,c);a(n,"DOMTokenList")},41863:function(A,t,e){"use strict";var s=e(56475),i=e(2834);s({target:"URL",proto:!0,enumerable:!0},{toJSON:function(){return i(URL.prototype.toString,this)}})},90780:function(A,t,e){var s=e(42075);e(94712),A.exports=s},45728:function(A,t,e){var s=e(35643),i=e(67906),n=e(98527),r=e(71689),B=e(64607),o=e(71230),E=Date.prototype.getTime;function w(A){return null==A}function g(A){return!(!A||"object"!=typeof A||"number"!=typeof A.length||"function"!=typeof A.copy||"function"!=typeof A.slice||A.length>0&&"number"!=typeof A[0])}A.exports=function A(t,e,a){var c=a||{};return!!(c.strict?n(t,e):t===e)||(!t||!e||"object"!=typeof t&&"object"!=typeof e?c.strict?n(t,e):t==e:function(t,e,n){var a,c;if(typeof t!=typeof e)return!1;if(w(t)||w(e))return!1;if(t.prototype!==e.prototype)return!1;if(i(t)!==i(e))return!1;var Q=r(t),C=r(e);if(Q!==C)return!1;if(Q||C)return t.source===e.source&&B(t)===B(e);if(o(t)&&o(e))return E.call(t)===E.call(e);var h=g(t),u=g(e);if(h!==u)return!1;if(h||u){if(t.length!==e.length)return!1;for(a=0;a=0;a--)if(l[a]!=I[a])return!1;for(a=l.length-1;a>=0;a--)if(!A(t[c=l[a]],e[c],n))return!1;return!0}(t,e,c))}},89295:function(A,t,e){"use strict";var s=e(56649),i=e(57770),n=e(96785),r=e(68109);A.exports=function(A,t,e){if(!A||"object"!=typeof A&&"function"!=typeof A)throw new n("`obj` must be an object or a function`");if("string"!=typeof t&&"symbol"!=typeof t)throw new n("`property` must be a string or a symbol`");if(arguments.length>3&&"boolean"!=typeof arguments[3]&&null!==arguments[3])throw new n("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&"boolean"!=typeof arguments[4]&&null!==arguments[4])throw new n("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&"boolean"!=typeof arguments[5]&&null!==arguments[5])throw new n("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&"boolean"!=typeof arguments[6])throw new n("`loose`, if provided, must be a boolean");var B=arguments.length>3?arguments[3]:null,o=arguments.length>4?arguments[4]:null,E=arguments.length>5?arguments[5]:null,w=arguments.length>6&&arguments[6],g=!!r&&r(A,t);if(s)s(A,t,{configurable:null===E&&g?g.configurable:!E,enumerable:null===B&&g?g.enumerable:!B,value:e,writable:null===o&&g?g.writable:!o});else{if(!w&&(B||o||E))throw new i("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.");A[t]=e}}},77802:function(A,t,e){"use strict";var s=e(35643),i="function"==typeof Symbol&&"symbol"==typeof Symbol("foo"),n=Object.prototype.toString,r=Array.prototype.concat,B=e(89295),o=e(18890)(),E=function(A,t,e,s){if(t in A)if(!0===s){if(A[t]===e)return}else if("function"!=typeof(i=s)||"[object Function]"!==n.call(i)||!s())return;var i;o?B(A,t,e,!0):B(A,t,e)},w=function(A,t){var e=arguments.length>2?arguments[2]:{},n=s(t);i&&(n=r.call(n,Object.getOwnPropertySymbols(t)));for(var B=0;B0&&r.length>i&&!r.warned){r.warned=!0;var w=new Error("Possible EventEmitter memory leak detected. "+r.length+" "+String(t)+" listeners added. Use emitter.setMaxListeners() to increase limit");w.name="MaxListenersExceededWarning",w.emitter=A,w.type=t,w.count=r.length,E=w,console&&console.warn&&console.warn(E)}return A}function w(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function g(A,t,e){var s={fired:!1,wrapFn:void 0,target:A,type:t,listener:e},i=w.bind(s);return i.listener=e,s.wrapFn=i,i}function a(A,t,e){var s=A._events;if(void 0===s)return[];var i=s[t];return void 0===i?[]:"function"==typeof i?e?[i.listener||i]:[i]:e?function(A){for(var t=new Array(A.length),e=0;e0&&(r=t[0]),r instanceof Error)throw r;var B=new Error("Unhandled error."+(r?" ("+r.message+")":""));throw B.context=r,B}var o=n[A];if(void 0===o)return!1;if("function"==typeof o)s(o,this,t);else{var E=o.length,w=Q(o,E);for(e=0;e=0;n--)if(e[n]===t||e[n].listener===t){r=e[n].listener,i=n;break}if(i<0)return this;0===i?e.shift():function(A,t){for(;t+1=0;s--)this.removeListener(A,t[s]);return this},n.prototype.listeners=function(A){return a(this,A,!0)},n.prototype.rawListeners=function(A){return a(this,A,!1)},n.listenerCount=function(A,t){return"function"==typeof A.listenerCount?A.listenerCount(t):c.call(A,t)},n.prototype.listenerCount=c,n.prototype.eventNames=function(){return this._eventsCount>0?t(this._events):[]}},72022:function(A,t,e){"use strict";A.exports=function(){if("object"==typeof globalThis)return globalThis;var A;try{A=this||new Function("return this")()}catch(A){if("object"==typeof window)return window;if("object"==typeof self)return self;if(void 0!==e.g)return e.g}return A}()},68404:function(A,t,e){"use strict";var s=e(3746),i=Object.prototype.toString,n=Object.prototype.hasOwnProperty;A.exports=function(A,t,e){if(!s(t))throw new TypeError("iterator must be a function");var r;arguments.length>=3&&(r=e),"[object Array]"===i.call(A)?function(A,t,e){for(var s=0,i=A.length;s1&&"boolean"!=typeof t)throw new E('"allowMissing" argument must be a boolean');if(null===m(/^%?[^%]*%?$/,A))throw new o("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var e=function(A){var t=R(A,0,1),e=R(A,-1);if("%"===t&&"%"!==e)throw new o("invalid intrinsic syntax, expected closing `%`");if("%"===e&&"%"!==t)throw new o("invalid intrinsic syntax, expected opening `%`");var s=[];return L(A,x,(function(A,t,e,i){s[s.length]=e?L(i,p,"$1"):t||A})),s}(A),s=e.length>0?e[0]:"",i=G("%"+s+"%",t),n=i.name,r=i.value,B=!1,w=i.alias;w&&(s=w[0],y(e,M([0,1],w)));for(var g=1,a=!0;g=e.length){var u=c(r,Q);r=(a=!!u)&&"get"in u&&!("originalValue"in u.get)?u.get:r[Q]}else a=F(r,Q),r=r[Q];a&&!B&&(D[n]=r)}}return r}},68109:function(A,t,e){"use strict";var s=e(28651)("%Object.getOwnPropertyDescriptor%",!0);if(s)try{s([],"length")}catch(A){s=null}A.exports=s},18890:function(A,t,e){"use strict";var s=e(56649),i=function(){return!!s};i.hasArrayLengthDefineBug=function(){if(!s)return null;try{return 1!==s([],"length",{value:1}).length}catch(A){return!0}},A.exports=i},85726:function(A){"use strict";var t={__proto__:null,foo:{}},e=Object;A.exports=function(){return{__proto__:t}.foo===t.foo&&!(t instanceof e)}},73257:function(A,t,e){"use strict";var s="undefined"!=typeof Symbol&&Symbol,i=e(12843);A.exports=function(){return"function"==typeof s&&"function"==typeof Symbol&&"symbol"==typeof s("foo")&&"symbol"==typeof Symbol("bar")&&i()}},12843:function(A){"use strict";A.exports=function(){if("function"!=typeof Symbol||"function"!=typeof Object.getOwnPropertySymbols)return!1;if("symbol"==typeof Symbol.iterator)return!0;var A={},t=Symbol("test"),e=Object(t);if("string"==typeof t)return!1;if("[object Symbol]"!==Object.prototype.toString.call(t))return!1;if("[object Symbol]"!==Object.prototype.toString.call(e))return!1;for(t in A[t]=42,A)return!1;if("function"==typeof Object.keys&&0!==Object.keys(A).length)return!1;if("function"==typeof Object.getOwnPropertyNames&&0!==Object.getOwnPropertyNames(A).length)return!1;var s=Object.getOwnPropertySymbols(A);if(1!==s.length||s[0]!==t)return!1;if(!Object.prototype.propertyIsEnumerable.call(A,t))return!1;if("function"==typeof Object.getOwnPropertyDescriptor){var i=Object.getOwnPropertyDescriptor(A,t);if(42!==i.value||!0!==i.enumerable)return!1}return!0}},26626:function(A,t,e){"use strict";var s=e(12843);A.exports=function(){return s()&&!!Symbol.toStringTag}},55215:function(A,t,e){"use strict";var s=Function.prototype.call,i=Object.prototype.hasOwnProperty,n=e(5049);A.exports=n.call(s,i)},35143:function(A,t,e){"use strict";var s=e(16696).Buffer;t._dbcs=w;for(var i=-1,n=-2,r=-10,B=-1e3,o=new Array(256),E=0;E<256;E++)o[E]=i;function w(A,t){if(this.encodingName=A.encodingName,!A)throw new Error("DBCS codec is called without the data.");if(!A.table)throw new Error("Encoding '"+this.encodingName+"' has no data.");var e=A.table();this.decodeTables=[],this.decodeTables[0]=o.slice(0),this.decodeTableSeq=[];for(var s=0;sB)throw new Error("gb18030 decode tables conflict at byte 2");for(var c=this.decodeTables[B-g[a]],Q=129;Q<=254;Q++){if(c[Q]===i)c[Q]=B-E;else{if(c[Q]===B-E)continue;if(c[Q]>B)throw new Error("gb18030 decode tables conflict at byte 3")}for(var C=this.decodeTables[B-c[Q]],h=48;h<=57;h++)C[h]===i&&(C[h]=n)}}}this.defaultCharUnicode=t.defaultCharUnicode,this.encodeTable=[],this.encodeTableSeq=[];var u={};if(A.encodeSkipVals)for(s=0;st)return-1;for(var e=0,s=A.length;e>1);A[i]<=t?e=i:s=i}return e}w.prototype.encoder=g,w.prototype.decoder=a,w.prototype._getDecodeTrieNode=function(A){for(var t=[];A>0;A>>>=8)t.push(255&A);0==t.length&&t.push(0);for(var e=this.decodeTables[0],s=t.length-1;s>0;s--){var n=e[t[s]];if(n==i)e[t[s]]=B-this.decodeTables.length,this.decodeTables.push(e=o.slice(0));else{if(!(n<=B))throw new Error("Overwrite byte in "+this.encodingName+", addr: "+A.toString(16));e=this.decodeTables[B-n]}}return e},w.prototype._addDecodeChunk=function(A){var t=parseInt(A[0],16),e=this._getDecodeTrieNode(t);t&=255;for(var s=1;s255)throw new Error("Incorrect chunk in "+this.encodingName+" at addr "+A[0]+": too long"+t)},w.prototype._getEncodeBucket=function(A){var t=A>>8;return void 0===this.encodeTable[t]&&(this.encodeTable[t]=o.slice(0)),this.encodeTable[t]},w.prototype._setEncodeChar=function(A,t){var e=this._getEncodeBucket(A),s=255&A;e[s]<=r?this.encodeTableSeq[r-e[s]][-1]=t:e[s]==i&&(e[s]=t)},w.prototype._setEncodeSequence=function(A,t){var e,s=A[0],n=this._getEncodeBucket(s),B=255&s;n[B]<=r?e=this.encodeTableSeq[r-n[B]]:(e={},n[B]!==i&&(e[-1]=n[B]),n[B]=r-this.encodeTableSeq.length,this.encodeTableSeq.push(e));for(var o=1;o=0)this._setEncodeChar(E,w),i=!0;else if(E<=B){var g=B-E;if(!n[g]){var a=w<<8>>>0;this._fillEncodeTable(g,a,e)?i=!0:n[g]=!0}}else E<=r&&(this._setEncodeSequence(this.decodeTableSeq[r-E],w),i=!0)}return i},g.prototype.write=function(A){for(var t=s.alloc(A.length*(this.gb18030?4:3)),e=this.leadSurrogate,n=this.seqObj,B=-1,o=0,E=0;;){if(-1===B){if(o==A.length)break;var w=A.charCodeAt(o++)}else w=B,B=-1;if(55296<=w&&w<57344)if(w<56320){if(-1===e){e=w;continue}e=w,w=i}else-1!==e?(w=65536+1024*(e-55296)+(w-56320),e=-1):w=i;else-1!==e&&(B=w,w=i,e=-1);var g=i;if(void 0!==n&&w!=i){var a=n[w];if("object"==typeof a){n=a;continue}"number"==typeof a?g=a:null==a&&void 0!==(a=n[-1])&&(g=a,B=w),n=void 0}else if(w>=0){var Q=this.encodeTable[w>>8];if(void 0!==Q&&(g=Q[255&w]),g<=r){n=this.encodeTableSeq[r-g];continue}if(g==i&&this.gb18030){var C=c(this.gb18030.uChars,w);if(-1!=C){g=this.gb18030.gbChars[C]+(w-this.gb18030.uChars[C]),t[E++]=129+Math.floor(g/12600),g%=12600,t[E++]=48+Math.floor(g/1260),g%=1260,t[E++]=129+Math.floor(g/10),g%=10,t[E++]=48+g;continue}}}g===i&&(g=this.defaultCharSingleByte),g<256?t[E++]=g:g<65536?(t[E++]=g>>8,t[E++]=255&g):g<16777216?(t[E++]=g>>16,t[E++]=g>>8&255,t[E++]=255&g):(t[E++]=g>>>24,t[E++]=g>>>16&255,t[E++]=g>>>8&255,t[E++]=255&g)}return this.seqObj=n,this.leadSurrogate=e,t.slice(0,E)},g.prototype.end=function(){if(-1!==this.leadSurrogate||void 0!==this.seqObj){var A=s.alloc(10),t=0;if(this.seqObj){var e=this.seqObj[-1];void 0!==e&&(e<256?A[t++]=e:(A[t++]=e>>8,A[t++]=255&e)),this.seqObj=void 0}return-1!==this.leadSurrogate&&(A[t++]=this.defaultCharSingleByte,this.leadSurrogate=-1),A.slice(0,t)}},g.prototype.findIdx=c,a.prototype.write=function(A){for(var t=s.alloc(2*A.length),e=this.nodeIdx,o=this.prevBytes,E=this.prevBytes.length,w=-this.prevBytes.length,g=0,a=0;g=0?A[g]:o[g+E];if((Q=this.decodeTables[e][C])>=0);else if(Q===i)Q=this.defaultCharUnicode.charCodeAt(0),g=w;else if(Q===n){if(g>=3)var h=12600*(A[g-3]-129)+1260*(A[g-2]-48)+10*(A[g-1]-129)+(C-48);else h=12600*(o[g-3+E]-129)+1260*((g-2>=0?A[g-2]:o[g-2+E])-48)+10*((g-1>=0?A[g-1]:o[g-1+E])-129)+(C-48);var u=c(this.gb18030.gbChars,h);Q=this.gb18030.uChars[u]+h-this.gb18030.gbChars[u]}else{if(Q<=B){e=B-Q;continue}if(!(Q<=r))throw new Error("iconv-lite internal error: invalid decoding table value "+Q+" at "+e+"/"+C);for(var l=this.decodeTableSeq[r-Q],I=0;I>8;Q=l[l.length-1]}if(Q>=65536){var f=55296|(Q-=65536)>>10;t[a++]=255&f,t[a++]=f>>8,Q=56320|1023&Q}t[a++]=255&Q,t[a++]=Q>>8,e=0,w=g+1}return this.nodeIdx=e,this.prevBytes=w>=0?Array.prototype.slice.call(A,w):o.slice(w+E).concat(Array.prototype.slice.call(A)),t.slice(0,a).toString("ucs2")},a.prototype.end=function(){for(var A="";this.prevBytes.length>0;){A+=this.defaultCharUnicode;var t=this.prevBytes.slice(1);this.prevBytes=[],this.nodeIdx=0,t.length>0&&(A+=this.write(t))}return this.prevBytes=[],this.nodeIdx=0,A}},90481:function(A,t,e){"use strict";A.exports={shiftjis:{type:"_dbcs",table:function(){return e(40679)},encodeAdd:{"¥":92,"‾":126},encodeSkipVals:[{from:60736,to:63808}]},csshiftjis:"shiftjis",mskanji:"shiftjis",sjis:"shiftjis",windows31j:"shiftjis",ms31j:"shiftjis",xsjis:"shiftjis",windows932:"shiftjis",ms932:"shiftjis",932:"shiftjis",cp932:"shiftjis",eucjp:{type:"_dbcs",table:function(){return e(56406)},encodeAdd:{"¥":92,"‾":126}},gb2312:"cp936",gb231280:"cp936",gb23121980:"cp936",csgb2312:"cp936",csiso58gb231280:"cp936",euccn:"cp936",windows936:"cp936",ms936:"cp936",936:"cp936",cp936:{type:"_dbcs",table:function(){return e(74488)}},gbk:{type:"_dbcs",table:function(){return e(74488).concat(e(55914))}},xgbk:"gbk",isoir58:"gbk",gb18030:{type:"_dbcs",table:function(){return e(74488).concat(e(55914))},gb18030:function(){return e(99129)},encodeSkipVals:[128],encodeAdd:{"€":41699}},chinese:"gb18030",windows949:"cp949",ms949:"cp949",949:"cp949",cp949:{type:"_dbcs",table:function(){return e(21166)}},cseuckr:"cp949",csksc56011987:"cp949",euckr:"cp949",isoir149:"cp949",korean:"cp949",ksc56011987:"cp949",ksc56011989:"cp949",ksc5601:"cp949",windows950:"cp950",ms950:"cp950",950:"cp950",cp950:{type:"_dbcs",table:function(){return e(72324)}},big5:"big5hkscs",big5hkscs:{type:"_dbcs",table:function(){return e(72324).concat(e(43267))},encodeSkipVals:[36457,36463,36478,36523,36532,36557,36560,36695,36713,36718,36811,36862,36973,36986,37060,37084,37105,37311,37551,37552,37553,37554,37585,37959,38090,38361,38652,39285,39798,39800,39803,39878,39902,39916,39926,40002,40019,40034,40040,40043,40055,40124,40125,40144,40279,40282,40388,40431,40443,40617,40687,40701,40800,40907,41079,41180,41183,36812,37576,38468,38637,41636,41637,41639,41638,41676,41678]},cnbig5:"big5hkscs",csbig5:"big5hkscs",xxbig5:"big5hkscs"}},26326:function(A,t,e){"use strict";for(var s=[e(16793),e(24162),e(17100),e(11326),e(99948),e(99900),e(81492),e(35143),e(90481)],i=0;i>>6),t[e++]=128+(63&n)):(t[e++]=224+(n>>>12),t[e++]=128+(n>>>6&63),t[e++]=128+(63&n))}return t.slice(0,e)},E.prototype.end=function(){},w.prototype.write=function(A){for(var t=this.acc,e=this.contBytes,s=this.accBytes,i="",n=0;n0&&(i+=this.defaultCharUnicode,e=0),r<128?i+=String.fromCharCode(r):r<224?(t=31&r,e=1,s=1):r<240?(t=15&r,e=2,s=1):i+=this.defaultCharUnicode):e>0?(t=t<<6|63&r,s++,0==--e&&(i+=2===s&&t<128&&t>0||3===s&&t<2048?this.defaultCharUnicode:String.fromCharCode(t))):i+=this.defaultCharUnicode}return this.acc=t,this.contBytes=e,this.accBytes=s,i},w.prototype.end=function(){var A=0;return this.contBytes>0&&(A+=this.defaultCharUnicode),A}},99948:function(A,t,e){"use strict";var s=e(16696).Buffer;function i(A,t){if(!A)throw new Error("SBCS codec is called without the data.");if(!A.chars||128!==A.chars.length&&256!==A.chars.length)throw new Error("Encoding '"+A.type+"' has incorrect 'chars' (must be of len 128 or 256)");if(128===A.chars.length){for(var e="",i=0;i<128;i++)e+=String.fromCharCode(i);A.chars=e+A.chars}this.decodeBuf=s.from(A.chars,"ucs2");var n=s.alloc(65536,t.defaultCharSingleByte.charCodeAt(0));for(i=0;i?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~°·∙√▒─│┼┤┬├┴┐┌└┘β∞φ±½¼≈«»ﻷﻸ��ﻻﻼ� ­ﺂ£¤ﺄ��ﺎﺏﺕﺙ،ﺝﺡﺥ٠١٢٣٤٥٦٧٨٩ﻑ؛ﺱﺵﺹ؟¢ﺀﺁﺃﺅﻊﺋﺍﺑﺓﺗﺛﺟﺣﺧﺩﺫﺭﺯﺳﺷﺻﺿﻁﻅﻋﻏ¦¬÷×ﻉـﻓﻗﻛﻟﻣﻧﻫﻭﻯﻳﺽﻌﻎﻍﻡﹽّﻥﻩﻬﻰﻲﻐﻕﻵﻶﻝﻙﻱ■�"},ibm864:"cp864",csibm864:"cp864",cp865:{type:"_sbcs",chars:"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},ibm865:"cp865",csibm865:"cp865",cp866:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ "},ibm866:"cp866",csibm866:"cp866",cp869:{type:"_sbcs",chars:"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ "},ibm869:"cp869",csibm869:"cp869",cp922:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ"},ibm922:"cp922",csibm922:"cp922",cp1046:{type:"_sbcs",chars:"ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�"},ibm1046:"cp1046",csibm1046:"cp1046",cp1124:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ"},ibm1124:"cp1124",csibm1124:"cp1124",cp1125:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ "},ibm1125:"cp1125",csibm1125:"cp1125",cp1129:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"},ibm1129:"cp1129",csibm1129:"cp1129",cp1133:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�"},ibm1133:"cp1133",csibm1133:"cp1133",cp1161:{type:"_sbcs",chars:"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ "},ibm1161:"cp1161",csibm1161:"cp1161",cp1162:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"},ibm1162:"cp1162",csibm1162:"cp1162",cp1163:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ"},ibm1163:"cp1163",csibm1163:"cp1163",maccroatian:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ"},maccyrillic:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"},macgreek:{type:"_sbcs",chars:"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�"},maciceland:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},macroman:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},macromania:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},macthai:{type:"_sbcs",chars:"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู\ufeff​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����"},macturkish:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ"},macukraine:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤"},koi8r:{type:"_sbcs",chars:"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},koi8u:{type:"_sbcs",chars:"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},koi8ru:{type:"_sbcs",chars:"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},koi8t:{type:"_sbcs",chars:"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"},armscii8:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�"},rk1048:{type:"_sbcs",chars:"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"},tcvn:{type:"_sbcs",chars:"\0ÚỤỪỬỮ\b\t\n\v\f\rỨỰỲỶỸÝỴ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ"},georgianacademy:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},georgianps:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ"},pt154:{type:"_sbcs",chars:"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"},viscii:{type:"_sbcs",chars:"\0ẲẴẪ\b\t\n\v\f\rỶỸỴ !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ"},iso646cn:{type:"_sbcs",chars:"\0\b\t\n\v\f\r !\"#¥%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"},iso646jp:{type:"_sbcs",chars:"\0\b\t\n\v\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾��������������������������������������������������������������������������������������������������������������������������������"},hproman8:{type:"_sbcs",chars:"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�"},macintosh:{type:"_sbcs",chars:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ"},ascii:{type:"_sbcs",chars:"��������������������������������������������������������������������������������������������������������������������������������"},tis620:{type:"_sbcs",chars:"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����"}}},99900:function(A){"use strict";A.exports={10029:"maccenteuro",maccenteuro:{type:"_sbcs",chars:"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ"},808:"cp808",ibm808:"cp808",cp808:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ "},mik:{type:"_sbcs",chars:"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ "},cp720:{type:"_sbcs",chars:"€éâ„à†çêëèïّْô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡ًٌٍَُِ≈°∙·√ⁿ²■ "},ascii8bit:"ascii",usascii:"ascii",ansix34:"ascii",ansix341968:"ascii",ansix341986:"ascii",csascii:"ascii",cp367:"ascii",ibm367:"ascii",isoir6:"ascii",iso646us:"ascii",iso646irv:"ascii",us:"ascii",latin1:"iso88591",latin2:"iso88592",latin3:"iso88593",latin4:"iso88594",latin5:"iso88599",latin6:"iso885910",latin7:"iso885913",latin8:"iso885914",latin9:"iso885915",latin10:"iso885916",csisolatin1:"iso88591",csisolatin2:"iso88592",csisolatin3:"iso88593",csisolatin4:"iso88594",csisolatincyrillic:"iso88595",csisolatinarabic:"iso88596",csisolatingreek:"iso88597",csisolatinhebrew:"iso88598",csisolatin5:"iso88599",csisolatin6:"iso885910",l1:"iso88591",l2:"iso88592",l3:"iso88593",l4:"iso88594",l5:"iso88599",l6:"iso885910",l7:"iso885913",l8:"iso885914",l9:"iso885915",l10:"iso885916",isoir14:"iso646jp",isoir57:"iso646cn",isoir100:"iso88591",isoir101:"iso88592",isoir109:"iso88593",isoir110:"iso88594",isoir144:"iso88595",isoir127:"iso88596",isoir126:"iso88597",isoir138:"iso88598",isoir148:"iso88599",isoir157:"iso885910",isoir166:"tis620",isoir179:"iso885913",isoir199:"iso885914",isoir203:"iso885915",isoir226:"iso885916",cp819:"iso88591",ibm819:"iso88591",cyrillic:"iso88595",arabic:"iso88596",arabic8:"iso88596",ecma114:"iso88596",asmo708:"iso88596",greek:"iso88597",greek8:"iso88597",ecma118:"iso88597",elot928:"iso88597",hebrew:"iso88598",hebrew8:"iso88598",turkish:"iso88599",turkish8:"iso88599",thai:"iso885911",thai8:"iso885911",celtic:"iso885914",celtic8:"iso885914",isoceltic:"iso885914",tis6200:"tis620",tis62025291:"tis620",tis62025330:"tis620",1e4:"macroman",10006:"macgreek",10007:"maccyrillic",10079:"maciceland",10081:"macturkish",cspc8codepage437:"cp437",cspc775baltic:"cp775",cspc850multilingual:"cp850",cspcp852:"cp852",cspc862latinhebrew:"cp862",cpgr:"cp869",msee:"cp1250",mscyrl:"cp1251",msansi:"cp1252",msgreek:"cp1253",msturk:"cp1254",mshebr:"cp1255",msarab:"cp1256",winbaltrim:"cp1257",cp20866:"koi8r",20866:"koi8r",ibm878:"koi8r",cskoi8r:"koi8r",cp21866:"koi8u",21866:"koi8u",ibm1168:"koi8u",strk10482002:"rk1048",tcvn5712:"tcvn",tcvn57121:"tcvn",gb198880:"iso646cn",cn:"iso646cn",csiso14jisc6220ro:"iso646jp",jisc62201969ro:"iso646jp",jp:"iso646jp",cshproman8:"hproman8",r8:"hproman8",roman8:"hproman8",xroman8:"hproman8",ibm1051:"hproman8",mac:"macintosh",csmacintosh:"macintosh"}},17100:function(A,t,e){"use strict";var s=e(16696).Buffer;function i(){}function n(){}function r(){this.overflowByte=-1}function B(A,t){this.iconv=t}function o(A,t){void 0===(A=A||{}).addBOM&&(A.addBOM=!0),this.encoder=t.iconv.getEncoder("utf-16le",A)}function E(A,t){this.decoder=null,this.initialBufs=[],this.initialBufsLen=0,this.options=A||{},this.iconv=t.iconv}function w(A,t){var e=[],s=0,i=0,n=0;A:for(var r=0;r=100)break A}return n>i?"utf-16be":n1114111)&&(e=s),e>=65536){var i=55296|(e-=65536)>>10;A[t++]=255&i,A[t++]=i>>8,e=56320|1023&e}return A[t++]=255&e,A[t++]=e>>8,t}function o(A,t){this.iconv=t}function E(A,t){void 0===(A=A||{}).addBOM&&(A.addBOM=!0),this.encoder=t.iconv.getEncoder(A.defaultEncoding||"utf-32le",A)}function w(A,t){this.decoder=null,this.initialBufs=[],this.initialBufsLen=0,this.options=A||{},this.iconv=t.iconv}function g(A,t){var e=[],s=0,i=0,n=0,r=0,B=0;A:for(var o=0;o16)&&n++,(0!==e[3]||e[2]>16)&&i++,0!==e[0]||0!==e[1]||0===e[2]&&0===e[3]||B++,0===e[0]&&0===e[1]||0!==e[2]||0!==e[3]||r++,e.length=0,++s>=100)break A}return B-n>r-i?"utf-32be":B-n0){for(;t0&&(A=this.iconv.decode(s.from(this.base64Accum,"base64"),"utf16-be")),this.inBase64=!1,this.base64Accum="",A},t.utf7imap=Q,Q.prototype.encoder=C,Q.prototype.decoder=h,Q.prototype.bomAware=!0,C.prototype.write=function(A){for(var t=this.inBase64,e=this.base64Accum,i=this.base64AccumIdx,n=s.alloc(5*A.length+10),r=0,B=0;B0&&(r+=n.write(e.slice(0,i).toString("base64").replace(/\//g,",").replace(/=+$/,""),r),i=0),n[r++]=a,t=!1),t||(n[r++]=o,o===c&&(n[r++]=a))):(t||(n[r++]=c,t=!0),t&&(e[i++]=o>>8,e[i++]=255&o,i==e.length&&(r+=n.write(e.toString("base64").replace(/\//g,","),r),i=0)))}return this.inBase64=t,this.base64AccumIdx=i,n.slice(0,r)},C.prototype.end=function(){var A=s.alloc(10),t=0;return this.inBase64&&(this.base64AccumIdx>0&&(t+=A.write(this.base64Accum.slice(0,this.base64AccumIdx).toString("base64").replace(/\//g,",").replace(/=+$/,""),t),this.base64AccumIdx=0),A[t++]=a,this.inBase64=!1),A.slice(0,t)};var u=E.slice();u[",".charCodeAt(0)]=!0,h.prototype.write=function(A){for(var t="",e=0,i=this.inBase64,n=this.base64Accum,r=0;r0&&(A=this.iconv.decode(s.from(this.base64Accum,"base64"),"utf16-be")),this.inBase64=!1,this.base64Accum="",A}},52331:function(A,t){"use strict";function e(A,t){this.encoder=A,this.addBOM=!0}function s(A,t){this.decoder=A,this.pass=!1,this.options=t||{}}t.PrependBOM=e,e.prototype.write=function(A){return this.addBOM&&(A="\ufeff"+A,this.addBOM=!1),this.encoder.write(A)},e.prototype.end=function(){return this.encoder.end()},t.StripBOM=s,s.prototype.write=function(A){var t=this.decoder.write(A);return this.pass||!t||("\ufeff"===t[0]&&(t=t.slice(1),"function"==typeof this.options.stripBOM&&this.options.stripBOM()),this.pass=!0),t},s.prototype.end=function(){return this.decoder.end()}},54171:function(A,t,e){"use strict";var s,i=e(16696).Buffer,n=e(52331),r=A.exports;r.encodings=null,r.defaultCharUnicode="�",r.defaultCharSingleByte="?",r.encode=function(A,t,e){A=""+(A||"");var s=r.getEncoder(t,e),n=s.write(A),B=s.end();return B&&B.length>0?i.concat([n,B]):n},r.decode=function(A,t,e){"string"==typeof A&&(r.skipDecodeWarning||(console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding"),r.skipDecodeWarning=!0),A=i.from(""+(A||""),"binary"));var s=r.getDecoder(t,e),n=s.write(A),B=s.end();return B?n+B:n},r.encodingExists=function(A){try{return r.getCodec(A),!0}catch(A){return!1}},r.toEncoding=r.encode,r.fromEncoding=r.decode,r._codecDataCache={},r.getCodec=function(A){r.encodings||(r.encodings=e(26326));for(var t=r._canonicalizeEncoding(A),s={};;){var i=r._codecDataCache[t];if(i)return i;var n=r.encodings[t];switch(typeof n){case"string":t=n;break;case"object":for(var B in n)s[B]=n[B];s.encodingName||(s.encodingName=t),t=n.type;break;case"function":return s.encodingName||(s.encodingName=t),i=new n(s,r),r._codecDataCache[s.encodingName]=i,i;default:throw new Error("Encoding not recognized: '"+A+"' (searched as: '"+t+"')")}}},r._canonicalizeEncoding=function(A){return(""+A).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g,"")},r.getEncoder=function(A,t){var e=r.getCodec(A),s=new e.encoder(t,e);return e.bomAware&&t&&t.addBOM&&(s=new n.PrependBOM(s,t)),s},r.getDecoder=function(A,t){var e=r.getCodec(A),s=new e.decoder(t,e);return!e.bomAware||t&&!1===t.stripBOM||(s=new n.StripBOM(s,t)),s},r.enableStreamingAPI=function(A){if(!r.supportsStreams){var t=e(34506)(A);r.IconvLiteEncoderStream=t.IconvLiteEncoderStream,r.IconvLiteDecoderStream=t.IconvLiteDecoderStream,r.encodeStream=function(A,t){return new r.IconvLiteEncoderStream(r.getEncoder(A,t),t)},r.decodeStream=function(A,t){return new r.IconvLiteDecoderStream(r.getDecoder(A,t),t)},r.supportsStreams=!0}};try{s=e(16403)}catch(A){}s&&s.Transform?r.enableStreamingAPI(s):r.encodeStream=r.decodeStream=function(){throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.")}},34506:function(A,t,e){"use strict";var s=e(16696).Buffer;A.exports=function(A){var t=A.Transform;function e(A,e){this.conv=A,(e=e||{}).decodeStrings=!1,t.call(this,e)}function i(A,e){this.conv=A,(e=e||{}).encoding=this.encoding="utf8",t.call(this,e)}return e.prototype=Object.create(t.prototype,{constructor:{value:e}}),e.prototype._transform=function(A,t,e){if("string"!=typeof A)return e(new Error("Iconv encoding stream needs strings as its input."));try{var s=this.conv.write(A);s&&s.length&&this.push(s),e()}catch(A){e(A)}},e.prototype._flush=function(A){try{var t=this.conv.end();t&&t.length&&this.push(t),A()}catch(t){A(t)}},e.prototype.collect=function(A){var t=[];return this.on("error",A),this.on("data",(function(A){t.push(A)})),this.on("end",(function(){A(null,s.concat(t))})),this},i.prototype=Object.create(t.prototype,{constructor:{value:i}}),i.prototype._transform=function(A,t,e){if(!(s.isBuffer(A)||A instanceof Uint8Array))return e(new Error("Iconv decoding stream needs buffers as its input."));try{var i=this.conv.write(A);i&&i.length&&this.push(i,this.encoding),e()}catch(A){e(A)}},i.prototype._flush=function(A){try{var t=this.conv.end();t&&t.length&&this.push(t,this.encoding),A()}catch(t){A(t)}},i.prototype.collect=function(A){var t="";return this.on("error",A),this.on("data",(function(A){t+=A})),this.on("end",(function(){A(null,t)})),this},{IconvLiteEncoderStream:e,IconvLiteDecoderStream:i}}},89029:function(A,t){t.read=function(A,t,e,s,i){var n,r,B=8*i-s-1,o=(1<>1,w=-7,g=e?i-1:0,a=e?-1:1,c=A[t+g];for(g+=a,n=c&(1<<-w)-1,c>>=-w,w+=B;w>0;n=256*n+A[t+g],g+=a,w-=8);for(r=n&(1<<-w)-1,n>>=-w,w+=s;w>0;r=256*r+A[t+g],g+=a,w-=8);if(0===n)n=1-E;else{if(n===o)return r?NaN:1/0*(c?-1:1);r+=Math.pow(2,s),n-=E}return(c?-1:1)*r*Math.pow(2,n-s)},t.write=function(A,t,e,s,i,n){var r,B,o,E=8*n-i-1,w=(1<>1,a=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,c=s?0:n-1,Q=s?1:-1,C=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(B=isNaN(t)?1:0,r=w):(r=Math.floor(Math.log(t)/Math.LN2),t*(o=Math.pow(2,-r))<1&&(r--,o*=2),(t+=r+g>=1?a/o:a*Math.pow(2,1-g))*o>=2&&(r++,o/=2),r+g>=w?(B=0,r=w):r+g>=1?(B=(t*o-1)*Math.pow(2,i),r+=g):(B=t*Math.pow(2,g-1)*Math.pow(2,i),r=0));i>=8;A[e+c]=255&B,c+=Q,B/=256,i-=8);for(r=r<0;A[e+c]=255&r,c+=Q,r/=256,E-=8);A[e+c-Q]|=128*C}},89784:function(A){"function"==typeof Object.create?A.exports=function(A,t){t&&(A.super_=t,A.prototype=Object.create(t.prototype,{constructor:{value:A,enumerable:!1,writable:!0,configurable:!0}}))}:A.exports=function(A,t){if(t){A.super_=t;var e=function(){};e.prototype=t.prototype,A.prototype=new e,A.prototype.constructor=A}}},67906:function(A,t,e){"use strict";var s=e(26626)(),i=e(67913)("Object.prototype.toString"),n=function(A){return!(s&&A&&"object"==typeof A&&Symbol.toStringTag in A)&&"[object Arguments]"===i(A)},r=function(A){return!!n(A)||null!==A&&"object"==typeof A&&"number"==typeof A.length&&A.length>=0&&"[object Array]"!==i(A)&&"[object Function]"===i(A.callee)},B=function(){return n(arguments)}();n.isLegacyArguments=r,A.exports=B?n:r},3746:function(A){"use strict";var t,e,s=Function.prototype.toString,i="object"==typeof Reflect&&null!==Reflect&&Reflect.apply;if("function"==typeof i&&"function"==typeof Object.defineProperty)try{t=Object.defineProperty({},"length",{get:function(){throw e}}),e={},i((function(){throw 42}),null,t)}catch(A){A!==e&&(i=null)}else i=null;var n=/^\s*class\b/,r=function(A){try{var t=s.call(A);return n.test(t)}catch(A){return!1}},B=function(A){try{return!r(A)&&(s.call(A),!0)}catch(A){return!1}},o=Object.prototype.toString,E="function"==typeof Symbol&&!!Symbol.toStringTag,w=!(0 in[,]),g=function(){return!1};if("object"==typeof document){var a=document.all;o.call(a)===o.call(document.all)&&(g=function(A){if((w||!A)&&(void 0===A||"object"==typeof A))try{var t=o.call(A);return("[object HTMLAllCollection]"===t||"[object HTML document.all class]"===t||"[object HTMLCollection]"===t||"[object Object]"===t)&&null==A("")}catch(A){}return!1})}A.exports=i?function(A){if(g(A))return!0;if(!A)return!1;if("function"!=typeof A&&"object"!=typeof A)return!1;try{i(A,null,t)}catch(A){if(A!==e)return!1}return!r(A)&&B(A)}:function(A){if(g(A))return!0;if(!A)return!1;if("function"!=typeof A&&"object"!=typeof A)return!1;if(E)return B(A);if(r(A))return!1;var t=o.call(A);return!("[object Function]"!==t&&"[object GeneratorFunction]"!==t&&!/^\[object HTML/.test(t))&&B(A)}},71230:function(A,t,e){"use strict";var s=Date.prototype.getDay,i=Object.prototype.toString,n=e(26626)();A.exports=function(A){return"object"==typeof A&&null!==A&&(n?function(A){try{return s.call(A),!0}catch(A){return!1}}(A):"[object Date]"===i.call(A))}},44610:function(A,t,e){"use strict";var s,i=Object.prototype.toString,n=Function.prototype.toString,r=/^\s*(?:function)?\*/,B=e(26626)(),o=Object.getPrototypeOf;A.exports=function(A){if("function"!=typeof A)return!1;if(r.test(n.call(A)))return!0;if(!B)return"[object GeneratorFunction]"===i.call(A);if(!o)return!1;if(void 0===s){var t=function(){if(!B)return!1;try{return Function("return function*() {}")()}catch(A){}}();s=!!t&&o(t)}return o(A)===s}},82621:function(A){"use strict";A.exports=function(A){return A!=A}},7051:function(A,t,e){"use strict";var s=e(26601),i=e(77802),n=e(82621),r=e(61320),B=e(35074),o=s(r(),Number);i(o,{getPolyfill:r,implementation:n,shim:B}),A.exports=o},61320:function(A,t,e){"use strict";var s=e(82621);A.exports=function(){return Number.isNaN&&Number.isNaN(NaN)&&!Number.isNaN("a")?Number.isNaN:s}},35074:function(A,t,e){"use strict";var s=e(77802),i=e(61320);A.exports=function(){var A=i();return s(Number,{isNaN:A},{isNaN:function(){return Number.isNaN!==A}}),A}},71689:function(A,t,e){"use strict";var s,i,n,r,B=e(67913),o=e(26626)();if(o){s=B("Object.prototype.hasOwnProperty"),i=B("RegExp.prototype.exec"),n={};var E=function(){throw n};r={toString:E,valueOf:E},"symbol"==typeof Symbol.toPrimitive&&(r[Symbol.toPrimitive]=E)}var w=B("Object.prototype.toString"),g=Object.getOwnPropertyDescriptor;A.exports=o?function(A){if(!A||"object"!=typeof A)return!1;var t=g(A,"lastIndex");if(!t||!s(t,"value"))return!1;try{i(A,r)}catch(A){return A===n}}:function(A){return!(!A||"object"!=typeof A&&"function"!=typeof A)&&"[object RegExp]"===w(A)}},46094:function(A,t,e){"use strict";var s=e(43381);A.exports=function(A){return!!s(A)}},63249:function(A){"use strict";var t=function(A){return A!=A};A.exports=function(A,e){return 0===A&&0===e?1/A==1/e:A===e||!(!t(A)||!t(e))}},98527:function(A,t,e){"use strict";var s=e(77802),i=e(26601),n=e(63249),r=e(89636),B=e(3534),o=i(r(),Object);s(o,{getPolyfill:r,implementation:n,shim:B}),A.exports=o},89636:function(A,t,e){"use strict";var s=e(63249);A.exports=function(){return"function"==typeof Object.is?Object.is:s}},3534:function(A,t,e){"use strict";var s=e(89636),i=e(77802);A.exports=function(){var A=s();return i(Object,{is:A},{is:function(){return Object.is!==A}}),A}},48461:function(A,t,e){"use strict";var s;if(!Object.keys){var i=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=e(76515),B=Object.prototype.propertyIsEnumerable,o=!B.call({toString:null},"toString"),E=B.call((function(){}),"prototype"),w=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],g=function(A){var t=A.constructor;return t&&t.prototype===A},a={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},c=function(){if("undefined"==typeof window)return!1;for(var A in window)try{if(!a["$"+A]&&i.call(window,A)&&null!==window[A]&&"object"==typeof window[A])try{g(window[A])}catch(A){return!0}}catch(A){return!0}return!1}();s=function(A){var t=null!==A&&"object"==typeof A,e="[object Function]"===n.call(A),s=r(A),B=t&&"[object String]"===n.call(A),a=[];if(!t&&!e&&!s)throw new TypeError("Object.keys called on a non-object");var Q=E&&e;if(B&&A.length>0&&!i.call(A,0))for(var C=0;C0)for(var h=0;h=0&&"[object Function]"===t.call(A.callee)),s}},36521:function(A,t,e){"use strict";var s=e(35643),i=e(12843)(),n=e(67913),r=Object,B=n("Array.prototype.push"),o=n("Object.prototype.propertyIsEnumerable"),E=i?Object.getOwnPropertySymbols:null;A.exports=function(A,t){if(null==A)throw new TypeError("target must be an object");var e=r(A);if(1===arguments.length)return e;for(var n=1;n>>16&65535|0,r=0;0!==e;){e-=r=e>2e3?2e3:e;do{n=n+(i=i+t[s++]|0)|0}while(--r);i%=65521,n%=65521}return i|n<<16|0}},81607:function(A){"use strict";A.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}},99049:function(A){"use strict";var t=function(){for(var A,t=[],e=0;e<256;e++){A=e;for(var s=0;s<8;s++)A=1&A?3988292384^A>>>1:A>>>1;t[e]=A}return t}();A.exports=function(A,e,s,i){var n=t,r=i+s;A^=-1;for(var B=i;B>>8^n[255&(A^e[B])];return-1^A}},22925:function(A,t,e){"use strict";var s,i=e(72519),n=e(22367),r=e(46911),B=e(99049),o=e(56228),E=0,w=0,g=-2,a=2,c=8,Q=286,C=30,h=19,u=2*Q+1,l=15,I=3,f=258,D=f+I+1,b=42,d=103,v=113,Y=666;function F(A,t){return A.msg=o[t],t}function M(A){return(A<<1)-(A>4?9:0)}function y(A){for(var t=A.length;--t>=0;)A[t]=0}function L(A){var t=A.state,e=t.pending;e>A.avail_out&&(e=A.avail_out),0!==e&&(i.arraySet(A.output,t.pending_buf,t.pending_out,e,A.next_out),A.next_out+=e,t.pending_out+=e,A.total_out+=e,A.avail_out-=e,t.pending-=e,0===t.pending&&(t.pending_out=0))}function R(A,t){n._tr_flush_block(A,A.block_start>=0?A.block_start:-1,A.strstart-A.block_start,t),A.block_start=A.strstart,L(A.strm)}function m(A,t){A.pending_buf[A.pending++]=t}function x(A,t){A.pending_buf[A.pending++]=t>>>8&255,A.pending_buf[A.pending++]=255&t}function p(A,t){var e,s,i=A.max_chain_length,n=A.strstart,r=A.prev_length,B=A.nice_match,o=A.strstart>A.w_size-D?A.strstart-(A.w_size-D):0,E=A.window,w=A.w_mask,g=A.prev,a=A.strstart+f,c=E[n+r-1],Q=E[n+r];A.prev_length>=A.good_match&&(i>>=2),B>A.lookahead&&(B=A.lookahead);do{if(E[(e=t)+r]===Q&&E[e+r-1]===c&&E[e]===E[n]&&E[++e]===E[n+1]){n+=2,e++;do{}while(E[++n]===E[++e]&&E[++n]===E[++e]&&E[++n]===E[++e]&&E[++n]===E[++e]&&E[++n]===E[++e]&&E[++n]===E[++e]&&E[++n]===E[++e]&&E[++n]===E[++e]&&nr){if(A.match_start=t,r=s,s>=B)break;c=E[n+r-1],Q=E[n+r]}}}while((t=g[t&w])>o&&0!=--i);return r<=A.lookahead?r:A.lookahead}function G(A){var t,e,s,n,o,E,w,g,a,c,Q=A.w_size;do{if(n=A.window_size-A.lookahead-A.strstart,A.strstart>=Q+(Q-D)){i.arraySet(A.window,A.window,Q,Q,0),A.match_start-=Q,A.strstart-=Q,A.block_start-=Q,t=e=A.hash_size;do{s=A.head[--t],A.head[t]=s>=Q?s-Q:0}while(--e);t=e=Q;do{s=A.prev[--t],A.prev[t]=s>=Q?s-Q:0}while(--e);n+=Q}if(0===A.strm.avail_in)break;if(E=A.strm,w=A.window,g=A.strstart+A.lookahead,a=n,c=void 0,(c=E.avail_in)>a&&(c=a),e=0===c?0:(E.avail_in-=c,i.arraySet(w,E.input,E.next_in,c,g),1===E.state.wrap?E.adler=r(E.adler,w,c,g):2===E.state.wrap&&(E.adler=B(E.adler,w,c,g)),E.next_in+=c,E.total_in+=c,c),A.lookahead+=e,A.lookahead+A.insert>=I)for(o=A.strstart-A.insert,A.ins_h=A.window[o],A.ins_h=(A.ins_h<=I&&(A.ins_h=(A.ins_h<=I)if(s=n._tr_tally(A,A.strstart-A.match_start,A.match_length-I),A.lookahead-=A.match_length,A.match_length<=A.max_lazy_match&&A.lookahead>=I){A.match_length--;do{A.strstart++,A.ins_h=(A.ins_h<=I&&(A.ins_h=(A.ins_h<4096)&&(A.match_length=I-1)),A.prev_length>=I&&A.match_length<=A.prev_length){i=A.strstart+A.lookahead-I,s=n._tr_tally(A,A.strstart-1-A.prev_match,A.prev_length-I),A.lookahead-=A.prev_length-1,A.prev_length-=2;do{++A.strstart<=i&&(A.ins_h=(A.ins_h<15&&(B=2,s-=16),n<1||n>9||e!==c||s<8||s>15||t<0||t>9||r<0||r>4)return F(A,g);8===s&&(s=9);var o=new S;return A.state=o,o.strm=A,o.wrap=B,o.gzhead=null,o.w_bits=s,o.w_size=1<A.pending_buf_size-5&&(e=A.pending_buf_size-5);;){if(A.lookahead<=1){if(G(A),0===A.lookahead&&t===E)return 1;if(0===A.lookahead)break}A.strstart+=A.lookahead,A.lookahead=0;var s=A.block_start+e;if((0===A.strstart||A.strstart>=s)&&(A.lookahead=A.strstart-s,A.strstart=s,R(A,!1),0===A.strm.avail_out))return 1;if(A.strstart-A.block_start>=A.w_size-D&&(R(A,!1),0===A.strm.avail_out))return 1}return A.insert=0,4===t?(R(A,!0),0===A.strm.avail_out?3:4):(A.strstart>A.block_start&&(R(A,!1),A.strm.avail_out),1)})),new H(4,4,8,4,W),new H(4,5,16,8,W),new H(4,6,32,32,W),new H(4,4,16,16,P),new H(8,16,32,32,P),new H(8,16,128,128,P),new H(8,32,128,256,P),new H(32,128,258,1024,P),new H(32,258,258,4096,P)],t.deflateInit=function(A,t){return T(A,t,c,15,8,0)},t.deflateInit2=T,t.deflateReset=N,t.deflateResetKeep=U,t.deflateSetHeader=function(A,t){return A&&A.state?2!==A.state.wrap?g:(A.state.gzhead=t,w):g},t.deflate=function(A,t){var e,i,r,o;if(!A||!A.state||t>5||t<0)return A?F(A,g):g;if(i=A.state,!A.output||!A.input&&0!==A.avail_in||i.status===Y&&4!==t)return F(A,0===A.avail_out?-5:g);if(i.strm=A,e=i.last_flush,i.last_flush=t,i.status===b)if(2===i.wrap)A.adler=0,m(i,31),m(i,139),m(i,8),i.gzhead?(m(i,(i.gzhead.text?1:0)+(i.gzhead.hcrc?2:0)+(i.gzhead.extra?4:0)+(i.gzhead.name?8:0)+(i.gzhead.comment?16:0)),m(i,255&i.gzhead.time),m(i,i.gzhead.time>>8&255),m(i,i.gzhead.time>>16&255),m(i,i.gzhead.time>>24&255),m(i,9===i.level?2:i.strategy>=2||i.level<2?4:0),m(i,255&i.gzhead.os),i.gzhead.extra&&i.gzhead.extra.length&&(m(i,255&i.gzhead.extra.length),m(i,i.gzhead.extra.length>>8&255)),i.gzhead.hcrc&&(A.adler=B(A.adler,i.pending_buf,i.pending,0)),i.gzindex=0,i.status=69):(m(i,0),m(i,0),m(i,0),m(i,0),m(i,0),m(i,9===i.level?2:i.strategy>=2||i.level<2?4:0),m(i,3),i.status=v);else{var a=c+(i.w_bits-8<<4)<<8;a|=(i.strategy>=2||i.level<2?0:i.level<6?1:6===i.level?2:3)<<6,0!==i.strstart&&(a|=32),a+=31-a%31,i.status=v,x(i,a),0!==i.strstart&&(x(i,A.adler>>>16),x(i,65535&A.adler)),A.adler=1}if(69===i.status)if(i.gzhead.extra){for(r=i.pending;i.gzindex<(65535&i.gzhead.extra.length)&&(i.pending!==i.pending_buf_size||(i.gzhead.hcrc&&i.pending>r&&(A.adler=B(A.adler,i.pending_buf,i.pending-r,r)),L(A),r=i.pending,i.pending!==i.pending_buf_size));)m(i,255&i.gzhead.extra[i.gzindex]),i.gzindex++;i.gzhead.hcrc&&i.pending>r&&(A.adler=B(A.adler,i.pending_buf,i.pending-r,r)),i.gzindex===i.gzhead.extra.length&&(i.gzindex=0,i.status=73)}else i.status=73;if(73===i.status)if(i.gzhead.name){r=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>r&&(A.adler=B(A.adler,i.pending_buf,i.pending-r,r)),L(A),r=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexr&&(A.adler=B(A.adler,i.pending_buf,i.pending-r,r)),0===o&&(i.gzindex=0,i.status=91)}else i.status=91;if(91===i.status)if(i.gzhead.comment){r=i.pending;do{if(i.pending===i.pending_buf_size&&(i.gzhead.hcrc&&i.pending>r&&(A.adler=B(A.adler,i.pending_buf,i.pending-r,r)),L(A),r=i.pending,i.pending===i.pending_buf_size)){o=1;break}o=i.gzindexr&&(A.adler=B(A.adler,i.pending_buf,i.pending-r,r)),0===o&&(i.status=d)}else i.status=d;if(i.status===d&&(i.gzhead.hcrc?(i.pending+2>i.pending_buf_size&&L(A),i.pending+2<=i.pending_buf_size&&(m(i,255&A.adler),m(i,A.adler>>8&255),A.adler=0,i.status=v)):i.status=v),0!==i.pending){if(L(A),0===A.avail_out)return i.last_flush=-1,w}else if(0===A.avail_in&&M(t)<=M(e)&&4!==t)return F(A,-5);if(i.status===Y&&0!==A.avail_in)return F(A,-5);if(0!==A.avail_in||0!==i.lookahead||t!==E&&i.status!==Y){var Q=2===i.strategy?function(A,t){for(var e;;){if(0===A.lookahead&&(G(A),0===A.lookahead)){if(t===E)return 1;break}if(A.match_length=0,e=n._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++,e&&(R(A,!1),0===A.strm.avail_out))return 1}return A.insert=0,4===t?(R(A,!0),0===A.strm.avail_out?3:4):A.last_lit&&(R(A,!1),0===A.strm.avail_out)?1:2}(i,t):3===i.strategy?function(A,t){for(var e,s,i,r,B=A.window;;){if(A.lookahead<=f){if(G(A),A.lookahead<=f&&t===E)return 1;if(0===A.lookahead)break}if(A.match_length=0,A.lookahead>=I&&A.strstart>0&&(s=B[i=A.strstart-1])===B[++i]&&s===B[++i]&&s===B[++i]){r=A.strstart+f;do{}while(s===B[++i]&&s===B[++i]&&s===B[++i]&&s===B[++i]&&s===B[++i]&&s===B[++i]&&s===B[++i]&&s===B[++i]&&iA.lookahead&&(A.match_length=A.lookahead)}if(A.match_length>=I?(e=n._tr_tally(A,1,A.match_length-I),A.lookahead-=A.match_length,A.strstart+=A.match_length,A.match_length=0):(e=n._tr_tally(A,0,A.window[A.strstart]),A.lookahead--,A.strstart++),e&&(R(A,!1),0===A.strm.avail_out))return 1}return A.insert=0,4===t?(R(A,!0),0===A.strm.avail_out?3:4):A.last_lit&&(R(A,!1),0===A.strm.avail_out)?1:2}(i,t):s[i.level].func(i,t);if(3!==Q&&4!==Q||(i.status=Y),1===Q||3===Q)return 0===A.avail_out&&(i.last_flush=-1),w;if(2===Q&&(1===t?n._tr_align(i):5!==t&&(n._tr_stored_block(i,0,0,!1),3===t&&(y(i.head),0===i.lookahead&&(i.strstart=0,i.block_start=0,i.insert=0))),L(A),0===A.avail_out))return i.last_flush=-1,w}return 4!==t?w:i.wrap<=0?1:(2===i.wrap?(m(i,255&A.adler),m(i,A.adler>>8&255),m(i,A.adler>>16&255),m(i,A.adler>>24&255),m(i,255&A.total_in),m(i,A.total_in>>8&255),m(i,A.total_in>>16&255),m(i,A.total_in>>24&255)):(x(i,A.adler>>>16),x(i,65535&A.adler)),L(A),i.wrap>0&&(i.wrap=-i.wrap),0!==i.pending?w:1)},t.deflateEnd=function(A){var t;return A&&A.state?(t=A.state.status)!==b&&69!==t&&73!==t&&91!==t&&t!==d&&t!==v&&t!==Y?F(A,g):(A.state=null,t===v?F(A,-3):w):g},t.deflateSetDictionary=function(A,t){var e,s,n,B,o,E,a,c,Q=t.length;if(!A||!A.state)return g;if(2===(B=(e=A.state).wrap)||1===B&&e.status!==b||e.lookahead)return g;for(1===B&&(A.adler=r(A.adler,t,Q,0)),e.wrap=0,Q>=e.w_size&&(0===B&&(y(e.head),e.strstart=0,e.block_start=0,e.insert=0),c=new i.Buf8(e.w_size),i.arraySet(c,t,Q-e.w_size,e.w_size,0),t=c,Q=e.w_size),o=A.avail_in,E=A.next_in,a=A.input,A.avail_in=Q,A.next_in=0,A.input=t,G(e);e.lookahead>=I;){s=e.strstart,n=e.lookahead-(I-1);do{e.ins_h=(e.ins_h<>>=f=I>>>24,Q-=f,0==(f=I>>>16&255))F[n++]=65535&I;else{if(!(16&f)){if(0==(64&f)){I=C[(65535&I)+(c&(1<>>=f,Q-=f),Q<15&&(c+=Y[s++]<>>=f=I>>>24,Q-=f,!(16&(f=I>>>16&255))){if(0==(64&f)){I=h[(65535&I)+(c&(1<o){A.msg="invalid distance too far back",e.mode=30;break A}if(c>>>=f,Q-=f,b>(f=n-r)){if((f=b-f)>w&&e.sane){A.msg="invalid distance too far back",e.mode=30;break A}if(d=0,v=a,0===g){if(d+=E-f,f2;)F[n++]=v[d++],F[n++]=v[d++],F[n++]=v[d++],D-=3;D&&(F[n++]=v[d++],D>1&&(F[n++]=v[d++]))}else{d=n-b;do{F[n++]=F[d++],F[n++]=F[d++],F[n++]=F[d++],D-=3}while(D>2);D&&(F[n++]=F[d++],D>1&&(F[n++]=F[d++]))}break}}break}}while(s>3,c&=(1<<(Q-=D<<3))-1,A.next_in=s,A.next_out=n,A.avail_in=s>>24&255)+(A>>>8&65280)+((65280&A)<<8)+((255&A)<<24)}function h(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,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 s.Buf16(320),this.work=new s.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function u(A){var t;return A&&A.state?(t=A.state,A.total_in=A.total_out=t.total=0,A.msg="",t.wrap&&(A.adler=1&t.wrap),t.mode=w,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new s.Buf32(c),t.distcode=t.distdyn=new s.Buf32(Q),t.sane=1,t.back=-1,o):E}function l(A){var t;return A&&A.state?((t=A.state).wsize=0,t.whave=0,t.wnext=0,u(A)):E}function I(A,t){var e,s;return A&&A.state?(s=A.state,t<0?(e=0,t=-t):(e=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?E:(null!==s.window&&s.wbits!==t&&(s.window=null),s.wrap=e,s.wbits=t,l(A))):E}function f(A,t){var e,s;return A?(s=new h,A.state=s,s.window=null,(e=I(A,t))!==o&&(A.state=null),e):E}var D,b,d=!0;function v(A){if(d){var t;for(D=new s.Buf32(512),b=new s.Buf32(32),t=0;t<144;)A.lens[t++]=8;for(;t<256;)A.lens[t++]=9;for(;t<280;)A.lens[t++]=7;for(;t<288;)A.lens[t++]=8;for(B(1,A.lens,0,288,D,0,A.work,{bits:9}),t=0;t<32;)A.lens[t++]=5;B(2,A.lens,0,32,b,0,A.work,{bits:5}),d=!1}A.lencode=D,A.lenbits=9,A.distcode=b,A.distbits=5}function Y(A,t,e,i){var n,r=A.state;return null===r.window&&(r.wsize=1<=r.wsize?(s.arraySet(r.window,t,e-r.wsize,r.wsize,0),r.wnext=0,r.whave=r.wsize):((n=r.wsize-r.wnext)>i&&(n=i),s.arraySet(r.window,t,e-i,n,r.wnext),(i-=n)?(s.arraySet(r.window,t,e-i,i,0),r.wnext=i,r.whave=r.wsize):(r.wnext+=n,r.wnext===r.wsize&&(r.wnext=0),r.whave>>8&255,e.check=n(e.check,N,2,0),f=0,D=0,e.mode=2;break}if(e.flags=0,e.head&&(e.head.done=!1),!(1&e.wrap)||(((255&f)<<8)+(f>>8))%31){A.msg="incorrect header check",e.mode=a;break}if(8!=(15&f)){A.msg="unknown compression method",e.mode=a;break}if(D-=4,W=8+(15&(f>>>=4)),0===e.wbits)e.wbits=W;else if(W>e.wbits){A.msg="invalid window size",e.mode=a;break}e.dmax=1<>8&1),512&e.flags&&(N[0]=255&f,N[1]=f>>>8&255,e.check=n(e.check,N,2,0)),f=0,D=0,e.mode=3;case 3:for(;D<32;){if(0===l)break A;l--,f+=c[h++]<>>8&255,N[2]=f>>>16&255,N[3]=f>>>24&255,e.check=n(e.check,N,4,0)),f=0,D=0,e.mode=4;case 4:for(;D<16;){if(0===l)break A;l--,f+=c[h++]<>8),512&e.flags&&(N[0]=255&f,N[1]=f>>>8&255,e.check=n(e.check,N,2,0)),f=0,D=0,e.mode=5;case 5:if(1024&e.flags){for(;D<16;){if(0===l)break A;l--,f+=c[h++]<>>8&255,e.check=n(e.check,N,2,0)),f=0,D=0}else e.head&&(e.head.extra=null);e.mode=6;case 6:if(1024&e.flags&&((F=e.length)>l&&(F=l),F&&(e.head&&(W=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Array(e.head.extra_len)),s.arraySet(e.head.extra,c,h,F,W)),512&e.flags&&(e.check=n(e.check,c,F,h)),l-=F,h+=F,e.length-=F),e.length))break A;e.length=0,e.mode=7;case 7:if(2048&e.flags){if(0===l)break A;F=0;do{W=c[h+F++],e.head&&W&&e.length<65536&&(e.head.name+=String.fromCharCode(W))}while(W&&F>9&1,e.head.done=!0),A.adler=e.check=0,e.mode=g;break;case 10:for(;D<32;){if(0===l)break A;l--,f+=c[h++]<>>=7&D,D-=7&D,e.mode=27;break}for(;D<3;){if(0===l)break A;l--,f+=c[h++]<>>=1)){case 0:e.mode=14;break;case 1:if(v(e),e.mode=20,6===t){f>>>=2,D-=2;break A}break;case 2:e.mode=17;break;case 3:A.msg="invalid block type",e.mode=a}f>>>=2,D-=2;break;case 14:for(f>>>=7&D,D-=7&D;D<32;){if(0===l)break A;l--,f+=c[h++]<>>16^65535)){A.msg="invalid stored block lengths",e.mode=a;break}if(e.length=65535&f,f=0,D=0,e.mode=15,6===t)break A;case 15:e.mode=16;case 16:if(F=e.length){if(F>l&&(F=l),F>I&&(F=I),0===F)break A;s.arraySet(Q,c,h,F,u),l-=F,h+=F,I-=F,u+=F,e.length-=F;break}e.mode=g;break;case 17:for(;D<14;){if(0===l)break A;l--,f+=c[h++]<>>=5,D-=5,e.ndist=1+(31&f),f>>>=5,D-=5,e.ncode=4+(15&f),f>>>=4,D-=4,e.nlen>286||e.ndist>30){A.msg="too many length or distance symbols",e.mode=a;break}e.have=0,e.mode=18;case 18:for(;e.have>>=3,D-=3}for(;e.have<19;)e.lens[T[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,H={bits:e.lenbits},P=B(0,e.lens,0,19,e.lencode,0,e.work,H),e.lenbits=H.bits,P){A.msg="invalid code lengths set",e.mode=a;break}e.have=0,e.mode=19;case 19:for(;e.have>>16&255,m=65535&U,!((L=U>>>24)<=D);){if(0===l)break A;l--,f+=c[h++]<>>=L,D-=L,e.lens[e.have++]=m;else{if(16===m){for(S=L+2;D>>=L,D-=L,0===e.have){A.msg="invalid bit length repeat",e.mode=a;break}W=e.lens[e.have-1],F=3+(3&f),f>>>=2,D-=2}else if(17===m){for(S=L+3;D>>=L)),f>>>=3,D-=3}else{for(S=L+7;D>>=L)),f>>>=7,D-=7}if(e.have+F>e.nlen+e.ndist){A.msg="invalid bit length repeat",e.mode=a;break}for(;F--;)e.lens[e.have++]=W}}if(e.mode===a)break;if(0===e.lens[256]){A.msg="invalid code -- missing end-of-block",e.mode=a;break}if(e.lenbits=9,H={bits:e.lenbits},P=B(1,e.lens,0,e.nlen,e.lencode,0,e.work,H),e.lenbits=H.bits,P){A.msg="invalid literal/lengths set",e.mode=a;break}if(e.distbits=6,e.distcode=e.distdyn,H={bits:e.distbits},P=B(2,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,H),e.distbits=H.bits,P){A.msg="invalid distances set",e.mode=a;break}if(e.mode=20,6===t)break A;case 20:e.mode=21;case 21:if(l>=6&&I>=258){A.next_out=u,A.avail_out=I,A.next_in=h,A.avail_in=l,e.hold=f,e.bits=D,r(A,d),u=A.next_out,Q=A.output,I=A.avail_out,h=A.next_in,c=A.input,l=A.avail_in,f=e.hold,D=e.bits,e.mode===g&&(e.back=-1);break}for(e.back=0;R=(U=e.lencode[f&(1<>>16&255,m=65535&U,!((L=U>>>24)<=D);){if(0===l)break A;l--,f+=c[h++]<>x)])>>>16&255,m=65535&U,!(x+(L=U>>>24)<=D);){if(0===l)break A;l--,f+=c[h++]<>>=x,D-=x,e.back+=x}if(f>>>=L,D-=L,e.back+=L,e.length=m,0===R){e.mode=26;break}if(32&R){e.back=-1,e.mode=g;break}if(64&R){A.msg="invalid literal/length code",e.mode=a;break}e.extra=15&R,e.mode=22;case 22:if(e.extra){for(S=e.extra;D>>=e.extra,D-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=23;case 23:for(;R=(U=e.distcode[f&(1<>>16&255,m=65535&U,!((L=U>>>24)<=D);){if(0===l)break A;l--,f+=c[h++]<>x)])>>>16&255,m=65535&U,!(x+(L=U>>>24)<=D);){if(0===l)break A;l--,f+=c[h++]<>>=x,D-=x,e.back+=x}if(f>>>=L,D-=L,e.back+=L,64&R){A.msg="invalid distance code",e.mode=a;break}e.offset=m,e.extra=15&R,e.mode=24;case 24:if(e.extra){for(S=e.extra;D>>=e.extra,D-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){A.msg="invalid distance too far back",e.mode=a;break}e.mode=25;case 25:if(0===I)break A;if(F=d-I,e.offset>F){if((F=e.offset-F)>e.whave&&e.sane){A.msg="invalid distance too far back",e.mode=a;break}F>e.wnext?(F-=e.wnext,M=e.wsize-F):M=e.wnext-F,F>e.length&&(F=e.length),y=e.window}else y=Q,M=u-e.offset,F=e.length;F>I&&(F=I),I-=F,e.length-=F;do{Q[u++]=y[M++]}while(--F);0===e.length&&(e.mode=21);break;case 26:if(0===I)break A;Q[u++]=e.length,I--,e.mode=21;break;case 27:if(e.wrap){for(;D<32;){if(0===l)break A;l--,f|=c[h++]<=1&&0===W[F];F--);if(M>F&&(M=F),0===F)return E[w++]=20971520,E[w++]=20971520,a.bits=1,0;for(Y=1;Y0&&(0===A||1!==F))return-1;for(P[1]=0,d=1;d<15;d++)P[d+1]=P[d]+W[d];for(v=0;v852||2===A&&m>592)return 1;for(;;){I=d-L,g[v]l?(f=H[S+g[v]],D=p[G+g[v]]):(f=96,D=0),c=1<>L)+(Q-=c)]=I<<24|f<<16|D|0}while(0!==Q);for(c=1<>=1;if(0!==c?(x&=c-1,x+=c):x=0,v++,0==--W[d]){if(d===F)break;d=t[e+g[v]]}if(d>M&&(x&h)!==C){for(0===L&&(L=M),u+=Y,R=1<<(y=d-L);y+L852||2===A&&m>592)return 1;E[C=x&h]=M<<24|y<<16|u-w|0}}return 0!==x&&(E[u+x]=d-L<<24|64<<16|0),a.bits=M,0}},56228:function(A){"use strict";A.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"}},22367:function(A,t,e){"use strict";var s=e(72519);function i(A){for(var t=A.length;--t>=0;)A[t]=0}var n=256,r=286,B=30,o=15,E=16,w=[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],g=[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],a=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],c=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],Q=new Array(576);i(Q);var C=new Array(60);i(C);var h=new Array(512);i(h);var u=new Array(256);i(u);var l=new Array(29);i(l);var I,f,D,b=new Array(B);function d(A,t,e,s,i){this.static_tree=A,this.extra_bits=t,this.extra_base=e,this.elems=s,this.max_length=i,this.has_stree=A&&A.length}function v(A,t){this.dyn_tree=A,this.max_code=0,this.stat_desc=t}function Y(A){return A<256?h[A]:h[256+(A>>>7)]}function F(A,t){A.pending_buf[A.pending++]=255&t,A.pending_buf[A.pending++]=t>>>8&255}function M(A,t,e){A.bi_valid>E-e?(A.bi_buf|=t<>E-A.bi_valid,A.bi_valid+=e-E):(A.bi_buf|=t<>>=1,e<<=1}while(--t>0);return e>>>1}function R(A,t,e){var s,i,n=new Array(o+1),r=0;for(s=1;s<=o;s++)n[s]=r=r+e[s-1]<<1;for(i=0;i<=t;i++){var B=A[2*i+1];0!==B&&(A[2*i]=L(n[B]++,B))}}function m(A){var t;for(t=0;t8?F(A,A.bi_buf):A.bi_valid>0&&(A.pending_buf[A.pending++]=A.bi_buf),A.bi_buf=0,A.bi_valid=0}function p(A,t,e,s){var i=2*t,n=2*e;return A[i]>1;e>=1;e--)G(A,n,e);i=E;do{e=A.heap[1],A.heap[1]=A.heap[A.heap_len--],G(A,n,1),s=A.heap[1],A.heap[--A.heap_max]=e,A.heap[--A.heap_max]=s,n[2*i]=n[2*e]+n[2*s],A.depth[i]=(A.depth[e]>=A.depth[s]?A.depth[e]:A.depth[s])+1,n[2*e+1]=n[2*s+1]=i,A.heap[1]=i++,G(A,n,1)}while(A.heap_len>=2);A.heap[--A.heap_max]=A.heap[1],function(A,t){var e,s,i,n,r,B,E=t.dyn_tree,w=t.max_code,g=t.stat_desc.static_tree,a=t.stat_desc.has_stree,c=t.stat_desc.extra_bits,Q=t.stat_desc.extra_base,C=t.stat_desc.max_length,h=0;for(n=0;n<=o;n++)A.bl_count[n]=0;for(E[2*A.heap[A.heap_max]+1]=0,e=A.heap_max+1;e<573;e++)(n=E[2*E[2*(s=A.heap[e])+1]+1]+1)>C&&(n=C,h++),E[2*s+1]=n,s>w||(A.bl_count[n]++,r=0,s>=Q&&(r=c[s-Q]),B=E[2*s],A.opt_len+=B*(n+r),a&&(A.static_len+=B*(g[2*s+1]+r)));if(0!==h){do{for(n=C-1;0===A.bl_count[n];)n--;A.bl_count[n]--,A.bl_count[n+1]+=2,A.bl_count[C]--,h-=2}while(h>0);for(n=C;0!==n;n--)for(s=A.bl_count[n];0!==s;)(i=A.heap[--e])>w||(E[2*i+1]!==n&&(A.opt_len+=(n-E[2*i+1])*E[2*i],E[2*i+1]=n),s--)}}(A,t),R(n,w,A.bl_count)}function H(A,t,e){var s,i,n=-1,r=t[1],B=0,o=7,E=4;for(0===r&&(o=138,E=3),t[2*(e+1)+1]=65535,s=0;s<=e;s++)i=r,r=t[2*(s+1)+1],++B>=7;s0?(2===A.strm.data_type&&(A.strm.data_type=function(A){var t,e=4093624447;for(t=0;t<=31;t++,e>>>=1)if(1&e&&0!==A.dyn_ltree[2*t])return 0;if(0!==A.dyn_ltree[18]||0!==A.dyn_ltree[20]||0!==A.dyn_ltree[26])return 1;for(t=32;t=3&&0===A.bl_tree[2*c[t]+1];t--);return A.opt_len+=3*(t+1)+5+5+4,t}(A),i=A.opt_len+3+7>>>3,(r=A.static_len+3+7>>>3)<=i&&(i=r)):i=r=e+5,e+4<=i&&-1!==t?N(A,t,e,s):4===A.strategy||r===i?(M(A,2+(s?1:0),3),W(A,Q,C)):(M(A,4+(s?1:0),3),function(A,t,e,s){var i;for(M(A,t-257,5),M(A,e-1,5),M(A,s-4,4),i=0;i>>8&255,A.pending_buf[A.d_buf+2*A.last_lit+1]=255&t,A.pending_buf[A.l_buf+A.last_lit]=255&e,A.last_lit++,0===t?A.dyn_ltree[2*e]++:(A.matches++,t--,A.dyn_ltree[2*(u[e]+n+1)]++,A.dyn_dtree[2*Y(t)]++),A.last_lit===A.lit_bufsize-1},t._tr_align=function(A){M(A,2,3),y(A,256,Q),function(A){16===A.bi_valid?(F(A,A.bi_buf),A.bi_buf=0,A.bi_valid=0):A.bi_valid>=8&&(A.pending_buf[A.pending++]=255&A.bi_buf,A.bi_buf>>=8,A.bi_valid-=8)}(A)}},37468:function(A){"use strict";A.exports=function(){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}},10884:function(A){"use strict";A.exports=["Float32Array","Float64Array","Int8Array","Int16Array","Int32Array","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array"]},9964:function(A){var t,e,s=A.exports={};function i(){throw new Error("setTimeout has not been defined")}function n(){throw new Error("clearTimeout has not been defined")}function r(A){if(t===setTimeout)return setTimeout(A,0);if((t===i||!t)&&setTimeout)return t=setTimeout,setTimeout(A,0);try{return t(A,0)}catch(e){try{return t.call(null,A,0)}catch(e){return t.call(this,A,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:i}catch(A){t=i}try{e="function"==typeof clearTimeout?clearTimeout:n}catch(A){e=n}}();var B,o=[],E=!1,w=-1;function g(){E&&B&&(E=!1,B.length?o=B.concat(o):w=-1,o.length&&a())}function a(){if(!E){var A=r(g);E=!0;for(var t=o.length;t;){for(B=o,o=[];++w1)for(var e=1;e"===n?(y(e,"onsgmldeclaration",e.sgmlDecl),e.sgmlDecl="",e.state=Y.TEXT):l(n)?(e.state=Y.SGML_DECL_QUOTED,e.sgmlDecl+=n):e.sgmlDecl+=n;continue;case Y.SGML_DECL_QUOTED:n===e.q&&(e.state=Y.SGML_DECL,e.q=""),e.sgmlDecl+=n;continue;case Y.DOCTYPE:">"===n?(e.state=Y.TEXT,y(e,"ondoctype",e.doctype),e.doctype=!0):(e.doctype+=n,"["===n?e.state=Y.DOCTYPE_DTD:l(n)&&(e.state=Y.DOCTYPE_QUOTED,e.q=n));continue;case Y.DOCTYPE_QUOTED:e.doctype+=n,n===e.q&&(e.q="",e.state=Y.DOCTYPE);continue;case Y.DOCTYPE_DTD:e.doctype+=n,"]"===n?e.state=Y.DOCTYPE:l(n)&&(e.state=Y.DOCTYPE_DTD_QUOTED,e.q=n);continue;case Y.DOCTYPE_DTD_QUOTED:e.doctype+=n,n===e.q&&(e.state=Y.DOCTYPE_DTD,e.q="");continue;case Y.COMMENT:"-"===n?e.state=Y.COMMENT_ENDING:e.comment+=n;continue;case Y.COMMENT_ENDING:"-"===n?(e.state=Y.COMMENT_ENDED,e.comment=R(e.opt,e.comment),e.comment&&y(e,"oncomment",e.comment),e.comment=""):(e.comment+="-"+n,e.state=Y.COMMENT);continue;case Y.COMMENT_ENDED:">"!==n?(p(e,"Malformed comment"),e.comment+="--"+n,e.state=Y.COMMENT):e.state=Y.TEXT;continue;case Y.CDATA:"]"===n?e.state=Y.CDATA_ENDING:e.cdata+=n;continue;case Y.CDATA_ENDING:"]"===n?e.state=Y.CDATA_ENDING_2:(e.cdata+="]"+n,e.state=Y.CDATA);continue;case Y.CDATA_ENDING_2:">"===n?(e.cdata&&y(e,"oncdata",e.cdata),y(e,"onclosecdata"),e.cdata="",e.state=Y.TEXT):"]"===n?e.cdata+="]":(e.cdata+="]]"+n,e.state=Y.CDATA);continue;case Y.PROC_INST:"?"===n?e.state=Y.PROC_INST_ENDING:u(n)?e.state=Y.PROC_INST_BODY:e.procInstName+=n;continue;case Y.PROC_INST_BODY:if(!e.procInstBody&&u(n))continue;"?"===n?e.state=Y.PROC_INST_ENDING:e.procInstBody+=n;continue;case Y.PROC_INST_ENDING:">"===n?(y(e,"onprocessinginstruction",{name:e.procInstName,body:e.procInstBody}),e.procInstName=e.procInstBody="",e.state=Y.TEXT):(e.procInstBody+="?"+n,e.state=Y.PROC_INST_BODY);continue;case Y.OPEN_TAG:f(Q,n)?e.tagName+=n:(G(e),">"===n?H(e):"/"===n?e.state=Y.OPEN_TAG_SLASH:(u(n)||p(e,"Invalid character in tag name"),e.state=Y.ATTRIB));continue;case Y.OPEN_TAG_SLASH:">"===n?(H(e,!0),S(e)):(p(e,"Forward-slash in opening tag not followed by >"),e.state=Y.ATTRIB);continue;case Y.ATTRIB:if(u(n))continue;">"===n?H(e):"/"===n?e.state=Y.OPEN_TAG_SLASH:f(c,n)?(e.attribName=n,e.attribValue="",e.state=Y.ATTRIB_NAME):p(e,"Invalid attribute name");continue;case Y.ATTRIB_NAME:"="===n?e.state=Y.ATTRIB_VALUE:">"===n?(p(e,"Attribute without value"),e.attribValue=e.attribName,P(e),H(e)):u(n)?e.state=Y.ATTRIB_NAME_SAW_WHITE:f(Q,n)?e.attribName+=n:p(e,"Invalid attribute name");continue;case Y.ATTRIB_NAME_SAW_WHITE:if("="===n)e.state=Y.ATTRIB_VALUE;else{if(u(n))continue;p(e,"Attribute without value"),e.tag.attributes[e.attribName]="",e.attribValue="",y(e,"onattribute",{name:e.attribName,value:""}),e.attribName="",">"===n?H(e):f(c,n)?(e.attribName=n,e.state=Y.ATTRIB_NAME):(p(e,"Invalid attribute name"),e.state=Y.ATTRIB)}continue;case Y.ATTRIB_VALUE:if(u(n))continue;l(n)?(e.q=n,e.state=Y.ATTRIB_VALUE_QUOTED):(p(e,"Unquoted attribute value"),e.state=Y.ATTRIB_VALUE_UNQUOTED,e.attribValue=n);continue;case Y.ATTRIB_VALUE_QUOTED:if(n!==e.q){"&"===n?e.state=Y.ATTRIB_VALUE_ENTITY_Q:e.attribValue+=n;continue}P(e),e.q="",e.state=Y.ATTRIB_VALUE_CLOSED;continue;case Y.ATTRIB_VALUE_CLOSED:u(n)?e.state=Y.ATTRIB:">"===n?H(e):"/"===n?e.state=Y.OPEN_TAG_SLASH:f(c,n)?(p(e,"No whitespace between attributes"),e.attribName=n,e.attribValue="",e.state=Y.ATTRIB_NAME):p(e,"Invalid attribute name");continue;case Y.ATTRIB_VALUE_UNQUOTED:if(!I(n)){"&"===n?e.state=Y.ATTRIB_VALUE_ENTITY_U:e.attribValue+=n;continue}P(e),">"===n?H(e):e.state=Y.ATTRIB;continue;case Y.CLOSE_TAG:if(e.tagName)">"===n?S(e):f(Q,n)?e.tagName+=n:e.script?(e.script+=""===n?S(e):p(e,"Invalid characters in closing tag");continue;case Y.TEXT_ENTITY:case Y.ATTRIB_VALUE_ENTITY_Q:case Y.ATTRIB_VALUE_ENTITY_U:var w,g;switch(e.state){case Y.TEXT_ENTITY:w=Y.TEXT,g="textNode";break;case Y.ATTRIB_VALUE_ENTITY_Q:w=Y.ATTRIB_VALUE_QUOTED,g="attribValue";break;case Y.ATTRIB_VALUE_ENTITY_U:w=Y.ATTRIB_VALUE_UNQUOTED,g="attribValue"}if(";"===n)if(e.opt.unparsedEntities){var a=U(e);e.entity="",e.state=w,e.write(a)}else e[g]+=U(e),e.entity="",e.state=w;else f(e.entity.length?h:C,n)?e.entity+=n:(p(e,"Invalid character in entity name"),e[g]+="&"+e.entity+n,e.entity="",e.state=w);continue;default:throw new Error(e,"Unknown state: "+e.state)}return e.position>=e.bufferCheckPosition&&function(t){for(var e=Math.max(A.MAX_BUFFER_LENGTH,10),s=0,n=0,r=i.length;ne)switch(i[n]){case"textNode":L(t);break;case"cdata":y(t,"oncdata",t.cdata),t.cdata="";break;case"script":y(t,"onscript",t.script),t.script="";break;default:m(t,"Max buffer length exceeded: "+i[n])}s=Math.max(s,B)}var o=A.MAX_BUFFER_LENGTH-s;t.bufferCheckPosition=o+t.position}(e),e},resume:function(){return this.error=null,this},close:function(){return this.write(null)},flush:function(){var A;L(A=this),""!==A.cdata&&(y(A,"oncdata",A.cdata),A.cdata=""),""!==A.script&&(y(A,"onscript",A.script),A.script="")}};try{t=e(9760).Stream}catch(A){t=function(){}}t||(t=function(){});var r=A.EVENTS.filter((function(A){return"error"!==A&&"end"!==A}));function B(A,e){if(!(this instanceof B))return new B(A,e);t.apply(this),this._parser=new n(A,e),this.writable=!0,this.readable=!0;var s=this;this._parser.onend=function(){s.emit("end")},this._parser.onerror=function(A){s.emit("error",A),s._parser.error=null},this._decoder=null,r.forEach((function(A){Object.defineProperty(s,"on"+A,{get:function(){return s._parser["on"+A]},set:function(t){if(!t)return s.removeAllListeners(A),s._parser["on"+A]=t,t;s.on(A,t)},enumerable:!0,configurable:!1})}))}B.prototype=Object.create(t.prototype,{constructor:{value:B}}),B.prototype.write=function(A){if("function"==typeof s&&"function"==typeof s.isBuffer&&s.isBuffer(A)){if(!this._decoder){var t=e(43143).I;this._decoder=new t("utf8")}A=this._decoder.write(A)}return this._parser.write(A.toString()),this.emit("data",A),!0},B.prototype.end=function(A){return A&&A.length&&this.write(A),this._parser.end(),!0},B.prototype.on=function(A,e){var s=this;return s._parser["on"+A]||-1===r.indexOf(A)||(s._parser["on"+A]=function(){var t=1===arguments.length?[arguments[0]]:Array.apply(null,arguments);t.splice(0,0,A),s.emit.apply(s,t)}),t.prototype.on.call(s,A,e)};var o="[CDATA[",E="DOCTYPE",w="http://www.w3.org/XML/1998/namespace",g="http://www.w3.org/2000/xmlns/",a={xml:w,xmlns:g},c=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,Q=/[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/,C=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,h=/[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040.\d-]/;function u(A){return" "===A||"\n"===A||"\r"===A||"\t"===A}function l(A){return'"'===A||"'"===A}function I(A){return">"===A||u(A)}function f(A,t){return A.test(t)}function D(A,t){return!f(A,t)}var b,d,v,Y=0;for(var F in A.STATE={BEGIN:Y++,BEGIN_WHITESPACE:Y++,TEXT:Y++,TEXT_ENTITY:Y++,OPEN_WAKA:Y++,SGML_DECL:Y++,SGML_DECL_QUOTED:Y++,DOCTYPE:Y++,DOCTYPE_QUOTED:Y++,DOCTYPE_DTD:Y++,DOCTYPE_DTD_QUOTED:Y++,COMMENT_STARTING:Y++,COMMENT:Y++,COMMENT_ENDING:Y++,COMMENT_ENDED:Y++,CDATA:Y++,CDATA_ENDING:Y++,CDATA_ENDING_2:Y++,PROC_INST:Y++,PROC_INST_BODY:Y++,PROC_INST_ENDING:Y++,OPEN_TAG:Y++,OPEN_TAG_SLASH:Y++,ATTRIB:Y++,ATTRIB_NAME:Y++,ATTRIB_NAME_SAW_WHITE:Y++,ATTRIB_VALUE:Y++,ATTRIB_VALUE_QUOTED:Y++,ATTRIB_VALUE_CLOSED:Y++,ATTRIB_VALUE_UNQUOTED:Y++,ATTRIB_VALUE_ENTITY_Q:Y++,ATTRIB_VALUE_ENTITY_U:Y++,CLOSE_TAG:Y++,CLOSE_TAG_SAW_WHITE:Y++,SCRIPT:Y++,SCRIPT_ENDING:Y++},A.XML_ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'"},A.ENTITIES={amp:"&",gt:">",lt:"<",quot:'"',apos:"'",AElig:198,Aacute:193,Acirc:194,Agrave:192,Aring:197,Atilde:195,Auml:196,Ccedil:199,ETH:208,Eacute:201,Ecirc:202,Egrave:200,Euml:203,Iacute:205,Icirc:206,Igrave:204,Iuml:207,Ntilde:209,Oacute:211,Ocirc:212,Ograve:210,Oslash:216,Otilde:213,Ouml:214,THORN:222,Uacute:218,Ucirc:219,Ugrave:217,Uuml:220,Yacute:221,aacute:225,acirc:226,aelig:230,agrave:224,aring:229,atilde:227,auml:228,ccedil:231,eacute:233,ecirc:234,egrave:232,eth:240,euml:235,iacute:237,icirc:238,igrave:236,iuml:239,ntilde:241,oacute:243,ocirc:244,ograve:242,oslash:248,otilde:245,ouml:246,szlig:223,thorn:254,uacute:250,ucirc:251,ugrave:249,uuml:252,yacute:253,yuml:255,copy:169,reg:174,nbsp:160,iexcl:161,cent:162,pound:163,curren:164,yen:165,brvbar:166,sect:167,uml:168,ordf:170,laquo:171,not:172,shy:173,macr:175,deg:176,plusmn:177,sup1:185,sup2:178,sup3:179,acute:180,micro:181,para:182,middot:183,cedil:184,ordm:186,raquo:187,frac14:188,frac12:189,frac34:190,iquest:191,times:215,divide:247,OElig:338,oelig:339,Scaron:352,scaron:353,Yuml:376,fnof:402,circ:710,tilde:732,Alpha:913,Beta:914,Gamma:915,Delta:916,Epsilon:917,Zeta:918,Eta:919,Theta:920,Iota:921,Kappa:922,Lambda:923,Mu:924,Nu:925,Xi:926,Omicron:927,Pi:928,Rho:929,Sigma:931,Tau:932,Upsilon:933,Phi:934,Chi:935,Psi:936,Omega:937,alpha:945,beta:946,gamma:947,delta:948,epsilon:949,zeta:950,eta:951,theta:952,iota:953,kappa:954,lambda:955,mu:956,nu:957,xi:958,omicron:959,pi:960,rho:961,sigmaf:962,sigma:963,tau:964,upsilon:965,phi:966,chi:967,psi:968,omega:969,thetasym:977,upsih:978,piv:982,ensp:8194,emsp:8195,thinsp:8201,zwnj:8204,zwj:8205,lrm:8206,rlm:8207,ndash:8211,mdash:8212,lsquo:8216,rsquo:8217,sbquo:8218,ldquo:8220,rdquo:8221,bdquo:8222,dagger:8224,Dagger:8225,bull:8226,hellip:8230,permil:8240,prime:8242,Prime:8243,lsaquo:8249,rsaquo:8250,oline:8254,frasl:8260,euro:8364,image:8465,weierp:8472,real:8476,trade:8482,alefsym:8501,larr:8592,uarr:8593,rarr:8594,darr:8595,harr:8596,crarr:8629,lArr:8656,uArr:8657,rArr:8658,dArr:8659,hArr:8660,forall:8704,part:8706,exist:8707,empty:8709,nabla:8711,isin:8712,notin:8713,ni:8715,prod:8719,sum:8721,minus:8722,lowast:8727,radic:8730,prop:8733,infin:8734,ang:8736,and:8743,or:8744,cap:8745,cup:8746,int:8747,there4:8756,sim:8764,cong:8773,asymp:8776,ne:8800,equiv:8801,le:8804,ge:8805,sub:8834,sup:8835,nsub:8836,sube:8838,supe:8839,oplus:8853,otimes:8855,perp:8869,sdot:8901,lceil:8968,rceil:8969,lfloor:8970,rfloor:8971,lang:9001,rang:9002,loz:9674,spades:9824,clubs:9827,hearts:9829,diams:9830},Object.keys(A.ENTITIES).forEach((function(t){var e=A.ENTITIES[t],s="number"==typeof e?String.fromCharCode(e):e;A.ENTITIES[t]=s})),A.STATE)A.STATE[A.STATE[F]]=F;function M(A,t,e){A[t]&&A[t](e)}function y(A,t,e){A.textNode&&L(A),M(A,t,e)}function L(A){A.textNode=R(A.opt,A.textNode),A.textNode&&M(A,"ontext",A.textNode),A.textNode=""}function R(A,t){return A.trim&&(t=t.trim()),A.normalize&&(t=t.replace(/\s+/g," ")),t}function m(A,t){return L(A),A.trackPosition&&(t+="\nLine: "+A.line+"\nColumn: "+A.column+"\nChar: "+A.c),t=new Error(t),A.error=t,M(A,"onerror",t),A}function x(A){return A.sawRoot&&!A.closedRoot&&p(A,"Unclosed root tag"),A.state!==Y.BEGIN&&A.state!==Y.BEGIN_WHITESPACE&&A.state!==Y.TEXT&&m(A,"Unexpected end"),L(A),A.c="",A.closed=!0,M(A,"onend"),n.call(A,A.strict,A.opt),A}function p(A,t){if("object"!=typeof A||!(A instanceof n))throw new Error("bad call to strictFail");A.strict&&m(A,t)}function G(A){A.strict||(A.tagName=A.tagName[A.looseCase]());var t=A.tags[A.tags.length-1]||A,e=A.tag={name:A.tagName,attributes:{}};A.opt.xmlns&&(e.ns=t.ns),A.attribList.length=0,y(A,"onopentagstart",e)}function W(A,t){var e=A.indexOf(":")<0?["",A]:A.split(":"),s=e[0],i=e[1];return t&&"xmlns"===A&&(s="xmlns",i=""),{prefix:s,local:i}}function P(A){if(A.strict||(A.attribName=A.attribName[A.looseCase]()),-1!==A.attribList.indexOf(A.attribName)||A.tag.attributes.hasOwnProperty(A.attribName))A.attribName=A.attribValue="";else{if(A.opt.xmlns){var t=W(A.attribName,!0),e=t.prefix,s=t.local;if("xmlns"===e)if("xml"===s&&A.attribValue!==w)p(A,"xml: prefix must be bound to "+w+"\nActual: "+A.attribValue);else if("xmlns"===s&&A.attribValue!==g)p(A,"xmlns: prefix must be bound to "+g+"\nActual: "+A.attribValue);else{var i=A.tag,n=A.tags[A.tags.length-1]||A;i.ns===n.ns&&(i.ns=Object.create(n.ns)),i.ns[s]=A.attribValue}A.attribList.push([A.attribName,A.attribValue])}else A.tag.attributes[A.attribName]=A.attribValue,y(A,"onattribute",{name:A.attribName,value:A.attribValue});A.attribName=A.attribValue=""}}function H(A,t){if(A.opt.xmlns){var e=A.tag,s=W(A.tagName);e.prefix=s.prefix,e.local=s.local,e.uri=e.ns[s.prefix]||"",e.prefix&&!e.uri&&(p(A,"Unbound namespace prefix: "+JSON.stringify(A.tagName)),e.uri=s.prefix);var i=A.tags[A.tags.length-1]||A;e.ns&&i.ns!==e.ns&&Object.keys(e.ns).forEach((function(t){y(A,"onopennamespace",{prefix:t,uri:e.ns[t]})}));for(var n=0,r=A.attribList.length;n",A.tagName="",void(A.state=Y.SCRIPT);y(A,"onscript",A.script),A.script=""}var t=A.tags.length,e=A.tagName;A.strict||(e=e[A.looseCase]());for(var s=e;t--&&A.tags[t].name!==s;)p(A,"Unexpected close tag");if(t<0)return p(A,"Unmatched closing tag: "+A.tagName),A.textNode+="",void(A.state=Y.TEXT);A.tagName=e;for(var i=A.tags.length;i-- >t;){var n=A.tag=A.tags.pop();A.tagName=A.tag.name,y(A,"onclosetag",A.tagName);var r={};for(var B in n.ns)r[B]=n.ns[B];var o=A.tags[A.tags.length-1]||A;A.opt.xmlns&&n.ns!==o.ns&&Object.keys(n.ns).forEach((function(t){var e=n.ns[t];y(A,"onclosenamespace",{prefix:t,uri:e})}))}0===t&&(A.closedRoot=!0),A.tagName=A.attribValue=A.attribName="",A.attribList.length=0,A.state=Y.TEXT}function U(A){var t,e=A.entity,s=e.toLowerCase(),i="";return A.ENTITIES[e]?A.ENTITIES[e]:A.ENTITIES[s]?A.ENTITIES[s]:("#"===(e=s).charAt(0)&&("x"===e.charAt(1)?(e=e.slice(2),i=(t=parseInt(e,16)).toString(16)):(e=e.slice(1),i=(t=parseInt(e,10)).toString(10))),e=e.replace(/^0+/,""),isNaN(t)||i.toLowerCase()!==e?(p(A,"Invalid character entity"),"&"+A.entity+";"):String.fromCodePoint(t))}function N(A,t){"<"===t?(A.state=Y.OPEN_WAKA,A.startTagPosition=A.position):u(t)||(p(A,"Non-whitespace before first tag."),A.textNode=t,A.state=Y.TEXT)}function T(A,t){var e="";return t1114111||d(r)!==r)throw RangeError("Invalid code point: "+r);r<=65535?e.push(r):(A=55296+((r-=65536)>>10),t=r%1024+56320,e.push(A,t)),(s+1===i||e.length>16384)&&(n+=b.apply(null,e),e.length=0)}return n},Object.defineProperty?Object.defineProperty(String,"fromCodePoint",{value:v,configurable:!0,writable:!0}):String.fromCodePoint=v)}(t)},86255:function(A,t,e){"use strict";var s=e(28651),i=e(89295),n=e(18890)(),r=e(68109),B=e(96785),o=s("%Math.floor%");A.exports=function(A,t){if("function"!=typeof A)throw new B("`fn` is not a function");if("number"!=typeof t||t<0||t>4294967295||o(t)!==t)throw new B("`length` must be a positive 32-bit integer");var e=arguments.length>2&&!!arguments[2],s=!0,E=!0;if("length"in A&&r){var w=r(A,"length");w&&!w.configurable&&(s=!1),w&&!w.writable&&(E=!1)}return(s||E||!e)&&(n?i(A,"length",t,!0,!0):i(A,"length",t)),A}},95304:function(A,t,e){"use strict";var s=e(89295),i=e(18890)(),n=e(61084).functionsHaveConfigurableNames(),r=e(96785);A.exports=function(A,t){if("function"!=typeof A)throw new r("`fn` is not a function");return arguments.length>2&&!!arguments[2]&&!n||(i?s(A,"name",t,!0,!0):s(A,"name",t)),A}},9760:function(A,t,e){A.exports=i;var s=e(64785).EventEmitter;function i(){s.call(this)}e(89784)(i,s),i.Readable=e(88261),i.Writable=e(29781),i.Duplex=e(14903),i.Transform=e(48569),i.PassThrough=e(17723),i.finished=e(12167),i.pipeline=e(43765),i.Stream=i,i.prototype.pipe=function(A,t){var e=this;function i(t){A.writable&&!1===A.write(t)&&e.pause&&e.pause()}function n(){e.readable&&e.resume&&e.resume()}e.on("data",i),A.on("drain",n),A._isStdio||t&&!1===t.end||(e.on("end",B),e.on("close",o));var r=!1;function B(){r||(r=!0,A.end())}function o(){r||(r=!0,"function"==typeof A.destroy&&A.destroy())}function E(A){if(w(),0===s.listenerCount(this,"error"))throw A}function w(){e.removeListener("data",i),A.removeListener("drain",n),e.removeListener("end",B),e.removeListener("close",o),e.removeListener("error",E),A.removeListener("error",E),e.removeListener("end",w),e.removeListener("close",w),A.removeListener("close",w)}return e.on("error",E),A.on("error",E),e.on("end",w),e.on("close",w),A.on("close",w),A.emit("pipe",e),A}},83797:function(A){"use strict";var t={};function e(A,e,s){s||(s=Error);var i=function(A){var t,s;function i(t,s,i){return A.call(this,function(A,t,s){return"string"==typeof e?e:e(A,t,s)}(t,s,i))||this}return s=A,(t=i).prototype=Object.create(s.prototype),t.prototype.constructor=t,t.__proto__=s,i}(s);i.prototype.name=s.name,i.prototype.code=A,t[A]=i}function s(A,t){if(Array.isArray(A)){var e=A.length;return A=A.map((function(A){return String(A)})),e>2?"one of ".concat(t," ").concat(A.slice(0,e-1).join(", "),", or ")+A[e-1]:2===e?"one of ".concat(t," ").concat(A[0]," or ").concat(A[1]):"of ".concat(t," ").concat(A[0])}return"of ".concat(t," ").concat(String(A))}e("ERR_INVALID_OPT_VALUE",(function(A,t){return'The value "'+t+'" is invalid for option "'+A+'"'}),TypeError),e("ERR_INVALID_ARG_TYPE",(function(A,t,e){var i,n,r,B,o;if("string"==typeof t&&(n="not ",t.substr(0,4)===n)?(i="must not be",t=t.replace(/^not /,"")):i="must be",function(A,t,e){return(void 0===e||e>A.length)&&(e=A.length),A.substring(e-9,e)===t}(A," argument"))r="The ".concat(A," ").concat(i," ").concat(s(t,"type"));else{var E=("number"!=typeof o&&(o=0),o+1>(B=A).length||-1===B.indexOf(".",o)?"argument":"property");r='The "'.concat(A,'" ').concat(E," ").concat(i," ").concat(s(t,"type"))}return r+". Received type ".concat(typeof e)}),TypeError),e("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),e("ERR_METHOD_NOT_IMPLEMENTED",(function(A){return"The "+A+" method is not implemented"})),e("ERR_STREAM_PREMATURE_CLOSE","Premature close"),e("ERR_STREAM_DESTROYED",(function(A){return"Cannot call "+A+" after a stream was destroyed"})),e("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),e("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),e("ERR_STREAM_WRITE_AFTER_END","write after end"),e("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),e("ERR_UNKNOWN_ENCODING",(function(A){return"Unknown encoding: "+A}),TypeError),e("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),A.exports.F=t},14903:function(A,t,e){"use strict";var s=e(9964),i=Object.keys||function(A){var t=[];for(var e in A)t.push(e);return t};A.exports=w;var n=e(88261),r=e(29781);e(89784)(w,n);for(var B=i(r.prototype),o=0;o0)if("string"==typeof t||B.objectMode||Object.getPrototypeOf(t)===o.prototype||(t=function(A){return o.from(A)}(t)),s)B.endEmitted?b(A,new D):M(A,B,t,!0);else if(B.ended)b(A,new I);else{if(B.destroyed)return!1;B.reading=!1,B.decoder&&!e?(t=B.decoder.write(t),B.objectMode||0!==t.length?M(A,B,t,!1):x(A,B)):M(A,B,t,!1)}else s||(B.reading=!1,x(A,B));return!B.ended&&(B.lengtht.highWaterMark&&(t.highWaterMark=function(A){return A>=y?A=y:(A--,A|=A>>>1,A|=A>>>2,A|=A>>>4,A|=A>>>8,A|=A>>>16,A++),A}(A)),A<=t.length?A:t.ended?t.length:(t.needReadable=!0,0))}function R(A){var t=A._readableState;n("emitReadable",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(n("emitReadable",t.flowing),t.emittedReadable=!0,i.nextTick(m,A))}function m(A){var t=A._readableState;n("emitReadable_",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(A.emit("readable"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,H(A)}function x(A,t){t.readingMore||(t.readingMore=!0,i.nextTick(p,A,t))}function p(A,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:A.listenerCount("data")>0&&A.resume()}function W(A){n("readable nexttick read 0"),A.read(0)}function P(A,t){n("resume",t.reading),t.reading||A.read(0),t.resumeScheduled=!1,A.emit("resume"),H(A),t.flowing&&!t.reading&&A.read(0)}function H(A){var t=A._readableState;for(n("flow",t.flowing);t.flowing&&null!==A.read(););}function S(A,t){return 0===t.length?null:(t.objectMode?e=t.buffer.shift():!A||A>=t.length?(e=t.decoder?t.buffer.join(""):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):e=t.buffer.consume(A,t.decoder),e);var e}function U(A){var t=A._readableState;n("endReadable",t.endEmitted),t.endEmitted||(t.ended=!0,i.nextTick(N,t,A))}function N(A,t){if(n("endReadableNT",A.endEmitted,A.length),!A.endEmitted&&0===A.length&&(A.endEmitted=!0,t.readable=!1,t.emit("end"),A.autoDestroy)){var e=t._writableState;(!e||e.autoDestroy&&e.finished)&&t.destroy()}}function T(A,t){for(var e=0,s=A.length;e=t.highWaterMark:t.length>0)||t.ended))return n("read: emitReadable",t.length,t.ended),0===t.length&&t.ended?U(this):R(this),null;if(0===(A=L(A,t))&&t.ended)return 0===t.length&&U(this),null;var s,i=t.needReadable;return n("need readable",i),(0===t.length||t.length-A0?S(A,t):null)?(t.needReadable=t.length<=t.highWaterMark,A=0):(t.length-=A,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),e!==A&&t.ended&&U(this)),null!==s&&this.emit("data",s),s},Y.prototype._read=function(A){b(this,new f("_read()"))},Y.prototype.pipe=function(A,t){var e=this,s=this._readableState;switch(s.pipesCount){case 0:s.pipes=A;break;case 1:s.pipes=[s.pipes,A];break;default:s.pipes.push(A)}s.pipesCount+=1,n("pipe count=%d opts=%j",s.pipesCount,t);var B=t&&!1===t.end||A===i.stdout||A===i.stderr?C:o;function o(){n("onend"),A.end()}s.endEmitted?i.nextTick(B):e.once("end",B),A.on("unpipe",(function t(i,r){n("onunpipe"),i===e&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,n("cleanup"),A.removeListener("close",c),A.removeListener("finish",Q),A.removeListener("drain",E),A.removeListener("error",a),A.removeListener("unpipe",t),e.removeListener("end",o),e.removeListener("end",C),e.removeListener("data",g),w=!0,!s.awaitDrain||A._writableState&&!A._writableState.needDrain||E())}));var E=function(A){return function(){var t=A._readableState;n("pipeOnDrain",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&r(A,"data")&&(t.flowing=!0,H(A))}}(e);A.on("drain",E);var w=!1;function g(t){n("ondata");var i=A.write(t);n("dest.write",i),!1===i&&((1===s.pipesCount&&s.pipes===A||s.pipesCount>1&&-1!==T(s.pipes,A))&&!w&&(n("false write response, pause",s.awaitDrain),s.awaitDrain++),e.pause())}function a(t){n("onerror",t),C(),A.removeListener("error",a),0===r(A,"error")&&b(A,t)}function c(){A.removeListener("finish",Q),C()}function Q(){n("onfinish"),A.removeListener("close",c),C()}function C(){n("unpipe"),e.unpipe(A)}return e.on("data",g),function(A,t,e){if("function"==typeof A.prependListener)return A.prependListener(t,e);A._events&&A._events[t]?Array.isArray(A._events[t])?A._events[t].unshift(e):A._events[t]=[e,A._events[t]]:A.on(t,e)}(A,"error",a),A.once("close",c),A.once("finish",Q),A.emit("pipe",e),s.flowing||(n("pipe resume"),e.resume()),A},Y.prototype.unpipe=function(A){var t=this._readableState,e={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return A&&A!==t.pipes||(A||(A=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,A&&A.emit("unpipe",this,e)),this;if(!A){var s=t.pipes,i=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var n=0;n0,!1!==s.flowing&&this.resume()):"readable"===A&&(s.endEmitted||s.readableListening||(s.readableListening=s.needReadable=!0,s.flowing=!1,s.emittedReadable=!1,n("on readable",s.length,s.reading),s.length?R(this):s.reading||i.nextTick(W,this))),e},Y.prototype.addListener=Y.prototype.on,Y.prototype.removeListener=function(A,t){var e=B.prototype.removeListener.call(this,A,t);return"readable"===A&&i.nextTick(G,this),e},Y.prototype.removeAllListeners=function(A){var t=B.prototype.removeAllListeners.apply(this,arguments);return"readable"!==A&&void 0!==A||i.nextTick(G,this),t},Y.prototype.resume=function(){var A=this._readableState;return A.flowing||(n("resume"),A.flowing=!A.readableListening,function(A,t){t.resumeScheduled||(t.resumeScheduled=!0,i.nextTick(P,A,t))}(this,A)),A.paused=!1,this},Y.prototype.pause=function(){return n("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(n("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this},Y.prototype.wrap=function(A){var t=this,e=this._readableState,s=!1;for(var i in A.on("end",(function(){if(n("wrapped end"),e.decoder&&!e.ended){var A=e.decoder.end();A&&A.length&&t.push(A)}t.push(null)})),A.on("data",(function(i){n("wrapped data"),e.decoder&&(i=e.decoder.write(i)),e.objectMode&&null==i||(e.objectMode||i&&i.length)&&(t.push(i)||(s=!0,A.pause()))})),A)void 0===this[i]&&"function"==typeof A[i]&&(this[i]=function(t){return function(){return A[t].apply(A,arguments)}}(i));for(var r=0;r-1))throw new D(A);return this._writableState.defaultEncoding=A,this},Object.defineProperty(Y.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(Y.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Y.prototype._write=function(A,t,e){e(new C("_write()"))},Y.prototype._writev=null,Y.prototype.end=function(A,t,e){var s=this._writableState;return"function"==typeof A?(e=A,A=null,t=null):"function"==typeof t&&(e=t,t=null),null!=A&&this.write(A,t),s.corked&&(s.corked=1,this.uncork()),s.ending||function(A,t,e){t.ending=!0,m(A,t),e&&(t.finished?i.nextTick(e):A.once("finish",e)),t.ended=!0,A.writable=!1}(this,s,e),this},Object.defineProperty(Y.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(Y.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(A){this._writableState&&(this._writableState.destroyed=A)}}),Y.prototype.destroy=g.destroy,Y.prototype._undestroy=g.undestroy,Y.prototype._destroy=function(A,t){t(A)}},79676:function(A,t,e){"use strict";var s,i=e(9964);function n(A,t,e){return(t=function(A){var t=function(A,t){if("object"!=typeof A||null===A)return A;var e=A[Symbol.toPrimitive];if(void 0!==e){var s=e.call(A,"string");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(A)}(A);return"symbol"==typeof t?t:String(t)}(t))in A?Object.defineProperty(A,t,{value:e,enumerable:!0,configurable:!0,writable:!0}):A[t]=e,A}var r=e(12167),B=Symbol("lastResolve"),o=Symbol("lastReject"),E=Symbol("error"),w=Symbol("ended"),g=Symbol("lastPromise"),a=Symbol("handlePromise"),c=Symbol("stream");function Q(A,t){return{value:A,done:t}}function C(A){var t=A[B];if(null!==t){var e=A[c].read();null!==e&&(A[g]=null,A[B]=null,A[o]=null,t(Q(e,!1)))}}function h(A){i.nextTick(C,A)}var u=Object.getPrototypeOf((function(){})),l=Object.setPrototypeOf((n(s={get stream(){return this[c]},next:function(){var A=this,t=this[E];if(null!==t)return Promise.reject(t);if(this[w])return Promise.resolve(Q(void 0,!0));if(this[c].destroyed)return new Promise((function(t,e){i.nextTick((function(){A[E]?e(A[E]):t(Q(void 0,!0))}))}));var e,s=this[g];if(s)e=new Promise(function(A,t){return function(e,s){A.then((function(){t[w]?e(Q(void 0,!0)):t[a](e,s)}),s)}}(s,this));else{var n=this[c].read();if(null!==n)return Promise.resolve(Q(n,!1));e=new Promise(this[a])}return this[g]=e,e}},Symbol.asyncIterator,(function(){return this})),n(s,"return",(function(){var A=this;return new Promise((function(t,e){A[c].destroy(null,(function(A){A?e(A):t(Q(void 0,!0))}))}))})),s),u);A.exports=function(A){var t,e=Object.create(l,(n(t={},c,{value:A,writable:!0}),n(t,B,{value:null,writable:!0}),n(t,o,{value:null,writable:!0}),n(t,E,{value:null,writable:!0}),n(t,w,{value:A._readableState.endEmitted,writable:!0}),n(t,a,{value:function(A,t){var s=e[c].read();s?(e[g]=null,e[B]=null,e[o]=null,A(Q(s,!1))):(e[B]=A,e[o]=t)},writable:!0}),t));return e[g]=null,r(A,(function(A){if(A&&"ERR_STREAM_PREMATURE_CLOSE"!==A.code){var t=e[o];return null!==t&&(e[g]=null,e[B]=null,e[o]=null,t(A)),void(e[E]=A)}var s=e[B];null!==s&&(e[g]=null,e[B]=null,e[o]=null,s(Q(void 0,!0))),e[w]=!0})),A.on("readable",h.bind(null,e)),e}},37385:function(A,t,e){"use strict";var s=e(9964);function i(A,t){r(A,t),n(A)}function n(A){A._writableState&&!A._writableState.emitClose||A._readableState&&!A._readableState.emitClose||A.emit("close")}function r(A,t){A.emit("error",t)}A.exports={destroy:function(A,t){var e=this,B=this._readableState&&this._readableState.destroyed,o=this._writableState&&this._writableState.destroyed;return B||o?(t?t(A):A&&(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted=!0,s.nextTick(r,this,A)):s.nextTick(r,this,A)),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(A||null,(function(A){!t&&A?e._writableState?e._writableState.errorEmitted?s.nextTick(n,e):(e._writableState.errorEmitted=!0,s.nextTick(i,e,A)):s.nextTick(i,e,A):t?(s.nextTick(n,e),t(A)):s.nextTick(n,e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)},errorOrDestroy:function(A,t){var e=A._readableState,s=A._writableState;e&&e.autoDestroy||s&&s.autoDestroy?A.destroy(t):A.emit("error",t)}}},12167:function(A,t,e){"use strict";var s=e(83797).F.ERR_STREAM_PREMATURE_CLOSE;function i(){}A.exports=function A(t,e,n){if("function"==typeof e)return A(t,null,e);e||(e={}),n=function(A){var t=!1;return function(){if(!t){t=!0;for(var e=arguments.length,s=new Array(e),i=0;i0,(function(A){w||(w=A),A&&a.forEach(o),n||(a.forEach(o),g(w))}))}));return t.reduce(E)}},68130:function(A,t,e){"use strict";var s=e(83797).F.ERR_INVALID_OPT_VALUE;A.exports={getHighWaterMark:function(A,t,e,i){var n=function(A,t,e){return null!=A.highWaterMark?A.highWaterMark:t?A[e]:null}(t,i,e);if(null!=n){if(!isFinite(n)||Math.floor(n)!==n||n<0)throw new s(i?e:"highWaterMark",n);return Math.floor(n)}return A.objectMode?16:16384}}},99018:function(A,t,e){A.exports=e(64785).EventEmitter},43143:function(A,t,e){"use strict";var s=e(72361).Buffer,i=s.isEncoding||function(A){switch((A=""+A)&&A.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};function n(A){var t;switch(this.encoding=function(A){var t=function(A){if(!A)return"utf8";for(var t;;)switch(A){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return A;default:if(t)return;A=(""+A).toLowerCase(),t=!0}}(A);if("string"!=typeof t&&(s.isEncoding===i||!i(A)))throw new Error("Unknown encoding: "+A);return t||A}(A),this.encoding){case"utf16le":this.text=o,this.end=E,t=4;break;case"utf8":this.fillLast=B,t=4;break;case"base64":this.text=w,this.end=g,t=3;break;default:return this.write=a,void(this.end=c)}this.lastNeed=0,this.lastTotal=0,this.lastChar=s.allocUnsafe(t)}function r(A){return A<=127?0:A>>5==6?2:A>>4==14?3:A>>3==30?4:A>>6==2?-1:-2}function B(A){var t=this.lastTotal-this.lastNeed,e=function(A,t,e){if(128!=(192&t[0]))return A.lastNeed=0,"�";if(A.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return A.lastNeed=1,"�";if(A.lastNeed>2&&t.length>2&&128!=(192&t[2]))return A.lastNeed=2,"�"}}(this,A);return void 0!==e?e:this.lastNeed<=A.length?(A.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(A.copy(this.lastChar,t,0,A.length),void(this.lastNeed-=A.length))}function o(A,t){if((A.length-t)%2==0){var e=A.toString("utf16le",t);if(e){var s=e.charCodeAt(e.length-1);if(s>=55296&&s<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=A[A.length-2],this.lastChar[1]=A[A.length-1],e.slice(0,-1)}return e}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=A[A.length-1],A.toString("utf16le",t,A.length-1)}function E(A){var t=A&&A.length?this.write(A):"";if(this.lastNeed){var e=this.lastTotal-this.lastNeed;return t+this.lastChar.toString("utf16le",0,e)}return t}function w(A,t){var e=(A.length-t)%3;return 0===e?A.toString("base64",t):(this.lastNeed=3-e,this.lastTotal=3,1===e?this.lastChar[0]=A[A.length-1]:(this.lastChar[0]=A[A.length-2],this.lastChar[1]=A[A.length-1]),A.toString("base64",t,A.length-e))}function g(A){var t=A&&A.length?this.write(A):"";return this.lastNeed?t+this.lastChar.toString("base64",0,3-this.lastNeed):t}function a(A){return A.toString(this.encoding)}function c(A){return A&&A.length?this.write(A):""}t.I=n,n.prototype.write=function(A){if(0===A.length)return"";var t,e;if(this.lastNeed){if(void 0===(t=this.fillLast(A)))return"";e=this.lastNeed,this.lastNeed=0}else e=0;return e=0?(i>0&&(A.lastNeed=i-1),i):--s=0?(i>0&&(A.lastNeed=i-2),i):--s=0?(i>0&&(2===i?i=0:A.lastNeed=i-3),i):0}(this,A,t);if(!this.lastNeed)return A.toString("utf8",t);this.lastTotal=e;var s=A.length-(e-this.lastNeed);return A.copy(this.lastChar,0,s),A.toString("utf8",t,s)},n.prototype.fillLast=function(A){if(this.lastNeed<=A.length)return A.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);A.copy(this.lastChar,this.lastTotal-this.lastNeed,0,A.length),this.lastNeed-=A.length}},3483:function(A){function t(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function e(A,e){this.source=A,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new t,this.dtree=new t}var s=new t,i=new t,n=new Uint8Array(30),r=new Uint16Array(30),B=new Uint8Array(30),o=new Uint16Array(30),E=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),w=new t,g=new Uint8Array(320);function a(A,t,e,s){var i,n;for(i=0;i>>=1,t}function h(A,t,e){if(!t)return e;for(;A.bitcount<24;)A.tag|=A.source[A.sourceIndex++]<>>16-t;return A.tag>>>=t,A.bitcount-=t,s+e}function u(A,t){for(;A.bitcount<24;)A.tag|=A.source[A.sourceIndex++]<>>=1,++i,e+=t.table[i],s-=t.table[i]}while(s>=0);return A.tag=n,A.bitcount-=i,t.trans[e+s]}function l(A,t,e){var s,i,n,r,B,o;for(s=h(A,5,257),i=h(A,5,1),n=h(A,4,4),r=0;r<19;++r)g[r]=0;for(r=0;r8;)A.sourceIndex--,A.bitcount-=8;if((t=256*(t=A.source[A.sourceIndex+1])+A.source[A.sourceIndex])!==(65535&~(256*A.source[A.sourceIndex+3]+A.source[A.sourceIndex+2])))return-3;for(A.sourceIndex+=4,e=t;e;--e)A.dest[A.destLen++]=A.source[A.sourceIndex++];return A.bitcount=0,0}!function(A,t){var e;for(e=0;e<7;++e)A.table[e]=0;for(A.table[7]=24,A.table[8]=152,A.table[9]=112,e=0;e<24;++e)A.trans[e]=256+e;for(e=0;e<144;++e)A.trans[24+e]=e;for(e=0;e<8;++e)A.trans[168+e]=280+e;for(e=0;e<112;++e)A.trans[176+e]=144+e;for(e=0;e<5;++e)t.table[e]=0;for(t.table[5]=32,e=0;e<32;++e)t.trans[e]=e}(s,i),a(n,r,4,3),a(B,o,2,1),n[28]=0,r[28]=258,A.exports=function(A,t){var n,r,B=new e(A,t);do{switch(n=C(B),h(B,2,0)){case 0:r=f(B);break;case 1:r=I(B,s,i);break;case 2:l(B,B.ltree,B.dtree),r=I(B,B.ltree,B.dtree);break;default:r=-3}if(0!==r)throw new Error("Data error")}while(!n);return B.destLen=i)return A;switch(A){case"%s":return String(s[e++]);case"%d":return Number(s[e++]);case"%j":try{return JSON.stringify(s[e++])}catch(A){return"[Circular]"}default:return A}})),B=s[e];e=3&&(s.depth=arguments[2]),arguments.length>=4&&(s.colors=arguments[3]),h(e)?s.showHidden=e:e&&t._extend(s,e),f(s.showHidden)&&(s.showHidden=!1),f(s.depth)&&(s.depth=2),f(s.colors)&&(s.colors=!1),f(s.customInspect)&&(s.customInspect=!0),s.colors&&(s.stylize=w),a(s,A,s.depth)}function w(A,t){var e=E.styles[t];return e?"["+E.colors[e][0]+"m"+A+"["+E.colors[e][1]+"m":A}function g(A,t){return A}function a(A,e,s){if(A.customInspect&&e&&Y(e.inspect)&&e.inspect!==t.inspect&&(!e.constructor||e.constructor.prototype!==e)){var i=e.inspect(s,A);return I(i)||(i=a(A,i,s)),i}var n=function(A,t){if(f(t))return A.stylize("undefined","undefined");if(I(t)){var e="'"+JSON.stringify(t).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return A.stylize(e,"string")}return l(t)?A.stylize(""+t,"number"):h(t)?A.stylize(""+t,"boolean"):u(t)?A.stylize("null","null"):void 0}(A,e);if(n)return n;var r=Object.keys(e),B=function(A){var t={};return A.forEach((function(A,e){t[A]=!0})),t}(r);if(A.showHidden&&(r=Object.getOwnPropertyNames(e)),v(e)&&(r.indexOf("message")>=0||r.indexOf("description")>=0))return c(e);if(0===r.length){if(Y(e)){var o=e.name?": "+e.name:"";return A.stylize("[Function"+o+"]","special")}if(D(e))return A.stylize(RegExp.prototype.toString.call(e),"regexp");if(d(e))return A.stylize(Date.prototype.toString.call(e),"date");if(v(e))return c(e)}var E,w="",g=!1,b=["{","}"];return C(e)&&(g=!0,b=["[","]"]),Y(e)&&(w=" [Function"+(e.name?": "+e.name:"")+"]"),D(e)&&(w=" "+RegExp.prototype.toString.call(e)),d(e)&&(w=" "+Date.prototype.toUTCString.call(e)),v(e)&&(w=" "+c(e)),0!==r.length||g&&0!=e.length?s<0?D(e)?A.stylize(RegExp.prototype.toString.call(e),"regexp"):A.stylize("[Object]","special"):(A.seen.push(e),E=g?function(A,t,e,s,i){for(var n=[],r=0,B=t.length;r60?e[0]+(""===t?"":t+"\n ")+" "+A.join(",\n ")+" "+e[1]:e[0]+t+" "+A.join(", ")+" "+e[1]}(E,w,b)):b[0]+w+b[1]}function c(A){return"["+Error.prototype.toString.call(A)+"]"}function Q(A,t,e,s,i,n){var r,B,o;if((o=Object.getOwnPropertyDescriptor(t,i)||{value:t[i]}).get?B=o.set?A.stylize("[Getter/Setter]","special"):A.stylize("[Getter]","special"):o.set&&(B=A.stylize("[Setter]","special")),L(s,i)||(r="["+i+"]"),B||(A.seen.indexOf(o.value)<0?(B=u(e)?a(A,o.value,null):a(A,o.value,e-1)).indexOf("\n")>-1&&(B=n?B.split("\n").map((function(A){return" "+A})).join("\n").slice(2):"\n"+B.split("\n").map((function(A){return" "+A})).join("\n")):B=A.stylize("[Circular]","special")),f(r)){if(n&&i.match(/^\d+$/))return B;(r=JSON.stringify(""+i)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(r=r.slice(1,-1),r=A.stylize(r,"name")):(r=r.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),r=A.stylize(r,"string"))}return r+": "+B}function C(A){return Array.isArray(A)}function h(A){return"boolean"==typeof A}function u(A){return null===A}function l(A){return"number"==typeof A}function I(A){return"string"==typeof A}function f(A){return void 0===A}function D(A){return b(A)&&"[object RegExp]"===F(A)}function b(A){return"object"==typeof A&&null!==A}function d(A){return b(A)&&"[object Date]"===F(A)}function v(A){return b(A)&&("[object Error]"===F(A)||A instanceof Error)}function Y(A){return"function"==typeof A}function F(A){return Object.prototype.toString.call(A)}function M(A){return A<10?"0"+A.toString(10):A.toString(10)}t.debuglog=function(A){if(A=A.toUpperCase(),!r[A])if(B.test(A)){var e=s.pid;r[A]=function(){var s=t.format.apply(t,arguments);console.error("%s %d: %s",A,e,s)}}else r[A]=function(){};return r[A]},t.inspect=E,E.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},E.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},t.types=e(29490),t.isArray=C,t.isBoolean=h,t.isNull=u,t.isNullOrUndefined=function(A){return null==A},t.isNumber=l,t.isString=I,t.isSymbol=function(A){return"symbol"==typeof A},t.isUndefined=f,t.isRegExp=D,t.types.isRegExp=D,t.isObject=b,t.isDate=d,t.types.isDate=d,t.isError=v,t.types.isNativeError=v,t.isFunction=Y,t.isPrimitive=function(A){return null===A||"boolean"==typeof A||"number"==typeof A||"string"==typeof A||"symbol"==typeof A||void 0===A},t.isBuffer=e(41201);var y=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function L(A,t){return Object.prototype.hasOwnProperty.call(A,t)}t.log=function(){var A,e;console.log("%s - %s",(e=[M((A=new Date).getHours()),M(A.getMinutes()),M(A.getSeconds())].join(":"),[A.getDate(),y[A.getMonth()],e].join(" ")),t.format.apply(t,arguments))},t.inherits=e(89784),t._extend=function(A,t){if(!t||!b(t))return A;for(var e=Object.keys(t),s=e.length;s--;)A[e[s]]=t[e[s]];return A};var R="undefined"!=typeof Symbol?Symbol("util.promisify.custom"):void 0;function m(A,t){if(!A){var e=new Error("Promise was rejected with a falsy value");e.reason=A,A=e}return t(A)}t.promisify=function(A){if("function"!=typeof A)throw new TypeError('The "original" argument must be of type Function');if(R&&A[R]){var t;if("function"!=typeof(t=A[R]))throw new TypeError('The "util.promisify.custom" argument must be of type Function');return Object.defineProperty(t,R,{value:t,enumerable:!1,writable:!1,configurable:!0}),t}function t(){for(var t,e,s=new Promise((function(A,s){t=A,e=s})),i=[],n=0;n-1?t:"Object"===t&&function(A){var t=!1;return s(C,(function(e,s){if(!t)try{e(A),t=a(s,1)}catch(A){}})),t}(A)}return B?function(A){var t=!1;return s(C,(function(e,s){if(!t)try{"$"+e(A)===s&&(t=a(s,1))}catch(A){}})),t}(A):null}},52242:function(A,t,e){A.exports=e(45349)},45349:function(A,t,e){!function(){var t;if(A.exports&&!e.g.xmldocAssumeBrowser)t=e(61733);else if(!(t=this.sax))throw new Error("Expected sax to be defined. Make sure you're including sax.js before this file.");function s(A,t){if(!t){var e=o[o.length-1];e.parser&&(t=e.parser)}this.name=A.name,this.attr=A.attributes,this.val="",this.children=[],this.firstChild=null,this.lastChild=null,this.line=t?t.line:null,this.column=t?t.column:null,this.position=t?t.position:null,this.startTagPosition=t?t.startTagPosition:null}function i(A){this.text=A}function n(A){this.cdata=A}function r(A){this.comment=A}function B(A){if(A&&(A=A.toString().trim()),!A)throw new Error("No XML to parse!");var e;this.doctype="",this.parser=t.parser(!0),(e=this.parser).onopentag=E,e.onclosetag=w,e.ontext=g,e.oncdata=a,e.oncomment=c,e.ondoctype=Q,e.onerror=C,o=[this];try{this.parser.write(A)}finally{delete this.parser}}s.prototype._addChild=function(A){this.children.push(A),this.firstChild||(this.firstChild=A),this.lastChild=A},s.prototype._opentag=function(A){var t=new s(A);this._addChild(t),o.unshift(t)},s.prototype._closetag=function(){o.shift()},s.prototype._text=function(A){void 0!==this.children&&(this.val+=A,this._addChild(new i(A)))},s.prototype._cdata=function(A){this.val+=A,this._addChild(new n(A))},s.prototype._comment=function(A){void 0!==this.children&&this._addChild(new r(A))},s.prototype._error=function(A){throw A},s.prototype.eachChild=function(A,t){for(var e=0,s=this.children.length;e1?e.attr[t[1]]:e.val:void 0},s.prototype.toString=function(A){return this.toStringWithIndent("",A)},s.prototype.toStringWithIndent=function(A,t){var e=A+"<"+this.name,s=t&&t.compressed?"":"\n";for(var i in t&&t.preserveWhitespace,this.attr)Object.prototype.hasOwnProperty.call(this.attr,i)&&(e+=" "+i+'="'+h(this.attr[i])+'"');if(1===this.children.length&&"element"!==this.children[0].type)e+=">"+this.children[0].toString(t)+"";else if(this.children.length){e+=">"+s;for(var n=A+(t&&t.compressed?"":" "),r=0,B=this.children.length;r"}else t&&t.html?-1!==["area","base","br","col","embed","frame","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"].indexOf(this.name)?e+="/>":e+=">":e+="/>";return e},i.prototype.toString=function(A){return u(h(this.text),A)},i.prototype.toStringWithIndent=function(A,t){return A+this.toString(t)},n.prototype.toString=function(A){return""},n.prototype.toStringWithIndent=function(A,t){return A+this.toString(t)},r.prototype.toString=function(A){return"\x3c!--"+u(h(this.comment),A)+"--\x3e"},r.prototype.toStringWithIndent=function(A,t){return A+this.toString(t)},s.prototype.type="element",i.prototype.type="text",n.prototype.type="cdata",r.prototype.type="comment",function(A,t){for(var e in t)t.hasOwnProperty(e)&&(A[e]=t[e])}(B.prototype,s.prototype),B.prototype._opentag=function(A){void 0===this.children?s.call(this,A):s.prototype._opentag.apply(this,arguments)},B.prototype._doctype=function(A){this.doctype+=A};var o=null;function E(){o[0]&&o[0]._opentag.apply(o[0],arguments)}function w(){o[0]&&o[0]._closetag.apply(o[0],arguments)}function g(){o[0]&&o[0]._text.apply(o[0],arguments)}function a(){o[0]&&o[0]._cdata.apply(o[0],arguments)}function c(){o[0]&&o[0]._comment.apply(o[0],arguments)}function Q(){o[0]&&o[0]._doctype.apply(o[0],arguments)}function C(){o[0]&&o[0]._error.apply(o[0],arguments)}function h(A){return A.toString().replace(/&/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")}function u(A,t){var e=A;return t&&t.trimmed&&A.length>25&&(e=e.substring(0,25).trim()+"…"),t&&t.preserveWhitespace||(e=e.trim()),e}A.exports&&!e.g.xmldocAssumeBrowser?(A.exports.XmlDocument=B,A.exports.XmlElement=s,A.exports.XmlTextNode=i,A.exports.XmlCDataNode=n,A.exports.XmlCommentNode=r):(this.XmlDocument=B,this.XmlElement=s,this.XmlTextNode=i,this.XmlCDataNode=n,this.XmlCommentNode=r)}()},7785:function(A,t,e){"use strict";function s(A){this.fs=A,this.resolving={}}"undefined"==typeof window||window.Promise||e(98168),e(83043),s.prototype.resolve=function(A,t){if(!this.resolving[A]){var e=this;this.resolving[A]=new Promise((function(s,i){0===A.toLowerCase().indexOf("https://")||0===A.toLowerCase().indexOf("http://")?e.fs.existsSync(A)?s():function(A,t){return new Promise((function(e,s){var i=new XMLHttpRequest;for(var n in i.open("GET",A,!0),t)i.setRequestHeader(n,t[n]);i.responseType="arraybuffer",i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<300||setTimeout((function(){s(new TypeError('Failed to fetch (url: "'+A+'")'))}),0))},i.onload=function(){i.status>=200&&i.status<300&&e(i.response)},i.onerror=function(){setTimeout((function(){s(new TypeError('Network request failed (url: "'+A+'")'))}),0)},i.ontimeout=function(){setTimeout((function(){s(new TypeError('Network request failed (url: "'+A+'")'))}),0)},i.send()}))}(A,t).then((function(t){e.fs.writeFileSync(A,t),s()}),(function(A){i(A)})):s()}))}return this.resolving[A]},s.prototype.resolved=function(){var A=this;return new Promise((function(t,e){Promise.all(Object.values(A.resolving)).then((function(){t()}),(function(A){e(A)}))}))},A.exports=s},45314:function(A,t,e){"use strict";var s=e(50621).Buffer,i=e(91867).isFunction,n=e(91867).isUndefined,r=(e(91867).isNull,e(44134).saveAs),B={Roboto:{normal:"Roboto-Regular.ttf",bold:"Roboto-Medium.ttf",italics:"Roboto-Italic.ttf",bolditalics:"Roboto-MediumItalic.ttf"}};function o(A,t,e,s){this.docDefinition=A,this.tableLayouts=t||null,this.fonts=e||B,this.vfs=s}o.prototype._createDoc=function(A,t){var s=function(A){return"object"==typeof A?{url:A.url,headers:A.headers}:{url:A,headers:{}}};A=A||{},this.tableLayouts&&(A.tableLayouts=this.tableLayouts);var n=new(e(81566))(this.fonts);if(e(48181).bindFS(this.vfs),!i(t))return n.createPdfKitDocument(this.docDefinition,A);var r=new(e(7785))(e(48181));for(var B in this.fonts)if(this.fonts.hasOwnProperty(B)){if(this.fonts[B].normal)if(Array.isArray(this.fonts[B].normal)){var o=s(this.fonts[B].normal[0]);r.resolve(o.url,o.headers),this.fonts[B].normal[0]=o.url}else o=s(this.fonts[B].normal),r.resolve(o.url,o.headers),this.fonts[B].normal=o.url;this.fonts[B].bold&&(Array.isArray(this.fonts[B].bold)?(o=s(this.fonts[B].bold[0]),r.resolve(o.url,o.headers),this.fonts[B].bold[0]=o.url):(o=s(this.fonts[B].bold),r.resolve(o.url,o.headers),this.fonts[B].bold=o.url)),this.fonts[B].italics&&(Array.isArray(this.fonts[B].italics)?(o=s(this.fonts[B].italics[0]),r.resolve(o.url,o.headers),this.fonts[B].italics[0]=o.url):(o=s(this.fonts[B].italics),r.resolve(o.url,o.headers),this.fonts[B].italics=o.url)),this.fonts[B].bolditalics&&(Array.isArray(this.fonts[B].bolditalics)?(o=s(this.fonts[B].bolditalics[0]),r.resolve(o.url,o.headers),this.fonts[B].bolditalics[0]=o.url):(o=s(this.fonts[B].bolditalics),r.resolve(o.url,o.headers),this.fonts[B].bolditalics=o.url))}if(this.docDefinition.images)for(var E in this.docDefinition.images)this.docDefinition.images.hasOwnProperty(E)&&(o=s(this.docDefinition.images[E]),r.resolve(o.url,o.headers),this.docDefinition.images[E]=o.url);var w=this;r.resolved().then((function(){var e=n.createPdfKitDocument(w.docDefinition,A);t(e)}),(function(A){throw A}))},o.prototype._flushDoc=function(A,t){var e,i=[];A.on("readable",(function(){for(var t;null!==(t=A.read(9007199254740991));)i.push(t)})),A.on("end",(function(){e=s.concat(i),t(e,A._pdfMakePages)})),A.end()},o.prototype._getPages=function(A,t){if(!t)throw"_getPages is an async method and needs a callback argument";var e=this;this._createDoc(A,(function(A){e._flushDoc(A,(function(A,e){t(e)}))}))},o.prototype._bufferToBlob=function(A){var t;try{t=new Blob([A],{type:"application/pdf"})}catch(s){if("InvalidStateError"===s.name){var e=new Uint8Array(A);t=new Blob([e.buffer],{type:"application/pdf"})}}if(!t)throw"Could not generate blob";return t},o.prototype._openWindow=function(){var A=window.open("","_blank");if(null===A)throw"Open PDF in new window blocked by browser";return A},o.prototype._openPdf=function(A,t){t||(t=this._openWindow());try{this.getBlob((function(A){var e=(window.URL||window.webkitURL).createObjectURL(A);t.location.href=e}),A)}catch(A){throw t.close(),A}},o.prototype.open=function(A,t){(A=A||{}).autoPrint=!1,t=t||null,this._openPdf(A,t)},o.prototype.print=function(A,t){(A=A||{}).autoPrint=!0,t=t||null,this._openPdf(A,t)},o.prototype.download=function(A,t,e){i(A)&&(n(t)||(e=t),t=A,A=null),A=A||"file.pdf",this.getBlob((function(e){r(e,A),i(t)&&t()}),e)},o.prototype.getBase64=function(A,t){if(!A)throw"getBase64 is an async method and needs a callback argument";this.getBuffer((function(t){A(t.toString("base64"))}),t)},o.prototype.getDataUrl=function(A,t){if(!A)throw"getDataUrl is an async method and needs a callback argument";this.getBuffer((function(t){A("data:application/pdf;base64,"+t.toString("base64"))}),t)},o.prototype.getBlob=function(A,t){if(!A)throw"getBlob is an async method and needs a callback argument";var e=this;this.getBuffer((function(t){var s=e._bufferToBlob(t);A(s)}),t)},o.prototype.getBuffer=function(A,t){if(!A)throw"getBuffer is an async method and needs a callback argument";var e=this;this._createDoc(t,(function(t){e._flushDoc(t,(function(t){A(t)}))}))},o.prototype.getStream=function(A,t){if(!i(t))return this._createDoc(A);this._createDoc(A,(function(A){t(A)}))},A.exports={createPdf:function(A,t,s,i){if(!function(){try{var A=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(A,t),42===A.foo()}catch(A){return!1}}())throw"Your browser does not provide the level of support needed";return new o(A,t||e.g.pdfMake.tableLayouts,s||e.g.pdfMake.fonts,i||e.g.pdfMake.vfs)}}},48181:function(A,t,e){"use strict";var s=e(50621).Buffer;function i(){this.fileSystem={},this.dataSystem={}}function n(A){return 0===A.indexOf("/")&&(A=A.substring(1)),0===A.indexOf("/")&&(A=A.substring(1)),A}i.prototype.existsSync=function(A){return A=n(A),void 0!==this.fileSystem[A]||void 0!==this.dataSystem[A]},i.prototype.readFileSync=function(A,t){A=n(A);var e=this.dataSystem[A];if("string"==typeof e&&"utf8"===t)return e;if(e)return new s(e,"string"==typeof e?"base64":void 0);var i=this.fileSystem[A];if(i)return i;throw"File '"+A+"' not found in virtual file system"},i.prototype.writeFileSync=function(A,t){this.fileSystem[n(A)]=t},i.prototype.bindFS=function(A){this.dataSystem=A||{}},A.exports=new i},77530:function(A,t,e){"use strict";var s=e(91867).isString;function i(A){return"auto"===A.width}function n(A){return null===A.width||void 0===A.width||"*"===A.width||"star"===A.width}A.exports={buildColumnWidths:function(A,t){var e=[],r=0,B=0,o=[],E=0,w=0,g=[],a=t;A.forEach((function(A){i(A)?(e.push(A),r+=A._minWidth,B+=A._maxWidth):n(A)?(o.push(A),E=Math.max(E,A._minWidth),w=Math.max(w,A._maxWidth)):g.push(A)})),g.forEach((function(A){s(A.width)&&/\d+%/.test(A.width)&&(A.width=parseFloat(A.width)*a/100),A.width=t)e.forEach((function(A){A._calcWidth=A._minWidth})),o.forEach((function(A){A._calcWidth=E}));else{if(Q0){var u=t/o.length;o.forEach((function(A){A._calcWidth=u}))}}},measureMinMax:function(A){for(var t={min:0,max:0},e={min:0,max:0},s=0,r=0,B=A.length;r=0;s--){var i=A[s],n=t.styleStack.styleDictionary[i];for(var r in n)n.hasOwnProperty(r)&&(e[r]=n[r])}return e}(E(A.style)?A.style:[A.style]);n&&(i=e(n,i)),n.margin&&(i=s(n.margin))}return i=e(A,i),A.margin&&(i=s(A.margin)),void 0===i[0]&&void 0===i[1]&&void 0===i[2]&&void 0===i[3]?null:i}(),A.columns)return e(t.measureColumns(A));if(A.stack)return e(t.measureVerticalContainer(A));if(A.ul)return e(t.measureUnorderedList(A));if(A.ol)return e(t.measureOrderedList(A));if(A.table)return e(t.measureTable(A));if(void 0!==A.text)return e(t.measureLeaf(A));if(A.toc)return e(t.measureToc(A));if(A.image)return e(t.measureImage(A));if(A.svg)return e(t.measureSVG(A));if(A.canvas)return e(t.measureCanvas(A));if(A.qr)return e(t.measureQr(A));throw"Unrecognized document structure: "+JSON.stringify(A,w)}));function e(A){var t=A._margin;return t&&(A._minWidth+=t[0]+t[2],A._maxWidth+=t[0]+t[2]),A}},Q.prototype.convertIfBase64Image=function(A){if(/^data:image\/(jpeg|jpg|png);base64,/.test(A.image)){var t="$$pdfmake$$"+this.autoImageIndex++;this.images[t]=A.image,A.image=t}},Q.prototype.measureImageWithDimensions=function(A,t){if(A.fit){var e=t.width/t.height>A.fit[0]/A.fit[1]?A.fit[0]/t.width:A.fit[1]/t.height;A._width=A._minWidth=A._maxWidth=t.width*e,A._height=t.height*e}else A.cover?(A._width=A._minWidth=A._maxWidth=A.cover.width,A._height=A._minHeight=A._maxHeight=A.cover.height):(A._width=A._minWidth=A._maxWidth=A.width||t.width,A._height=A.height||t.height*A._width/t.width,B(A.maxWidth)&&A.maxWidthA._width&&(A._width=A._minWidth=A._maxWidth=A.minWidth,A._height=A._width*t.height/t.width),B(A.minHeight)&&A.minHeight>A._height&&(A._height=A.minHeight,A._width=A._minWidth=A._maxWidth=A._height*t.width/t.height));A._alignment=this.styleStack.getProperty("alignment")},Q.prototype.measureImage=function(A){this.images&&this.convertIfBase64Image(A);var t=this.imageMeasure.measureImage(A.image);return this.measureImageWithDimensions(A,t),A},Q.prototype.measureSVG=function(A){var t=this.svgMeasure.measureSVG(A.svg);return this.measureImageWithDimensions(A,t),A.font=this.styleStack.getProperty("font"),A.svg=this.svgMeasure.writeDimensions(A.svg,{width:A._width,height:A._height}),A},Q.prototype.measureLeaf=function(A){A._textRef&&A._textRef._textNodeRef.text&&(A.text=A._textRef._textNodeRef.text);var t=this.styleStack.clone();t.push(A);var e=this.textTools.buildInlines(A.text,t);return A._inlines=e.items,A._minWidth=e.minWidth,A._maxWidth=e.maxWidth,A},Q.prototype.measureToc=function(A){if(A.toc.title&&(A.toc.title=this.measureNode(A.toc.title)),A.toc._items.length>0){for(var t=[],e=A.toc.textStyle||{},s=A.toc.numberStyle||e,i=A.toc.textMargin||[0,0,0,0],n=0,r=A.toc._items.length;n=26?A((t/26>>0)-1):"")+"abcdefghijklmnopqrstuvwxyz"[t%26>>0]}(A-1)}function n(A){if(A<1||A>4999)return A.toString();var t,e=A,s={M:1e3,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1},i="";for(t in s)for(;e>=s[t];)i+=t,e-=s[t];return i}var r;switch(e){case"none":r=null;break;case"upper-alpha":r=i(A).toUpperCase();break;case"lower-alpha":r=i(A);break;case"upper-roman":r=n(A);break;case"lower-roman":r=n(A).toLowerCase();break;default:r=function(A){return A.toString()}(A)}if(null===r)return{};s&&(E(s)?(s[0]&&(r=s[0]+r),s[1]&&(r+=s[1]),r+=" "):r+=s+" ");var B={text:r},o=t.getProperty("markerColor");return o&&(B.color=o),{_inlines:this.textTools.buildInlines(B,t).items}},Q.prototype.measureUnorderedList=function(A){var t=this.styleStack.clone(),e=A.ul;A.type=A.type||"disc",A._gapSize=this.gapSizeForList(),A._minWidth=0,A._maxWidth=0;for(var s=0,i=e.length;s0?t.length-1:0;return A._minWidth=i.min+A._gap*r,A._maxWidth=i.max+A._gap*r,A},Q.prototype.measureTable=function(A){var t,e;!function(A){if(A.table.widths||(A.table.widths="auto"),r(A.table.widths))for(A.table.widths=[A.table.widths];A.table.widths.length1?(I(Q,s,C.colSpan),g.push({col:s,span:C.colSpan,minWidth:C._minWidth,maxWidth:C._maxWidth})):(c._minWidth=Math.max(c._minWidth,C._minWidth),c._maxWidth=Math.max(c._maxWidth,C._maxWidth))),C.rowSpan&&C.rowSpan>1&&f(A.table,i,s,C.rowSpan)}}!function(){for(var t,e,s=0,i=g.length;s0)for(t=B/n.span,e=0;e0)for(t=o/n.span,e=0;ee.page?t:e.page>t.page?e:t.y>e.y?t:e).page,x:s.x,y:s.y,availableHeight:s.availableHeight,availableWidth:s.availableWidth})},n.prototype.markEnding=function(A){this.page=A._columnEndingContext.page,this.x=A._columnEndingContext.x,this.y=A._columnEndingContext.y,this.availableWidth=A._columnEndingContext.availableWidth,this.availableHeight=A._columnEndingContext.availableHeight,this.lastColumnWidth=A._columnEndingContext.lastColumnWidth},n.prototype.saveContextInEndingCell=function(A){A._columnEndingContext={page:this.page,x:this.x,y:this.y,availableHeight:this.availableHeight,availableWidth:this.availableWidth,lastColumnWidth:this.lastColumnWidth}},n.prototype.completeColumnGroup=function(A){var t=this.snapshots.pop();this.calculateBottomMost(t),this.endingCell=null,this.x=t.x;var e=t.bottomMost.y;A&&(t.page===t.bottomMost.page?t.y+A>e&&(e=t.y+A):e+=A),this.y=e,this.page=t.bottomMost.page,this.availableWidth=t.availableWidth,this.availableHeight=t.bottomMost.availableHeight,A&&(this.availableHeight-=e-t.bottomMost.y),this.lastColumnWidth=t.lastColumnWidth},n.prototype.addMargin=function(A,t){this.x+=A,this.availableWidth-=A+(t||0)},n.prototype.moveDown=function(A){return this.y+=A,this.availableHeight-=A,this.availableHeight>0},n.prototype.initializePage=function(){this.y=this.pageMargins.top,this.availableHeight=this.getCurrentPage().pageSize.height-this.pageMargins.top-this.pageMargins.bottom,this.pageSnapshot().availableWidth=this.getCurrentPage().pageSize.width-this.pageMargins.left-this.pageMargins.right},n.prototype.pageSnapshot=function(){return this.snapshots[0]?this.snapshots[0]:this},n.prototype.moveTo=function(A,t){null!=A&&(this.x=A,this.availableWidth=this.getCurrentPage().pageSize.width-this.x-this.pageMargins.right),null!=t&&(this.y=t,this.availableHeight=this.getCurrentPage().pageSize.height-this.y-this.pageMargins.bottom)},n.prototype.moveToRelative=function(A,t){null!=A&&(this.x=this.x+A),null!=t&&(this.y=this.y+t)},n.prototype.beginDetachedBlock=function(){this.snapshots.push({x:this.x,y:this.y,availableHeight:this.availableHeight,availableWidth:this.availableWidth,page:this.page,endingCell:this.endingCell,lastColumnWidth:this.lastColumnWidth})},n.prototype.endDetachedBlock=function(){var A=this.snapshots.pop();this.x=A.x,this.y=A.y,this.availableWidth=A.availableWidth,this.availableHeight=A.availableHeight,this.page=A.page,this.endingCell=A.endingCell,this.lastColumnWidth=A.lastColumnWidth};n.prototype.moveToNextPage=function(A){var t=this.page+1,e=this.page,s=this.y,n=t>=this.pages.length;if(n){var r=this.availableWidth,B=this.getCurrentPage().pageSize.orientation,o=function(A,t){var e,s;return e=t,s=A.pageSize.orientation,(t=void 0===e?s:i(e)&&"landscape"===e.toLowerCase()?"landscape":"portrait")!==A.pageSize.orientation?{orientation:t,width:A.pageSize.height,height:A.pageSize.width}:{orientation:A.pageSize.orientation,width:A.pageSize.width,height:A.pageSize.height}}(this.getCurrentPage(),A);this.addPage(o),B===o.orientation&&(this.availableWidth=r)}else this.page=t,this.initializePage();return{newPageCreated:n,prevPage:e,prevY:s,y:this.y}},n.prototype.addPage=function(A){var t={items:[],pageSize:A};return this.pages.push(t),this.backgroundLength.push(0),this.page=this.pages.length-1,this.initializePage(),this.tracker.emit("pageAdded"),t},n.prototype.getCurrentPage=function(){return this.page<0||this.page>=this.pages.length?null:this.pages[this.page]},n.prototype.getCurrentPosition=function(){var A=this.getCurrentPage().pageSize,t=A.height-this.pageMargins.top-this.pageMargins.bottom,e=A.width-this.pageMargins.left-this.pageMargins.right;return{pageNumber:this.page+1,pageOrientation:A.orientation,pageInnerHeight:t,pageInnerWidth:e,left:this.x,top:this.y,verticalRatio:(this.y-this.pageMargins.top)/t,horizontalRatio:(this.x-this.pageMargins.left)/e}},A.exports=n},54861:function(A,t,e){"use strict";var s=e(70770),i=e(91867).isNumber,n=e(91867).pack,r=e(91867).offsetVector,B=e(79178);function o(A,t){this.context=A,this.contextStack=[],this.tracker=t}function E(A,t,e){null==e||e<0||e>A.items.length?A.items.push(t):A.items.splice(e,0,t)}o.prototype.addLine=function(A,t,e){var s=A.getHeight(),i=this.context,n=i.getCurrentPage(),r=this.getCurrentPositionOnPage();return!(i.availableHeight0&&A.inlines[0].alignment,i=0;switch(s){case"right":i=t-e;break;case"center":i=(t-e)/2}if(i&&(A.x=(A.x||0)+i),"justify"===s&&!A.newLineForced&&!A.lastLineInParagraph&&A.inlines.length>1)for(var n=(t-e)/(A.inlines.length-1),r=1,B=A.inlines.length;r0)&&(void 0===A._x&&(A._x=A.x||0),A.x=s.x+A._x,A.y=s.y,this.alignImage(A),E(i,{type:e||"image",item:A},t),s.moveDown(A._height),n)},o.prototype.addSVG=function(A,t){return this.addImage(A,t,"svg")},o.prototype.addQr=function(A,t){var e=this.context,s=e.getCurrentPage(),i=this.getCurrentPositionOnPage();if(!s||void 0===A.absolutePosition&&e.availableHeightB.availableHeight||(A.items.forEach((function(i){switch(i.type){case"line":var E=function(A){var t=new s(A.maxWidth);for(var e in A)A.hasOwnProperty(e)&&(t[e]=A[e]);return t}(i.item);E._node&&(E._node.positions[0].pageNumber=B.page+1),E.x=(E.x||0)+(t?A.xOffset||0:B.x),E.y=(E.y||0)+(e?A.yOffset||0:B.y),o.items.push({type:"line",item:E});break;case"vector":var w=n(i.item);r(w,t?A.xOffset||0:B.x,e?A.yOffset||0:B.y),o.items.push({type:"vector",item:w});break;case"image":case"svg":var g=n(i.item);g.x=(g.x||0)+(t?A.xOffset||0:B.x),g.y=(g.y||0)+(e?A.yOffset||0:B.y),o.items.push({type:i.type,item:g})}})),i||B.moveDown(A.height),0))},o.prototype.pushContext=function(A,t){void 0===A&&(t=this.context.getCurrentPage().height-this.context.pageMargins.top-this.context.pageMargins.bottom,A=this.context.availableWidth),i(A)&&(A=new B({width:A,height:t},{left:0,right:0,top:0,bottom:0})),this.contextStack.push(this.context),this.context=A},o.prototype.popContext=function(){this.context=this.contextStack.pop()},o.prototype.getCurrentPositionOnPage=function(){return(this.contextStack[0]||this.context).getCurrentPosition()},A.exports=o},28284:function(A,t,e){"use strict";var s=e(91867).isArray;function i(A,t){for(var e in this.fonts={},this.pdfKitDoc=t,this.fontCache={},A)if(A.hasOwnProperty(e)){var s=A[e];this.fonts[e]={normal:s.normal,bold:s.bold,italics:s.italics,bolditalics:s.bolditalics}}}i.prototype.getFontType=function(A,t){return function(A,t){var e="normal";return A&&t?e="bolditalics":A?e="bold":t&&(e="italics"),e}(A,t)},i.prototype.getFontFile=function(A,t,e){var s=this.getFontType(t,e);return this.fonts[A]&&this.fonts[A][s]?this.fonts[A][s]:null},i.prototype.provideFont=function(A,t,e){var i=this.getFontType(t,e);if(null===this.getFontFile(A,t,e))throw new Error("Font '"+A+"' in style '"+i+"' is not defined in the font section of the document definition.");if(this.fontCache[A]=this.fontCache[A]||{},!this.fontCache[A][i]){var n=this.fonts[A][i];s(n)||(n=[n]),this.fontCache[A][i]=this.pdfKitDoc.font.apply(this.pdfKitDoc,n)._font}return this.fontCache[A][i]},A.exports=i},91867:function(A){"use strict";function t(A){return Array.isArray(A)}A.exports={isString:function(A){return"string"==typeof A||A instanceof String},isNumber:function(A){return"number"==typeof A||A instanceof Number},isBoolean:function(A){return"boolean"==typeof A},isArray:t,isFunction:function(A){return"function"==typeof A},isObject:function(A){return null!==A&&"object"==typeof A},isNull:function(A){return null===A},isUndefined:function(A){return void 0===A},pack:function(){for(var A={},t=0,e=arguments.length;t0})),A.forEach((function(A){var e={};["id","text","ul","ol","table","image","qr","canvas","svg","columns","headlineLevel","style","pageBreak","pageOrientation","width","height"].forEach((function(t){void 0!==A[t]&&(e[t]=A[t])})),e.startPosition=A.positions[0],e.pageNumbers=Array.from(new Set(A.positions.map((function(A){return A.pageNumber})))),e.pages=t.length,e.stack=a(A.stack),A.nodeInfo=e}));for(var e=0;e1)for(var o=e+1,E=A.length;o-1&&n.push(A[o].nodeInfo),g.length>2&&A[o].nodeInfo.pageNumbers.indexOf(i+1)>-1&&r.push(A[o].nodeInfo);if(g.length>3)for(o=0;o-1&&B.push(A[o].nodeInfo);if(g(s.nodeInfo,n,r,B))return s.pageBreak="before",!0}}return!1}function Q(A){A.linearNodeList.forEach((function(A){A.resetXY()}))}this.docPreprocessor=new i,this.docMeasure=new n(t,e,s,this.imageMeasure,this.svgMeasure,this.tableLayouts,E);for(var C=this.tryLayoutDocument(A,t,e,s,r,B,o,E,w);c(C.linearNodeList,C.pages);)Q(C),C=this.tryLayoutDocument(A,t,e,s,r,B,o,E,w);return C.pages},v.prototype.tryLayoutDocument=function(A,t,e,s,i,n,o,E,w,g){this.linearNodeList=[],A=this.docPreprocessor.preprocessDocument(A),A=this.docMeasure.measureDocument(A),this.writer=new B(new r(this.pageSize,this.pageMargins),this.tracker);var a=this;return this.writer.context().tracker.startTracking("pageAdded",(function(){a.addBackground(i)})),this.addBackground(i),this.processNode(A),this.addHeadersAndFooters(n,o),null!=w&&this.addWatermark(w,t,s),{pages:this.writer.context().pages,linearNodeList:this.linearNodeList}},v.prototype.addBackground=function(A){var t=I(A)?A:function(){return A},e=this.writer.context(),s=e.getCurrentPage().pageSize,i=t(e.page+1,s);i&&(this.writer.beginUnbreakableBlock(s.width,s.height),i=this.docPreprocessor.preprocessDocument(i),this.processNode(this.docMeasure.measureDocument(i)),this.writer.commitUnbreakableBlock(0,0),e.backgroundLength[e.page]+=i.positions.length)},v.prototype.addStaticRepeatable=function(A,t){this.addDynamicRepeatable((function(){return JSON.parse(JSON.stringify(A))}),t)},v.prototype.addDynamicRepeatable=function(A,t){for(var e=0,s=this.writer.context().pages.length;e1;)n.push({fontSize:o}),(s=i.sizeOfRotatedText(t.text,t.angle,n)).width>A.width?o=(r+(B=o))/2:s.widthA.height?(r+(B=o))/2:((r=o)+B)/2),n.pop();return o}(this.pageSize,A,t));var s={text:A.text,font:t.provideFont(A.font,A.bold,A.italics),fontSize:A.fontSize,color:A.color,opacity:A.opacity,angle:A.angle};s._size=function(A,t){var e=new f(t),s=new D(null,{font:A.font,bold:A.bold,italics:A.italics});return s.push({fontSize:A.fontSize}),{size:e.sizeOfString(A.text,s),rotatedSize:e.sizeOfRotatedText(A.text,A.angle,s)}}(A,t);for(var i=this.writer.context().pages,n=0,r=i.length;n0;s--)e.push(A);return e}(A._gap);s&&(e-=(s.length-1)*A._gap),o.buildColumnWidths(t,e);var i=this.processRow(t,t,s);d(A.positions,i.positions)},v.prototype.processRow=function(A,t,e,s,i,n){var r=this,B=[],o=[];return this.tracker.auto("pageChanged",(function(A){for(var t,e=0,s=B.length;e1)for(var c=1;cA?e[A]:0}function w(A,t){if(A.rowSpan&&A.rowSpan>1){var e=i+A.rowSpan-1;if(e>=s.length)throw"Row span for column "+t+" (with indexes starting from 0) exceeded row count";return s[e][t]}return null}},v.prototype.processList=function(A,t){var e,s=this,i=A?t.ol:t.ul,n=t._gapSize;this.writer.context().addMargin(n.width),this.tracker.auto("lineAdded",(function(A){if(e){var t=e;if(e=null,t.canvas){var i=t.canvas[0];h(i,-t._minWidth,0),s.writer.addVector(i)}else if(t._inlines){var n=new w(s.pageSize.width);n.addInline(t._inlines[0]),n.x=-t._minWidth,n.y=A.getAscenderHeight()-n.getAscenderHeight(),s.writer.addLine(n,!0)}}}),(function(){i.forEach((function(A){e=A.listMarker,s.processNode(A),d(t.positions,A.positions)}))})),this.writer.context().addMargin(-n.width)},v.prototype.processTable=function(A){var t=new E(A);t.beginTable(this.writer);for(var e=A.table.heights,s=0,i=A.table.body.length;s0&&(e.hasEnoughSpaceForInline(A._inlines[0],A._inlines.slice(1))||i);){var n=!1,r=A._inlines.shift();if(i=!1,!r.noWrap&&r.text.length>1&&r.width>e.getAvailableWidth()){var B=r.width/r.text.length,o=Math.floor(e.getAvailableWidth()/B);if(o<1&&(o=1),o0){var i=e.pages[0];if(i.xOffset=A,i.yOffset=t,s>1)if(void 0!==A||void 0!==t)i.height=e.getCurrentPage().pageSize.height-e.pageMargins.top-e.pageMargins.bottom;else{i.height=this.writer.context.getCurrentPage().pageSize.height-this.writer.context.pageMargins.top-this.writer.context.pageMargins.bottom;for(var n=0,r=this.repeatables.length;nt.options.size[1]?"landscape":"portrait";if(A.pageSize.orientation!==e){var s=t.options.size[0],i=t.options.size[1];t.options.size=[i,s]}}function v(A,t){var e=A;return t.sup&&(e-=.75*t.fontSize),t.sub&&(e+=.35*t.fontSize),e}function Y(A,t,e,s,i){function n(A,t){var e,s,i=new w(null);if(h(A.positions))throw"Page reference id not found";var n=A.positions[0].pageNumber.toString();switch(t.text=n,e=i.widthOfString(t.text,t.font,t.fontSize,t.characterSpacing,t.fontFeatures),s=t.width-e,t.width=e,t.alignment){case"right":t.x+=s;break;case"center":t.x+=s/2}}A._pageNodeRef&&n(A._pageNodeRef,A.inlines[0]),t=t||0,e=e||0;var r=A.getHeight(),B=r-A.getAscenderHeight();E.drawBackground(A,t,e,s,i);for(var o=0,g=A.inlines.length;o1){var r=A.points[0],B=A.points[A.points.length-1];(A.closePath||r.x===B.x&&r.y===B.y)&&e.closePath()}break;case"path":e.path(A.d)}if(A.linearGradient&&s){var o=1/(A.linearGradient.length-1);for(i=0;ie.height||"landscape"===A&&e.widthe.height?"landscape":"portrait",e}(A.pageSize,A.pageOrientation),E={size:[e.width,e.height],pdfVersion:A.version,compress:A.compress,userPassword:A.userPassword,ownerPassword:A.ownerPassword,permissions:A.permissions,lang:A.language,fontLayoutCache:!Q(t.fontLayoutCache)||t.fontLayoutCache,bufferPages:t.bufferPages||!1,autoFirstPage:!1,info:D(A),font:null};this.pdfKitDoc=s.createPdfDocument(E),this.fontProvider=new i(this.fontDescriptors,this.pdfKitDoc);var w=new n(e,b(A.pageMargins),new B(this.pdfKitDoc,A.images),new o);w.registerTableLayouts({noBorders:{hLineWidth:function(A){return 0},vLineWidth:function(A){return 0},paddingLeft:function(A){return A?4:0},paddingRight:function(A,t){return A-1&&(C=C.slice(0,h)),e.height===1/0){var u=function(A,t){function e(A){return(A.item.y||0)+function(A){return g(A.item.getHeight)?A.item.getHeight():A.item._height?A.item._height:"vector"===A.type?void 0!==A.item.y1?A.item.y1>A.item.y2?A.item.y1:A.item.y2:A.item.h:0}(A)}var s=b(t||40),i=s.top;return A.forEach((function(A){A.items.forEach((function(A){var t=e(A);t>i&&(i=t)}))})),i+=s.bottom}(C,A.pageMargins);this.pdfKitDoc.options.size=[e.width,u]}var l=function(A,t){var e={};return Object.keys(A).forEach((function(s){var i=A[s];e[s]=t.pattern(i.boundingBox,i.xStep,i.yStep,i.pattern,i.colored)})),e}(A.patterns||{},this.pdfKitDoc);if(function(A,t,e,s,i){e._pdfMakePages=A,e.addPage();var n=0;i&&A.forEach((function(A){n+=A.items.length}));var r=0;i=i||function(){};for(var B=0;B0&&(d(A[B],e),e.addPage(e.options));for(var o=A[B],E=0,w=o.items.length;E=128?285:0);var E=[[]];for(B=0;B<30;++B){for(var w=E[B],g=[],a=0;a<=B;++a){var c=a6},l=function(A,e){var s=-8&function(A){var e=t[A],s=16*A*A+128*A+64;return u(A)&&(s-=36),e[2].length&&(s-=25*e[2].length*e[2].length-10*e[2].length-55),s}(A),i=t[A];return s-8*i[0][e]*i[1][e]},I=function(A,t){switch(t){case 1:return A<10?10:A<27?12:14;case 2:return A<10?9:A<27?11:13;case 4:return A<10?8:16;case 8:return A<10?8:A<27?10:12}},f=function(A,t,e){var s=l(A,e)-4-I(A,t);switch(t){case 1:return 3*(s/10|0)+(s%10<4?0:s%10<7?1:2);case 2:return 2*(s/11|0)+(s%11<6?0:1);case 4:return s/8|0;case 8:return s/13|0}},D=function(A,t){for(var e=A.slice(0),s=A.length,i=t.length,B=0;B=0)for(var E=0;E=0;--n)i>>s+n&1&&(i^=e<>r&1}return A},Y=function(A){for(var t=function(A){for(var t=0,e=0;e=5&&(t+=A[e]-5+3);for(e=5;e=4*s||A[e+1]>=4*s)&&(t+=40)}return t},e=A.length,s=0,i=0,n=0;n>6,128|63&r):r<65536?i.push(224|r>>12,128|r>>6&63,128|63&r):i.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r)}return i}return t}}(g,A)))throw"invalid data format";if(w<0||w>3)throw"invalid ECC level";if(o<0){for(o=1;o<=40&&!(A.length<=f(o,g,w));++o);if(o>40)throw"too large data for the Qr format"}else if(o<1||o>40)throw"invalid Qr version! should be between 1 and 40";if(-1!=a&&(a<0||a>8))throw"invalid mask";return function(A,e,s,i,n){var r=t[e],B=function(A,t,e,s){var i=[],n=0,r=8,B=e.length,o=function(A,t){if(t>=r){for(i.push(n|A>>(t-=r));t>=8;)i.push(A>>(t-=8)&255);n=0,r=8}t>0&&(n|=(A&(1<>3);B=function(A,t,e){for(var s=[],i=A.length/t|0,n=0,r=t-A.length%t,B=0;B>o&1,n[A+B][t+o]=1};for(B(0,0,9,9,[127,65,93,93,93,65,383,0,64]),B(s-8,0,8,9,[256,127,65,93,93,93,65,127]),B(0,s-8,9,8,[254,130,186,186,186,130,254,0,0]),r=9;r>c++&1,n[r][s-11+g]=n[s-11+g][r]=1}return{matrix:i,reserved:n}}(e),w=o.matrix,g=o.reserved;if(function(A,t,e){for(var s=A.length,i=0,n=-1,r=s-1;r>=0;r-=2){6==r&&--r;for(var B=n<0?s-1:0,o=0;or-2;--E)t[B][E]||(A[B][E]=e[i>>3]>>(7&~i)&1,++i);B+=n}n=-n}}(w,g,B),n<0){d(w,g,0),v(w,0,i,0);var a=0,c=Y(w);for(d(w,g,0),n=1;n<8;++n){d(w,g,n),v(w,0,i,n);var Q=Y(w);c>Q&&(c=Q,a=n),d(w,g,n)}n=a}return d(w,g,n),v(w,0,i,n),w}(A,o,g,w,a)}(A,n),a=g.length,c=Math.floor(n.fit?n.fit/a:5),Q=a*c+c*w*2,h=c*w;r.push({type:"rect",x:0,y:0,w:Q,h:Q,lineWidth:0,color:B});for(var F=0;F0;)this.styleOverrides.pop()},B.prototype.autopush=function(A){if(s(A))return 0;var t=[];A.style&&(t=i(A.style)?A.style:[A.style]);for(var e=0,B=t.length;e0&&this.pop(e),s},B.prototype.getProperty=function(A){if(this.styleOverrides)for(var t=this.styleOverrides.length-1;t>=0;t--){var e=this.styleOverrides[t];if(s(e)){var i=this.styleDictionary[e];if(i&&!n(i[A])&&!r(i[A]))return i[A]}else if(!n(e[A])&&!r(e[A]))return e[A]}return this.defaultStyle&&this.defaultStyle[A]},A.exports=B},89638:function(A,t,e){"use strict";var s=e(52242);function i(A){var t=parseFloat(A);if("number"==typeof t&&!isNaN(t))return t}function n(A){var t;try{t=new s.XmlDocument(A)}catch(A){throw new Error("SVGMeasure: "+A)}if("svg"!==t.name)throw new Error("SVGMeasure: expected document");return t}function r(){}r.prototype.measureSVG=function(A){var t=n(A),e=i(t.attr.width),s=i(t.attr.height);if((null==e||null==s)&&"string"==typeof t.attr.viewBox){var r=t.attr.viewBox.split(/[,\s]+/);if(4!==r.length)throw new Error("Unexpected svg viewbox format, should have 4 entries but found: '"+t.attr.viewBox+"'");null==e&&(e=i(r[2])),null==s&&(s=i(r[3]))}return{width:e,height:s}},r.prototype.writeDimensions=function(A,t){var e=n(A);return e.attr.width=""+t.width,e.attr.height=""+t.height,e.toString()},A.exports=r},89836:function(A,t,e){"use strict";var s=e(77530),i=e(91867).isFunction,n=e(91867).isNumber;function r(A){this.tableNode=A}r.prototype.beginTable=function(A){var t,e,i,n=this;if(t=this.tableNode,this.offsets=t._offsets,this.layout=t._layout,e=A.context().availableWidth-this.offsets.total,s.buildColumnWidths(t.table.widths,e),this.tableWidth=t._offsets.total+(i=0,t.table.widths.forEach((function(A){i+=A._calcWidth})),i),this.rowSpanData=function(){var A=[],t=0,e=0;A.push({left:0,rowSpan:0});for(var s=0,i=n.tableNode.table.body[0].length;st.table.body.length)throw new Error(`Too few rows in the table. Property headerRows requires at least ${this.headerRows}, contains only ${t.table.body.length}`);this.rowsWithoutPageBreak=this.headerRows+(t.table.keepWithHeaderRows||0),this.dontBreakRows=t.table.dontBreakRows||!1,this.rowsWithoutPageBreak&&A.beginUnbreakableBlock(),function(A){for(var t=0;t0&&E(t+B,s,0,i.border[0]),void 0!==i.border[2]&&E(t+B,s+r-1,2,i.border[2]);for(var o=0;o0&&E(t,s+o,1,i.border[1]),void 0!==i.border[3]&&E(t+n-1,s+o,3,i.border[3])}}function E(t,e,s,i){var n=A[t][e];n.border=n.border||{},n.border[s]=i}}(this.tableNode.table.body),this.drawHorizontalLine(0,A)},r.prototype.onRowBreak=function(A,t){var e=this;return function(){var A=e.rowPaddingTop+(e.headerRows?0:e.topLineWidth);t.context().availableHeight-=e.reservedAtBottom,t.context().moveDown(A)}},r.prototype.beginRow=function(A,t){this.topLineWidth=this.layout.hLineWidth(A,this.tableNode),this.rowPaddingTop=this.layout.paddingTop(A,this.tableNode),this.bottomLineWidth=this.layout.hLineWidth(A+1,this.tableNode),this.rowPaddingBottom=this.layout.paddingBottom(A,this.tableNode),this.rowCallback=this.onRowBreak(A,t),t.tracker.startTracking("pageChanged",this.rowCallback),this.dontBreakRows&&t.beginUnbreakableBlock(),this.rowTopY=t.context().y,this.reservedAtBottom=this.bottomLineWidth+this.rowPaddingBottom,t.context().availableHeight-=this.reservedAtBottom,t.context().moveDown(this.rowPaddingTop)},r.prototype.drawHorizontalLine=function(A,t,e){var s=this.layout.hLineWidth(A,this.tableNode);if(s){var n,r=this.layout.hLineStyle(A,this.tableNode);r&&r.dash&&(n=r.dash);for(var B,o,E,w=s/2,g=null,a=this.tableNode.table.body,c=0,Q=this.rowSpanData.length;c0&&(I=(B=a[A-1][c]).border?B.border[3]:this.layout.defaultBorder)&&B.borderColor&&(u=B.borderColor[3]),AD;)g.width+=this.rowSpanData[c+D++].width||0;c+=D-1}else if(B&&B.colSpan&&I){for(;B.colSpan>D;)g.width+=this.rowSpanData[c+D++].width||0;c+=D-1}else if(o&&o.colSpan&&l){for(;o.colSpan>D;)g.width+=this.rowSpanData[c+D++].width||0;c+=D-1}else g.width+=this.rowSpanData[c].width||0}var b=(e||0)+w;h&&g&&g.width&&(t.addVector({type:"line",x1:g.left,x2:g.left+g.width,y1:b,y2:b,lineWidth:s,dash:n,lineColor:u},!1,e),g=null,u=null,B=null,o=null,E=null)}t.context().moveDown(s)}},r.prototype.drawVerticalLine=function(A,t,e,s,n,r,B){var o=this.layout.vLineWidth(s,this.tableNode);if(0!==o){var E,w=this.layout.vLineStyle(s,this.tableNode);w&&w.dash&&(E=w.dash);var g,a,c,Q=this.tableNode.table.body;if(s>0&&(g=Q[r][B])&&g.borderColor&&(g.border?g.border[2]:this.layout.defaultBorder)&&(c=g.borderColor[2]),null==c&&s0&&e--}return t.push({x:B.rowSpanData[B.rowSpanData.length-1].left,index:B.rowSpanData.length-1}),t}(),g=[],a=e&&e.length>0,c=this.tableNode.table.body;if(g.push({y0:this.rowTopY,page:a?e[0].prevPage:o}),a)for(r=0,s=e.length;r0&&!this.headerRows,I=l?0:this.topLineWidth,f=g[C].y0,D=g[C].y1;for(u&&(D+=this.rowPaddingBottom),t.context().page!=g[C].page&&(t.context().page=g[C].page,this.reservedAtBottom=0),r=0,s=w.length;r0&&!d&&(d=(b=c[A][Y-1]).border?b.border[2]:this.layout.defaultBorder),Y+11)for(var H=1;H1)for(H=1;H0&&this.rowSpanData[r].rowSpan--}this.drawHorizontalLine(A+1,t),this.headerRows&&A===this.headerRows-1&&(this.headerRepeatable=t.currentBlockToRepeatable()),this.dontBreakRows&&t.tracker.auto("pageChanged",(function(){B.headerRows||!1===B.layout.hLineWhenBroken||B.drawHorizontalLine(A,t)}),(function(){t.commitUnbreakableBlock()})),!this.headerRepeatable||A!==this.rowsWithoutPageBreak-1&&A!==this.tableNode.table.body.length-1||(t.commitUnbreakableBlock(),t.pushToRepeatables(this.headerRepeatable),this.cleanUpRepeatables=!0,this.headerRepeatable=null)},A.exports=r},84786:function(A,t,e){"use strict";var s=e(91867).isArray,i=e(91867).isPattern,n=e(91867).getPattern;function r(A,t,e,s){var i=A.inlines[0],n=function(){for(var t=0,e=0,s=A.inlines.length;et?e:t;return A.inlines[t]}(),r=function(){for(var t=0,e=0,s=A.inlines.length;e=0&&e.splice(s,1)}},t.prototype.emit=function(A){var t=Array.prototype.slice.call(arguments,1),e=this.events[A];e&&e.forEach((function(A){A.apply(this,t)}))},t.prototype.auto=function(A,t,e){this.startTracking(A,t),e(),this.stopTracking(A,t)},A.exports=t},44134:function(A,t,e){var s,i;void 0===(i="function"==typeof(s=function(){"use strict";function t(A,t,e){var s=new XMLHttpRequest;s.open("GET",A),s.responseType="blob",s.onload=function(){B(s.response,t,e)},s.onerror=function(){console.error("could not download file")},s.send()}function s(A){var t=new XMLHttpRequest;t.open("HEAD",A,!1);try{t.send()}catch(A){}return 200<=t.status&&299>=t.status}function i(A){try{A.dispatchEvent(new MouseEvent("click"))}catch(e){var t=document.createEvent("MouseEvents");t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),A.dispatchEvent(t)}}var n="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof e.g&&e.g.global===e.g?e.g:void 0,r=n.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),B=n.saveAs||("object"!=typeof window||window!==n?function(){}:"undefined"!=typeof HTMLAnchorElement&&"download"in HTMLAnchorElement.prototype&&!r?function(A,e,r){var B=n.URL||n.webkitURL,o=document.createElement("a");e=e||A.name||"download",o.download=e,o.rel="noopener","string"==typeof A?(o.href=A,o.origin===location.origin?i(o):s(o.href)?t(A,e,r):i(o,o.target="_blank")):(o.href=B.createObjectURL(A),setTimeout((function(){B.revokeObjectURL(o.href)}),4e4),setTimeout((function(){i(o)}),0))}:"msSaveOrOpenBlob"in navigator?function(A,e,n){if(e=e||A.name||"download","string"!=typeof A)navigator.msSaveOrOpenBlob(function(A,t){return void 0===t?t={autoBom:!1}:"object"!=typeof t&&(console.warn("Deprecated: Expected third argument to be a object"),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(A.type)?new Blob(["\ufeff",A],{type:A.type}):A}(A,n),e);else if(s(A))t(A,e,n);else{var r=document.createElement("a");r.href=A,r.target="_blank",setTimeout((function(){i(r)}))}}:function(A,e,s,i){if((i=i||open("","_blank"))&&(i.document.title=i.document.body.innerText="downloading..."),"string"==typeof A)return t(A,e,s);var B="application/octet-stream"===A.type,o=/constructor/i.test(n.HTMLElement)||n.safari,E=/CriOS\/[\d]+/.test(navigator.userAgent);if((E||B&&o||r)&&"undefined"!=typeof FileReader){var w=new FileReader;w.onloadend=function(){var A=w.result;A=E?A:A.replace(/^data:[^;]*;/,"data:attachment/file;"),i?i.location.href=A:location=A,i=null},w.readAsDataURL(A)}else{var g=n.URL||n.webkitURL,a=g.createObjectURL(A);i?i.location=a:location.href=a,i=null,setTimeout((function(){g.revokeObjectURL(a)}),4e4)}});n.saveAs=B.saveAs=B,A.exports=B})?s.apply(t,[]):s)||(A.exports=i)},60421:function(A,t,e){"use strict";var s,i=e(50621).Buffer;function n(A,t){for(var e=0;e=A.length?{done:!0}:{done:!1,value:A[s++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function g(A,t){(null==t||t>A.length)&&(t=A.length);for(var e=0,s=new Array(t);e0?e[0]:"value";if(A.has(n))return A.get(n);var r=i.apply(this,e);return A.set(n,r),r}return Object.defineProperty(this,t,{value:e}),e}}}}d.registerFormat=function(A){v.push(A)},d.openSync=function(A,t){var e=b.readFileSync(A);return d.create(e,t)},d.open=function(A,t,e){"function"==typeof t&&(e=t,t=null),b.readFile(A,(function(A,s){if(A)return e(A);try{var i=d.create(s,t)}catch(A){return e(A)}return e(null,i)}))},d.create=function(A,t){for(var e=0;e>1},searchRange:c.uint16,entrySelector:c.uint16,rangeShift:c.uint16,endCode:new c.LazyArray(c.uint16,"segCount"),reservedPad:new c.Reserved(c.uint16),startCode:new c.LazyArray(c.uint16,"segCount"),idDelta:new c.LazyArray(c.int16,"segCount"),idRangeOffset:new c.LazyArray(c.uint16,"segCount"),glyphIndexArray:new c.LazyArray(c.uint16,(function(A){return(A.length-A._currentOffset)/2}))},6:{length:c.uint16,language:c.uint16,firstCode:c.uint16,entryCount:c.uint16,glyphIndices:new c.LazyArray(c.uint16,"entryCount")},8:{reserved:new c.Reserved(c.uint16),length:c.uint32,language:c.uint16,is32:new c.LazyArray(c.uint8,8192),nGroups:c.uint32,groups:new c.LazyArray(L,"nGroups")},10:{reserved:new c.Reserved(c.uint16),length:c.uint32,language:c.uint32,firstCode:c.uint32,entryCount:c.uint32,glyphIndices:new c.LazyArray(c.uint16,"numChars")},12:{reserved:new c.Reserved(c.uint16),length:c.uint32,language:c.uint32,nGroups:c.uint32,groups:new c.LazyArray(L,"nGroups")},13:{reserved:new c.Reserved(c.uint16),length:c.uint32,language:c.uint32,nGroups:c.uint32,groups:new c.LazyArray(L,"nGroups")},14:{length:c.uint32,numRecords:c.uint32,varSelectors:new c.LazyArray(G,"numRecords")}}),P=new c.Struct({platformID:c.uint16,encodingID:c.uint16,table:new c.Pointer(c.uint32,W,{type:"parent",lazy:!0})}),H=new c.Struct({version:c.uint16,numSubtables:c.uint16,tables:new c.Array(P,"numSubtables")}),S=new c.Struct({version:c.int32,revision:c.int32,checkSumAdjustment:c.uint32,magicNumber:c.uint32,flags:c.uint16,unitsPerEm:c.uint16,created:new c.Array(c.int32,2),modified:new c.Array(c.int32,2),xMin:c.int16,yMin:c.int16,xMax:c.int16,yMax:c.int16,macStyle:new c.Bitfield(c.uint16,["bold","italic","underline","outline","shadow","condensed","extended"]),lowestRecPPEM:c.uint16,fontDirectionHint:c.int16,indexToLocFormat:c.int16,glyphDataFormat:c.int16}),U=new c.Struct({version:c.int32,ascent:c.int16,descent:c.int16,lineGap:c.int16,advanceWidthMax:c.uint16,minLeftSideBearing:c.int16,minRightSideBearing:c.int16,xMaxExtent:c.int16,caretSlopeRise:c.int16,caretSlopeRun:c.int16,caretOffset:c.int16,reserved:new c.Reserved(c.int16,4),metricDataFormat:c.int16,numberOfMetrics:c.uint16}),N=new c.Struct({advance:c.uint16,bearing:c.int16}),T=new c.Struct({metrics:new c.LazyArray(N,(function(A){return A.parent.hhea.numberOfMetrics})),bearings:new c.LazyArray(c.int16,(function(A){return A.parent.maxp.numGlyphs-A.parent.hhea.numberOfMetrics}))}),V=new c.Struct({version:c.int32,numGlyphs:c.uint16,maxPoints:c.uint16,maxContours:c.uint16,maxComponentPoints:c.uint16,maxComponentContours:c.uint16,maxZones:c.uint16,maxTwilightPoints:c.uint16,maxStorage:c.uint16,maxFunctionDefs:c.uint16,maxInstructionDefs:c.uint16,maxStackElements:c.uint16,maxSizeOfInstructions:c.uint16,maxComponentElements:c.uint16,maxComponentDepth:c.uint16});function j(A,t,e){return void 0===e&&(e=0),1===A&&J[e]?J[e]:k[A][t]}var k=[["utf16be","utf16be","utf16be","utf16be","utf16be","utf16be"],["macroman","shift-jis","big5","euc-kr","iso-8859-6","iso-8859-8","macgreek","maccyrillic","symbol","Devanagari","Gurmukhi","Gujarati","Oriya","Bengali","Tamil","Telugu","Kannada","Malayalam","Sinhalese","Burmese","Khmer","macthai","Laotian","Georgian","Armenian","gb-2312-80","Tibetan","Mongolian","Geez","maccenteuro","Vietnamese","Sindhi"],["ascii"],["symbol","utf16be","shift-jis","gb18030","big5","wansung","johab",null,null,null,"utf16be"]],J={15:"maciceland",17:"macturkish",18:"maccroatian",24:"maccenteuro",25:"maccenteuro",26:"maccenteuro",27:"maccenteuro",28:"maccenteuro",30:"maciceland",37:"macromania",38:"maccenteuro",39:"maccenteuro",40:"maccenteuro",143:"macinuit",146:"macgaelic"},z=[[],{0:"en",30:"fo",60:"ks",90:"rw",1:"fr",31:"fa",61:"ku",91:"rn",2:"de",32:"ru",62:"sd",92:"ny",3:"it",33:"zh",63:"bo",93:"mg",4:"nl",34:"nl-BE",64:"ne",94:"eo",5:"sv",35:"ga",65:"sa",128:"cy",6:"es",36:"sq",66:"mr",129:"eu",7:"da",37:"ro",67:"bn",130:"ca",8:"pt",38:"cz",68:"as",131:"la",9:"no",39:"sk",69:"gu",132:"qu",10:"he",40:"si",70:"pa",133:"gn",11:"ja",41:"yi",71:"or",134:"ay",12:"ar",42:"sr",72:"ml",135:"tt",13:"fi",43:"mk",73:"kn",136:"ug",14:"el",44:"bg",74:"ta",137:"dz",15:"is",45:"uk",75:"te",138:"jv",16:"mt",46:"be",76:"si",139:"su",17:"tr",47:"uz",77:"my",140:"gl",18:"hr",48:"kk",78:"km",141:"af",19:"zh-Hant",49:"az-Cyrl",79:"lo",142:"br",20:"ur",50:"az-Arab",80:"vi",143:"iu",21:"hi",51:"hy",81:"id",144:"gd",22:"th",52:"ka",82:"tl",145:"gv",23:"ko",53:"mo",83:"ms",146:"ga",24:"lt",54:"ky",84:"ms-Arab",147:"to",25:"pl",55:"tg",85:"am",148:"el-polyton",26:"hu",56:"tk",86:"ti",149:"kl",27:"es",57:"mn-CN",87:"om",150:"az",28:"lv",58:"mn",88:"so",151:"nn",29:"se",59:"ps",89:"sw"},[],{1078:"af",16393:"en-IN",1159:"rw",1074:"tn",1052:"sq",6153:"en-IE",1089:"sw",1115:"si",1156:"gsw",8201:"en-JM",1111:"kok",1051:"sk",1118:"am",17417:"en-MY",1042:"ko",1060:"sl",5121:"ar-DZ",5129:"en-NZ",1088:"ky",11274:"es-AR",15361:"ar-BH",13321:"en-PH",1108:"lo",16394:"es-BO",3073:"ar",18441:"en-SG",1062:"lv",13322:"es-CL",2049:"ar-IQ",7177:"en-ZA",1063:"lt",9226:"es-CO",11265:"ar-JO",11273:"en-TT",2094:"dsb",5130:"es-CR",13313:"ar-KW",2057:"en-GB",1134:"lb",7178:"es-DO",12289:"ar-LB",1033:"en",1071:"mk",12298:"es-EC",4097:"ar-LY",12297:"en-ZW",2110:"ms-BN",17418:"es-SV",6145:"ary",1061:"et",1086:"ms",4106:"es-GT",8193:"ar-OM",1080:"fo",1100:"ml",18442:"es-HN",16385:"ar-QA",1124:"fil",1082:"mt",2058:"es-MX",1025:"ar-SA",1035:"fi",1153:"mi",19466:"es-NI",10241:"ar-SY",2060:"fr-BE",1146:"arn",6154:"es-PA",7169:"aeb",3084:"fr-CA",1102:"mr",15370:"es-PY",14337:"ar-AE",1036:"fr",1148:"moh",10250:"es-PE",9217:"ar-YE",5132:"fr-LU",1104:"mn",20490:"es-PR",1067:"hy",6156:"fr-MC",2128:"mn-CN",3082:"es",1101:"as",4108:"fr-CH",1121:"ne",1034:"es",2092:"az-Cyrl",1122:"fy",1044:"nb",21514:"es-US",1068:"az",1110:"gl",2068:"nn",14346:"es-UY",1133:"ba",1079:"ka",1154:"oc",8202:"es-VE",1069:"eu",3079:"de-AT",1096:"or",2077:"sv-FI",1059:"be",1031:"de",1123:"ps",1053:"sv",2117:"bn",5127:"de-LI",1045:"pl",1114:"syr",1093:"bn-IN",4103:"de-LU",1046:"pt",1064:"tg",8218:"bs-Cyrl",2055:"de-CH",2070:"pt-PT",2143:"tzm",5146:"bs",1032:"el",1094:"pa",1097:"ta",1150:"br",1135:"kl",1131:"qu-BO",1092:"tt",1026:"bg",1095:"gu",2155:"qu-EC",1098:"te",1027:"ca",1128:"ha",3179:"qu",1054:"th",3076:"zh-HK",1037:"he",1048:"ro",1105:"bo",5124:"zh-MO",1081:"hi",1047:"rm",1055:"tr",2052:"zh",1038:"hu",1049:"ru",1090:"tk",4100:"zh-SG",1039:"is",9275:"smn",1152:"ug",1028:"zh-TW",1136:"ig",4155:"smj-NO",1058:"uk",1155:"co",1057:"id",5179:"smj",1070:"hsb",1050:"hr",1117:"iu",3131:"se-FI",1056:"ur",4122:"hr-BA",2141:"iu-Latn",1083:"se",2115:"uz-Cyrl",1029:"cs",2108:"ga",2107:"se-SE",1091:"uz",1030:"da",1076:"xh",8251:"sms",1066:"vi",1164:"prs",1077:"zu",6203:"sma-NO",1106:"cy",1125:"dv",1040:"it",7227:"sms",1160:"wo",2067:"nl-BE",2064:"it-CH",1103:"sa",1157:"sah",1043:"nl",1041:"ja",7194:"sr-Cyrl-BA",1144:"ii",3081:"en-AU",1099:"kn",3098:"sr",1130:"yo",10249:"en-BZ",1087:"kk",6170:"sr-Latn-BA",4105:"en-CA",1107:"km",2074:"sr-Latn",9225:"en-029",1158:"quc",1132:"nso"}],K=new c.Struct({platformID:c.uint16,encodingID:c.uint16,languageID:c.uint16,nameID:c.uint16,length:c.uint16,string:new c.Pointer(c.uint16,new c.String("length",(function(A){return j(A.platformID,A.encodingID,A.languageID)})),{type:"parent",relativeTo:function(A){return A.parent.stringOffset},allowNull:!1})}),O=new c.Struct({length:c.uint16,tag:new c.Pointer(c.uint16,new c.String("length","utf16be"),{type:"parent",relativeTo:function(A){return A.stringOffset}})}),Z=new c.VersionedStruct(c.uint16,{0:{count:c.uint16,stringOffset:c.uint16,records:new c.Array(K,"count")},1:{count:c.uint16,stringOffset:c.uint16,records:new c.Array(K,"count"),langTagCount:c.uint16,langTags:new c.Array(O,"langTagCount")}}),X=["copyright","fontFamily","fontSubfamily","uniqueSubfamily","fullName","version","postscriptName","trademark","manufacturer","designer","description","vendorURL","designerURL","license","licenseURL",null,"preferredFamily","preferredSubfamily","compatibleFull","sampleText","postscriptCIDFontName","wwsFamilyName","wwsSubfamilyName"];Z.process=function(A){for(var t,e={},s=w(this.records);!(t=s()).done;){var i=t.value,n=z[i.platformID][i.languageID];null==n&&null!=this.langTags&&i.languageID>=32768&&(n=this.langTags[i.languageID-32768].tag),null==n&&(n=i.platformID+"-"+i.languageID);var r=i.nameID>=256?"fontFeatures":X[i.nameID]||i.nameID;null==e[r]&&(e[r]={});var B=e[r];i.nameID>=256&&(B=B[i.nameID]||(B[i.nameID]={})),"string"!=typeof i.string&&"string"==typeof B[n]||(B[n]=i.string)}this.records=e},Z.preEncode=function(){if(!Array.isArray(this.records)){this.version=0;var A=[];for(var t in this.records){var e=this.records[t];"fontFeatures"!==t&&(A.push({platformID:3,encodingID:1,languageID:1033,nameID:X.indexOf(t),length:i.byteLength(e.en,"utf16le"),string:e.en}),"postscriptName"===t&&A.push({platformID:1,encodingID:0,languageID:0,nameID:X.indexOf(t),length:e.en.length,string:e.en}))}this.records=A,this.count=A.length,this.stringOffset=Z.size(this,null,!1)}};var q=new c.VersionedStruct(c.uint16,{header:{xAvgCharWidth:c.int16,usWeightClass:c.uint16,usWidthClass:c.uint16,fsType:new c.Bitfield(c.uint16,[null,"noEmbedding","viewOnly","editable",null,null,null,null,"noSubsetting","bitmapOnly"]),ySubscriptXSize:c.int16,ySubscriptYSize:c.int16,ySubscriptXOffset:c.int16,ySubscriptYOffset:c.int16,ySuperscriptXSize:c.int16,ySuperscriptYSize:c.int16,ySuperscriptXOffset:c.int16,ySuperscriptYOffset:c.int16,yStrikeoutSize:c.int16,yStrikeoutPosition:c.int16,sFamilyClass:c.int16,panose:new c.Array(c.uint8,10),ulCharRange:new c.Array(c.uint32,4),vendorID:new c.String(4),fsSelection:new c.Bitfield(c.uint16,["italic","underscore","negative","outlined","strikeout","bold","regular","useTypoMetrics","wws","oblique"]),usFirstCharIndex:c.uint16,usLastCharIndex:c.uint16},0:{},1:{typoAscender:c.int16,typoDescender:c.int16,typoLineGap:c.int16,winAscent:c.uint16,winDescent:c.uint16,codePageRange:new c.Array(c.uint32,2)},2:{typoAscender:c.int16,typoDescender:c.int16,typoLineGap:c.int16,winAscent:c.uint16,winDescent:c.uint16,codePageRange:new c.Array(c.uint32,2),xHeight:c.int16,capHeight:c.int16,defaultChar:c.uint16,breakChar:c.uint16,maxContent:c.uint16},5:{typoAscender:c.int16,typoDescender:c.int16,typoLineGap:c.int16,winAscent:c.uint16,winDescent:c.uint16,codePageRange:new c.Array(c.uint32,2),xHeight:c.int16,capHeight:c.int16,defaultChar:c.uint16,breakChar:c.uint16,maxContent:c.uint16,usLowerOpticalPointSize:c.uint16,usUpperOpticalPointSize:c.uint16}}),_=q.versions;_[3]=_[4]=_[2];var $=new c.VersionedStruct(c.fixed32,{header:{italicAngle:c.fixed32,underlinePosition:c.int16,underlineThickness:c.int16,isFixedPitch:c.uint32,minMemType42:c.uint32,maxMemType42:c.uint32,minMemType1:c.uint32,maxMemType1:c.uint32},1:{},2:{numberOfGlyphs:c.uint16,glyphNameIndex:new c.Array(c.uint16,"numberOfGlyphs"),names:new c.Array(new c.String(c.uint8))},2.5:{numberOfGlyphs:c.uint16,offsets:new c.Array(c.uint8,"numberOfGlyphs")},3:{},4:{map:new c.Array(c.uint32,(function(A){return A.parent.maxp.numGlyphs}))}}),AA=new c.Struct({controlValues:new c.Array(c.int16)}),tA=new c.Struct({instructions:new c.Array(c.uint8)}),eA=new c.VersionedStruct("head.indexToLocFormat",{0:{offsets:new c.Array(c.uint16)},1:{offsets:new c.Array(c.uint32)}});eA.process=function(){if(0===this.version)for(var A=0;A>>=1};var sA=new c.Struct({controlValueProgram:new c.Array(c.uint8)}),iA=new c.Array(new c.Buffer),nA=function(){function A(A){this.type=A}var t=A.prototype;return t.getCFFVersion=function(A){for(;A&&!A.hdrSize;)A=A.parent;return A?A.version:-1},t.decode=function(A,t){var e=this.getCFFVersion(t)>=2?A.readUInt32BE():A.readUInt16BE();if(0===e)return[];var s,i=A.readUInt8();if(1===i)s=c.uint8;else if(2===i)s=c.uint16;else if(3===i)s=c.uint24;else{if(4!==i)throw new Error("Bad offset size in CFFIndex: ".concat(i," ").concat(A.pos));s=c.uint32}for(var n=[],r=A.pos+(e+1)*i-1,B=s.decode(A),o=0;o>4;if(15===i)break;e+=rA[i];var n=15&s;if(15===n)break;e+=rA[n]}return parseFloat(e)}return null},A.size=function(A){if(A.forceLarge&&(A=32768),(0|A)!==A){var t=""+A;return 1+Math.ceil((t.length+1)/2)}return-107<=A&&A<=107?1:108<=A&&A<=1131||-1131<=A&&A<=-108?2:-32768<=A&&A<=32767?3:5},A.encode=function(A,t){var e=Number(t);if(t.forceLarge)return A.writeUInt8(29),A.writeInt32BE(e);if((0|e)===e)return-107<=e&&e<=107?A.writeUInt8(e+139):108<=e&&e<=1131?(e-=108,A.writeUInt8(247+(e>>8)),A.writeUInt8(255&e)):-1131<=e&&e<=-108?(e=-e-108,A.writeUInt8(251+(e>>8)),A.writeUInt8(255&e)):-32768<=e&&e<=32767?(A.writeUInt8(28),A.writeInt16BE(e)):(A.writeUInt8(29),A.writeInt32BE(e));A.writeUInt8(30);for(var s=""+e,i=0;is;)e.pop()},A}(),null],[19,"Subrs",new wA(new nA,{type:"local"}),null]]),cA=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],QA=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls"],CA=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron"],hA=new c.Struct({reserved:new c.Reserved(c.uint16),reqFeatureIndex:c.uint16,featureCount:c.uint16,featureIndexes:new c.Array(c.uint16,"featureCount")}),uA=new c.Struct({tag:new c.String(4),langSys:new c.Pointer(c.uint16,hA,{type:"parent"})}),lA=new c.Struct({defaultLangSys:new c.Pointer(c.uint16,hA),count:c.uint16,langSysRecords:new c.Array(uA,"count")}),IA=new c.Struct({tag:new c.String(4),script:new c.Pointer(c.uint16,lA,{type:"parent"})}),fA=new c.Array(IA,c.uint16),DA=new c.Struct({featureParams:c.uint16,lookupCount:c.uint16,lookupListIndexes:new c.Array(c.uint16,"lookupCount")}),bA=new c.Struct({tag:new c.String(4),feature:new c.Pointer(c.uint16,DA,{type:"parent"})}),dA=new c.Array(bA,c.uint16),vA=new c.Struct({markAttachmentType:c.uint8,flags:new c.Bitfield(c.uint8,["rightToLeft","ignoreBaseGlyphs","ignoreLigatures","ignoreMarks","useMarkFilteringSet"])});function YA(A){var t=new c.Struct({lookupType:c.uint16,flags:vA,subTableCount:c.uint16,subTables:new c.Array(new c.Pointer(c.uint16,A),"subTableCount"),markFilteringSet:new c.Optional(c.uint16,(function(A){return A.flags.flags.useMarkFilteringSet}))});return new c.LazyArray(new c.Pointer(c.uint16,t),c.uint16)}var FA=new c.Struct({start:c.uint16,end:c.uint16,startCoverageIndex:c.uint16}),MA=new c.VersionedStruct(c.uint16,{1:{glyphCount:c.uint16,glyphs:new c.Array(c.uint16,"glyphCount")},2:{rangeCount:c.uint16,rangeRecords:new c.Array(FA,"rangeCount")}}),yA=new c.Struct({start:c.uint16,end:c.uint16,class:c.uint16}),LA=new c.VersionedStruct(c.uint16,{1:{startGlyph:c.uint16,glyphCount:c.uint16,classValueArray:new c.Array(c.uint16,"glyphCount")},2:{classRangeCount:c.uint16,classRangeRecord:new c.Array(yA,"classRangeCount")}}),RA=new c.Struct({a:c.uint16,b:c.uint16,deltaFormat:c.uint16}),mA=new c.Struct({sequenceIndex:c.uint16,lookupListIndex:c.uint16}),xA=new c.Struct({glyphCount:c.uint16,lookupCount:c.uint16,input:new c.Array(c.uint16,(function(A){return A.glyphCount-1})),lookupRecords:new c.Array(mA,"lookupCount")}),pA=new c.Array(new c.Pointer(c.uint16,xA),c.uint16),GA=new c.Struct({glyphCount:c.uint16,lookupCount:c.uint16,classes:new c.Array(c.uint16,(function(A){return A.glyphCount-1})),lookupRecords:new c.Array(mA,"lookupCount")}),WA=new c.Array(new c.Pointer(c.uint16,GA),c.uint16),PA=new c.VersionedStruct(c.uint16,{1:{coverage:new c.Pointer(c.uint16,MA),ruleSetCount:c.uint16,ruleSets:new c.Array(new c.Pointer(c.uint16,pA),"ruleSetCount")},2:{coverage:new c.Pointer(c.uint16,MA),classDef:new c.Pointer(c.uint16,LA),classSetCnt:c.uint16,classSet:new c.Array(new c.Pointer(c.uint16,WA),"classSetCnt")},3:{glyphCount:c.uint16,lookupCount:c.uint16,coverages:new c.Array(new c.Pointer(c.uint16,MA),"glyphCount"),lookupRecords:new c.Array(mA,"lookupCount")}}),HA=new c.Struct({backtrackGlyphCount:c.uint16,backtrack:new c.Array(c.uint16,"backtrackGlyphCount"),inputGlyphCount:c.uint16,input:new c.Array(c.uint16,(function(A){return A.inputGlyphCount-1})),lookaheadGlyphCount:c.uint16,lookahead:new c.Array(c.uint16,"lookaheadGlyphCount"),lookupCount:c.uint16,lookupRecords:new c.Array(mA,"lookupCount")}),SA=new c.Array(new c.Pointer(c.uint16,HA),c.uint16),UA=new c.VersionedStruct(c.uint16,{1:{coverage:new c.Pointer(c.uint16,MA),chainCount:c.uint16,chainRuleSets:new c.Array(new c.Pointer(c.uint16,SA),"chainCount")},2:{coverage:new c.Pointer(c.uint16,MA),backtrackClassDef:new c.Pointer(c.uint16,LA),inputClassDef:new c.Pointer(c.uint16,LA),lookaheadClassDef:new c.Pointer(c.uint16,LA),chainCount:c.uint16,chainClassSet:new c.Array(new c.Pointer(c.uint16,SA),"chainCount")},3:{backtrackGlyphCount:c.uint16,backtrackCoverage:new c.Array(new c.Pointer(c.uint16,MA),"backtrackGlyphCount"),inputGlyphCount:c.uint16,inputCoverage:new c.Array(new c.Pointer(c.uint16,MA),"inputGlyphCount"),lookaheadGlyphCount:c.uint16,lookaheadCoverage:new c.Array(new c.Pointer(c.uint16,MA),"lookaheadGlyphCount"),lookupCount:c.uint16,lookupRecords:new c.Array(mA,"lookupCount")}}),NA=new c.Fixed(16,"BE",14),TA=new c.Struct({startCoord:NA,peakCoord:NA,endCoord:NA}),VA=new c.Struct({axisCount:c.uint16,regionCount:c.uint16,variationRegions:new c.Array(new c.Array(TA,"axisCount"),"regionCount")}),jA=new c.Struct({shortDeltas:new c.Array(c.int16,(function(A){return A.parent.shortDeltaCount})),regionDeltas:new c.Array(c.int8,(function(A){return A.parent.regionIndexCount-A.parent.shortDeltaCount})),deltas:function(A){return A.shortDeltas.concat(A.regionDeltas)}}),kA=new c.Struct({itemCount:c.uint16,shortDeltaCount:c.uint16,regionIndexCount:c.uint16,regionIndexes:new c.Array(c.uint16,"regionIndexCount"),deltaSets:new c.Array(jA,"itemCount")}),JA=new c.Struct({format:c.uint16,variationRegionList:new c.Pointer(c.uint32,VA),variationDataCount:c.uint16,itemVariationData:new c.Array(new c.Pointer(c.uint32,kA),"variationDataCount")}),zA=new c.VersionedStruct(c.uint16,{1:(s={axisIndex:c.uint16},s.axisIndex=c.uint16,s.filterRangeMinValue=NA,s.filterRangeMaxValue=NA,s)}),KA=new c.Struct({conditionCount:c.uint16,conditionTable:new c.Array(new c.Pointer(c.uint32,zA),"conditionCount")}),OA=new c.Struct({featureIndex:c.uint16,alternateFeatureTable:new c.Pointer(c.uint32,DA,{type:"parent"})}),ZA=new c.Struct({version:c.fixed32,substitutionCount:c.uint16,substitutions:new c.Array(OA,"substitutionCount")}),XA=new c.Struct({conditionSet:new c.Pointer(c.uint32,KA,{type:"parent"}),featureTableSubstitution:new c.Pointer(c.uint32,ZA,{type:"parent"})}),qA=new c.Struct({majorVersion:c.uint16,minorVersion:c.uint16,featureVariationRecordCount:c.uint32,featureVariationRecords:new c.Array(XA,"featureVariationRecordCount")}),_A=function(){function A(A,t){this.predefinedOps=A,this.type=t}var t=A.prototype;return t.decode=function(A,t,e){return this.predefinedOps[e[0]]?this.predefinedOps[e[0]]:this.type.decode(A,t,e)},t.size=function(A,t){return this.type.size(A,t)},t.encode=function(A,t,e){var s=this.predefinedOps.indexOf(t);return-1!==s?s:this.type.encode(A,t,e)},A}(),$A=function(A){function t(){return A.call(this,"UInt8")||this}return o(t,A),t.prototype.decode=function(A){return 127&c.uint8.decode(A)},t}(c.Number),At=new c.Struct({first:c.uint16,nLeft:c.uint8}),tt=new c.Struct({first:c.uint16,nLeft:c.uint16}),et=new _A([QA,["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"]],new wA(new c.VersionedStruct(new $A,{0:{nCodes:c.uint8,codes:new c.Array(c.uint8,"nCodes")},1:{nRanges:c.uint8,ranges:new c.Array(At,"nRanges")}}),{lazy:!0})),st=function(A){function t(){return A.apply(this,arguments)||this}return o(t,A),t.prototype.decode=function(A,t){for(var e=Q.resolveLength(this.length,A,t),s=0,i=[];s=2?null:A=2)return null;if(this.isCIDFont)return null;var t=this.topDict.charset;if(Array.isArray(t))return t[A];if(0===A)return".notdef";switch(A-=1,t.version){case 0:return this.string(t.glyphs[A]);case 1:case 2:for(var e=0;e>1;if(A=t[i+1].first))return t[i].fd;e=i+1}}default:throw new Error("Unknown FDSelect version: ".concat(this.topDict.FDSelect.version))}},t.privateDictForGlyph=function(A){if(this.topDict.FDSelect){var t=this.fdForGlyph(A);return this.topDict.FDArray[t]?this.topDict.FDArray[t].Private:null}return this.version<2?this.topDict.Private:this.topDict.FDArray[0].Private},r(A,[{key:"postscriptName",get:function(){return this.version<2?this.nameIndex[0]:null}},{key:"fullName",get:function(){return this.string(this.topDict.FullName)}},{key:"familyName",get:function(){return this.string(this.topDict.FamilyName)}}]),A}(),ut=new c.Struct({glyphIndex:c.uint16,vertOriginY:c.int16}),lt=new c.Struct({majorVersion:c.uint16,minorVersion:c.uint16,defaultVertOriginY:c.int16,numVertOriginYMetrics:c.uint16,metrics:new c.Array(ut,"numVertOriginYMetrics")}),It=new c.Struct({height:c.uint8,width:c.uint8,horiBearingX:c.int8,horiBearingY:c.int8,horiAdvance:c.uint8,vertBearingX:c.int8,vertBearingY:c.int8,vertAdvance:c.uint8}),ft=new c.Struct({height:c.uint8,width:c.uint8,bearingX:c.int8,bearingY:c.int8,advance:c.uint8}),Dt=new c.Struct({glyph:c.uint16,xOffset:c.int8,yOffset:c.int8}),bt=function(){},dt=function(){},vt=(new c.VersionedStruct("version",{1:{metrics:ft,data:bt},2:{metrics:ft,data:dt},5:{data:dt},6:{metrics:It,data:bt},7:{metrics:It,data:dt},8:{metrics:ft,pad:new c.Reserved(c.uint8),numComponents:c.uint16,components:new c.Array(Dt,"numComponents")},9:{metrics:It,pad:new c.Reserved(c.uint8),numComponents:c.uint16,components:new c.Array(Dt,"numComponents")},17:{metrics:ft,dataLen:c.uint32,data:new c.Buffer("dataLen")},18:{metrics:It,dataLen:c.uint32,data:new c.Buffer("dataLen")},19:{dataLen:c.uint32,data:new c.Buffer("dataLen")}}),new c.Struct({ascender:c.int8,descender:c.int8,widthMax:c.uint8,caretSlopeNumerator:c.int8,caretSlopeDenominator:c.int8,caretOffset:c.int8,minOriginSB:c.int8,minAdvanceSB:c.int8,maxBeforeBL:c.int8,minAfterBL:c.int8,pad:new c.Reserved(c.int8,2)})),Yt=new c.Struct({glyphCode:c.uint16,offset:c.uint16}),Ft=new c.VersionedStruct(c.uint16,{header:{imageFormat:c.uint16,imageDataOffset:c.uint32},1:{offsetArray:new c.Array(c.uint32,(function(A){return A.parent.lastGlyphIndex-A.parent.firstGlyphIndex+1}))},2:{imageSize:c.uint32,bigMetrics:It},3:{offsetArray:new c.Array(c.uint16,(function(A){return A.parent.lastGlyphIndex-A.parent.firstGlyphIndex+1}))},4:{numGlyphs:c.uint32,glyphArray:new c.Array(Yt,(function(A){return A.numGlyphs+1}))},5:{imageSize:c.uint32,bigMetrics:It,numGlyphs:c.uint32,glyphCodeArray:new c.Array(c.uint16,"numGlyphs")}}),Mt=new c.Struct({firstGlyphIndex:c.uint16,lastGlyphIndex:c.uint16,subtable:new c.Pointer(c.uint32,Ft)}),yt=new c.Struct({indexSubTableArray:new c.Pointer(c.uint32,new c.Array(Mt,1),{type:"parent"}),indexTablesSize:c.uint32,numberOfIndexSubTables:c.uint32,colorRef:c.uint32,hori:vt,vert:vt,startGlyphIndex:c.uint16,endGlyphIndex:c.uint16,ppemX:c.uint8,ppemY:c.uint8,bitDepth:c.uint8,flags:new c.Bitfield(c.uint8,["horizontal","vertical"])}),Lt=new c.Struct({version:c.uint32,numSizes:c.uint32,sizes:new c.Array(yt,"numSizes")}),Rt=new c.Struct({ppem:c.uint16,resolution:c.uint16,imageOffsets:new c.Array(new c.Pointer(c.uint32,"void"),(function(A){return A.parent.parent.maxp.numGlyphs+1}))}),mt=new c.Struct({version:c.uint16,flags:new c.Bitfield(c.uint16,["renderOutlines"]),numImgTables:c.uint32,imageTables:new c.Array(new c.Pointer(c.uint32,Rt),"numImgTables")}),xt=new c.Struct({gid:c.uint16,paletteIndex:c.uint16}),pt=new c.Struct({gid:c.uint16,firstLayerIndex:c.uint16,numLayers:c.uint16}),Gt=new c.Struct({version:c.uint16,numBaseGlyphRecords:c.uint16,baseGlyphRecord:new c.Pointer(c.uint32,new c.Array(pt,"numBaseGlyphRecords")),layerRecords:new c.Pointer(c.uint32,new c.Array(xt,"numLayerRecords"),{lazy:!0}),numLayerRecords:c.uint16}),Wt=new c.Struct({blue:c.uint8,green:c.uint8,red:c.uint8,alpha:c.uint8}),Pt=new c.VersionedStruct(c.uint16,{header:{numPaletteEntries:c.uint16,numPalettes:c.uint16,numColorRecords:c.uint16,colorRecords:new c.Pointer(c.uint32,new c.Array(Wt,"numColorRecords")),colorRecordIndices:new c.Array(c.uint16,"numPalettes")},0:{},1:{offsetPaletteTypeArray:new c.Pointer(c.uint32,new c.Array(c.uint32,"numPalettes")),offsetPaletteLabelArray:new c.Pointer(c.uint32,new c.Array(c.uint16,"numPalettes")),offsetPaletteEntryLabelArray:new c.Pointer(c.uint32,new c.Array(c.uint16,"numPaletteEntries"))}}),Ht=new c.VersionedStruct(c.uint16,{1:{coordinate:c.int16},2:{coordinate:c.int16,referenceGlyph:c.uint16,baseCoordPoint:c.uint16},3:{coordinate:c.int16,deviceTable:new c.Pointer(c.uint16,RA)}}),St=new c.Struct({defaultIndex:c.uint16,baseCoordCount:c.uint16,baseCoords:new c.Array(new c.Pointer(c.uint16,Ht),"baseCoordCount")}),Ut=new c.Struct({tag:new c.String(4),minCoord:new c.Pointer(c.uint16,Ht,{type:"parent"}),maxCoord:new c.Pointer(c.uint16,Ht,{type:"parent"})}),Nt=new c.Struct({minCoord:new c.Pointer(c.uint16,Ht),maxCoord:new c.Pointer(c.uint16,Ht),featMinMaxCount:c.uint16,featMinMaxRecords:new c.Array(Ut,"featMinMaxCount")}),Tt=new c.Struct({tag:new c.String(4),minMax:new c.Pointer(c.uint16,Nt,{type:"parent"})}),Vt=new c.Struct({baseValues:new c.Pointer(c.uint16,St),defaultMinMax:new c.Pointer(c.uint16,Nt),baseLangSysCount:c.uint16,baseLangSysRecords:new c.Array(Tt,"baseLangSysCount")}),jt=new c.Struct({tag:new c.String(4),script:new c.Pointer(c.uint16,Vt,{type:"parent"})}),kt=new c.Array(jt,c.uint16),Jt=new c.Array(new c.String(4),c.uint16),zt=new c.Struct({baseTagList:new c.Pointer(c.uint16,Jt),baseScriptList:new c.Pointer(c.uint16,kt)}),Kt=new c.VersionedStruct(c.uint32,{header:{horizAxis:new c.Pointer(c.uint16,zt),vertAxis:new c.Pointer(c.uint16,zt)},65536:{},65537:{itemVariationStore:new c.Pointer(c.uint32,JA)}}),Ot=new c.Array(c.uint16,c.uint16),Zt=new c.Struct({coverage:new c.Pointer(c.uint16,MA),glyphCount:c.uint16,attachPoints:new c.Array(new c.Pointer(c.uint16,Ot),"glyphCount")}),Xt=new c.VersionedStruct(c.uint16,{1:{coordinate:c.int16},2:{caretValuePoint:c.uint16},3:{coordinate:c.int16,deviceTable:new c.Pointer(c.uint16,RA)}}),qt=new c.Array(new c.Pointer(c.uint16,Xt),c.uint16),_t=new c.Struct({coverage:new c.Pointer(c.uint16,MA),ligGlyphCount:c.uint16,ligGlyphs:new c.Array(new c.Pointer(c.uint16,qt),"ligGlyphCount")}),$t=new c.Struct({markSetTableFormat:c.uint16,markSetCount:c.uint16,coverage:new c.Array(new c.Pointer(c.uint32,MA),"markSetCount")}),Ae=new c.VersionedStruct(c.uint32,{header:{glyphClassDef:new c.Pointer(c.uint16,LA),attachList:new c.Pointer(c.uint16,Zt),ligCaretList:new c.Pointer(c.uint16,_t),markAttachClassDef:new c.Pointer(c.uint16,LA)},65536:{},65538:{markGlyphSetsDef:new c.Pointer(c.uint16,$t)},65539:{markGlyphSetsDef:new c.Pointer(c.uint16,$t),itemVariationStore:new c.Pointer(c.uint32,JA)}}),te=new c.Bitfield(c.uint16,["xPlacement","yPlacement","xAdvance","yAdvance","xPlaDevice","yPlaDevice","xAdvDevice","yAdvDevice"]),ee={xPlacement:c.int16,yPlacement:c.int16,xAdvance:c.int16,yAdvance:c.int16,xPlaDevice:new c.Pointer(c.uint16,RA,{type:"global",relativeTo:function(A){return A.rel}}),yPlaDevice:new c.Pointer(c.uint16,RA,{type:"global",relativeTo:function(A){return A.rel}}),xAdvDevice:new c.Pointer(c.uint16,RA,{type:"global",relativeTo:function(A){return A.rel}}),yAdvDevice:new c.Pointer(c.uint16,RA,{type:"global",relativeTo:function(A){return A.rel}})},se=function(){function A(A){void 0===A&&(A="valueFormat"),this.key=A}var t=A.prototype;return t.buildStruct=function(A){for(var t=A;!t[this.key]&&t.parent;)t=t.parent;if(t[this.key]){var e={rel:function(){return t._startOffset}},s=t[this.key];for(var i in s)s[i]&&(e[i]=ee[i]);return new c.Struct(e)}},t.size=function(A,t){return this.buildStruct(t).size(A,t)},t.decode=function(A,t){var e=this.buildStruct(t).decode(A,t);return delete e.rel,e},A}(),ie=new c.Struct({secondGlyph:c.uint16,value1:new se("valueFormat1"),value2:new se("valueFormat2")}),ne=new c.Array(ie,c.uint16),re=new c.Struct({value1:new se("valueFormat1"),value2:new se("valueFormat2")}),Be=new c.VersionedStruct(c.uint16,{1:{xCoordinate:c.int16,yCoordinate:c.int16},2:{xCoordinate:c.int16,yCoordinate:c.int16,anchorPoint:c.uint16},3:{xCoordinate:c.int16,yCoordinate:c.int16,xDeviceTable:new c.Pointer(c.uint16,RA),yDeviceTable:new c.Pointer(c.uint16,RA)}}),oe=new c.Struct({entryAnchor:new c.Pointer(c.uint16,Be,{type:"parent"}),exitAnchor:new c.Pointer(c.uint16,Be,{type:"parent"})}),Ee=new c.Struct({class:c.uint16,markAnchor:new c.Pointer(c.uint16,Be,{type:"parent"})}),we=new c.Array(Ee,c.uint16),ge=new c.Array(new c.Pointer(c.uint16,Be),(function(A){return A.parent.classCount})),ae=new c.Array(ge,c.uint16),ce=new c.Array(new c.Pointer(c.uint16,Be),(function(A){return A.parent.parent.classCount})),Qe=new c.Array(ce,c.uint16),Ce=new c.Array(new c.Pointer(c.uint16,Qe),c.uint16),he=new c.VersionedStruct("lookupType",{1:new c.VersionedStruct(c.uint16,{1:{coverage:new c.Pointer(c.uint16,MA),valueFormat:te,value:new se},2:{coverage:new c.Pointer(c.uint16,MA),valueFormat:te,valueCount:c.uint16,values:new c.LazyArray(new se,"valueCount")}}),2:new c.VersionedStruct(c.uint16,{1:{coverage:new c.Pointer(c.uint16,MA),valueFormat1:te,valueFormat2:te,pairSetCount:c.uint16,pairSets:new c.LazyArray(new c.Pointer(c.uint16,ne),"pairSetCount")},2:{coverage:new c.Pointer(c.uint16,MA),valueFormat1:te,valueFormat2:te,classDef1:new c.Pointer(c.uint16,LA),classDef2:new c.Pointer(c.uint16,LA),class1Count:c.uint16,class2Count:c.uint16,classRecords:new c.LazyArray(new c.LazyArray(re,"class2Count"),"class1Count")}}),3:{format:c.uint16,coverage:new c.Pointer(c.uint16,MA),entryExitCount:c.uint16,entryExitRecords:new c.Array(oe,"entryExitCount")},4:{format:c.uint16,markCoverage:new c.Pointer(c.uint16,MA),baseCoverage:new c.Pointer(c.uint16,MA),classCount:c.uint16,markArray:new c.Pointer(c.uint16,we),baseArray:new c.Pointer(c.uint16,ae)},5:{format:c.uint16,markCoverage:new c.Pointer(c.uint16,MA),ligatureCoverage:new c.Pointer(c.uint16,MA),classCount:c.uint16,markArray:new c.Pointer(c.uint16,we),ligatureArray:new c.Pointer(c.uint16,Ce)},6:{format:c.uint16,mark1Coverage:new c.Pointer(c.uint16,MA),mark2Coverage:new c.Pointer(c.uint16,MA),classCount:c.uint16,mark1Array:new c.Pointer(c.uint16,we),mark2Array:new c.Pointer(c.uint16,ae)},7:PA,8:UA,9:{posFormat:c.uint16,lookupType:c.uint16,extension:new c.Pointer(c.uint32,he)}});he.versions[9].extension.type=he;var ue=new c.VersionedStruct(c.uint32,{header:{scriptList:new c.Pointer(c.uint16,fA),featureList:new c.Pointer(c.uint16,dA),lookupList:new c.Pointer(c.uint16,new YA(he))},65536:{},65537:{featureVariations:new c.Pointer(c.uint32,qA)}}),le=new c.Array(c.uint16,c.uint16),Ie=le,fe=new c.Struct({glyph:c.uint16,compCount:c.uint16,components:new c.Array(c.uint16,(function(A){return A.compCount-1}))}),De=new c.Array(new c.Pointer(c.uint16,fe),c.uint16),be=new c.VersionedStruct("lookupType",{1:new c.VersionedStruct(c.uint16,{1:{coverage:new c.Pointer(c.uint16,MA),deltaGlyphID:c.int16},2:{coverage:new c.Pointer(c.uint16,MA),glyphCount:c.uint16,substitute:new c.LazyArray(c.uint16,"glyphCount")}}),2:{substFormat:c.uint16,coverage:new c.Pointer(c.uint16,MA),count:c.uint16,sequences:new c.LazyArray(new c.Pointer(c.uint16,le),"count")},3:{substFormat:c.uint16,coverage:new c.Pointer(c.uint16,MA),count:c.uint16,alternateSet:new c.LazyArray(new c.Pointer(c.uint16,Ie),"count")},4:{substFormat:c.uint16,coverage:new c.Pointer(c.uint16,MA),count:c.uint16,ligatureSets:new c.LazyArray(new c.Pointer(c.uint16,De),"count")},5:PA,6:UA,7:{substFormat:c.uint16,lookupType:c.uint16,extension:new c.Pointer(c.uint32,be)},8:{substFormat:c.uint16,coverage:new c.Pointer(c.uint16,MA),backtrackCoverage:new c.Array(new c.Pointer(c.uint16,MA),"backtrackGlyphCount"),lookaheadGlyphCount:c.uint16,lookaheadCoverage:new c.Array(new c.Pointer(c.uint16,MA),"lookaheadGlyphCount"),glyphCount:c.uint16,substitutes:new c.Array(c.uint16,"glyphCount")}});be.versions[7].extension.type=be;var de=new c.VersionedStruct(c.uint32,{header:{scriptList:new c.Pointer(c.uint16,fA),featureList:new c.Pointer(c.uint16,dA),lookupList:new c.Pointer(c.uint16,new YA(be))},65536:{},65537:{featureVariations:new c.Pointer(c.uint32,qA)}}),ve=new c.Array(c.uint16,c.uint16),Ye=new c.Struct({shrinkageEnableGSUB:new c.Pointer(c.uint16,ve),shrinkageDisableGSUB:new c.Pointer(c.uint16,ve),shrinkageEnableGPOS:new c.Pointer(c.uint16,ve),shrinkageDisableGPOS:new c.Pointer(c.uint16,ve),shrinkageJstfMax:new c.Pointer(c.uint16,new YA(he)),extensionEnableGSUB:new c.Pointer(c.uint16,ve),extensionDisableGSUB:new c.Pointer(c.uint16,ve),extensionEnableGPOS:new c.Pointer(c.uint16,ve),extensionDisableGPOS:new c.Pointer(c.uint16,ve),extensionJstfMax:new c.Pointer(c.uint16,new YA(he))}),Fe=new c.Array(new c.Pointer(c.uint16,Ye),c.uint16),Me=new c.Struct({tag:new c.String(4),jstfLangSys:new c.Pointer(c.uint16,Fe)}),ye=new c.Struct({extenderGlyphs:new c.Pointer(c.uint16,new c.Array(c.uint16,c.uint16)),defaultLangSys:new c.Pointer(c.uint16,Fe),langSysCount:c.uint16,langSysRecords:new c.Array(Me,"langSysCount")}),Le=new c.Struct({tag:new c.String(4),script:new c.Pointer(c.uint16,ye,{type:"parent"})}),Re=new c.Struct({version:c.uint32,scriptCount:c.uint16,scriptList:new c.Array(Le,"scriptCount")}),me=function(){function A(A){this._size=A}var t=A.prototype;return t.decode=function(A,t){switch(this.size(0,t)){case 1:return A.readUInt8();case 2:return A.readUInt16BE();case 3:return A.readUInt24BE();case 4:return A.readUInt32BE()}},t.size=function(A,t){return Q.resolveLength(this._size,null,t)},A}(),xe=new c.Struct({entry:new me((function(A){return 1+((48&A.parent.entryFormat)>>4)})),outerIndex:function(A){return A.entry>>1+(15&A.parent.entryFormat)},innerIndex:function(A){return A.entry&(1<<1+(15&A.parent.entryFormat))-1}}),pe=new c.Struct({entryFormat:c.uint16,mapCount:c.uint16,mapData:new c.Array(xe,"mapCount")}),Ge=new c.Struct({majorVersion:c.uint16,minorVersion:c.uint16,itemVariationStore:new c.Pointer(c.uint32,JA),advanceWidthMapping:new c.Pointer(c.uint32,pe),LSBMapping:new c.Pointer(c.uint32,pe),RSBMapping:new c.Pointer(c.uint32,pe)}),We=new c.Struct({format:c.uint32,length:c.uint32,offset:c.uint32}),Pe=new c.Struct({reserved:new c.Reserved(c.uint16,2),cbSignature:c.uint32,signature:new c.Buffer("cbSignature")}),He=new c.Struct({ulVersion:c.uint32,usNumSigs:c.uint16,usFlag:c.uint16,signatures:new c.Array(We,"usNumSigs"),signatureBlocks:new c.Array(Pe,"usNumSigs")}),Se=new c.Struct({rangeMaxPPEM:c.uint16,rangeGaspBehavior:new c.Bitfield(c.uint16,["grayscale","gridfit","symmetricSmoothing","symmetricGridfit"])}),Ue=new c.Struct({version:c.uint16,numRanges:c.uint16,gaspRanges:new c.Array(Se,"numRanges")}),Ne=new c.Struct({pixelSize:c.uint8,maximumWidth:c.uint8,widths:new c.Array(c.uint8,(function(A){return A.parent.parent.maxp.numGlyphs}))}),Te=new c.Struct({version:c.uint16,numRecords:c.int16,sizeDeviceRecord:c.int32,records:new c.Array(Ne,"numRecords")}),Ve=new c.Struct({left:c.uint16,right:c.uint16,value:c.int16}),je=new c.Struct({firstGlyph:c.uint16,nGlyphs:c.uint16,offsets:new c.Array(c.uint16,"nGlyphs"),max:function(A){return A.offsets.length&&Math.max.apply(Math,A.offsets)}}),ke=new c.Struct({off:function(A){return A._startOffset-A.parent.parent._startOffset},len:function(A){return((A.parent.leftTable.max-A.off)/A.parent.rowWidth+1)*(A.parent.rowWidth/2)},values:new c.LazyArray(c.int16,"len")}),Je=new c.VersionedStruct("format",{0:{nPairs:c.uint16,searchRange:c.uint16,entrySelector:c.uint16,rangeShift:c.uint16,pairs:new c.Array(Ve,"nPairs")},2:{rowWidth:c.uint16,leftTable:new c.Pointer(c.uint16,je,{type:"parent"}),rightTable:new c.Pointer(c.uint16,je,{type:"parent"}),array:new c.Pointer(c.uint16,ke,{type:"parent"})},3:{glyphCount:c.uint16,kernValueCount:c.uint8,leftClassCount:c.uint8,rightClassCount:c.uint8,flags:c.uint8,kernValue:new c.Array(c.int16,"kernValueCount"),leftClass:new c.Array(c.uint8,"glyphCount"),rightClass:new c.Array(c.uint8,"glyphCount"),kernIndex:new c.Array(c.uint8,(function(A){return A.leftClassCount*A.rightClassCount}))}}),ze=new c.VersionedStruct("version",{0:{subVersion:c.uint16,length:c.uint16,format:c.uint8,coverage:new c.Bitfield(c.uint8,["horizontal","minimum","crossStream","override"]),subtable:Je,padding:new c.Reserved(c.uint8,(function(A){return A.length-A._currentOffset}))},1:{length:c.uint32,coverage:new c.Bitfield(c.uint8,[null,null,null,null,null,"variation","crossStream","vertical"]),format:c.uint8,tupleIndex:c.uint16,subtable:Je,padding:new c.Reserved(c.uint8,(function(A){return A.length-A._currentOffset}))}}),Ke=new c.VersionedStruct(c.uint16,{0:{nTables:c.uint16,tables:new c.Array(ze,"nTables")},1:{reserved:new c.Reserved(c.uint16),nTables:c.uint32,tables:new c.Array(ze,"nTables")}}),Oe=new c.Struct({version:c.uint16,numGlyphs:c.uint16,yPels:new c.Array(c.uint8,"numGlyphs")}),Ze=new c.Struct({version:c.uint16,fontNumber:c.uint32,pitch:c.uint16,xHeight:c.uint16,style:c.uint16,typeFamily:c.uint16,capHeight:c.uint16,symbolSet:c.uint16,typeface:new c.String(16),characterComplement:new c.String(8),fileName:new c.String(6),strokeWeight:new c.String(1),widthType:new c.String(1),serifStyle:c.uint8,reserved:new c.Reserved(c.uint8)}),Xe=new c.Struct({bCharSet:c.uint8,xRatio:c.uint8,yStartRatio:c.uint8,yEndRatio:c.uint8}),qe=new c.Struct({yPelHeight:c.uint16,yMax:c.int16,yMin:c.int16}),_e=new c.Struct({recs:c.uint16,startsz:c.uint8,endsz:c.uint8,entries:new c.Array(qe,"recs")}),$e=new c.Struct({version:c.uint16,numRecs:c.uint16,numRatios:c.uint16,ratioRanges:new c.Array(Xe,"numRatios"),offsets:new c.Array(c.uint16,"numRatios"),groups:new c.Array(_e,"numRecs")}),As=new c.Struct({version:c.uint16,ascent:c.int16,descent:c.int16,lineGap:c.int16,advanceHeightMax:c.int16,minTopSideBearing:c.int16,minBottomSideBearing:c.int16,yMaxExtent:c.int16,caretSlopeRise:c.int16,caretSlopeRun:c.int16,caretOffset:c.int16,reserved:new c.Reserved(c.int16,4),metricDataFormat:c.int16,numberOfMetrics:c.uint16}),ts=new c.Struct({advance:c.uint16,bearing:c.int16}),es=new c.Struct({metrics:new c.LazyArray(ts,(function(A){return A.parent.vhea.numberOfMetrics})),bearings:new c.LazyArray(c.int16,(function(A){return A.parent.maxp.numGlyphs-A.parent.vhea.numberOfMetrics}))}),ss=new c.Fixed(16,"BE",14),is=new c.Struct({fromCoord:ss,toCoord:ss}),ns=new c.Struct({pairCount:c.uint16,correspondence:new c.Array(is,"pairCount")}),rs=new c.Struct({version:c.fixed32,axisCount:c.uint32,segment:new c.Array(ns,"axisCount")}),Bs=function(){function A(A,t,e){this.type=A,this.stream=t,this.parent=e,this.base=this.stream.pos,this._items=[]}var t=A.prototype;return t.getItem=function(A){if(null==this._items[A]){var t=this.stream.pos;this.stream.pos=this.base+this.type.size(null,this.parent)*A,this._items[A]=this.type.decode(this.stream,this.parent),this.stream.pos=t}return this._items[A]},t.inspect=function(){return"[UnboundedArray ".concat(this.type.constructor.name,"]")},A}(),os=function(A){function t(t){return A.call(this,t,0)||this}return o(t,A),t.prototype.decode=function(A,t){return new Bs(this.type,A,t)},t}(c.Array),Es=function(A){void 0===A&&(A=c.uint16),A=new(function(){function A(A){this.type=A}var t=A.prototype;return t.decode=function(A,t){return t=t.parent.parent,this.type.decode(A,t)},t.size=function(A,t){return t=t.parent.parent,this.type.size(A,t)},t.encode=function(A,t,e){return e=e.parent.parent,this.type.encode(A,t,e)},A}())(A);var t=new c.Struct({unitSize:c.uint16,nUnits:c.uint16,searchRange:c.uint16,entrySelector:c.uint16,rangeShift:c.uint16}),e=new c.Struct({lastGlyph:c.uint16,firstGlyph:c.uint16,value:A}),s=new c.Struct({lastGlyph:c.uint16,firstGlyph:c.uint16,values:new c.Pointer(c.uint16,new c.Array(A,(function(A){return A.lastGlyph-A.firstGlyph+1})),{type:"parent"})}),i=new c.Struct({glyph:c.uint16,value:A});return new c.VersionedStruct(c.uint16,{0:{values:new os(A)},2:{binarySearchHeader:t,segments:new c.Array(e,(function(A){return A.binarySearchHeader.nUnits}))},4:{binarySearchHeader:t,segments:new c.Array(s,(function(A){return A.binarySearchHeader.nUnits}))},6:{binarySearchHeader:t,segments:new c.Array(i,(function(A){return A.binarySearchHeader.nUnits}))},8:{firstGlyph:c.uint16,count:c.uint16,values:new c.Array(A,"count")}})};function ws(A,t){void 0===A&&(A={}),void 0===t&&(t=c.uint16);var e=Object.assign({newState:c.uint16,flags:c.uint16},A),s=new c.Struct(e),i=new os(new c.Array(c.uint16,(function(A){return A.nClasses})));return new c.Struct({nClasses:c.uint32,classTable:new c.Pointer(c.uint32,new Es(t)),stateArray:new c.Pointer(c.uint32,i),entryTable:new c.Pointer(c.uint32,new os(s))})}var gs=new c.VersionedStruct("format",{0:{deltas:new c.Array(c.int16,32)},1:{deltas:new c.Array(c.int16,32),mappingData:new Es(c.uint16)},2:{standardGlyph:c.uint16,controlPoints:new c.Array(c.uint16,32)},3:{standardGlyph:c.uint16,controlPoints:new c.Array(c.uint16,32),mappingData:new Es(c.uint16)}}),as=new c.Struct({version:c.fixed32,format:c.uint16,defaultBaseline:c.uint16,subtable:gs}),cs=new c.Struct({setting:c.uint16,nameIndex:c.int16,name:function(A){return A.parent.parent.parent.name.records.fontFeatures[A.nameIndex]}}),Qs=new c.Struct({feature:c.uint16,nSettings:c.uint16,settingTable:new c.Pointer(c.uint32,new c.Array(cs,"nSettings"),{type:"parent"}),featureFlags:new c.Bitfield(c.uint8,[null,null,null,null,null,null,"hasDefault","exclusive"]),defaultSetting:c.uint8,nameIndex:c.int16,name:function(A){return A.parent.parent.name.records.fontFeatures[A.nameIndex]}}),Cs=new c.Struct({version:c.fixed32,featureNameCount:c.uint16,reserved1:new c.Reserved(c.uint16),reserved2:new c.Reserved(c.uint32),featureNames:new c.Array(Qs,"featureNameCount")}),hs=new c.Struct({axisTag:new c.String(4),minValue:c.fixed32,defaultValue:c.fixed32,maxValue:c.fixed32,flags:c.uint16,nameID:c.uint16,name:function(A){return A.parent.parent.name.records.fontFeatures[A.nameID]}}),us=new c.Struct({nameID:c.uint16,name:function(A){return A.parent.parent.name.records.fontFeatures[A.nameID]},flags:c.uint16,coord:new c.Array(c.fixed32,(function(A){return A.parent.axisCount})),postscriptNameID:new c.Optional(c.uint16,(function(A){return A.parent.instanceSize-A._currentOffset>0}))}),ls=new c.Struct({version:c.fixed32,offsetToData:c.uint16,countSizePairs:c.uint16,axisCount:c.uint16,axisSize:c.uint16,instanceCount:c.uint16,instanceSize:c.uint16,axis:new c.Array(hs,"axisCount"),instance:new c.Array(us,"instanceCount")}),Is=new c.Fixed(16,"BE",14),fs=function(){function A(){}return A.decode=function(A,t){return t.flags?A.readUInt32BE():2*A.readUInt16BE()},A}(),Ds=new c.Struct({version:c.uint16,reserved:new c.Reserved(c.uint16),axisCount:c.uint16,globalCoordCount:c.uint16,globalCoords:new c.Pointer(c.uint32,new c.Array(new c.Array(Is,"axisCount"),"globalCoordCount")),glyphCount:c.uint16,flags:c.uint16,offsetToData:c.uint32,offsets:new c.Array(new c.Pointer(fs,"void",{relativeTo:function(A){return A.offsetToData},allowNull:!1}),(function(A){return A.glyphCount+1}))}),bs=new c.Struct({length:c.uint16,coverage:c.uint16,subFeatureFlags:c.uint32,stateTable:new function(A,t){void 0===A&&(A={}),void 0===t&&(t=c.uint16);var e=new c.Struct({version:function(){return 8},firstGlyph:c.uint16,values:new c.Array(c.uint8,c.uint16)}),s=Object.assign({newStateOffset:c.uint16,newState:function(A){return(A.newStateOffset-(A.parent.stateArray.base-A.parent._startOffset))/A.parent.nClasses},flags:c.uint16},A),i=new c.Struct(s),n=new os(new c.Array(c.uint8,(function(A){return A.nClasses})));return new c.Struct({nClasses:c.uint16,classTable:new c.Pointer(c.uint16,e),stateArray:new c.Pointer(c.uint16,n),entryTable:new c.Pointer(c.uint16,new os(i))})}}),ds=new c.Struct({justClass:c.uint32,beforeGrowLimit:c.fixed32,beforeShrinkLimit:c.fixed32,afterGrowLimit:c.fixed32,afterShrinkLimit:c.fixed32,growFlags:c.uint16,shrinkFlags:c.uint16}),vs=new c.Array(ds,c.uint32),Ys=new c.VersionedStruct("actionType",{0:{lowerLimit:c.fixed32,upperLimit:c.fixed32,order:c.uint16,glyphs:new c.Array(c.uint16,c.uint16)},1:{addGlyph:c.uint16},2:{substThreshold:c.fixed32,addGlyph:c.uint16,substGlyph:c.uint16},3:{},4:{variationAxis:c.uint32,minimumLimit:c.fixed32,noStretchValue:c.fixed32,maximumLimit:c.fixed32},5:{flags:c.uint16,glyph:c.uint16}}),Fs=new c.Struct({actionClass:c.uint16,actionType:c.uint16,actionLength:c.uint32,actionData:Ys,padding:new c.Reserved(c.uint8,(function(A){return A.actionLength-A._currentOffset}))}),Ms=new c.Array(Fs,c.uint32),ys=new c.Struct({lookupTable:new Es(new c.Pointer(c.uint16,Ms))}),Ls=new c.Struct({classTable:new c.Pointer(c.uint16,bs,{type:"parent"}),wdcOffset:c.uint16,postCompensationTable:new c.Pointer(c.uint16,ys,{type:"parent"}),widthDeltaClusters:new Es(new c.Pointer(c.uint16,vs,{type:"parent",relativeTo:function(A){return A.wdcOffset}}))}),Rs=new c.Struct({version:c.uint32,format:c.uint16,horizontal:new c.Pointer(c.uint16,Ls),vertical:new c.Pointer(c.uint16,Ls)}),ms={action:c.uint16},xs={markIndex:c.uint16,currentIndex:c.uint16},ps={currentInsertIndex:c.uint16,markedInsertIndex:c.uint16},Gs=new c.Struct({items:new os(new c.Pointer(c.uint32,new Es))}),Ws=new c.VersionedStruct("type",{0:{stateTable:new ws},1:{stateTable:new ws(xs),substitutionTable:new c.Pointer(c.uint32,Gs)},2:{stateTable:new ws(ms),ligatureActions:new c.Pointer(c.uint32,new os(c.uint32)),components:new c.Pointer(c.uint32,new os(c.uint16)),ligatureList:new c.Pointer(c.uint32,new os(c.uint16))},4:{lookupTable:new Es},5:{stateTable:new ws(ps),insertionActions:new c.Pointer(c.uint32,new os(c.uint16))}}),Ps=new c.Struct({length:c.uint32,coverage:c.uint24,type:c.uint8,subFeatureFlags:c.uint32,table:Ws,padding:new c.Reserved(c.uint8,(function(A){return A.length-A._currentOffset}))}),Hs=new c.Struct({featureType:c.uint16,featureSetting:c.uint16,enableFlags:c.uint32,disableFlags:c.uint32}),Ss=new c.Struct({defaultFlags:c.uint32,chainLength:c.uint32,nFeatureEntries:c.uint32,nSubtables:c.uint32,features:new c.Array(Hs,"nFeatureEntries"),subtables:new c.Array(Ps,"nSubtables")}),Us=new c.Struct({version:c.uint16,unused:new c.Reserved(c.uint16),nChains:c.uint32,chains:new c.Array(Ss,"nChains")}),Ns=new c.Struct({left:c.int16,top:c.int16,right:c.int16,bottom:c.int16}),Ts=new c.Struct({version:c.fixed32,format:c.uint16,lookupTable:new Es(Ns)}),Vs={};Vs.cmap=H,Vs.head=S,Vs.hhea=U,Vs.hmtx=T,Vs.maxp=V,Vs.name=Z,Vs["OS/2"]=q,Vs.post=$,Vs.fpgm=tA,Vs.loca=eA,Vs.prep=sA,Vs["cvt "]=AA,Vs.glyf=iA,Vs["CFF "]=ht,Vs.CFF2=ht,Vs.VORG=lt,Vs.EBLC=Lt,Vs.CBLC=Vs.EBLC,Vs.sbix=mt,Vs.COLR=Gt,Vs.CPAL=Pt,Vs.BASE=Kt,Vs.GDEF=Ae,Vs.GPOS=ue,Vs.GSUB=de,Vs.JSTF=Re,Vs.HVAR=Ge,Vs.DSIG=He,Vs.gasp=Ue,Vs.hdmx=Te,Vs.kern=Ke,Vs.LTSH=Oe,Vs.PCLT=Ze,Vs.VDMX=$e,Vs.vhea=As,Vs.vmtx=es,Vs.avar=rs,Vs.bsln=as,Vs.feat=Cs,Vs.fvar=ls,Vs.gvar=Ds,Vs.just=Rs,Vs.morx=Us,Vs.opbd=Ts;var js,ks=new c.Struct({tag:new c.String(4),checkSum:c.uint32,offset:new c.Pointer(c.uint32,"void",{type:"global"}),length:c.uint32}),Js=new c.Struct({tag:new c.String(4),numTables:c.uint16,searchRange:c.uint16,entrySelector:c.uint16,rangeShift:c.uint16,tables:new c.Array(ks,"numTables")});function zs(A,t){for(var e=0,s=A.length-1;e<=s;){var i=e+s>>1,n=t(A[i]);if(n<0)s=i-1;else{if(!(n>0))return i;e=i+1}}return-1}function Ks(A,t){for(var e=[];A>1;if(An.endCode.get(o))){var E=n.idRangeOffset.get(o),w=void 0;if(0===E)w=A+n.idDelta.get(o);else{var g=E/2+(A-n.startCode.get(o))-(n.segCount-o);0!==(w=n.glyphIndexArray.get(g)||0)&&(w+=n.idDelta.get(o))}return 65535&w}r=o+1}}return 0;case 8:throw new Error("TODO: cmap format 8");case 6:case 10:return n.glyphIndices.get(A-n.firstCode)||0;case 12:case 13:for(var a=0,c=n.nGroups-1;a<=c;){var Q=a+c>>1,C=n.groups.get(Q);if(AC.endCharCode))return 12===n.version?C.glyphID+(A-C.startCharCode):C.glyphID;a=Q+1}}return 0;case 14:throw new Error("TODO: cmap format 14");default:throw new Error("Unknown cmap format ".concat(n.version))}},t.getVariationSelector=function(A,t){if(!this.uvs)return 0;var e=this.uvs.varSelectors.toArray(),s=zs(e,(function(A){return t-A.varSelector})),i=e[s];return-1!==s&&i.defaultUVS&&(s=zs(i.defaultUVS,(function(t){return At.startUnicodeValue+t.additionalCount?1:0}))),-1!==s&&i.nonDefaultUVS&&-1!==(s=zs(i.nonDefaultUVS,(function(t){return A-t.unicodeValue})))?i.nonDefaultUVS[s].glyphID:0},t.getCharacterSet=function(){var A=this.cmap;switch(A.version){case 0:return Ks(0,A.codeMap.length);case 4:for(var t=[],e=A.endCode.toArray(),s=0;s=u.glyphID&&A<=u.glyphID+(u.endCharCode-u.startCharCode)&&C.push(u.startCharCode+(A-u.glyphID))}return C;case 13:for(var l,I=[],f=w(t.groups.toArray());!(l=f()).done;){var D=l.value;A===D.glyphID&&I.push.apply(I,Ks(D.startCharCode,D.endCharCode+1))}return I;default:throw new Error("Unknown cmap format ".concat(t.version))}},A}(),F(js.prototype,"getCharacterSet",[M],Object.getOwnPropertyDescriptor(js.prototype,"getCharacterSet"),js.prototype),F(js.prototype,"codePointsForGlyph",[M],Object.getOwnPropertyDescriptor(js.prototype,"codePointsForGlyph"),js.prototype),js),Xs=function(){function A(A){this.kern=A.kern}var t=A.prototype;return t.process=function(A,t){for(var e=0;e=0&&(r=B.pairs[o].value);break;case 2:var E,g=0;E=A>=B.leftTable.firstGlyph&&A=B.rightTable.firstGlyph&&t=B.glyphCount||t>=B.glyphCount)return 0;r=B.kernValue[B.kernIndex[B.leftClass[A]*B.rightClassCount+B.rightClass[t]]];break;default:throw new Error("Unsupported kerning sub-table format ".concat(n.format))}n.coverage.override?s=r:s+=r}}return s},A}(),qs=function(){function A(A){this.font=A}var t=A.prototype;return t.positionGlyphs=function(A,t){for(var e=0,s=0,i=0;i1&&(n.minX+=(i.codePoints.length-1)*n.width/i.codePoints.length);for(var r=-t[e].xAdvance,B=0,o=this.font.unitsPerEm/16,E=e+1;E<=s;E++){var w=A[E],g=w.cbox,a=t[E],c=this.getCombiningClass(w.codePoints[0]);if("Not_Reordered"!==c){switch(a.xOffset=a.yOffset=0,c){case"Double_Above":case"Double_Below":a.xOffset+=n.minX-g.width/2-g.minX;break;case"Attached_Below_Left":case"Below_Left":case"Above_Left":a.xOffset+=n.minX-g.minX;break;case"Attached_Above_Right":case"Below_Right":case"Above_Right":a.xOffset+=n.maxX-g.width-g.minX;break;default:a.xOffset+=n.minX+(n.width-g.width)/2-g.minX}switch(c){case"Double_Below":case"Below_Left":case"Below":case"Below_Right":case"Attached_Below_Left":case"Attached_Below":"Attached_Below_Left"!==c&&"Attached_Below"!==c||(n.minY+=o),a.yOffset=-n.minY-g.maxY,n.minY+=g.height;break;case"Double_Above":case"Above_Left":case"Above":case"Above_Right":case"Attached_Above":case"Attached_Above_Right":"Attached_Above"!==c&&"Attached_Above_Right"!==c||(n.maxY+=o),a.yOffset=n.maxY-g.minY,n.maxY+=g.height}a.xAdvance=a.yAdvance=0,a.xOffset+=r,a.yOffset+=B}else r-=a.xAdvance,B-=a.yAdvance}},t.getCombiningClass=function(A){var t=h.getCombiningClass(A);if(3584==(-256&A))if("Not_Reordered"===t)switch(A){case 3633:case 3636:case 3637:case 3638:case 3639:case 3655:case 3660:case 3645:case 3662:return"Above_Right";case 3761:case 3764:case 3765:case 3766:case 3767:case 3771:case 3788:case 3789:return"Above";case 3772:return"Below"}else if(3642===A)return"Below_Right";switch(t){case"CCC10":case"CCC11":case"CCC12":case"CCC13":case"CCC14":case"CCC15":case"CCC16":case"CCC17":case"CCC18":case"CCC20":case"CCC22":case"CCC29":case"CCC32":case"CCC118":case"CCC129":case"CCC132":return"Below";case"CCC23":return"Attached_Above";case"CCC24":case"CCC107":return"Above_Right";case"CCC25":case"CCC19":return"Above_Left";case"CCC26":case"CCC27":case"CCC28":case"CCC30":case"CCC31":case"CCC33":case"CCC34":case"CCC35":case"CCC36":case"CCC122":case"CCC130":return"Above";case"CCC21":break;case"CCC103":return"Below_Right"}return t},A}(),_s=function(){function A(A,t,e,s){void 0===A&&(A=1/0),void 0===t&&(t=1/0),void 0===e&&(e=-1/0),void 0===s&&(s=-1/0),this.minX=A,this.minY=t,this.maxX=e,this.maxY=s}var t=A.prototype;return t.addPoint=function(A,t){Math.abs(A)!==1/0&&(Athis.maxX&&(this.maxX=A)),Math.abs(t)!==1/0&&(tthis.maxY&&(this.maxY=t))},t.copy=function(){return new A(this.minX,this.minY,this.maxX,this.maxY)},r(A,[{key:"width",get:function(){return this.maxX-this.minX}},{key:"height",get:function(){return this.maxY-this.minY}}]),A}(),$s={Caucasian_Albanian:"aghb",Arabic:"arab",Imperial_Aramaic:"armi",Armenian:"armn",Avestan:"avst",Balinese:"bali",Bamum:"bamu",Bassa_Vah:"bass",Batak:"batk",Bengali:["bng2","beng"],Bopomofo:"bopo",Brahmi:"brah",Braille:"brai",Buginese:"bugi",Buhid:"buhd",Chakma:"cakm",Canadian_Aboriginal:"cans",Carian:"cari",Cham:"cham",Cherokee:"cher",Coptic:"copt",Cypriot:"cprt",Cyrillic:"cyrl",Devanagari:["dev2","deva"],Deseret:"dsrt",Duployan:"dupl",Egyptian_Hieroglyphs:"egyp",Elbasan:"elba",Ethiopic:"ethi",Georgian:"geor",Glagolitic:"glag",Gothic:"goth",Grantha:"gran",Greek:"grek",Gujarati:["gjr2","gujr"],Gurmukhi:["gur2","guru"],Hangul:"hang",Han:"hani",Hanunoo:"hano",Hebrew:"hebr",Hiragana:"hira",Pahawh_Hmong:"hmng",Katakana_Or_Hiragana:"hrkt",Old_Italic:"ital",Javanese:"java",Kayah_Li:"kali",Katakana:"kana",Kharoshthi:"khar",Khmer:"khmr",Khojki:"khoj",Kannada:["knd2","knda"],Kaithi:"kthi",Tai_Tham:"lana",Lao:"lao ",Latin:"latn",Lepcha:"lepc",Limbu:"limb",Linear_A:"lina",Linear_B:"linb",Lisu:"lisu",Lycian:"lyci",Lydian:"lydi",Mahajani:"mahj",Mandaic:"mand",Manichaean:"mani",Mende_Kikakui:"mend",Meroitic_Cursive:"merc",Meroitic_Hieroglyphs:"mero",Malayalam:["mlm2","mlym"],Modi:"modi",Mongolian:"mong",Mro:"mroo",Meetei_Mayek:"mtei",Myanmar:["mym2","mymr"],Old_North_Arabian:"narb",Nabataean:"nbat",Nko:"nko ",Ogham:"ogam",Ol_Chiki:"olck",Old_Turkic:"orkh",Oriya:["ory2","orya"],Osmanya:"osma",Palmyrene:"palm",Pau_Cin_Hau:"pauc",Old_Permic:"perm",Phags_Pa:"phag",Inscriptional_Pahlavi:"phli",Psalter_Pahlavi:"phlp",Phoenician:"phnx",Miao:"plrd",Inscriptional_Parthian:"prti",Rejang:"rjng",Runic:"runr",Samaritan:"samr",Old_South_Arabian:"sarb",Saurashtra:"saur",Shavian:"shaw",Sharada:"shrd",Siddham:"sidd",Khudawadi:"sind",Sinhala:"sinh",Sora_Sompeng:"sora",Sundanese:"sund",Syloti_Nagri:"sylo",Syriac:"syrc",Tagbanwa:"tagb",Takri:"takr",Tai_Le:"tale",New_Tai_Lue:"talu",Tamil:["tml2","taml"],Tai_Viet:"tavt",Telugu:["tel2","telu"],Tifinagh:"tfng",Tagalog:"tglg",Thaana:"thaa",Thai:"thai",Tibetan:"tibt",Tirhuta:"tirh",Ugaritic:"ugar",Vai:"vai ",Warang_Citi:"wara",Old_Persian:"xpeo",Cuneiform:"xsux",Yi:"yi ",Inherited:"zinh",Common:"zyyy",Unknown:"zzzz"},Ai={};for(var ti in $s){var ei=$s[ti];if(Array.isArray(ei))for(var si,ii=w(ei);!(si=ii()).done;){var ni=si.value;Ai[ni]=ti}else Ai[ei]=ti}var ri={arab:!0,hebr:!0,syrc:!0,thaa:!0,cprt:!0,khar:!0,phnx:!0,"nko ":!0,lydi:!0,avst:!0,armi:!0,phli:!0,prti:!0,sarb:!0,orkh:!0,samr:!0,mand:!0,merc:!0,mero:!0,mani:!0,mend:!0,nbat:!0,narb:!0,palm:!0,phlp:!0};function Bi(A){return ri[A]?"rtl":"ltr"}for(var oi=function(){function A(A,t,e,s,i){if(this.glyphs=A,this.positions=null,this.script=e,this.language=s||null,this.direction=i||Bi(e),this.features={},Array.isArray(t))for(var n,r=w(t);!(n=r()).done;){var B=n.value;this.features[B]=!0}else"object"==typeof t&&(this.features=t)}return r(A,[{key:"advanceWidth",get:function(){for(var A,t=0,e=w(this.positions);!(A=e()).done;)t+=A.value.xAdvance;return t}},{key:"advanceHeight",get:function(){for(var A,t=0,e=w(this.positions);!(A=e()).done;)t+=A.value.yAdvance;return t}},{key:"bbox",get:function(){for(var A=new _s,t=0,e=0,s=0;s>1;if(65535===(r=this.table.segments[s]).firstGlyph)return null;if(Ar.lastGlyph))return 2===this.table.version?r.value:r.values[A-r.firstGlyph];t=s+1}}return null;case 6:for(var i=0,n=this.table.binarySearchHeader.nUnits-1;i<=n;){var r;if(s=i+n>>1,65535===(r=this.table.segments[s]).glyph)return null;if(Ar.glyph))return r.value;i=s+1}}return null;case 8:return this.table.values[A-this.table.firstGlyph];default:throw new Error("Unknown lookup table format: ".concat(this.table.version))}},t.glyphsForValue=function(A){var t=[];switch(this.table.version){case 2:case 4:for(var e,s=w(this.table.segments);!(e=s()).done;){var i=e.value;if(2===this.table.version&&i.value===A)t.push.apply(t,Ks(i.firstGlyph,i.lastGlyph+1));else for(var n=0;n=-1;){var r=null,B=1,o=!0;i===A.length||-1===i?B=0:65535===(r=A[i]).id?B=2:null==(B=this.lookupTable.lookup(r.id))&&(B=1);var E=this.stateTable.stateArray.getItem(s)[B],w=this.stateTable.entryTable.getItem(E);0!==B&&2!==B&&(e(r,w,i),o=!(16384&w.flags)),s=w.newState,o&&(i+=n)}return A},t.traverse=function(A,t,e){if(void 0===t&&(t=0),void 0===e&&(e=new Set),!e.has(t)){e.add(t);for(var s=this.stateTable,i=s.nClasses,n=s.stateArray,r=s.entryTable,B=n.getItem(t),o=4;o=0;)65535===A[Q].id&&A.splice(Q,1),Q--;return A},t.processSubtable=function(A,t){if(this.subtable=A,this.glyphs=t,4!==this.subtable.type){this.ligatureStack=[],this.markedGlyph=null,this.firstGlyph=null,this.lastGlyph=null,this.markedIndex=null;var e=this.getStateMachine(A),s=this.getProcessor(),i=!!(this.subtable.coverage&bi);return e.process(this.glyphs,i,s)}this.processNoncontextualSubstitutions(this.subtable,this.glyphs)},t.getStateMachine=function(A){return new Di(A.table.stateTable)},t.getProcessor=function(){switch(this.subtable.type){case 0:return this.processIndicRearragement;case 1:return this.processContextualSubstitution;case 2:return this.processLigature;case 4:return this.processNoncontextualSubstitutions;case 5:return this.processGlyphInsertion;default:throw new Error("Invalid morx subtable type: ".concat(this.subtable.type))}},t.processIndicRearragement=function(A,t,e){32768&t.flags&&(this.firstGlyph=e),8192&t.flags&&(this.lastGlyph=e),function(A,t,e,s){switch(t){case 0:return A;case 1:return vi(A,[e,1],[s,0]);case 2:return vi(A,[e,0],[s,1]);case 3:return vi(A,[e,1],[s,1]);case 4:return vi(A,[e,2],[s,0]);case 5:return vi(A,[e,2],[s,0],!0,!1);case 6:return vi(A,[e,0],[s,2]);case 7:return vi(A,[e,0],[s,2],!1,!0);case 8:return vi(A,[e,1],[s,2]);case 9:return vi(A,[e,1],[s,2],!1,!0);case 10:return vi(A,[e,2],[s,1]);case 11:return vi(A,[e,2],[s,1],!0,!1);case 12:return vi(A,[e,2],[s,2]);case 13:return vi(A,[e,2],[s,2],!0,!1);case 14:return vi(A,[e,2],[s,2],!1,!0);case 15:return vi(A,[e,2],[s,2],!0,!0);default:throw new Error("Unknown verb: ".concat(t))}}(this.glyphs,15&t.flags,this.firstGlyph,this.lastGlyph)},t.processContextualSubstitution=function(A,t,e){var s=this.subtable.table.substitutionTable.items;if(65535!==t.markIndex){var i=s.getItem(t.markIndex),n=new fi(i);A=this.glyphs[this.markedGlyph],(r=n.lookup(A.id))&&(this.glyphs[this.markedGlyph]=this.font.getGlyph(r,A.codePoints))}if(65535!==t.currentIndex){var r,B=s.getItem(t.currentIndex),o=new fi(B);A=this.glyphs[e],(r=o.lookup(A.id))&&(this.glyphs[e]=this.font.getGlyph(r,A.codePoints))}32768&t.flags&&(this.markedGlyph=e)},t.processLigature=function(A,t,e){if(32768&t.flags&&this.ligatureStack.push(e),8192&t.flags){for(var s,i=this.subtable.table.ligatureActions,n=this.subtable.table.components,r=this.subtable.table.ligatureList,B=t.action,o=!1,E=0,w=[],g=[];!o;){var a,c=this.ligatureStack.pop();(a=w).unshift.apply(a,this.glyphs[c].codePoints);var Q=i.getItem(B++);o=!!(2147483648&Q);var C=!!(1073741824&Q),h=(1073741823&Q)<<2>>2;if(h+=this.glyphs[c].id,E+=n.getItem(h),o||C){var u=r.getItem(E);this.glyphs[c]=this.font.getGlyph(u,w),g.push(c),E=0,w=[]}else this.glyphs[c]=this.font.getGlyph(65535)}(s=this.ligatureStack).push.apply(s,g)}},t.processNoncontextualSubstitutions=function(A,t,e){var s=new fi(A.table.lookupTable);for(e=0;e>>5,i=!!(1024&t.flags);this._insertGlyphs(this.markedIndex,t.markedInsertIndex,s,i)}if(65535!==t.currentInsertIndex){var n=(992&t.flags)>>>5,r=!!(2048&t.flags);this._insertGlyphs(e,t.currentInsertIndex,n,r)}},t.getSupportedFeatures=function(){for(var A,t=[],e=w(this.morx.chains);!(A=e()).done;)for(var s,i=w(A.value.features);!(s=i()).done;){var n=s.value;t.push([n.featureType,n.featureSetting])}return t},t.generateInputs=function(A){return this.inputCache||this.generateInputCache(),this.inputCache[A]||[]},t.generateInputCache=function(){this.inputCache={};for(var A,t=w(this.morx.chains);!(A=t()).done;)for(var e,s=A.value,i=s.defaultFlags,n=w(s.subtables);!(e=n()).done;){var r=e.value;r.subFeatureFlags&i&&this.generateInputsForSubtable(r)}},t.generateInputsForSubtable=function(A){var t=this;if(2===A.type){if(A.coverage&bi)throw new Error("Reverse subtable, not supported.");this.subtable=A,this.ligatureStack=[];var e=this.getStateMachine(A),s=this.getProcessor(),i=[],n=[];this.glyphs=[],e.traverse({enter:function(A,e){var r=t.glyphs;n.push({glyphs:r.slice(),ligatureStack:t.ligatureStack.slice()});var B=t.font.getGlyph(A);i.push(B),r.push(i[i.length-1]),s(r[r.length-1],e,r.length-1);for(var o=0,E=0,w=0;w0&&A.applyFeatures(n,t,e)}},A}(),Mi=["rvrn"],yi=["ccmp","locl","rlig","mark","mkmk"],Li=["frac","numr","dnom"],Ri=["calt","clig","liga","rclt","curs","kern"],mi={ltr:["ltra","ltrm"],rtl:["rtla","rtlm"]},xi=function(){function A(){}return A.plan=function(A,t,e){this.planPreprocessing(A),this.planFeatures(A),this.planPostprocessing(A,e),A.assignGlobalFeatures(t),this.assignFeatures(A,t)},A.planPreprocessing=function(A){A.add({global:[].concat(Mi,mi[A.direction]),local:Li})},A.planFeatures=function(A){},A.planPostprocessing=function(A,t){A.add([].concat(yi,Ri)),A.setFeatureOverrides(t)},A.assignFeatures=function(A,t){for(var e=0;e0&&h.isDigit(t[i-1].codePoints[0]);)t[i-1].features.numr=!0,t[i-1].features.frac=!0,i--;for(;nthis.index||this.index>=this.glyphs.length?null:this.glyphs[this.index]},t.next=function(){return this.move(1)},t.prev=function(){return this.move(-1)},t.peek=function(A){void 0===A&&(A=1);var t=this.index,e=this.increment(A);return this.index=t,e},t.peekIndex=function(A){void 0===A&&(A=1);var t=this.index;this.increment(A);var e=this.index;return this.index=t,e},t.increment=function(A){void 0===A&&(A=1);var t=A<0?-1:1;for(A=Math.abs(A);A--;)this.move(t);return this.glyphs[this.index]},r(A,[{key:"cur",get:function(){return this.glyphs[this.index]||null}}]),A}(),zi=["DFLT","dflt","latn"],Ki=function(){function A(A,t){this.font=A,this.table=t,this.script=null,this.scriptTag=null,this.language=null,this.languageTag=null,this.features={},this.lookups={},this.variationsIndex=A._variationProcessor?this.findVariationsIndex(A._variationProcessor.normalizedCoords):-1,this.selectScript(),this.glyphs=[],this.positions=[],this.ligatureID=1,this.currentFeature=null}var t=A.prototype;return t.findScript=function(A){if(null==this.table.scriptList)return null;Array.isArray(A)||(A=[A]);for(var t,e=w(A);!(t=e()).done;)for(var s,i=t.value,n=w(this.table.scriptList);!(s=n()).done;){var r=s.value;if(r.tag===i)return r}return null},t.selectScript=function(A,t,e){var s,i=!1;if(!this.script||A!==this.scriptTag){if((s=this.findScript(A))||(s=this.findScript(zi)),!s)return this.scriptTag;this.scriptTag=s.tag,this.script=s.script,this.language=null,this.languageTag=null,i=!0}if(e&&e===this.direction||(this.direction=e||Bi(A)),t&&t.length<4&&(t+=" ".repeat(4-t.length)),!t||t!==this.languageTag){this.language=null;for(var n,r=w(this.script.langSysRecords);!(n=r()).done;){var B=n.value;if(B.tag===t){this.language=B.langSys,this.languageTag=B.tag;break}}this.language||(this.language=this.script.defaultLangSys,this.languageTag=null),i=!0}if(i&&(this.features={},this.language))for(var o,E=w(this.language.featureIndexes);!(o=E()).done;){var g=o.value,a=this.table.featureList[g],c=this.substituteFeatureForVariations(g);this.features[a.tag]=c||a.feature}return this.scriptTag},t.lookupsForFeatures=function(A,t){void 0===A&&(A=[]);for(var e,s=[],i=w(A);!(e=i()).done;){var n=e.value,r=this.features[n];if(r)for(var B,o=w(r.lookupListIndexes);!(B=o()).done;){var E=B.value;t&&-1!==t.indexOf(E)||s.push({feature:n,index:E,lookup:this.table.lookupList.get(E)})}}return s.sort((function(A,t){return A.index-t.index})),s},t.substituteFeatureForVariations=function(A){if(-1===this.variationsIndex)return null;for(var t,e=w(this.table.featureVariations.featureVariationRecords[this.variationsIndex].featureTableSubstitution.substitutions);!(t=e()).done;){var s=t.value;if(s.featureIndex===A)return s.alternateFeatureTable}return null},t.findVariationsIndex=function(A){var t=this.table.featureVariations;if(!t)return-1;for(var e=t.featureVariationRecords,s=0;s=0}))},t.getClassID=function(A,t){switch(t.version){case 1:var e=A-t.startGlyph;if(e>=0&&e0&&this.codePoints.every(h.isMark),this.isBase=!this.isMark,this.isLigature=this.codePoints.length>1,this.markAttachmentType=0}}]),A}(),Zi=function(A){function t(){return A.apply(this,arguments)||this}return o(t,A),t.planFeatures=function(A){A.add(["ljmo","vjmo","tjmo"],!1)},t.assignFeatures=function(A,t){for(var e=0,s=0;sAn){var g=Rn(e,n,s.features);g.features.tjmo=!0,w.push(g)}return A.splice.apply(A,[t,1].concat(w)),t+w.length-1}function xn(A,t,e){var s,i,n,r,B=A[t],o=vn(A[t].codePoints[0]),E=A[t-1].codePoints[0],w=vn(E);if(w===Dn&&o===fn)s=E,r=B;else{o===In?(i=A[t-1],n=B):(i=A[t-2],n=A[t-1],r=B);var g=i.codePoints[0],a=n.codePoints[0];Qn(g)&&Cn(a)&&(s=Xi+((g-_i)*tn+(a-$i))*en)}var c=r&&r.codePoints[0]||An;if(null!=s&&(c===An||hn(c))){var Q=s+(c-An);if(e.hasGlyphForCodePoint(Q)){var C=w===In?3:2;return A.splice(t-C+1,C,Rn(e,Q,B.features)),t-C+1}}return i&&(i.features.ljmo=!0),n&&(n.features.vjmo=!0),r&&(r.features.tjmo=!0),w===Dn?(mn(A,t-1,e),t+1):t}function pn(A,t,e){var s=A[t],i=A[t].codePoints[0];if(0!==e.glyphForCodePoint(i).advanceWidth){var n=function(A){switch(vn(A)){case Dn:case bn:return 1;case In:return 2;case fn:return 3}}(A[t-1].codePoints[0]);return A.splice(t,1),A.splice(t-n,0,s)}}function Gn(A,t,e){var s=A[t],i=A[t].codePoints[0];if(e.hasGlyphForCodePoint(Bn)){var n=Rn(e,Bn,s.features),r=0===e.glyphForCodePoint(i).advanceWidth?t:t+1;A.splice(r,0,n),t++}return t}var Wn={categories:["O","IND","S","GB","B","FM","CGJ","VMAbv","VMPst","VAbv","VPst","CMBlw","VPre","VBlw","H","VMBlw","CMAbv","MBlw","CS","R","SUB","MPst","MPre","FAbv","FPst","FBlw","null","SMAbv","SMBlw","VMPre","ZWNJ","ZWJ","WJ","M","VS","N","HN","MAbv"],decompositions:{2507:[2503,2494],2508:[2503,2519],2888:[2887,2902],2891:[2887,2878],2892:[2887,2903],3018:[3014,3006],3019:[3015,3006],3020:[3014,3031],3144:[3142,3158],3264:[3263,3285],3271:[3270,3285],3272:[3270,3286],3274:[3270,3266],3275:[3270,3266,3285],3402:[3398,3390],3403:[3399,3390],3404:[3398,3415],3546:[3545,3530],3548:[3545,3535],3549:[3545,3535,3530],3550:[3545,3551],3635:[3661,3634],3763:[3789,3762],3955:[3953,3954],3957:[3953,3956],3958:[4018,3968],3959:[4018,3953,3968],3960:[4019,3968],3961:[4019,3953,3968],3969:[3953,3968],6971:[6970,6965],6973:[6972,6965],6976:[6974,6965],6977:[6975,6965],6979:[6978,6965],69934:[69937,69927],69935:[69938,69927],70475:[70471,70462],70476:[70471,70487],70843:[70841,70842],70844:[70841,70832],70846:[70841,70845],71098:[71096,71087],71099:[71097,71087]},stateTable:[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[2,2,3,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,17,18,11,19,20,21,22,0,0,0,23,0,0,2,0,0,24,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,27,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,39,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,9,0,0,12,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,0,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,4,4,5,0,6,7,8,9,10,11,12,13,14,15,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,49,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,22,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,0,0,0,0,0,0,14,0,0,0,0,0,0,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0],[0,0,0,0,0,5,0,6,7,8,9,0,11,12,0,14,0,16,0,0,0,11,0,20,21,22,0,0,0,23,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,33,0,0,36,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,34,35,36,37,38,39,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,0,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,53,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44,45,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,0,0,0,0,0,0,38,0,0,0,0,0,0,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,29,0,30,31,32,33,0,35,36,0,38,0,40,0,0,0,35,0,43,44,45,0,0,0,46,0,0,0,0,0,0,0,0],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,0,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,5,0,6,7,8,9,48,11,12,13,14,48,16,0,0,18,11,19,20,21,22,0,0,0,23,0,0,0,0,0,0,0,25],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,0,0],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,0,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,29,0,30,31,32,33,52,35,36,37,38,52,40,0,0,41,35,42,43,44,45,0,0,0,46,0,0,0,0,0,0,0,47],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,0,51,0]],accepting:[!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0],tags:[[],["broken_cluster"],["independent_cluster"],["symbol_cluster"],["standard_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["numeral_cluster"],["broken_cluster"],["independent_cluster"],["symbol_cluster"],["symbol_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["virama_terminated_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["standard_cluster"],["broken_cluster"],["broken_cluster"],["numeral_cluster"],["number_joiner_terminated_cluster"],["standard_cluster"],["standard_cluster"],["numeral_cluster"]]},Pn=16,Hn=128,Sn=32768,Un=1<<17,Nn={Start:1,Ra_To_Become_Reph:2,Pre_M:4,Pre_C:8,Base_C:16,After_Main:32,Above_C:64,Before_Sub:128,Below_C:256,After_Sub:512,Before_Post:1024,Post_C:2048,After_Post:4096,Final_C:8192,SMVD:16384,End:32768},Tn=202758,Vn=96,jn=16400,kn={Default:{hasOldSpec:!1,virama:0,basePos:"Last",rephPos:Nn.Before_Post,rephMode:"Implicit",blwfMode:"Pre_And_Post"},Devanagari:{hasOldSpec:!0,virama:2381,basePos:"Last",rephPos:Nn.Before_Post,rephMode:"Implicit",blwfMode:"Pre_And_Post"},Bengali:{hasOldSpec:!0,virama:2509,basePos:"Last",rephPos:Nn.After_Sub,rephMode:"Implicit",blwfMode:"Pre_And_Post"},Gurmukhi:{hasOldSpec:!0,virama:2637,basePos:"Last",rephPos:Nn.Before_Sub,rephMode:"Implicit",blwfMode:"Pre_And_Post"},Gujarati:{hasOldSpec:!0,virama:2765,basePos:"Last",rephPos:Nn.Before_Post,rephMode:"Implicit",blwfMode:"Pre_And_Post"},Oriya:{hasOldSpec:!0,virama:2893,basePos:"Last",rephPos:Nn.After_Main,rephMode:"Implicit",blwfMode:"Pre_And_Post"},Tamil:{hasOldSpec:!0,virama:3021,basePos:"Last",rephPos:Nn.After_Post,rephMode:"Implicit",blwfMode:"Pre_And_Post"},Telugu:{hasOldSpec:!0,virama:3149,basePos:"Last",rephPos:Nn.After_Post,rephMode:"Explicit",blwfMode:"Post_Only"},Kannada:{hasOldSpec:!0,virama:3277,basePos:"Last",rephPos:Nn.After_Post,rephMode:"Implicit",blwfMode:"Post_Only"},Malayalam:{hasOldSpec:!0,virama:3405,basePos:"Last",rephPos:Nn.After_Main,rephMode:"Log_Repha",blwfMode:"Pre_And_Post"},Khmer:{hasOldSpec:!1,virama:6098,basePos:"First",rephPos:Nn.Ra_To_Become_Reph,rephMode:"Vis_Repha",blwfMode:"Pre_And_Post"}},Jn={6078:[6081,6078],6079:[6081,6079],6080:[6081,6080],6084:[6081,6084],6085:[6081,6085]},zn=Wn.decompositions,Kn=new u(i("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","base64")),On=new l({stateTable:[[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,14,15,16,17],[0,0,0,18,19,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,28,29,30,31,32,33,0,34,0,0,35,36,0,0,37,0],[0,0,0,38,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,39,0,0,0,40,41,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,12,43,0,0,0,0],[0,0,0,0,43,44,44,8,9,0,0,0,0,0,43,0,0,0,0],[0,0,0,45,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,50,0,0,51,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,52,0,0,0,0,0,0,0,0],[0,0,0,53,54,55,56,57,58,0,59,0,0,60,61,0,0,62,0],[0,0,0,4,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,63,64,0,0,40,41,0,9,0,10,0,0,0,42,0,63,0,0],[0,2,3,4,5,6,7,8,9,0,10,11,11,12,13,0,2,16,0],[0,0,0,18,65,20,21,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,0,0],[0,0,0,69,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,73,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,75,0,0,0,76,77,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,25,79,0,0,0,0],[0,0,0,18,19,20,74,22,23,0,24,0,0,25,26,0,0,27,0],[0,0,0,81,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,86,0,0,87,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,88,0,0,0,0,0,0,0,0],[0,0,0,18,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,89,90,0,0,76,77,0,23,0,24,0,0,0,78,0,89,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,0,0],[0,0,0,94,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,96,0,0,0,97,98,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,35,100,0,0,0,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,102,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,107,0,0,108,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,109,0,0,0,0,0,0,0,0],[0,0,0,28,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,110,111,0,0,97,98,0,33,0,34,0,0,0,99,0,110,0,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,0,0],[0,0,0,0,5,7,7,8,9,0,10,0,0,0,13,0,0,16,0],[0,0,0,115,116,117,118,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,39,0,122,0,123,123,8,9,0,10,0,0,0,42,0,39,0,0],[0,124,64,0,0,0,0,0,0,0,0,0,0,0,0,0,124,0,0],[0,39,0,0,0,121,125,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,126,126,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,46,47,48,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,47,47,49,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,128,127,127,49,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,129,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,50,0,0,0,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,134,0,0,0,0,0,0,0,0],[0,0,0,135,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,136,0,0,0,137,138,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,60,140,0,0,0,0],[0,0,0,0,140,141,141,57,58,0,0,0,0,0,140,0,0,0,0],[0,0,0,142,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,147,0,0,148,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,149,0,0,0,0,0,0,0,0],[0,0,0,53,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,150,151,0,0,137,138,0,58,0,59,0,0,0,139,0,150,0,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,0,0],[0,0,0,155,116,156,157,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,0,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,75,3,4,5,159,160,8,161,0,162,0,11,12,163,0,75,16,0],[0,0,0,0,0,40,164,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,0,165,0,0,0,0],[0,124,64,0,0,40,164,0,9,0,10,0,0,0,42,0,124,0,0],[0,0,0,0,0,70,70,0,71,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,71,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,167,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,168,0,0,0,0,0,0,0,0],[0,0,0,0,19,74,74,22,23,0,24,0,0,0,26,0,0,27,0],[0,0,0,0,79,80,80,22,23,0,0,0,0,0,79,0,0,0,0],[0,0,0,169,170,171,172,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,75,0,176,0,177,177,22,23,0,24,0,0,0,78,0,75,0,0],[0,178,90,0,0,0,0,0,0,0,0,0,0,0,0,0,178,0,0],[0,75,0,0,0,175,179,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,180,180,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,82,83,84,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,83,83,85,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,182,181,181,85,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,183,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,86,0,0,0,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,188,0,0,0,0,0,0,0,0],[0,0,0,189,170,190,191,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,0,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,76,193,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,0,194,0,0,0,0],[0,178,90,0,0,76,193,0,23,0,24,0,0,0,78,0,178,0,0],[0,0,0,0,29,95,31,32,33,0,34,0,0,0,36,0,0,37,0],[0,0,0,0,100,101,101,32,33,0,0,0,0,0,100,0,0,0,0],[0,0,0,195,196,197,198,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,96,0,202,0,203,203,32,33,0,34,0,0,0,99,0,96,0,0],[0,204,111,0,0,0,0,0,0,0,0,0,0,0,0,0,204,0,0],[0,96,0,0,0,201,205,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,206,206,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,103,104,105,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,104,104,106,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,208,207,207,106,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,209,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,107,0,0,0,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,214,0,0,0,0,0,0,0,0],[0,0,0,215,196,216,217,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,0,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,97,219,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,0,220,0,0,0,0],[0,204,111,0,0,97,219,0,33,0,34,0,0,0,99,0,204,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,223,0,0,0,40,224,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,119,225,0,0,0,0],[0,0,0,115,116,117,222,8,9,0,10,0,0,119,120,0,0,16,0],[0,0,0,115,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,226,64,0,0,40,224,0,9,0,10,0,0,0,42,0,226,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,39,0,0,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,44,44,8,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,227,0,228,229,0,9,0,10,0,0,230,0,0,0,0,0],[0,39,0,122,0,121,121,0,9,0,10,0,0,0,42,0,39,0,0],[0,0,0,0,0,0,0,8,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,231,231,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,232,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,130,131,132,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,131,131,133,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,234,233,233,133,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,235,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,54,56,56,57,58,0,59,0,0,0,61,0,0,62,0],[0,0,0,240,241,242,243,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,136,0,247,0,248,248,57,58,0,59,0,0,0,139,0,136,0,0],[0,249,151,0,0,0,0,0,0,0,0,0,0,0,0,0,249,0,0],[0,136,0,0,0,246,250,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,251,251,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,143,144,145,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,144,144,146,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,253,252,252,146,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,254,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,147,0,0,0,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,259,0,0,0,0,0,0,0,0],[0,0,0,260,241,261,262,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,0,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,137,264,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,0,265,0,0,0,0],[0,249,151,0,0,137,264,0,58,0,59,0,0,0,139,0,249,0,0],[0,0,0,221,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,158,225,0,0,0,0],[0,0,0,155,116,156,222,8,9,0,10,0,0,158,120,0,0,16,0],[0,0,0,155,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,43,266,266,8,161,0,24,0,0,12,267,0,0,0,0],[0,75,0,176,43,268,268,269,161,0,24,0,0,0,267,0,75,0,0],[0,0,0,0,0,270,0,0,271,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,272,0,0,0,0,0,0,0,0],[0,273,274,0,0,40,41,0,9,0,10,0,0,0,42,0,273,0,0],[0,0,0,40,0,123,123,8,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,121,275,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,166,0,0,0,0,72,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,276,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,279,0,0,0,76,280,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,173,281,0,0,0,0],[0,0,0,169,170,171,278,22,23,0,24,0,0,173,174,0,0,27,0],[0,0,0,169,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,282,90,0,0,76,280,0,23,0,24,0,0,0,78,0,282,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,75,0,0,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,80,80,22,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,283,0,284,285,0,23,0,24,0,0,286,0,0,0,0,0],[0,75,0,176,0,175,175,0,23,0,24,0,0,0,78,0,75,0,0],[0,0,0,0,0,0,0,22,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,287,287,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,288,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,184,185,186,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,185,185,187,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,290,289,289,187,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,291,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,277,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,192,281,0,0,0,0],[0,0,0,189,170,190,278,22,23,0,24,0,0,192,174,0,0,27,0],[0,0,0,189,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,76,0,177,177,22,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,175,296,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,299,0,0,0,97,300,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,199,301,0,0,0,0],[0,0,0,195,196,197,298,32,33,0,34,0,0,199,200,0,0,37,0],[0,0,0,195,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,302,111,0,0,97,300,0,33,0,34,0,0,0,99,0,302,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,96,0,0,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,101,101,32,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,303,0,304,305,0,33,0,34,0,0,306,0,0,0,0,0],[0,96,0,202,0,201,201,0,33,0,34,0,0,0,99,0,96,0,0],[0,0,0,0,0,0,0,32,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,307,307,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,308,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,210,211,212,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,211,211,213,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,310,309,309,213,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,311,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,297,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,218,301,0,0,0,0],[0,0,0,215,196,216,298,32,33,0,34,0,0,218,200,0,0,37,0],[0,0,0,215,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,97,0,203,203,32,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,201,316,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,116,222,222,8,9,0,10,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,9,0,0,0,0,0,225,0,0,0,0],[0,0,0,317,318,319,320,8,9,0,10,0,0,321,322,0,0,16,0],[0,223,0,323,0,123,123,8,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,0,0,121,324,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,325,318,326,327,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,64,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,9,0,0,0,0,230,0,0,0,0,0],[0,0,0,227,0,228,121,0,9,0,10,0,0,230,0,0,0,0,0],[0,0,0,227,0,121,121,0,9,0,10,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,49,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46,0,0],[0,0,0,0,0,329,329,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,330,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,236,237,238,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,237,237,239,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,332,331,331,239,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,333,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,337,0,0,0,137,338,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,244,339,0,0,0,0],[0,0,0,240,241,242,336,57,58,0,59,0,0,244,245,0,0,62,0],[0,0,0,240,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,340,151,0,0,137,338,0,58,0,59,0,0,0,139,0,340,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,136,0,0,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,141,141,57,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,341,0,342,343,0,58,0,59,0,0,344,0,0,0,0,0],[0,136,0,247,0,246,246,0,58,0,59,0,0,0,139,0,136,0,0],[0,0,0,0,0,0,0,57,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,345,345,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,346,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,255,256,257,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,256,256,258,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,348,347,347,258,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,349,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,335,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,263,339,0,0,0,0],[0,0,0,260,241,261,336,57,58,0,59,0,0,263,245,0,0,62,0],[0,0,0,260,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,137,0,248,248,57,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,246,354,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,126,126,8,23,0,0,0,0,0,0,0,0,0,0],[0,355,90,0,0,121,125,0,9,0,10,0,0,0,42,0,355,0,0],[0,0,0,0,0,356,356,269,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,357,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,270,0,0,0,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,363,0,0,0,0,0,0,0,0],[0,0,0,364,116,365,366,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,40,0,121,121,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,170,278,278,22,23,0,24,0,0,0,174,0,0,27,0],[0,0,0,0,281,80,80,22,23,0,0,0,0,0,281,0,0,0,0],[0,0,0,369,370,371,372,22,23,0,24,0,0,373,374,0,0,27,0],[0,279,0,375,0,177,177,22,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,0,0,175,376,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,377,370,378,379,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,90,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,23,0,0,0,0,286,0,0,0,0,0],[0,0,0,283,0,284,175,0,23,0,24,0,0,286,0,0,0,0,0],[0,0,0,283,0,175,175,0,23,0,24,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,85,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,82,0,0],[0,0,0,0,0,381,381,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,382,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,292,293,294,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,293,293,295,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,0,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,384,383,383,295,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,385,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,76,0,175,175,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,196,298,298,32,33,0,34,0,0,0,200,0,0,37,0],[0,0,0,0,301,101,101,32,33,0,0,0,0,0,301,0,0,0,0],[0,0,0,387,388,389,390,32,33,0,34,0,0,391,392,0,0,37,0],[0,299,0,393,0,203,203,32,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,0,0,201,394,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,395,388,396,397,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,111,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,33,0,0,0,0,306,0,0,0,0,0],[0,0,0,303,0,304,201,0,33,0,34,0,0,306,0,0,0,0,0],[0,0,0,303,0,201,201,0,33,0,34,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,106,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,103,0,0],[0,0,0,0,0,399,399,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,400,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,312,313,314,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,313,313,315,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,0,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,402,401,401,315,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,403,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,97,0,201,201,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,407,0,0,0,40,408,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,321,409,0,0,0,0],[0,0,0,317,318,319,406,8,9,0,10,0,0,321,322,0,0,16,0],[0,0,0,317,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,410,64,0,0,40,408,0,9,0,10,0,0,0,42,0,410,0,0],[0,223,0,0,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,223,0,323,0,121,121,0,9,0,10,0,0,0,42,0,223,0,0],[0,0,0,405,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,328,409,0,0,0,0],[0,0,0,325,318,326,406,8,9,0,10,0,0,328,322,0,0,16,0],[0,0,0,325,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,0,0,0,133,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,130,0,0],[0,0,0,0,0,411,411,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,412,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,40,121,334,0,9,0,10,0,0,0,42,0,0,0,0],[0,0,0,0,413,0,0,0,9,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,241,336,336,57,58,0,59,0,0,0,245,0,0,62,0],[0,0,0,0,339,141,141,57,58,0,0,0,0,0,339,0,0,0,0],[0,0,0,414,415,416,417,57,58,0,59,0,0,418,419,0,0,62,0],[0,337,0,420,0,248,248,57,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,0,0,246,421,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,422,415,423,424,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,151,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,58,0,0,0,0,344,0,0,0,0,0],[0,0,0,341,0,342,246,0,58,0,59,0,0,344,0,0,0,0,0],[0,0,0,341,0,246,246,0,58,0,59,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,143,0,0],[0,0,0,0,0,426,426,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,427,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,350,351,352,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,351,351,353,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,0,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,429,428,428,353,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,430,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,137,0,246,246,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,432,116,433,434,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,0,0,180,180,269,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,358,359,360,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,359,359,361,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,437,436,436,361,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,438,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,443,274,0,0,0,0,0,0,0,0,0,0,0,0,0,443,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,367,225,0,0,0,0],[0,0,0,364,116,365,445,8,161,0,162,0,0,367,120,0,0,16,0],[0,0,0,364,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,448,0,0,0,76,449,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,373,450,0,0,0,0],[0,0,0,369,370,371,447,22,23,0,24,0,0,373,374,0,0,27,0],[0,0,0,369,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,451,90,0,0,76,449,0,23,0,24,0,0,0,78,0,451,0,0],[0,279,0,0,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,279,0,375,0,175,175,0,23,0,24,0,0,0,78,0,279,0,0],[0,0,0,446,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,380,450,0,0,0,0],[0,0,0,377,370,378,447,22,23,0,24,0,0,380,374,0,0,27,0],[0,0,0,377,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,0,0,0,187,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,0,0],[0,0,0,0,0,452,452,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,453,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,76,175,386,0,23,0,24,0,0,0,78,0,0,0,0],[0,0,0,0,454,0,0,0,23,0,0,0,0,0,0,0,0,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,457,0,0,0,97,458,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,391,459,0,0,0,0],[0,0,0,387,388,389,456,32,33,0,34,0,0,391,392,0,0,37,0],[0,0,0,387,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,460,111,0,0,97,458,0,33,0,34,0,0,0,99,0,460,0,0],[0,299,0,0,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,299,0,393,0,201,201,0,33,0,34,0,0,0,99,0,299,0,0],[0,0,0,455,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,398,459,0,0,0,0],[0,0,0,395,388,396,456,32,33,0,34,0,0,398,392,0,0,37,0],[0,0,0,395,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,0,0,0,213,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,210,0,0],[0,0,0,0,0,461,461,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,462,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,97,201,404,0,33,0,34,0,0,0,99,0,0,0,0],[0,0,0,0,463,0,0,0,33,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,318,406,406,8,9,0,10,0,0,0,322,0,0,16,0],[0,0,0,0,409,44,44,8,9,0,0,0,0,0,409,0,0,0,0],[0,0,0,464,465,466,467,8,9,0,10,0,0,468,469,0,0,16,0],[0,407,0,470,0,123,123,8,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,0,0,121,471,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,472,465,473,474,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,0,0,0,0,239,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,236,0,0],[0,0,0,0,0,0,476,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,479,0,0,0,137,480,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,418,481,0,0,0,0],[0,0,0,414,415,416,478,57,58,0,59,0,0,418,419,0,0,62,0],[0,0,0,414,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,482,151,0,0,137,480,0,58,0,59,0,0,0,139,0,482,0,0],[0,337,0,0,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,337,0,420,0,246,246,0,58,0,59,0,0,0,139,0,337,0,0],[0,0,0,477,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,425,481,0,0,0,0],[0,0,0,422,415,423,478,57,58,0,59,0,0,425,419,0,0,62,0],[0,0,0,422,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,0,0,0,258,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,0,0],[0,0,0,0,0,483,483,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,484,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,137,246,431,0,58,0,59,0,0,0,139,0,0,0,0],[0,0,0,0,485,0,0,0,58,0,0,0,0,0,0,0,0,0,0],[0,0,0,444,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,435,225,0,0,0,0],[0,0,0,432,116,433,445,8,161,0,162,0,0,435,120,0,0,16,0],[0,0,0,432,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,0,486,486,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,487,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,439,440,441,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,440,440,442,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,489,488,488,442,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,490,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,495,0,496,497,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,0,116,445,445,8,161,0,162,0,0,0,120,0,0,16,0],[0,0,0,0,225,44,44,8,161,0,0,0,0,0,225,0,0,0,0],[0,0,0,0,370,447,447,22,23,0,24,0,0,0,374,0,0,27,0],[0,0,0,0,450,80,80,22,23,0,0,0,0,0,450,0,0,0,0],[0,0,0,499,500,501,502,22,23,0,24,0,0,503,504,0,0,27,0],[0,448,0,505,0,177,177,22,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,0,0,175,506,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,507,500,508,509,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,0,0,0,0,295,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,292,0,0],[0,0,0,0,0,0,511,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,388,456,456,32,33,0,34,0,0,0,392,0,0,37,0],[0,0,0,0,459,101,101,32,33,0,0,0,0,0,459,0,0,0,0],[0,0,0,512,513,514,515,32,33,0,34,0,0,516,517,0,0,37,0],[0,457,0,518,0,203,203,32,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,0,0,201,519,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,520,513,521,522,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,0,0,0,0,315,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,0,0],[0,0,0,0,0,0,524,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,527,0,0,0,40,528,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,468,529,0,0,0,0],[0,0,0,464,465,466,526,8,9,0,10,0,0,468,469,0,0,16,0],[0,0,0,464,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,530,64,0,0,40,528,0,9,0,10,0,0,0,42,0,530,0,0],[0,407,0,0,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,407,0,470,0,121,121,0,9,0,10,0,0,0,42,0,407,0,0],[0,0,0,525,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,475,529,0,0,0,0],[0,0,0,472,465,473,526,8,9,0,10,0,0,475,469,0,0,16,0],[0,0,0,472,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40,0,0],[0,0,0,0,415,478,478,57,58,0,59,0,0,0,419,0,0,62,0],[0,0,0,0,481,141,141,57,58,0,0,0,0,0,481,0,0,0,0],[0,0,0,531,532,533,534,57,58,0,59,0,0,535,536,0,0,62,0],[0,479,0,537,0,248,248,57,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,0,0,246,538,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,539,532,540,541,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,0,0,0,0,353,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,350,0,0],[0,0,0,0,0,0,543,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,361,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,358,0,0],[0,0,0,0,0,544,544,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,545,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,491,492,493,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,492,492,494,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,547,546,546,494,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,548,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,274,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,161,0,0,0,0,498,0,0,0,0,0],[0,0,0,495,0,496,368,0,161,0,162,0,0,498,0,0,0,0,0],[0,0,0,495,0,368,368,0,161,0,162,0,0,0,0,0,0,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,553,0,0,0,76,554,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,503,555,0,0,0,0],[0,0,0,499,500,501,552,22,23,0,24,0,0,503,504,0,0,27,0],[0,0,0,499,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,556,90,0,0,76,554,0,23,0,24,0,0,0,78,0,556,0,0],[0,448,0,0,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,448,0,505,0,175,175,0,23,0,24,0,0,0,78,0,448,0,0],[0,0,0,551,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,510,555,0,0,0,0],[0,0,0,507,500,508,552,22,23,0,24,0,0,510,504,0,0,27,0],[0,0,0,507,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,76,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,559,0,0,0,97,560,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,516,561,0,0,0,0],[0,0,0,512,513,514,558,32,33,0,34,0,0,516,517,0,0,37,0],[0,0,0,512,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,562,111,0,0,97,560,0,33,0,34,0,0,0,99,0,562,0,0],[0,457,0,0,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,457,0,518,0,201,201,0,33,0,34,0,0,0,99,0,457,0,0],[0,0,0,557,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,523,561,0,0,0,0],[0,0,0,520,513,521,558,32,33,0,34,0,0,523,517,0,0,37,0],[0,0,0,520,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,97,0,0],[0,0,0,0,465,526,526,8,9,0,10,0,0,0,469,0,0,16,0],[0,0,0,0,529,44,44,8,9,0,0,0,0,0,529,0,0,0,0],[0,0,0,563,66,564,565,8,9,0,10,0,0,566,68,0,0,16,0],[0,527,0,567,0,123,123,8,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,0,0,121,568,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,569,66,570,571,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,575,0,0,0,137,576,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,535,577,0,0,0,0],[0,0,0,531,532,533,574,57,58,0,59,0,0,535,536,0,0,62,0],[0,0,0,531,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,578,151,0,0,137,576,0,58,0,59,0,0,0,139,0,578,0,0],[0,479,0,0,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,479,0,537,0,246,246,0,58,0,59,0,0,0,139,0,479,0,0],[0,0,0,573,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,542,577,0,0,0,0],[0,0,0,539,532,540,574,57,58,0,59,0,0,542,536,0,0,62,0],[0,0,0,539,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,137,0,0],[0,0,0,0,0,0,0,442,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,439,0,0],[0,0,0,0,0,579,579,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,580,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,549,368,550,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,0,368,368,0,161,0,162,0,0,0,362,0,0,0,0],[0,0,0,0,581,0,0,0,161,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,500,552,552,22,23,0,24,0,0,0,504,0,0,27,0],[0,0,0,0,555,80,80,22,23,0,0,0,0,0,555,0,0,0,0],[0,0,0,582,91,583,584,22,23,0,24,0,0,585,93,0,0,27,0],[0,553,0,586,0,177,177,22,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,0,0,175,587,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,588,91,589,590,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,0,513,558,558,32,33,0,34,0,0,0,517,0,0,37,0],[0,0,0,0,561,101,101,32,33,0,0,0,0,0,561,0,0,0,0],[0,0,0,592,112,593,594,32,33,0,34,0,0,595,114,0,0,37,0],[0,559,0,596,0,203,203,32,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,0,0,201,597,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,598,112,599,600,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,566,165,0,0,0,0],[0,0,0,563,66,564,67,8,9,0,10,0,0,566,68,0,0,16,0],[0,0,0,563,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,527,0,0,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,527,0,567,0,121,121,0,9,0,10,0,0,0,42,0,527,0,0],[0,0,0,602,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,165,44,44,8,9,0,0,0,0,572,165,0,0,0,0],[0,0,0,569,66,570,67,8,9,0,10,0,0,572,68,0,0,16,0],[0,0,0,569,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,0,532,574,574,57,58,0,59,0,0,0,536,0,0,62,0],[0,0,0,0,577,141,141,57,58,0,0,0,0,0,577,0,0,0,0],[0,0,0,603,152,604,605,57,58,0,59,0,0,606,154,0,0,62,0],[0,575,0,607,0,248,248,57,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,0,0,246,608,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,609,152,610,611,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,0,0,0,0,494,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,491,0,0],[0,0,0,0,0,0,613,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,585,194,0,0,0,0],[0,0,0,582,91,583,92,22,23,0,24,0,0,585,93,0,0,27,0],[0,0,0,582,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,553,0,0,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,553,0,586,0,175,175,0,23,0,24,0,0,0,78,0,553,0,0],[0,0,0,614,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,194,80,80,22,23,0,0,0,0,591,194,0,0,0,0],[0,0,0,588,91,589,92,22,23,0,24,0,0,591,93,0,0,27,0],[0,0,0,588,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,595,220,0,0,0,0],[0,0,0,592,112,593,113,32,33,0,34,0,0,595,114,0,0,37,0],[0,0,0,592,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,559,0,0,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,559,0,596,0,201,201,0,33,0,34,0,0,0,99,0,559,0,0],[0,0,0,615,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,220,101,101,32,33,0,0,0,0,601,220,0,0,0,0],[0,0,0,598,112,599,113,32,33,0,34,0,0,601,114,0,0,37,0],[0,0,0,598,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,66,67,67,8,9,0,10,0,0,0,68,0,0,16,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,606,265,0,0,0,0],[0,0,0,603,152,604,153,57,58,0,59,0,0,606,154,0,0,62,0],[0,0,0,603,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,575,0,0,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,575,0,607,0,246,246,0,58,0,59,0,0,0,139,0,575,0,0],[0,0,0,616,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,265,141,141,57,58,0,0,0,0,612,265,0,0,0,0],[0,0,0,609,152,610,153,57,58,0,59,0,0,612,154,0,0,62,0],[0,0,0,609,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,549,0,0],[0,0,0,0,91,92,92,22,23,0,24,0,0,0,93,0,0,27,0],[0,0,0,0,112,113,113,32,33,0,34,0,0,0,114,0,0,37,0],[0,0,0,0,152,153,153,57,58,0,59,0,0,0,154,0,0,62,0]],accepting:[!1,!0,!0,!0,!0,!0,!1,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!0,!1,!0,!0,!1,!1,!0,!0,!0,!0,!0,!0,!1,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!0,!0,!0,!1,!0,!0,!0,!1,!0,!1,!0,!0,!1,!1,!0,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!0,!0,!0,!1,!0,!1,!0,!0,!1,!1,!0,!0,!0,!0,!0,!0,!0,!1,!0,!0,!0,!1,!0,!0,!0,!1,!0,!1,!0,!0,!1,!1,!1,!0,!0,!1,!1,!0,!0,!0,!0,!0,!0,!1,!0,!1,!0,!0,!1,!1,!0,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!0,!0,!0,!1,!0,!1,!0,!0,!1,!1,!1,!0,!0,!1,!1,!0,!0,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!0,!1,!0,!1,!0,!0,!1,!1,!1,!0,!0,!1,!1,!0,!0,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!1,!1,!1,!1,!0,!0,!1,!1,!0,!0,!0,!1,!0,!0,!0,!1,!0,!1,!0,!0,!1,!1,!1,!0,!0,!1,!1,!0,!0,!0,!1,!0,!0,!0,!0,!1,!0,!1,!0,!0,!0,!0,!0,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!1,!1,!1,!1,!0,!0,!1,!1,!0,!0,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!1,!1,!1,!1,!0,!0,!1,!1,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!1,!1,!1,!0,!1,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!1,!1,!1,!1,!0,!0,!1,!1,!0,!0,!0,!1,!0,!0,!1,!1,!0,!1,!0,!0,!1,!0,!0,!1,!0,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!1,!1,!1,!0,!1,!0,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!1,!1,!1,!0,!1,!0,!1,!0,!0,!0,!0,!1,!1,!1,!0,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!1,!1,!1,!0,!1,!0,!1,!0,!0,!1,!1,!0,!0,!1,!1,!0,!0,!0,!1,!0,!1,!0,!0,!0,!0,!1,!1,!1,!0,!1,!0,!0,!0,!0,!1,!1,!1,!0,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!0,!1,!0,!0,!0,!0,!1,!1,!1,!1,!1,!1,!1,!0,!0,!1,!1,!0,!0,!1,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!0,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!0,!1,!0,!0,!1,!1,!1,!1,!1,!0,!0,!1,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!0,!1,!0,!0,!0,!0,!1,!1,!1,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!0,!0,!1,!0,!0,!0,!0,!0,!1,!0,!0,!1,!0,!0,!0],tags:[[],["broken_cluster"],["consonant_syllable"],["vowel_syllable"],["broken_cluster"],["broken_cluster"],[],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["standalone_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["consonant_syllable"],["broken_cluster"],["symbol_cluster"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["standalone_cluster"],["standalone_cluster"],[],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["broken_cluster"],["broken_cluster"],["consonant_syllable","broken_cluster"],["broken_cluster"],[],["broken_cluster"],["symbol_cluster"],[],["symbol_cluster"],["symbol_cluster"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],[],[],["broken_cluster"],["broken_cluster"],[],[],["broken_cluster"],["broken_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["symbol_cluster"],["symbol_cluster"],["symbol_cluster"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],[],[],["consonant_syllable"],["consonant_syllable"],[],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],[],[],["vowel_syllable"],["vowel_syllable"],[],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],[],[],[],["broken_cluster"],["broken_cluster"],[],[],["broken_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],[],["standalone_cluster"],["standalone_cluster"],[],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["broken_cluster"],["symbol_cluster"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],[],[],[],["consonant_syllable"],["consonant_syllable"],[],[],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],[],[],[],["vowel_syllable"],["vowel_syllable"],[],[],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],[],[],[],["broken_cluster"],[],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],[],[],["standalone_cluster"],["standalone_cluster"],[],[],["standalone_cluster"],["standalone_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],[],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],[],[],[],["consonant_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],[],[],[],["vowel_syllable"],[],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],[],[],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],[],[],["standalone_cluster"],[],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],[],[],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],[],[],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],[],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],[],[],[],[],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],[],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],[],[],[],[],["consonant_syllable","broken_cluster"],["consonant_syllable","broken_cluster"],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],["broken_cluster"],[],["broken_cluster"],["broken_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],[],[],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],["consonant_syllable"],[],["consonant_syllable"],["consonant_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],["vowel_syllable"],[],["vowel_syllable"],["vowel_syllable"],["broken_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],["standalone_cluster"],[],["standalone_cluster"],["standalone_cluster"],[],["consonant_syllable"],["vowel_syllable"],["standalone_cluster"]]}),Zn=function(A){function t(){return A.apply(this,arguments)||this}return o(t,A),t.planFeatures=function(A){A.addStage($n),A.addStage(["locl","ccmp"]),A.addStage(nr),A.addStage("nukt"),A.addStage("akhn"),A.addStage("rphf",!1),A.addStage("rkrf"),A.addStage("pref",!1),A.addStage("blwf",!1),A.addStage("abvf",!1),A.addStage("half",!1),A.addStage("pstf",!1),A.addStage("vatu"),A.addStage("cjct"),A.addStage("cfar",!1),A.addStage(rr),A.addStage({local:["init"],global:["pres","abvs","blws","psts","haln","dist","abvm","blwm","calt","clig"]}),A.unicodeScript=function(A){return Ai[A]}(A.script),A.indicConfig=kn[A.unicodeScript]||kn.Default,A.isOldSpec=A.indicConfig.hasOldSpec&&"2"!==A.script[A.script.length-1]},t.assignFeatures=function(A,t){for(var e=function(e){var s=t[e].codePoints[0],i=Jn[s]||zn[s];if(i){var n=i.map((function(s){var i=A.font.glyphForCodePoint(s);return new Oi(A.font,i.id,[s],t[e].features)}));t.splice.apply(t,[e,1].concat(n))}},s=t.length-1;s>=0;s--)e(s)},t}(xi);function Xn(A){return Kn.get(A.codePoints[0])>>8}function qn(A){return 1<<(255&Kn.get(A.codePoints[0]))}Y(Zn,"zeroMarkWidths","NONE");var _n=function(A,t,e,s){this.category=A,this.position=t,this.syllableType=e,this.syllable=s};function $n(A,t){for(var e,s=0,i=0,n=w(On.match(t.map(Xn)));!(e=n()).done;){var r=e.value,B=r[0],o=r[1],E=r[2];if(B>i){++s;for(var g=i;gh);break;case"First":for(var b=(C=E)+1;by&&!(Ar(t[L])||M&&t[L].shaperInfo.category===Pn);L--);if(t[L].shaperInfo.category!==Pn&&L>y){var R=t[y];t.splice.apply(t,[y,0].concat(t.splice(y+1,L-y))),t[L]=R}break}for(var m=Nn.Start,x=E;xE;G--)if(t[G-1].shaperInfo.position!==Nn.Pre_M){p.position=t[G-1].shaperInfo.position;break}}else p.position!==Nn.SMVD&&(m=p.position)}for(var W=C,P=C+1;PE&&!Ar(t[Z]))}}}}function rr(A,t,e){for(var s=e.indicConfig,i=A._layoutEngine.engine.GSUBProcessor.features,n=0,r=Br(t,0);n=Nn.Base_C){if(B&&o+1Nn.Base_C&&o--;break}if(o===r&&nn&&!(t[g].shaperInfo.category&(Hn|jn));)g--;er(t[g])&&t[g].shaperInfo.position!==Nn.Pre_M?g+1n;a--)if(t[a-1].shaperInfo.position===Nn.Pre_M){var c=a-1;cn&&t[C].shaperInfo.position===Nn.SMVD;)C--;if(er(t[C]))for(var I=o+1;In&&!(t[b-1].shaperInfo.category&(Hn|jn));)b--;if(b>n&&t[b-1].shaperInfo.category===Hn)for(var d=D,v=o+1;vn&&er(t[b-1])&&b=A.length)return t;for(var e=A[t].shaperInfo.syllable;++t=0;s--)e(s)},t}(xi);function cr(A){return wr.get(A.codePoints[0])}Y(ar,"zeroMarkWidths","BEFORE_GPOS");var Qr=function(A,t,e){this.category=A,this.syllableType=t,this.syllable=e};function Cr(A,t){for(var e,s=0,i=w(gr.match(t.map(cr)));!(e=i()).done;){var n=e.value,r=n[0],B=n[1],o=n[2];++s;for(var E=r;E<=B;E++)t[E].shaperInfo=new Qr(or[cr(t[E])],o[0],s);for(var g="R"===t[r].shaperInfo.category?1:Math.min(3,B-r),a=r;a1)for(n=s+1;n=A.length)return t;for(var e=A[t].shaperInfo.syllable;++t=0;P--)this.glyphs.splice(u[P],1);return this.glyphs[this.glyphIterator.index]=v,!0}}return!1;case 5:return this.applyContext(t);case 6:return this.applyChainingContext(t);case 7:return this.applyLookup(t.lookupType,t.extension);default:throw new Error("GSUB lookupType ".concat(A," is not supported"))}},t}(Ki),Yr=function(A){function t(){return A.apply(this,arguments)||this}o(t,A);var e=t.prototype;return e.applyPositionValue=function(A,t){var e=this.positions[this.glyphIterator.peekIndex(A)];null!=t.xAdvance&&(e.xAdvance+=t.xAdvance),null!=t.yAdvance&&(e.yAdvance+=t.yAdvance),null!=t.xPlacement&&(e.xOffset+=t.xPlacement),null!=t.yPlacement&&(e.yOffset+=t.yPlacement);var s=this.font._variationProcessor,i=this.font.GDEF&&this.font.GDEF.itemVariationStore;s&&i&&(t.xPlaDevice&&(e.xOffset+=s.getDelta(i,t.xPlaDevice.a,t.xPlaDevice.b)),t.yPlaDevice&&(e.yOffset+=s.getDelta(i,t.yPlaDevice.a,t.yPlaDevice.b)),t.xAdvDevice&&(e.xAdvance+=s.getDelta(i,t.xAdvDevice.a,t.xAdvDevice.b)),t.yAdvDevice&&(e.yAdvance+=s.getDelta(i,t.yAdvDevice.a,t.yAdvDevice.b)))},e.applyLookup=function(A,t){switch(A){case 1:var e=this.coverageIndex(t.coverage);if(-1===e)return!1;switch(t.version){case 1:this.applyPositionValue(0,t.value);break;case 2:this.applyPositionValue(0,t.values.get(e))}return!0;case 2:var s=this.glyphIterator.peek();if(!s)return!1;var i=this.coverageIndex(t.coverage);if(-1===i)return!1;switch(t.version){case 1:for(var n,r=w(t.pairSets.get(i));!(n=r()).done;){var B=n.value;if(B.secondGlyph===s.id)return this.applyPositionValue(0,B.value1),this.applyPositionValue(1,B.value2),!0}return!1;case 2:var o=this.getClassID(this.glyphIterator.cur.id,t.classDef1),E=this.getClassID(s.id,t.classDef2);if(-1===o||-1===E)return!1;var g=t.classRecords.get(o).get(E);return this.applyPositionValue(0,g.value1),this.applyPositionValue(1,g.value2),!0}case 3:var a=this.glyphIterator.peekIndex(),c=this.glyphs[a];if(!c)return!1;var Q=t.entryExitRecords[this.coverageIndex(t.coverage)];if(!Q||!Q.exitAnchor)return!1;var C=t.entryExitRecords[this.coverageIndex(t.coverage,c.id)];if(!C||!C.entryAnchor)return!1;var h=this.getAnchor(C.entryAnchor),u=this.getAnchor(Q.exitAnchor),l=this.positions[this.glyphIterator.index],I=this.positions[a];switch(this.direction){case"ltr":l.xAdvance=u.x+l.xOffset;var f=h.x+I.xOffset;I.xAdvance-=f,I.xOffset-=f;break;case"rtl":f=u.x+l.xOffset,l.xAdvance-=f,l.xOffset-=f,I.xAdvance=h.x+I.xOffset}return this.glyphIterator.flags.rightToLeft?(this.glyphIterator.cur.cursiveAttachment=a,l.yOffset=h.y-u.y):(c.cursiveAttachment=this.glyphIterator.index,l.yOffset=u.y-h.y),!0;case 4:var D=this.coverageIndex(t.markCoverage);if(-1===D)return!1;for(var b=this.glyphIterator.index;--b>=0&&(this.glyphs[b].isMark||this.glyphs[b].ligatureComponent>0););if(b<0)return!1;var d=this.coverageIndex(t.baseCoverage,this.glyphs[b].id);if(-1===d)return!1;var v=t.markArray[D],Y=t.baseArray[d][v.class];return this.applyAnchor(v,Y,b),!0;case 5:var F=this.coverageIndex(t.markCoverage);if(-1===F)return!1;for(var M=this.glyphIterator.index;--M>=0&&this.glyphs[M].isMark;);if(M<0)return!1;var y=this.coverageIndex(t.ligatureCoverage,this.glyphs[M].id);if(-1===y)return!1;var L=t.ligatureArray[y],R=this.glyphIterator.cur,m=this.glyphs[M],x=m.ligatureID&&m.ligatureID===R.ligatureID&&R.ligatureComponent>0?Math.min(R.ligatureComponent,m.codePoints.length)-1:m.codePoints.length-1,p=t.markArray[F],G=L[x][p.class];return this.applyAnchor(p,G,M),!0;case 6:var W=this.coverageIndex(t.mark1Coverage);if(-1===W)return!1;var P=this.glyphIterator.peekIndex(-1),H=this.glyphs[P];if(!H||!H.isMark)return!1;var S=this.glyphIterator.cur,U=!1;if(S.ligatureID===H.ligatureID?S.ligatureID?S.ligatureComponent===H.ligatureComponent&&(U=!0):U=!0:(S.ligatureID&&!S.ligatureComponent||H.ligatureID&&!H.ligatureComponent)&&(U=!0),!U)return!1;var N=this.coverageIndex(t.mark2Coverage,H.id);if(-1===N)return!1;var T=t.mark1Array[W],V=t.mark2Array[N][T.class];return this.applyAnchor(T,V,P),!0;case 7:return this.applyContext(t);case 8:return this.applyChainingContext(t);case 9:return this.applyLookup(t.lookupType,t.extension);default:throw new Error("Unsupported GPOS table: ".concat(A))}},e.applyAnchor=function(A,t,e){var s=this.getAnchor(t),i=this.getAnchor(A.markAnchor),n=(this.positions[e],this.positions[this.glyphIterator.index]);n.xOffset=s.x-i.x,n.yOffset=s.y-i.y,this.glyphIterator.cur.markAttachment=e},e.getAnchor=function(A){var t=A.xCoordinate,e=A.yCoordinate,s=this.font._variationProcessor,i=this.font.GDEF&&this.font.GDEF.itemVariationStore;return s&&i&&(A.xDeviceTable&&(t+=s.getDelta(i,A.xDeviceTable.a,A.xDeviceTable.b)),A.yDeviceTable&&(e+=s.getDelta(i,A.yDeviceTable.a,A.yDeviceTable.b))),{x:t,y:e}},e.applyFeatures=function(t,e,s){A.prototype.applyFeatures.call(this,t,e,s);for(var i=0;i>16;if(0===t)switch(A>>8){case 0:return 173===A;case 3:return 847===A;case 6:return 1564===A;case 23:return 6068<=A&&A<=6069;case 24:return 6155<=A&&A<=6158;case 32:return 8203<=A&&A<=8207||8234<=A&&A<=8238||8288<=A&&A<=8303;case 254:return 65024<=A&&A<=65039||65279===A;case 255:return 65520<=A&&A<=65528;default:return!1}else switch(t){case 1:return 113824<=A&&A<=113827||119155<=A&&A<=119162;case 14:return 917504<=A&&A<=921599;default:return!1}},t.getAvailableFeatures=function(A,t){var e=[];return this.engine&&e.push.apply(e,this.engine.getAvailableFeatures(A,t)),this.font.kern&&-1===e.indexOf("kern")&&e.push("kern"),e},t.stringsForGlyph=function(A){for(var t,e=new Set,s=w(this.font._cmapProcessor.codePointsForGlyph(A));!(t=s()).done;){var i=t.value;e.add(String.fromCodePoint(i))}if(this.engine&&this.engine.stringsForGlyph)for(var n,r=w(this.engine.stringsForGlyph(A));!(n=r()).done;){var B=n.value;e.add(B)}return Array.from(e)},A}(),yr={moveTo:"M",lineTo:"L",quadraticCurveTo:"Q",bezierCurveTo:"C",closePath:"Z"},Lr=function(){function A(){this.commands=[],this._bbox=null,this._cbox=null}var t=A.prototype;return t.toFunction=function(){var A=this;return function(t){A.commands.forEach((function(A){return t[A.command].apply(t,A.args)}))}},t.toSVG=function(){return this.commands.map((function(A){var t=A.args.map((function(A){return Math.round(100*A)/100}));return"".concat(yr[A.command]).concat(t.join(" "))})).join("")},t.mapPoints=function(t){for(var e,s=new A,i=w(this.commands);!(e=i()).done;){for(var n=e.value,r=[],B=0;B0&&this.codePoints.every(h.isMark),this.isLigature=this.codePoints.length>1}var t=A.prototype;return t._getPath=function(){return new Lr},t._getCBox=function(){return this.path.cbox},t._getBBox=function(){return this.path.bbox},t._getTableMetrics=function(A){if(this.id0)r=Math.abs(t.typoAscender-t.typoDescender),B=t.typoAscender-A.maxY;else{var o=this._font.hhea;r=Math.abs(o.ascent-o.descent),B=o.ascent-A.maxY}return this._font._variationProcessor&&this._font.HVAR&&(s+=this._font._variationProcessor.getAdvanceAdjustment(this.id,this._font.HVAR)),this._metrics={advanceWidth:s,advanceHeight:r,leftBearing:i,topBearing:B}},t.getScaledPath=function(A){var t=1/this._font.unitsPerEm*A;return this.path.scale(t)},t._getName=function(){var A=this._font.post;if(!A)return null;switch(A.version){case 1:return Wr[this.id];case 2:var t=A.glyphNameIndex[this.id];return t0?this._decodeSimple(s,t):s.numberOfContours<0&&this._decodeComposite(s,t,e),s},e._decodeSimple=function(A,t){A.points=[];var e=new c.Array(c.uint16,A.numberOfContours).decode(t);A.instructions=new c.Array(c.uint8,c.uint16).decode(t);for(var s=[],i=e[e.length-1]+1;s.length=0,0,0);A.points.push(E)}var w=0;for(o=0;o>1,B.length=0}function v(A,t){c&&r.closePath(),r.moveTo(A,t),c=!0}return function e(){for(;t.pos1&&b(),a+=B.shift(),v(g,a);break;case 5:for(;B.length>=2;)g+=B.shift(),a+=B.shift(),r.lineTo(g,a);break;case 6:case 7:for(var h=6===E;B.length>=1;)h?g+=B.shift():a+=B.shift(),r.lineTo(g,a),h=!h;break;case 8:for(;B.length>0;){var Y=g+B.shift(),F=a+B.shift(),M=Y+B.shift(),y=F+B.shift();g=M+B.shift(),a=y+B.shift(),r.bezierCurveTo(Y,F,M,y,g,a)}break;case 10:var L=B.pop()+l,R=u[L];if(R){n[L]=!0;var m=t.pos,x=s;t.pos=R.offset,s=R.offset+R.length,e(),t.pos=m,s=x}break;case 11:if(A.version>=2)break;return;case 14:if(A.version>=2)break;B.length>0&&b(),c&&(r.closePath(),c=!1);break;case 15:if(A.version<2)throw new Error("vsindex operator not supported in CFF v1");f=B.pop();break;case 16:if(A.version<2)throw new Error("blend operator not supported in CFF v1");if(!D)throw new Error("blend operator in non-variation font");for(var p=D.getBlendVector(I,f),G=B.pop(),W=G*p.length,P=B.length-W,H=P-G,S=0;S>3;break;case 21:B.length>2&&b(),g+=B.shift(),a+=B.shift(),v(g,a);break;case 22:B.length>1&&b(),v(g+=B.shift(),a);break;case 24:for(;B.length>=8;)Y=g+B.shift(),F=a+B.shift(),M=Y+B.shift(),y=F+B.shift(),g=M+B.shift(),a=y+B.shift(),r.bezierCurveTo(Y,F,M,y,g,a);g+=B.shift(),a+=B.shift(),r.lineTo(g,a);break;case 25:for(;B.length>=8;)g+=B.shift(),a+=B.shift(),r.lineTo(g,a);Y=g+B.shift(),F=a+B.shift(),M=Y+B.shift(),y=F+B.shift(),g=M+B.shift(),a=y+B.shift(),r.bezierCurveTo(Y,F,M,y,g,a);break;case 26:for(B.length%2&&(g+=B.shift());B.length>=4;)Y=g,F=a+B.shift(),M=Y+B.shift(),y=F+B.shift(),g=M,a=y+B.shift(),r.bezierCurveTo(Y,F,M,y,g,a);break;case 27:for(B.length%2&&(a+=B.shift());B.length>=4;)Y=g+B.shift(),F=a,M=Y+B.shift(),y=F+B.shift(),g=M+B.shift(),a=y,r.bezierCurveTo(Y,F,M,y,g,a);break;case 28:B.push(t.readInt16BE());break;case 29:L=B.pop()+C,(R=Q[L])&&(i[L]=!0,m=t.pos,x=s,t.pos=R.offset,s=R.offset+R.length,e(),t.pos=m,s=x);break;case 30:case 31:for(h=31===E;B.length>=4;)h?(Y=g+B.shift(),F=a,M=Y+B.shift(),y=F+B.shift(),a=y+B.shift(),g=M+(1===B.length?B.shift():0)):(Y=g,F=a+B.shift(),M=Y+B.shift(),y=F+B.shift(),g=M+B.shift(),a=y+(1===B.length?B.shift():0)),r.bezierCurveTo(Y,F,M,y,g,a),h=!h;break;case 12:switch(E=t.readUInt8()){case 3:var T=B.pop(),V=B.pop();B.push(T&&V?1:0);break;case 4:T=B.pop(),V=B.pop(),B.push(T||V?1:0);break;case 5:T=B.pop(),B.push(T?0:1);break;case 9:T=B.pop(),B.push(Math.abs(T));break;case 10:T=B.pop(),V=B.pop(),B.push(T+V);break;case 11:T=B.pop(),V=B.pop(),B.push(T-V);break;case 12:T=B.pop(),V=B.pop(),B.push(T/V);break;case 14:T=B.pop(),B.push(-T);break;case 15:T=B.pop(),V=B.pop(),B.push(T===V?1:0);break;case 18:B.pop();break;case 20:var j=B.pop(),k=B.pop();o[k]=j;break;case 21:k=B.pop(),B.push(o[k]||0);break;case 22:var J=B.pop(),z=B.pop(),K=B.pop(),O=B.pop();B.push(K<=O?J:z);break;case 23:B.push(Math.random());break;case 24:T=B.pop(),V=B.pop(),B.push(T*V);break;case 26:T=B.pop(),B.push(Math.sqrt(T));break;case 27:T=B.pop(),B.push(T,T);break;case 28:T=B.pop(),V=B.pop(),B.push(V,T);break;case 29:(k=B.pop())<0?k=0:k>B.length-1&&(k=B.length-1),B.push(B[k]);break;case 30:var Z=B.pop(),X=B.pop();if(X>=0)for(;X>0;){for(var q=B[Z-1],_=Z-2;_>=0;_--)B[_+1]=B[_];B[0]=q,X--}else for(;X<0;){q=B[0];for(var $=0;$<=Z;$++)B[$]=B[$+1];B[Z-1]=q,X++}break;case 34:Y=g+B.shift(),F=a,M=Y+B.shift(),y=F+B.shift();var AA=M+B.shift(),tA=y,eA=AA+B.shift(),sA=tA,iA=eA+B.shift(),nA=sA,rA=iA+B.shift(),BA=nA;g=rA,a=BA,r.bezierCurveTo(Y,F,M,y,AA,tA),r.bezierCurveTo(eA,sA,iA,nA,rA,BA);break;case 35:for(var oA=[],EA=0;EA<=5;EA++)g+=B.shift(),a+=B.shift(),oA.push(g,a);r.bezierCurveTo.apply(r,oA.slice(0,6)),r.bezierCurveTo.apply(r,oA.slice(6)),B.shift();break;case 36:Y=g+B.shift(),F=a+B.shift(),M=Y+B.shift(),sA=tA=y=F+B.shift(),iA=(eA=(AA=M+B.shift())+B.shift())+B.shift(),nA=sA+B.shift(),rA=iA+B.shift(),g=rA,a=BA=nA,r.bezierCurveTo(Y,F,M,y,AA,tA),r.bezierCurveTo(eA,sA,iA,nA,rA,BA);break;case 37:var wA=g,gA=a;oA=[];for(var aA=0;aA<=4;aA++)g+=B.shift(),a+=B.shift(),oA.push(g,a);Math.abs(g-wA)>Math.abs(a-gA)?(g+=B.shift(),a=gA):(g=wA,a+=B.shift()),oA.push(g,a),r.bezierCurveTo.apply(r,oA.slice(0,6)),r.bezierCurveTo.apply(r,oA.slice(6));break;default:throw new Error("Unknown op: 12 ".concat(E))}break;default:throw new Error("Unknown op: ".concat(E))}else if(E<247)B.push(E-139);else if(E<251){var cA=t.readUInt8();B.push(256*(E-247)+cA+108)}else E<255?(cA=t.readUInt8(),B.push(256*-(E-251)-cA-108)):B.push(t.readInt32BE()/65536)}}(),c&&r.closePath(),r},t}(Pr),Vr=new c.Struct({originX:c.uint16,originY:c.uint16,type:new c.String(4),data:new c.Buffer((function(A){return A.parent.buflen-A._currentOffset}))}),jr=function(A){function t(){return A.apply(this,arguments)||this}o(t,A);var e=t.prototype;return e.getImageForSize=function(A){for(var t=0;t=A)break}var s=e.imageOffsets,i=s[this.id],n=s[this.id+1];return i===n?null:(this._font.stream.pos=i,Vr.decode(this._font.stream,{buflen:n-i}))},e.render=function(t,e){var s=this.getImageForSize(e);if(null!=s){var i=e/this._font.unitsPerEm;t.image(s.data,{height:e,x:s.originX,y:(this.bbox.minY-s.originY)*i})}this._font.sbix.flags.renderOutlines&&A.prototype.render.call(this,t,e)},t}(Nr),kr=function(A,t){this.glyph=A,this.color=t},Jr=function(A){function t(){return A.apply(this,arguments)||this}o(t,A);var e=t.prototype;return e._getBBox=function(){for(var A=new _s,t=0;t>1,n=t.baseGlyphRecord[i];if(this.idn.gid)){var r=n;break}e=i+1}}if(null==r){var B=this._font._getBaseGlyph(this.id);return[new kr(B,w={red:0,green:0,blue:0,alpha:255})]}for(var o=[],E=r.firstLayerIndex;E=1&&t[e]=e.glyphCount)){var s=e.offsets[A];if(s!==e.offsets[A+1]){var i=this.font.stream;if(i.pos=s,!(i.pos>=i.length)){var n=i.readUInt16BE(),r=s+i.readUInt16BE();if(32768&n){var B=i.pos;i.pos=r;var o=this.decodePoints();r=i.pos,i.pos=B}var E=t.map((function(A){return A.copy()}));n&=4095;for(var w=0;w=e.globalCoordCount)throw new Error("Invalid gvar table");c=e.globalCoords[4095&a]}if(16384&a){for(var C=[],h=0;hMath.max(0,t[B]))return 0;r=(r*i[B]+Number.EPSILON)/(t[B]+Number.EPSILON)}else{if(i[B]s[B])return 0;r=i[B]n)){var B=s,o=s;for(s++;s<=n;)e[s]&&(this.deltaInterpolate(o+1,s-1,o,s,t,A),o=s),s++;o===B?this.deltaShift(i,n,o,t,A):(this.deltaInterpolate(o+1,n,o,B,t,A),B>0&&this.deltaInterpolate(i,B-1,o,B,t,A)),s=n+1}}},t.deltaInterpolate=function(A,t,e,s,i,n){if(!(A>t))for(var r=["x","y"],B=0;Bi[s][o]){var E=e;e=s,s=E}var w=i[e][o],g=i[s][o],a=n[e][o],c=n[s][o];if(w!==g||a===c)for(var Q=w===g?0:(c-a)/(g-w),C=A;C<=t;C++){var h=i[C][o];h<=w?h+=a-w:h>=g?h+=c-g:h=a+(h-w)*Q,n[C][o]=h}}},t.deltaShift=function(A,t,e,s,i){var n=i[e].x-s[e].x,r=i[e].y-s[e].y;if(0!==n||0!==r)for(var B=A;B<=t;B++)B!==e&&(i[B].x+=n,i[B].y+=r)},t.getAdvanceAdjustment=function(A,t){var e,s;if(t.advanceWidthMapping){var i=A;i>=t.advanceWidthMapping.mapCount&&(i=t.advanceWidthMapping.mapCount-1),t.advanceWidthMapping.entryFormat;var n=t.advanceWidthMapping.mapData[i];e=n.outerIndex,s=n.innerIndex}else e=0,s=A;return this.getDelta(t.itemVariationStore,e,s)},t.getDelta=function(A,t,e){if(t>=A.itemVariationData.length)return 0;var s=A.itemVariationData[t];if(e>=s.deltaSets.length)return 0;for(var i=s.deltaSets[e],n=this.getBlendVector(A,t),r=0,B=0;Bw.peakCoord||w.peakCoord>w.endCoord||w.startCoord<0&&w.endCoord>0&&0!==w.peakCoord||0===w.peakCoord?1:s[E]w.endCoord?0:s[E]===w.peakCoord?1:s[E]=0&&A<=255?1:2},A.encode=function(A,t){t>=0&&t<=255?A.writeUInt8(t):A.writeInt16BE(t)},A}(),Xr=new c.Struct({numberOfContours:c.int16,xMin:c.int16,yMin:c.int16,xMax:c.int16,yMax:c.int16,endPtsOfContours:new c.Array(c.uint16,"numberOfContours"),instructions:new c.Array(c.uint8,c.uint16),flags:new c.Array(c.uint8,0),xPoints:new c.Array(Zr,0),yPoints:new c.Array(Zr,0)}),qr=function(){function A(){}var t=A.prototype;return t.encodeSimple=function(A,t){void 0===t&&(t=[]);for(var e=[],s=[],i=[],n=[],r=0,B=0,o=0,E=0,w=0,g=0;g0&&(n.push(r),r=0),n.push(u),E=u),B=C,o=h,w++}"closePath"===a.command&&e.push(w-1)}A.commands.length>1&&"closePath"!==A.commands[A.commands.length-1].command&&e.push(w-1);var D=A.bbox,b={numberOfContours:e.length,xMin:D.minX,yMin:D.minY,xMax:D.maxX,yMax:D.maxY,endPtsOfContours:e,instructions:t,flags:n,xPoints:s,yPoints:i},d=Xr.size(b),v=4-d%4,Y=new c.EncodeStream(d+v);return Xr.encode(Y,b),0!==v&&Y.fill(0,v),Y.buffer},t._encodePoint=function(A,t,e,s,i,n){var r=A-t;return A===t?s|=n:(-255<=r&&r<=255&&(s|=i,r<0?r=-r:s|=n),e.push(r)),s},A}(),_r=function(A){function t(t){var e;return(e=A.call(this,t)||this).glyphEncoder=new qr,e}o(t,A);var e=t.prototype;return e._addGlyph=function(A){var t=this.font.getGlyph(A),e=t._decode(),s=this.font.loca.offsets[A],n=this.font.loca.offsets[A+1],r=this.font._getTableStream("glyf");r.pos+=s;var B=r.readBuffer(n-s);if(e&&e.numberOfContours<0){B=i.from(B);for(var o,E=w(e.components);!(o=E()).done;){var g=o.value;A=this.includeGlyph(g.glyphID),B.writeUInt16BE(A,g.pos)}}else e&&this.font._variationProcessor&&(B=this.glyphEncoder.encodeSimple(t.path,e.instructions));return this.glyf.push(B),this.loca.offsets.push(this.offset),this.hmtx.metrics.push({advance:t.advanceWidth,bearing:t._getMetrics().leftBearing}),this.offset+=B.length,this.glyf.length-1},e.encode=function(A){this.glyf=[],this.offset=0,this.loca={offsets:[],version:this.font.loca.version},this.hmtx={metrics:[],bearings:[]};for(var t=0;t255?2:1,ranges:[{first:1,nLeft:this.charstrings.length-2}]},e=Object.assign({},this.cff.topDict);e.Private=null,e.charset=t,e.Encoding=null,e.CharStrings=this.charstrings;for(var s=0,i=["version","Notice","Copyright","FullName","FamilyName","Weight","PostScript","BaseFontName","FontName"];s0&&Object.defineProperty(this,e,{get:this._getTable.bind(this,s)})}}A.probe=function(A){var t=A.toString("ascii",0,4);return"true"===t||"OTTO"===t||t===String.fromCharCode(0,1,0,0)};var t=A.prototype;return t.setDefaultLanguage=function(A){void 0===A&&(A=null),this.defaultLanguage=A},t._getTable=function(A){if(!(A.tag in this._tables))try{this._tables[A.tag]=this._decodeTable(A)}catch(t){d.logErrors&&(console.error("Error decoding table ".concat(A.tag)),console.error(t.stack))}return this._tables[A.tag]},t._getTableStream=function(A){var t=this.directory.tables[A];return t?(this.stream.pos=t.offset,this.stream):null},t._decodeDirectory=function(){return this.directory=Js.decode(this.stream,{_startOffset:0})},t._decodeTable=function(A){var t=this.stream.pos,e=this._getTableStream(A.tag),s=Vs[A.tag].decode(e,this,A.length);return this.stream.pos=t,s},t.getName=function(A,t){void 0===t&&(t=this.defaultLanguage||d.defaultLanguage);var e=this.name&&this.name.records[A];return e&&(e[t]||e[this.defaultLanguage]||e[d.defaultLanguage]||e.en||e[Object.keys(e)[0]])||null},t.hasGlyphForCodePoint=function(A){return!!this._cmapProcessor.lookup(A)},t.glyphForCodePoint=function(A){return this.getGlyph(this._cmapProcessor.lookup(A),[A])},t.glyphsForString=function(A){for(var t=[],e=A.length,s=0,i=-1,n=-1;s<=e;){var r=0,B=0;if(s>>6&3},transformed:function(A){return"glyf"===A.tag||"loca"===A.tag?0===A.transformVersion:0!==A.transformVersion},transformLength:new c.Optional(nB,(function(A){return A.transformed}))}),oB=new c.Struct({tag:new c.String(4),flavor:c.uint32,length:c.uint32,numTables:c.uint16,reserved:new c.Reserved(c.uint16),totalSfntSize:c.uint32,totalCompressedSize:c.uint32,majorVersion:c.uint16,minorVersion:c.uint16,metaOffset:c.uint32,metaLength:c.uint32,metaOrigLength:c.uint32,privOffset:c.uint32,privLength:c.uint32,tables:new c.Array(BB,"numTables")});oB.process=function(){for(var A={},t=0;t0){for(var n=[],r=0,B=0;B>7);if((E&=127)<10)B=0,o=uB(E,((14&E)<<7)+t.readUInt8());else if(E<20)B=uB(E,((E-10&14)<<7)+t.readUInt8()),o=0;else if(E<84)B=uB(E,1+(48&(g=E-20))+((a=t.readUInt8())>>4)),o=uB(E>>1,1+((12&g)<<2)+(15&a));else if(E<120){var g;B=uB(E,1+((g=E-84)/12<<8)+t.readUInt8()),o=uB(E>>1,1+(g%12>>2<<8)+t.readUInt8())}else if(E<124){var a=t.readUInt8(),c=t.readUInt8();B=uB(E,(a<<4)+(c>>4)),o=uB(E>>1,((15&c)<<8)+t.readUInt8())}else B=uB(E,t.readUInt16BE()),o=uB(E>>1,t.readUInt16BE());i+=B,s+=o,n.push(new Sr(w,!1,i,s))}return n}var IB=new c.VersionedStruct(c.uint32,{65536:{numFonts:c.uint32,offsets:new c.Array(c.uint32,"numFonts")},131072:{numFonts:c.uint32,offsets:new c.Array(c.uint32,"numFonts"),dsigTag:c.uint32,dsigLength:c.uint32,dsigOffset:c.uint32}}),fB=function(){function A(A){if(this.stream=A,"ttcf"!==A.readString(4))throw new Error("Not a TrueType collection");this.header=IB.decode(A)}return A.probe=function(A){return"ttcf"===A.toString("ascii",0,4)},A.prototype.getFont=function(A){for(var t,e=w(this.header.offsets);!(t=e()).done;){var s=t.value,i=new c.DecodeStream(this.stream.buffer);i.pos=s;var n=new AB(i);if(n.postscriptName===A)return n}return null},r(A,[{key:"fonts",get:function(){for(var A,t=[],e=w(this.header.offsets);!(A=e()).done;){var s=A.value,i=new c.DecodeStream(this.stream.buffer);i.pos=s,t.push(new AB(i))}return t}}]),A}(),DB=new c.String(c.uint8),bB=(new c.Struct({len:c.uint32,buf:new c.Buffer("len")}),new c.Struct({id:c.uint16,nameOffset:c.int16,attr:c.uint8,dataOffset:c.uint24,handle:c.uint32})),dB=new c.Struct({name:new c.String(4),maxTypeIndex:c.uint16,refList:new c.Pointer(c.uint16,new c.Array(bB,(function(A){return A.maxTypeIndex+1})),{type:"parent"})}),vB=new c.Struct({length:c.uint16,types:new c.Array(dB,(function(A){return A.length+1}))}),YB=new c.Struct({reserved:new c.Reserved(c.uint8,24),typeList:new c.Pointer(c.uint16,vB),nameListOffset:new c.Pointer(c.uint16,"void")}),FB=new c.Struct({dataOffset:c.uint32,map:new c.Pointer(c.uint32,YB),dataLength:c.uint32,mapLength:c.uint32}),MB=function(){function A(A){this.stream=A,this.header=FB.decode(this.stream);for(var t,e=w(this.header.map.typeList.types);!(t=e()).done;){for(var s,i=t.value,n=w(i.refList);!(s=n()).done;){var r=s.value;r.nameOffset>=0?(this.stream.pos=r.nameOffset+this.header.map.nameListOffset,r.name=DB.decode(this.stream)):r.name=null}"sfnt"===i.name&&(this.sfnt=i)}}return A.probe=function(A){var t=new c.DecodeStream(A);try{var e=FB.decode(t)}catch(A){return!1}for(var s,i=w(e.map.typeList.types);!(s=i()).done;)if("sfnt"===s.value.name)return!0;return!1},A.prototype.getFont=function(A){if(!this.sfnt)return null;for(var t,e=w(this.sfnt.refList);!(t=e()).done;){var s=t.value,i=this.header.dataOffset+s.dataOffset+4,n=new c.DecodeStream(this.stream.buffer.slice(i)),r=new AB(n);if(r.postscriptName===A)return r}return null},r(A,[{key:"fonts",get:function(){for(var A,t=[],e=w(this.sfnt.refList);!(A=e()).done;){var s=A.value,i=this.header.dataOffset+s.dataOffset+4,n=new c.DecodeStream(this.stream.buffer.slice(i));t.push(new AB(n))}return t}}]),A}();d.registerFormat(AB),d.registerFormat(sB),d.registerFormat(EB),d.registerFormat(fB),d.registerFormat(MB),A.exports=d},19304:function(A,t,e){"use strict";var s=e(41209),i=e(32504),n=e(41783),r=n.BK,B=n.CR,o=n.LF,E=n.NL,w=n.SG,g=n.WJ,a=n.SP,c=n.ZWJ,Q=n.BA,C=n.HY,h=n.NS,u=n.AI,l=n.AL,I=n.CJ,f=n.HL,D=n.RI,b=n.SA,d=n.XX,v=e(98282),Y=v.DI_BRK,F=v.IN_BRK,M=v.CI_BRK,y=v.CP_BRK,L=(v.PR_BRK,v.pairTable),R=new s(i.toByteArray("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")),m=function(A){switch(A){case u:case b:case w:case d:return l;case I:return h;default:return A}},x=function(A){switch(A){case o:case E:return r;case a:return g;default:return A}},p=function(A,t){void 0===t&&(t=!1),this.position=A,this.required=t},G=function(){function A(A){this.string=A,this.pos=0,this.lastPos=0,this.curClass=null,this.nextClass=null,this.LB8a=!1,this.LB21a=!1,this.LB30a=0}var t=A.prototype;return t.nextCodePoint=function(){var A=this.string.charCodeAt(this.pos++),t=this.string.charCodeAt(this.pos);return 55296<=A&&A<=56319&&56320<=t&&t<=57343?(this.pos++,1024*(A-55296)+(t-56320)+65536):A},t.nextCharClass=function(){return m(R.get(this.nextCodePoint()))},t.getSimpleBreak=function(){switch(this.nextClass){case a:return!1;case r:case o:case E:return this.curClass=r,!1;case B:return this.curClass=B,!1}return null},t.getPairTableBreak=function(A){var t=!1;switch(L[this.curClass][this.nextClass]){case Y:t=!0;break;case F:t=A===a;break;case M:if(!(t=A===a))return!1;break;case y:if(A!==a)return t}return this.LB8a&&(t=!1),!this.LB21a||this.curClass!==C&&this.curClass!==Q?this.LB21a=this.curClass===f:(t=!1,this.LB21a=!1),this.curClass===D?(this.LB30a++,2==this.LB30a&&this.nextClass===D&&(t=!0,this.LB30a=0)):this.LB30a=0,this.curClass=this.nextClass,t},t.nextBreak=function(){if(null==this.curClass){var A=this.nextCharClass();this.curClass=x(A),this.nextClass=A,this.LB8a=A===c,this.LB30a=0}for(;this.posY)),B(A.exports,"getCombiningClass",(()=>F)),B(A.exports,"getScript",(()=>M)),B(A.exports,"getEastAsianWidth",(()=>y)),B(A.exports,"getNumericValue",(()=>L)),B(A.exports,"isAlphabetic",(()=>R)),B(A.exports,"isDigit",(()=>m)),B(A.exports,"isPunctuation",(()=>x)),B(A.exports,"isLowerCase",(()=>p)),B(A.exports,"isUpperCase",(()=>G)),B(A.exports,"isTitleCase",(()=>W)),B(A.exports,"isWhiteSpace",(()=>P)),B(A.exports,"isBaseForm",(()=>H)),B(A.exports,"isMark",(()=>S)),B(A.exports,"default",(()=>U));var o={};o=JSON.parse('{"categories":["Cc","Zs","Po","Sc","Ps","Pe","Sm","Pd","Nd","Lu","Sk","Pc","Ll","So","Lo","Pi","Cf","No","Pf","Lt","Lm","Mn","Me","Mc","Nl","Zl","Zp","Cs","Co"],"combiningClasses":["Not_Reordered","Above","Above_Right","Below","Attached_Above_Right","Attached_Below","Overlay","Iota_Subscript","Double_Below","Double_Above","Below_Right","Above_Left","CCC10","CCC11","CCC12","CCC13","CCC14","CCC15","CCC16","CCC17","CCC18","CCC19","CCC20","CCC21","CCC22","CCC23","CCC24","CCC25","CCC30","CCC31","CCC32","CCC27","CCC28","CCC29","CCC33","CCC34","CCC35","CCC36","Nukta","Virama","CCC84","CCC91","CCC103","CCC107","CCC118","CCC122","CCC129","CCC130","CCC132","Attached_Above","Below_Left","Left","Kana_Voicing","CCC26","Right"],"scripts":["Common","Latin","Bopomofo","Inherited","Greek","Coptic","Cyrillic","Armenian","Hebrew","Arabic","Syriac","Thaana","Nko","Samaritan","Mandaic","Devanagari","Bengali","Gurmukhi","Gujarati","Oriya","Tamil","Telugu","Kannada","Malayalam","Sinhala","Thai","Lao","Tibetan","Myanmar","Georgian","Hangul","Ethiopic","Cherokee","Canadian_Aboriginal","Ogham","Runic","Tagalog","Hanunoo","Buhid","Tagbanwa","Khmer","Mongolian","Limbu","Tai_Le","New_Tai_Lue","Buginese","Tai_Tham","Balinese","Sundanese","Batak","Lepcha","Ol_Chiki","Braille","Glagolitic","Tifinagh","Han","Hiragana","Katakana","Yi","Lisu","Vai","Bamum","Syloti_Nagri","Phags_Pa","Saurashtra","Kayah_Li","Rejang","Javanese","Cham","Tai_Viet","Meetei_Mayek","null","Linear_B","Lycian","Carian","Old_Italic","Gothic","Old_Permic","Ugaritic","Old_Persian","Deseret","Shavian","Osmanya","Osage","Elbasan","Caucasian_Albanian","Linear_A","Cypriot","Imperial_Aramaic","Palmyrene","Nabataean","Hatran","Phoenician","Lydian","Meroitic_Hieroglyphs","Meroitic_Cursive","Kharoshthi","Old_South_Arabian","Old_North_Arabian","Manichaean","Avestan","Inscriptional_Parthian","Inscriptional_Pahlavi","Psalter_Pahlavi","Old_Turkic","Old_Hungarian","Hanifi_Rohingya","Old_Sogdian","Sogdian","Elymaic","Brahmi","Kaithi","Sora_Sompeng","Chakma","Mahajani","Sharada","Khojki","Multani","Khudawadi","Grantha","Newa","Tirhuta","Siddham","Modi","Takri","Ahom","Dogra","Warang_Citi","Nandinagari","Zanabazar_Square","Soyombo","Pau_Cin_Hau","Bhaiksuki","Marchen","Masaram_Gondi","Gunjala_Gondi","Makasar","Cuneiform","Egyptian_Hieroglyphs","Anatolian_Hieroglyphs","Mro","Bassa_Vah","Pahawh_Hmong","Medefaidrin","Miao","Tangut","Nushu","Duployan","SignWriting","Nyiakeng_Puachue_Hmong","Wancho","Mende_Kikakui","Adlam"],"eaw":["N","Na","A","W","H","F"]}');const E=new(r(n))(r(i).toByteArray("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")),w=Math.log2||(A=>Math.log(A)/Math.LN2),g=A=>w(A)+1|0,a=g(r(o).categories.length-1),c=g(r(o).combiningClasses.length-1),Q=g(r(o).scripts.length-1),C=g(r(o).eaw.length-1),h=c+Q+C+10,u=Q+C+10,l=C+10,I=10,f=(1<>h&f]}function F(A){const t=E.get(A);return r(o).combiningClasses[t>>u&D]}function M(A){const t=E.get(A);return r(o).scripts[t>>l&b]}function y(A){const t=E.get(A);return r(o).eaw[t>>I&d]}function L(A){let t=E.get(A),e=t&v;if(0===e)return null;if(e<=50)return e-1;if(e<480)return((e>>4)-12)/(1+(15&e));if(e<768){t=(e>>5)-14;let A=2+(31&e);for(;A>0;)t*=10,A--;return t}{t=(e>>2)-191;let A=1+(3&e);for(;A>0;)t*=60,A--;return t}}function R(A){const t=Y(A);return"Lu"===t||"Ll"===t||"Lt"===t||"Lm"===t||"Lo"===t||"Nl"===t}function m(A){return"Nd"===Y(A)}function x(A){const t=Y(A);return"Pc"===t||"Pd"===t||"Pe"===t||"Pf"===t||"Pi"===t||"Po"===t||"Ps"===t}function p(A){return"Ll"===Y(A)}function G(A){return"Lu"===Y(A)}function W(A){return"Lt"===Y(A)}function P(A){const t=Y(A);return"Zs"===t||"Zl"===t||"Zp"===t}function H(A){const t=Y(A);return"Nd"===t||"No"===t||"Nl"===t||"Lu"===t||"Ll"===t||"Lt"===t||"Lm"===t||"Lo"===t||"Me"===t||"Mc"===t}function S(A){const t=Y(A);return"Mn"===t||"Me"===t||"Mc"===t}var U={getCategory:Y,getCombiningClass:F,getScript:M,getEastAsianWidth:y,getNumericValue:L,isAlphabetic:R,isDigit:m,isPunctuation:x,isLowerCase:p,isUpperCase:G,isTitleCase:W,isWhiteSpace:P,isBaseForm:H,isMark:S}},43267:function(A){"use strict";A.exports=JSON.parse('[["8740","䏰䰲䘃䖦䕸𧉧䵷䖳𧲱䳢𧳅㮕䜶䝄䱇䱀𤊿𣘗𧍒𦺋𧃒䱗𪍑䝏䗚䲅𧱬䴇䪤䚡𦬣爥𥩔𡩣𣸆𣽡晍囻"],["8767","綕夝𨮹㷴霴𧯯寛𡵞媤㘥𩺰嫑宷峼杮薓𩥅瑡璝㡵𡵓𣚞𦀡㻬"],["87a1","𥣞㫵竼龗𤅡𨤍𣇪𠪊𣉞䌊蒄龖鐯䤰蘓墖靊鈘秐稲晠権袝瑌篅枂稬剏遆㓦珄𥶹瓆鿇垳䤯呌䄱𣚎堘穲𧭥讏䚮𦺈䆁𥶙箮𢒼鿈𢓁𢓉𢓌鿉蔄𣖻䂴鿊䓡𪷿拁灮鿋"],["8840","㇀",4,"𠄌㇅𠃑𠃍㇆㇇𠃋𡿨㇈𠃊㇉㇊㇋㇌𠄎㇍㇎ĀÁǍÀĒÉĚÈŌÓǑÒ࿿Ê̄Ế࿿Ê̌ỀÊāáǎàɑēéěèīíǐìōóǒòūúǔùǖǘǚ"],["88a1","ǜü࿿ê̄ế࿿ê̌ềêɡ⏚⏛"],["8940","𪎩𡅅"],["8943","攊"],["8946","丽滝鵎釟"],["894c","𧜵撑会伨侨兖兴农凤务动医华发变团声处备夲头学实実岚庆总斉柾栄桥济炼电纤纬纺织经统缆缷艺苏药视设询车轧轮"],["89a1","琑糼緍楆竉刧"],["89ab","醌碸酞肼"],["89b0","贋胶𠧧"],["89b5","肟黇䳍鷉鸌䰾𩷶𧀎鸊𪄳㗁"],["89c1","溚舾甙"],["89c5","䤑马骏龙禇𨑬𡷊𠗐𢫦两亁亀亇亿仫伷㑌侽㹈倃傈㑽㒓㒥円夅凛凼刅争剹劐匧㗇厩㕑厰㕓参吣㕭㕲㚁咓咣咴咹哐哯唘唣唨㖘唿㖥㖿嗗㗅"],["8a40","𧶄唥"],["8a43","𠱂𠴕𥄫喐𢳆㧬𠍁蹆𤶸𩓥䁓𨂾睺𢰸㨴䟕𨅝𦧲𤷪擝𠵼𠾴𠳕𡃴撍蹾𠺖𠰋𠽤𢲩𨉖𤓓"],["8a64","𠵆𩩍𨃩䟴𤺧𢳂骲㩧𩗴㿭㔆𥋇𩟔𧣈𢵄鵮頕"],["8a76","䏙𦂥撴哣𢵌𢯊𡁷㧻𡁯"],["8aa1","𦛚𦜖𧦠擪𥁒𠱃蹨𢆡𨭌𠜱"],["8aac","䠋𠆩㿺塳𢶍"],["8ab2","𤗈𠓼𦂗𠽌𠶖啹䂻䎺"],["8abb","䪴𢩦𡂝膪飵𠶜捹㧾𢝵跀嚡摼㹃"],["8ac9","𪘁𠸉𢫏𢳉"],["8ace","𡃈𣧂㦒㨆𨊛㕸𥹉𢃇噒𠼱𢲲𩜠㒼氽𤸻"],["8adf","𧕴𢺋𢈈𪙛𨳍𠹺𠰴𦠜羓𡃏𢠃𢤹㗻𥇣𠺌𠾍𠺪㾓𠼰𠵇𡅏𠹌"],["8af6","𠺫𠮩𠵈𡃀𡄽㿹𢚖搲𠾭"],["8b40","𣏴𧘹𢯎𠵾𠵿𢱑𢱕㨘𠺘𡃇𠼮𪘲𦭐𨳒𨶙𨳊閪哌苄喹"],["8b55","𩻃鰦骶𧝞𢷮煀腭胬尜𦕲脴㞗卟𨂽醶𠻺𠸏𠹷𠻻㗝𤷫㘉𠳖嚯𢞵𡃉𠸐𠹸𡁸𡅈𨈇𡑕𠹹𤹐𢶤婔𡀝𡀞𡃵𡃶垜𠸑"],["8ba1","𧚔𨋍𠾵𠹻𥅾㜃𠾶𡆀𥋘𪊽𤧚𡠺𤅷𨉼墙剨㘚𥜽箲孨䠀䬬鼧䧧鰟鮍𥭴𣄽嗻㗲嚉丨夂𡯁屮靑𠂆乛亻㔾尣彑忄㣺扌攵歺氵氺灬爫丬犭𤣩罒礻糹罓𦉪㓁"],["8bde","𦍋耂肀𦘒𦥑卝衤见𧢲讠贝钅镸长门𨸏韦页风飞饣𩠐鱼鸟黄歯龜丷𠂇阝户钢"],["8c40","倻淾𩱳龦㷉袏𤅎灷峵䬠𥇍㕙𥴰愢𨨲辧釶熑朙玺𣊁𪄇㲋𡦀䬐磤琂冮𨜏䀉橣𪊺䈣蘏𠩯稪𩥇𨫪靕灍匤𢁾鏴盙𨧣龧矝亣俰傼丯众龨吴綋墒壐𡶶庒庙忂𢜒斋"],["8ca1","𣏹椙橃𣱣泿"],["8ca7","爀𤔅玌㻛𤨓嬕璹讃𥲤𥚕窓篬糃繬苸薗龩袐龪躹龫迏蕟駠鈡龬𨶹𡐿䁱䊢娚"],["8cc9","顨杫䉶圽"],["8cce","藖𤥻芿𧄍䲁𦵴嵻𦬕𦾾龭龮宖龯曧繛湗秊㶈䓃𣉖𢞖䎚䔶"],["8ce6","峕𣬚諹屸㴒𣕑嵸龲煗䕘𤃬𡸣䱷㥸㑊𠆤𦱁諌侴𠈹妿腬顖𩣺弻"],["8d40","𠮟"],["8d42","𢇁𨥭䄂䚻𩁹㼇龳𪆵䃸㟖䛷𦱆䅼𨚲𧏿䕭㣔𥒚䕡䔛䶉䱻䵶䗪㿈𤬏㙡䓞䒽䇭崾嵈嵖㷼㠏嶤嶹㠠㠸幂庽弥徃㤈㤔㤿㥍惗愽峥㦉憷憹懏㦸戬抐拥挘㧸嚱"],["8da1","㨃揢揻搇摚㩋擀崕嘡龟㪗斆㪽旿晓㫲暒㬢朖㭂枤栀㭘桊梄㭲㭱㭻椉楃牜楤榟榅㮼槖㯝橥橴橱檂㯬檙㯲檫檵櫔櫶殁毁毪汵沪㳋洂洆洦涁㳯涤涱渕渘温溆𨧀溻滢滚齿滨滩漤漴㵆𣽁澁澾㵪㵵熷岙㶊瀬㶑灐灔灯灿炉𠌥䏁㗱𠻘"],["8e40","𣻗垾𦻓焾𥟠㙎榢𨯩孴穉𥣡𩓙穥穽𥦬窻窰竂竃燑𦒍䇊竚竝竪䇯咲𥰁笋筕笩𥌎𥳾箢筯莜𥮴𦱿篐萡箒箸𥴠㶭𥱥蒒篺簆簵𥳁籄粃𤢂粦晽𤕸糉糇糦籴糳糵糎"],["8ea1","繧䔝𦹄絝𦻖璍綉綫焵綳緒𤁗𦀩緤㴓緵𡟹緥𨍭縝𦄡𦅚繮纒䌫鑬縧罀罁罇礶𦋐駡羗𦍑羣𡙡𠁨䕜𣝦䔃𨌺翺𦒉者耈耝耨耯𪂇𦳃耻耼聡𢜔䦉𦘦𣷣𦛨朥肧𨩈脇脚墰𢛶汿𦒘𤾸擧𡒊舘𡡞橓𤩥𤪕䑺舩𠬍𦩒𣵾俹𡓽蓢荢𦬊𤦧𣔰𡝳𣷸芪椛芳䇛"],["8f40","蕋苐茚𠸖𡞴㛁𣅽𣕚艻苢茘𣺋𦶣𦬅𦮗𣗎㶿茝嗬莅䔋𦶥莬菁菓㑾𦻔橗蕚㒖𦹂𢻯葘𥯤葱㷓䓤檧葊𣲵祘蒨𦮖𦹷𦹃蓞萏莑䒠蒓蓤𥲑䉀𥳀䕃蔴嫲𦺙䔧蕳䔖枿蘖"],["8fa1","𨘥𨘻藁𧂈蘂𡖂𧃍䕫䕪蘨㙈𡢢号𧎚虾蝱𪃸蟮𢰧螱蟚蠏噡虬桖䘏衅衆𧗠𣶹𧗤衞袜䙛袴袵揁装睷𧜏覇覊覦覩覧覼𨨥觧𧤤𧪽誜瞓釾誐𧩙竩𧬺𣾏䜓𧬸煼謌謟𥐰𥕥謿譌譍誩𤩺讐讛誯𡛟䘕衏貛𧵔𧶏貫㜥𧵓賖𧶘𧶽贒贃𡤐賛灜贑𤳉㻐起"],["9040","趩𨀂𡀔𤦊㭼𨆼𧄌竧躭躶軃鋔輙輭𨍥𨐒辥錃𪊟𠩐辳䤪𨧞𨔽𣶻廸𣉢迹𪀔𨚼𨔁𢌥㦀𦻗逷𨔼𧪾遡𨕬𨘋邨𨜓郄𨛦邮都酧㫰醩釄粬𨤳𡺉鈎沟鉁鉢𥖹銹𨫆𣲛𨬌𥗛"],["90a1","𠴱錬鍫𨫡𨯫炏嫃𨫢𨫥䥥鉄𨯬𨰹𨯿鍳鑛躼閅閦鐦閠濶䊹𢙺𨛘𡉼𣸮䧟氜陻隖䅬隣𦻕懚隶磵𨫠隽双䦡𦲸𠉴𦐐𩂯𩃥𤫑𡤕𣌊霱虂霶䨏䔽䖅𤫩灵孁霛靜𩇕靗孊𩇫靟鐥僐𣂷𣂼鞉鞟鞱鞾韀韒韠𥑬韮琜𩐳響韵𩐝𧥺䫑頴頳顋顦㬎𧅵㵑𠘰𤅜"],["9140","𥜆飊颷飈飇䫿𦴧𡛓喰飡飦飬鍸餹𤨩䭲𩡗𩤅駵騌騻騐驘𥜥㛄𩂱𩯕髠髢𩬅髴䰎鬔鬭𨘀倴鬴𦦨㣃𣁽魐魀𩴾婅𡡣鮎𤉋鰂鯿鰌𩹨鷔𩾷𪆒𪆫𪃡𪄣𪇟鵾鶃𪄴鸎梈"],["91a1","鷄𢅛𪆓𪈠𡤻𪈳鴹𪂹𪊴麐麕麞麢䴴麪麯𤍤黁㭠㧥㴝伲㞾𨰫鼂鼈䮖鐤𦶢鼗鼖鼹嚟嚊齅馸𩂋韲葿齢齩竜龎爖䮾𤥵𤦻煷𤧸𤍈𤩑玞𨯚𡣺禟𨥾𨸶鍩鏳𨩄鋬鎁鏋𨥬𤒹爗㻫睲穃烐𤑳𤏸煾𡟯炣𡢾𣖙㻇𡢅𥐯𡟸㜢𡛻𡠹㛡𡝴𡣑𥽋㜣𡛀坛𤨥𡏾𡊨"],["9240","𡏆𡒶蔃𣚦蔃葕𤦔𧅥𣸱𥕜𣻻𧁒䓴𣛮𩦝𦼦柹㜳㰕㷧塬𡤢栐䁗𣜿𤃡𤂋𤄏𦰡哋嚞𦚱嚒𠿟𠮨𠸍鏆𨬓鎜仸儫㠙𤐶亼𠑥𠍿佋侊𥙑婨𠆫𠏋㦙𠌊𠐔㐵伩𠋀𨺳𠉵諚𠈌亘"],["92a1","働儍侢伃𤨎𣺊佂倮偬傁俌俥偘僼兙兛兝兞湶𣖕𣸹𣺿浲𡢄𣺉冨凃𠗠䓝𠒣𠒒𠒑赺𨪜𠜎剙劤𠡳勡鍮䙺熌𤎌𠰠𤦬𡃤槑𠸝瑹㻞璙琔瑖玘䮎𤪼𤂍叐㖄爏𤃉喴𠍅响𠯆圝鉝雴鍦埝垍坿㘾壋媙𨩆𡛺𡝯𡜐娬妸銏婾嫏娒𥥆𡧳𡡡𤊕㛵洅瑃娡𥺃"],["9340","媁𨯗𠐓鏠璌𡌃焅䥲鐈𨧻鎽㞠尞岞幞幈𡦖𡥼𣫮廍孏𡤃𡤄㜁𡢠㛝𡛾㛓脪𨩇𡶺𣑲𨦨弌弎𡤧𡞫婫𡜻孄蘔𧗽衠恾𢡠𢘫忛㺸𢖯𢖾𩂈𦽳懀𠀾𠁆𢘛憙憘恵𢲛𢴇𤛔𩅍"],["93a1","摱𤙥𢭪㨩𢬢𣑐𩣪𢹸挷𪑛撶挱揑𤧣𢵧护𢲡搻敫楲㯴𣂎𣊭𤦉𣊫唍𣋠𡣙𩐿曎𣊉𣆳㫠䆐𥖄𨬢𥖏𡛼𥕛𥐥磮𣄃𡠪𣈴㑤𣈏𣆂𤋉暎𦴤晫䮓昰𧡰𡷫晣𣋒𣋡昞𥡲㣑𣠺𣞼㮙𣞢𣏾瓐㮖枏𤘪梶栞㯄檾㡣𣟕𤒇樳橒櫉欅𡤒攑梘橌㯗橺歗𣿀𣲚鎠鋲𨯪𨫋"],["9440","銉𨀞𨧜鑧涥漋𤧬浧𣽿㶏渄𤀼娽渊塇洤硂焻𤌚𤉶烱牐犇犔𤞏𤜥兹𤪤𠗫瑺𣻸𣙟𤩊𤤗𥿡㼆㺱𤫟𨰣𣼵悧㻳瓌琼鎇琷䒟𦷪䕑疃㽣𤳙𤴆㽘畕癳𪗆㬙瑨𨫌𤦫𤦎㫻"],["94a1","㷍𤩎㻿𤧅𤣳釺圲鍂𨫣𡡤僟𥈡𥇧睸𣈲眎眏睻𤚗𣞁㩞𤣰琸璛㺿𤪺𤫇䃈𤪖𦆮錇𥖁砞碍碈磒珐祙𧝁𥛣䄎禛蒖禥樭𣻺稺秴䅮𡛦䄲鈵秱𠵌𤦌𠊙𣶺𡝮㖗啫㕰㚪𠇔𠰍竢婙𢛵𥪯𥪜娍𠉛磰娪𥯆竾䇹籝籭䈑𥮳𥺼𥺦糍𤧹𡞰粎籼粮檲緜縇緓罎𦉡"],["9540","𦅜𧭈綗𥺂䉪𦭵𠤖柖𠁎𣗏埄𦐒𦏸𤥢翝笧𠠬𥫩𥵃笌𥸎駦虅驣樜𣐿㧢𤧷𦖭騟𦖠蒀𧄧𦳑䓪脷䐂胆脉腂𦞴飃𦩂艢艥𦩑葓𦶧蘐𧈛媆䅿𡡀嬫𡢡嫤𡣘蚠蜨𣶏蠭𧐢娂"],["95a1","衮佅袇袿裦襥襍𥚃襔𧞅𧞄𨯵𨯙𨮜𨧹㺭蒣䛵䛏㟲訽訜𩑈彍鈫𤊄旔焩烄𡡅鵭貟賩𧷜妚矃姰䍮㛔踪躧𤰉輰轊䋴汘澻𢌡䢛潹溋𡟚鯩㚵𤤯邻邗啱䤆醻鐄𨩋䁢𨫼鐧𨰝𨰻蓥訫閙閧閗閖𨴴瑅㻂𤣿𤩂𤏪㻧𣈥随𨻧𨹦𨹥㻌𤧭𤩸𣿮琒瑫㻼靁𩂰"],["9640","桇䨝𩂓𥟟靝鍨𨦉𨰦𨬯𦎾銺嬑譩䤼珹𤈛鞛靱餸𠼦巁𨯅𤪲頟𩓚鋶𩗗釥䓀𨭐𤩧𨭤飜𨩅㼀鈪䤥萔餻饍𧬆㷽馛䭯馪驜𨭥𥣈檏騡嫾騯𩣱䮐𩥈馼䮽䮗鍽塲𡌂堢𤦸"],["96a1","𡓨硄𢜟𣶸棅㵽鑘㤧慐𢞁𢥫愇鱏鱓鱻鰵鰐魿鯏𩸭鮟𪇵𪃾鴡䲮𤄄鸘䲰鴌𪆴𪃭𪃳𩤯鶥蒽𦸒𦿟𦮂藼䔳𦶤𦺄𦷰萠藮𦸀𣟗𦁤秢𣖜𣙀䤭𤧞㵢鏛銾鍈𠊿碹鉷鑍俤㑀遤𥕝砽硔碶硋𡝗𣇉𤥁㚚佲濚濙瀞瀞吔𤆵垻壳垊鴖埗焴㒯𤆬燫𦱀𤾗嬨𡞵𨩉"],["9740","愌嫎娋䊼𤒈㜬䭻𨧼鎻鎸𡣖𠼝葲𦳀𡐓𤋺𢰦𤏁妔𣶷𦝁綨𦅛𦂤𤦹𤦋𨧺鋥珢㻩璴𨭣𡢟㻡𤪳櫘珳珻㻖𤨾𤪔𡟙𤩦𠎧𡐤𤧥瑈𤤖炥𤥶銄珦鍟𠓾錱𨫎𨨖鎆𨯧𥗕䤵𨪂煫"],["97a1","𤥃𠳿嚤𠘚𠯫𠲸唂秄𡟺緾𡛂𤩐𡡒䔮鐁㜊𨫀𤦭妰𡢿𡢃𧒄媡㛢𣵛㚰鉟婹𨪁𡡢鍴㳍𠪴䪖㦊僴㵩㵌𡎜煵䋻𨈘渏𩃤䓫浗𧹏灧沯㳖𣿭𣸭渂漌㵯𠏵畑㚼㓈䚀㻚䡱姄鉮䤾轁𨰜𦯀堒埈㛖𡑒烾𤍢𤩱𢿣𡊰𢎽梹楧𡎘𣓥𧯴𣛟𨪃𣟖𣏺𤲟樚𣚭𦲷萾䓟䓎"],["9840","𦴦𦵑𦲂𦿞漗𧄉茽𡜺菭𦲀𧁓𡟛妉媂𡞳婡婱𡤅𤇼㜭姯𡜼㛇熎鎐暚𤊥婮娫𤊓樫𣻹𧜶𤑛𤋊焝𤉙𨧡侰𦴨峂𤓎𧹍𤎽樌𤉖𡌄炦焳𤏩㶥泟勇𤩏繥姫崯㷳彜𤩝𡟟綤萦"],["98a1","咅𣫺𣌀𠈔坾𠣕𠘙㿥𡾞𪊶瀃𩅛嵰玏糓𨩙𩐠俈翧狍猐𧫴猸猹𥛶獁獈㺩𧬘遬燵𤣲珡臶㻊県㻑沢国琙琞琟㻢㻰㻴㻺瓓㼎㽓畂畭畲疍㽼痈痜㿀癍㿗癴㿜発𤽜熈嘣覀塩䀝睃䀹条䁅㗛瞘䁪䁯属瞾矋売砘点砜䂨砹硇硑硦葈𥔵礳栃礲䄃"],["9940","䄉禑禙辻稆込䅧窑䆲窼艹䇄竏竛䇏両筢筬筻簒簛䉠䉺类粜䊌粸䊔糭输烀𠳏総緔緐緽羮羴犟䎗耠耥笹耮耱联㷌垴炠肷胩䏭脌猪脎脒畠脔䐁㬹腖腙腚"],["99a1","䐓堺腼膄䐥膓䐭膥埯臁臤艔䒏芦艶苊苘苿䒰荗险榊萅烵葤惣蒈䔄蒾蓡蓸蔐蔸蕒䔻蕯蕰藠䕷虲蚒蚲蛯际螋䘆䘗袮裿褤襇覑𧥧訩訸誔誴豑賔賲贜䞘塟跃䟭仮踺嗘坔蹱嗵躰䠷軎転軤軭軲辷迁迊迌逳駄䢭飠鈓䤞鈨鉘鉫銱銮銿"],["9a40","鋣鋫鋳鋴鋽鍃鎄鎭䥅䥑麿鐗匁鐝鐭鐾䥪鑔鑹锭関䦧间阳䧥枠䨤靀䨵鞲韂噔䫤惨颹䬙飱塄餎餙冴餜餷饂饝饢䭰駅䮝騼鬏窃魩鮁鯝鯱鯴䱭鰠㝯𡯂鵉鰺"],["9aa1","黾噐鶓鶽鷀鷼银辶鹻麬麱麽黆铜黢黱黸竈齄𠂔𠊷𠎠椚铃妬𠓗塀铁㞹𠗕𠘕𠙶𡚺块煳𠫂𠫍𠮿呪吆𠯋咞𠯻𠰻𠱓𠱥𠱼惧𠲍噺𠲵𠳝𠳭𠵯𠶲𠷈楕鰯螥𠸄𠸎𠻗𠾐𠼭𠹳尠𠾼帋𡁜𡁏𡁶朞𡁻𡂈𡂖㙇𡂿𡃓𡄯𡄻卤蒭𡋣𡍵𡌶讁𡕷𡘙𡟃𡟇乸炻𡠭𡥪"],["9b40","𡨭𡩅𡰪𡱰𡲬𡻈拃𡻕𡼕熘桕𢁅槩㛈𢉼𢏗𢏺𢜪𢡱𢥏苽𢥧𢦓𢫕覥𢫨辠𢬎鞸𢬿顇骽𢱌"],["9b62","𢲈𢲷𥯨𢴈𢴒𢶷𢶕𢹂𢽴𢿌𣀳𣁦𣌟𣏞徱晈暿𧩹𣕧𣗳爁𤦺矗𣘚𣜖纇𠍆墵朎"],["9ba1","椘𣪧𧙗𥿢𣸑𣺹𧗾𢂚䣐䪸𤄙𨪚𤋮𤌍𤀻𤌴𤎖𤩅𠗊凒𠘑妟𡺨㮾𣳿𤐄𤓖垈𤙴㦛𤜯𨗨𩧉㝢𢇃譞𨭎駖𤠒𤣻𤨕爉𤫀𠱸奥𤺥𤾆𠝹軚𥀬劏圿煱𥊙𥐙𣽊𤪧喼𥑆𥑮𦭒釔㑳𥔿𧘲𥕞䜘𥕢𥕦𥟇𤤿𥡝偦㓻𣏌惞𥤃䝼𨥈𥪮𥮉𥰆𡶐垡煑澶𦄂𧰒遖𦆲𤾚譢𦐂𦑊"],["9c40","嵛𦯷輶𦒄𡤜諪𤧶𦒈𣿯𦔒䯀𦖿𦚵𢜛鑥𥟡憕娧晉侻嚹𤔡𦛼乪𤤴陖涏𦲽㘘襷𦞙𦡮𦐑𦡞營𦣇筂𩃀𠨑𦤦鄄𦤹穅鷰𦧺騦𦨭㙟𦑩𠀡禃𦨴𦭛崬𣔙菏𦮝䛐𦲤画补𦶮墶"],["9ca1","㜜𢖍𧁋𧇍㱔𧊀𧊅銁𢅺𧊋錰𧋦𤧐氹钟𧑐𠻸蠧裵𢤦𨑳𡞱溸𤨪𡠠㦤㚹尐秣䔿暶𩲭𩢤襃𧟌𧡘囖䃟𡘊㦡𣜯𨃨𡏅熭荦𧧝𩆨婧䲷𧂯𨦫𧧽𧨊𧬋𧵦𤅺筃祾𨀉澵𪋟樃𨌘厢𦸇鎿栶靝𨅯𨀣𦦵𡏭𣈯𨁈嶅𨰰𨂃圕頣𨥉嶫𤦈斾槕叒𤪥𣾁㰑朶𨂐𨃴𨄮𡾡𨅏"],["9d40","𨆉𨆯𨈚𨌆𨌯𨎊㗊𨑨𨚪䣺揦𨥖砈鉕𨦸䏲𨧧䏟𨧨𨭆𨯔姸𨰉輋𨿅𩃬筑𩄐𩄼㷷𩅞𤫊运犏嚋𩓧𩗩𩖰𩖸𩜲𩣑𩥉𩥪𩧃𩨨𩬎𩵚𩶛纟𩻸𩼣䲤镇𪊓熢𪋿䶑递𪗋䶜𠲜达嗁"],["9da1","辺𢒰边𤪓䔉繿潖檱仪㓤𨬬𧢝㜺躀𡟵𨀤𨭬𨮙𧨾𦚯㷫𧙕𣲷𥘵𥥖亚𥺁𦉘嚿𠹭踎孭𣺈𤲞揞拐𡟶𡡻攰嘭𥱊吚𥌑㷆𩶘䱽嘢嘞罉𥻘奵𣵀蝰东𠿪𠵉𣚺脗鵞贘瘻鱅癎瞹鍅吲腈苷嘥脲萘肽嗪祢噃吖𠺝㗎嘅嗱曱𨋢㘭甴嗰喺咗啲𠱁𠲖廐𥅈𠹶𢱢"],["9e40","𠺢麫絚嗞𡁵抝靭咔賍燶酶揼掹揾啩𢭃鱲𢺳冚㓟𠶧冧呍唞唓癦踭𦢊疱肶蠄螆裇膶萜𡃁䓬猄𤜆宐茋𦢓噻𢛴𧴯𤆣𧵳𦻐𧊶酰𡇙鈈𣳼𪚩𠺬𠻹牦𡲢䝎𤿂𧿹𠿫䃺"],["9ea1","鱝攟𢶠䣳𤟠𩵼𠿬𠸊恢𧖣𠿭"],["9ead","𦁈𡆇熣纎鵐业丄㕷嬍沲卧㚬㧜卽㚥𤘘墚𤭮舭呋垪𥪕𠥹"],["9ec5","㩒𢑥獴𩺬䴉鯭𣳾𩼰䱛𤾩𩖞𩿞葜𣶶𧊲𦞳𣜠挮紥𣻷𣸬㨪逈勌㹴㙺䗩𠒎癀嫰𠺶硺𧼮墧䂿噼鮋嵴癔𪐴麅䳡痹㟻愙𣃚𤏲"],["9ef5","噝𡊩垧𤥣𩸆刴𧂮㖭汊鵼"],["9f40","籖鬹埞𡝬屓擓𩓐𦌵𧅤蚭𠴨𦴢𤫢𠵱"],["9f4f","凾𡼏嶎霃𡷑麁遌笟鬂峑箣扨挵髿篏鬪籾鬮籂粆鰕篼鬉鼗鰛𤤾齚啳寃俽麘俲剠㸆勑坧偖妷帒韈鶫轜呩鞴饀鞺匬愰"],["9fa1","椬叚鰊鴂䰻陁榀傦畆𡝭駚剳"],["9fae","酙隁酜"],["9fb2","酑𨺗捿𦴣櫊嘑醎畺抅𠏼獏籰𥰡𣳽"],["9fc1","𤤙盖鮝个𠳔莾衂"],["9fc9","届槀僭坺刟巵从氱𠇲伹咜哚劚趂㗾弌㗳"],["9fdb","歒酼龥鮗頮颴骺麨麄煺笔"],["9fe7","毺蠘罸"],["9feb","嘠𪙊蹷齓"],["9ff0","跔蹏鸜踁抂𨍽踨蹵竓𤩷稾磘泪詧瘇"],["a040","𨩚鼦泎蟖痃𪊲硓咢贌狢獱謭猂瓱賫𤪻蘯徺袠䒷"],["a055","𡠻𦸅"],["a058","詾𢔛"],["a05b","惽癧髗鵄鍮鮏蟵"],["a063","蠏賷猬霡鮰㗖犲䰇籑饊𦅙慙䰄麖慽"],["a073","坟慯抦戹拎㩜懢厪𣏵捤栂㗒"],["a0a1","嵗𨯂迚𨸹"],["a0a6","僙𡵆礆匲阸𠼻䁥"],["a0ae","矾"],["a0b0","糂𥼚糚稭聦聣絍甅瓲覔舚朌聢𧒆聛瓰脃眤覉𦟌畓𦻑螩蟎臈螌詉貭譃眫瓸蓚㘵榲趦"],["a0d4","覩瑨涹蟁𤀑瓧㷛煶悤憜㳑煢恷"],["a0e2","罱𨬭牐惩䭾删㰘𣳇𥻗𧙖𥔱𡥄𡋾𩤃𦷜𧂭峁𦆭𨨏𣙷𠃮𦡆𤼎䕢嬟𦍌齐麦𦉫"],["a3c0","␀",31,"␡"],["c6a1","①",9,"⑴",9,"ⅰ",9,"丶丿亅亠冂冖冫勹匸卩厶夊宀巛⼳广廴彐彡攴无疒癶辵隶¨ˆヽヾゝゞ〃仝々〆〇ー[]✽ぁ",23],["c740","す",58,"ァアィイ"],["c7a1","ゥ",81,"А",5,"ЁЖ",4],["c840","Л",26,"ёж",25,"⇧↸↹㇏𠃌乚𠂊刂䒑"],["c8a1","龰冈龱𧘇"],["c8cd","¬¦'"㈱№℡゛゜⺀⺄⺆⺇⺈⺊⺌⺍⺕⺜⺝⺥⺧⺪⺬⺮⺶⺼⺾⻆⻊⻌⻍⻏⻖⻗⻞⻣"],["c8f5","ʃɐɛɔɵœøŋʊɪ"],["f9fe","■"],["fa40","𠕇鋛𠗟𣿅蕌䊵珯况㙉𤥂𨧤鍄𡧛苮𣳈砼杄拟𤤳𨦪𠊠𦮳𡌅侫𢓭倈𦴩𧪄𣘀𤪱𢔓倩𠍾徤𠎀𠍇滛𠐟偽儁㑺儎顬㝃萖𤦤𠒇兠𣎴兪𠯿𢃼𠋥𢔰𠖎𣈳𡦃宂蝽𠖳𣲙冲冸"],["faa1","鴴凉减凑㳜凓𤪦决凢卂凭菍椾𣜭彻刋刦刼劵剗劔効勅簕蕂勠蘍𦬓包𨫞啉滙𣾀𠥔𣿬匳卄𠯢泋𡜦栛珕恊㺪㣌𡛨燝䒢卭却𨚫卾卿𡖖𡘓矦厓𨪛厠厫厮玧𥝲㽙玜叁叅汉义埾叙㪫𠮏叠𣿫𢶣叶𠱷吓灹唫晗浛呭𦭓𠵴啝咏咤䞦𡜍𠻝㶴𠵍"],["fb40","𨦼𢚘啇䳭启琗喆喩嘅𡣗𤀺䕒𤐵暳𡂴嘷曍𣊊暤暭噍噏磱囱鞇叾圀囯园𨭦㘣𡉏坆𤆥汮炋坂㚱𦱾埦𡐖堃𡑔𤍣堦𤯵塜墪㕡壠壜𡈼壻寿坃𪅐𤉸鏓㖡够梦㛃湙"],["fba1","𡘾娤啓𡚒蔅姉𠵎𦲁𦴪𡟜姙𡟻𡞲𦶦浱𡠨𡛕姹𦹅媫婣㛦𤦩婷㜈媖瑥嫓𦾡𢕔㶅𡤑㜲𡚸広勐孶斈孼𧨎䀄䡝𠈄寕慠𡨴𥧌𠖥寳宝䴐尅𡭄尓珎尔𡲥𦬨屉䣝岅峩峯嶋𡷹𡸷崐崘嵆𡺤岺巗苼㠭𤤁𢁉𢅳芇㠶㯂帮檊幵幺𤒼𠳓厦亷廐厨𡝱帉廴𨒂"],["fc40","廹廻㢠廼栾鐛弍𠇁弢㫞䢮𡌺强𦢈𢏐彘𢑱彣鞽𦹮彲鍀𨨶徧嶶㵟𥉐𡽪𧃸𢙨釖𠊞𨨩怱暅𡡷㥣㷇㘹垐𢞴祱㹀悞悤悳𤦂𤦏𧩓璤僡媠慤萤慂慈𦻒憁凴𠙖憇宪𣾷"],["fca1","𢡟懓𨮝𩥝懐㤲𢦀𢣁怣慜攞掋𠄘担𡝰拕𢸍捬𤧟㨗搸揸𡎎𡟼撐澊𢸶頔𤂌𥜝擡擥鑻㩦携㩗敍漖𤨨𤨣斅敭敟𣁾斵𤥀䬷旑䃘𡠩无旣忟𣐀昘𣇷𣇸晄𣆤𣆥晋𠹵晧𥇦晳晴𡸽𣈱𨗴𣇈𥌓矅𢣷馤朂𤎜𤨡㬫槺𣟂杞杧杢𤇍𩃭柗䓩栢湐鈼栁𣏦𦶠桝"],["fd40","𣑯槡樋𨫟楳棃𣗍椁椀㴲㨁𣘼㮀枬楡𨩊䋼椶榘㮡𠏉荣傐槹𣙙𢄪橅𣜃檝㯳枱櫈𩆜㰍欝𠤣惞欵歴𢟍溵𣫛𠎵𡥘㝀吡𣭚毡𣻼毜氷𢒋𤣱𦭑汚舦汹𣶼䓅𣶽𤆤𤤌𤤀"],["fda1","𣳉㛥㳫𠴲鮃𣇹𢒑羏样𦴥𦶡𦷫涖浜湼漄𤥿𤂅𦹲蔳𦽴凇沜渝萮𨬡港𣸯瑓𣾂秌湏媑𣁋濸㜍澝𣸰滺𡒗𤀽䕕鏰潄潜㵎潴𩅰㴻澟𤅄濓𤂑𤅕𤀹𣿰𣾴𤄿凟𤅖𤅗𤅀𦇝灋灾炧炁烌烕烖烟䄄㷨熴熖𤉷焫煅媈煊煮岜𤍥煏鍢𤋁焬𤑚𤨧𤨢熺𨯨炽爎"],["fe40","鑂爕夑鑃爤鍁𥘅爮牀𤥴梽牕牗㹕𣁄栍漽犂猪猫𤠣𨠫䣭𨠄猨献珏玪𠰺𦨮珉瑉𤇢𡛧𤨤昣㛅𤦷𤦍𤧻珷琕椃𤨦琹𠗃㻗瑜𢢭瑠𨺲瑇珤瑶莹瑬㜰瑴鏱樬璂䥓𤪌"],["fea1","𤅟𤩹𨮏孆𨰃𡢞瓈𡦈甎瓩甞𨻙𡩋寗𨺬鎅畍畊畧畮𤾂㼄𤴓疎瑝疞疴瘂瘬癑癏癯癶𦏵皐臯㟸𦤑𦤎皡皥皷盌𦾟葢𥂝𥅽𡸜眞眦着撯𥈠睘𣊬瞯𨥤𨥨𡛁矴砉𡍶𤨒棊碯磇磓隥礮𥗠磗礴碱𧘌辸袄𨬫𦂃𢘜禆褀椂禀𥡗禝𧬹礼禩渪𧄦㺨秆𩄍秔"]]')},74488:function(A){"use strict";A.exports=JSON.parse('[["0","\\u0000",127,"€"],["8140","丂丄丅丆丏丒丗丟丠両丣並丩丮丯丱丳丵丷丼乀乁乂乄乆乊乑乕乗乚乛乢乣乤乥乧乨乪",5,"乲乴",9,"乿",6,"亇亊"],["8180","亐亖亗亙亜亝亞亣亪亯亰亱亴亶亷亸亹亼亽亾仈仌仏仐仒仚仛仜仠仢仦仧仩仭仮仯仱仴仸仹仺仼仾伀伂",6,"伋伌伒",4,"伜伝伡伣伨伩伬伭伮伱伳伵伷伹伻伾",4,"佄佅佇",5,"佒佔佖佡佢佦佨佪佫佭佮佱佲併佷佸佹佺佽侀侁侂侅來侇侊侌侎侐侒侓侕侖侘侙侚侜侞侟価侢"],["8240","侤侫侭侰",4,"侶",8,"俀俁係俆俇俈俉俋俌俍俒",4,"俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿",11],["8280","個倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯",10,"倻倽倿偀偁偂偄偅偆偉偊偋偍偐",4,"偖偗偘偙偛偝",7,"偦",5,"偭",8,"偸偹偺偼偽傁傂傃傄傆傇傉傊傋傌傎",20,"傤傦傪傫傭",4,"傳",6,"傼"],["8340","傽",17,"僐",5,"僗僘僙僛",10,"僨僩僪僫僯僰僱僲僴僶",4,"僼",9,"儈"],["8380","儉儊儌",5,"儓",13,"儢",28,"兂兇兊兌兎兏児兒兓兗兘兙兛兝",4,"兣兤兦內兩兪兯兲兺兾兿冃冄円冇冊冋冎冏冐冑冓冔冘冚冝冞冟冡冣冦",4,"冭冮冴冸冹冺冾冿凁凂凃凅凈凊凍凎凐凒",5],["8440","凘凙凚凜凞凟凢凣凥",5,"凬凮凱凲凴凷凾刄刅刉刋刌刏刐刓刔刕刜刞刟刡刢刣別刦刧刪刬刯刱刲刴刵刼刾剄",5,"剋剎剏剒剓剕剗剘"],["8480","剙剚剛剝剟剠剢剣剤剦剨剫剬剭剮剰剱剳",9,"剾劀劃",4,"劉",6,"劑劒劔",6,"劜劤劥劦劧劮劯劰労",9,"勀勁勂勄勅勆勈勊勌勍勎勏勑勓勔動勗務",5,"勠勡勢勣勥",10,"勱",7,"勻勼勽匁匂匃匄匇匉匊匋匌匎"],["8540","匑匒匓匔匘匛匜匞匟匢匤匥匧匨匩匫匬匭匯",9,"匼匽區卂卄卆卋卌卍卐協単卙卛卝卥卨卪卬卭卲卶卹卻卼卽卾厀厁厃厇厈厊厎厏"],["8580","厐",4,"厖厗厙厛厜厞厠厡厤厧厪厫厬厭厯",6,"厷厸厹厺厼厽厾叀參",4,"収叏叐叒叓叕叚叜叝叞叡叢叧叴叺叾叿吀吂吅吇吋吔吘吙吚吜吢吤吥吪吰吳吶吷吺吽吿呁呂呄呅呇呉呌呍呎呏呑呚呝",4,"呣呥呧呩",7,"呴呹呺呾呿咁咃咅咇咈咉咊咍咑咓咗咘咜咞咟咠咡"],["8640","咢咥咮咰咲咵咶咷咹咺咼咾哃哅哊哋哖哘哛哠",4,"哫哬哯哰哱哴",5,"哻哾唀唂唃唄唅唈唊",4,"唒唓唕",5,"唜唝唞唟唡唥唦"],["8680","唨唩唫唭唲唴唵唶唸唹唺唻唽啀啂啅啇啈啋",4,"啑啒啓啔啗",4,"啝啞啟啠啢啣啨啩啫啯",5,"啹啺啽啿喅喆喌喍喎喐喒喓喕喖喗喚喛喞喠",6,"喨",8,"喲喴営喸喺喼喿",4,"嗆嗇嗈嗊嗋嗎嗏嗐嗕嗗",4,"嗞嗠嗢嗧嗩嗭嗮嗰嗱嗴嗶嗸",4,"嗿嘂嘃嘄嘅"],["8740","嘆嘇嘊嘋嘍嘐",7,"嘙嘚嘜嘝嘠嘡嘢嘥嘦嘨嘩嘪嘫嘮嘯嘰嘳嘵嘷嘸嘺嘼嘽嘾噀",11,"噏",4,"噕噖噚噛噝",4],["8780","噣噥噦噧噭噮噯噰噲噳噴噵噷噸噹噺噽",7,"嚇",6,"嚐嚑嚒嚔",14,"嚤",10,"嚰",6,"嚸嚹嚺嚻嚽",12,"囋",8,"囕囖囘囙囜団囥",5,"囬囮囯囲図囶囷囸囻囼圀圁圂圅圇國",6],["8840","園",9,"圝圞圠圡圢圤圥圦圧圫圱圲圴",4,"圼圽圿坁坃坄坅坆坈坉坋坒",4,"坘坙坢坣坥坧坬坮坰坱坲坴坵坸坹坺坽坾坿垀"],["8880","垁垇垈垉垊垍",4,"垔",6,"垜垝垞垟垥垨垪垬垯垰垱垳垵垶垷垹",8,"埄",6,"埌埍埐埑埓埖埗埛埜埞埡埢埣埥",7,"埮埰埱埲埳埵埶執埻埼埾埿堁堃堄堅堈堉堊堌堎堏堐堒堓堔堖堗堘堚堛堜堝堟堢堣堥",4,"堫",4,"報堲堳場堶",7],["8940","堾",5,"塅",6,"塎塏塐塒塓塕塖塗塙",4,"塟",5,"塦",4,"塭",16,"塿墂墄墆墇墈墊墋墌"],["8980","墍",4,"墔",4,"墛墜墝墠",7,"墪",17,"墽墾墿壀壂壃壄壆",10,"壒壓壔壖",13,"壥",5,"壭壯壱売壴壵壷壸壺",7,"夃夅夆夈",4,"夎夐夑夒夓夗夘夛夝夞夠夡夢夣夦夨夬夰夲夳夵夶夻"],["8a40","夽夾夿奀奃奅奆奊奌奍奐奒奓奙奛",4,"奡奣奤奦",12,"奵奷奺奻奼奾奿妀妅妉妋妌妎妏妐妑妔妕妘妚妛妜妝妟妠妡妢妦"],["8a80","妧妬妭妰妱妳",5,"妺妼妽妿",6,"姇姈姉姌姍姎姏姕姖姙姛姞",4,"姤姦姧姩姪姫姭",11,"姺姼姽姾娀娂娊娋娍娎娏娐娒娔娕娖娗娙娚娛娝娞娡娢娤娦娧娨娪",6,"娳娵娷",4,"娽娾娿婁",4,"婇婈婋",9,"婖婗婘婙婛",5],["8b40","婡婣婤婥婦婨婩婫",8,"婸婹婻婼婽婾媀",17,"媓",6,"媜",13,"媫媬"],["8b80","媭",4,"媴媶媷媹",4,"媿嫀嫃",5,"嫊嫋嫍",4,"嫓嫕嫗嫙嫚嫛嫝嫞嫟嫢嫤嫥嫧嫨嫪嫬",4,"嫲",22,"嬊",11,"嬘",25,"嬳嬵嬶嬸",7,"孁",6],["8c40","孈",7,"孒孖孞孠孡孧孨孫孭孮孯孲孴孶孷學孹孻孼孾孿宂宆宊宍宎宐宑宒宔宖実宧宨宩宬宭宮宯宱宲宷宺宻宼寀寁寃寈寉寊寋寍寎寏"],["8c80","寑寔",8,"寠寢寣實寧審",4,"寯寱",6,"寽対尀専尃尅將專尋尌對導尐尒尓尗尙尛尞尟尠尡尣尦尨尩尪尫尭尮尯尰尲尳尵尶尷屃屄屆屇屌屍屒屓屔屖屗屘屚屛屜屝屟屢層屧",6,"屰屲",6,"屻屼屽屾岀岃",4,"岉岊岋岎岏岒岓岕岝",4,"岤",4],["8d40","岪岮岯岰岲岴岶岹岺岻岼岾峀峂峃峅",5,"峌",5,"峓",5,"峚",6,"峢峣峧峩峫峬峮峯峱",9,"峼",4],["8d80","崁崄崅崈",5,"崏",4,"崕崗崘崙崚崜崝崟",4,"崥崨崪崫崬崯",4,"崵",7,"崿",7,"嵈嵉嵍",10,"嵙嵚嵜嵞",10,"嵪嵭嵮嵰嵱嵲嵳嵵",12,"嶃",21,"嶚嶛嶜嶞嶟嶠"],["8e40","嶡",21,"嶸",12,"巆",6,"巎",12,"巜巟巠巣巤巪巬巭"],["8e80","巰巵巶巸",4,"巿帀帄帇帉帊帋帍帎帒帓帗帞",7,"帨",4,"帯帰帲",4,"帹帺帾帿幀幁幃幆",5,"幍",6,"幖",4,"幜幝幟幠幣",14,"幵幷幹幾庁庂広庅庈庉庌庍庎庒庘庛庝庡庢庣庤庨",4,"庮",4,"庴庺庻庼庽庿",6],["8f40","廆廇廈廋",5,"廔廕廗廘廙廚廜",11,"廩廫",8,"廵廸廹廻廼廽弅弆弇弉弌弍弎弐弒弔弖弙弚弜弝弞弡弢弣弤"],["8f80","弨弫弬弮弰弲",6,"弻弽弾弿彁",14,"彑彔彙彚彛彜彞彟彠彣彥彧彨彫彮彯彲彴彵彶彸彺彽彾彿徃徆徍徎徏徑従徔徖徚徛徝從徟徠徢",5,"復徫徬徯",5,"徶徸徹徺徻徾",4,"忇忈忊忋忎忓忔忕忚忛応忞忟忢忣忥忦忨忩忬忯忰忲忳忴忶忷忹忺忼怇"],["9040","怈怉怋怌怐怑怓怗怘怚怞怟怢怣怤怬怭怮怰",4,"怶",4,"怽怾恀恄",6,"恌恎恏恑恓恔恖恗恘恛恜恞恟恠恡恥恦恮恱恲恴恵恷恾悀"],["9080","悁悂悅悆悇悈悊悋悎悏悐悑悓悕悗悘悙悜悞悡悢悤悥悧悩悪悮悰悳悵悶悷悹悺悽",7,"惇惈惉惌",4,"惒惓惔惖惗惙惛惞惡",4,"惪惱惲惵惷惸惻",4,"愂愃愄愅愇愊愋愌愐",4,"愖愗愘愙愛愜愝愞愡愢愥愨愩愪愬",18,"慀",6],["9140","慇慉態慍慏慐慒慓慔慖",6,"慞慟慠慡慣慤慥慦慩",6,"慱慲慳慴慶慸",18,"憌憍憏",4,"憕"],["9180","憖",6,"憞",8,"憪憫憭",9,"憸",5,"憿懀懁懃",4,"應懌",4,"懓懕",16,"懧",13,"懶",8,"戀",5,"戇戉戓戔戙戜戝戞戠戣戦戧戨戩戫戭戯戰戱戲戵戶戸",4,"扂扄扅扆扊"],["9240","扏扐払扖扗扙扚扜",6,"扤扥扨扱扲扴扵扷扸扺扻扽抁抂抃抅抆抇抈抋",5,"抔抙抜抝択抣抦抧抩抪抭抮抯抰抲抳抴抶抷抸抺抾拀拁"],["9280","拃拋拏拑拕拝拞拠拡拤拪拫拰拲拵拸拹拺拻挀挃挄挅挆挊挋挌挍挏挐挒挓挔挕挗挘挙挜挦挧挩挬挭挮挰挱挳",5,"挻挼挾挿捀捁捄捇捈捊捑捒捓捔捖",7,"捠捤捥捦捨捪捫捬捯捰捲捳捴捵捸捹捼捽捾捿掁掃掄掅掆掋掍掑掓掔掕掗掙",6,"採掤掦掫掯掱掲掵掶掹掻掽掿揀"],["9340","揁揂揃揅揇揈揊揋揌揑揓揔揕揗",6,"揟揢揤",4,"揫揬揮揯揰揱揳揵揷揹揺揻揼揾搃搄搆",4,"損搎搑搒搕",5,"搝搟搢搣搤"],["9380","搥搧搨搩搫搮",5,"搵",4,"搻搼搾摀摂摃摉摋",6,"摓摕摖摗摙",4,"摟",7,"摨摪摫摬摮",9,"摻",6,"撃撆撈",8,"撓撔撗撘撚撛撜撝撟",4,"撥撦撧撨撪撫撯撱撲撳撴撶撹撻撽撾撿擁擃擄擆",6,"擏擑擓擔擕擖擙據"],["9440","擛擜擝擟擠擡擣擥擧",24,"攁",7,"攊",7,"攓",4,"攙",8],["9480","攢攣攤攦",4,"攬攭攰攱攲攳攷攺攼攽敀",4,"敆敇敊敋敍敎敐敒敓敔敗敘敚敜敟敠敡敤敥敧敨敩敪敭敮敯敱敳敵敶數",14,"斈斉斊斍斎斏斒斔斕斖斘斚斝斞斠斢斣斦斨斪斬斮斱",7,"斺斻斾斿旀旂旇旈旉旊旍旐旑旓旔旕旘",7,"旡旣旤旪旫"],["9540","旲旳旴旵旸旹旻",4,"昁昄昅昇昈昉昋昍昐昑昒昖昗昘昚昛昜昞昡昢昣昤昦昩昪昫昬昮昰昲昳昷",4,"昽昿晀時晄",6,"晍晎晐晑晘"],["9580","晙晛晜晝晞晠晢晣晥晧晩",4,"晱晲晳晵晸晹晻晼晽晿暀暁暃暅暆暈暉暊暋暍暎暏暐暒暓暔暕暘",4,"暞",8,"暩",4,"暯",4,"暵暶暷暸暺暻暼暽暿",25,"曚曞",7,"曧曨曪",5,"曱曵曶書曺曻曽朁朂會"],["9640","朄朅朆朇朌朎朏朑朒朓朖朘朙朚朜朞朠",5,"朧朩朮朰朲朳朶朷朸朹朻朼朾朿杁杄杅杇杊杋杍杒杔杕杗",4,"杝杢杣杤杦杧杫杬杮東杴杶"],["9680","杸杹杺杻杽枀枂枃枅枆枈枊枌枍枎枏枑枒枓枔枖枙枛枟枠枡枤枦枩枬枮枱枲枴枹",7,"柂柅",9,"柕柖柗柛柟柡柣柤柦柧柨柪柫柭柮柲柵",7,"柾栁栂栃栄栆栍栐栒栔栕栘",4,"栞栟栠栢",6,"栫",6,"栴栵栶栺栻栿桇桋桍桏桒桖",5],["9740","桜桝桞桟桪桬",7,"桵桸",8,"梂梄梇",7,"梐梑梒梔梕梖梘",9,"梣梤梥梩梪梫梬梮梱梲梴梶梷梸"],["9780","梹",6,"棁棃",5,"棊棌棎棏棐棑棓棔棖棗棙棛",4,"棡棢棤",9,"棯棲棳棴棶棷棸棻棽棾棿椀椂椃椄椆",4,"椌椏椑椓",11,"椡椢椣椥",7,"椮椯椱椲椳椵椶椷椸椺椻椼椾楀楁楃",16,"楕楖楘楙楛楜楟"],["9840","楡楢楤楥楧楨楩楪楬業楯楰楲",4,"楺楻楽楾楿榁榃榅榊榋榌榎",5,"榖榗榙榚榝",9,"榩榪榬榮榯榰榲榳榵榶榸榹榺榼榽"],["9880","榾榿槀槂",7,"構槍槏槑槒槓槕",5,"槜槝槞槡",11,"槮槯槰槱槳",9,"槾樀",9,"樋",11,"標",5,"樠樢",5,"権樫樬樭樮樰樲樳樴樶",6,"樿",4,"橅橆橈",7,"橑",6,"橚"],["9940","橜",4,"橢橣橤橦",10,"橲",6,"橺橻橽橾橿檁檂檃檅",8,"檏檒",4,"檘",7,"檡",5],["9980","檧檨檪檭",114,"欥欦欨",6],["9a40","欯欰欱欳欴欵欶欸欻欼欽欿歀歁歂歄歅歈歊歋歍",11,"歚",7,"歨歩歫",13,"歺歽歾歿殀殅殈"],["9a80","殌殎殏殐殑殔殕殗殘殙殜",4,"殢",7,"殫",7,"殶殸",6,"毀毃毄毆",4,"毌毎毐毑毘毚毜",4,"毢",7,"毬毭毮毰毱毲毴毶毷毸毺毻毼毾",6,"氈",4,"氎氒気氜氝氞氠氣氥氫氬氭氱氳氶氷氹氺氻氼氾氿汃汄汅汈汋",4,"汑汒汓汖汘"],["9b40","汙汚汢汣汥汦汧汫",4,"汱汳汵汷汸決汻汼汿沀沄沇沊沋沍沎沑沒沕沖沗沘沚沜沝沞沠沢沨沬沯沰沴沵沶沷沺泀況泂泃泆泇泈泋泍泎泏泑泒泘"],["9b80","泙泚泜泝泟泤泦泧泩泬泭泲泴泹泿洀洂洃洅洆洈洉洊洍洏洐洑洓洔洕洖洘洜洝洟",5,"洦洨洩洬洭洯洰洴洶洷洸洺洿浀浂浄浉浌浐浕浖浗浘浛浝浟浡浢浤浥浧浨浫浬浭浰浱浲浳浵浶浹浺浻浽",4,"涃涄涆涇涊涋涍涏涐涒涖",4,"涜涢涥涬涭涰涱涳涴涶涷涹",5,"淁淂淃淈淉淊"],["9c40","淍淎淏淐淒淓淔淕淗淚淛淜淟淢淣淥淧淨淩淪淭淯淰淲淴淵淶淸淺淽",7,"渆渇済渉渋渏渒渓渕渘渙減渜渞渟渢渦渧渨渪測渮渰渱渳渵"],["9c80","渶渷渹渻",7,"湅",7,"湏湐湑湒湕湗湙湚湜湝湞湠",10,"湬湭湯",14,"満溁溂溄溇溈溊",4,"溑",6,"溙溚溛溝溞溠溡溣溤溦溨溩溫溬溭溮溰溳溵溸溹溼溾溿滀滃滄滅滆滈滉滊滌滍滎滐滒滖滘滙滛滜滝滣滧滪",5],["9d40","滰滱滲滳滵滶滷滸滺",7,"漃漄漅漇漈漊",4,"漐漑漒漖",9,"漡漢漣漥漦漧漨漬漮漰漲漴漵漷",6,"漿潀潁潂"],["9d80","潃潄潅潈潉潊潌潎",9,"潙潚潛潝潟潠潡潣潤潥潧",5,"潯潰潱潳潵潶潷潹潻潽",6,"澅澆澇澊澋澏",12,"澝澞澟澠澢",4,"澨",10,"澴澵澷澸澺",5,"濁濃",5,"濊",6,"濓",10,"濟濢濣濤濥"],["9e40","濦",7,"濰",32,"瀒",7,"瀜",6,"瀤",6],["9e80","瀫",9,"瀶瀷瀸瀺",17,"灍灎灐",13,"灟",11,"灮灱灲灳灴灷灹灺灻災炁炂炃炄炆炇炈炋炌炍炏炐炑炓炗炘炚炛炞",12,"炰炲炴炵炶為炾炿烄烅烆烇烉烋",12,"烚"],["9f40","烜烝烞烠烡烢烣烥烪烮烰",6,"烸烺烻烼烾",10,"焋",4,"焑焒焔焗焛",10,"焧",7,"焲焳焴"],["9f80","焵焷",13,"煆煇煈煉煋煍煏",12,"煝煟",4,"煥煩",4,"煯煰煱煴煵煶煷煹煻煼煾",5,"熅",4,"熋熌熍熎熐熑熒熓熕熖熗熚",4,"熡",6,"熩熪熫熭",5,"熴熶熷熸熺",8,"燄",9,"燏",4],["a040","燖",9,"燡燢燣燤燦燨",5,"燯",9,"燺",11,"爇",19],["a080","爛爜爞",9,"爩爫爭爮爯爲爳爴爺爼爾牀",6,"牉牊牋牎牏牐牑牓牔牕牗牘牚牜牞牠牣牤牥牨牪牫牬牭牰牱牳牴牶牷牸牻牼牽犂犃犅",4,"犌犎犐犑犓",11,"犠",11,"犮犱犲犳犵犺",6,"狅狆狇狉狊狋狌狏狑狓狔狕狖狘狚狛"],["a1a1"," 、。·ˉˇ¨〃々—~‖…‘’“”〔〕〈",7,"〖〗【】±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴♂♀°′″℃$¤¢£‰§№☆★○●◎◇◆□■△▲※→←↑↓〓"],["a2a1","ⅰ",9],["a2b1","⒈",19,"⑴",19,"①",9],["a2e5","㈠",9],["a2f1","Ⅰ",11],["a3a1","!"#¥%",88," ̄"],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a6e0","︵︶︹︺︿﹀︽︾﹁﹂﹃﹄"],["a6ee","︻︼︷︸︱"],["a6f4","︳︴"],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a840","ˊˋ˙–―‥‵℅℉↖↗↘↙∕∟∣≒≦≧⊿═",35,"▁",6],["a880","█",7,"▓▔▕▼▽◢◣◤◥☉⊕〒〝〞"],["a8a1","āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑ"],["a8bd","ńň"],["a8c0","ɡ"],["a8c5","ㄅ",36],["a940","〡",8,"㊣㎎㎏㎜㎝㎞㎡㏄㏎㏑㏒㏕︰¬¦"],["a959","℡㈱"],["a95c","‐"],["a960","ー゛゜ヽヾ〆ゝゞ﹉",9,"﹔﹕﹖﹗﹙",8],["a980","﹢",4,"﹨﹩﹪﹫"],["a996","〇"],["a9a4","─",75],["aa40","狜狝狟狢",5,"狪狫狵狶狹狽狾狿猀猂猄",5,"猋猌猍猏猐猑猒猔猘猙猚猟猠猣猤猦猧猨猭猯猰猲猳猵猶猺猻猼猽獀",8],["aa80","獉獊獋獌獎獏獑獓獔獕獖獘",7,"獡",10,"獮獰獱"],["ab40","獲",11,"獿",4,"玅玆玈玊玌玍玏玐玒玓玔玕玗玘玙玚玜玝玞玠玡玣",5,"玪玬玭玱玴玵玶玸玹玼玽玾玿珁珃",4],["ab80","珋珌珎珒",6,"珚珛珜珝珟珡珢珣珤珦珨珪珫珬珮珯珰珱珳",4],["ac40","珸",10,"琄琇琈琋琌琍琎琑",8,"琜",5,"琣琤琧琩琫琭琯琱琲琷",4,"琽琾琿瑀瑂",11],["ac80","瑎",6,"瑖瑘瑝瑠",12,"瑮瑯瑱",4,"瑸瑹瑺"],["ad40","瑻瑼瑽瑿璂璄璅璆璈璉璊璌璍璏璑",10,"璝璟",7,"璪",15,"璻",12],["ad80","瓈",9,"瓓",8,"瓝瓟瓡瓥瓧",6,"瓰瓱瓲"],["ae40","瓳瓵瓸",6,"甀甁甂甃甅",7,"甎甐甒甔甕甖甗甛甝甞甠",4,"甦甧甪甮甴甶甹甼甽甿畁畂畃畄畆畇畉畊畍畐畑畒畓畕畖畗畘"],["ae80","畝",7,"畧畨畩畫",6,"畳畵當畷畺",4,"疀疁疂疄疅疇"],["af40","疈疉疊疌疍疎疐疓疕疘疛疜疞疢疦",4,"疭疶疷疺疻疿痀痁痆痋痌痎痏痐痑痓痗痙痚痜痝痟痠痡痥痩痬痭痮痯痲痳痵痶痷痸痺痻痽痾瘂瘄瘆瘇"],["af80","瘈瘉瘋瘍瘎瘏瘑瘒瘓瘔瘖瘚瘜瘝瘞瘡瘣瘧瘨瘬瘮瘯瘱瘲瘶瘷瘹瘺瘻瘽癁療癄"],["b040","癅",6,"癎",5,"癕癗",4,"癝癟癠癡癢癤",6,"癬癭癮癰",7,"癹発發癿皀皁皃皅皉皊皌皍皏皐皒皔皕皗皘皚皛"],["b080","皜",7,"皥",8,"皯皰皳皵",9,"盀盁盃啊阿埃挨哎唉哀皑癌蔼矮艾碍爱隘鞍氨安俺按暗岸胺案肮昂盎凹敖熬翱袄傲奥懊澳芭捌扒叭吧笆八疤巴拔跋靶把耙坝霸罢爸白柏百摆佰败拜稗斑班搬扳般颁板版扮拌伴瓣半办绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞包褒剥"],["b140","盄盇盉盋盌盓盕盙盚盜盝盞盠",4,"盦",7,"盰盳盵盶盷盺盻盽盿眀眂眃眅眆眊県眎",10,"眛眜眝眞眡眣眤眥眧眪眫"],["b180","眬眮眰",4,"眹眻眽眾眿睂睄睅睆睈",7,"睒",7,"睜薄雹保堡饱宝抱报暴豹鲍爆杯碑悲卑北辈背贝钡倍狈备惫焙被奔苯本笨崩绷甭泵蹦迸逼鼻比鄙笔彼碧蓖蔽毕毙毖币庇痹闭敝弊必辟壁臂避陛鞭边编贬扁便变卞辨辩辫遍标彪膘表鳖憋别瘪彬斌濒滨宾摈兵冰柄丙秉饼炳"],["b240","睝睞睟睠睤睧睩睪睭",11,"睺睻睼瞁瞂瞃瞆",5,"瞏瞐瞓",11,"瞡瞣瞤瞦瞨瞫瞭瞮瞯瞱瞲瞴瞶",4],["b280","瞼瞾矀",12,"矎",8,"矘矙矚矝",4,"矤病并玻菠播拨钵波博勃搏铂箔伯帛舶脖膊渤泊驳捕卜哺补埠不布步簿部怖擦猜裁材才财睬踩采彩菜蔡餐参蚕残惭惨灿苍舱仓沧藏操糙槽曹草厕策侧册测层蹭插叉茬茶查碴搽察岔差诧拆柴豺搀掺蝉馋谗缠铲产阐颤昌猖"],["b340","矦矨矪矯矰矱矲矴矵矷矹矺矻矼砃",5,"砊砋砎砏砐砓砕砙砛砞砠砡砢砤砨砪砫砮砯砱砲砳砵砶砽砿硁硂硃硄硆硈硉硊硋硍硏硑硓硔硘硙硚"],["b380","硛硜硞",11,"硯",7,"硸硹硺硻硽",6,"场尝常长偿肠厂敞畅唱倡超抄钞朝嘲潮巢吵炒车扯撤掣彻澈郴臣辰尘晨忱沉陈趁衬撑称城橙成呈乘程惩澄诚承逞骋秤吃痴持匙池迟弛驰耻齿侈尺赤翅斥炽充冲虫崇宠抽酬畴踌稠愁筹仇绸瞅丑臭初出橱厨躇锄雏滁除楚"],["b440","碄碅碆碈碊碋碏碐碒碔碕碖碙碝碞碠碢碤碦碨",7,"碵碶碷碸確碻碼碽碿磀磂磃磄磆磇磈磌磍磎磏磑磒磓磖磗磘磚",9],["b480","磤磥磦磧磩磪磫磭",4,"磳磵磶磸磹磻",5,"礂礃礄礆",6,"础储矗搐触处揣川穿椽传船喘串疮窗幢床闯创吹炊捶锤垂春椿醇唇淳纯蠢戳绰疵茨磁雌辞慈瓷词此刺赐次聪葱囱匆从丛凑粗醋簇促蹿篡窜摧崔催脆瘁粹淬翠村存寸磋撮搓措挫错搭达答瘩打大呆歹傣戴带殆代贷袋待逮"],["b540","礍",5,"礔",9,"礟",4,"礥",14,"礵",4,"礽礿祂祃祄祅祇祊",8,"祔祕祘祙祡祣"],["b580","祤祦祩祪祫祬祮祰",6,"祹祻",4,"禂禃禆禇禈禉禋禌禍禎禐禑禒怠耽担丹单郸掸胆旦氮但惮淡诞弹蛋当挡党荡档刀捣蹈倒岛祷导到稻悼道盗德得的蹬灯登等瞪凳邓堤低滴迪敌笛狄涤翟嫡抵底地蒂第帝弟递缔颠掂滇碘点典靛垫电佃甸店惦奠淀殿碉叼雕凋刁掉吊钓调跌爹碟蝶迭谍叠"],["b640","禓",6,"禛",11,"禨",10,"禴",4,"禼禿秂秄秅秇秈秊秌秎秏秐秓秔秖秗秙",5,"秠秡秢秥秨秪"],["b680","秬秮秱",6,"秹秺秼秾秿稁稄稅稇稈稉稊稌稏",4,"稕稖稘稙稛稜丁盯叮钉顶鼎锭定订丢东冬董懂动栋侗恫冻洞兜抖斗陡豆逗痘都督毒犊独读堵睹赌杜镀肚度渡妒端短锻段断缎堆兑队对墩吨蹲敦顿囤钝盾遁掇哆多夺垛躲朵跺舵剁惰堕蛾峨鹅俄额讹娥恶厄扼遏鄂饿恩而儿耳尔饵洱二"],["b740","稝稟稡稢稤",14,"稴稵稶稸稺稾穀",5,"穇",9,"穒",4,"穘",16],["b780","穩",6,"穱穲穳穵穻穼穽穾窂窅窇窉窊窋窌窎窏窐窓窔窙窚窛窞窡窢贰发罚筏伐乏阀法珐藩帆番翻樊矾钒繁凡烦反返范贩犯饭泛坊芳方肪房防妨仿访纺放菲非啡飞肥匪诽吠肺废沸费芬酚吩氛分纷坟焚汾粉奋份忿愤粪丰封枫蜂峰锋风疯烽逢冯缝讽奉凤佛否夫敷肤孵扶拂辐幅氟符伏俘服"],["b840","窣窤窧窩窪窫窮",4,"窴",10,"竀",10,"竌",9,"竗竘竚竛竜竝竡竢竤竧",5,"竮竰竱竲竳"],["b880","竴",4,"竻竼竾笀笁笂笅笇笉笌笍笎笐笒笓笖笗笘笚笜笝笟笡笢笣笧笩笭浮涪福袱弗甫抚辅俯釜斧脯腑府腐赴副覆赋复傅付阜父腹负富讣附妇缚咐噶嘎该改概钙盖溉干甘杆柑竿肝赶感秆敢赣冈刚钢缸肛纲岗港杠篙皋高膏羔糕搞镐稿告哥歌搁戈鸽胳疙割革葛格蛤阁隔铬个各给根跟耕更庚羹"],["b940","笯笰笲笴笵笶笷笹笻笽笿",5,"筆筈筊筍筎筓筕筗筙筜筞筟筡筣",10,"筯筰筳筴筶筸筺筼筽筿箁箂箃箄箆",6,"箎箏"],["b980","箑箒箓箖箘箙箚箛箞箟箠箣箤箥箮箯箰箲箳箵箶箷箹",7,"篂篃範埂耿梗工攻功恭龚供躬公宫弓巩汞拱贡共钩勾沟苟狗垢构购够辜菇咕箍估沽孤姑鼓古蛊骨谷股故顾固雇刮瓜剐寡挂褂乖拐怪棺关官冠观管馆罐惯灌贯光广逛瑰规圭硅归龟闺轨鬼诡癸桂柜跪贵刽辊滚棍锅郭国果裹过哈"],["ba40","篅篈築篊篋篍篎篏篐篒篔",4,"篛篜篞篟篠篢篣篤篧篨篩篫篬篭篯篰篲",4,"篸篹篺篻篽篿",7,"簈簉簊簍簎簐",5,"簗簘簙"],["ba80","簚",4,"簠",5,"簨簩簫",12,"簹",5,"籂骸孩海氦亥害骇酣憨邯韩含涵寒函喊罕翰撼捍旱憾悍焊汗汉夯杭航壕嚎豪毫郝好耗号浩呵喝荷菏核禾和何合盒貉阂河涸赫褐鹤贺嘿黑痕很狠恨哼亨横衡恒轰哄烘虹鸿洪宏弘红喉侯猴吼厚候后呼乎忽瑚壶葫胡蝴狐糊湖"],["bb40","籃",9,"籎",36,"籵",5,"籾",9],["bb80","粈粊",6,"粓粔粖粙粚粛粠粡粣粦粧粨粩粫粬粭粯粰粴",4,"粺粻弧虎唬护互沪户花哗华猾滑画划化话槐徊怀淮坏欢环桓还缓换患唤痪豢焕涣宦幻荒慌黄磺蝗簧皇凰惶煌晃幌恍谎灰挥辉徽恢蛔回毁悔慧卉惠晦贿秽会烩汇讳诲绘荤昏婚魂浑混豁活伙火获或惑霍货祸击圾基机畸稽积箕"],["bc40","粿糀糂糃糄糆糉糋糎",6,"糘糚糛糝糞糡",6,"糩",5,"糰",7,"糹糺糼",13,"紋",5],["bc80","紑",14,"紡紣紤紥紦紨紩紪紬紭紮細",6,"肌饥迹激讥鸡姬绩缉吉极棘辑籍集及急疾汲即嫉级挤几脊己蓟技冀季伎祭剂悸济寄寂计记既忌际妓继纪嘉枷夹佳家加荚颊贾甲钾假稼价架驾嫁歼监坚尖笺间煎兼肩艰奸缄茧检柬碱硷拣捡简俭剪减荐槛鉴践贱见键箭件"],["bd40","紷",54,"絯",7],["bd80","絸",32,"健舰剑饯渐溅涧建僵姜将浆江疆蒋桨奖讲匠酱降蕉椒礁焦胶交郊浇骄娇嚼搅铰矫侥脚狡角饺缴绞剿教酵轿较叫窖揭接皆秸街阶截劫节桔杰捷睫竭洁结解姐戒藉芥界借介疥诫届巾筋斤金今津襟紧锦仅谨进靳晋禁近烬浸"],["be40","継",12,"綧",6,"綯",42],["be80","線",32,"尽劲荆兢茎睛晶鲸京惊精粳经井警景颈静境敬镜径痉靖竟竞净炯窘揪究纠玖韭久灸九酒厩救旧臼舅咎就疚鞠拘狙疽居驹菊局咀矩举沮聚拒据巨具距踞锯俱句惧炬剧捐鹃娟倦眷卷绢撅攫抉掘倔爵觉决诀绝均菌钧军君峻"],["bf40","緻",62],["bf80","縺縼",4,"繂",4,"繈",21,"俊竣浚郡骏喀咖卡咯开揩楷凯慨刊堪勘坎砍看康慷糠扛抗亢炕考拷烤靠坷苛柯棵磕颗科壳咳可渴克刻客课肯啃垦恳坑吭空恐孔控抠口扣寇枯哭窟苦酷库裤夸垮挎跨胯块筷侩快宽款匡筐狂框矿眶旷况亏盔岿窥葵奎魁傀"],["c040","繞",35,"纃",23,"纜纝纞"],["c080","纮纴纻纼绖绤绬绹缊缐缞缷缹缻",6,"罃罆",9,"罒罓馈愧溃坤昆捆困括扩廓阔垃拉喇蜡腊辣啦莱来赖蓝婪栏拦篮阑兰澜谰揽览懒缆烂滥琅榔狼廊郎朗浪捞劳牢老佬姥酪烙涝勒乐雷镭蕾磊累儡垒擂肋类泪棱楞冷厘梨犁黎篱狸离漓理李里鲤礼莉荔吏栗丽厉励砾历利傈例俐"],["c140","罖罙罛罜罝罞罠罣",4,"罫罬罭罯罰罳罵罶罷罸罺罻罼罽罿羀羂",7,"羋羍羏",4,"羕",4,"羛羜羠羢羣羥羦羨",6,"羱"],["c180","羳",4,"羺羻羾翀翂翃翄翆翇翈翉翋翍翏",4,"翖翗翙",5,"翢翣痢立粒沥隶力璃哩俩联莲连镰廉怜涟帘敛脸链恋炼练粮凉梁粱良两辆量晾亮谅撩聊僚疗燎寥辽潦了撂镣廖料列裂烈劣猎琳林磷霖临邻鳞淋凛赁吝拎玲菱零龄铃伶羚凌灵陵岭领另令溜琉榴硫馏留刘瘤流柳六龙聋咙笼窿"],["c240","翤翧翨翪翫翬翭翯翲翴",6,"翽翾翿耂耇耈耉耊耎耏耑耓耚耛耝耞耟耡耣耤耫",5,"耲耴耹耺耼耾聀聁聄聅聇聈聉聎聏聐聑聓聕聖聗"],["c280","聙聛",13,"聫",5,"聲",11,"隆垄拢陇楼娄搂篓漏陋芦卢颅庐炉掳卤虏鲁麓碌露路赂鹿潞禄录陆戮驴吕铝侣旅履屡缕虑氯律率滤绿峦挛孪滦卵乱掠略抡轮伦仑沦纶论萝螺罗逻锣箩骡裸落洛骆络妈麻玛码蚂马骂嘛吗埋买麦卖迈脉瞒馒蛮满蔓曼慢漫"],["c340","聾肁肂肅肈肊肍",5,"肔肕肗肙肞肣肦肧肨肬肰肳肵肶肸肹肻胅胇",4,"胏",6,"胘胟胠胢胣胦胮胵胷胹胻胾胿脀脁脃脄脅脇脈脋"],["c380","脌脕脗脙脛脜脝脟",12,"脭脮脰脳脴脵脷脹",4,"脿谩芒茫盲氓忙莽猫茅锚毛矛铆卯茂冒帽貌贸么玫枚梅酶霉煤没眉媒镁每美昧寐妹媚门闷们萌蒙檬盟锰猛梦孟眯醚靡糜迷谜弥米秘觅泌蜜密幂棉眠绵冕免勉娩缅面苗描瞄藐秒渺庙妙蔑灭民抿皿敏悯闽明螟鸣铭名命谬摸"],["c440","腀",5,"腇腉腍腎腏腒腖腗腘腛",4,"腡腢腣腤腦腨腪腫腬腯腲腳腵腶腷腸膁膃",4,"膉膋膌膍膎膐膒",5,"膙膚膞",4,"膤膥"],["c480","膧膩膫",7,"膴",5,"膼膽膾膿臄臅臇臈臉臋臍",6,"摹蘑模膜磨摩魔抹末莫墨默沫漠寞陌谋牟某拇牡亩姆母墓暮幕募慕木目睦牧穆拿哪呐钠那娜纳氖乃奶耐奈南男难囊挠脑恼闹淖呢馁内嫩能妮霓倪泥尼拟你匿腻逆溺蔫拈年碾撵捻念娘酿鸟尿捏聂孽啮镊镍涅您柠狞凝宁"],["c540","臔",14,"臤臥臦臨臩臫臮",4,"臵",5,"臽臿舃與",4,"舎舏舑舓舕",5,"舝舠舤舥舦舧舩舮舲舺舼舽舿"],["c580","艀艁艂艃艅艆艈艊艌艍艎艐",7,"艙艛艜艝艞艠",7,"艩拧泞牛扭钮纽脓浓农弄奴努怒女暖虐疟挪懦糯诺哦欧鸥殴藕呕偶沤啪趴爬帕怕琶拍排牌徘湃派攀潘盘磐盼畔判叛乓庞旁耪胖抛咆刨炮袍跑泡呸胚培裴赔陪配佩沛喷盆砰抨烹澎彭蓬棚硼篷膨朋鹏捧碰坯砒霹批披劈琵毗"],["c640","艪艫艬艭艱艵艶艷艸艻艼芀芁芃芅芆芇芉芌芐芓芔芕芖芚芛芞芠芢芣芧芲芵芶芺芻芼芿苀苂苃苅苆苉苐苖苙苚苝苢苧苨苩苪苬苭苮苰苲苳苵苶苸"],["c680","苺苼",4,"茊茋茍茐茒茓茖茘茙茝",9,"茩茪茮茰茲茷茻茽啤脾疲皮匹痞僻屁譬篇偏片骗飘漂瓢票撇瞥拼频贫品聘乒坪苹萍平凭瓶评屏坡泼颇婆破魄迫粕剖扑铺仆莆葡菩蒲埔朴圃普浦谱曝瀑期欺栖戚妻七凄漆柒沏其棋奇歧畦崎脐齐旗祈祁骑起岂乞企启契砌器气迄弃汽泣讫掐"],["c740","茾茿荁荂荄荅荈荊",4,"荓荕",4,"荝荢荰",6,"荹荺荾",6,"莇莈莊莋莌莍莏莐莑莔莕莖莗莙莚莝莟莡",6,"莬莭莮"],["c780","莯莵莻莾莿菂菃菄菆菈菉菋菍菎菐菑菒菓菕菗菙菚菛菞菢菣菤菦菧菨菫菬菭恰洽牵扦钎铅千迁签仟谦乾黔钱钳前潜遣浅谴堑嵌欠歉枪呛腔羌墙蔷强抢橇锹敲悄桥瞧乔侨巧鞘撬翘峭俏窍切茄且怯窃钦侵亲秦琴勤芹擒禽寝沁青轻氢倾卿清擎晴氰情顷请庆琼穷秋丘邱球求囚酋泅趋区蛆曲躯屈驱渠"],["c840","菮華菳",4,"菺菻菼菾菿萀萂萅萇萈萉萊萐萒",5,"萙萚萛萞",5,"萩",7,"萲",5,"萹萺萻萾",7,"葇葈葉"],["c880","葊",6,"葒",4,"葘葝葞葟葠葢葤",4,"葪葮葯葰葲葴葷葹葻葼取娶龋趣去圈颧权醛泉全痊拳犬券劝缺炔瘸却鹊榷确雀裙群然燃冉染瓤壤攘嚷让饶扰绕惹热壬仁人忍韧任认刃妊纫扔仍日戎茸蓉荣融熔溶容绒冗揉柔肉茹蠕儒孺如辱乳汝入褥软阮蕊瑞锐闰润若弱撒洒萨腮鳃塞赛三叁"],["c940","葽",4,"蒃蒄蒅蒆蒊蒍蒏",7,"蒘蒚蒛蒝蒞蒟蒠蒢",12,"蒰蒱蒳蒵蒶蒷蒻蒼蒾蓀蓂蓃蓅蓆蓇蓈蓋蓌蓎蓏蓒蓔蓕蓗"],["c980","蓘",4,"蓞蓡蓢蓤蓧",4,"蓭蓮蓯蓱",10,"蓽蓾蔀蔁蔂伞散桑嗓丧搔骚扫嫂瑟色涩森僧莎砂杀刹沙纱傻啥煞筛晒珊苫杉山删煽衫闪陕擅赡膳善汕扇缮墒伤商赏晌上尚裳梢捎稍烧芍勺韶少哨邵绍奢赊蛇舌舍赦摄射慑涉社设砷申呻伸身深娠绅神沈审婶甚肾慎渗声生甥牲升绳"],["ca40","蔃",8,"蔍蔎蔏蔐蔒蔔蔕蔖蔘蔙蔛蔜蔝蔞蔠蔢",8,"蔭",9,"蔾",4,"蕄蕅蕆蕇蕋",10],["ca80","蕗蕘蕚蕛蕜蕝蕟",4,"蕥蕦蕧蕩",8,"蕳蕵蕶蕷蕸蕼蕽蕿薀薁省盛剩胜圣师失狮施湿诗尸虱十石拾时什食蚀实识史矢使屎驶始式示士世柿事拭誓逝势是嗜噬适仕侍释饰氏市恃室视试收手首守寿授售受瘦兽蔬枢梳殊抒输叔舒淑疏书赎孰熟薯暑曙署蜀黍鼠属术述树束戍竖墅庶数漱"],["cb40","薂薃薆薈",6,"薐",10,"薝",6,"薥薦薧薩薫薬薭薱",5,"薸薺",6,"藂",6,"藊",4,"藑藒"],["cb80","藔藖",5,"藝",6,"藥藦藧藨藪",14,"恕刷耍摔衰甩帅栓拴霜双爽谁水睡税吮瞬顺舜说硕朔烁斯撕嘶思私司丝死肆寺嗣四伺似饲巳松耸怂颂送宋讼诵搜艘擞嗽苏酥俗素速粟僳塑溯宿诉肃酸蒜算虽隋随绥髓碎岁穗遂隧祟孙损笋蓑梭唆缩琐索锁所塌他它她塔"],["cc40","藹藺藼藽藾蘀",4,"蘆",10,"蘒蘓蘔蘕蘗",15,"蘨蘪",13,"蘹蘺蘻蘽蘾蘿虀"],["cc80","虁",11,"虒虓處",4,"虛虜虝號虠虡虣",7,"獭挞蹋踏胎苔抬台泰酞太态汰坍摊贪瘫滩坛檀痰潭谭谈坦毯袒碳探叹炭汤塘搪堂棠膛唐糖倘躺淌趟烫掏涛滔绦萄桃逃淘陶讨套特藤腾疼誊梯剔踢锑提题蹄啼体替嚏惕涕剃屉天添填田甜恬舔腆挑条迢眺跳贴铁帖厅听烃"],["cd40","虭虯虰虲",6,"蚃",6,"蚎",4,"蚔蚖",5,"蚞",4,"蚥蚦蚫蚭蚮蚲蚳蚷蚸蚹蚻",4,"蛁蛂蛃蛅蛈蛌蛍蛒蛓蛕蛖蛗蛚蛜"],["cd80","蛝蛠蛡蛢蛣蛥蛦蛧蛨蛪蛫蛬蛯蛵蛶蛷蛺蛻蛼蛽蛿蜁蜄蜅蜆蜋蜌蜎蜏蜐蜑蜔蜖汀廷停亭庭挺艇通桐酮瞳同铜彤童桶捅筒统痛偷投头透凸秃突图徒途涂屠土吐兔湍团推颓腿蜕褪退吞屯臀拖托脱鸵陀驮驼椭妥拓唾挖哇蛙洼娃瓦袜歪外豌弯湾玩顽丸烷完碗挽晚皖惋宛婉万腕汪王亡枉网往旺望忘妄威"],["ce40","蜙蜛蜝蜟蜠蜤蜦蜧蜨蜪蜫蜬蜭蜯蜰蜲蜳蜵蜶蜸蜹蜺蜼蜽蝀",6,"蝊蝋蝍蝏蝐蝑蝒蝔蝕蝖蝘蝚",5,"蝡蝢蝦",7,"蝯蝱蝲蝳蝵"],["ce80","蝷蝸蝹蝺蝿螀螁螄螆螇螉螊螌螎",4,"螔螕螖螘",6,"螠",4,"巍微危韦违桅围唯惟为潍维苇萎委伟伪尾纬未蔚味畏胃喂魏位渭谓尉慰卫瘟温蚊文闻纹吻稳紊问嗡翁瓮挝蜗涡窝我斡卧握沃巫呜钨乌污诬屋无芜梧吾吴毋武五捂午舞伍侮坞戊雾晤物勿务悟误昔熙析西硒矽晰嘻吸锡牺"],["cf40","螥螦螧螩螪螮螰螱螲螴螶螷螸螹螻螼螾螿蟁",4,"蟇蟈蟉蟌",4,"蟔",6,"蟜蟝蟞蟟蟡蟢蟣蟤蟦蟧蟨蟩蟫蟬蟭蟯",9],["cf80","蟺蟻蟼蟽蟿蠀蠁蠂蠄",5,"蠋",7,"蠔蠗蠘蠙蠚蠜",4,"蠣稀息希悉膝夕惜熄烯溪汐犀檄袭席习媳喜铣洗系隙戏细瞎虾匣霞辖暇峡侠狭下厦夏吓掀锨先仙鲜纤咸贤衔舷闲涎弦嫌显险现献县腺馅羡宪陷限线相厢镶香箱襄湘乡翔祥详想响享项巷橡像向象萧硝霄削哮嚣销消宵淆晓"],["d040","蠤",13,"蠳",5,"蠺蠻蠽蠾蠿衁衂衃衆",5,"衎",5,"衕衖衘衚",6,"衦衧衪衭衯衱衳衴衵衶衸衹衺"],["d080","衻衼袀袃袆袇袉袊袌袎袏袐袑袓袔袕袗",4,"袝",4,"袣袥",5,"小孝校肖啸笑效楔些歇蝎鞋协挟携邪斜胁谐写械卸蟹懈泄泻谢屑薪芯锌欣辛新忻心信衅星腥猩惺兴刑型形邢行醒幸杏性姓兄凶胸匈汹雄熊休修羞朽嗅锈秀袖绣墟戌需虚嘘须徐许蓄酗叙旭序畜恤絮婿绪续轩喧宣悬旋玄"],["d140","袬袮袯袰袲",4,"袸袹袺袻袽袾袿裀裃裄裇裈裊裋裌裍裏裐裑裓裖裗裚",4,"裠裡裦裧裩",6,"裲裵裶裷裺裻製裿褀褁褃",5],["d180","褉褋",4,"褑褔",4,"褜",4,"褢褣褤褦褧褨褩褬褭褮褯褱褲褳褵褷选癣眩绚靴薛学穴雪血勋熏循旬询寻驯巡殉汛训讯逊迅压押鸦鸭呀丫芽牙蚜崖衙涯雅哑亚讶焉咽阉烟淹盐严研蜒岩延言颜阎炎沿奄掩眼衍演艳堰燕厌砚雁唁彦焰宴谚验殃央鸯秧杨扬佯疡羊洋阳氧仰痒养样漾邀腰妖瑶"],["d240","褸",8,"襂襃襅",24,"襠",5,"襧",19,"襼"],["d280","襽襾覀覂覄覅覇",26,"摇尧遥窑谣姚咬舀药要耀椰噎耶爷野冶也页掖业叶曳腋夜液一壹医揖铱依伊衣颐夷遗移仪胰疑沂宜姨彝椅蚁倚已乙矣以艺抑易邑屹亿役臆逸肄疫亦裔意毅忆义益溢诣议谊译异翼翌绎茵荫因殷音阴姻吟银淫寅饮尹引隐"],["d340","覢",30,"觃觍觓觔觕觗觘觙觛觝觟觠觡觢觤觧觨觩觪觬觭觮觰觱觲觴",6],["d380","觻",4,"訁",5,"計",21,"印英樱婴鹰应缨莹萤营荧蝇迎赢盈影颖硬映哟拥佣臃痈庸雍踊蛹咏泳涌永恿勇用幽优悠忧尤由邮铀犹油游酉有友右佑釉诱又幼迂淤于盂榆虞愚舆余俞逾鱼愉渝渔隅予娱雨与屿禹宇语羽玉域芋郁吁遇喻峪御愈欲狱育誉"],["d440","訞",31,"訿",8,"詉",21],["d480","詟",25,"詺",6,"浴寓裕预豫驭鸳渊冤元垣袁原援辕园员圆猿源缘远苑愿怨院曰约越跃钥岳粤月悦阅耘云郧匀陨允运蕴酝晕韵孕匝砸杂栽哉灾宰载再在咱攒暂赞赃脏葬遭糟凿藻枣早澡蚤躁噪造皂灶燥责择则泽贼怎增憎曾赠扎喳渣札轧"],["d540","誁",7,"誋",7,"誔",46],["d580","諃",32,"铡闸眨栅榨咋乍炸诈摘斋宅窄债寨瞻毡詹粘沾盏斩辗崭展蘸栈占战站湛绽樟章彰漳张掌涨杖丈帐账仗胀瘴障招昭找沼赵照罩兆肇召遮折哲蛰辙者锗蔗这浙珍斟真甄砧臻贞针侦枕疹诊震振镇阵蒸挣睁征狰争怔整拯正政"],["d640","諤",34,"謈",27],["d680","謤謥謧",30,"帧症郑证芝枝支吱蜘知肢脂汁之织职直植殖执值侄址指止趾只旨纸志挚掷至致置帜峙制智秩稚质炙痔滞治窒中盅忠钟衷终种肿重仲众舟周州洲诌粥轴肘帚咒皱宙昼骤珠株蛛朱猪诸诛逐竹烛煮拄瞩嘱主著柱助蛀贮铸筑"],["d740","譆",31,"譧",4,"譭",25],["d780","讇",24,"讬讱讻诇诐诪谉谞住注祝驻抓爪拽专砖转撰赚篆桩庄装妆撞壮状椎锥追赘坠缀谆准捉拙卓桌琢茁酌啄着灼浊兹咨资姿滋淄孜紫仔籽滓子自渍字鬃棕踪宗综总纵邹走奏揍租足卒族祖诅阻组钻纂嘴醉最罪尊遵昨左佐柞做作坐座"],["d840","谸",8,"豂豃豄豅豈豊豋豍",7,"豖豗豘豙豛",5,"豣",6,"豬",6,"豴豵豶豷豻",6,"貃貄貆貇"],["d880","貈貋貍",6,"貕貖貗貙",20,"亍丌兀丐廿卅丕亘丞鬲孬噩丨禺丿匕乇夭爻卮氐囟胤馗毓睾鼗丶亟鼐乜乩亓芈孛啬嘏仄厍厝厣厥厮靥赝匚叵匦匮匾赜卦卣刂刈刎刭刳刿剀剌剞剡剜蒯剽劂劁劐劓冂罔亻仃仉仂仨仡仫仞伛仳伢佤仵伥伧伉伫佞佧攸佚佝"],["d940","貮",62],["d980","賭",32,"佟佗伲伽佶佴侑侉侃侏佾佻侪佼侬侔俦俨俪俅俚俣俜俑俟俸倩偌俳倬倏倮倭俾倜倌倥倨偾偃偕偈偎偬偻傥傧傩傺僖儆僭僬僦僮儇儋仝氽佘佥俎龠汆籴兮巽黉馘冁夔勹匍訇匐凫夙兕亠兖亳衮袤亵脔裒禀嬴蠃羸冫冱冽冼"],["da40","贎",14,"贠赑赒赗赟赥赨赩赪赬赮赯赱赲赸",8,"趂趃趆趇趈趉趌",4,"趒趓趕",9,"趠趡"],["da80","趢趤",12,"趲趶趷趹趻趽跀跁跂跅跇跈跉跊跍跐跒跓跔凇冖冢冥讠讦讧讪讴讵讷诂诃诋诏诎诒诓诔诖诘诙诜诟诠诤诨诩诮诰诳诶诹诼诿谀谂谄谇谌谏谑谒谔谕谖谙谛谘谝谟谠谡谥谧谪谫谮谯谲谳谵谶卩卺阝阢阡阱阪阽阼陂陉陔陟陧陬陲陴隈隍隗隰邗邛邝邙邬邡邴邳邶邺"],["db40","跕跘跙跜跠跡跢跥跦跧跩跭跮跰跱跲跴跶跼跾",6,"踆踇踈踋踍踎踐踑踒踓踕",7,"踠踡踤",4,"踫踭踰踲踳踴踶踷踸踻踼踾"],["db80","踿蹃蹅蹆蹌",4,"蹓",5,"蹚",11,"蹧蹨蹪蹫蹮蹱邸邰郏郅邾郐郄郇郓郦郢郜郗郛郫郯郾鄄鄢鄞鄣鄱鄯鄹酃酆刍奂劢劬劭劾哿勐勖勰叟燮矍廴凵凼鬯厶弁畚巯坌垩垡塾墼壅壑圩圬圪圳圹圮圯坜圻坂坩垅坫垆坼坻坨坭坶坳垭垤垌垲埏垧垴垓垠埕埘埚埙埒垸埴埯埸埤埝"],["dc40","蹳蹵蹷",4,"蹽蹾躀躂躃躄躆躈",6,"躑躒躓躕",6,"躝躟",11,"躭躮躰躱躳",6,"躻",7],["dc80","軃",10,"軏",21,"堋堍埽埭堀堞堙塄堠塥塬墁墉墚墀馨鼙懿艹艽艿芏芊芨芄芎芑芗芙芫芸芾芰苈苊苣芘芷芮苋苌苁芩芴芡芪芟苄苎芤苡茉苷苤茏茇苜苴苒苘茌苻苓茑茚茆茔茕苠苕茜荑荛荜茈莒茼茴茱莛荞茯荏荇荃荟荀茗荠茭茺茳荦荥"],["dd40","軥",62],["dd80","輤",32,"荨茛荩荬荪荭荮莰荸莳莴莠莪莓莜莅荼莶莩荽莸荻莘莞莨莺莼菁萁菥菘堇萘萋菝菽菖萜萸萑萆菔菟萏萃菸菹菪菅菀萦菰菡葜葑葚葙葳蒇蒈葺蒉葸萼葆葩葶蒌蒎萱葭蓁蓍蓐蓦蒽蓓蓊蒿蒺蓠蒡蒹蒴蒗蓥蓣蔌甍蔸蓰蔹蔟蔺"],["de40","轅",32,"轪辀辌辒辝辠辡辢辤辥辦辧辪辬辭辮辯農辳辴辵辷辸辺辻込辿迀迃迆"],["de80","迉",4,"迏迒迖迗迚迠迡迣迧迬迯迱迲迴迵迶迺迻迼迾迿逇逈逌逎逓逕逘蕖蔻蓿蓼蕙蕈蕨蕤蕞蕺瞢蕃蕲蕻薤薨薇薏蕹薮薜薅薹薷薰藓藁藜藿蘧蘅蘩蘖蘼廾弈夼奁耷奕奚奘匏尢尥尬尴扌扪抟抻拊拚拗拮挢拶挹捋捃掭揶捱捺掎掴捭掬掊捩掮掼揲揸揠揿揄揞揎摒揆掾摅摁搋搛搠搌搦搡摞撄摭撖"],["df40","這逜連逤逥逧",5,"逰",4,"逷逹逺逽逿遀遃遅遆遈",4,"過達違遖遙遚遜",5,"遤遦遧適遪遫遬遯",4,"遶",6,"遾邁"],["df80","還邅邆邇邉邊邌",4,"邒邔邖邘邚邜邞邟邠邤邥邧邨邩邫邭邲邷邼邽邿郀摺撷撸撙撺擀擐擗擤擢攉攥攮弋忒甙弑卟叱叽叩叨叻吒吖吆呋呒呓呔呖呃吡呗呙吣吲咂咔呷呱呤咚咛咄呶呦咝哐咭哂咴哒咧咦哓哔呲咣哕咻咿哌哙哚哜咩咪咤哝哏哞唛哧唠哽唔哳唢唣唏唑唧唪啧喏喵啉啭啁啕唿啐唼"],["e040","郂郃郆郈郉郋郌郍郒郔郕郖郘郙郚郞郟郠郣郤郥郩郪郬郮郰郱郲郳郵郶郷郹郺郻郼郿鄀鄁鄃鄅",19,"鄚鄛鄜"],["e080","鄝鄟鄠鄡鄤",10,"鄰鄲",6,"鄺",8,"酄唷啖啵啶啷唳唰啜喋嗒喃喱喹喈喁喟啾嗖喑啻嗟喽喾喔喙嗪嗷嗉嘟嗑嗫嗬嗔嗦嗝嗄嗯嗥嗲嗳嗌嗍嗨嗵嗤辔嘞嘈嘌嘁嘤嘣嗾嘀嘧嘭噘嘹噗嘬噍噢噙噜噌噔嚆噤噱噫噻噼嚅嚓嚯囔囗囝囡囵囫囹囿圄圊圉圜帏帙帔帑帱帻帼"],["e140","酅酇酈酑酓酔酕酖酘酙酛酜酟酠酦酧酨酫酭酳酺酻酼醀",4,"醆醈醊醎醏醓",6,"醜",5,"醤",5,"醫醬醰醱醲醳醶醷醸醹醻"],["e180","醼",10,"釈釋釐釒",9,"針",8,"帷幄幔幛幞幡岌屺岍岐岖岈岘岙岑岚岜岵岢岽岬岫岱岣峁岷峄峒峤峋峥崂崃崧崦崮崤崞崆崛嵘崾崴崽嵬嵛嵯嵝嵫嵋嵊嵩嵴嶂嶙嶝豳嶷巅彳彷徂徇徉後徕徙徜徨徭徵徼衢彡犭犰犴犷犸狃狁狎狍狒狨狯狩狲狴狷猁狳猃狺"],["e240","釦",62],["e280","鈥",32,"狻猗猓猡猊猞猝猕猢猹猥猬猸猱獐獍獗獠獬獯獾舛夥飧夤夂饣饧",5,"饴饷饽馀馄馇馊馍馐馑馓馔馕庀庑庋庖庥庠庹庵庾庳赓廒廑廛廨廪膺忄忉忖忏怃忮怄忡忤忾怅怆忪忭忸怙怵怦怛怏怍怩怫怊怿怡恸恹恻恺恂"],["e340","鉆",45,"鉵",16],["e380","銆",7,"銏",24,"恪恽悖悚悭悝悃悒悌悛惬悻悱惝惘惆惚悴愠愦愕愣惴愀愎愫慊慵憬憔憧憷懔懵忝隳闩闫闱闳闵闶闼闾阃阄阆阈阊阋阌阍阏阒阕阖阗阙阚丬爿戕氵汔汜汊沣沅沐沔沌汨汩汴汶沆沩泐泔沭泷泸泱泗沲泠泖泺泫泮沱泓泯泾"],["e440","銨",5,"銯",24,"鋉",31],["e480","鋩",32,"洹洧洌浃浈洇洄洙洎洫浍洮洵洚浏浒浔洳涑浯涞涠浞涓涔浜浠浼浣渚淇淅淞渎涿淠渑淦淝淙渖涫渌涮渫湮湎湫溲湟溆湓湔渲渥湄滟溱溘滠漭滢溥溧溽溻溷滗溴滏溏滂溟潢潆潇漤漕滹漯漶潋潴漪漉漩澉澍澌潸潲潼潺濑"],["e540","錊",51,"錿",10],["e580","鍊",31,"鍫濉澧澹澶濂濡濮濞濠濯瀚瀣瀛瀹瀵灏灞宀宄宕宓宥宸甯骞搴寤寮褰寰蹇謇辶迓迕迥迮迤迩迦迳迨逅逄逋逦逑逍逖逡逵逶逭逯遄遑遒遐遨遘遢遛暹遴遽邂邈邃邋彐彗彖彘尻咫屐屙孱屣屦羼弪弩弭艴弼鬻屮妁妃妍妩妪妣"],["e640","鍬",34,"鎐",27],["e680","鎬",29,"鏋鏌鏍妗姊妫妞妤姒妲妯姗妾娅娆姝娈姣姘姹娌娉娲娴娑娣娓婀婧婊婕娼婢婵胬媪媛婷婺媾嫫媲嫒嫔媸嫠嫣嫱嫖嫦嫘嫜嬉嬗嬖嬲嬷孀尕尜孚孥孳孑孓孢驵驷驸驺驿驽骀骁骅骈骊骐骒骓骖骘骛骜骝骟骠骢骣骥骧纟纡纣纥纨纩"],["e740","鏎",7,"鏗",54],["e780","鐎",32,"纭纰纾绀绁绂绉绋绌绐绔绗绛绠绡绨绫绮绯绱绲缍绶绺绻绾缁缂缃缇缈缋缌缏缑缒缗缙缜缛缟缡",6,"缪缫缬缭缯",4,"缵幺畿巛甾邕玎玑玮玢玟珏珂珑玷玳珀珉珈珥珙顼琊珩珧珞玺珲琏琪瑛琦琥琨琰琮琬"],["e840","鐯",14,"鐿",43,"鑬鑭鑮鑯"],["e880","鑰",20,"钑钖钘铇铏铓铔铚铦铻锜锠琛琚瑁瑜瑗瑕瑙瑷瑭瑾璜璎璀璁璇璋璞璨璩璐璧瓒璺韪韫韬杌杓杞杈杩枥枇杪杳枘枧杵枨枞枭枋杷杼柰栉柘栊柩枰栌柙枵柚枳柝栀柃枸柢栎柁柽栲栳桠桡桎桢桄桤梃栝桕桦桁桧桀栾桊桉栩梵梏桴桷梓桫棂楮棼椟椠棹"],["e940","锧锳锽镃镈镋镕镚镠镮镴镵長",7,"門",42],["e980","閫",32,"椤棰椋椁楗棣椐楱椹楠楂楝榄楫榀榘楸椴槌榇榈槎榉楦楣楹榛榧榻榫榭槔榱槁槊槟榕槠榍槿樯槭樗樘橥槲橄樾檠橐橛樵檎橹樽樨橘橼檑檐檩檗檫猷獒殁殂殇殄殒殓殍殚殛殡殪轫轭轱轲轳轵轶轸轷轹轺轼轾辁辂辄辇辋"],["ea40","闌",27,"闬闿阇阓阘阛阞阠阣",6,"阫阬阭阯阰阷阸阹阺阾陁陃陊陎陏陑陒陓陖陗"],["ea80","陘陙陚陜陝陞陠陣陥陦陫陭",4,"陳陸",12,"隇隉隊辍辎辏辘辚軎戋戗戛戟戢戡戥戤戬臧瓯瓴瓿甏甑甓攴旮旯旰昊昙杲昃昕昀炅曷昝昴昱昶昵耆晟晔晁晏晖晡晗晷暄暌暧暝暾曛曜曦曩贲贳贶贻贽赀赅赆赈赉赇赍赕赙觇觊觋觌觎觏觐觑牮犟牝牦牯牾牿犄犋犍犏犒挈挲掰"],["eb40","隌階隑隒隓隕隖隚際隝",9,"隨",7,"隱隲隴隵隷隸隺隻隿雂雃雈雊雋雐雑雓雔雖",9,"雡",6,"雫"],["eb80","雬雭雮雰雱雲雴雵雸雺電雼雽雿霂霃霅霊霋霌霐霑霒霔霕霗",4,"霝霟霠搿擘耄毪毳毽毵毹氅氇氆氍氕氘氙氚氡氩氤氪氲攵敕敫牍牒牖爰虢刖肟肜肓肼朊肽肱肫肭肴肷胧胨胩胪胛胂胄胙胍胗朐胝胫胱胴胭脍脎胲胼朕脒豚脶脞脬脘脲腈腌腓腴腙腚腱腠腩腼腽腭腧塍媵膈膂膑滕膣膪臌朦臊膻"],["ec40","霡",8,"霫霬霮霯霱霳",4,"霺霻霼霽霿",18,"靔靕靗靘靚靜靝靟靣靤靦靧靨靪",7],["ec80","靲靵靷",4,"靽",7,"鞆",4,"鞌鞎鞏鞐鞓鞕鞖鞗鞙",4,"臁膦欤欷欹歃歆歙飑飒飓飕飙飚殳彀毂觳斐齑斓於旆旄旃旌旎旒旖炀炜炖炝炻烀炷炫炱烨烊焐焓焖焯焱煳煜煨煅煲煊煸煺熘熳熵熨熠燠燔燧燹爝爨灬焘煦熹戾戽扃扈扉礻祀祆祉祛祜祓祚祢祗祠祯祧祺禅禊禚禧禳忑忐"],["ed40","鞞鞟鞡鞢鞤",6,"鞬鞮鞰鞱鞳鞵",46],["ed80","韤韥韨韮",4,"韴韷",23,"怼恝恚恧恁恙恣悫愆愍慝憩憝懋懑戆肀聿沓泶淼矶矸砀砉砗砘砑斫砭砜砝砹砺砻砟砼砥砬砣砩硎硭硖硗砦硐硇硌硪碛碓碚碇碜碡碣碲碹碥磔磙磉磬磲礅磴礓礤礞礴龛黹黻黼盱眄眍盹眇眈眚眢眙眭眦眵眸睐睑睇睃睚睨"],["ee40","頏",62],["ee80","顎",32,"睢睥睿瞍睽瞀瞌瞑瞟瞠瞰瞵瞽町畀畎畋畈畛畲畹疃罘罡罟詈罨罴罱罹羁罾盍盥蠲钅钆钇钋钊钌钍钏钐钔钗钕钚钛钜钣钤钫钪钭钬钯钰钲钴钶",4,"钼钽钿铄铈",6,"铐铑铒铕铖铗铙铘铛铞铟铠铢铤铥铧铨铪"],["ef40","顯",5,"颋颎颒颕颙颣風",37,"飏飐飔飖飗飛飜飝飠",4],["ef80","飥飦飩",30,"铩铫铮铯铳铴铵铷铹铼铽铿锃锂锆锇锉锊锍锎锏锒",4,"锘锛锝锞锟锢锪锫锩锬锱锲锴锶锷锸锼锾锿镂锵镄镅镆镉镌镎镏镒镓镔镖镗镘镙镛镞镟镝镡镢镤",8,"镯镱镲镳锺矧矬雉秕秭秣秫稆嵇稃稂稞稔"],["f040","餈",4,"餎餏餑",28,"餯",26],["f080","饊",9,"饖",12,"饤饦饳饸饹饻饾馂馃馉稹稷穑黏馥穰皈皎皓皙皤瓞瓠甬鸠鸢鸨",4,"鸲鸱鸶鸸鸷鸹鸺鸾鹁鹂鹄鹆鹇鹈鹉鹋鹌鹎鹑鹕鹗鹚鹛鹜鹞鹣鹦",6,"鹱鹭鹳疒疔疖疠疝疬疣疳疴疸痄疱疰痃痂痖痍痣痨痦痤痫痧瘃痱痼痿瘐瘀瘅瘌瘗瘊瘥瘘瘕瘙"],["f140","馌馎馚",10,"馦馧馩",47],["f180","駙",32,"瘛瘼瘢瘠癀瘭瘰瘿瘵癃瘾瘳癍癞癔癜癖癫癯翊竦穸穹窀窆窈窕窦窠窬窨窭窳衤衩衲衽衿袂袢裆袷袼裉裢裎裣裥裱褚裼裨裾裰褡褙褓褛褊褴褫褶襁襦襻疋胥皲皴矜耒耔耖耜耠耢耥耦耧耩耨耱耋耵聃聆聍聒聩聱覃顸颀颃"],["f240","駺",62],["f280","騹",32,"颉颌颍颏颔颚颛颞颟颡颢颥颦虍虔虬虮虿虺虼虻蚨蚍蚋蚬蚝蚧蚣蚪蚓蚩蚶蛄蚵蛎蚰蚺蚱蚯蛉蛏蚴蛩蛱蛲蛭蛳蛐蜓蛞蛴蛟蛘蛑蜃蜇蛸蜈蜊蜍蜉蜣蜻蜞蜥蜮蜚蜾蝈蜴蜱蜩蜷蜿螂蜢蝽蝾蝻蝠蝰蝌蝮螋蝓蝣蝼蝤蝙蝥螓螯螨蟒"],["f340","驚",17,"驲骃骉骍骎骔骕骙骦骩",6,"骲骳骴骵骹骻骽骾骿髃髄髆",4,"髍髎髏髐髒體髕髖髗髙髚髛髜"],["f380","髝髞髠髢髣髤髥髧髨髩髪髬髮髰",8,"髺髼",6,"鬄鬅鬆蟆螈螅螭螗螃螫蟥螬螵螳蟋蟓螽蟑蟀蟊蟛蟪蟠蟮蠖蠓蟾蠊蠛蠡蠹蠼缶罂罄罅舐竺竽笈笃笄笕笊笫笏筇笸笪笙笮笱笠笥笤笳笾笞筘筚筅筵筌筝筠筮筻筢筲筱箐箦箧箸箬箝箨箅箪箜箢箫箴篑篁篌篝篚篥篦篪簌篾篼簏簖簋"],["f440","鬇鬉",5,"鬐鬑鬒鬔",10,"鬠鬡鬢鬤",10,"鬰鬱鬳",7,"鬽鬾鬿魀魆魊魋魌魎魐魒魓魕",5],["f480","魛",32,"簟簪簦簸籁籀臾舁舂舄臬衄舡舢舣舭舯舨舫舸舻舳舴舾艄艉艋艏艚艟艨衾袅袈裘裟襞羝羟羧羯羰羲籼敉粑粝粜粞粢粲粼粽糁糇糌糍糈糅糗糨艮暨羿翎翕翥翡翦翩翮翳糸絷綦綮繇纛麸麴赳趄趔趑趱赧赭豇豉酊酐酎酏酤"],["f540","魼",62],["f580","鮻",32,"酢酡酰酩酯酽酾酲酴酹醌醅醐醍醑醢醣醪醭醮醯醵醴醺豕鹾趸跫踅蹙蹩趵趿趼趺跄跖跗跚跞跎跏跛跆跬跷跸跣跹跻跤踉跽踔踝踟踬踮踣踯踺蹀踹踵踽踱蹉蹁蹂蹑蹒蹊蹰蹶蹼蹯蹴躅躏躔躐躜躞豸貂貊貅貘貔斛觖觞觚觜"],["f640","鯜",62],["f680","鰛",32,"觥觫觯訾謦靓雩雳雯霆霁霈霏霎霪霭霰霾龀龃龅",5,"龌黾鼋鼍隹隼隽雎雒瞿雠銎銮鋈錾鍪鏊鎏鐾鑫鱿鲂鲅鲆鲇鲈稣鲋鲎鲐鲑鲒鲔鲕鲚鲛鲞",5,"鲥",4,"鲫鲭鲮鲰",7,"鲺鲻鲼鲽鳄鳅鳆鳇鳊鳋"],["f740","鰼",62],["f780","鱻鱽鱾鲀鲃鲄鲉鲊鲌鲏鲓鲖鲗鲘鲙鲝鲪鲬鲯鲹鲾",4,"鳈鳉鳑鳒鳚鳛鳠鳡鳌",4,"鳓鳔鳕鳗鳘鳙鳜鳝鳟鳢靼鞅鞑鞒鞔鞯鞫鞣鞲鞴骱骰骷鹘骶骺骼髁髀髅髂髋髌髑魅魃魇魉魈魍魑飨餍餮饕饔髟髡髦髯髫髻髭髹鬈鬏鬓鬟鬣麽麾縻麂麇麈麋麒鏖麝麟黛黜黝黠黟黢黩黧黥黪黯鼢鼬鼯鼹鼷鼽鼾齄"],["f840","鳣",62],["f880","鴢",32],["f940","鵃",62],["f980","鶂",32],["fa40","鶣",62],["fa80","鷢",32],["fb40","鸃",27,"鸤鸧鸮鸰鸴鸻鸼鹀鹍鹐鹒鹓鹔鹖鹙鹝鹟鹠鹡鹢鹥鹮鹯鹲鹴",9,"麀"],["fb80","麁麃麄麅麆麉麊麌",5,"麔",8,"麞麠",5,"麧麨麩麪"],["fc40","麫",8,"麵麶麷麹麺麼麿",4,"黅黆黇黈黊黋黌黐黒黓黕黖黗黙黚點黡黣黤黦黨黫黬黭黮黰",8,"黺黽黿",6],["fc80","鼆",4,"鼌鼏鼑鼒鼔鼕鼖鼘鼚",5,"鼡鼣",8,"鼭鼮鼰鼱"],["fd40","鼲",4,"鼸鼺鼼鼿",4,"齅",10,"齒",38],["fd80","齹",5,"龁龂龍",11,"龜龝龞龡",4,"郎凉秊裏隣"],["fe40","兀嗀﨎﨏﨑﨓﨔礼﨟蘒﨡﨣﨤﨧﨨﨩"]]')},21166:function(A){"use strict";A.exports=JSON.parse('[["0","\\u0000",127],["8141","갂갃갅갆갋",4,"갘갞갟갡갢갣갥",6,"갮갲갳갴"],["8161","갵갶갷갺갻갽갾갿걁",9,"걌걎",5,"걕"],["8181","걖걗걙걚걛걝",18,"걲걳걵걶걹걻",4,"겂겇겈겍겎겏겑겒겓겕",6,"겞겢",5,"겫겭겮겱",6,"겺겾겿곀곂곃곅곆곇곉곊곋곍",7,"곖곘",7,"곢곣곥곦곩곫곭곮곲곴곷",4,"곾곿괁괂괃괅괇",4,"괎괐괒괓"],["8241","괔괕괖괗괙괚괛괝괞괟괡",7,"괪괫괮",5],["8261","괶괷괹괺괻괽",6,"굆굈굊",5,"굑굒굓굕굖굗"],["8281","굙",7,"굢굤",7,"굮굯굱굲굷굸굹굺굾궀궃",4,"궊궋궍궎궏궑",10,"궞",5,"궥",17,"궸",7,"귂귃귅귆귇귉",6,"귒귔",7,"귝귞귟귡귢귣귥",18],["8341","귺귻귽귾긂",5,"긊긌긎",5,"긕",7],["8361","긝",18,"긲긳긵긶긹긻긼"],["8381","긽긾긿깂깄깇깈깉깋깏깑깒깓깕깗",4,"깞깢깣깤깦깧깪깫깭깮깯깱",6,"깺깾",5,"꺆",5,"꺍",46,"꺿껁껂껃껅",6,"껎껒",5,"껚껛껝",8],["8441","껦껧껩껪껬껮",5,"껵껶껷껹껺껻껽",8],["8461","꼆꼉꼊꼋꼌꼎꼏꼑",18],["8481","꼤",7,"꼮꼯꼱꼳꼵",6,"꼾꽀꽄꽅꽆꽇꽊",5,"꽑",10,"꽞",5,"꽦",18,"꽺",5,"꾁꾂꾃꾅꾆꾇꾉",6,"꾒꾓꾔꾖",5,"꾝",26,"꾺꾻꾽꾾"],["8541","꾿꿁",5,"꿊꿌꿏",4,"꿕",6,"꿝",4],["8561","꿢",5,"꿪",5,"꿲꿳꿵꿶꿷꿹",6,"뀂뀃"],["8581","뀅",6,"뀍뀎뀏뀑뀒뀓뀕",6,"뀞",9,"뀩",26,"끆끇끉끋끍끏끐끑끒끖끘끚끛끜끞",29,"끾끿낁낂낃낅",6,"낎낐낒",5,"낛낝낞낣낤"],["8641","낥낦낧낪낰낲낶낷낹낺낻낽",6,"냆냊",5,"냒"],["8661","냓냕냖냗냙",6,"냡냢냣냤냦",10],["8681","냱",22,"넊넍넎넏넑넔넕넖넗넚넞",4,"넦넧넩넪넫넭",6,"넶넺",5,"녂녃녅녆녇녉",6,"녒녓녖녗녙녚녛녝녞녟녡",22,"녺녻녽녾녿놁놃",4,"놊놌놎놏놐놑놕놖놗놙놚놛놝"],["8741","놞",9,"놩",15],["8761","놹",18,"뇍뇎뇏뇑뇒뇓뇕"],["8781","뇖",5,"뇞뇠",7,"뇪뇫뇭뇮뇯뇱",7,"뇺뇼뇾",5,"눆눇눉눊눍",6,"눖눘눚",5,"눡",18,"눵",6,"눽",26,"뉙뉚뉛뉝뉞뉟뉡",6,"뉪",4],["8841","뉯",4,"뉶",5,"뉽",6,"늆늇늈늊",4],["8861","늏늒늓늕늖늗늛",4,"늢늤늧늨늩늫늭늮늯늱늲늳늵늶늷"],["8881","늸",15,"닊닋닍닎닏닑닓",4,"닚닜닞닟닠닡닣닧닩닪닰닱닲닶닼닽닾댂댃댅댆댇댉",6,"댒댖",5,"댝",54,"덗덙덚덝덠덡덢덣"],["8941","덦덨덪덬덭덯덲덳덵덶덷덹",6,"뎂뎆",5,"뎍"],["8961","뎎뎏뎑뎒뎓뎕",10,"뎢",5,"뎩뎪뎫뎭"],["8981","뎮",21,"돆돇돉돊돍돏돑돒돓돖돘돚돜돞돟돡돢돣돥돦돧돩",18,"돽",18,"됑",6,"됙됚됛됝됞됟됡",6,"됪됬",7,"됵",15],["8a41","둅",10,"둒둓둕둖둗둙",6,"둢둤둦"],["8a61","둧",4,"둭",18,"뒁뒂"],["8a81","뒃",4,"뒉",19,"뒞",5,"뒥뒦뒧뒩뒪뒫뒭",7,"뒶뒸뒺",5,"듁듂듃듅듆듇듉",6,"듑듒듓듔듖",5,"듞듟듡듢듥듧",4,"듮듰듲",5,"듹",26,"딖딗딙딚딝"],["8b41","딞",5,"딦딫",4,"딲딳딵딶딷딹",6,"땂땆"],["8b61","땇땈땉땊땎땏땑땒땓땕",6,"땞땢",8],["8b81","땫",52,"떢떣떥떦떧떩떬떭떮떯떲떶",4,"떾떿뗁뗂뗃뗅",6,"뗎뗒",5,"뗙",18,"뗭",18],["8c41","똀",15,"똒똓똕똖똗똙",4],["8c61","똞",6,"똦",5,"똭",6,"똵",5],["8c81","똻",12,"뙉",26,"뙥뙦뙧뙩",50,"뚞뚟뚡뚢뚣뚥",5,"뚭뚮뚯뚰뚲",16],["8d41","뛃",16,"뛕",8],["8d61","뛞",17,"뛱뛲뛳뛵뛶뛷뛹뛺"],["8d81","뛻",4,"뜂뜃뜄뜆",33,"뜪뜫뜭뜮뜱",6,"뜺뜼",7,"띅띆띇띉띊띋띍",6,"띖",9,"띡띢띣띥띦띧띩",6,"띲띴띶",5,"띾띿랁랂랃랅",6,"랎랓랔랕랚랛랝랞"],["8e41","랟랡",6,"랪랮",5,"랶랷랹",8],["8e61","럂",4,"럈럊",19],["8e81","럞",13,"럮럯럱럲럳럵",6,"럾렂",4,"렊렋렍렎렏렑",6,"렚렜렞",5,"렦렧렩렪렫렭",6,"렶렺",5,"롁롂롃롅",11,"롒롔",7,"롞롟롡롢롣롥",6,"롮롰롲",5,"롹롺롻롽",7],["8f41","뢅",7,"뢎",17],["8f61","뢠",7,"뢩",6,"뢱뢲뢳뢵뢶뢷뢹",4],["8f81","뢾뢿룂룄룆",5,"룍룎룏룑룒룓룕",7,"룞룠룢",5,"룪룫룭룮룯룱",6,"룺룼룾",5,"뤅",18,"뤙",6,"뤡",26,"뤾뤿륁륂륃륅",6,"륍륎륐륒",5],["9041","륚륛륝륞륟륡",6,"륪륬륮",5,"륶륷륹륺륻륽"],["9061","륾",5,"릆릈릋릌릏",15],["9081","릟",12,"릮릯릱릲릳릵",6,"릾맀맂",5,"맊맋맍맓",4,"맚맜맟맠맢맦맧맩맪맫맭",6,"맶맻",4,"먂",5,"먉",11,"먖",33,"먺먻먽먾먿멁멃멄멅멆"],["9141","멇멊멌멏멐멑멒멖멗멙멚멛멝",6,"멦멪",5],["9161","멲멳멵멶멷멹",9,"몆몈몉몊몋몍",5],["9181","몓",20,"몪몭몮몯몱몳",4,"몺몼몾",5,"뫅뫆뫇뫉",14,"뫚",33,"뫽뫾뫿묁묂묃묅",7,"묎묐묒",5,"묙묚묛묝묞묟묡",6],["9241","묨묪묬",7,"묷묹묺묿",4,"뭆뭈뭊뭋뭌뭎뭑뭒"],["9261","뭓뭕뭖뭗뭙",7,"뭢뭤",7,"뭭",4],["9281","뭲",21,"뮉뮊뮋뮍뮎뮏뮑",18,"뮥뮦뮧뮩뮪뮫뮭",6,"뮵뮶뮸",7,"믁믂믃믅믆믇믉",6,"믑믒믔",35,"믺믻믽믾밁"],["9341","밃",4,"밊밎밐밒밓밙밚밠밡밢밣밦밨밪밫밬밮밯밲밳밵"],["9361","밶밷밹",6,"뱂뱆뱇뱈뱊뱋뱎뱏뱑",8],["9381","뱚뱛뱜뱞",37,"벆벇벉벊벍벏",4,"벖벘벛",4,"벢벣벥벦벩",6,"벲벶",5,"벾벿볁볂볃볅",7,"볎볒볓볔볖볗볙볚볛볝",22,"볷볹볺볻볽"],["9441","볾",5,"봆봈봊",5,"봑봒봓봕",8],["9461","봞",5,"봥",6,"봭",12],["9481","봺",5,"뵁",6,"뵊뵋뵍뵎뵏뵑",6,"뵚",9,"뵥뵦뵧뵩",22,"붂붃붅붆붋",4,"붒붔붖붗붘붛붝",6,"붥",10,"붱",6,"붹",24],["9541","뷒뷓뷖뷗뷙뷚뷛뷝",11,"뷪",5,"뷱"],["9561","뷲뷳뷵뷶뷷뷹",6,"븁븂븄븆",5,"븎븏븑븒븓"],["9581","븕",6,"븞븠",35,"빆빇빉빊빋빍빏",4,"빖빘빜빝빞빟빢빣빥빦빧빩빫",4,"빲빶",4,"빾빿뺁뺂뺃뺅",6,"뺎뺒",5,"뺚",13,"뺩",14],["9641","뺸",23,"뻒뻓"],["9661","뻕뻖뻙",6,"뻡뻢뻦",5,"뻭",8],["9681","뻶",10,"뼂",5,"뼊",13,"뼚뼞",33,"뽂뽃뽅뽆뽇뽉",6,"뽒뽓뽔뽖",44],["9741","뾃",16,"뾕",8],["9761","뾞",17,"뾱",7],["9781","뾹",11,"뿆",5,"뿎뿏뿑뿒뿓뿕",6,"뿝뿞뿠뿢",89,"쀽쀾쀿"],["9841","쁀",16,"쁒",5,"쁙쁚쁛"],["9861","쁝쁞쁟쁡",6,"쁪",15],["9881","쁺",21,"삒삓삕삖삗삙",6,"삢삤삦",5,"삮삱삲삷",4,"삾샂샃샄샆샇샊샋샍샎샏샑",6,"샚샞",5,"샦샧샩샪샫샭",6,"샶샸샺",5,"섁섂섃섅섆섇섉",6,"섑섒섓섔섖",5,"섡섢섥섨섩섪섫섮"],["9941","섲섳섴섵섷섺섻섽섾섿셁",6,"셊셎",5,"셖셗"],["9961","셙셚셛셝",6,"셦셪",5,"셱셲셳셵셶셷셹셺셻"],["9981","셼",8,"솆",5,"솏솑솒솓솕솗",4,"솞솠솢솣솤솦솧솪솫솭솮솯솱",11,"솾",5,"쇅쇆쇇쇉쇊쇋쇍",6,"쇕쇖쇙",6,"쇡쇢쇣쇥쇦쇧쇩",6,"쇲쇴",7,"쇾쇿숁숂숃숅",6,"숎숐숒",5,"숚숛숝숞숡숢숣"],["9a41","숤숥숦숧숪숬숮숰숳숵",16],["9a61","쉆쉇쉉",6,"쉒쉓쉕쉖쉗쉙",6,"쉡쉢쉣쉤쉦"],["9a81","쉧",4,"쉮쉯쉱쉲쉳쉵",6,"쉾슀슂",5,"슊",5,"슑",6,"슙슚슜슞",5,"슦슧슩슪슫슮",5,"슶슸슺",33,"싞싟싡싢싥",5,"싮싰싲싳싴싵싷싺싽싾싿쌁",6,"쌊쌋쌎쌏"],["9b41","쌐쌑쌒쌖쌗쌙쌚쌛쌝",6,"쌦쌧쌪",8],["9b61","쌳",17,"썆",7],["9b81","썎",25,"썪썫썭썮썯썱썳",4,"썺썻썾",5,"쎅쎆쎇쎉쎊쎋쎍",50,"쏁",22,"쏚"],["9c41","쏛쏝쏞쏡쏣",4,"쏪쏫쏬쏮",5,"쏶쏷쏹",5],["9c61","쏿",8,"쐉",6,"쐑",9],["9c81","쐛",8,"쐥",6,"쐭쐮쐯쐱쐲쐳쐵",6,"쐾",9,"쑉",26,"쑦쑧쑩쑪쑫쑭",6,"쑶쑷쑸쑺",5,"쒁",18,"쒕",6,"쒝",12],["9d41","쒪",13,"쒹쒺쒻쒽",8],["9d61","쓆",25],["9d81","쓠",8,"쓪",5,"쓲쓳쓵쓶쓷쓹쓻쓼쓽쓾씂",9,"씍씎씏씑씒씓씕",6,"씝",10,"씪씫씭씮씯씱",6,"씺씼씾",5,"앆앇앋앏앐앑앒앖앚앛앜앟앢앣앥앦앧앩",6,"앲앶",5,"앾앿얁얂얃얅얆얈얉얊얋얎얐얒얓얔"],["9e41","얖얙얚얛얝얞얟얡",7,"얪",9,"얶"],["9e61","얷얺얿",4,"엋엍엏엒엓엕엖엗엙",6,"엢엤엦엧"],["9e81","엨엩엪엫엯엱엲엳엵엸엹엺엻옂옃옄옉옊옋옍옎옏옑",6,"옚옝",6,"옦옧옩옪옫옯옱옲옶옸옺옼옽옾옿왂왃왅왆왇왉",6,"왒왖",5,"왞왟왡",10,"왭왮왰왲",5,"왺왻왽왾왿욁",6,"욊욌욎",5,"욖욗욙욚욛욝",6,"욦"],["9f41","욨욪",5,"욲욳욵욶욷욻",4,"웂웄웆",5,"웎"],["9f61","웏웑웒웓웕",6,"웞웟웢",5,"웪웫웭웮웯웱웲"],["9f81","웳",4,"웺웻웼웾",5,"윆윇윉윊윋윍",6,"윖윘윚",5,"윢윣윥윦윧윩",6,"윲윴윶윸윹윺윻윾윿읁읂읃읅",4,"읋읎읐읙읚읛읝읞읟읡",6,"읩읪읬",7,"읶읷읹읺읻읿잀잁잂잆잋잌잍잏잒잓잕잙잛",4,"잢잧",4,"잮잯잱잲잳잵잶잷"],["a041","잸잹잺잻잾쟂",5,"쟊쟋쟍쟏쟑",6,"쟙쟚쟛쟜"],["a061","쟞",5,"쟥쟦쟧쟩쟪쟫쟭",13],["a081","쟻",4,"젂젃젅젆젇젉젋",4,"젒젔젗",4,"젞젟젡젢젣젥",6,"젮젰젲",5,"젹젺젻젽젾젿졁",6,"졊졋졎",5,"졕",26,"졲졳졵졶졷졹졻",4,"좂좄좈좉좊좎",5,"좕",7,"좞좠좢좣좤"],["a141","좥좦좧좩",18,"좾좿죀죁"],["a161","죂죃죅죆죇죉죊죋죍",6,"죖죘죚",5,"죢죣죥"],["a181","죦",14,"죶",5,"죾죿줁줂줃줇",4,"줎 、。·‥…¨〃­―∥\∼‘’“”〔〕〈",9,"±×÷≠≤≥∞∴°′″℃Å¢£¥♂♀∠⊥⌒∂∇≡≒§※☆★○●◎◇◆□■△▲▽▼→←↑↓↔〓≪≫√∽∝∵∫∬∈∋⊆⊇⊂⊃∪∩∧∨¬"],["a241","줐줒",5,"줙",18],["a261","줭",6,"줵",18],["a281","쥈",7,"쥒쥓쥕쥖쥗쥙",6,"쥢쥤",7,"쥭쥮쥯⇒⇔∀∃´~ˇ˘˝˚˙¸˛¡¿ː∮∑∏¤℉‰◁◀▷▶♤♠♡♥♧♣⊙◈▣◐◑▒▤▥▨▧▦▩♨☏☎☜☞¶†‡↕↗↙↖↘♭♩♪♬㉿㈜№㏇™㏂㏘℡€®"],["a341","쥱쥲쥳쥵",6,"쥽",10,"즊즋즍즎즏"],["a361","즑",6,"즚즜즞",16],["a381","즯",16,"짂짃짅짆짉짋",4,"짒짔짗짘짛!",58,"₩]",32," ̄"],["a441","짞짟짡짣짥짦짨짩짪짫짮짲",5,"짺짻짽짾짿쨁쨂쨃쨄"],["a461","쨅쨆쨇쨊쨎",5,"쨕쨖쨗쨙",12],["a481","쨦쨧쨨쨪",28,"ㄱ",93],["a541","쩇",4,"쩎쩏쩑쩒쩓쩕",6,"쩞쩢",5,"쩩쩪"],["a561","쩫",17,"쩾",5,"쪅쪆"],["a581","쪇",16,"쪙",14,"ⅰ",9],["a5b0","Ⅰ",9],["a5c1","Α",16,"Σ",6],["a5e1","α",16,"σ",6],["a641","쪨",19,"쪾쪿쫁쫂쫃쫅"],["a661","쫆",5,"쫎쫐쫒쫔쫕쫖쫗쫚",5,"쫡",6],["a681","쫨쫩쫪쫫쫭",6,"쫵",18,"쬉쬊─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂┒┑┚┙┖┕┎┍┞┟┡┢┦┧┩┪┭┮┱┲┵┶┹┺┽┾╀╁╃",7],["a741","쬋",4,"쬑쬒쬓쬕쬖쬗쬙",6,"쬢",7],["a761","쬪",22,"쭂쭃쭄"],["a781","쭅쭆쭇쭊쭋쭍쭎쭏쭑",6,"쭚쭛쭜쭞",5,"쭥",7,"㎕㎖㎗ℓ㎘㏄㎣㎤㎥㎦㎙",9,"㏊㎍㎎㎏㏏㎈㎉㏈㎧㎨㎰",9,"㎀",4,"㎺",5,"㎐",4,"Ω㏀㏁㎊㎋㎌㏖㏅㎭㎮㎯㏛㎩㎪㎫㎬㏝㏐㏓㏃㏉㏜㏆"],["a841","쭭",10,"쭺",14],["a861","쮉",18,"쮝",6],["a881","쮤",19,"쮹",11,"ÆÐªĦ"],["a8a6","IJ"],["a8a8","ĿŁØŒºÞŦŊ"],["a8b1","㉠",27,"ⓐ",25,"①",14,"½⅓⅔¼¾⅛⅜⅝⅞"],["a941","쯅",14,"쯕",10],["a961","쯠쯡쯢쯣쯥쯦쯨쯪",18],["a981","쯽",14,"찎찏찑찒찓찕",6,"찞찟찠찣찤æđðħıijĸŀłøœßþŧŋʼn㈀",27,"⒜",25,"⑴",14,"¹²³⁴ⁿ₁₂₃₄"],["aa41","찥찦찪찫찭찯찱",6,"찺찿",4,"챆챇챉챊챋챍챎"],["aa61","챏",4,"챖챚",5,"챡챢챣챥챧챩",6,"챱챲"],["aa81","챳챴챶",29,"ぁ",82],["ab41","첔첕첖첗첚첛첝첞첟첡",6,"첪첮",5,"첶첷첹"],["ab61","첺첻첽",6,"쳆쳈쳊",5,"쳑쳒쳓쳕",5],["ab81","쳛",8,"쳥",6,"쳭쳮쳯쳱",12,"ァ",85],["ac41","쳾쳿촀촂",5,"촊촋촍촎촏촑",6,"촚촜촞촟촠"],["ac61","촡촢촣촥촦촧촩촪촫촭",11,"촺",4],["ac81","촿",28,"쵝쵞쵟А",5,"ЁЖ",25],["acd1","а",5,"ёж",25],["ad41","쵡쵢쵣쵥",6,"쵮쵰쵲",5,"쵹",7],["ad61","춁",6,"춉",10,"춖춗춙춚춛춝춞춟"],["ad81","춠춡춢춣춦춨춪",5,"춱",18,"췅"],["ae41","췆",5,"췍췎췏췑",16],["ae61","췢",5,"췩췪췫췭췮췯췱",6,"췺췼췾",4],["ae81","츃츅츆츇츉츊츋츍",6,"츕츖츗츘츚",5,"츢츣츥츦츧츩츪츫"],["af41","츬츭츮츯츲츴츶",19],["af61","칊",13,"칚칛칝칞칢",5,"칪칬"],["af81","칮",5,"칶칷칹칺칻칽",6,"캆캈캊",5,"캒캓캕캖캗캙"],["b041","캚",5,"캢캦",5,"캮",12],["b061","캻",5,"컂",19],["b081","컖",13,"컦컧컩컪컭",6,"컶컺",5,"가각간갇갈갉갊감",7,"같",4,"갠갤갬갭갯갰갱갸갹갼걀걋걍걔걘걜거걱건걷걸걺검겁것겄겅겆겉겊겋게겐겔겜겝겟겠겡겨격겪견겯결겸겹겻겼경곁계곈곌곕곗고곡곤곧골곪곬곯곰곱곳공곶과곽관괄괆"],["b141","켂켃켅켆켇켉",6,"켒켔켖",5,"켝켞켟켡켢켣"],["b161","켥",6,"켮켲",5,"켹",11],["b181","콅",14,"콖콗콙콚콛콝",6,"콦콨콪콫콬괌괍괏광괘괜괠괩괬괭괴괵괸괼굄굅굇굉교굔굘굡굣구국군굳굴굵굶굻굼굽굿궁궂궈궉권궐궜궝궤궷귀귁귄귈귐귑귓규균귤그극근귿글긁금급긋긍긔기긱긴긷길긺김깁깃깅깆깊까깍깎깐깔깖깜깝깟깠깡깥깨깩깬깰깸"],["b241","콭콮콯콲콳콵콶콷콹",6,"쾁쾂쾃쾄쾆",5,"쾍"],["b261","쾎",18,"쾢",5,"쾩"],["b281","쾪",5,"쾱",18,"쿅",6,"깹깻깼깽꺄꺅꺌꺼꺽꺾껀껄껌껍껏껐껑께껙껜껨껫껭껴껸껼꼇꼈꼍꼐꼬꼭꼰꼲꼴꼼꼽꼿꽁꽂꽃꽈꽉꽐꽜꽝꽤꽥꽹꾀꾄꾈꾐꾑꾕꾜꾸꾹꾼꿀꿇꿈꿉꿋꿍꿎꿔꿜꿨꿩꿰꿱꿴꿸뀀뀁뀄뀌뀐뀔뀜뀝뀨끄끅끈끊끌끎끓끔끕끗끙"],["b341","쿌",19,"쿢쿣쿥쿦쿧쿩"],["b361","쿪",5,"쿲쿴쿶",5,"쿽쿾쿿퀁퀂퀃퀅",5],["b381","퀋",5,"퀒",5,"퀙",19,"끝끼끽낀낄낌낍낏낑나낙낚난낟날낡낢남납낫",4,"낱낳내낵낸낼냄냅냇냈냉냐냑냔냘냠냥너넉넋넌널넒넓넘넙넛넜넝넣네넥넨넬넴넵넷넸넹녀녁년녈념녑녔녕녘녜녠노녹논놀놂놈놉놋농높놓놔놘놜놨뇌뇐뇔뇜뇝"],["b441","퀮",5,"퀶퀷퀹퀺퀻퀽",6,"큆큈큊",5],["b461","큑큒큓큕큖큗큙",6,"큡",10,"큮큯"],["b481","큱큲큳큵",6,"큾큿킀킂",18,"뇟뇨뇩뇬뇰뇹뇻뇽누눅눈눋눌눔눕눗눙눠눴눼뉘뉜뉠뉨뉩뉴뉵뉼늄늅늉느늑는늘늙늚늠늡늣능늦늪늬늰늴니닉닌닐닒님닙닛닝닢다닥닦단닫",4,"닳담답닷",4,"닿대댁댄댈댐댑댓댔댕댜더덕덖던덛덜덞덟덤덥"],["b541","킕",14,"킦킧킩킪킫킭",5],["b561","킳킶킸킺",5,"탂탃탅탆탇탊",5,"탒탖",4],["b581","탛탞탟탡탢탣탥",6,"탮탲",5,"탹",11,"덧덩덫덮데덱덴델뎀뎁뎃뎄뎅뎌뎐뎔뎠뎡뎨뎬도독돈돋돌돎돐돔돕돗동돛돝돠돤돨돼됐되된될됨됩됫됴두둑둔둘둠둡둣둥둬뒀뒈뒝뒤뒨뒬뒵뒷뒹듀듄듈듐듕드득든듣들듦듬듭듯등듸디딕딘딛딜딤딥딧딨딩딪따딱딴딸"],["b641","턅",7,"턎",17],["b661","턠",15,"턲턳턵턶턷턹턻턼턽턾"],["b681","턿텂텆",5,"텎텏텑텒텓텕",6,"텞텠텢",5,"텩텪텫텭땀땁땃땄땅땋때땍땐땔땜땝땟땠땡떠떡떤떨떪떫떰떱떳떴떵떻떼떽뗀뗄뗌뗍뗏뗐뗑뗘뗬또똑똔똘똥똬똴뙈뙤뙨뚜뚝뚠뚤뚫뚬뚱뛔뛰뛴뛸뜀뜁뜅뜨뜩뜬뜯뜰뜸뜹뜻띄띈띌띔띕띠띤띨띰띱띳띵라락란랄람랍랏랐랑랒랖랗"],["b741","텮",13,"텽",6,"톅톆톇톉톊"],["b761","톋",20,"톢톣톥톦톧"],["b781","톩",6,"톲톴톶톷톸톹톻톽톾톿퇁",14,"래랙랜랠램랩랫랬랭랴략랸럇량러럭런럴럼럽럿렀렁렇레렉렌렐렘렙렛렝려력련렬렴렵렷렸령례롄롑롓로록론롤롬롭롯롱롸롼뢍뢨뢰뢴뢸룀룁룃룅료룐룔룝룟룡루룩룬룰룸룹룻룽뤄뤘뤠뤼뤽륀륄륌륏륑류륙륜률륨륩"],["b841","퇐",7,"퇙",17],["b861","퇫",8,"퇵퇶퇷퇹",13],["b881","툈툊",5,"툑",24,"륫륭르륵른를름릅릇릉릊릍릎리릭린릴림립릿링마막만많",4,"맘맙맛망맞맡맣매맥맨맬맴맵맷맸맹맺먀먁먈먕머먹먼멀멂멈멉멋멍멎멓메멕멘멜멤멥멧멨멩며멱면멸몃몄명몇몌모목몫몬몰몲몸몹못몽뫄뫈뫘뫙뫼"],["b941","툪툫툮툯툱툲툳툵",6,"툾퉀퉂",5,"퉉퉊퉋퉌"],["b961","퉍",14,"퉝",6,"퉥퉦퉧퉨"],["b981","퉩",22,"튂튃튅튆튇튉튊튋튌묀묄묍묏묑묘묜묠묩묫무묵묶문묻물묽묾뭄뭅뭇뭉뭍뭏뭐뭔뭘뭡뭣뭬뮈뮌뮐뮤뮨뮬뮴뮷므믄믈믐믓미믹민믿밀밂밈밉밋밌밍및밑바",4,"받",4,"밤밥밧방밭배백밴밸뱀뱁뱃뱄뱅뱉뱌뱍뱐뱝버벅번벋벌벎범법벗"],["ba41","튍튎튏튒튓튔튖",5,"튝튞튟튡튢튣튥",6,"튭"],["ba61","튮튯튰튲",5,"튺튻튽튾틁틃",4,"틊틌",5],["ba81","틒틓틕틖틗틙틚틛틝",6,"틦",9,"틲틳틵틶틷틹틺벙벚베벡벤벧벨벰벱벳벴벵벼벽변별볍볏볐병볕볘볜보복볶본볼봄봅봇봉봐봔봤봬뵀뵈뵉뵌뵐뵘뵙뵤뵨부북분붇불붉붊붐붑붓붕붙붚붜붤붰붸뷔뷕뷘뷜뷩뷰뷴뷸븀븃븅브븍븐블븜븝븟비빅빈빌빎빔빕빗빙빚빛빠빡빤"],["bb41","틻",4,"팂팄팆",5,"팏팑팒팓팕팗",4,"팞팢팣"],["bb61","팤팦팧팪팫팭팮팯팱",6,"팺팾",5,"퍆퍇퍈퍉"],["bb81","퍊",31,"빨빪빰빱빳빴빵빻빼빽뺀뺄뺌뺍뺏뺐뺑뺘뺙뺨뻐뻑뻔뻗뻘뻠뻣뻤뻥뻬뼁뼈뼉뼘뼙뼛뼜뼝뽀뽁뽄뽈뽐뽑뽕뾔뾰뿅뿌뿍뿐뿔뿜뿟뿡쀼쁑쁘쁜쁠쁨쁩삐삑삔삘삠삡삣삥사삭삯산삳살삵삶삼삽삿샀상샅새색샌샐샘샙샛샜생샤"],["bc41","퍪",17,"퍾퍿펁펂펃펅펆펇"],["bc61","펈펉펊펋펎펒",5,"펚펛펝펞펟펡",6,"펪펬펮"],["bc81","펯",4,"펵펶펷펹펺펻펽",6,"폆폇폊",5,"폑",5,"샥샨샬샴샵샷샹섀섄섈섐섕서",4,"섣설섦섧섬섭섯섰성섶세섹센셀셈셉셋셌셍셔셕션셜셤셥셧셨셩셰셴셸솅소속솎손솔솖솜솝솟송솥솨솩솬솰솽쇄쇈쇌쇔쇗쇘쇠쇤쇨쇰쇱쇳쇼쇽숀숄숌숍숏숑수숙순숟술숨숩숫숭"],["bd41","폗폙",7,"폢폤",7,"폮폯폱폲폳폵폶폷"],["bd61","폸폹폺폻폾퐀퐂",5,"퐉",13],["bd81","퐗",5,"퐞",25,"숯숱숲숴쉈쉐쉑쉔쉘쉠쉥쉬쉭쉰쉴쉼쉽쉿슁슈슉슐슘슛슝스슥슨슬슭슴습슷승시식신싣실싫심십싯싱싶싸싹싻싼쌀쌈쌉쌌쌍쌓쌔쌕쌘쌜쌤쌥쌨쌩썅써썩썬썰썲썸썹썼썽쎄쎈쎌쏀쏘쏙쏜쏟쏠쏢쏨쏩쏭쏴쏵쏸쐈쐐쐤쐬쐰"],["be41","퐸",7,"푁푂푃푅",14],["be61","푔",7,"푝푞푟푡푢푣푥",7,"푮푰푱푲"],["be81","푳",4,"푺푻푽푾풁풃",4,"풊풌풎",5,"풕",8,"쐴쐼쐽쑈쑤쑥쑨쑬쑴쑵쑹쒀쒔쒜쒸쒼쓩쓰쓱쓴쓸쓺쓿씀씁씌씐씔씜씨씩씬씰씸씹씻씽아악안앉않알앍앎앓암압앗았앙앝앞애액앤앨앰앱앳앴앵야약얀얄얇얌얍얏양얕얗얘얜얠얩어억언얹얻얼얽얾엄",6,"엌엎"],["bf41","풞",10,"풪",14],["bf61","풹",18,"퓍퓎퓏퓑퓒퓓퓕"],["bf81","퓖",5,"퓝퓞퓠",7,"퓩퓪퓫퓭퓮퓯퓱",6,"퓹퓺퓼에엑엔엘엠엡엣엥여역엮연열엶엷염",5,"옅옆옇예옌옐옘옙옛옜오옥온올옭옮옰옳옴옵옷옹옻와왁완왈왐왑왓왔왕왜왝왠왬왯왱외왹왼욀욈욉욋욍요욕욘욜욤욥욧용우욱운울욹욺움웁웃웅워웍원월웜웝웠웡웨"],["c041","퓾",5,"픅픆픇픉픊픋픍",6,"픖픘",5],["c061","픞",25],["c081","픸픹픺픻픾픿핁핂핃핅",6,"핎핐핒",5,"핚핛핝핞핟핡핢핣웩웬웰웸웹웽위윅윈윌윔윕윗윙유육윤율윰윱윳융윷으윽은을읊음읍읏응",7,"읜읠읨읫이익인일읽읾잃임입잇있잉잊잎자작잔잖잗잘잚잠잡잣잤장잦재잭잰잴잼잽잿쟀쟁쟈쟉쟌쟎쟐쟘쟝쟤쟨쟬저적전절젊"],["c141","핤핦핧핪핬핮",5,"핶핷핹핺핻핽",6,"햆햊햋"],["c161","햌햍햎햏햑",19,"햦햧"],["c181","햨",31,"점접젓정젖제젝젠젤젬젭젯젱져젼졀졈졉졌졍졔조족존졸졺좀좁좃종좆좇좋좌좍좔좝좟좡좨좼좽죄죈죌죔죕죗죙죠죡죤죵주죽준줄줅줆줌줍줏중줘줬줴쥐쥑쥔쥘쥠쥡쥣쥬쥰쥴쥼즈즉즌즐즘즙즛증지직진짇질짊짐집짓"],["c241","헊헋헍헎헏헑헓",4,"헚헜헞",5,"헦헧헩헪헫헭헮"],["c261","헯",4,"헶헸헺",5,"혂혃혅혆혇혉",6,"혒"],["c281","혖",5,"혝혞혟혡혢혣혥",7,"혮",9,"혺혻징짖짙짚짜짝짠짢짤짧짬짭짯짰짱째짹짼쨀쨈쨉쨋쨌쨍쨔쨘쨩쩌쩍쩐쩔쩜쩝쩟쩠쩡쩨쩽쪄쪘쪼쪽쫀쫄쫌쫍쫏쫑쫓쫘쫙쫠쫬쫴쬈쬐쬔쬘쬠쬡쭁쭈쭉쭌쭐쭘쭙쭝쭤쭸쭹쮜쮸쯔쯤쯧쯩찌찍찐찔찜찝찡찢찧차착찬찮찰참찹찻"],["c341","혽혾혿홁홂홃홄홆홇홊홌홎홏홐홒홓홖홗홙홚홛홝",4],["c361","홢",4,"홨홪",5,"홲홳홵",11],["c381","횁횂횄횆",5,"횎횏횑횒횓횕",7,"횞횠횢",5,"횩횪찼창찾채책챈챌챔챕챗챘챙챠챤챦챨챰챵처척천철첨첩첫첬청체첵첸첼쳄쳅쳇쳉쳐쳔쳤쳬쳰촁초촉촌촐촘촙촛총촤촨촬촹최쵠쵤쵬쵭쵯쵱쵸춈추축춘출춤춥춧충춰췄췌췐취췬췰췸췹췻췽츄츈츌츔츙츠측츤츨츰츱츳층"],["c441","횫횭횮횯횱",7,"횺횼",7,"훆훇훉훊훋"],["c461","훍훎훏훐훒훓훕훖훘훚",5,"훡훢훣훥훦훧훩",4],["c481","훮훯훱훲훳훴훶",5,"훾훿휁휂휃휅",11,"휒휓휔치칙친칟칠칡침칩칫칭카칵칸칼캄캅캇캉캐캑캔캘캠캡캣캤캥캬캭컁커컥컨컫컬컴컵컷컸컹케켁켄켈켐켑켓켕켜켠켤켬켭켯켰켱켸코콕콘콜콤콥콧콩콰콱콴콸쾀쾅쾌쾡쾨쾰쿄쿠쿡쿤쿨쿰쿱쿳쿵쿼퀀퀄퀑퀘퀭퀴퀵퀸퀼"],["c541","휕휖휗휚휛휝휞휟휡",6,"휪휬휮",5,"휶휷휹"],["c561","휺휻휽",6,"흅흆흈흊",5,"흒흓흕흚",4],["c581","흟흢흤흦흧흨흪흫흭흮흯흱흲흳흵",6,"흾흿힀힂",5,"힊힋큄큅큇큉큐큔큘큠크큭큰클큼큽킁키킥킨킬킴킵킷킹타탁탄탈탉탐탑탓탔탕태택탠탤탬탭탯탰탱탸턍터턱턴털턺텀텁텃텄텅테텍텐텔템텝텟텡텨텬텼톄톈토톡톤톨톰톱톳통톺톼퇀퇘퇴퇸툇툉툐투툭툰툴툼툽툿퉁퉈퉜"],["c641","힍힎힏힑",6,"힚힜힞",5],["c6a1","퉤튀튁튄튈튐튑튕튜튠튤튬튱트특튼튿틀틂틈틉틋틔틘틜틤틥티틱틴틸팀팁팃팅파팍팎판팔팖팜팝팟팠팡팥패팩팬팰팸팹팻팼팽퍄퍅퍼퍽펀펄펌펍펏펐펑페펙펜펠펨펩펫펭펴편펼폄폅폈평폐폘폡폣포폭폰폴폼폽폿퐁"],["c7a1","퐈퐝푀푄표푠푤푭푯푸푹푼푿풀풂품풉풋풍풔풩퓌퓐퓔퓜퓟퓨퓬퓰퓸퓻퓽프픈플픔픕픗피픽핀필핌핍핏핑하학한할핥함합핫항해핵핸핼햄햅햇했행햐향허헉헌헐헒험헙헛헝헤헥헨헬헴헵헷헹혀혁현혈혐협혓혔형혜혠"],["c8a1","혤혭호혹혼홀홅홈홉홋홍홑화확환활홧황홰홱홴횃횅회획횐횔횝횟횡효횬횰횹횻후훅훈훌훑훔훗훙훠훤훨훰훵훼훽휀휄휑휘휙휜휠휨휩휫휭휴휵휸휼흄흇흉흐흑흔흖흗흘흙흠흡흣흥흩희흰흴흼흽힁히힉힌힐힘힙힛힝"],["caa1","伽佳假價加可呵哥嘉嫁家暇架枷柯歌珂痂稼苛茄街袈訶賈跏軻迦駕刻却各恪慤殼珏脚覺角閣侃刊墾奸姦干幹懇揀杆柬桿澗癎看磵稈竿簡肝艮艱諫間乫喝曷渴碣竭葛褐蝎鞨勘坎堪嵌感憾戡敢柑橄減甘疳監瞰紺邯鑑鑒龕"],["cba1","匣岬甲胛鉀閘剛堈姜岡崗康强彊慷江畺疆糠絳綱羌腔舡薑襁講鋼降鱇介价個凱塏愷愾慨改槪漑疥皆盖箇芥蓋豈鎧開喀客坑更粳羹醵倨去居巨拒据據擧渠炬祛距踞車遽鉅鋸乾件健巾建愆楗腱虔蹇鍵騫乞傑杰桀儉劍劒檢"],["cca1","瞼鈐黔劫怯迲偈憩揭擊格檄激膈覡隔堅牽犬甄絹繭肩見譴遣鵑抉決潔結缺訣兼慊箝謙鉗鎌京俓倞傾儆勁勍卿坰境庚徑慶憬擎敬景暻更梗涇炅烱璟璥瓊痙硬磬竟競絅經耕耿脛莖警輕逕鏡頃頸驚鯨係啓堺契季屆悸戒桂械"],["cda1","棨溪界癸磎稽系繫繼計誡谿階鷄古叩告呱固姑孤尻庫拷攷故敲暠枯槁沽痼皐睾稿羔考股膏苦苽菰藁蠱袴誥賈辜錮雇顧高鼓哭斛曲梏穀谷鵠困坤崑昆梱棍滾琨袞鯤汨滑骨供公共功孔工恐恭拱控攻珙空蚣貢鞏串寡戈果瓜"],["cea1","科菓誇課跨過鍋顆廓槨藿郭串冠官寬慣棺款灌琯瓘管罐菅觀貫關館刮恝括适侊光匡壙廣曠洸炚狂珖筐胱鑛卦掛罫乖傀塊壞怪愧拐槐魁宏紘肱轟交僑咬喬嬌嶠巧攪敎校橋狡皎矯絞翹膠蕎蛟較轎郊餃驕鮫丘久九仇俱具勾"],["cfa1","區口句咎嘔坵垢寇嶇廐懼拘救枸柩構歐毆毬求溝灸狗玖球瞿矩究絿耉臼舅舊苟衢謳購軀逑邱鉤銶駒驅鳩鷗龜國局菊鞠鞫麴君窘群裙軍郡堀屈掘窟宮弓穹窮芎躬倦券勸卷圈拳捲權淃眷厥獗蕨蹶闕机櫃潰詭軌饋句晷歸貴"],["d0a1","鬼龜叫圭奎揆槻珪硅窺竅糾葵規赳逵閨勻均畇筠菌鈞龜橘克剋劇戟棘極隙僅劤勤懃斤根槿瑾筋芹菫覲謹近饉契今妗擒昑檎琴禁禽芩衾衿襟金錦伋及急扱汲級給亘兢矜肯企伎其冀嗜器圻基埼夔奇妓寄岐崎己幾忌技旗旣"],["d1a1","朞期杞棋棄機欺氣汽沂淇玘琦琪璂璣畸畿碁磯祁祇祈祺箕紀綺羈耆耭肌記譏豈起錡錤飢饑騎騏驥麒緊佶吉拮桔金喫儺喇奈娜懦懶拏拿癩",5,"那樂",4,"諾酪駱亂卵暖欄煖爛蘭難鸞捏捺南嵐枏楠湳濫男藍襤拉"],["d2a1","納臘蠟衲囊娘廊",4,"乃來內奈柰耐冷女年撚秊念恬拈捻寧寗努勞奴弩怒擄櫓爐瑙盧",5,"駑魯",10,"濃籠聾膿農惱牢磊腦賂雷尿壘",7,"嫩訥杻紐勒",5,"能菱陵尼泥匿溺多茶"],["d3a1","丹亶但單團壇彖斷旦檀段湍短端簞緞蛋袒鄲鍛撻澾獺疸達啖坍憺擔曇淡湛潭澹痰聃膽蕁覃談譚錟沓畓答踏遝唐堂塘幢戇撞棠當糖螳黨代垈坮大對岱帶待戴擡玳臺袋貸隊黛宅德悳倒刀到圖堵塗導屠島嶋度徒悼挑掉搗桃"],["d4a1","棹櫂淘渡滔濤燾盜睹禱稻萄覩賭跳蹈逃途道都鍍陶韜毒瀆牘犢獨督禿篤纛讀墩惇敦旽暾沌焞燉豚頓乭突仝冬凍動同憧東桐棟洞潼疼瞳童胴董銅兜斗杜枓痘竇荳讀豆逗頭屯臀芚遁遯鈍得嶝橙燈登等藤謄鄧騰喇懶拏癩羅"],["d5a1","蘿螺裸邏樂洛烙珞絡落諾酪駱丹亂卵欄欒瀾爛蘭鸞剌辣嵐擥攬欖濫籃纜藍襤覽拉臘蠟廊朗浪狼琅瑯螂郞來崍徠萊冷掠略亮倆兩凉梁樑粮粱糧良諒輛量侶儷勵呂廬慮戾旅櫚濾礪藜蠣閭驢驪麗黎力曆歷瀝礫轢靂憐戀攣漣"],["d6a1","煉璉練聯蓮輦連鍊冽列劣洌烈裂廉斂殮濂簾獵令伶囹寧岺嶺怜玲笭羚翎聆逞鈴零靈領齡例澧禮醴隷勞怒撈擄櫓潞瀘爐盧老蘆虜路輅露魯鷺鹵碌祿綠菉錄鹿麓論壟弄朧瀧瓏籠聾儡瀨牢磊賂賚賴雷了僚寮廖料燎療瞭聊蓼"],["d7a1","遼鬧龍壘婁屢樓淚漏瘻累縷蔞褸鏤陋劉旒柳榴流溜瀏琉瑠留瘤硫謬類六戮陸侖倫崙淪綸輪律慄栗率隆勒肋凜凌楞稜綾菱陵俚利厘吏唎履悧李梨浬犁狸理璃異痢籬罹羸莉裏裡里釐離鯉吝潾燐璘藺躪隣鱗麟林淋琳臨霖砬"],["d8a1","立笠粒摩瑪痲碼磨馬魔麻寞幕漠膜莫邈万卍娩巒彎慢挽晩曼滿漫灣瞞萬蔓蠻輓饅鰻唜抹末沫茉襪靺亡妄忘忙望網罔芒茫莽輞邙埋妹媒寐昧枚梅每煤罵買賣邁魅脈貊陌驀麥孟氓猛盲盟萌冪覓免冕勉棉沔眄眠綿緬面麵滅"],["d9a1","蔑冥名命明暝椧溟皿瞑茗蓂螟酩銘鳴袂侮冒募姆帽慕摸摹暮某模母毛牟牡瑁眸矛耗芼茅謀謨貌木沐牧目睦穆鶩歿沒夢朦蒙卯墓妙廟描昴杳渺猫竗苗錨務巫憮懋戊拇撫无楙武毋無珷畝繆舞茂蕪誣貿霧鵡墨默們刎吻問文"],["daa1","汶紊紋聞蚊門雯勿沕物味媚尾嵋彌微未梶楣渼湄眉米美薇謎迷靡黴岷悶愍憫敏旻旼民泯玟珉緡閔密蜜謐剝博拍搏撲朴樸泊珀璞箔粕縛膊舶薄迫雹駁伴半反叛拌搬攀斑槃泮潘班畔瘢盤盼磐磻礬絆般蟠返頒飯勃拔撥渤潑"],["dba1","發跋醱鉢髮魃倣傍坊妨尨幇彷房放方旁昉枋榜滂磅紡肪膀舫芳蒡蚌訪謗邦防龐倍俳北培徘拜排杯湃焙盃背胚裴裵褙賠輩配陪伯佰帛柏栢白百魄幡樊煩燔番磻繁蕃藩飜伐筏罰閥凡帆梵氾汎泛犯範范法琺僻劈壁擘檗璧癖"],["dca1","碧蘗闢霹便卞弁變辨辯邊別瞥鱉鼈丙倂兵屛幷昞昺柄棅炳甁病秉竝輧餠騈保堡報寶普步洑湺潽珤甫菩補褓譜輔伏僕匐卜宓復服福腹茯蔔複覆輹輻馥鰒本乶俸奉封峯峰捧棒烽熢琫縫蓬蜂逢鋒鳳不付俯傅剖副否咐埠夫婦"],["dda1","孚孵富府復扶敷斧浮溥父符簿缶腐腑膚艀芙莩訃負賦賻赴趺部釜阜附駙鳧北分吩噴墳奔奮忿憤扮昐汾焚盆粉糞紛芬賁雰不佛弗彿拂崩朋棚硼繃鵬丕備匕匪卑妃婢庇悲憊扉批斐枇榧比毖毗毘沸泌琵痺砒碑秕秘粃緋翡肥"],["dea1","脾臂菲蜚裨誹譬費鄙非飛鼻嚬嬪彬斌檳殯浜濱瀕牝玭貧賓頻憑氷聘騁乍事些仕伺似使俟僿史司唆嗣四士奢娑寫寺射巳師徙思捨斜斯柶査梭死沙泗渣瀉獅砂社祀祠私篩紗絲肆舍莎蓑蛇裟詐詞謝賜赦辭邪飼駟麝削數朔索"],["dfa1","傘刪山散汕珊産疝算蒜酸霰乷撒殺煞薩三參杉森渗芟蔘衫揷澁鈒颯上傷像償商喪嘗孀尙峠常床庠廂想桑橡湘爽牀狀相祥箱翔裳觴詳象賞霜塞璽賽嗇塞穡索色牲生甥省笙墅壻嶼序庶徐恕抒捿敍暑曙書栖棲犀瑞筮絮緖署"],["e0a1","胥舒薯西誓逝鋤黍鼠夕奭席惜昔晳析汐淅潟石碩蓆釋錫仙僊先善嬋宣扇敾旋渲煽琁瑄璇璿癬禪線繕羨腺膳船蘚蟬詵跣選銑鐥饍鮮卨屑楔泄洩渫舌薛褻設說雪齧剡暹殲纖蟾贍閃陝攝涉燮葉城姓宬性惺成星晟猩珹盛省筬"],["e1a1","聖聲腥誠醒世勢歲洗稅笹細說貰召嘯塑宵小少巢所掃搔昭梳沼消溯瀟炤燒甦疏疎瘙笑篠簫素紹蔬蕭蘇訴逍遡邵銷韶騷俗屬束涑粟續謖贖速孫巽損蓀遜飡率宋悚松淞訟誦送頌刷殺灑碎鎖衰釗修受嗽囚垂壽嫂守岫峀帥愁"],["e2a1","戍手授搜收數樹殊水洙漱燧狩獸琇璲瘦睡秀穗竪粹綏綬繡羞脩茱蒐蓚藪袖誰讐輸遂邃酬銖銹隋隧隨雖需須首髓鬚叔塾夙孰宿淑潚熟琡璹肅菽巡徇循恂旬栒楯橓殉洵淳珣盾瞬筍純脣舜荀蓴蕣詢諄醇錞順馴戌術述鉥崇崧"],["e3a1","嵩瑟膝蝨濕拾習褶襲丞乘僧勝升承昇繩蠅陞侍匙嘶始媤尸屎屍市弑恃施是時枾柴猜矢示翅蒔蓍視試詩諡豕豺埴寔式息拭植殖湜熄篒蝕識軾食飾伸侁信呻娠宸愼新晨燼申神紳腎臣莘薪藎蜃訊身辛辰迅失室實悉審尋心沁"],["e4a1","沈深瀋甚芯諶什十拾雙氏亞俄兒啞娥峨我牙芽莪蛾衙訝阿雅餓鴉鵝堊岳嶽幄惡愕握樂渥鄂鍔顎鰐齷安岸按晏案眼雁鞍顔鮟斡謁軋閼唵岩巖庵暗癌菴闇壓押狎鴨仰央怏昻殃秧鴦厓哀埃崖愛曖涯碍艾隘靄厄扼掖液縊腋額"],["e5a1","櫻罌鶯鸚也倻冶夜惹揶椰爺耶若野弱掠略約若葯蒻藥躍亮佯兩凉壤孃恙揚攘敭暘梁楊樣洋瀁煬痒瘍禳穰糧羊良襄諒讓釀陽量養圄御於漁瘀禦語馭魚齬億憶抑檍臆偃堰彦焉言諺孼蘖俺儼嚴奄掩淹嶪業円予余勵呂女如廬"],["e6a1","旅歟汝濾璵礖礪與艅茹輿轝閭餘驪麗黎亦力域役易曆歷疫繹譯轢逆驛嚥堧姸娟宴年延憐戀捐挻撚椽沇沿涎涓淵演漣烟然煙煉燃燕璉硏硯秊筵緣練縯聯衍軟輦蓮連鉛鍊鳶列劣咽悅涅烈熱裂說閱厭廉念捻染殮炎焰琰艶苒"],["e7a1","簾閻髥鹽曄獵燁葉令囹塋寧嶺嶸影怜映暎楹榮永泳渶潁濚瀛瀯煐營獰玲瑛瑩瓔盈穎纓羚聆英詠迎鈴鍈零霙靈領乂倪例刈叡曳汭濊猊睿穢芮藝蘂禮裔詣譽豫醴銳隸霓預五伍俉傲午吾吳嗚塢墺奧娛寤悟惡懊敖旿晤梧汚澳"],["e8a1","烏熬獒筽蜈誤鰲鼇屋沃獄玉鈺溫瑥瘟穩縕蘊兀壅擁瓮甕癰翁邕雍饔渦瓦窩窪臥蛙蝸訛婉完宛梡椀浣玩琓琬碗緩翫脘腕莞豌阮頑曰往旺枉汪王倭娃歪矮外嵬巍猥畏了僚僥凹堯夭妖姚寥寮尿嶢拗搖撓擾料曜樂橈燎燿瑤療"],["e9a1","窈窯繇繞耀腰蓼蟯要謠遙遼邀饒慾欲浴縟褥辱俑傭冗勇埇墉容庸慂榕涌湧溶熔瑢用甬聳茸蓉踊鎔鏞龍于佑偶優又友右宇寓尤愚憂旴牛玗瑀盂祐禑禹紆羽芋藕虞迂遇郵釪隅雨雩勖彧旭昱栯煜稶郁頊云暈橒殞澐熉耘芸蕓"],["eaa1","運隕雲韻蔚鬱亐熊雄元原員圓園垣媛嫄寃怨愿援沅洹湲源爰猿瑗苑袁轅遠阮院願鴛月越鉞位偉僞危圍委威尉慰暐渭爲瑋緯胃萎葦蔿蝟衛褘謂違韋魏乳侑儒兪劉唯喩孺宥幼幽庾悠惟愈愉揄攸有杻柔柚柳楡楢油洧流游溜"],["eba1","濡猶猷琉瑜由留癒硫紐維臾萸裕誘諛諭踰蹂遊逾遺酉釉鍮類六堉戮毓肉育陸倫允奫尹崙淪潤玧胤贇輪鈗閏律慄栗率聿戎瀜絨融隆垠恩慇殷誾銀隱乙吟淫蔭陰音飮揖泣邑凝應膺鷹依倚儀宜意懿擬椅毅疑矣義艤薏蟻衣誼"],["eca1","議醫二以伊利吏夷姨履已弛彛怡易李梨泥爾珥理異痍痢移罹而耳肄苡荑裏裡貽貳邇里離飴餌匿溺瀷益翊翌翼謚人仁刃印吝咽因姻寅引忍湮燐璘絪茵藺蚓認隣靭靷鱗麟一佚佾壹日溢逸鎰馹任壬妊姙恁林淋稔臨荏賃入卄"],["eda1","立笠粒仍剩孕芿仔刺咨姉姿子字孜恣慈滋炙煮玆瓷疵磁紫者自茨蔗藉諮資雌作勺嚼斫昨灼炸爵綽芍酌雀鵲孱棧殘潺盞岑暫潛箴簪蠶雜丈仗匠場墻壯奬將帳庄張掌暲杖樟檣欌漿牆狀獐璋章粧腸臟臧莊葬蔣薔藏裝贓醬長"],["eea1","障再哉在宰才材栽梓渽滓災縡裁財載齋齎爭箏諍錚佇低儲咀姐底抵杵楮樗沮渚狙猪疽箸紵苧菹著藷詛貯躇這邸雎齟勣吊嫡寂摘敵滴狄炙的積笛籍績翟荻謫賊赤跡蹟迪迹適鏑佃佺傳全典前剪塡塼奠專展廛悛戰栓殿氈澱"],["efa1","煎琠田甸畑癲筌箋箭篆纏詮輾轉鈿銓錢鐫電顚顫餞切截折浙癤竊節絶占岾店漸点粘霑鮎點接摺蝶丁井亭停偵呈姃定幀庭廷征情挺政整旌晶晸柾楨檉正汀淀淨渟湞瀞炡玎珽町睛碇禎程穽精綎艇訂諪貞鄭酊釘鉦鋌錠霆靖"],["f0a1","靜頂鼎制劑啼堤帝弟悌提梯濟祭第臍薺製諸蹄醍除際霽題齊俎兆凋助嘲弔彫措操早晁曺曹朝條棗槽漕潮照燥爪璪眺祖祚租稠窕粗糟組繰肇藻蚤詔調趙躁造遭釣阻雕鳥族簇足鏃存尊卒拙猝倧宗從悰慫棕淙琮種終綜縱腫"],["f1a1","踪踵鍾鐘佐坐左座挫罪主住侏做姝胄呪周嗾奏宙州廚晝朱柱株注洲湊澍炷珠疇籌紂紬綢舟蛛註誅走躊輳週酎酒鑄駐竹粥俊儁准埈寯峻晙樽浚準濬焌畯竣蠢逡遵雋駿茁中仲衆重卽櫛楫汁葺增憎曾拯烝甑症繒蒸證贈之只"],["f2a1","咫地址志持指摯支旨智枝枳止池沚漬知砥祉祗紙肢脂至芝芷蜘誌識贄趾遲直稙稷織職唇嗔塵振搢晉晋桭榛殄津溱珍瑨璡畛疹盡眞瞋秦縉縝臻蔯袗診賑軫辰進鎭陣陳震侄叱姪嫉帙桎瓆疾秩窒膣蛭質跌迭斟朕什執潗緝輯"],["f3a1","鏶集徵懲澄且侘借叉嗟嵯差次此磋箚茶蹉車遮捉搾着窄錯鑿齪撰澯燦璨瓚竄簒纂粲纘讚贊鑽餐饌刹察擦札紮僭參塹慘慙懺斬站讒讖倉倡創唱娼廠彰愴敞昌昶暢槍滄漲猖瘡窓脹艙菖蒼債埰寀寨彩採砦綵菜蔡采釵冊柵策"],["f4a1","責凄妻悽處倜刺剔尺慽戚拓擲斥滌瘠脊蹠陟隻仟千喘天川擅泉淺玔穿舛薦賤踐遷釧闡阡韆凸哲喆徹撤澈綴輟轍鐵僉尖沾添甛瞻簽籤詹諂堞妾帖捷牒疊睫諜貼輒廳晴淸聽菁請靑鯖切剃替涕滯締諦逮遞體初剿哨憔抄招梢"],["f5a1","椒楚樵炒焦硝礁礎秒稍肖艸苕草蕉貂超酢醋醮促囑燭矗蜀觸寸忖村邨叢塚寵悤憁摠總聰蔥銃撮催崔最墜抽推椎楸樞湫皺秋芻萩諏趨追鄒酋醜錐錘鎚雛騶鰍丑畜祝竺筑築縮蓄蹙蹴軸逐春椿瑃出朮黜充忠沖蟲衝衷悴膵萃"],["f6a1","贅取吹嘴娶就炊翠聚脆臭趣醉驟鷲側仄厠惻測層侈値嗤峙幟恥梔治淄熾痔痴癡稚穉緇緻置致蚩輜雉馳齒則勅飭親七柒漆侵寢枕沈浸琛砧針鍼蟄秤稱快他咤唾墮妥惰打拖朶楕舵陀馱駝倬卓啄坼度托拓擢晫柝濁濯琢琸託"],["f7a1","鐸呑嘆坦彈憚歎灘炭綻誕奪脫探眈耽貪塔搭榻宕帑湯糖蕩兌台太怠態殆汰泰笞胎苔跆邰颱宅擇澤撑攄兎吐土討慟桶洞痛筒統通堆槌腿褪退頹偸套妬投透鬪慝特闖坡婆巴把播擺杷波派爬琶破罷芭跛頗判坂板版瓣販辦鈑"],["f8a1","阪八叭捌佩唄悖敗沛浿牌狽稗覇貝彭澎烹膨愎便偏扁片篇編翩遍鞭騙貶坪平枰萍評吠嬖幣廢弊斃肺蔽閉陛佈包匍匏咆哺圃布怖抛抱捕暴泡浦疱砲胞脯苞葡蒲袍褒逋鋪飽鮑幅暴曝瀑爆輻俵剽彪慓杓標漂瓢票表豹飇飄驃"],["f9a1","品稟楓諷豊風馮彼披疲皮被避陂匹弼必泌珌畢疋筆苾馝乏逼下何厦夏廈昰河瑕荷蝦賀遐霞鰕壑學虐謔鶴寒恨悍旱汗漢澣瀚罕翰閑閒限韓割轄函含咸啣喊檻涵緘艦銜陷鹹合哈盒蛤閤闔陜亢伉姮嫦巷恒抗杭桁沆港缸肛航"],["faa1","行降項亥偕咳垓奚孩害懈楷海瀣蟹解該諧邂駭骸劾核倖幸杏荇行享向嚮珦鄕響餉饗香噓墟虛許憲櫶獻軒歇險驗奕爀赫革俔峴弦懸晛泫炫玄玹現眩睍絃絢縣舷衒見賢鉉顯孑穴血頁嫌俠協夾峽挾浹狹脅脇莢鋏頰亨兄刑型"],["fba1","形泂滎瀅灐炯熒珩瑩荊螢衡逈邢鎣馨兮彗惠慧暳蕙蹊醯鞋乎互呼壕壺好岵弧戶扈昊晧毫浩淏湖滸澔濠濩灝狐琥瑚瓠皓祜糊縞胡芦葫蒿虎號蝴護豪鎬頀顥惑或酷婚昏混渾琿魂忽惚笏哄弘汞泓洪烘紅虹訌鴻化和嬅樺火畵"],["fca1","禍禾花華話譁貨靴廓擴攫確碻穫丸喚奐宦幻患換歡晥桓渙煥環紈還驩鰥活滑猾豁闊凰幌徨恍惶愰慌晃晄榥況湟滉潢煌璜皇篁簧荒蝗遑隍黃匯回廻徊恢悔懷晦會檜淮澮灰獪繪膾茴蛔誨賄劃獲宖橫鐄哮嚆孝效斅曉梟涍淆"],["fda1","爻肴酵驍侯候厚后吼喉嗅帿後朽煦珝逅勛勳塤壎焄熏燻薰訓暈薨喧暄煊萱卉喙毁彙徽揮暉煇諱輝麾休携烋畦虧恤譎鷸兇凶匈洶胸黑昕欣炘痕吃屹紇訖欠欽歆吸恰洽翕興僖凞喜噫囍姬嬉希憙憘戱晞曦熙熹熺犧禧稀羲詰"]]')},72324:function(A){"use strict";A.exports=JSON.parse('[["0","\\u0000",127],["a140"," ,、。.‧;:?!︰…‥﹐﹑﹒·﹔﹕﹖﹗|–︱—︳╴︴﹏()︵︶{}︷︸〔〕︹︺【】︻︼《》︽︾〈〉︿﹀「」﹁﹂『』﹃﹄﹙﹚"],["a1a1","﹛﹜﹝﹞‘’“”〝〞‵′#&*※§〃○●△▲◎☆★◇◆□■▽▼㊣℅¯ ̄_ˍ﹉﹊﹍﹎﹋﹌﹟﹠﹡+-×÷±√<>=≦≧≠∞≒≡﹢",4,"~∩∪⊥∠∟⊿㏒㏑∫∮∵∴♀♂⊕⊙↑↓←→↖↗↙↘∥∣/"],["a240","\∕﹨$¥〒¢£%@℃℉﹩﹪﹫㏕㎜㎝㎞㏎㎡㎎㎏㏄°兙兛兞兝兡兣嗧瓩糎▁",7,"▏▎▍▌▋▊▉┼┴┬┤├▔─│▕┌┐└┘╭"],["a2a1","╮╰╯═╞╪╡◢◣◥◤╱╲╳0",9,"Ⅰ",9,"〡",8,"十卄卅A",25,"a",21],["a340","wxyzΑ",16,"Σ",6,"α",16,"σ",6,"ㄅ",10],["a3a1","ㄐ",25,"˙ˉˊˇˋ"],["a3e1","€"],["a440","一乙丁七乃九了二人儿入八几刀刁力匕十卜又三下丈上丫丸凡久么也乞于亡兀刃勺千叉口土士夕大女子孑孓寸小尢尸山川工己已巳巾干廾弋弓才"],["a4a1","丑丐不中丰丹之尹予云井互五亢仁什仃仆仇仍今介仄元允內六兮公冗凶分切刈勻勾勿化匹午升卅卞厄友及反壬天夫太夭孔少尤尺屯巴幻廿弔引心戈戶手扎支文斗斤方日曰月木欠止歹毋比毛氏水火爪父爻片牙牛犬王丙"],["a540","世丕且丘主乍乏乎以付仔仕他仗代令仙仞充兄冉冊冬凹出凸刊加功包匆北匝仟半卉卡占卯卮去可古右召叮叩叨叼司叵叫另只史叱台句叭叻四囚外"],["a5a1","央失奴奶孕它尼巨巧左市布平幼弁弘弗必戊打扔扒扑斥旦朮本未末札正母民氐永汁汀氾犯玄玉瓜瓦甘生用甩田由甲申疋白皮皿目矛矢石示禾穴立丞丟乒乓乩亙交亦亥仿伉伙伊伕伍伐休伏仲件任仰仳份企伋光兇兆先全"],["a640","共再冰列刑划刎刖劣匈匡匠印危吉吏同吊吐吁吋各向名合吃后吆吒因回囝圳地在圭圬圯圩夙多夷夸妄奸妃好她如妁字存宇守宅安寺尖屹州帆并年"],["a6a1","式弛忙忖戎戌戍成扣扛托收早旨旬旭曲曳有朽朴朱朵次此死氖汝汗汙江池汐汕污汛汍汎灰牟牝百竹米糸缶羊羽老考而耒耳聿肉肋肌臣自至臼舌舛舟艮色艾虫血行衣西阡串亨位住佇佗佞伴佛何估佐佑伽伺伸佃佔似但佣"],["a740","作你伯低伶余佝佈佚兌克免兵冶冷別判利刪刨劫助努劬匣即卵吝吭吞吾否呎吧呆呃吳呈呂君吩告吹吻吸吮吵吶吠吼呀吱含吟听囪困囤囫坊坑址坍"],["a7a1","均坎圾坐坏圻壯夾妝妒妨妞妣妙妖妍妤妓妊妥孝孜孚孛完宋宏尬局屁尿尾岐岑岔岌巫希序庇床廷弄弟彤形彷役忘忌志忍忱快忸忪戒我抄抗抖技扶抉扭把扼找批扳抒扯折扮投抓抑抆改攻攸旱更束李杏材村杜杖杞杉杆杠"],["a840","杓杗步每求汞沙沁沈沉沅沛汪決沐汰沌汨沖沒汽沃汲汾汴沆汶沍沔沘沂灶灼災灸牢牡牠狄狂玖甬甫男甸皂盯矣私秀禿究系罕肖肓肝肘肛肚育良芒"],["a8a1","芋芍見角言谷豆豕貝赤走足身車辛辰迂迆迅迄巡邑邢邪邦那酉釆里防阮阱阪阬並乖乳事些亞享京佯依侍佳使佬供例來侃佰併侈佩佻侖佾侏侑佺兔兒兕兩具其典冽函刻券刷刺到刮制剁劾劻卒協卓卑卦卷卸卹取叔受味呵"],["a940","咖呸咕咀呻呷咄咒咆呼咐呱呶和咚呢周咋命咎固垃坷坪坩坡坦坤坼夜奉奇奈奄奔妾妻委妹妮姑姆姐姍始姓姊妯妳姒姅孟孤季宗定官宜宙宛尚屈居"],["a9a1","屆岷岡岸岩岫岱岳帘帚帖帕帛帑幸庚店府底庖延弦弧弩往征彿彼忝忠忽念忿怏怔怯怵怖怪怕怡性怩怫怛或戕房戾所承拉拌拄抿拂抹拒招披拓拔拋拈抨抽押拐拙拇拍抵拚抱拘拖拗拆抬拎放斧於旺昔易昌昆昂明昀昏昕昊"],["aa40","昇服朋杭枋枕東果杳杷枇枝林杯杰板枉松析杵枚枓杼杪杲欣武歧歿氓氛泣注泳沱泌泥河沽沾沼波沫法泓沸泄油況沮泗泅泱沿治泡泛泊沬泯泜泖泠"],["aaa1","炕炎炒炊炙爬爭爸版牧物狀狎狙狗狐玩玨玟玫玥甽疝疙疚的盂盲直知矽社祀祁秉秈空穹竺糾罔羌羋者肺肥肢肱股肫肩肴肪肯臥臾舍芳芝芙芭芽芟芹花芬芥芯芸芣芰芾芷虎虱初表軋迎返近邵邸邱邶采金長門阜陀阿阻附"],["ab40","陂隹雨青非亟亭亮信侵侯便俠俑俏保促侶俘俟俊俗侮俐俄係俚俎俞侷兗冒冑冠剎剃削前剌剋則勇勉勃勁匍南卻厚叛咬哀咨哎哉咸咦咳哇哂咽咪品"],["aba1","哄哈咯咫咱咻咩咧咿囿垂型垠垣垢城垮垓奕契奏奎奐姜姘姿姣姨娃姥姪姚姦威姻孩宣宦室客宥封屎屏屍屋峙峒巷帝帥帟幽庠度建弈弭彥很待徊律徇後徉怒思怠急怎怨恍恰恨恢恆恃恬恫恪恤扁拜挖按拼拭持拮拽指拱拷"],["ac40","拯括拾拴挑挂政故斫施既春昭映昧是星昨昱昤曷柿染柱柔某柬架枯柵柩柯柄柑枴柚查枸柏柞柳枰柙柢柝柒歪殃殆段毒毗氟泉洋洲洪流津洌洱洞洗"],["aca1","活洽派洶洛泵洹洧洸洩洮洵洎洫炫為炳炬炯炭炸炮炤爰牲牯牴狩狠狡玷珊玻玲珍珀玳甚甭畏界畎畋疫疤疥疢疣癸皆皇皈盈盆盃盅省盹相眉看盾盼眇矜砂研砌砍祆祉祈祇禹禺科秒秋穿突竿竽籽紂紅紀紉紇約紆缸美羿耄"],["ad40","耐耍耑耶胖胥胚胃胄背胡胛胎胞胤胝致舢苧范茅苣苛苦茄若茂茉苒苗英茁苜苔苑苞苓苟苯茆虐虹虻虺衍衫要觔計訂訃貞負赴赳趴軍軌述迦迢迪迥"],["ada1","迭迫迤迨郊郎郁郃酋酊重閂限陋陌降面革韋韭音頁風飛食首香乘亳倌倍倣俯倦倥俸倩倖倆值借倚倒們俺倀倔倨俱倡個候倘俳修倭倪俾倫倉兼冤冥冢凍凌准凋剖剜剔剛剝匪卿原厝叟哨唐唁唷哼哥哲唆哺唔哩哭員唉哮哪"],["ae40","哦唧唇哽唏圃圄埂埔埋埃堉夏套奘奚娑娘娜娟娛娓姬娠娣娩娥娌娉孫屘宰害家宴宮宵容宸射屑展屐峭峽峻峪峨峰島崁峴差席師庫庭座弱徒徑徐恙"],["aea1","恣恥恐恕恭恩息悄悟悚悍悔悌悅悖扇拳挈拿捎挾振捕捂捆捏捉挺捐挽挪挫挨捍捌效敉料旁旅時晉晏晃晒晌晅晁書朔朕朗校核案框桓根桂桔栩梳栗桌桑栽柴桐桀格桃株桅栓栘桁殊殉殷氣氧氨氦氤泰浪涕消涇浦浸海浙涓"],["af40","浬涉浮浚浴浩涌涊浹涅浥涔烊烘烤烙烈烏爹特狼狹狽狸狷玆班琉珮珠珪珞畔畝畜畚留疾病症疲疳疽疼疹痂疸皋皰益盍盎眩真眠眨矩砰砧砸砝破砷"],["afa1","砥砭砠砟砲祕祐祠祟祖神祝祗祚秤秣秧租秦秩秘窄窈站笆笑粉紡紗紋紊素索純紐紕級紜納紙紛缺罟羔翅翁耆耘耕耙耗耽耿胱脂胰脅胭胴脆胸胳脈能脊胼胯臭臬舀舐航舫舨般芻茫荒荔荊茸荐草茵茴荏茲茹茶茗荀茱茨荃"],["b040","虔蚊蚪蚓蚤蚩蚌蚣蚜衰衷袁袂衽衹記訐討訌訕訊託訓訖訏訑豈豺豹財貢起躬軒軔軏辱送逆迷退迺迴逃追逅迸邕郡郝郢酒配酌釘針釗釜釙閃院陣陡"],["b0a1","陛陝除陘陞隻飢馬骨高鬥鬲鬼乾偺偽停假偃偌做偉健偶偎偕偵側偷偏倏偯偭兜冕凰剪副勒務勘動匐匏匙匿區匾參曼商啪啦啄啞啡啃啊唱啖問啕唯啤唸售啜唬啣唳啁啗圈國圉域堅堊堆埠埤基堂堵執培夠奢娶婁婉婦婪婀"],["b140","娼婢婚婆婊孰寇寅寄寂宿密尉專將屠屜屝崇崆崎崛崖崢崑崩崔崙崤崧崗巢常帶帳帷康庸庶庵庾張強彗彬彩彫得徙從徘御徠徜恿患悉悠您惋悴惦悽"],["b1a1","情悻悵惜悼惘惕惆惟悸惚惇戚戛扈掠控捲掖探接捷捧掘措捱掩掉掃掛捫推掄授掙採掬排掏掀捻捩捨捺敝敖救教敗啟敏敘敕敔斜斛斬族旋旌旎晝晚晤晨晦晞曹勗望梁梯梢梓梵桿桶梱梧梗械梃棄梭梆梅梔條梨梟梡梂欲殺"],["b240","毫毬氫涎涼淳淙液淡淌淤添淺清淇淋涯淑涮淞淹涸混淵淅淒渚涵淚淫淘淪深淮淨淆淄涪淬涿淦烹焉焊烽烯爽牽犁猜猛猖猓猙率琅琊球理現琍瓠瓶"],["b2a1","瓷甜產略畦畢異疏痔痕疵痊痍皎盔盒盛眷眾眼眶眸眺硫硃硎祥票祭移窒窕笠笨笛第符笙笞笮粒粗粕絆絃統紮紹紼絀細紳組累終紲紱缽羞羚翌翎習耜聊聆脯脖脣脫脩脰脤舂舵舷舶船莎莞莘荸莢莖莽莫莒莊莓莉莠荷荻荼"],["b340","莆莧處彪蛇蛀蚶蛄蚵蛆蛋蚱蚯蛉術袞袈被袒袖袍袋覓規訪訝訣訥許設訟訛訢豉豚販責貫貨貪貧赧赦趾趺軛軟這逍通逗連速逝逐逕逞造透逢逖逛途"],["b3a1","部郭都酗野釵釦釣釧釭釩閉陪陵陳陸陰陴陶陷陬雀雪雩章竟頂頃魚鳥鹵鹿麥麻傢傍傅備傑傀傖傘傚最凱割剴創剩勞勝勛博厥啻喀喧啼喊喝喘喂喜喪喔喇喋喃喳單喟唾喲喚喻喬喱啾喉喫喙圍堯堪場堤堰報堡堝堠壹壺奠"],["b440","婷媚婿媒媛媧孳孱寒富寓寐尊尋就嵌嵐崴嵇巽幅帽幀幃幾廊廁廂廄弼彭復循徨惑惡悲悶惠愜愣惺愕惰惻惴慨惱愎惶愉愀愒戟扉掣掌描揀揩揉揆揍"],["b4a1","插揣提握揖揭揮捶援揪換摒揚揹敞敦敢散斑斐斯普晰晴晶景暑智晾晷曾替期朝棺棕棠棘棗椅棟棵森棧棹棒棲棣棋棍植椒椎棉棚楮棻款欺欽殘殖殼毯氮氯氬港游湔渡渲湧湊渠渥渣減湛湘渤湖湮渭渦湯渴湍渺測湃渝渾滋"],["b540","溉渙湎湣湄湲湩湟焙焚焦焰無然煮焜牌犄犀猶猥猴猩琺琪琳琢琥琵琶琴琯琛琦琨甥甦畫番痢痛痣痙痘痞痠登發皖皓皴盜睏短硝硬硯稍稈程稅稀窘"],["b5a1","窗窖童竣等策筆筐筒答筍筋筏筑粟粥絞結絨絕紫絮絲絡給絢絰絳善翔翕耋聒肅腕腔腋腑腎脹腆脾腌腓腴舒舜菩萃菸萍菠菅萋菁華菱菴著萊菰萌菌菽菲菊萸萎萄菜萇菔菟虛蛟蛙蛭蛔蛛蛤蛐蛞街裁裂袱覃視註詠評詞証詁"],["b640","詔詛詐詆訴診訶詖象貂貯貼貳貽賁費賀貴買貶貿貸越超趁跎距跋跚跑跌跛跆軻軸軼辜逮逵週逸進逶鄂郵鄉郾酣酥量鈔鈕鈣鈉鈞鈍鈐鈇鈑閔閏開閑"],["b6a1","間閒閎隊階隋陽隅隆隍陲隄雁雅雄集雇雯雲韌項順須飧飪飯飩飲飭馮馭黃黍黑亂傭債傲傳僅傾催傷傻傯僇剿剷剽募勦勤勢勣匯嗟嗨嗓嗦嗎嗜嗇嗑嗣嗤嗯嗚嗡嗅嗆嗥嗉園圓塞塑塘塗塚塔填塌塭塊塢塒塋奧嫁嫉嫌媾媽媼"],["b740","媳嫂媲嵩嵯幌幹廉廈弒彙徬微愚意慈感想愛惹愁愈慎慌慄慍愾愴愧愍愆愷戡戢搓搾搞搪搭搽搬搏搜搔損搶搖搗搆敬斟新暗暉暇暈暖暄暘暍會榔業"],["b7a1","楚楷楠楔極椰概楊楨楫楞楓楹榆楝楣楛歇歲毀殿毓毽溢溯滓溶滂源溝滇滅溥溘溼溺溫滑準溜滄滔溪溧溴煎煙煩煤煉照煜煬煦煌煥煞煆煨煖爺牒猷獅猿猾瑯瑚瑕瑟瑞瑁琿瑙瑛瑜當畸瘀痰瘁痲痱痺痿痴痳盞盟睛睫睦睞督"],["b840","睹睪睬睜睥睨睢矮碎碰碗碘碌碉硼碑碓硿祺祿禁萬禽稜稚稠稔稟稞窟窠筷節筠筮筧粱粳粵經絹綑綁綏絛置罩罪署義羨群聖聘肆肄腱腰腸腥腮腳腫"],["b8a1","腹腺腦舅艇蒂葷落萱葵葦葫葉葬葛萼萵葡董葩葭葆虞虜號蛹蜓蜈蜇蜀蛾蛻蜂蜃蜆蜊衙裟裔裙補裘裝裡裊裕裒覜解詫該詳試詩詰誇詼詣誠話誅詭詢詮詬詹詻訾詨豢貊貉賊資賈賄貲賃賂賅跡跟跨路跳跺跪跤跦躲較載軾輊"],["b940","辟農運遊道遂達逼違遐遇遏過遍遑逾遁鄒鄗酬酪酩釉鈷鉗鈸鈽鉀鈾鉛鉋鉤鉑鈴鉉鉍鉅鈹鈿鉚閘隘隔隕雍雋雉雊雷電雹零靖靴靶預頑頓頊頒頌飼飴"],["b9a1","飽飾馳馱馴髡鳩麂鼎鼓鼠僧僮僥僖僭僚僕像僑僱僎僩兢凳劃劂匱厭嗾嘀嘛嘗嗽嘔嘆嘉嘍嘎嗷嘖嘟嘈嘐嗶團圖塵塾境墓墊塹墅塽壽夥夢夤奪奩嫡嫦嫩嫗嫖嫘嫣孵寞寧寡寥實寨寢寤察對屢嶄嶇幛幣幕幗幔廓廖弊彆彰徹慇"],["ba40","愿態慷慢慣慟慚慘慵截撇摘摔撤摸摟摺摑摧搴摭摻敲斡旗旖暢暨暝榜榨榕槁榮槓構榛榷榻榫榴槐槍榭槌榦槃榣歉歌氳漳演滾漓滴漩漾漠漬漏漂漢"],["baa1","滿滯漆漱漸漲漣漕漫漯澈漪滬漁滲滌滷熔熙煽熊熄熒爾犒犖獄獐瑤瑣瑪瑰瑭甄疑瘧瘍瘋瘉瘓盡監瞄睽睿睡磁碟碧碳碩碣禎福禍種稱窪窩竭端管箕箋筵算箝箔箏箸箇箄粹粽精綻綰綜綽綾綠緊綴網綱綺綢綿綵綸維緒緇綬"],["bb40","罰翠翡翟聞聚肇腐膀膏膈膊腿膂臧臺與舔舞艋蓉蒿蓆蓄蒙蒞蒲蒜蓋蒸蓀蓓蒐蒼蓑蓊蜿蜜蜻蜢蜥蜴蜘蝕蜷蜩裳褂裴裹裸製裨褚裯誦誌語誣認誡誓誤"],["bba1","說誥誨誘誑誚誧豪貍貌賓賑賒赫趙趕跼輔輒輕輓辣遠遘遜遣遙遞遢遝遛鄙鄘鄞酵酸酷酴鉸銀銅銘銖鉻銓銜銨鉼銑閡閨閩閣閥閤隙障際雌雒需靼鞅韶頗領颯颱餃餅餌餉駁骯骰髦魁魂鳴鳶鳳麼鼻齊億儀僻僵價儂儈儉儅凜"],["bc40","劇劈劉劍劊勰厲嘮嘻嘹嘲嘿嘴嘩噓噎噗噴嘶嘯嘰墀墟增墳墜墮墩墦奭嬉嫻嬋嫵嬌嬈寮寬審寫層履嶝嶔幢幟幡廢廚廟廝廣廠彈影德徵慶慧慮慝慕憂"],["bca1","慼慰慫慾憧憐憫憎憬憚憤憔憮戮摩摯摹撞撲撈撐撰撥撓撕撩撒撮播撫撚撬撙撢撳敵敷數暮暫暴暱樣樟槨樁樞標槽模樓樊槳樂樅槭樑歐歎殤毅毆漿潼澄潑潦潔澆潭潛潸潮澎潺潰潤澗潘滕潯潠潟熟熬熱熨牖犛獎獗瑩璋璃"],["bd40","瑾璀畿瘠瘩瘟瘤瘦瘡瘢皚皺盤瞎瞇瞌瞑瞋磋磅確磊碾磕碼磐稿稼穀稽稷稻窯窮箭箱範箴篆篇篁箠篌糊締練緯緻緘緬緝編緣線緞緩綞緙緲緹罵罷羯"],["bda1","翩耦膛膜膝膠膚膘蔗蔽蔚蓮蔬蔭蔓蔑蔣蔡蔔蓬蔥蓿蔆螂蝴蝶蝠蝦蝸蝨蝙蝗蝌蝓衛衝褐複褒褓褕褊誼諒談諄誕請諸課諉諂調誰論諍誶誹諛豌豎豬賠賞賦賤賬賭賢賣賜質賡赭趟趣踫踐踝踢踏踩踟踡踞躺輝輛輟輩輦輪輜輞"],["be40","輥適遮遨遭遷鄰鄭鄧鄱醇醉醋醃鋅銻銷鋪銬鋤鋁銳銼鋒鋇鋰銲閭閱霄霆震霉靠鞍鞋鞏頡頫頜颳養餓餒餘駝駐駟駛駑駕駒駙骷髮髯鬧魅魄魷魯鴆鴉"],["bea1","鴃麩麾黎墨齒儒儘儔儐儕冀冪凝劑劓勳噙噫噹噩噤噸噪器噥噱噯噬噢噶壁墾壇壅奮嬝嬴學寰導彊憲憑憩憊懍憶憾懊懈戰擅擁擋撻撼據擄擇擂操撿擒擔撾整曆曉暹曄曇暸樽樸樺橙橫橘樹橄橢橡橋橇樵機橈歙歷氅濂澱澡"],["bf40","濃澤濁澧澳激澹澶澦澠澴熾燉燐燒燈燕熹燎燙燜燃燄獨璜璣璘璟璞瓢甌甍瘴瘸瘺盧盥瞠瞞瞟瞥磨磚磬磧禦積穎穆穌穋窺篙簑築篤篛篡篩篦糕糖縊"],["bfa1","縑縈縛縣縞縝縉縐罹羲翰翱翮耨膳膩膨臻興艘艙蕊蕙蕈蕨蕩蕃蕉蕭蕪蕞螃螟螞螢融衡褪褲褥褫褡親覦諦諺諫諱謀諜諧諮諾謁謂諷諭諳諶諼豫豭貓賴蹄踱踴蹂踹踵輻輯輸輳辨辦遵遴選遲遼遺鄴醒錠錶鋸錳錯錢鋼錫錄錚"],["c040","錐錦錡錕錮錙閻隧隨險雕霎霑霖霍霓霏靛靜靦鞘頰頸頻頷頭頹頤餐館餞餛餡餚駭駢駱骸骼髻髭鬨鮑鴕鴣鴦鴨鴒鴛默黔龍龜優償儡儲勵嚎嚀嚐嚅嚇"],["c0a1","嚏壕壓壑壎嬰嬪嬤孺尷屨嶼嶺嶽嶸幫彌徽應懂懇懦懋戲戴擎擊擘擠擰擦擬擱擢擭斂斃曙曖檀檔檄檢檜櫛檣橾檗檐檠歜殮毚氈濘濱濟濠濛濤濫濯澀濬濡濩濕濮濰燧營燮燦燥燭燬燴燠爵牆獰獲璩環璦璨癆療癌盪瞳瞪瞰瞬"],["c140","瞧瞭矯磷磺磴磯礁禧禪穗窿簇簍篾篷簌篠糠糜糞糢糟糙糝縮績繆縷縲繃縫總縱繅繁縴縹繈縵縿縯罄翳翼聱聲聰聯聳臆臃膺臂臀膿膽臉膾臨舉艱薪"],["c1a1","薄蕾薜薑薔薯薛薇薨薊虧蟀蟑螳蟒蟆螫螻螺蟈蟋褻褶襄褸褽覬謎謗謙講謊謠謝謄謐豁谿豳賺賽購賸賻趨蹉蹋蹈蹊轄輾轂轅輿避遽還邁邂邀鄹醣醞醜鍍鎂錨鍵鍊鍥鍋錘鍾鍬鍛鍰鍚鍔闊闋闌闈闆隱隸雖霜霞鞠韓顆颶餵騁"],["c240","駿鮮鮫鮪鮭鴻鴿麋黏點黜黝黛鼾齋叢嚕嚮壙壘嬸彝懣戳擴擲擾攆擺擻擷斷曜朦檳檬櫃檻檸櫂檮檯歟歸殯瀉瀋濾瀆濺瀑瀏燻燼燾燸獷獵璧璿甕癖癘"],["c2a1","癒瞽瞿瞻瞼礎禮穡穢穠竄竅簫簧簪簞簣簡糧織繕繞繚繡繒繙罈翹翻職聶臍臏舊藏薩藍藐藉薰薺薹薦蟯蟬蟲蟠覆覲觴謨謹謬謫豐贅蹙蹣蹦蹤蹟蹕軀轉轍邇邃邈醫醬釐鎔鎊鎖鎢鎳鎮鎬鎰鎘鎚鎗闔闖闐闕離雜雙雛雞霤鞣鞦"],["c340","鞭韹額顏題顎顓颺餾餿餽餮馥騎髁鬃鬆魏魎魍鯊鯉鯽鯈鯀鵑鵝鵠黠鼕鼬儳嚥壞壟壢寵龐廬懲懷懶懵攀攏曠曝櫥櫝櫚櫓瀛瀟瀨瀚瀝瀕瀘爆爍牘犢獸"],["c3a1","獺璽瓊瓣疇疆癟癡矇礙禱穫穩簾簿簸簽簷籀繫繭繹繩繪羅繳羶羹羸臘藩藝藪藕藤藥藷蟻蠅蠍蟹蟾襠襟襖襞譁譜識證譚譎譏譆譙贈贊蹼蹲躇蹶蹬蹺蹴轔轎辭邊邋醱醮鏡鏑鏟鏃鏈鏜鏝鏖鏢鏍鏘鏤鏗鏨關隴難霪霧靡韜韻類"],["c440","願顛颼饅饉騖騙鬍鯨鯧鯖鯛鶉鵡鵲鵪鵬麒麗麓麴勸嚨嚷嚶嚴嚼壤孀孃孽寶巉懸懺攘攔攙曦朧櫬瀾瀰瀲爐獻瓏癢癥礦礪礬礫竇競籌籃籍糯糰辮繽繼"],["c4a1","纂罌耀臚艦藻藹蘑藺蘆蘋蘇蘊蠔蠕襤覺觸議譬警譯譟譫贏贍躉躁躅躂醴釋鐘鐃鏽闡霰飄饒饑馨騫騰騷騵鰓鰍鹹麵黨鼯齟齣齡儷儸囁囀囂夔屬巍懼懾攝攜斕曩櫻欄櫺殲灌爛犧瓖瓔癩矓籐纏續羼蘗蘭蘚蠣蠢蠡蠟襪襬覽譴"],["c540","護譽贓躊躍躋轟辯醺鐮鐳鐵鐺鐸鐲鐫闢霸霹露響顧顥饗驅驃驀騾髏魔魑鰭鰥鶯鶴鷂鶸麝黯鼙齜齦齧儼儻囈囊囉孿巔巒彎懿攤權歡灑灘玀瓤疊癮癬"],["c5a1","禳籠籟聾聽臟襲襯觼讀贖贗躑躓轡酈鑄鑑鑒霽霾韃韁顫饕驕驍髒鬚鱉鰱鰾鰻鷓鷗鼴齬齪龔囌巖戀攣攫攪曬欐瓚竊籤籣籥纓纖纔臢蘸蘿蠱變邐邏鑣鑠鑤靨顯饜驚驛驗髓體髑鱔鱗鱖鷥麟黴囑壩攬灞癱癲矗罐羈蠶蠹衢讓讒"],["c640","讖艷贛釀鑪靂靈靄韆顰驟鬢魘鱟鷹鷺鹼鹽鼇齷齲廳欖灣籬籮蠻觀躡釁鑲鑰顱饞髖鬣黌灤矚讚鑷韉驢驥纜讜躪釅鑽鑾鑼鱷鱸黷豔鑿鸚爨驪鬱鸛鸞籲"],["c940","乂乜凵匚厂万丌乇亍囗兀屮彳丏冇与丮亓仂仉仈冘勼卬厹圠夃夬尐巿旡殳毌气爿丱丼仨仜仩仡仝仚刌匜卌圢圣夗夯宁宄尒尻屴屳帄庀庂忉戉扐氕"],["c9a1","氶汃氿氻犮犰玊禸肊阞伎优伬仵伔仱伀价伈伝伂伅伢伓伄仴伒冱刓刉刐劦匢匟卍厊吇囡囟圮圪圴夼妀奼妅奻奾奷奿孖尕尥屼屺屻屾巟幵庄异弚彴忕忔忏扜扞扤扡扦扢扙扠扚扥旯旮朾朹朸朻机朿朼朳氘汆汒汜汏汊汔汋"],["ca40","汌灱牞犴犵玎甪癿穵网艸艼芀艽艿虍襾邙邗邘邛邔阢阤阠阣佖伻佢佉体佤伾佧佒佟佁佘伭伳伿佡冏冹刜刞刡劭劮匉卣卲厎厏吰吷吪呔呅吙吜吥吘"],["caa1","吽呏呁吨吤呇囮囧囥坁坅坌坉坋坒夆奀妦妘妠妗妎妢妐妏妧妡宎宒尨尪岍岏岈岋岉岒岊岆岓岕巠帊帎庋庉庌庈庍弅弝彸彶忒忑忐忭忨忮忳忡忤忣忺忯忷忻怀忴戺抃抌抎抏抔抇扱扻扺扰抁抈扷扽扲扴攷旰旴旳旲旵杅杇"],["cb40","杙杕杌杈杝杍杚杋毐氙氚汸汧汫沄沋沏汱汯汩沚汭沇沕沜汦汳汥汻沎灴灺牣犿犽狃狆狁犺狅玕玗玓玔玒町甹疔疕皁礽耴肕肙肐肒肜芐芏芅芎芑芓"],["cba1","芊芃芄豸迉辿邟邡邥邞邧邠阰阨阯阭丳侘佼侅佽侀侇佶佴侉侄佷佌侗佪侚佹侁佸侐侜侔侞侒侂侕佫佮冞冼冾刵刲刳剆刱劼匊匋匼厒厔咇呿咁咑咂咈呫呺呾呥呬呴呦咍呯呡呠咘呣呧呤囷囹坯坲坭坫坱坰坶垀坵坻坳坴坢"],["cc40","坨坽夌奅妵妺姏姎妲姌姁妶妼姃姖妱妽姀姈妴姇孢孥宓宕屄屇岮岤岠岵岯岨岬岟岣岭岢岪岧岝岥岶岰岦帗帔帙弨弢弣弤彔徂彾彽忞忥怭怦怙怲怋"],["cca1","怴怊怗怳怚怞怬怢怍怐怮怓怑怌怉怜戔戽抭抴拑抾抪抶拊抮抳抯抻抩抰抸攽斨斻昉旼昄昒昈旻昃昋昍昅旽昑昐曶朊枅杬枎枒杶杻枘枆构杴枍枌杺枟枑枙枃杽极杸杹枔欥殀歾毞氝沓泬泫泮泙沶泔沭泧沷泐泂沺泃泆泭泲"],["cd40","泒泝沴沊沝沀泞泀洰泍泇沰泹泏泩泑炔炘炅炓炆炄炑炖炂炚炃牪狖狋狘狉狜狒狔狚狌狑玤玡玭玦玢玠玬玝瓝瓨甿畀甾疌疘皯盳盱盰盵矸矼矹矻矺"],["cda1","矷祂礿秅穸穻竻籵糽耵肏肮肣肸肵肭舠芠苀芫芚芘芛芵芧芮芼芞芺芴芨芡芩苂芤苃芶芢虰虯虭虮豖迒迋迓迍迖迕迗邲邴邯邳邰阹阽阼阺陃俍俅俓侲俉俋俁俔俜俙侻侳俛俇俖侺俀侹俬剄剉勀勂匽卼厗厖厙厘咺咡咭咥哏"],["ce40","哃茍咷咮哖咶哅哆咠呰咼咢咾呲哞咰垵垞垟垤垌垗垝垛垔垘垏垙垥垚垕壴复奓姡姞姮娀姱姝姺姽姼姶姤姲姷姛姩姳姵姠姾姴姭宨屌峐峘峌峗峋峛"],["cea1","峞峚峉峇峊峖峓峔峏峈峆峎峟峸巹帡帢帣帠帤庰庤庢庛庣庥弇弮彖徆怷怹恔恲恞恅恓恇恉恛恌恀恂恟怤恄恘恦恮扂扃拏挍挋拵挎挃拫拹挏挌拸拶挀挓挔拺挕拻拰敁敃斪斿昶昡昲昵昜昦昢昳昫昺昝昴昹昮朏朐柁柲柈枺"],["cf40","柜枻柸柘柀枷柅柫柤柟枵柍枳柷柶柮柣柂枹柎柧柰枲柼柆柭柌枮柦柛柺柉柊柃柪柋欨殂殄殶毖毘毠氠氡洨洴洭洟洼洿洒洊泚洳洄洙洺洚洑洀洝浂"],["cfa1","洁洘洷洃洏浀洇洠洬洈洢洉洐炷炟炾炱炰炡炴炵炩牁牉牊牬牰牳牮狊狤狨狫狟狪狦狣玅珌珂珈珅玹玶玵玴珫玿珇玾珃珆玸珋瓬瓮甮畇畈疧疪癹盄眈眃眄眅眊盷盻盺矧矨砆砑砒砅砐砏砎砉砃砓祊祌祋祅祄秕种秏秖秎窀"],["d040","穾竑笀笁籺籸籹籿粀粁紃紈紁罘羑羍羾耇耎耏耔耷胘胇胠胑胈胂胐胅胣胙胜胊胕胉胏胗胦胍臿舡芔苙苾苹茇苨茀苕茺苫苖苴苬苡苲苵茌苻苶苰苪"],["d0a1","苤苠苺苳苭虷虴虼虳衁衎衧衪衩觓訄訇赲迣迡迮迠郱邽邿郕郅邾郇郋郈釔釓陔陏陑陓陊陎倞倅倇倓倢倰倛俵俴倳倷倬俶俷倗倜倠倧倵倯倱倎党冔冓凊凄凅凈凎剡剚剒剞剟剕剢勍匎厞唦哢唗唒哧哳哤唚哿唄唈哫唑唅哱"],["d140","唊哻哷哸哠唎唃唋圁圂埌堲埕埒垺埆垽垼垸垶垿埇埐垹埁夎奊娙娖娭娮娕娏娗娊娞娳孬宧宭宬尃屖屔峬峿峮峱峷崀峹帩帨庨庮庪庬弳弰彧恝恚恧"],["d1a1","恁悢悈悀悒悁悝悃悕悛悗悇悜悎戙扆拲挐捖挬捄捅挶捃揤挹捋捊挼挩捁挴捘捔捙挭捇挳捚捑挸捗捀捈敊敆旆旃旄旂晊晟晇晑朒朓栟栚桉栲栳栻桋桏栖栱栜栵栫栭栯桎桄栴栝栒栔栦栨栮桍栺栥栠欬欯欭欱欴歭肂殈毦毤"],["d240","毨毣毢毧氥浺浣浤浶洍浡涒浘浢浭浯涑涍淯浿涆浞浧浠涗浰浼浟涂涘洯浨涋浾涀涄洖涃浻浽浵涐烜烓烑烝烋缹烢烗烒烞烠烔烍烅烆烇烚烎烡牂牸"],["d2a1","牷牶猀狺狴狾狶狳狻猁珓珙珥珖玼珧珣珩珜珒珛珔珝珚珗珘珨瓞瓟瓴瓵甡畛畟疰痁疻痄痀疿疶疺皊盉眝眛眐眓眒眣眑眕眙眚眢眧砣砬砢砵砯砨砮砫砡砩砳砪砱祔祛祏祜祓祒祑秫秬秠秮秭秪秜秞秝窆窉窅窋窌窊窇竘笐"],["d340","笄笓笅笏笈笊笎笉笒粄粑粊粌粈粍粅紞紝紑紎紘紖紓紟紒紏紌罜罡罞罠罝罛羖羒翃翂翀耖耾耹胺胲胹胵脁胻脀舁舯舥茳茭荄茙荑茥荖茿荁茦茜茢"],["d3a1","荂荎茛茪茈茼荍茖茤茠茷茯茩荇荅荌荓茞茬荋茧荈虓虒蚢蚨蚖蚍蚑蚞蚇蚗蚆蚋蚚蚅蚥蚙蚡蚧蚕蚘蚎蚝蚐蚔衃衄衭衵衶衲袀衱衿衯袃衾衴衼訒豇豗豻貤貣赶赸趵趷趶軑軓迾迵适迿迻逄迼迶郖郠郙郚郣郟郥郘郛郗郜郤酐"],["d440","酎酏釕釢釚陜陟隼飣髟鬯乿偰偪偡偞偠偓偋偝偲偈偍偁偛偊偢倕偅偟偩偫偣偤偆偀偮偳偗偑凐剫剭剬剮勖勓匭厜啵啶唼啍啐唴唪啑啢唶唵唰啒啅"],["d4a1","唌唲啥啎唹啈唭唻啀啋圊圇埻堔埢埶埜埴堀埭埽堈埸堋埳埏堇埮埣埲埥埬埡堎埼堐埧堁堌埱埩埰堍堄奜婠婘婕婧婞娸娵婭婐婟婥婬婓婤婗婃婝婒婄婛婈媎娾婍娹婌婰婩婇婑婖婂婜孲孮寁寀屙崞崋崝崚崠崌崨崍崦崥崏"],["d540","崰崒崣崟崮帾帴庱庴庹庲庳弶弸徛徖徟悊悐悆悾悰悺惓惔惏惤惙惝惈悱惛悷惊悿惃惍惀挲捥掊掂捽掽掞掭掝掗掫掎捯掇掐据掯捵掜捭掮捼掤挻掟"],["d5a1","捸掅掁掑掍捰敓旍晥晡晛晙晜晢朘桹梇梐梜桭桮梮梫楖桯梣梬梩桵桴梲梏桷梒桼桫桲梪梀桱桾梛梖梋梠梉梤桸桻梑梌梊桽欶欳欷欸殑殏殍殎殌氪淀涫涴涳湴涬淩淢涷淶淔渀淈淠淟淖涾淥淜淝淛淴淊涽淭淰涺淕淂淏淉"],["d640","淐淲淓淽淗淍淣涻烺焍烷焗烴焌烰焄烳焐烼烿焆焓焀烸烶焋焂焎牾牻牼牿猝猗猇猑猘猊猈狿猏猞玈珶珸珵琄琁珽琇琀珺珼珿琌琋珴琈畤畣痎痒痏"],["d6a1","痋痌痑痐皏皉盓眹眯眭眱眲眴眳眽眥眻眵硈硒硉硍硊硌砦硅硐祤祧祩祪祣祫祡离秺秸秶秷窏窔窐笵筇笴笥笰笢笤笳笘笪笝笱笫笭笯笲笸笚笣粔粘粖粣紵紽紸紶紺絅紬紩絁絇紾紿絊紻紨罣羕羜羝羛翊翋翍翐翑翇翏翉耟"],["d740","耞耛聇聃聈脘脥脙脛脭脟脬脞脡脕脧脝脢舑舸舳舺舴舲艴莐莣莨莍荺荳莤荴莏莁莕莙荵莔莩荽莃莌莝莛莪莋荾莥莯莈莗莰荿莦莇莮荶莚虙虖蚿蚷"],["d7a1","蛂蛁蛅蚺蚰蛈蚹蚳蚸蛌蚴蚻蚼蛃蚽蚾衒袉袕袨袢袪袚袑袡袟袘袧袙袛袗袤袬袌袓袎覂觖觙觕訰訧訬訞谹谻豜豝豽貥赽赻赹趼跂趹趿跁軘軞軝軜軗軠軡逤逋逑逜逌逡郯郪郰郴郲郳郔郫郬郩酖酘酚酓酕釬釴釱釳釸釤釹釪"],["d840","釫釷釨釮镺閆閈陼陭陫陱陯隿靪頄飥馗傛傕傔傞傋傣傃傌傎傝偨傜傒傂傇兟凔匒匑厤厧喑喨喥喭啷噅喢喓喈喏喵喁喣喒喤啽喌喦啿喕喡喎圌堩堷"],["d8a1","堙堞堧堣堨埵塈堥堜堛堳堿堶堮堹堸堭堬堻奡媯媔媟婺媢媞婸媦婼媥媬媕媮娷媄媊媗媃媋媩婻婽媌媜媏媓媝寪寍寋寔寑寊寎尌尰崷嵃嵫嵁嵋崿崵嵑嵎嵕崳崺嵒崽崱嵙嵂崹嵉崸崼崲崶嵀嵅幄幁彘徦徥徫惉悹惌惢惎惄愔"],["d940","惲愊愖愅惵愓惸惼惾惁愃愘愝愐惿愄愋扊掔掱掰揎揥揨揯揃撝揳揊揠揶揕揲揵摡揟掾揝揜揄揘揓揂揇揌揋揈揰揗揙攲敧敪敤敜敨敥斌斝斞斮旐旒"],["d9a1","晼晬晻暀晱晹晪晲朁椌棓椄棜椪棬棪棱椏棖棷棫棤棶椓椐棳棡椇棌椈楰梴椑棯棆椔棸棐棽棼棨椋椊椗棎棈棝棞棦棴棑椆棔棩椕椥棇欹欻欿欼殔殗殙殕殽毰毲毳氰淼湆湇渟湉溈渼渽湅湢渫渿湁湝湳渜渳湋湀湑渻渃渮湞"],["da40","湨湜湡渱渨湠湱湫渹渢渰湓湥渧湸湤湷湕湹湒湦渵渶湚焠焞焯烻焮焱焣焥焢焲焟焨焺焛牋牚犈犉犆犅犋猒猋猰猢猱猳猧猲猭猦猣猵猌琮琬琰琫琖"],["daa1","琚琡琭琱琤琣琝琩琠琲瓻甯畯畬痧痚痡痦痝痟痤痗皕皒盚睆睇睄睍睅睊睎睋睌矞矬硠硤硥硜硭硱硪确硰硩硨硞硢祴祳祲祰稂稊稃稌稄窙竦竤筊笻筄筈筌筎筀筘筅粢粞粨粡絘絯絣絓絖絧絪絏絭絜絫絒絔絩絑絟絎缾缿罥"],["db40","罦羢羠羡翗聑聏聐胾胔腃腊腒腏腇脽腍脺臦臮臷臸臹舄舼舽舿艵茻菏菹萣菀菨萒菧菤菼菶萐菆菈菫菣莿萁菝菥菘菿菡菋菎菖菵菉萉萏菞萑萆菂菳"],["dba1","菕菺菇菑菪萓菃菬菮菄菻菗菢萛菛菾蛘蛢蛦蛓蛣蛚蛪蛝蛫蛜蛬蛩蛗蛨蛑衈衖衕袺裗袹袸裀袾袶袼袷袽袲褁裉覕覘覗觝觚觛詎詍訹詙詀詗詘詄詅詒詈詑詊詌詏豟貁貀貺貾貰貹貵趄趀趉跘跓跍跇跖跜跏跕跙跈跗跅軯軷軺"],["dc40","軹軦軮軥軵軧軨軶軫軱軬軴軩逭逴逯鄆鄬鄄郿郼鄈郹郻鄁鄀鄇鄅鄃酡酤酟酢酠鈁鈊鈥鈃鈚鈦鈏鈌鈀鈒釿釽鈆鈄鈧鈂鈜鈤鈙鈗鈅鈖镻閍閌閐隇陾隈"],["dca1","隉隃隀雂雈雃雱雰靬靰靮頇颩飫鳦黹亃亄亶傽傿僆傮僄僊傴僈僂傰僁傺傱僋僉傶傸凗剺剸剻剼嗃嗛嗌嗐嗋嗊嗝嗀嗔嗄嗩喿嗒喍嗏嗕嗢嗖嗈嗲嗍嗙嗂圔塓塨塤塏塍塉塯塕塎塝塙塥塛堽塣塱壼嫇嫄嫋媺媸媱媵媰媿嫈媻嫆"],["dd40","媷嫀嫊媴媶嫍媹媐寖寘寙尟尳嵱嵣嵊嵥嵲嵬嵞嵨嵧嵢巰幏幎幊幍幋廅廌廆廋廇彀徯徭惷慉慊愫慅愶愲愮慆愯慏愩慀戠酨戣戥戤揅揱揫搐搒搉搠搤"],["dda1","搳摃搟搕搘搹搷搢搣搌搦搰搨摁搵搯搊搚摀搥搧搋揧搛搮搡搎敯斒旓暆暌暕暐暋暊暙暔晸朠楦楟椸楎楢楱椿楅楪椹楂楗楙楺楈楉椵楬椳椽楥棰楸椴楩楀楯楄楶楘楁楴楌椻楋椷楜楏楑椲楒椯楻椼歆歅歃歂歈歁殛嗀毻毼"],["de40","毹毷毸溛滖滈溏滀溟溓溔溠溱溹滆滒溽滁溞滉溷溰滍溦滏溲溾滃滜滘溙溒溎溍溤溡溿溳滐滊溗溮溣煇煔煒煣煠煁煝煢煲煸煪煡煂煘煃煋煰煟煐煓"],["dea1","煄煍煚牏犍犌犑犐犎猼獂猻猺獀獊獉瑄瑊瑋瑒瑑瑗瑀瑏瑐瑎瑂瑆瑍瑔瓡瓿瓾瓽甝畹畷榃痯瘏瘃痷痾痼痹痸瘐痻痶痭痵痽皙皵盝睕睟睠睒睖睚睩睧睔睙睭矠碇碚碔碏碄碕碅碆碡碃硹碙碀碖硻祼禂祽祹稑稘稙稒稗稕稢稓"],["df40","稛稐窣窢窞竫筦筤筭筴筩筲筥筳筱筰筡筸筶筣粲粴粯綈綆綀綍絿綅絺綎絻綃絼綌綔綄絽綒罭罫罧罨罬羦羥羧翛翜耡腤腠腷腜腩腛腢腲朡腞腶腧腯"],["dfa1","腄腡舝艉艄艀艂艅蓱萿葖葶葹蒏蒍葥葑葀蒆葧萰葍葽葚葙葴葳葝蔇葞萷萺萴葺葃葸萲葅萩菙葋萯葂萭葟葰萹葎葌葒葯蓅蒎萻葇萶萳葨葾葄萫葠葔葮葐蜋蜄蛷蜌蛺蛖蛵蝍蛸蜎蜉蜁蛶蜍蜅裖裋裍裎裞裛裚裌裐覅覛觟觥觤"],["e040","觡觠觢觜触詶誆詿詡訿詷誂誄詵誃誁詴詺谼豋豊豥豤豦貆貄貅賌赨赩趑趌趎趏趍趓趔趐趒跰跠跬跱跮跐跩跣跢跧跲跫跴輆軿輁輀輅輇輈輂輋遒逿"],["e0a1","遄遉逽鄐鄍鄏鄑鄖鄔鄋鄎酮酯鉈鉒鈰鈺鉦鈳鉥鉞銃鈮鉊鉆鉭鉬鉏鉠鉧鉯鈶鉡鉰鈱鉔鉣鉐鉲鉎鉓鉌鉖鈲閟閜閞閛隒隓隑隗雎雺雽雸雵靳靷靸靲頏頍頎颬飶飹馯馲馰馵骭骫魛鳪鳭鳧麀黽僦僔僗僨僳僛僪僝僤僓僬僰僯僣僠"],["e140","凘劀劁勩勫匰厬嘧嘕嘌嘒嗼嘏嘜嘁嘓嘂嗺嘝嘄嗿嗹墉塼墐墘墆墁塿塴墋塺墇墑墎塶墂墈塻墔墏壾奫嫜嫮嫥嫕嫪嫚嫭嫫嫳嫢嫠嫛嫬嫞嫝嫙嫨嫟孷寠"],["e1a1","寣屣嶂嶀嵽嶆嵺嶁嵷嶊嶉嶈嵾嵼嶍嵹嵿幘幙幓廘廑廗廎廜廕廙廒廔彄彃彯徶愬愨慁慞慱慳慒慓慲慬憀慴慔慺慛慥愻慪慡慖戩戧戫搫摍摛摝摴摶摲摳摽摵摦撦摎撂摞摜摋摓摠摐摿搿摬摫摙摥摷敳斠暡暠暟朅朄朢榱榶槉"],["e240","榠槎榖榰榬榼榑榙榎榧榍榩榾榯榿槄榽榤槔榹槊榚槏榳榓榪榡榞槙榗榐槂榵榥槆歊歍歋殞殟殠毃毄毾滎滵滱漃漥滸漷滻漮漉潎漙漚漧漘漻漒滭漊"],["e2a1","漶潳滹滮漭潀漰漼漵滫漇漎潃漅滽滶漹漜滼漺漟漍漞漈漡熇熐熉熀熅熂熏煻熆熁熗牄牓犗犕犓獃獍獑獌瑢瑳瑱瑵瑲瑧瑮甀甂甃畽疐瘖瘈瘌瘕瘑瘊瘔皸瞁睼瞅瞂睮瞀睯睾瞃碲碪碴碭碨硾碫碞碥碠碬碢碤禘禊禋禖禕禔禓"],["e340","禗禈禒禐稫穊稰稯稨稦窨窫窬竮箈箜箊箑箐箖箍箌箛箎箅箘劄箙箤箂粻粿粼粺綧綷緂綣綪緁緀緅綝緎緄緆緋緌綯綹綖綼綟綦綮綩綡緉罳翢翣翥翞"],["e3a1","耤聝聜膉膆膃膇膍膌膋舕蒗蒤蒡蒟蒺蓎蓂蒬蒮蒫蒹蒴蓁蓍蒪蒚蒱蓐蒝蒧蒻蒢蒔蓇蓌蒛蒩蒯蒨蓖蒘蒶蓏蒠蓗蓔蓒蓛蒰蒑虡蜳蜣蜨蝫蝀蜮蜞蜡蜙蜛蝃蜬蝁蜾蝆蜠蜲蜪蜭蜼蜒蜺蜱蜵蝂蜦蜧蜸蜤蜚蜰蜑裷裧裱裲裺裾裮裼裶裻"],["e440","裰裬裫覝覡覟覞觩觫觨誫誙誋誒誏誖谽豨豩賕賏賗趖踉踂跿踍跽踊踃踇踆踅跾踀踄輐輑輎輍鄣鄜鄠鄢鄟鄝鄚鄤鄡鄛酺酲酹酳銥銤鉶銛鉺銠銔銪銍"],["e4a1","銦銚銫鉹銗鉿銣鋮銎銂銕銢鉽銈銡銊銆銌銙銧鉾銇銩銝銋鈭隞隡雿靘靽靺靾鞃鞀鞂靻鞄鞁靿韎韍頖颭颮餂餀餇馝馜駃馹馻馺駂馽駇骱髣髧鬾鬿魠魡魟鳱鳲鳵麧僿儃儰僸儆儇僶僾儋儌僽儊劋劌勱勯噈噂噌嘵噁噊噉噆噘"],["e540","噚噀嘳嘽嘬嘾嘸嘪嘺圚墫墝墱墠墣墯墬墥墡壿嫿嫴嫽嫷嫶嬃嫸嬂嫹嬁嬇嬅嬏屧嶙嶗嶟嶒嶢嶓嶕嶠嶜嶡嶚嶞幩幝幠幜緳廛廞廡彉徲憋憃慹憱憰憢憉"],["e5a1","憛憓憯憭憟憒憪憡憍慦憳戭摮摰撖撠撅撗撜撏撋撊撌撣撟摨撱撘敶敺敹敻斲斳暵暰暩暲暷暪暯樀樆樗槥槸樕槱槤樠槿槬槢樛樝槾樧槲槮樔槷槧橀樈槦槻樍槼槫樉樄樘樥樏槶樦樇槴樖歑殥殣殢殦氁氀毿氂潁漦潾澇濆澒"],["e640","澍澉澌潢潏澅潚澖潶潬澂潕潲潒潐潗澔澓潝漀潡潫潽潧澐潓澋潩潿澕潣潷潪潻熲熯熛熰熠熚熩熵熝熥熞熤熡熪熜熧熳犘犚獘獒獞獟獠獝獛獡獚獙"],["e6a1","獢璇璉璊璆璁瑽璅璈瑼瑹甈甇畾瘥瘞瘙瘝瘜瘣瘚瘨瘛皜皝皞皛瞍瞏瞉瞈磍碻磏磌磑磎磔磈磃磄磉禚禡禠禜禢禛歶稹窲窴窳箷篋箾箬篎箯箹篊箵糅糈糌糋緷緛緪緧緗緡縃緺緦緶緱緰緮緟罶羬羰羭翭翫翪翬翦翨聤聧膣膟"],["e740","膞膕膢膙膗舖艏艓艒艐艎艑蔤蔻蔏蔀蔩蔎蔉蔍蔟蔊蔧蔜蓻蔫蓺蔈蔌蓴蔪蓲蔕蓷蓫蓳蓼蔒蓪蓩蔖蓾蔨蔝蔮蔂蓽蔞蓶蔱蔦蓧蓨蓰蓯蓹蔘蔠蔰蔋蔙蔯虢"],["e7a1","蝖蝣蝤蝷蟡蝳蝘蝔蝛蝒蝡蝚蝑蝞蝭蝪蝐蝎蝟蝝蝯蝬蝺蝮蝜蝥蝏蝻蝵蝢蝧蝩衚褅褌褔褋褗褘褙褆褖褑褎褉覢覤覣觭觰觬諏諆誸諓諑諔諕誻諗誾諀諅諘諃誺誽諙谾豍貏賥賟賙賨賚賝賧趠趜趡趛踠踣踥踤踮踕踛踖踑踙踦踧"],["e840","踔踒踘踓踜踗踚輬輤輘輚輠輣輖輗遳遰遯遧遫鄯鄫鄩鄪鄲鄦鄮醅醆醊醁醂醄醀鋐鋃鋄鋀鋙銶鋏鋱鋟鋘鋩鋗鋝鋌鋯鋂鋨鋊鋈鋎鋦鋍鋕鋉鋠鋞鋧鋑鋓"],["e8a1","銵鋡鋆銴镼閬閫閮閰隤隢雓霅霈霂靚鞊鞎鞈韐韏頞頝頦頩頨頠頛頧颲餈飺餑餔餖餗餕駜駍駏駓駔駎駉駖駘駋駗駌骳髬髫髳髲髱魆魃魧魴魱魦魶魵魰魨魤魬鳼鳺鳽鳿鳷鴇鴀鳹鳻鴈鴅鴄麃黓鼏鼐儜儓儗儚儑凞匴叡噰噠噮"],["e940","噳噦噣噭噲噞噷圜圛壈墽壉墿墺壂墼壆嬗嬙嬛嬡嬔嬓嬐嬖嬨嬚嬠嬞寯嶬嶱嶩嶧嶵嶰嶮嶪嶨嶲嶭嶯嶴幧幨幦幯廩廧廦廨廥彋徼憝憨憖懅憴懆懁懌憺"],["e9a1","憿憸憌擗擖擐擏擉撽撉擃擛擳擙攳敿敼斢曈暾曀曊曋曏暽暻暺曌朣樴橦橉橧樲橨樾橝橭橶橛橑樨橚樻樿橁橪橤橐橏橔橯橩橠樼橞橖橕橍橎橆歕歔歖殧殪殫毈毇氄氃氆澭濋澣濇澼濎濈潞濄澽澞濊澨瀄澥澮澺澬澪濏澿澸"],["ea40","澢濉澫濍澯澲澰燅燂熿熸燖燀燁燋燔燊燇燏熽燘熼燆燚燛犝犞獩獦獧獬獥獫獪瑿璚璠璔璒璕璡甋疀瘯瘭瘱瘽瘳瘼瘵瘲瘰皻盦瞚瞝瞡瞜瞛瞢瞣瞕瞙"],["eaa1","瞗磝磩磥磪磞磣磛磡磢磭磟磠禤穄穈穇窶窸窵窱窷篞篣篧篝篕篥篚篨篹篔篪篢篜篫篘篟糒糔糗糐糑縒縡縗縌縟縠縓縎縜縕縚縢縋縏縖縍縔縥縤罃罻罼罺羱翯耪耩聬膱膦膮膹膵膫膰膬膴膲膷膧臲艕艖艗蕖蕅蕫蕍蕓蕡蕘"],["eb40","蕀蕆蕤蕁蕢蕄蕑蕇蕣蔾蕛蕱蕎蕮蕵蕕蕧蕠薌蕦蕝蕔蕥蕬虣虥虤螛螏螗螓螒螈螁螖螘蝹螇螣螅螐螑螝螄螔螜螚螉褞褦褰褭褮褧褱褢褩褣褯褬褟觱諠"],["eba1","諢諲諴諵諝謔諤諟諰諈諞諡諨諿諯諻貑貒貐賵賮賱賰賳赬赮趥趧踳踾踸蹀蹅踶踼踽蹁踰踿躽輶輮輵輲輹輷輴遶遹遻邆郺鄳鄵鄶醓醐醑醍醏錧錞錈錟錆錏鍺錸錼錛錣錒錁鍆錭錎錍鋋錝鋺錥錓鋹鋷錴錂錤鋿錩錹錵錪錔錌"],["ec40","錋鋾錉錀鋻錖閼闍閾閹閺閶閿閵閽隩雔霋霒霐鞙鞗鞔韰韸頵頯頲餤餟餧餩馞駮駬駥駤駰駣駪駩駧骹骿骴骻髶髺髹髷鬳鮀鮅鮇魼魾魻鮂鮓鮒鮐魺鮕"],["eca1","魽鮈鴥鴗鴠鴞鴔鴩鴝鴘鴢鴐鴙鴟麈麆麇麮麭黕黖黺鼒鼽儦儥儢儤儠儩勴嚓嚌嚍嚆嚄嚃噾嚂噿嚁壖壔壏壒嬭嬥嬲嬣嬬嬧嬦嬯嬮孻寱寲嶷幬幪徾徻懃憵憼懧懠懥懤懨懞擯擩擣擫擤擨斁斀斶旚曒檍檖檁檥檉檟檛檡檞檇檓檎"],["ed40","檕檃檨檤檑橿檦檚檅檌檒歛殭氉濌澩濴濔濣濜濭濧濦濞濲濝濢濨燡燱燨燲燤燰燢獳獮獯璗璲璫璐璪璭璱璥璯甐甑甒甏疄癃癈癉癇皤盩瞵瞫瞲瞷瞶"],["eda1","瞴瞱瞨矰磳磽礂磻磼磲礅磹磾礄禫禨穜穛穖穘穔穚窾竀竁簅簏篲簀篿篻簎篴簋篳簂簉簃簁篸篽簆篰篱簐簊糨縭縼繂縳顈縸縪繉繀繇縩繌縰縻縶繄縺罅罿罾罽翴翲耬膻臄臌臊臅臇膼臩艛艚艜薃薀薏薧薕薠薋薣蕻薤薚薞"],["ee40","蕷蕼薉薡蕺蕸蕗薎薖薆薍薙薝薁薢薂薈薅蕹蕶薘薐薟虨螾螪螭蟅螰螬螹螵螼螮蟉蟃蟂蟌螷螯蟄蟊螴螶螿螸螽蟞螲褵褳褼褾襁襒褷襂覭覯覮觲觳謞"],["eea1","謘謖謑謅謋謢謏謒謕謇謍謈謆謜謓謚豏豰豲豱豯貕貔賹赯蹎蹍蹓蹐蹌蹇轃轀邅遾鄸醚醢醛醙醟醡醝醠鎡鎃鎯鍤鍖鍇鍼鍘鍜鍶鍉鍐鍑鍠鍭鎏鍌鍪鍹鍗鍕鍒鍏鍱鍷鍻鍡鍞鍣鍧鎀鍎鍙闇闀闉闃闅閷隮隰隬霠霟霘霝霙鞚鞡鞜"],["ef40","鞞鞝韕韔韱顁顄顊顉顅顃餥餫餬餪餳餲餯餭餱餰馘馣馡騂駺駴駷駹駸駶駻駽駾駼騃骾髾髽鬁髼魈鮚鮨鮞鮛鮦鮡鮥鮤鮆鮢鮠鮯鴳鵁鵧鴶鴮鴯鴱鴸鴰"],["efa1","鵅鵂鵃鴾鴷鵀鴽翵鴭麊麉麍麰黈黚黻黿鼤鼣鼢齔龠儱儭儮嚘嚜嚗嚚嚝嚙奰嬼屩屪巀幭幮懘懟懭懮懱懪懰懫懖懩擿攄擽擸攁攃擼斔旛曚曛曘櫅檹檽櫡櫆檺檶檷櫇檴檭歞毉氋瀇瀌瀍瀁瀅瀔瀎濿瀀濻瀦濼濷瀊爁燿燹爃燽獶"],["f040","璸瓀璵瓁璾璶璻瓂甔甓癜癤癙癐癓癗癚皦皽盬矂瞺磿礌礓礔礉礐礒礑禭禬穟簜簩簙簠簟簭簝簦簨簢簥簰繜繐繖繣繘繢繟繑繠繗繓羵羳翷翸聵臑臒"],["f0a1","臐艟艞薴藆藀藃藂薳薵薽藇藄薿藋藎藈藅薱薶藒蘤薸薷薾虩蟧蟦蟢蟛蟫蟪蟥蟟蟳蟤蟔蟜蟓蟭蟘蟣螤蟗蟙蠁蟴蟨蟝襓襋襏襌襆襐襑襉謪謧謣謳謰謵譇謯謼謾謱謥謷謦謶謮謤謻謽謺豂豵貙貘貗賾贄贂贀蹜蹢蹠蹗蹖蹞蹥蹧"],["f140","蹛蹚蹡蹝蹩蹔轆轇轈轋鄨鄺鄻鄾醨醥醧醯醪鎵鎌鎒鎷鎛鎝鎉鎧鎎鎪鎞鎦鎕鎈鎙鎟鎍鎱鎑鎲鎤鎨鎴鎣鎥闒闓闑隳雗雚巂雟雘雝霣霢霥鞬鞮鞨鞫鞤鞪"],["f1a1","鞢鞥韗韙韖韘韺顐顑顒颸饁餼餺騏騋騉騍騄騑騊騅騇騆髀髜鬈鬄鬅鬩鬵魊魌魋鯇鯆鯃鮿鯁鮵鮸鯓鮶鯄鮹鮽鵜鵓鵏鵊鵛鵋鵙鵖鵌鵗鵒鵔鵟鵘鵚麎麌黟鼁鼀鼖鼥鼫鼪鼩鼨齌齕儴儵劖勷厴嚫嚭嚦嚧嚪嚬壚壝壛夒嬽嬾嬿巃幰"],["f240","徿懻攇攐攍攉攌攎斄旞旝曞櫧櫠櫌櫑櫙櫋櫟櫜櫐櫫櫏櫍櫞歠殰氌瀙瀧瀠瀖瀫瀡瀢瀣瀩瀗瀤瀜瀪爌爊爇爂爅犥犦犤犣犡瓋瓅璷瓃甖癠矉矊矄矱礝礛"],["f2a1","礡礜礗礞禰穧穨簳簼簹簬簻糬糪繶繵繸繰繷繯繺繲繴繨罋罊羃羆羷翽翾聸臗臕艤艡艣藫藱藭藙藡藨藚藗藬藲藸藘藟藣藜藑藰藦藯藞藢蠀蟺蠃蟶蟷蠉蠌蠋蠆蟼蠈蟿蠊蠂襢襚襛襗襡襜襘襝襙覈覷覶觶譐譈譊譀譓譖譔譋譕"],["f340","譑譂譒譗豃豷豶貚贆贇贉趬趪趭趫蹭蹸蹳蹪蹯蹻軂轒轑轏轐轓辴酀鄿醰醭鏞鏇鏏鏂鏚鏐鏹鏬鏌鏙鎩鏦鏊鏔鏮鏣鏕鏄鏎鏀鏒鏧镽闚闛雡霩霫霬霨霦"],["f3a1","鞳鞷鞶韝韞韟顜顙顝顗颿颽颻颾饈饇饃馦馧騚騕騥騝騤騛騢騠騧騣騞騜騔髂鬋鬊鬎鬌鬷鯪鯫鯠鯞鯤鯦鯢鯰鯔鯗鯬鯜鯙鯥鯕鯡鯚鵷鶁鶊鶄鶈鵱鶀鵸鶆鶋鶌鵽鵫鵴鵵鵰鵩鶅鵳鵻鶂鵯鵹鵿鶇鵨麔麑黀黼鼭齀齁齍齖齗齘匷嚲"],["f440","嚵嚳壣孅巆巇廮廯忀忁懹攗攖攕攓旟曨曣曤櫳櫰櫪櫨櫹櫱櫮櫯瀼瀵瀯瀷瀴瀱灂瀸瀿瀺瀹灀瀻瀳灁爓爔犨獽獼璺皫皪皾盭矌矎矏矍矲礥礣礧礨礤礩"],["f4a1","禲穮穬穭竷籉籈籊籇籅糮繻繾纁纀羺翿聹臛臙舋艨艩蘢藿蘁藾蘛蘀藶蘄蘉蘅蘌藽蠙蠐蠑蠗蠓蠖襣襦覹觷譠譪譝譨譣譥譧譭趮躆躈躄轙轖轗轕轘轚邍酃酁醷醵醲醳鐋鐓鏻鐠鐏鐔鏾鐕鐐鐨鐙鐍鏵鐀鏷鐇鐎鐖鐒鏺鐉鏸鐊鏿"],["f540","鏼鐌鏶鐑鐆闞闠闟霮霯鞹鞻韽韾顠顢顣顟飁飂饐饎饙饌饋饓騲騴騱騬騪騶騩騮騸騭髇髊髆鬐鬒鬑鰋鰈鯷鰅鰒鯸鱀鰇鰎鰆鰗鰔鰉鶟鶙鶤鶝鶒鶘鶐鶛"],["f5a1","鶠鶔鶜鶪鶗鶡鶚鶢鶨鶞鶣鶿鶩鶖鶦鶧麙麛麚黥黤黧黦鼰鼮齛齠齞齝齙龑儺儹劘劗囃嚽嚾孈孇巋巏廱懽攛欂櫼欃櫸欀灃灄灊灈灉灅灆爝爚爙獾甗癪矐礭礱礯籔籓糲纊纇纈纋纆纍罍羻耰臝蘘蘪蘦蘟蘣蘜蘙蘧蘮蘡蘠蘩蘞蘥"],["f640","蠩蠝蠛蠠蠤蠜蠫衊襭襩襮襫觺譹譸譅譺譻贐贔趯躎躌轞轛轝酆酄酅醹鐿鐻鐶鐩鐽鐼鐰鐹鐪鐷鐬鑀鐱闥闤闣霵霺鞿韡顤飉飆飀饘饖騹騽驆驄驂驁騺"],["f6a1","騿髍鬕鬗鬘鬖鬺魒鰫鰝鰜鰬鰣鰨鰩鰤鰡鶷鶶鶼鷁鷇鷊鷏鶾鷅鷃鶻鶵鷎鶹鶺鶬鷈鶱鶭鷌鶳鷍鶲鹺麜黫黮黭鼛鼘鼚鼱齎齥齤龒亹囆囅囋奱孋孌巕巑廲攡攠攦攢欋欈欉氍灕灖灗灒爞爟犩獿瓘瓕瓙瓗癭皭礵禴穰穱籗籜籙籛籚"],["f740","糴糱纑罏羇臞艫蘴蘵蘳蘬蘲蘶蠬蠨蠦蠪蠥襱覿覾觻譾讄讂讆讅譿贕躕躔躚躒躐躖躗轠轢酇鑌鑐鑊鑋鑏鑇鑅鑈鑉鑆霿韣顪顩飋饔饛驎驓驔驌驏驈驊"],["f7a1","驉驒驐髐鬙鬫鬻魖魕鱆鱈鰿鱄鰹鰳鱁鰼鰷鰴鰲鰽鰶鷛鷒鷞鷚鷋鷐鷜鷑鷟鷩鷙鷘鷖鷵鷕鷝麶黰鼵鼳鼲齂齫龕龢儽劙壨壧奲孍巘蠯彏戁戃戄攩攥斖曫欑欒欏毊灛灚爢玂玁玃癰矔籧籦纕艬蘺虀蘹蘼蘱蘻蘾蠰蠲蠮蠳襶襴襳觾"],["f840","讌讎讋讈豅贙躘轤轣醼鑢鑕鑝鑗鑞韄韅頀驖驙鬞鬟鬠鱒鱘鱐鱊鱍鱋鱕鱙鱌鱎鷻鷷鷯鷣鷫鷸鷤鷶鷡鷮鷦鷲鷰鷢鷬鷴鷳鷨鷭黂黐黲黳鼆鼜鼸鼷鼶齃齏"],["f8a1","齱齰齮齯囓囍孎屭攭曭曮欓灟灡灝灠爣瓛瓥矕礸禷禶籪纗羉艭虃蠸蠷蠵衋讔讕躞躟躠躝醾醽釂鑫鑨鑩雥靆靃靇韇韥驞髕魙鱣鱧鱦鱢鱞鱠鸂鷾鸇鸃鸆鸅鸀鸁鸉鷿鷽鸄麠鼞齆齴齵齶囔攮斸欘欙欗欚灢爦犪矘矙礹籩籫糶纚"],["f940","纘纛纙臠臡虆虇虈襹襺襼襻觿讘讙躥躤躣鑮鑭鑯鑱鑳靉顲饟鱨鱮鱭鸋鸍鸐鸏鸒鸑麡黵鼉齇齸齻齺齹圞灦籯蠼趲躦釃鑴鑸鑶鑵驠鱴鱳鱱鱵鸔鸓黶鼊"],["f9a1","龤灨灥糷虪蠾蠽蠿讞貜躩軉靋顳顴飌饡馫驤驦驧鬤鸕鸗齈戇欞爧虌躨钂钀钁驩驨鬮鸙爩虋讟钃鱹麷癵驫鱺鸝灩灪麤齾齉龘碁銹裏墻恒粧嫺╔╦╗╠╬╣╚╩╝╒╤╕╞╪╡╘╧╛╓╥╖╟╫╢╙╨╜║═╭╮╰╯▓"]]')},56406:function(A){"use strict";A.exports=JSON.parse('[["0","\\u0000",127],["8ea1","。",62],["a1a1"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇"],["a2a1","◆□■△▲▽▼※〒→←↑↓〓"],["a2ba","∈∋⊆⊇⊂⊃∪∩"],["a2ca","∧∨¬⇒⇔∀∃"],["a2dc","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["a2f2","ʼn♯♭♪†‡¶"],["a2fe","◯"],["a3b0","0",9],["a3c1","A",25],["a3e1","a",25],["a4a1","ぁ",82],["a5a1","ァ",85],["a6a1","Α",16,"Σ",6],["a6c1","α",16,"σ",6],["a7a1","А",5,"ЁЖ",25],["a7d1","а",5,"ёж",25],["a8a1","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["ada1","①",19,"Ⅰ",9],["adc0","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["addf","㍻〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["b0a1","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["b1a1","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応"],["b2a1","押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["b3a1","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱"],["b4a1","粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["b5a1","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京"],["b6a1","供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["b7a1","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲"],["b8a1","検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["b9a1","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込"],["baa1","此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["bba1","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時"],["bca1","次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["bda1","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償"],["bea1","勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["bfa1","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾"],["c0a1","澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["c1a1","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎"],["c2a1","臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["c3a1","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵"],["c4a1","帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["c5a1","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到"],["c6a1","董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["c7a1","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦"],["c8a1","函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["c9a1","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服"],["caa1","福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["cba1","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満"],["cca1","漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["cda1","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃"],["cea1","痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["cfa1","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["d0a1","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["d1a1","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨"],["d2a1","辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["d3a1","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉"],["d4a1","圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["d5a1","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓"],["d6a1","屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["d7a1","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚"],["d8a1","悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["d9a1","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼"],["daa1","據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["dba1","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍"],["dca1","棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["dda1","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾"],["dea1","沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["dfa1","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼"],["e0a1","燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e1a1","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰"],["e2a1","癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e3a1","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐"],["e4a1","筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e5a1","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺"],["e6a1","罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e7a1","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙"],["e8a1","茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e9a1","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙"],["eaa1","蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["eba1","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫"],["eca1","譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["eda1","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸"],["eea1","遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["efa1","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞"],["f0a1","陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["f1a1","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷"],["f2a1","髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["f3a1","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠"],["f4a1","堯槇遙瑤凜熙"],["f9a1","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德"],["faa1","忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["fba1","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚"],["fca1","釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["fcf1","ⅰ",9,"¬¦'""],["8fa2af","˘ˇ¸˙˝¯˛˚~΄΅"],["8fa2c2","¡¦¿"],["8fa2eb","ºª©®™¤№"],["8fa6e1","ΆΈΉΊΪ"],["8fa6e7","Ό"],["8fa6e9","ΎΫ"],["8fa6ec","Ώ"],["8fa6f1","άέήίϊΐόςύϋΰώ"],["8fa7c2","Ђ",10,"ЎЏ"],["8fa7f2","ђ",10,"ўџ"],["8fa9a1","ÆĐ"],["8fa9a4","Ħ"],["8fa9a6","IJ"],["8fa9a8","ŁĿ"],["8fa9ab","ŊØŒ"],["8fa9af","ŦÞ"],["8fa9c1","æđðħıijĸłŀʼnŋøœßŧþ"],["8faaa1","ÁÀÄÂĂǍĀĄÅÃĆĈČÇĊĎÉÈËÊĚĖĒĘ"],["8faaba","ĜĞĢĠĤÍÌÏÎǏİĪĮĨĴĶĹĽĻŃŇŅÑÓÒÖÔǑŐŌÕŔŘŖŚŜŠŞŤŢÚÙÜÛŬǓŰŪŲŮŨǗǛǙǕŴÝŸŶŹŽŻ"],["8faba1","áàäâăǎāąåãćĉčçċďéèëêěėēęǵĝğ"],["8fabbd","ġĥíìïîǐ"],["8fabc5","īįĩĵķĺľļńňņñóòöôǒőōõŕřŗśŝšşťţúùüûŭǔűūųůũǘǜǚǖŵýÿŷźžż"],["8fb0a1","丂丄丅丌丒丟丣两丨丫丮丯丰丵乀乁乄乇乑乚乜乣乨乩乴乵乹乿亍亖亗亝亯亹仃仐仚仛仠仡仢仨仯仱仳仵份仾仿伀伂伃伈伋伌伒伕伖众伙伮伱你伳伵伷伹伻伾佀佂佈佉佋佌佒佔佖佘佟佣佪佬佮佱佷佸佹佺佽佾侁侂侄"],["8fb1a1","侅侉侊侌侎侐侒侓侔侗侙侚侞侟侲侷侹侻侼侽侾俀俁俅俆俈俉俋俌俍俏俒俜俠俢俰俲俼俽俿倀倁倄倇倊倌倎倐倓倗倘倛倜倝倞倢倧倮倰倲倳倵偀偁偂偅偆偊偌偎偑偒偓偗偙偟偠偢偣偦偧偪偭偰偱倻傁傃傄傆傊傎傏傐"],["8fb2a1","傒傓傔傖傛傜傞",4,"傪傯傰傹傺傽僀僃僄僇僌僎僐僓僔僘僜僝僟僢僤僦僨僩僯僱僶僺僾儃儆儇儈儋儌儍儎僲儐儗儙儛儜儝儞儣儧儨儬儭儯儱儳儴儵儸儹兂兊兏兓兕兗兘兟兤兦兾冃冄冋冎冘冝冡冣冭冸冺冼冾冿凂"],["8fb3a1","凈减凑凒凓凕凘凞凢凥凮凲凳凴凷刁刂刅划刓刕刖刘刢刨刱刲刵刼剅剉剕剗剘剚剜剟剠剡剦剮剷剸剹劀劂劅劊劌劓劕劖劗劘劚劜劤劥劦劧劯劰劶劷劸劺劻劽勀勄勆勈勌勏勑勔勖勛勜勡勥勨勩勪勬勰勱勴勶勷匀匃匊匋"],["8fb4a1","匌匑匓匘匛匜匞匟匥匧匨匩匫匬匭匰匲匵匼匽匾卂卌卋卙卛卡卣卥卬卭卲卹卾厃厇厈厎厓厔厙厝厡厤厪厫厯厲厴厵厷厸厺厽叀叅叏叒叓叕叚叝叞叠另叧叵吂吓吚吡吧吨吪启吱吴吵呃呄呇呍呏呞呢呤呦呧呩呫呭呮呴呿"],["8fb5a1","咁咃咅咈咉咍咑咕咖咜咟咡咦咧咩咪咭咮咱咷咹咺咻咿哆哊响哎哠哪哬哯哶哼哾哿唀唁唅唈唉唌唍唎唕唪唫唲唵唶唻唼唽啁啇啉啊啍啐啑啘啚啛啞啠啡啤啦啿喁喂喆喈喎喏喑喒喓喔喗喣喤喭喲喿嗁嗃嗆嗉嗋嗌嗎嗑嗒"],["8fb6a1","嗓嗗嗘嗛嗞嗢嗩嗶嗿嘅嘈嘊嘍",5,"嘙嘬嘰嘳嘵嘷嘹嘻嘼嘽嘿噀噁噃噄噆噉噋噍噏噔噞噠噡噢噣噦噩噭噯噱噲噵嚄嚅嚈嚋嚌嚕嚙嚚嚝嚞嚟嚦嚧嚨嚩嚫嚬嚭嚱嚳嚷嚾囅囉囊囋囏囐囌囍囙囜囝囟囡囤",4,"囱囫园"],["8fb7a1","囶囷圁圂圇圊圌圑圕圚圛圝圠圢圣圤圥圩圪圬圮圯圳圴圽圾圿坅坆坌坍坒坢坥坧坨坫坭",4,"坳坴坵坷坹坺坻坼坾垁垃垌垔垗垙垚垜垝垞垟垡垕垧垨垩垬垸垽埇埈埌埏埕埝埞埤埦埧埩埭埰埵埶埸埽埾埿堃堄堈堉埡"],["8fb8a1","堌堍堛堞堟堠堦堧堭堲堹堿塉塌塍塏塐塕塟塡塤塧塨塸塼塿墀墁墇墈墉墊墌墍墏墐墔墖墝墠墡墢墦墩墱墲壄墼壂壈壍壎壐壒壔壖壚壝壡壢壩壳夅夆夋夌夒夓夔虁夝夡夣夤夨夯夰夳夵夶夿奃奆奒奓奙奛奝奞奟奡奣奫奭"],["8fb9a1","奯奲奵奶她奻奼妋妌妎妒妕妗妟妤妧妭妮妯妰妳妷妺妼姁姃姄姈姊姍姒姝姞姟姣姤姧姮姯姱姲姴姷娀娄娌娍娎娒娓娞娣娤娧娨娪娭娰婄婅婇婈婌婐婕婞婣婥婧婭婷婺婻婾媋媐媓媖媙媜媞媟媠媢媧媬媱媲媳媵媸媺媻媿"],["8fbaa1","嫄嫆嫈嫏嫚嫜嫠嫥嫪嫮嫵嫶嫽嬀嬁嬈嬗嬴嬙嬛嬝嬡嬥嬭嬸孁孋孌孒孖孞孨孮孯孼孽孾孿宁宄宆宊宎宐宑宓宔宖宨宩宬宭宯宱宲宷宺宼寀寁寍寏寖",4,"寠寯寱寴寽尌尗尞尟尣尦尩尫尬尮尰尲尵尶屙屚屜屢屣屧屨屩"],["8fbba1","屭屰屴屵屺屻屼屽岇岈岊岏岒岝岟岠岢岣岦岪岲岴岵岺峉峋峒峝峗峮峱峲峴崁崆崍崒崫崣崤崦崧崱崴崹崽崿嵂嵃嵆嵈嵕嵑嵙嵊嵟嵠嵡嵢嵤嵪嵭嵰嵹嵺嵾嵿嶁嶃嶈嶊嶒嶓嶔嶕嶙嶛嶟嶠嶧嶫嶰嶴嶸嶹巃巇巋巐巎巘巙巠巤"],["8fbca1","巩巸巹帀帇帍帒帔帕帘帟帠帮帨帲帵帾幋幐幉幑幖幘幛幜幞幨幪",4,"幰庀庋庎庢庤庥庨庪庬庱庳庽庾庿廆廌廋廎廑廒廔廕廜廞廥廫异弆弇弈弎弙弜弝弡弢弣弤弨弫弬弮弰弴弶弻弽弿彀彄彅彇彍彐彔彘彛彠彣彤彧"],["8fbda1","彯彲彴彵彸彺彽彾徉徍徏徖徜徝徢徧徫徤徬徯徰徱徸忄忇忈忉忋忐",4,"忞忡忢忨忩忪忬忭忮忯忲忳忶忺忼怇怊怍怓怔怗怘怚怟怤怭怳怵恀恇恈恉恌恑恔恖恗恝恡恧恱恾恿悂悆悈悊悎悑悓悕悘悝悞悢悤悥您悰悱悷"],["8fbea1","悻悾惂惄惈惉惊惋惎惏惔惕惙惛惝惞惢惥惲惵惸惼惽愂愇愊愌愐",4,"愖愗愙愜愞愢愪愫愰愱愵愶愷愹慁慅慆慉慞慠慬慲慸慻慼慿憀憁憃憄憋憍憒憓憗憘憜憝憟憠憥憨憪憭憸憹憼懀懁懂懎懏懕懜懝懞懟懡懢懧懩懥"],["8fbfa1","懬懭懯戁戃戄戇戓戕戜戠戢戣戧戩戫戹戽扂扃扄扆扌扐扑扒扔扖扚扜扤扭扯扳扺扽抍抎抏抐抦抨抳抶抷抺抾抿拄拎拕拖拚拪拲拴拼拽挃挄挊挋挍挐挓挖挘挩挪挭挵挶挹挼捁捂捃捄捆捊捋捎捒捓捔捘捛捥捦捬捭捱捴捵"],["8fc0a1","捸捼捽捿掂掄掇掊掐掔掕掙掚掞掤掦掭掮掯掽揁揅揈揎揑揓揔揕揜揠揥揪揬揲揳揵揸揹搉搊搐搒搔搘搞搠搢搤搥搩搪搯搰搵搽搿摋摏摑摒摓摔摚摛摜摝摟摠摡摣摭摳摴摻摽撅撇撏撐撑撘撙撛撝撟撡撣撦撨撬撳撽撾撿"],["8fc1a1","擄擉擊擋擌擎擐擑擕擗擤擥擩擪擭擰擵擷擻擿攁攄攈攉攊攏攓攔攖攙攛攞攟攢攦攩攮攱攺攼攽敃敇敉敐敒敔敟敠敧敫敺敽斁斅斊斒斕斘斝斠斣斦斮斲斳斴斿旂旈旉旎旐旔旖旘旟旰旲旴旵旹旾旿昀昄昈昉昍昑昒昕昖昝"],["8fc2a1","昞昡昢昣昤昦昩昪昫昬昮昰昱昳昹昷晀晅晆晊晌晑晎晗晘晙晛晜晠晡曻晪晫晬晾晳晵晿晷晸晹晻暀晼暋暌暍暐暒暙暚暛暜暟暠暤暭暱暲暵暻暿曀曂曃曈曌曎曏曔曛曟曨曫曬曮曺朅朇朎朓朙朜朠朢朳朾杅杇杈杌杔杕杝"],["8fc3a1","杦杬杮杴杶杻极构枎枏枑枓枖枘枙枛枰枱枲枵枻枼枽柹柀柂柃柅柈柉柒柗柙柜柡柦柰柲柶柷桒栔栙栝栟栨栧栬栭栯栰栱栳栻栿桄桅桊桌桕桗桘桛桫桮",4,"桵桹桺桻桼梂梄梆梈梖梘梚梜梡梣梥梩梪梮梲梻棅棈棌棏"],["8fc4a1","棐棑棓棖棙棜棝棥棨棪棫棬棭棰棱棵棶棻棼棽椆椉椊椐椑椓椖椗椱椳椵椸椻楂楅楉楎楗楛楣楤楥楦楨楩楬楰楱楲楺楻楿榀榍榒榖榘榡榥榦榨榫榭榯榷榸榺榼槅槈槑槖槗槢槥槮槯槱槳槵槾樀樁樃樏樑樕樚樝樠樤樨樰樲"],["8fc5a1","樴樷樻樾樿橅橆橉橊橎橐橑橒橕橖橛橤橧橪橱橳橾檁檃檆檇檉檋檑檛檝檞檟檥檫檯檰檱檴檽檾檿櫆櫉櫈櫌櫐櫔櫕櫖櫜櫝櫤櫧櫬櫰櫱櫲櫼櫽欂欃欆欇欉欏欐欑欗欛欞欤欨欫欬欯欵欶欻欿歆歊歍歒歖歘歝歠歧歫歮歰歵歽"],["8fc6a1","歾殂殅殗殛殟殠殢殣殨殩殬殭殮殰殸殹殽殾毃毄毉毌毖毚毡毣毦毧毮毱毷毹毿氂氄氅氉氍氎氐氒氙氟氦氧氨氬氮氳氵氶氺氻氿汊汋汍汏汒汔汙汛汜汫汭汯汴汶汸汹汻沅沆沇沉沔沕沗沘沜沟沰沲沴泂泆泍泏泐泑泒泔泖"],["8fc7a1","泚泜泠泧泩泫泬泮泲泴洄洇洊洎洏洑洓洚洦洧洨汧洮洯洱洹洼洿浗浞浟浡浥浧浯浰浼涂涇涑涒涔涖涗涘涪涬涴涷涹涽涿淄淈淊淎淏淖淛淝淟淠淢淥淩淯淰淴淶淼渀渄渞渢渧渲渶渹渻渼湄湅湈湉湋湏湑湒湓湔湗湜湝湞"],["8fc8a1","湢湣湨湳湻湽溍溓溙溠溧溭溮溱溳溻溿滀滁滃滇滈滊滍滎滏滫滭滮滹滻滽漄漈漊漌漍漖漘漚漛漦漩漪漯漰漳漶漻漼漭潏潑潒潓潗潙潚潝潞潡潢潨潬潽潾澃澇澈澋澌澍澐澒澓澔澖澚澟澠澥澦澧澨澮澯澰澵澶澼濅濇濈濊"],["8fc9a1","濚濞濨濩濰濵濹濼濽瀀瀅瀆瀇瀍瀗瀠瀣瀯瀴瀷瀹瀼灃灄灈灉灊灋灔灕灝灞灎灤灥灬灮灵灶灾炁炅炆炔",4,"炛炤炫炰炱炴炷烊烑烓烔烕烖烘烜烤烺焃",4,"焋焌焏焞焠焫焭焯焰焱焸煁煅煆煇煊煋煐煒煗煚煜煞煠"],["8fcaa1","煨煹熀熅熇熌熒熚熛熠熢熯熰熲熳熺熿燀燁燄燋燌燓燖燙燚燜燸燾爀爇爈爉爓爗爚爝爟爤爫爯爴爸爹牁牂牃牅牎牏牐牓牕牖牚牜牞牠牣牨牫牮牯牱牷牸牻牼牿犄犉犍犎犓犛犨犭犮犱犴犾狁狇狉狌狕狖狘狟狥狳狴狺狻"],["8fcba1","狾猂猄猅猇猋猍猒猓猘猙猞猢猤猧猨猬猱猲猵猺猻猽獃獍獐獒獖獘獝獞獟獠獦獧獩獫獬獮獯獱獷獹獼玀玁玃玅玆玎玐玓玕玗玘玜玞玟玠玢玥玦玪玫玭玵玷玹玼玽玿珅珆珉珋珌珏珒珓珖珙珝珡珣珦珧珩珴珵珷珹珺珻珽"],["8fcca1","珿琀琁琄琇琊琑琚琛琤琦琨",9,"琹瑀瑃瑄瑆瑇瑋瑍瑑瑒瑗瑝瑢瑦瑧瑨瑫瑭瑮瑱瑲璀璁璅璆璇璉璏璐璑璒璘璙璚璜璟璠璡璣璦璨璩璪璫璮璯璱璲璵璹璻璿瓈瓉瓌瓐瓓瓘瓚瓛瓞瓟瓤瓨瓪瓫瓯瓴瓺瓻瓼瓿甆"],["8fcda1","甒甖甗甠甡甤甧甩甪甯甶甹甽甾甿畀畃畇畈畎畐畒畗畞畟畡畯畱畹",5,"疁疅疐疒疓疕疙疜疢疤疴疺疿痀痁痄痆痌痎痏痗痜痟痠痡痤痧痬痮痯痱痹瘀瘂瘃瘄瘇瘈瘊瘌瘏瘒瘓瘕瘖瘙瘛瘜瘝瘞瘣瘥瘦瘩瘭瘲瘳瘵瘸瘹"],["8fcea1","瘺瘼癊癀癁癃癄癅癉癋癕癙癟癤癥癭癮癯癱癴皁皅皌皍皕皛皜皝皟皠皢",6,"皪皭皽盁盅盉盋盌盎盔盙盠盦盨盬盰盱盶盹盼眀眆眊眎眒眔眕眗眙眚眜眢眨眭眮眯眴眵眶眹眽眾睂睅睆睊睍睎睏睒睖睗睜睞睟睠睢"],["8fcfa1","睤睧睪睬睰睲睳睴睺睽瞀瞄瞌瞍瞔瞕瞖瞚瞟瞢瞧瞪瞮瞯瞱瞵瞾矃矉矑矒矕矙矞矟矠矤矦矪矬矰矱矴矸矻砅砆砉砍砎砑砝砡砢砣砭砮砰砵砷硃硄硇硈硌硎硒硜硞硠硡硣硤硨硪确硺硾碊碏碔碘碡碝碞碟碤碨碬碭碰碱碲碳"],["8fd0a1","碻碽碿磇磈磉磌磎磒磓磕磖磤磛磟磠磡磦磪磲磳礀磶磷磺磻磿礆礌礐礚礜礞礟礠礥礧礩礭礱礴礵礻礽礿祄祅祆祊祋祏祑祔祘祛祜祧祩祫祲祹祻祼祾禋禌禑禓禔禕禖禘禛禜禡禨禩禫禯禱禴禸离秂秄秇秈秊秏秔秖秚秝秞"],["8fd1a1","秠秢秥秪秫秭秱秸秼稂稃稇稉稊稌稑稕稛稞稡稧稫稭稯稰稴稵稸稹稺穄穅穇穈穌穕穖穙穜穝穟穠穥穧穪穭穵穸穾窀窂窅窆窊窋窐窑窔窞窠窣窬窳窵窹窻窼竆竉竌竎竑竛竨竩竫竬竱竴竻竽竾笇笔笟笣笧笩笪笫笭笮笯笰"],["8fd2a1","笱笴笽笿筀筁筇筎筕筠筤筦筩筪筭筯筲筳筷箄箉箎箐箑箖箛箞箠箥箬箯箰箲箵箶箺箻箼箽篂篅篈篊篔篖篗篙篚篛篨篪篲篴篵篸篹篺篼篾簁簂簃簄簆簉簋簌簎簏簙簛簠簥簦簨簬簱簳簴簶簹簺籆籊籕籑籒籓籙",5],["8fd3a1","籡籣籧籩籭籮籰籲籹籼籽粆粇粏粔粞粠粦粰粶粷粺粻粼粿糄糇糈糉糍糏糓糔糕糗糙糚糝糦糩糫糵紃紇紈紉紏紑紒紓紖紝紞紣紦紪紭紱紼紽紾絀絁絇絈絍絑絓絗絙絚絜絝絥絧絪絰絸絺絻絿綁綂綃綅綆綈綋綌綍綑綖綗綝"],["8fd4a1","綞綦綧綪綳綶綷綹緂",4,"緌緍緎緗緙縀緢緥緦緪緫緭緱緵緶緹緺縈縐縑縕縗縜縝縠縧縨縬縭縯縳縶縿繄繅繇繎繐繒繘繟繡繢繥繫繮繯繳繸繾纁纆纇纊纍纑纕纘纚纝纞缼缻缽缾缿罃罄罇罏罒罓罛罜罝罡罣罤罥罦罭"],["8fd5a1","罱罽罾罿羀羋羍羏羐羑羖羗羜羡羢羦羪羭羴羼羿翀翃翈翎翏翛翟翣翥翨翬翮翯翲翺翽翾翿耇耈耊耍耎耏耑耓耔耖耝耞耟耠耤耦耬耮耰耴耵耷耹耺耼耾聀聄聠聤聦聭聱聵肁肈肎肜肞肦肧肫肸肹胈胍胏胒胔胕胗胘胠胭胮"],["8fd6a1","胰胲胳胶胹胺胾脃脋脖脗脘脜脞脠脤脧脬脰脵脺脼腅腇腊腌腒腗腠腡腧腨腩腭腯腷膁膐膄膅膆膋膎膖膘膛膞膢膮膲膴膻臋臃臅臊臎臏臕臗臛臝臞臡臤臫臬臰臱臲臵臶臸臹臽臿舀舃舏舓舔舙舚舝舡舢舨舲舴舺艃艄艅艆"],["8fd7a1","艋艎艏艑艖艜艠艣艧艭艴艻艽艿芀芁芃芄芇芉芊芎芑芔芖芘芚芛芠芡芣芤芧芨芩芪芮芰芲芴芷芺芼芾芿苆苐苕苚苠苢苤苨苪苭苯苶苷苽苾茀茁茇茈茊茋荔茛茝茞茟茡茢茬茭茮茰茳茷茺茼茽荂荃荄荇荍荎荑荕荖荗荰荸"],["8fd8a1","荽荿莀莂莄莆莍莒莔莕莘莙莛莜莝莦莧莩莬莾莿菀菇菉菏菐菑菔菝荓菨菪菶菸菹菼萁萆萊萏萑萕萙莭萯萹葅葇葈葊葍葏葑葒葖葘葙葚葜葠葤葥葧葪葰葳葴葶葸葼葽蒁蒅蒒蒓蒕蒞蒦蒨蒩蒪蒯蒱蒴蒺蒽蒾蓀蓂蓇蓈蓌蓏蓓"],["8fd9a1","蓜蓧蓪蓯蓰蓱蓲蓷蔲蓺蓻蓽蔂蔃蔇蔌蔎蔐蔜蔞蔢蔣蔤蔥蔧蔪蔫蔯蔳蔴蔶蔿蕆蕏",4,"蕖蕙蕜",6,"蕤蕫蕯蕹蕺蕻蕽蕿薁薅薆薉薋薌薏薓薘薝薟薠薢薥薧薴薶薷薸薼薽薾薿藂藇藊藋藎薭藘藚藟藠藦藨藭藳藶藼"],["8fdaa1","藿蘀蘄蘅蘍蘎蘐蘑蘒蘘蘙蘛蘞蘡蘧蘩蘶蘸蘺蘼蘽虀虂虆虒虓虖虗虘虙虝虠",4,"虩虬虯虵虶虷虺蚍蚑蚖蚘蚚蚜蚡蚦蚧蚨蚭蚱蚳蚴蚵蚷蚸蚹蚿蛀蛁蛃蛅蛑蛒蛕蛗蛚蛜蛠蛣蛥蛧蚈蛺蛼蛽蜄蜅蜇蜋蜎蜏蜐蜓蜔蜙蜞蜟蜡蜣"],["8fdba1","蜨蜮蜯蜱蜲蜹蜺蜼蜽蜾蝀蝃蝅蝍蝘蝝蝡蝤蝥蝯蝱蝲蝻螃",6,"螋螌螐螓螕螗螘螙螞螠螣螧螬螭螮螱螵螾螿蟁蟈蟉蟊蟎蟕蟖蟙蟚蟜蟟蟢蟣蟤蟪蟫蟭蟱蟳蟸蟺蟿蠁蠃蠆蠉蠊蠋蠐蠙蠒蠓蠔蠘蠚蠛蠜蠞蠟蠨蠭蠮蠰蠲蠵"],["8fdca1","蠺蠼衁衃衅衈衉衊衋衎衑衕衖衘衚衜衟衠衤衩衱衹衻袀袘袚袛袜袟袠袨袪袺袽袾裀裊",4,"裑裒裓裛裞裧裯裰裱裵裷褁褆褍褎褏褕褖褘褙褚褜褠褦褧褨褰褱褲褵褹褺褾襀襂襅襆襉襏襒襗襚襛襜襡襢襣襫襮襰襳襵襺"],["8fdda1","襻襼襽覉覍覐覔覕覛覜覟覠覥覰覴覵覶覷覼觔",4,"觥觩觫觭觱觳觶觹觽觿訄訅訇訏訑訒訔訕訞訠訢訤訦訫訬訯訵訷訽訾詀詃詅詇詉詍詎詓詖詗詘詜詝詡詥詧詵詶詷詹詺詻詾詿誀誃誆誋誏誐誒誖誗誙誟誧誩誮誯誳"],["8fdea1","誶誷誻誾諃諆諈諉諊諑諓諔諕諗諝諟諬諰諴諵諶諼諿謅謆謋謑謜謞謟謊謭謰謷謼譂",4,"譈譒譓譔譙譍譞譣譭譶譸譹譼譾讁讄讅讋讍讏讔讕讜讞讟谸谹谽谾豅豇豉豋豏豑豓豔豗豘豛豝豙豣豤豦豨豩豭豳豵豶豻豾貆"],["8fdfa1","貇貋貐貒貓貙貛貜貤貹貺賅賆賉賋賏賖賕賙賝賡賨賬賯賰賲賵賷賸賾賿贁贃贉贒贗贛赥赩赬赮赿趂趄趈趍趐趑趕趞趟趠趦趫趬趯趲趵趷趹趻跀跅跆跇跈跊跎跑跔跕跗跙跤跥跧跬跰趼跱跲跴跽踁踄踅踆踋踑踔踖踠踡踢"],["8fe0a1","踣踦踧踱踳踶踷踸踹踽蹀蹁蹋蹍蹎蹏蹔蹛蹜蹝蹞蹡蹢蹩蹬蹭蹯蹰蹱蹹蹺蹻躂躃躉躐躒躕躚躛躝躞躢躧躩躭躮躳躵躺躻軀軁軃軄軇軏軑軔軜軨軮軰軱軷軹軺軭輀輂輇輈輏輐輖輗輘輞輠輡輣輥輧輨輬輭輮輴輵輶輷輺轀轁"],["8fe1a1","轃轇轏轑",4,"轘轝轞轥辝辠辡辤辥辦辵辶辸达迀迁迆迊迋迍运迒迓迕迠迣迤迨迮迱迵迶迻迾适逄逈逌逘逛逨逩逯逪逬逭逳逴逷逿遃遄遌遛遝遢遦遧遬遰遴遹邅邈邋邌邎邐邕邗邘邙邛邠邡邢邥邰邲邳邴邶邽郌邾郃"],["8fe2a1","郄郅郇郈郕郗郘郙郜郝郟郥郒郶郫郯郰郴郾郿鄀鄄鄅鄆鄈鄍鄐鄔鄖鄗鄘鄚鄜鄞鄠鄥鄢鄣鄧鄩鄮鄯鄱鄴鄶鄷鄹鄺鄼鄽酃酇酈酏酓酗酙酚酛酡酤酧酭酴酹酺酻醁醃醅醆醊醎醑醓醔醕醘醞醡醦醨醬醭醮醰醱醲醳醶醻醼醽醿"],["8fe3a1","釂釃釅釓釔釗釙釚釞釤釥釩釪釬",5,"釷釹釻釽鈀鈁鈄鈅鈆鈇鈉鈊鈌鈐鈒鈓鈖鈘鈜鈝鈣鈤鈥鈦鈨鈮鈯鈰鈳鈵鈶鈸鈹鈺鈼鈾鉀鉂鉃鉆鉇鉊鉍鉎鉏鉑鉘鉙鉜鉝鉠鉡鉥鉧鉨鉩鉮鉯鉰鉵",4,"鉻鉼鉽鉿銈銉銊銍銎銒銗"],["8fe4a1","銙銟銠銤銥銧銨銫銯銲銶銸銺銻銼銽銿",4,"鋅鋆鋇鋈鋋鋌鋍鋎鋐鋓鋕鋗鋘鋙鋜鋝鋟鋠鋡鋣鋥鋧鋨鋬鋮鋰鋹鋻鋿錀錂錈錍錑錔錕錜錝錞錟錡錤錥錧錩錪錳錴錶錷鍇鍈鍉鍐鍑鍒鍕鍗鍘鍚鍞鍤鍥鍧鍩鍪鍭鍯鍰鍱鍳鍴鍶"],["8fe5a1","鍺鍽鍿鎀鎁鎂鎈鎊鎋鎍鎏鎒鎕鎘鎛鎞鎡鎣鎤鎦鎨鎫鎴鎵鎶鎺鎩鏁鏄鏅鏆鏇鏉",4,"鏓鏙鏜鏞鏟鏢鏦鏧鏹鏷鏸鏺鏻鏽鐁鐂鐄鐈鐉鐍鐎鐏鐕鐖鐗鐟鐮鐯鐱鐲鐳鐴鐻鐿鐽鑃鑅鑈鑊鑌鑕鑙鑜鑟鑡鑣鑨鑫鑭鑮鑯鑱鑲钄钃镸镹"],["8fe6a1","镾閄閈閌閍閎閝閞閟閡閦閩閫閬閴閶閺閽閿闆闈闉闋闐闑闒闓闙闚闝闞闟闠闤闦阝阞阢阤阥阦阬阱阳阷阸阹阺阼阽陁陒陔陖陗陘陡陮陴陻陼陾陿隁隂隃隄隉隑隖隚隝隟隤隥隦隩隮隯隳隺雊雒嶲雘雚雝雞雟雩雯雱雺霂"],["8fe7a1","霃霅霉霚霛霝霡霢霣霨霱霳靁靃靊靎靏靕靗靘靚靛靣靧靪靮靳靶靷靸靻靽靿鞀鞉鞕鞖鞗鞙鞚鞞鞟鞢鞬鞮鞱鞲鞵鞶鞸鞹鞺鞼鞾鞿韁韄韅韇韉韊韌韍韎韐韑韔韗韘韙韝韞韠韛韡韤韯韱韴韷韸韺頇頊頙頍頎頔頖頜頞頠頣頦"],["8fe8a1","頫頮頯頰頲頳頵頥頾顄顇顊顑顒顓顖顗顙顚顢顣顥顦顪顬颫颭颮颰颴颷颸颺颻颿飂飅飈飌飡飣飥飦飧飪飳飶餂餇餈餑餕餖餗餚餛餜餟餢餦餧餫餱",4,"餹餺餻餼饀饁饆饇饈饍饎饔饘饙饛饜饞饟饠馛馝馟馦馰馱馲馵"],["8fe9a1","馹馺馽馿駃駉駓駔駙駚駜駞駧駪駫駬駰駴駵駹駽駾騂騃騄騋騌騐騑騖騞騠騢騣騤騧騭騮騳騵騶騸驇驁驄驊驋驌驎驑驔驖驝骪骬骮骯骲骴骵骶骹骻骾骿髁髃髆髈髎髐髒髕髖髗髛髜髠髤髥髧髩髬髲髳髵髹髺髽髿",4],["8feaa1","鬄鬅鬈鬉鬋鬌鬍鬎鬐鬒鬖鬙鬛鬜鬠鬦鬫鬭鬳鬴鬵鬷鬹鬺鬽魈魋魌魕魖魗魛魞魡魣魥魦魨魪",4,"魳魵魷魸魹魿鮀鮄鮅鮆鮇鮉鮊鮋鮍鮏鮐鮔鮚鮝鮞鮦鮧鮩鮬鮰鮱鮲鮷鮸鮻鮼鮾鮿鯁鯇鯈鯎鯐鯗鯘鯝鯟鯥鯧鯪鯫鯯鯳鯷鯸"],["8feba1","鯹鯺鯽鯿鰀鰂鰋鰏鰑鰖鰘鰙鰚鰜鰞鰢鰣鰦",4,"鰱鰵鰶鰷鰽鱁鱃鱄鱅鱉鱊鱎鱏鱐鱓鱔鱖鱘鱛鱝鱞鱟鱣鱩鱪鱜鱫鱨鱮鱰鱲鱵鱷鱻鳦鳲鳷鳹鴋鴂鴑鴗鴘鴜鴝鴞鴯鴰鴲鴳鴴鴺鴼鵅鴽鵂鵃鵇鵊鵓鵔鵟鵣鵢鵥鵩鵪鵫鵰鵶鵷鵻"],["8feca1","鵼鵾鶃鶄鶆鶊鶍鶎鶒鶓鶕鶖鶗鶘鶡鶪鶬鶮鶱鶵鶹鶼鶿鷃鷇鷉鷊鷔鷕鷖鷗鷚鷞鷟鷠鷥鷧鷩鷫鷮鷰鷳鷴鷾鸊鸂鸇鸎鸐鸑鸒鸕鸖鸙鸜鸝鹺鹻鹼麀麂麃麄麅麇麎麏麖麘麛麞麤麨麬麮麯麰麳麴麵黆黈黋黕黟黤黧黬黭黮黰黱黲黵"],["8feda1","黸黿鼂鼃鼉鼏鼐鼑鼒鼔鼖鼗鼙鼚鼛鼟鼢鼦鼪鼫鼯鼱鼲鼴鼷鼹鼺鼼鼽鼿齁齃",4,"齓齕齖齗齘齚齝齞齨齩齭",4,"齳齵齺齽龏龐龑龒龔龖龗龞龡龢龣龥"]]')},99129:function(A){"use strict";A.exports=JSON.parse('{"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]}')},55914:function(A){"use strict";A.exports=JSON.parse('[["a140","",62],["a180","",32],["a240","",62],["a280","",32],["a2ab","",5],["a2e3","€"],["a2ef",""],["a2fd",""],["a340","",62],["a380","",31," "],["a440","",62],["a480","",32],["a4f4","",10],["a540","",62],["a580","",32],["a5f7","",7],["a640","",62],["a680","",32],["a6b9","",7],["a6d9","",6],["a6ec",""],["a6f3",""],["a6f6","",8],["a740","",62],["a780","",32],["a7c2","",14],["a7f2","",12],["a896","",10],["a8bc","ḿ"],["a8bf","ǹ"],["a8c1",""],["a8ea","",20],["a958",""],["a95b",""],["a95d",""],["a989","〾⿰",11],["a997","",12],["a9f0","",14],["aaa1","",93],["aba1","",93],["aca1","",93],["ada1","",93],["aea1","",93],["afa1","",93],["d7fa","",4],["f8a1","",93],["f9a1","",93],["faa1","",93],["fba1","",93],["fca1","",93],["fda1","",93],["fe50","⺁⺄㑳㑇⺈⺋㖞㘚㘎⺌⺗㥮㤘㧏㧟㩳㧐㭎㱮㳠⺧⺪䁖䅟⺮䌷⺳⺶⺷䎱䎬⺻䏝䓖䙡䙌"],["fe80","䜣䜩䝼䞍⻊䥇䥺䥽䦂䦃䦅䦆䦟䦛䦷䦶䲣䲟䲠䲡䱷䲢䴓",6,"䶮",93],["8135f437",""]]')},40679:function(A){"use strict";A.exports=JSON.parse('[["0","\\u0000",128],["a1","。",62],["8140"," 、。,.・:;?!゛゜´`¨^ ̄_ヽヾゝゞ〃仝々〆〇ー―‐/\~∥|…‥‘’“”()〔〕[]{}〈",9,"+-±×"],["8180","÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓"],["81b8","∈∋⊆⊇⊂⊃∪∩"],["81c8","∧∨¬⇒⇔∀∃"],["81da","∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬"],["81f0","ʼn♯♭♪†‡¶"],["81fc","◯"],["824f","0",9],["8260","A",25],["8281","a",25],["829f","ぁ",82],["8340","ァ",62],["8380","ム",22],["839f","Α",16,"Σ",6],["83bf","α",16,"σ",6],["8440","А",5,"ЁЖ",25],["8470","а",5,"ёж",7],["8480","о",17],["849f","─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂"],["8740","①",19,"Ⅰ",9],["875f","㍉㌔㌢㍍㌘㌧㌃㌶㍑㍗㌍㌦㌣㌫㍊㌻㎜㎝㎞㎎㎏㏄㎡"],["877e","㍻"],["8780","〝〟№㏍℡㊤",4,"㈱㈲㈹㍾㍽㍼≒≡∫∮∑√⊥∠∟⊿∵∩∪"],["889f","亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴絢綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易椅為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員因姻引飲淫胤蔭"],["8940","院陰隠韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影映曳栄永泳洩瑛盈穎頴英衛詠鋭液疫益駅悦謁越閲榎厭円"],["8980","園堰奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗遠鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳加可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐戒拐改"],["8a40","魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃嚇各廓拡撹格核殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛笠樫"],["8a80","橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄株兜竃蒲釜鎌噛鴨栢茅萱粥刈苅瓦乾侃冠寒刊勘勧巻喚堪姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡緩缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁頑顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄"],["8b40","機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺犠疑祇義蟻誼議掬菊鞠吉吃喫桔橘詰砧杵黍却客脚虐逆丘久仇休及吸宮弓急救"],["8b80","朽求汲泣灸球究窮笈級糾給旧牛去居巨拒拠挙渠虚許距鋸漁禦魚亨享京供侠僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎郷鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊芹菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓遇隅串櫛釧屑屈"],["8c40","掘窟沓靴轡窪熊隈粂栗繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽頚鶏芸迎鯨"],["8c80","劇戟撃激隙桁傑欠決潔穴結血訣月件倹倦健兼券剣喧圏堅嫌建憲懸拳捲検権牽犬献研硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限乎個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾厚口向"],["8d40","后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭校梗構江洪浩港溝甲皇硬稿糠紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱砿鋼閤降"],["8d80","項香高鴻剛劫号合壕拷濠豪轟麹克刻告国穀酷鵠黒獄漉腰甑忽惚骨狛込此頃今困坤墾婚恨懇昏昆根梱混痕紺艮魂些佐叉唆嵯左差査沙瑳砂詐鎖裟坐座挫債催再最哉塞妻宰彩才採栽歳済災采犀砕砦祭斎細菜裁載際剤在材罪財冴坂阪堺榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷"],["8e40","察拶撮擦札殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨枝止"],["8e80","死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字寺慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀篠偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩珠種腫趣酒首儒受呪寿授樹綬需囚収周"],["8f40","宗就州修愁拾洲秀秋終繍習臭舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿淑祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳"],["8f80","準潤盾純巡遵醇順処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷償勝匠升召哨商唱嘗奨妾娼宵将小少尚庄床廠彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称章笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城場壌嬢常情擾条杖浄状畳穣蒸譲醸錠嘱埴飾"],["9040","拭植殖燭織職色触食蝕辱尻伸信侵唇娠寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏須酢図厨"],["9080","逗吹垂帥推水炊睡粋翠衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅頗雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲栖正清牲生盛精聖声製西誠誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千占宣専尖川戦扇撰栓栴泉浅洗染潜煎煽旋穿箭線"],["9140","繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗素組蘇訴阻遡鼠僧創双叢倉喪壮奏爽宋層匝惣想捜掃挿掻"],["9180","操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈造促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾堕妥惰打柁舵楕陀駄騨体堆対耐岱帯待怠態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托択拓沢濯琢託鐸濁諾茸凧蛸只"],["9240","叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹単嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智池痴稚置致蜘遅馳築畜竹筑蓄"],["9280","逐秩窒茶嫡着中仲宙忠抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長頂鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚栂掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈堤定帝底庭廷弟悌抵挺提梯汀碇禎程締艇訂諦蹄逓"],["9340","邸鄭釘鼎泥摘擢敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐堵塗妬屠徒斗杜渡登菟賭途都鍍砥砺努度土奴怒倒党冬"],["9380","凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶頭騰闘働動同堂導憧撞洞瞳童胴萄道銅峠鴇匿得徳涜特督禿篤毒独読栃橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁頓呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南楠軟難汝二尼弐迩匂賑肉虹廿日乳入"],["9440","如尿韮任妊忍認濡禰祢寧葱猫熱年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶破婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅"],["9480","楳煤狽買売賠陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝漠爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑畠八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩頒飯挽晩番盤磐蕃蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋簸備尾微枇毘琵眉美"],["9540","鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓頻敏瓶不付埠夫婦富冨布府怖扶敷"],["9580","斧普浮父符腐膚芙譜負賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払沸仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米頁僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆報奉宝峰峯崩庖抱捧放方朋"],["9640","法泡烹砲縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防吠頬北僕卜墨撲朴牧睦穆釦勃没殆堀幌奔本翻凡盆"],["9680","摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔脈妙粍民眠務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶紋門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒"],["9740","諭輸唯佑優勇友宥幽悠憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿預傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲"],["9780","沃浴翌翼淀羅螺裸来莱頼雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎掠略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵領力緑倫厘林淋燐琳臨輪隣鱗麟瑠塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋憐漣煉簾練聯"],["9840","蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑枠鷲亙亘鰐詫藁蕨椀湾碗腕"],["989f","弌丐丕个丱丶丼丿乂乖乘亂亅豫亊舒弍于亞亟亠亢亰亳亶从仍仄仆仂仗仞仭仟价伉佚估佛佝佗佇佶侈侏侘佻佩佰侑佯來侖儘俔俟俎俘俛俑俚俐俤俥倚倨倔倪倥倅伜俶倡倩倬俾俯們倆偃假會偕偐偈做偖偬偸傀傚傅傴傲"],["9940","僉僊傳僂僖僞僥僭僣僮價僵儉儁儂儖儕儔儚儡儺儷儼儻儿兀兒兌兔兢竸兩兪兮冀冂囘册冉冏冑冓冕冖冤冦冢冩冪冫决冱冲冰况冽凅凉凛几處凩凭"],["9980","凰凵凾刄刋刔刎刧刪刮刳刹剏剄剋剌剞剔剪剴剩剳剿剽劍劔劒剱劈劑辨辧劬劭劼劵勁勍勗勞勣勦飭勠勳勵勸勹匆匈甸匍匐匏匕匚匣匯匱匳匸區卆卅丗卉卍凖卞卩卮夘卻卷厂厖厠厦厥厮厰厶參簒雙叟曼燮叮叨叭叺吁吽呀听吭吼吮吶吩吝呎咏呵咎呟呱呷呰咒呻咀呶咄咐咆哇咢咸咥咬哄哈咨"],["9a40","咫哂咤咾咼哘哥哦唏唔哽哮哭哺哢唹啀啣啌售啜啅啖啗唸唳啝喙喀咯喊喟啻啾喘喞單啼喃喩喇喨嗚嗅嗟嗄嗜嗤嗔嘔嗷嘖嗾嗽嘛嗹噎噐營嘴嘶嘲嘸"],["9a80","噫噤嘯噬噪嚆嚀嚊嚠嚔嚏嚥嚮嚶嚴囂嚼囁囃囀囈囎囑囓囗囮囹圀囿圄圉圈國圍圓團圖嗇圜圦圷圸坎圻址坏坩埀垈坡坿垉垓垠垳垤垪垰埃埆埔埒埓堊埖埣堋堙堝塲堡塢塋塰毀塒堽塹墅墹墟墫墺壞墻墸墮壅壓壑壗壙壘壥壜壤壟壯壺壹壻壼壽夂夊夐夛梦夥夬夭夲夸夾竒奕奐奎奚奘奢奠奧奬奩"],["9b40","奸妁妝佞侫妣妲姆姨姜妍姙姚娥娟娑娜娉娚婀婬婉娵娶婢婪媚媼媾嫋嫂媽嫣嫗嫦嫩嫖嫺嫻嬌嬋嬖嬲嫐嬪嬶嬾孃孅孀孑孕孚孛孥孩孰孳孵學斈孺宀"],["9b80","它宦宸寃寇寉寔寐寤實寢寞寥寫寰寶寳尅將專對尓尠尢尨尸尹屁屆屎屓屐屏孱屬屮乢屶屹岌岑岔妛岫岻岶岼岷峅岾峇峙峩峽峺峭嶌峪崋崕崗嵜崟崛崑崔崢崚崙崘嵌嵒嵎嵋嵬嵳嵶嶇嶄嶂嶢嶝嶬嶮嶽嶐嶷嶼巉巍巓巒巖巛巫已巵帋帚帙帑帛帶帷幄幃幀幎幗幔幟幢幤幇幵并幺麼广庠廁廂廈廐廏"],["9c40","廖廣廝廚廛廢廡廨廩廬廱廳廰廴廸廾弃弉彝彜弋弑弖弩弭弸彁彈彌彎弯彑彖彗彙彡彭彳彷徃徂彿徊很徑徇從徙徘徠徨徭徼忖忻忤忸忱忝悳忿怡恠"],["9c80","怙怐怩怎怱怛怕怫怦怏怺恚恁恪恷恟恊恆恍恣恃恤恂恬恫恙悁悍惧悃悚悄悛悖悗悒悧悋惡悸惠惓悴忰悽惆悵惘慍愕愆惶惷愀惴惺愃愡惻惱愍愎慇愾愨愧慊愿愼愬愴愽慂慄慳慷慘慙慚慫慴慯慥慱慟慝慓慵憙憖憇憬憔憚憊憑憫憮懌懊應懷懈懃懆憺懋罹懍懦懣懶懺懴懿懽懼懾戀戈戉戍戌戔戛"],["9d40","戞戡截戮戰戲戳扁扎扞扣扛扠扨扼抂抉找抒抓抖拔抃抔拗拑抻拏拿拆擔拈拜拌拊拂拇抛拉挌拮拱挧挂挈拯拵捐挾捍搜捏掖掎掀掫捶掣掏掉掟掵捫"],["9d80","捩掾揩揀揆揣揉插揶揄搖搴搆搓搦搶攝搗搨搏摧摯摶摎攪撕撓撥撩撈撼據擒擅擇撻擘擂擱擧舉擠擡抬擣擯攬擶擴擲擺攀擽攘攜攅攤攣攫攴攵攷收攸畋效敖敕敍敘敞敝敲數斂斃變斛斟斫斷旃旆旁旄旌旒旛旙无旡旱杲昊昃旻杳昵昶昴昜晏晄晉晁晞晝晤晧晨晟晢晰暃暈暎暉暄暘暝曁暹曉暾暼"],["9e40","曄暸曖曚曠昿曦曩曰曵曷朏朖朞朦朧霸朮朿朶杁朸朷杆杞杠杙杣杤枉杰枩杼杪枌枋枦枡枅枷柯枴柬枳柩枸柤柞柝柢柮枹柎柆柧檜栞框栩桀桍栲桎"],["9e80","梳栫桙档桷桿梟梏梭梔條梛梃檮梹桴梵梠梺椏梍桾椁棊椈棘椢椦棡椌棍棔棧棕椶椒椄棗棣椥棹棠棯椨椪椚椣椡棆楹楷楜楸楫楔楾楮椹楴椽楙椰楡楞楝榁楪榲榮槐榿槁槓榾槎寨槊槝榻槃榧樮榑榠榜榕榴槞槨樂樛槿權槹槲槧樅榱樞槭樔槫樊樒櫁樣樓橄樌橲樶橸橇橢橙橦橈樸樢檐檍檠檄檢檣"],["9f40","檗蘗檻櫃櫂檸檳檬櫞櫑櫟檪櫚櫪櫻欅蘖櫺欒欖鬱欟欸欷盜欹飮歇歃歉歐歙歔歛歟歡歸歹歿殀殄殃殍殘殕殞殤殪殫殯殲殱殳殷殼毆毋毓毟毬毫毳毯"],["9f80","麾氈氓气氛氤氣汞汕汢汪沂沍沚沁沛汾汨汳沒沐泄泱泓沽泗泅泝沮沱沾沺泛泯泙泪洟衍洶洫洽洸洙洵洳洒洌浣涓浤浚浹浙涎涕濤涅淹渕渊涵淇淦涸淆淬淞淌淨淒淅淺淙淤淕淪淮渭湮渮渙湲湟渾渣湫渫湶湍渟湃渺湎渤滿渝游溂溪溘滉溷滓溽溯滄溲滔滕溏溥滂溟潁漑灌滬滸滾漿滲漱滯漲滌"],["e040","漾漓滷澆潺潸澁澀潯潛濳潭澂潼潘澎澑濂潦澳澣澡澤澹濆澪濟濕濬濔濘濱濮濛瀉瀋濺瀑瀁瀏濾瀛瀚潴瀝瀘瀟瀰瀾瀲灑灣炙炒炯烱炬炸炳炮烟烋烝"],["e080","烙焉烽焜焙煥煕熈煦煢煌煖煬熏燻熄熕熨熬燗熹熾燒燉燔燎燠燬燧燵燼燹燿爍爐爛爨爭爬爰爲爻爼爿牀牆牋牘牴牾犂犁犇犒犖犢犧犹犲狃狆狄狎狒狢狠狡狹狷倏猗猊猜猖猝猴猯猩猥猾獎獏默獗獪獨獰獸獵獻獺珈玳珎玻珀珥珮珞璢琅瑯琥珸琲琺瑕琿瑟瑙瑁瑜瑩瑰瑣瑪瑶瑾璋璞璧瓊瓏瓔珱"],["e140","瓠瓣瓧瓩瓮瓲瓰瓱瓸瓷甄甃甅甌甎甍甕甓甞甦甬甼畄畍畊畉畛畆畚畩畤畧畫畭畸當疆疇畴疊疉疂疔疚疝疥疣痂疳痃疵疽疸疼疱痍痊痒痙痣痞痾痿"],["e180","痼瘁痰痺痲痳瘋瘍瘉瘟瘧瘠瘡瘢瘤瘴瘰瘻癇癈癆癜癘癡癢癨癩癪癧癬癰癲癶癸發皀皃皈皋皎皖皓皙皚皰皴皸皹皺盂盍盖盒盞盡盥盧盪蘯盻眈眇眄眩眤眞眥眦眛眷眸睇睚睨睫睛睥睿睾睹瞎瞋瞑瞠瞞瞰瞶瞹瞿瞼瞽瞻矇矍矗矚矜矣矮矼砌砒礦砠礪硅碎硴碆硼碚碌碣碵碪碯磑磆磋磔碾碼磅磊磬"],["e240","磧磚磽磴礇礒礑礙礬礫祀祠祗祟祚祕祓祺祿禊禝禧齋禪禮禳禹禺秉秕秧秬秡秣稈稍稘稙稠稟禀稱稻稾稷穃穗穉穡穢穩龝穰穹穽窈窗窕窘窖窩竈窰"],["e280","窶竅竄窿邃竇竊竍竏竕竓站竚竝竡竢竦竭竰笂笏笊笆笳笘笙笞笵笨笶筐筺笄筍笋筌筅筵筥筴筧筰筱筬筮箝箘箟箍箜箚箋箒箏筝箙篋篁篌篏箴篆篝篩簑簔篦篥籠簀簇簓篳篷簗簍篶簣簧簪簟簷簫簽籌籃籔籏籀籐籘籟籤籖籥籬籵粃粐粤粭粢粫粡粨粳粲粱粮粹粽糀糅糂糘糒糜糢鬻糯糲糴糶糺紆"],["e340","紂紜紕紊絅絋紮紲紿紵絆絳絖絎絲絨絮絏絣經綉絛綏絽綛綺綮綣綵緇綽綫總綢綯緜綸綟綰緘緝緤緞緻緲緡縅縊縣縡縒縱縟縉縋縢繆繦縻縵縹繃縷"],["e380","縲縺繧繝繖繞繙繚繹繪繩繼繻纃緕繽辮繿纈纉續纒纐纓纔纖纎纛纜缸缺罅罌罍罎罐网罕罔罘罟罠罨罩罧罸羂羆羃羈羇羌羔羞羝羚羣羯羲羹羮羶羸譱翅翆翊翕翔翡翦翩翳翹飜耆耄耋耒耘耙耜耡耨耿耻聊聆聒聘聚聟聢聨聳聲聰聶聹聽聿肄肆肅肛肓肚肭冐肬胛胥胙胝胄胚胖脉胯胱脛脩脣脯腋"],["e440","隋腆脾腓腑胼腱腮腥腦腴膃膈膊膀膂膠膕膤膣腟膓膩膰膵膾膸膽臀臂膺臉臍臑臙臘臈臚臟臠臧臺臻臾舁舂舅與舊舍舐舖舩舫舸舳艀艙艘艝艚艟艤"],["e480","艢艨艪艫舮艱艷艸艾芍芒芫芟芻芬苡苣苟苒苴苳苺莓范苻苹苞茆苜茉苙茵茴茖茲茱荀茹荐荅茯茫茗茘莅莚莪莟莢莖茣莎莇莊荼莵荳荵莠莉莨菴萓菫菎菽萃菘萋菁菷萇菠菲萍萢萠莽萸蔆菻葭萪萼蕚蒄葷葫蒭葮蒂葩葆萬葯葹萵蓊葢蒹蒿蒟蓙蓍蒻蓚蓐蓁蓆蓖蒡蔡蓿蓴蔗蔘蔬蔟蔕蔔蓼蕀蕣蕘蕈"],["e540","蕁蘂蕋蕕薀薤薈薑薊薨蕭薔薛藪薇薜蕷蕾薐藉薺藏薹藐藕藝藥藜藹蘊蘓蘋藾藺蘆蘢蘚蘰蘿虍乕虔號虧虱蚓蚣蚩蚪蚋蚌蚶蚯蛄蛆蚰蛉蠣蚫蛔蛞蛩蛬"],["e580","蛟蛛蛯蜒蜆蜈蜀蜃蛻蜑蜉蜍蛹蜊蜴蜿蜷蜻蜥蜩蜚蝠蝟蝸蝌蝎蝴蝗蝨蝮蝙蝓蝣蝪蠅螢螟螂螯蟋螽蟀蟐雖螫蟄螳蟇蟆螻蟯蟲蟠蠏蠍蟾蟶蟷蠎蟒蠑蠖蠕蠢蠡蠱蠶蠹蠧蠻衄衂衒衙衞衢衫袁衾袞衵衽袵衲袂袗袒袮袙袢袍袤袰袿袱裃裄裔裘裙裝裹褂裼裴裨裲褄褌褊褓襃褞褥褪褫襁襄褻褶褸襌褝襠襞"],["e640","襦襤襭襪襯襴襷襾覃覈覊覓覘覡覩覦覬覯覲覺覽覿觀觚觜觝觧觴觸訃訖訐訌訛訝訥訶詁詛詒詆詈詼詭詬詢誅誂誄誨誡誑誥誦誚誣諄諍諂諚諫諳諧"],["e680","諤諱謔諠諢諷諞諛謌謇謚諡謖謐謗謠謳鞫謦謫謾謨譁譌譏譎證譖譛譚譫譟譬譯譴譽讀讌讎讒讓讖讙讚谺豁谿豈豌豎豐豕豢豬豸豺貂貉貅貊貍貎貔豼貘戝貭貪貽貲貳貮貶賈賁賤賣賚賽賺賻贄贅贊贇贏贍贐齎贓賍贔贖赧赭赱赳趁趙跂趾趺跏跚跖跌跛跋跪跫跟跣跼踈踉跿踝踞踐踟蹂踵踰踴蹊"],["e740","蹇蹉蹌蹐蹈蹙蹤蹠踪蹣蹕蹶蹲蹼躁躇躅躄躋躊躓躑躔躙躪躡躬躰軆躱躾軅軈軋軛軣軼軻軫軾輊輅輕輒輙輓輜輟輛輌輦輳輻輹轅轂輾轌轉轆轎轗轜"],["e780","轢轣轤辜辟辣辭辯辷迚迥迢迪迯邇迴逅迹迺逑逕逡逍逞逖逋逧逶逵逹迸遏遐遑遒逎遉逾遖遘遞遨遯遶隨遲邂遽邁邀邊邉邏邨邯邱邵郢郤扈郛鄂鄒鄙鄲鄰酊酖酘酣酥酩酳酲醋醉醂醢醫醯醪醵醴醺釀釁釉釋釐釖釟釡釛釼釵釶鈞釿鈔鈬鈕鈑鉞鉗鉅鉉鉤鉈銕鈿鉋鉐銜銖銓銛鉚鋏銹銷鋩錏鋺鍄錮"],["e840","錙錢錚錣錺錵錻鍜鍠鍼鍮鍖鎰鎬鎭鎔鎹鏖鏗鏨鏥鏘鏃鏝鏐鏈鏤鐚鐔鐓鐃鐇鐐鐶鐫鐵鐡鐺鑁鑒鑄鑛鑠鑢鑞鑪鈩鑰鑵鑷鑽鑚鑼鑾钁鑿閂閇閊閔閖閘閙"],["e880","閠閨閧閭閼閻閹閾闊濶闃闍闌闕闔闖關闡闥闢阡阨阮阯陂陌陏陋陷陜陞陝陟陦陲陬隍隘隕隗險隧隱隲隰隴隶隸隹雎雋雉雍襍雜霍雕雹霄霆霈霓霎霑霏霖霙霤霪霰霹霽霾靄靆靈靂靉靜靠靤靦靨勒靫靱靹鞅靼鞁靺鞆鞋鞏鞐鞜鞨鞦鞣鞳鞴韃韆韈韋韜韭齏韲竟韶韵頏頌頸頤頡頷頽顆顏顋顫顯顰"],["e940","顱顴顳颪颯颱颶飄飃飆飩飫餃餉餒餔餘餡餝餞餤餠餬餮餽餾饂饉饅饐饋饑饒饌饕馗馘馥馭馮馼駟駛駝駘駑駭駮駱駲駻駸騁騏騅駢騙騫騷驅驂驀驃"],["e980","騾驕驍驛驗驟驢驥驤驩驫驪骭骰骼髀髏髑髓體髞髟髢髣髦髯髫髮髴髱髷髻鬆鬘鬚鬟鬢鬣鬥鬧鬨鬩鬪鬮鬯鬲魄魃魏魍魎魑魘魴鮓鮃鮑鮖鮗鮟鮠鮨鮴鯀鯊鮹鯆鯏鯑鯒鯣鯢鯤鯔鯡鰺鯲鯱鯰鰕鰔鰉鰓鰌鰆鰈鰒鰊鰄鰮鰛鰥鰤鰡鰰鱇鰲鱆鰾鱚鱠鱧鱶鱸鳧鳬鳰鴉鴈鳫鴃鴆鴪鴦鶯鴣鴟鵄鴕鴒鵁鴿鴾鵆鵈"],["ea40","鵝鵞鵤鵑鵐鵙鵲鶉鶇鶫鵯鵺鶚鶤鶩鶲鷄鷁鶻鶸鶺鷆鷏鷂鷙鷓鷸鷦鷭鷯鷽鸚鸛鸞鹵鹹鹽麁麈麋麌麒麕麑麝麥麩麸麪麭靡黌黎黏黐黔黜點黝黠黥黨黯"],["ea80","黴黶黷黹黻黼黽鼇鼈皷鼕鼡鼬鼾齊齒齔齣齟齠齡齦齧齬齪齷齲齶龕龜龠堯槇遙瑤凜熙"],["ed40","纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏"],["ed80","塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱"],["ee40","犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙"],["ee80","蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"],["eeef","ⅰ",9,"¬¦'""],["f040","",62],["f080","",124],["f140","",62],["f180","",124],["f240","",62],["f280","",124],["f340","",62],["f380","",124],["f440","",62],["f480","",124],["f540","",62],["f580","",124],["f640","",62],["f680","",124],["f740","",62],["f780","",124],["f840","",62],["f880","",124],["f940",""],["fa40","ⅰ",9,"Ⅰ",9,"¬¦'"㈱№℡∵纊褜鍈銈蓜俉炻昱棈鋹曻彅丨仡仼伀伃伹佖侒侊侚侔俍偀倢俿倞偆偰偂傔僴僘兊"],["fa80","兤冝冾凬刕劜劦勀勛匀匇匤卲厓厲叝﨎咜咊咩哿喆坙坥垬埈埇﨏塚增墲夋奓奛奝奣妤妺孖寀甯寘寬尞岦岺峵崧嵓﨑嵂嵭嶸嶹巐弡弴彧德忞恝悅悊惞惕愠惲愑愷愰憘戓抦揵摠撝擎敎昀昕昻昉昮昞昤晥晗晙晴晳暙暠暲暿曺朎朗杦枻桒柀栁桄棏﨓楨﨔榘槢樰橫橆橳橾櫢櫤毖氿汜沆汯泚洄涇浯"],["fb40","涖涬淏淸淲淼渹湜渧渼溿澈澵濵瀅瀇瀨炅炫焏焄煜煆煇凞燁燾犱犾猤猪獷玽珉珖珣珒琇珵琦琪琩琮瑢璉璟甁畯皂皜皞皛皦益睆劯砡硎硤硺礰礼神"],["fb80","祥禔福禛竑竧靖竫箞精絈絜綷綠緖繒罇羡羽茁荢荿菇菶葈蒴蕓蕙蕫﨟薰蘒﨡蠇裵訒訷詹誧誾諟諸諶譓譿賰賴贒赶﨣軏﨤逸遧郞都鄕鄧釚釗釞釭釮釤釥鈆鈐鈊鈺鉀鈼鉎鉙鉑鈹鉧銧鉷鉸鋧鋗鋙鋐﨧鋕鋠鋓錥錡鋻﨨錞鋿錝錂鍰鍗鎤鏆鏞鏸鐱鑅鑈閒隆﨩隝隯霳霻靃靍靏靑靕顗顥飯飼餧館馞驎髙"],["fc40","髜魵魲鮏鮱鮻鰀鵰鵫鶴鸙黑"]]')}},t={};function e(s){var i=t[s];if(void 0!==i)return i.exports;var n=t[s]={id:s,loaded:!1,exports:{}};return A[s].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports}return e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(A){if("object"==typeof window)return window}}(),e.nmd=function(A){return A.paths=[],A.children||(A.children=[]),A},e(36164)}()},A.exports=t()}}]); +//# sourceMappingURL=pdfmake.js.map \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/deps/pdfmake.js.map b/src/main/resources/static/js/amcharts5/deps/pdfmake.js.map new file mode 100644 index 00000000..a75d67a9 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/deps/pdfmake.js.map @@ -0,0 +1 @@ +{"version":3,"file":"deps/pdfmake.js","mappings":"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AY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,UAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,QAAY,UAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,SACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,YACxC,CAAI,WAAY,WAAY,WAAY,WACpC,SAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,SACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,UAAY,UAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,SAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,UAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,SACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,UAAY,WAAY,WACpC,UAAY,WAAY,SAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,WAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,YACxC,CAAI,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,SACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,UAAY,SAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,UAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,UAAY,UAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,QAAY,UACpC,UAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,UAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,YACxC,CAAI,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,UAAY,SACpC,WAAY,SAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,SAAY,SACpC,WAAY,WAAY,WAAY,WACpC,UAAY,UAAY,WAAY,UACpC,WAAY,WAAY,SAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,SACpC,UAAY,WAAY,UAAY,WACpC,WAAY,UAAY,SAAY,UACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY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AAME,EAAyB,CAC7B,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QAIIC,EAAwB,SAAAC,UAC5BR,EAAQQ,EAAWF,IAOfG,EAA6B,CACjC,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAYIC,EAA6B,CACjC,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,OAQIC,EAAgC,CAKpC,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,OACA,QAGIC,EAA2B,CAK/B,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,SAMIC,EAAwB,CAK5B,EACA,GACA,IACA,IAMA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KAMA,MACA,MAMA,MACA,MAMA,MACA,MAMA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MAMA,OACA,OACA,OACA,OAOA,OACA,QACA,QACA,SAIIC,EAAwB,SAAAN,UAC5BR,EAAQQ,EAAWE,IACnBV,EAAQQ,EAAWK,IACnBb,EAAQQ,EAAWG,IACnBX,EAAQQ,EAAWI,IAOfG,EAAqB,CACzB,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OAIIC,EAAqB,SAAAR,UAAaR,EAAQQ,EAAWO,IAOrDE,EAAkB,CACtB,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,KACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,OACA,QACA,QACA,SAIIC,EAAmB,SAAAV,UAAaR,EAAQQ,EAAWS,ICt2DnDE,EAAe,SAAAX,UAAaA,EAAUY,YAAY,IAWxD,SAASC,GAAaz1D,WACd01D,EAAa,GACb5vE,EAAOka,EAAMzb,OAEVqB,EAAI,EAAGA,EAAIE,EAAMF,GAAK,EAAG,KAC1B+vE,EAAS31D,EAAM5J,WAAWxQ,MAE5B+vE,GAAU,OAAUA,GAAU,OAAU7vE,EAAOF,EAAI,EAAG,KAClDinC,EAAO7sB,EAAM5J,WAAWxQ,EAAI,MAE9BinC,GAAQ,OAAUA,GAAQ,MAAQ,CACpC6oC,EAAW/vE,KAAyB,MAAnBgwE,EAAS,OAAkB9oC,EAAO,MAAS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G,EAAG,EAAG,EAAG,EAAG,EAAG,EAE7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAG7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAE7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAE7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAE7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAE5C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC9C,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAE3D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC3D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC3D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC3D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAE3D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAC5D,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAC5D,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAE5D,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC7C,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG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AAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,EAAG,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,KACpD,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,EAAG,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,KACpD,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,EAAG,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,MACpD,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,MACrD,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,MACrD,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,MACrD,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,MACrD,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,MACzD,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,MAC1D,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,MAC1D,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,MAC1D,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,MAC1D,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,GAAI,GAAI,GAAI,IAAK,MAC1D,CAAC,CAAC,GAAI,GAAI,GAAI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,CAA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R,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,UACR,KAAQ,KACR,KAAQ,KACR,MAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,MAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,MACR,KAAQ,QACR,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,UACR,KAAQ,QACR,KAAQ,QACR,KAAQ,MACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,MACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,SACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,MACR,KAAQ,MACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,QACR,KAAQ,UACR,KAAQ,KACR,KAAQ,UACR,KAAQ,KACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,MACR,KAAQ,KACR,KAAQ,MACR,KAAQ,KACR,KAAQ,SACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,KAAQ,MACR,KAAQ,KACR,KAAQ,QACR,KAAQ,QACR,KAAQ,KACR,KAAQ,MACR,KAAQ,KACR,KAAQ,KACR,KAAQ,aACR,KAAQ,KACR,KAAQ,QACR,KAAQ,KACR,KAAQ,KACR,KAAQ,KACR,MAAQ,QACR,KAAQ,KACR,KAAQ,aACR,KAAQ,QACR,KAAQ,KACR,KAAQ,UAC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AAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,IAO3qNC,UANgB,EAAC,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAOvVC,KANW,CAAC,GAAI,CAAC,kBAAmB,CAAC,uBAAwB,CAAC,kBAAmB,CAAC,oBAAqB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,mBAAoB,CAAC,kBAAmB,CAAC,uBAAwB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,6BAA8B,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,mBAAoB,CAAC,oCAAqC,CAAC,oBAAqB,CAAC,oBAAqB,CAAC,qBAWtnCq2N,GAKC,GALDA,GAQC,IARDA,GAkBK,MAlBLA,GAqBE,GAAK,GAKPC,GAAY,CACdC,MAAO,EACPC,kBAAmB,EACnBC,MAAO,EACPC,MAAO,EACPC,OAAQ,GACRC,WAAY,GACZC,QAAS,GACTC,WAAY,IACZC,QAAS,IACTC,UAAW,IACXC,YAAa,KACbC,OAAQ,KACRC,WAAY,KACZC,QAAS,KACTC,KAAM,MACNC,IAAK,OAEHC,GAAkBlB,OAClBmB,GAAenB,GACfoB,GAAwBpB,MACxBqB,GAAgB,CAClBC,QAAS,CACPC,YAAY,EACZC,OAAQ,EACRC,QAAS,OACTC,QAASzB,GAAUW,YACnBe,SAAU,WACVC,SAAU,gBAEZruB,WAAY,CACVguB,YAAY,EACZC,OAAQ,KACRC,QAAS,OACTC,QAASzB,GAAUW,YACnBe,SAAU,WACVC,SAAU,gBAEZnvB,QAAS,CACP8uB,YAAY,EACZC,OAAQ,KACRC,QAAS,OACTC,QAASzB,GAAUU,UACnBgB,SAAU,WACVC,SAAU,gBAEZztB,SAAU,CACRotB,YAAY,EACZC,OAAQ,KACRC,QAAS,OACTC,QAASzB,GAAUQ,WACnBkB,SAAU,WACVC,SAAU,gBAEZ1tB,SAAU,CACRqtB,YAAY,EACZC,OAAQ,KACRC,QAAS,OACTC,QAASzB,GAAUW,YACnBe,SAAU,WACVC,SAAU,gBAEZ5qB,MAAO,CACLuqB,YAAY,EACZC,OAAQ,KACRC,QAAS,OACTC,QAASzB,GAAUM,WACnBoB,SAAU,WACVC,SAAU,gBAEZ/oB,MAAO,CACL0oB,YAAY,EACZC,OAAQ,KACRC,QAAS,OACTC,QAASzB,GAAUa,WACnBa,SAAU,WACVC,SAAU,gBAEZ7oB,OAAQ,CACNwoB,YAAY,EACZC,OAAQ,KACRC,QAAS,OACTC,QAASzB,GAAUa,WACnBa,SAAU,WACVC,SAAU,aAEZ1sB,QAAS,CACPqsB,YAAY,EACZC,OAAQ,KACRC,QAAS,OACTC,QAASzB,GAAUa,WACnBa,SAAU,WACVC,SAAU,aAEZxrB,UAAW,CACTmrB,YAAY,EACZC,OAAQ,KACRC,QAAS,OACTC,QAASzB,GAAUM,WACnBoB,SAAU,YACVC,SAAU,gBAWZ5sB,MAAO,CACLusB,YAAY,EACZC,OAAQ,KACRC,QAAS,QACTC,QAASzB,GAAUE,kBACnBwB,SAAU,YACVC,SAAU,iBAIVC,GAAuB,CAEzB,KAAQ,CAAC,KAAQ,MACjB,KAAQ,CAAC,KAAQ,MACjB,KAAQ,CAAC,KAAQ,MACjB,KAAQ,CAAC,KAAQ,MACjB,KAAQ,CAAC,KAAQ,OAEfC,GAAmBjC,GAAQE,eAC3BgC,GAAS,IAAIhxN,EAAY7vC,EAAO,mqKAAmqK,WACnsKkvP,GAAe,IAAI7mN,EA9NJ,CACjBE,WAJe,CAAC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,GAAI,IAAK,EAAG,GAAI,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,IAAK,EAAG,IAAK,EAAG,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,IAAK,GAAI,IAAK,IAAK,IAAK,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,IAAK,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,IAAK,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,IAAK,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,IAAK,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,EAAG,EAAG,IAAK,IAAK,IAAK,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,IAKtnyCC,UAJc,EAAC,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAO,GAAO,GAAO,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAO,GAAO,GAAO,GAAO,GAAM,GAAM,GAAO,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAO,GAAO,GAAO,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAM,GAAM,GAAM,GAAO,GAAM,GAAM,GAAO,GAAM,GAAM,GAKn0HC,KAJS,CAAC,GAAI,CAAC,kBAAmB,CAAC,sBAAuB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,sBAAuB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,sBAAuB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,qBAAsB,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,CAAC,kBAAmB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,kBAAmB,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,GAAI,GAAI,CAAC,kBAAmB,GAAI,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,qBAAsB,kBAAmB,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,GAAI,GAAI,CAAC,qBAAsB,kBAAmB,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,GAAI,GAAI,CAAC,sBAAuB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,GAAI,GAAI,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,GAAI,GAAI,CAAC,sBAAuB,GAAI,CAAC,qBAAsB,kBAAmB,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,GAAI,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,GAAI,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,GAAI,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,GAAI,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,GAAI,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,GAAI,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,GAAI,CAAC,qBAAsB,kBAAmB,CAAC,qBAAsB,kBAAmB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,sBAAuB,CAAC,sBAAuB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,GAAI,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC,kBAAmB,CAAC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","sources":["webpack://@amcharts/amcharts5/./src/.internal/plugins/exporting/pdfmake/vfs_fonts.ts","webpack://@amcharts/amcharts5/pdfmake/webpack/universalModuleDefinition","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/linebreak/src/classes.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/linebreak/src/pairs.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Bitfield.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Boolean.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Buffer.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/DecodeStream.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/EncodeStream.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Enum.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/LazyArray.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Number.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Optional.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Pointer.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Reserved.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/String.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/Struct.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/VersionedStruct.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/restructure/src/utils.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/buffer/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-buffer-native.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-buffer-view-core.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-buffer.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array-buffer.constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/aes.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/blowfish.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/cipher-core.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/core.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/enc-base64.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/enc-base64url.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/enc-utf16.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/evpkdf.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/format-hex.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/hmac.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/lib-typedarrays.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/md5.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/mode-cfb.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/mode-ctr-gladman.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/mode-ctr.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/mode-ecb.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/mode-ofb.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/pad-ansix923.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/pad-iso10126.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/pad-iso97971.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/pad-nopadding.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/pad-zeropadding.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/pbkdf2.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/rabbit-legacy.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/rabbit.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/rc4.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/ripemd160.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/sha1.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/sha224.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/sha256.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/sha3.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/sha384.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/sha512.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/tripledes.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/crypto-js/x64-core.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/dfa/src/StateMachine.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/png-js/png-node.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/safer-buffer/safer.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/buffer_list.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/unicode-trie/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/unicode-trie/swap.js","webpack://@amcharts/amcharts5/pdfmake/./src/3rd-party/svg-to-pdfkit.js","webpack://@amcharts/amcharts5/pdfmake/./src/3rd-party/svg-to-pdfkit/source.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/abstract_reference.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/tree.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/object.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/reference.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/page.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/name_tree.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/saslprep/lib/util.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/saslprep/lib/code-points.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/saslprep/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/security.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/path.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/gradient.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/pattern.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/color.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/vector.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/font/afm.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/font.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/font/standard.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/font/embedded.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/font_factory.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/fonts.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/line_wrapper.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/text.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/image/jpeg.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/image/png.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/image.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/images.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/annotations.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/outline.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/outline.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/structure_content.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/structure_element.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/number_tree.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/markings.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/acroform.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/attachments.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/pdfa.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/subsets.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/metadata.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/mixins/metadata.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/pdfkit/lib/document.js","webpack://@amcharts/amcharts5/pdfmake/./src/browser-extensions/pdfMake-exposed.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/assert/build/assert.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/assert/build/internal/assert/assertion_error.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/assert/build/internal/errors.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/assert/build/internal/util/comparisons.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/base64-js/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/bit_reader.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/context.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/decode.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/dictionary-browser.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/dictionary.bin.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/dictionary.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/huffman.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/prefix.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/streams.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/dec/transform.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/brotli/decompress.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/browserify-zlib/lib/binding.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/browserify-zlib/lib/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/call-bind/callBound.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/call-bind/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/clone/clone.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/es/object/values.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/es/promise/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/features/promise/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/a-callable.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/a-constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/a-possible-prototype.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/add-to-unscopables.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/advance-string-index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/an-instance.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/an-object.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-copy-within.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-fill.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-for-each.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-from-constructor-and-list.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-from.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-includes.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-iteration.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-last-index-of.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-method-has-species-support.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-method-is-strict.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-reduce.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-slice.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-sort.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-species-constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/array-species-create.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/call-with-safe-iteration-closing.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/check-correctness-of-iteration.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/classof-raw.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/classof.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/clear-error-stack.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/collection-strong.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/collection.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/copy-constructor-properties.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/correct-is-regexp-logic.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/correct-prototype-getter.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/create-html.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/create-iterator-constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/create-non-enumerable-property.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/create-property-descriptor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/create-property.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/date-to-primitive.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/define-iterator.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/define-well-known-symbol.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/descriptors.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/document-create-element.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/dom-iterables.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/dom-token-list-prototype.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-ff-version.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-is-browser.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-is-ie-or-edge.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-is-ios-pebble.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-is-ios.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-is-node.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-is-webos-webkit.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-user-agent.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-v8-version.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/engine-webkit-version.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/enum-bug-keys.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/error-stack-installable.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/export.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/fails.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/freezing.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/function-apply.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/function-bind-context.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/function-bind.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/function-call.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/function-name.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/function-uncurry-this.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/get-built-in.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/get-iterator-method.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/get-iterator.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/get-method.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/get-substitution.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/global.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/has-own-property.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/hidden-keys.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/host-report-errors.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/html.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/ie8-dom-define.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/ieee754.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/indexed-object.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/inherit-if-required.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/inspect-source.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/install-error-cause.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/internal-metadata.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/internal-state.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-array-iterator-method.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-callable.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-forced.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-integral-number.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-object.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-pure.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-regexp.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/is-symbol.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/iterate.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/iterator-close.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/iterators-core.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/iterators.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/length-of-array-like.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/microtask.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/native-promise-constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/native-symbol.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/native-weak-map.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/new-promise-capability.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/normalize-string-argument.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/not-a-regexp.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/number-is-finite.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-assign.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-create.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-define-properties.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-define-property.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-get-own-property-descriptor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-get-own-property-names-external.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-get-own-property-names.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-get-own-property-symbols.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-get-prototype-of.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-is-prototype-of.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-keys-internal.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-keys.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-property-is-enumerable.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-set-prototype-of.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-to-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/object-to-string.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/ordinary-to-primitive.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/own-keys.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/path.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/perform.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/promise-resolve.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/redefine-all.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/redefine.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/regexp-exec-abstract.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/regexp-exec.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/regexp-flags.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/regexp-sticky-helpers.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/regexp-unsupported-dot-all.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/regexp-unsupported-ncg.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/require-object-coercible.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/set-global.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/set-species.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/set-to-string-tag.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/shared-key.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/shared-store.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/shared.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/species-constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/string-html-forced.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/string-multibyte.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/string-repeat.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/string-trim-forced.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/string-trim.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/task.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/this-number-value.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-absolute-index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-indexed-object.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-integer-or-infinity.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-length.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-object.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-offset.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-positive-integer.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-primitive.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-property-key.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-string-tag-support.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/to-string.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/try-to-string.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/typed-array-constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/typed-array-constructors-require-wrappers.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/typed-array-from-species-and-list.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/typed-array-from.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/typed-array-species-constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/uid.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/use-symbol-as-uid.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/well-known-symbol-wrapped.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/well-known-symbol.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/internals/whitespaces.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.aggregate-error.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.concat.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.copy-within.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.fill.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.filter.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.from.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.includes.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.iterator.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.join.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.map.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.slice.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.sort.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.array.splice.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.date.to-primitive.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.function.name.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.global-this.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.json.to-string-tag.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.map.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.math.to-string-tag.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.number.constructor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.number.epsilon.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.number.is-finite.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.number.is-integer.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.number.to-fixed.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.object.assign.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.object.freeze.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.object.get-own-property-descriptor.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.object.get-own-property-descriptors.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.object.get-prototype-of.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.object.keys.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.object.to-string.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.object.values.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.promise.all-settled.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.promise.any.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.promise.finally.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.promise.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.reflect.construct.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.regexp.exec.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.regexp.flags.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.regexp.to-string.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.set.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.code-point-at.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.from-code-point.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.includes.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.italics.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.iterator.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.link.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.match-all.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.match.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.repeat.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.replace.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.split.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.strike.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.string.trim.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.symbol.async-iterator.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.symbol.description.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.symbol.iterator.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.symbol.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.symbol.to-primitive.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.symbol.to-string-tag.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.copy-within.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.every.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.fill.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.filter.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.find-index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.find.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.float32-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.float64-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.for-each.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.from.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.includes.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.index-of.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.int16-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.int32-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.int8-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.iterator.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.join.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.last-index-of.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.map.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.reduce-right.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.reduce.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.reverse.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.set.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.slice.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.some.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.sort.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.subarray.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.to-locale-string.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.to-string.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.uint16-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.uint32-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.uint8-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/es.typed-array.uint8-clamped-array.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/esnext.aggregate-error.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/esnext.global-this.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/esnext.promise.all-settled.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/esnext.promise.any.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/esnext.promise.try.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/esnext.string.match-all.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/web.dom-collections.for-each.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/web.dom-collections.iterator.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/modules/web.url.to-json.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/core-js/stable/promise/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/deep-equal/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/define-data-property/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/define-properties/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/es-define-property/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/es-errors/eval.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/es-errors/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/es-errors/range.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/es-errors/ref.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/es-errors/syntax.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/es-errors/type.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/es-errors/uri.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/events/events.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/expose-loader/dist/runtime/getGlobalThis.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/for-each/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/function-bind/implementation.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/function-bind/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/functions-have-names/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/get-intrinsic/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/gopd/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/has-property-descriptors/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/has-proto/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/has-symbols/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/has-symbols/shams.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/has-tostringtag/shams.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/hasown/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/dbcs-codec.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/dbcs-data.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/internal.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/sbcs-codec.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/sbcs-data-generated.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/sbcs-data.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/utf16.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/utf32.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/encodings/utf7.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/lib/bom-handling.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/lib/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/iconv-lite/lib/streams.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/ieee754/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/inherits/inherits_browser.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-arguments/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-callable/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-date-object/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-generator-function/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-nan/implementation.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-nan/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-nan/polyfill.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-nan/shim.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-regex/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/is-typed-array/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/object-is/implementation.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/object-is/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/object-is/polyfill.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/object-is/shim.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/object-keys/implementation.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/object-keys/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/object-keys/isArguments.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/object.assign/implementation.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/object.assign/polyfill.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/utils/common.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/adler32.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/constants.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/crc32.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/deflate.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/inffast.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/inflate.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/inftrees.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/messages.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/trees.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/pako/lib/zlib/zstream.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/possible-typed-array-names/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/process/browser.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/regexp.prototype.flags/implementation.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/regexp.prototype.flags/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/regexp.prototype.flags/polyfill.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/regexp.prototype.flags/shim.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/sax/lib/sax.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/set-function-length/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/set-function-name/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/errors-browser.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_duplex.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_passthrough.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_readable.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_transform.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/_stream_writable.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/async_iterator.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/destroy.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/end-of-stream.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/from-browser.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/pipeline.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/state.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/stream-browserify/node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/string_decoder/lib/string_decoder.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/tiny-inflate/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/util-deprecate/browser.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/util/support/isBufferBrowser.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/util/support/types.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/util/util.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/which-typed-array/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/xmldoc/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/xmldoc/lib/xmldoc.js","webpack://@amcharts/amcharts5/pdfmake/./src/browser-extensions/URLBrowserResolver.js","webpack://@amcharts/amcharts5/pdfmake/./src/browser-extensions/pdfMake.js","webpack://@amcharts/amcharts5/pdfmake/./src/browser-extensions/virtual-fs.js","webpack://@amcharts/amcharts5/pdfmake/./src/columnCalculator.js","webpack://@amcharts/amcharts5/pdfmake/./src/docMeasure.js","webpack://@amcharts/amcharts5/pdfmake/./src/docPreprocessor.js","webpack://@amcharts/amcharts5/pdfmake/./src/documentContext.js","webpack://@amcharts/amcharts5/pdfmake/./src/elementWriter.js","webpack://@amcharts/amcharts5/pdfmake/./src/fontProvider.js","webpack://@amcharts/amcharts5/pdfmake/./src/helpers.js","webpack://@amcharts/amcharts5/pdfmake/./src/imageMeasure.js","webpack://@amcharts/amcharts5/pdfmake/./src/layoutBuilder.js","webpack://@amcharts/amcharts5/pdfmake/./src/line.js","webpack://@amcharts/amcharts5/pdfmake/./src/pageElementWriter.js","webpack://@amcharts/amcharts5/pdfmake/./src/pdfKitEngine.js","webpack://@amcharts/amcharts5/pdfmake/./src/printer.js","webpack://@amcharts/amcharts5/pdfmake/./src/qrEnc.js","webpack://@amcharts/amcharts5/pdfmake/./src/standardPageSizes.js","webpack://@amcharts/amcharts5/pdfmake/./src/styleContextStack.js","webpack://@amcharts/amcharts5/pdfmake/./src/svgMeasure.js","webpack://@amcharts/amcharts5/pdfmake/./src/tableProcessor.js","webpack://@amcharts/amcharts5/pdfmake/./src/textDecorator.js","webpack://@amcharts/amcharts5/pdfmake/./src/textTools.js","webpack://@amcharts/amcharts5/pdfmake/./src/traversalTracker.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/file-saver/src/FileSaver.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/fontkit/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/@foliojs-fork/linebreak/src/linebreaker.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/available-typed-arrays/index.js","webpack://@amcharts/amcharts5/pdfmake/./node_modules/unicode-properties/dist/data.json","webpack://@amcharts/amcharts5/pdfmake/./node_modules/unicode-properties/dist/index.js","webpack://@amcharts/amcharts5/pdfmake/webpack/bootstrap","webpack://@amcharts/amcharts5/pdfmake/webpack/runtime/global","webpack://@amcharts/amcharts5/pdfmake/webpack/runtime/node module decorator","webpack://@amcharts/amcharts5/pdfmake/webpack/startup"],"sourcesContent":["// Modified from pdfmake/build/vfs_fonts.js\nexport default {\n\t\"Roboto-Italic.ttf\": \"AAEAAAASAQAABAAgR0RFRtRX1FkAAgp8AAACREdQT1NKcuCzAAIMwAAAUiRHU1VCw4aZEQACXuQAABfoT1MvMqCnsO0AAAGoAAAAYGNtYXBAbb9DAAAafAAABoBjdnQgJEEG5QAAI5QAAABMZnBnbWf0XKsAACD8AAABvGdhc3AACAATAAIKcAAAAAxnbHlmoLsktAAALagAAdn2aGRteCEe/AUAABWQAAAE7GhlYWT4gasAAAABLAAAADZoaGVhDKYSegAAAWQAAAAkaG10eHJO1ygAAAIIAAATiGxvY2EXM5zBAAAj4AAACcZtYXhwBxICWwAAAYgAAAAgbmFtZTlLZFAAAgegAAACrnBvc3T/YQBkAAIKUAAAACBwcmVwdKCP7AAAIrgAAADbAAEAAAACAAAcadIiXw889QAbCAAAAAAAxPARLgAAAADQ206M+jj91QlMCHMAAgAJAAIAAAAAAAAAAQAAB2z+DAAACRb6OP52CUwIAAGzAAAAAAAAAAAAAAAABOIAAQAABOIAkAAWAFYABQABAAAAAAAOAAACAAFzAAYAAQADBAsBkAAFAAAFmgUzAAABHwWaBTMAAAPRAGYCAAAAAgAAAAAAAAAAAOAACv9QACF/AAAAIQAAAABHT09HAAEAAP/9BgD+AABmB5oCACAAAZ8AAAAABDoFsAAgACAAAgOWAGQACgAAAAoAAAH2AAAB9gAAAgkAQwKFAMgE0QBSBGYASgW5ALsE3QA6AWQAqgKxAG0Cvf+PA2IAawRwAEwBkP+PAi4AGQIVADUDPf+PBGYAaARmAPkEZgAXBGYANARmAAUEZgByBGYAcARmAJ0EZgBBBGYAlAHrACsBrv+bA/wAQQRMAHAEGAA6A7QApQcCAEQFGv+vBN8AOwUXAHQFIQA7BHMAOwRUADsFUwB5BZIAOwImAEkEUgAKBOcAOwQ3ADsG0AA7BZIAOwVgAHcE7wA7BWAAbwTRADoEpQAnBKsAqAUSAGcE+gCkBuwAwwTn/9QEswCoBK//6wIZ//8DOQC/Ahn/egNIAE8Div+BAnAAzwRDADMEZQAfBBoARgRqAEsEJgBFArwAdARlAAQEUAAfAewALwHk/xQD+QAgAewALwbXAB4EUgAfBHcARQRl/9cEcwBJAqoAHwQKAC4CkwBDBFEAWwPMAG4F3wCAA+P/xAO2/6UD4//tAqoAOAHuACECqv+MBVEAaQHu//EESABSBIz/8wWSABIEvQBTAeb/9wTM/90DSADbBiMAYgOCAMMDrgBZBFYAgQYkAGEDmADjAvAA6AQvACUC4gBcAuIAbgJ5ANUEb//lA9UAewIQAKUB9v/IAuIA3wORAMADrQAPBbkAuQYPALQGEwCeA7b/0wdL/4QELQAoBWAAIASgADgEpwAeBpcAEwSWAFwEeABEBG8AOQSD/+AFeQA1AfUALgRbAC0EOAAiAiIAIwVqADUEbwAkB3AAVAcWAEcB9wAzBWcAUQKu/0kFXgBnBHkAQgVvAGcE1wBaAf7/CQQhAD4DsQEXA3wBJgOZAOMDWgEHAewBDgKiAQECI/+vA7MA3QLvAMICUv/pAAr9agAK/esACv0LAAr99QAK/NsB6vy7AgcBIQP2APMCEQClBFsAQwWD/7EFUQBpBSD/xAR4AAwFkwBEBHj/2gWZAFQFaACGBTMACgRsAEgEo//wA+0AhARvAEMEOQApBA8AggRvACQEdQBzAo0AhQRW/7cD2AA/BKkAYARv/9wENgBOBG8ASgQWAIcERQBnBYIAQQV5AE8GbgBmBIcAUQQrAGcGIgBmBdsAoQVFAHgIWf/MCGwAQwZaALQFkgBCBO4ANAXg/4sHFf+sBKUAJQWSAEMFiP/KBOoAkwYHAFsFtgBBBVoAzgdXAEIHjgBCBe0AiQbAAEUE6AA2BUUAdAb6AEkE+//oBFQARgR5ADADSwAtBLn/jQX7/6UD+wAhBIUALwQ7AC8Ehv/IBcsAMASEAC8EhQAvA8QAYAWqAEwEowAvBEIAewZQAC8GdQAkBNsAVgYQADAEQQAwBDYANAZfADAETP+/BFAAHwQ2AE4Gn//DBrkALwRwAB8EhQAvBtwAbwYGAE8EPwAuBv4ASQXUACwEt/+6BC//ogbfAFoF5wBOBqcAJgW+ACkIyQBIB58ALgQN/84Dx//KBVEAaQRyAEIE7QCtA+4AhAVRAGoEbwBEBtUAdAX/AFIG3ABvBgYATwUUAGYEMABNBOEAQAAK/OgACv0LAAr+FwAK/jsACvo4AAr6TwQ/AC4E/gA6BHD/1wRLADUDfwAkBMAAQwPwACQE7AA2BGYALQZkALsFYwB0B50AOgWSACQH/ABCBskAJAXKAHEEuABfBv8ArAU9AFcFTwDEBFIAmAVQAOwGCgCKBKMABwTsADUEQwAtBZAAQwRvACQFZwBRBI4APASO//wEnf/4Azr/6QTaADEGawAyBrkATAYvAK0FDQBoBDIArwPyAKAHj//fBk3/2gfIADsGeAAjBNoAagQHAEwFiwCaBQMAfQVFAGoDEgDyA/8AAAf0AAAD/wAAB/QAAAKuAAACBAAAAVwAAARmAAACKQAAAZ8AAADVAAAACgAAAi0AGQItABkFIgCnBhkAmQOU/18BlwCuAZcAiQGV/5gBlwDUAsgAtgLPAJUCtv+UBFEAdwR2//YCpwCgA7EAOQU7ADkA+QAaB3kAlwJeAF8CXgACA5H/7wLiAGEDUAB+BIz/8wYuAAoGaAA5CD8AOgc0ACIGBgAfBGYAUQW3AEMEDABJBFwACgUp//IFMP/lBcQAzAO7AEsIBQA1BOUA6gT6AIIGAQC1BqwAkgalAI8GQwC+BHYATQVtACQElf+sBHkAqwSqAEEIBQBNAgb/GgRpADEETABwA/z/1AQZABkD8wBBAkQAeAKFAHAB/v/jBNcAdARWAFgEcgB0BqoAdAaqAHQE0gB0BnIAKQAKAAAH/v+rCDUAXAQKAGIEhQBBAff/DwGP/70DkgETA4wBEgONARED4ADNA/kAzgPfACID2wDSA5IBEQH4APwEbP+lBDkAHQRkAEcEZwAdA9IAHQO4AB0EkgBMBMcAHQHjACoDvP/2BD0AHQOiAB0F3gAdBMcAHQShAEoERQAdBKEARQQzAB0ECgARBBAAbQRkAEUETwB6BfAAlQQ9/7YEFQB0BA3/3ALiAB0C4gBrAuL/6QLi//sC4v/wAuIAFgLiAB4C4gAvAuIACwLiADYDhACTAqoBCwQk/5oEqABLBS0AQwUHAEQD/gAlBR8ARAP6ACUECgASBB0ABgQlADQDnQAdBE//sAShAEoET/+wA3j/0wSzAB0D2//VBUgAUQT6AH4E1gAMBVIAbARkAEcHE//EByEAHQVUAG0EsgAdBEIAHwUH/4kF5/+vBCgAEQTQAB8ENwAeBKb/xAQJAFgFCgAdBFIAWgYqAB0GgwAdBQAAUAXNAB8ENwAfBGMAIAZOAB0Ebv/fA/z/+gYh/68EYQAeBOwAHgUZAGkFoABQBEcAdASO/7YGOgBsBFIAWgRSAB0FoQAvBK8AQQQoABEEoQBKBB3//wPPAB4H7gAdBJH/3QRlAB8EHABDBHoARwRzACQDaACpBHT/1wSDAEYEJgBFBGUANQVhAIEFjACEBXIARAW9AIUFwACFA8IAuwRpADkDnQAdBEH/gQS0/9MC4gCQAuIAYQLiAIkC4gCRAuIAogLiAH4C4gCpBFP/1QQYACsGewBJBJ8APwTkAGQCAP8JAf//CQH2AC4B9v96AfYALgH2//EEOQAdAfYAAAIuABkFPwAvBT8ALwRuAD0EqwCoApP/9AUa/68FGv+vBRr/rwUa/68FGv+vBRr/rwUa/68FFwB0BHMAOwRzADsEcwA7BHMAOwImAEkCJgBJAiYASQImAEkFkgA7BWAAdwVgAHcFYAB3BWAAdwVgAHcFEgBnBRIAZwUSAGcFEgBnBLMAqARDADMEQwAzBEMAMwRDADMEQwAzBEMAMwRDADMEGgBGBCYARQQmAEUEJgBFBCYARQH1AC4B9QAuAfUALgH1AC4EUgAfBHcARQR3AEUEdwBFBHcARQR3AEUEUQBbBFEAWwRRAFsEUQBbA7b/pQO2/6UFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFFwB0BBoARgUXAHQEGgBGBRcAdAQaAEYFFwB0BBoARgUhADsFAABLBHMAOwQmAEUEcwA7BCYARQRzADsEJgBFBHMAOwQmAEUEcwA7BCYARQVTAHkEZQAEBVMAeQRlAAQFUwB5BGUABAVTAHkEZQAEBZIAOwRQAB8CJgBJAfUAEQImAEkB9QAaAiYASQH1AC4CJv+OAez/cAImAEkGeABJA9AALwRSAAoB/v8JBOcAOwP5ACAENwA7AewALwQ3ADsB7P+jBDcAOwKCAC8ENwA7AsgALwWSADsEUgAfBZIAOwRSAB8FkgA7BFIAHwRSAB8FYAB3BHcARQVgAHcEdwBFBWAAdwR3AEUE0QA6AqoAHwTRADoCqv+fBNEAOgKqAB8EpQAnBAoALgSlACcECgAuBKUAJwQKAC4EpQAnBAoALgSlACcECgAuBKsAqAKTAEMEqwCoApMAQwSrAKgCuwBDBRIAZwRRAFsFEgBnBFEAWwUSAGcEUQBbBRIAZwRRAFsFEgBnBFEAWwUSAGcEUQBbBuwAwwXfAIAEswCoA7b/pQSzAKgEr//rA+P/7QSv/+sD4//tBK//6wPj/+0HS/+EBpcAEwVgACAEbwA5BGf/sARn/7AEEABtBGz/pQRs/6UEbP+lBGz/pQRs/6UEbP+lBGz/pQRkAEcD0gAdA9IAHQPSAB0D0gAdAeMAKgHjACoB4wAqAeMAKgTHAB0EoQBKBKEASgShAEoEoQBKBKEASgRkAEUEZABFBGQARQRkAEUEFQB0BGz/pQRs/6UEbP+lBGQARwRkAEcEZABHBGQARwRnAB0D0gAdA9IAHQPSAB0D0gAdA9IAHQSSAEwEkgBMBJIATASSAEwExwAdAeMADwHjABgB4wAqAeP/egHjACoDvP/2BD0AHQOiAB0DogAdA6IAHQOiAB0ExwAdBMcAHQTHAB0EoQBKBKEASgShAEoEMwAdBDMAHQQzAB0ECgARBAoAEQQKABEECgARBBAAbQQQAG0EEABtBGQARQRkAEUEZABFBGQARQRkAEUEZABFBfAAlQQVAHQEFQB0BA3/3AQN/9wEDf/cBRr/rwTXAGMF9gBxAooAdwV0AGoFF//uBUcAHgKNACAFGv+vBN8AOwRzADsEr//rBZIAOwImAEkE5wA7BtAAOwWSADsFYAB3BO8AOwSrAKgEswCoBOf/1AImAEkEswCoBGwASAQ5ACkEbwAkAo0AhQRFAGcEWwAtBHcARQRv/+UDzABuA+P/xAKNAGcERQBnBHcARQRFAGcGbgBmBHMAOwRbAEMEpQAnAiYASQImAEkEUgAKBQcARATnADsE6gCTBRr/rwTfADsEWwBDBHMAOwWSAEMG0AA7BZIAOwVgAHcFkwBEBO8AOwUXAHQEqwCoBOf/1ARDADMEJgBFBIUALwR3AEUEZf/XBBoARgO2/6UD4//EBCYARQNLAC0ECgAuAewALwH1AC4B5P8UBDsALwO2/6UG7ADDBd8AgAbsAMMF3wCABuwAwwXfAIAEswCoA7b/pQFkAKoChQDIBBIAQwH+/wkBlwCJBtAAOwbXAB4FGv+vBEMAMwRzADsFkgBDBCYARQSFAC8FaACGBXkATwTtAK0D7gCECC0ARQkWAHcEpQAlA/sAIQUXAHQEGgBGBLMAqAPtAIQCJgBJBxX/rAX7/6UCJgBJBRr/rwRDADMFGv+vBEMAMwdL/4QGlwATBHMAOwQmAEUFZwBRBCEAPgQhAD4HFf+sBfv/pQSlACUD+wAhBZIAQwSFAC8FkgBDBIUALwVgAHcEdwBFBVEAaQRyAEIFUQBpBHIAQgVFAHQENgA0BOoAkwO2/6UE6gCTA7b/pQTqAJMDtv+lBVoAzgRCAHsGwABFBhAAMATn/9QD4//EBGoASwWI/8oEhv/IBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBRr/rwRDADMFGv+vBEMAMwUa/68EQwAzBHMAOwQmAEUEcwA7BCYARQRzADsEJgBFBHMAOwQmAEUEcwA7BCYARQRzADsEJgBFBHMAOwQmAEUEcwA7BCYARQImAEkB9QAuAiYADgHs//EFYAB3BHcARQVgAHcEdwBFBWAAdwR3AEUFYAB3BHcARQVgAHcEdwBFBWAAdwR3AEUFYAB3BHcARQVeAGcEeQBCBV4AZwR5AEIFXgBnBHkAQgVeAGcEeQBCBV4AZwR5AEIFEgBnBFEAWwUSAGcEUQBbBW8AZwTXAFoFbwBnBNcAWgVvAGcE1wBaBW8AZwTXAFoFbwBnBNcAWgSzAKgDtv+lBLMAqAO2/6UEswCoA7b/pQSIAEsEiAAABQcARAQ7AC8FkgA7BIQALwSrAKgDxABgBOf/1APj/8QFWgDOBEIAewVaAM4EQgB7BFsAQwNLAC0HFf+sBfv/pQYKAIoEowAHBFAAHwToACsE6AArBFsAEANL/+YFGwBYBBIAOQWSAEMEhQAvBZIAOwSEAC8G0AA7BcsAMAWI/8oEhv/IBLMAqAPtAF0E5//UA+P/xAQ5ACkEVP/XBhkAmQRmABcEZgA0BGYABQRmAHIEegCUBI4AfAVTAHkEZQAEBZIAOwRSAB8FGv+vBEMAMwRzADsEJgBFAib/3wH1/40FYAB3BHcARQTRADoCqgAfBRIAZwRRAFsEj/+yBN8AOwRlAB8FIQA7BGoASwUhADsEagBLBZIAOwRQAB8E5wA7A/kAIATnADsD+QAgBDcAOwHs//IG0AA7BtcAHgWSADsEUgAfBO8AOwRl/9cE0QA6Aqr/7gSlACcECgAuBKsAqAKTAEME+gCkA8wAbgT6AKQDzABuBuwAwwXfAIAEr//rA+P/7QWm/wwEbP+lBA7/4QUD//0CHwABBKsAHQRR/5sE4AAWBGz/pQQ5AB0D0gAdBA3/3ATHAB0B4wAqBD0AHQXeAB0EoQBKBEUAHQQQAG0EFQB0BD3/tgHjACoEFQB0A9IAHQOdAB0ECgARAeMAKgHjACoDvP/2BD0AHQQJAFgEbP+lBDkAHQOdAB0D0gAdBNAAHwXeAB0ExwAdBKEASgSzAB0ERQAdBGQARwQQAG0EPf+2BCgAEQTHAB0EZABIBBUAdAWhAC8E0AAfBAkAWAVIAFEFGv+vBEMAMwRzADsEJgBFAAAAAQAABOQJCgQAAAICAgMFBQYFAgMDBAUCAgIEBQUFBQUFBQUFBQICBAUFBAgGBQYGBQUGBgIFBgUIBgYGBgUFBQYGCAYFBQIEAgQEAwUFBQUFAwUFAgIEAggFBQUFAwUDBQQHBAQEAwIDBgIFBQYFAgUEBwQEBQcEAwUDAwMFBAICAwQEBgcHBAgFBgUFBwUFBQUGAgUFAgYFCAgCBgMGBQYFAgUEBAQEAgMCBAMDAAAAAAACAgQCBQYGBgUGBQYGBgUFBAUFBQUFAwUEBQUFBQUFBgYHBQUHBwYJCQcGBgcIBQYGBgcGBggJBwgGBggGBQUEBQcEBQUFBwUFBAYFBQcHBQcFBQcFBQUHCAUFCAcFCAcFBQgHBwYKCQUEBgUGBAYFCAcIBwYFBQAAAAAAAAUGBQUEBQQGBQcGCQYJCAcFCAYGBQYHBQYFBgUGBQUFBAUHCAcGBQQJBwkHBQUGBgYDBQkFCQMCAgUCAgEAAgIGBwQCAgICAwMDBQUDBAYBCAMDBAMEBQcHCQgHBQYFBQYGBgQJBgYHCAcHBQYFBQUJAgUFBAUEAwMCBQUFCAgFBwAJCQUFAgIEBAQEBAQEBAIFBQUFBAQFBQIEBQQHBQUFBQUFBQUFBwUFBQMDAwMDAwMDAwMEAwUFBgYEBgQFBQUEBQUFBAUEBgYFBgUICAYFBQYHBQUFBQUGBQcHBgcFBQcFBAcFBgYGBQUHBQUGBQUFBQQJBQUFBQUEBQUFBQYGBgYGBAUEBQUDAwMDAwMDBQUHBQYCAgICAgIFAgIGBgUFAwYGBgYGBgYGBQUFBQICAgIGBgYGBgYGBgYGBQUFBQUFBQUFBQUFBQICAgIFBQUFBQUFBQUFBAQGBQYFBgUGBQYFBgUGBQYGBQUFBQUFBQUFBQYFBgUGBQYFBgUCAgICAgICAgIHBAUCBgQFAgUCBQMFAwYFBgUGBQUGBQYFBgUFAwUDBQMFBQUFBQUFBQUFBQMFAwUDBgUGBQYFBgUGBQYFCAcFBAUFBAUEBQQIBwYFBQUFBQUF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c3dzd3N/c4dzkXObc7Jz0XPvdA50LnQ6dEZ0d3S4dR11QnVOdV51cnZGdmJ2f3aSdqZ273d6eBx4qXi1eXh503pZewR7ZnvpfEd8uH1dfcl+W368fyR/Pn9Yf3J/jH//gCeAYYB9gLKBO4GBgfiCOYJHglWCjoKbgsKC24Lng0qDo4Q3hMKFQ4YXhheHlIfxiCKIgIiviMWJKIl6ibqKLIqFisWLCItIi2KLqIwejHqMx40TjU+Nto4EjiKOWI6cjsSPFo9Uj7OQA5BhkLWRI5FPkYuRvpISkleSi5LIkxuTRpOVlAaUSJSolQiVNZW+liCWN5aBlz6XuZgtmHyYwpkEmUyZzJo4mq+a2psQm4ibuZwHnDqcepzunVCdu54enoyfA597n9KgDaBpoMGhN6G8ofqiS6KUotijE6Nbo5uj5aRApEyknaURpZyl+aZIptCnM6eYp/iooqiuqQGpTamiqeuqZarSqzerq6xHrM6tb63irk+uqK8Tr5yvpLAQsH6w6bFysdWyQLKSsvSzWrOFs9q0BLRdtKG0tbTJtNu077UBtRi1LLWOtba2RLa0tw23FbcdtyW3MLc4t0S3sLewt7i4KLiYuPq5QLmoub+51rntugS6HLovuju6R7peunC6h7qaurG6w7rauu27BLsbuy27RLtbu267hbuXu667wbvTu+q7/LwSvCO8NrxJvFW8Ybx4vIq8oLyzvMm82rzxvQm9Gr0xvUO9Wb1qvX29lL2mvby9z73hvfO+Cr4gvje+Sb62v2S/dr+Iv5q/q7+9v8+/4b/ywATAEMAiwDPARcBXwGnAe8DvwX3Bj8GgwbLBw8HVwefB+cILwhfCKcI7wk/CYcJzwoXCl8KpwrvCxsLRwuPC78L7ww3DH8MrwzfDScNbw2fDc8OIw5TDoMOsw77D0MPcw+jD+sQLxBfEKcQ6xEzEXsRxxITElsSoxLTEwMTSxOPE9cUHxRnFKsU2xULFTsVaxWzFfcWJxZXFocWtxb/Fy8Xdxe7GAMYRxiPGNcZIxlvGbsaBxuLHUcdjx3XHh8eYx6vHvcfPx+HH88gFyBbILchEyFvIcsiVyLjIyMjfyPHJB8kYySvJPslKyVbJbcl/yZDJosm4ycnJ28nuygDKF8opyjvKTcpgynfKicqayq3Kv8rQyuLLSctby2zLfsuQy6HLssvDy9XMT8xg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AdMAAAEHAKEBFwAeAAkAsAcvsBPcMDEA////3AAABA4GIAImAdMAAAEGAJ5VHwAJALAHL7AO3DAxAP///68AAASLBj8CJgAlAAAABgCtBAD//wBjAAAFFQY/ACYAKWQAAAcArf9CAAD//wBxAAAF2wZBACYALGQAAAcArf9QAAL//wB3AAACZQZAACYALWQAAAcArf9WAAH//wBq/+cFIQY/ACYAMxQAAAcArf9JAAD////uAAAFlgY/ACYAPWQAAAcArf7NAAD//wAeAAAE7gY/ACYAuRQAAAcArf9MAAD//wAg//QDGwZ0AiYAwgAAAQcArv8t/+wAHACwAEVYsA4vG7EOGD5ZsBvcsBHQsBsQsCTQMDH///+vAAAEiwWwAgYAJQAA//8AOwAABKAFsAIGACYAAP//ADsAAASxBbACBgApAAD////rAAAEzgWwAgYAPgAA//8AOwAABXcFsAIGACwAAP//AEkAAAIBBbACBgAtAAD//wA7AAAFUAWwAgYALwAA//8AOwAABrcFsAIGADEAAP//ADsAAAV3BbACBgAyAAD//wB3/+cFDQXIAgYAMwAA//8AOwAABPMFsAIGADQAAP//AKgAAAUJBbACBgA4AAD//wCoAAAFMgWwAgYAPQAA////1AAABSsFsAIGADwAAP//AEkAAAMKBwkCJgAtAAABBwBq/7gBQgAMALACL7AZ3LAE0DAx//8AqAAABTIG/QImAD0AAAEHAGoA/QE2AAwAsAEvsB7csAnQMDH//wBI/+cEMgY6AiYAugAAAQcArQFo//sACQCwFS+wKNwwMQD//wAp/+cD5QY5AiYAvgAAAQcArQEh//oACQCwGi+wK9wwMQD//wAk/mED8wY6AiYAwAAAAQcArQE7//sACQCwAy+wFdwwMQD//wCF//QCZQYlAiYAwgAAAQYArSTmAAkAsAAvsBHcMDEA//8AZ//lBAoGdAImAMoAAAEGAK4c7AASALALL7Ar3LAW0LArELAa0DAx//8ALQAABFcEOgIGAI0AAP//AEX/6AQfBFICBgBTAAD////l/mAEJQQ6AgYAdgAA//8AbgAAA+0EOgIGAFoAAP///8QAAAP0BDoCBgBcAAD//wBn//QC3gWzAiYAwgAAAQYAaozsAAwAsAAvsCTcsA/QMDH//wBn/+UD+gWzAiYAygAAAQYAanvsAAwAsAsvsCvcsBbQMDH//wBF/+gEHwY6AiYAUwAAAQcArQEs//sACQCwAC+wJdwwMQD//wBn/+UD+gYlAiYAygAAAQcArQEU/+YACQCwCy+wGNwwMQD//wBm/+QF/AYiAiYAzQAAAQcArQI8/+MACQCwGC+wLdwwMQD//wA7AAAEsQcJAiYAKQAAAQcAagEBAUIAFgCwAEVYsAYvG7EGHD5ZsBXcsCHQMDH//wBDAAAEpQdAAiYAsAAAAQcAdQHHAUIAEwCwAEVYsAQvG7EEHD5ZsAjcMDEAAAEAJ//pBKMFxwAoAGGyEykqERI5ALAARViwCi8bsQocPlmwAEVYsB8vG7EfED5ZsgIfChESObAKELAP0LAKELISAQorWCHYG/RZsAIQshgBCitYIdgb9FmwHxCwJNCwHxCyJwEKK1gh2Bv0WTAxATYvAiQ3PgIXHgIHJzYmJyYGBwYfAgQDDgInLgI3FwYWBDYDbRa8rTr+3BMKkvGIhM9sBr0KjIKJuA4Uy5VLARoVC5D3jonjdge8CZ8BIrwBd6BKPxmF8Xm6ZQMDcMl+AYaTAgKEcpVNNSCC/wB7s2IDAXPIfwGCmQSC//8ASQAAAgEFsAIGAC0AAP//AEkAAAMKBwkCJgAtAAABBwBq/7gBQgAMALACL7AZ3LAE0DAx//8ACv/mBEoFsAIGAC4AAP//AEQAAAVqBbACBgHjAAD//wA7AAAFUAcuAiYALwAAAQcAdQGwATAAEwCwAEVYsAUvG7EFHD5ZsA7cMDEA//8Ak//mBUAHGwImAN0AAAEHAKABFgFDABMAsABFWLAQLxuxEBw+WbAU3DAxAP///68AAASLBbACBgAlAAD//wA7AAAEoAWwAgYAJgAA//8AQwAABKUFsAIGALAAAP//ADsAAASxBbACBgApAAD//wBDAAAFbgcbAiYA2wAAAQcAoAFrAUMACQCwAC+wDdwwMQD//wA7AAAGtwWwAgYAMQAA//8AOwAABXcFsAIGACwAAP//AHf/5wUNBcgCBgAzAAD//wBEAAAFcAWwAgYAtQAA//8AOwAABPMFsAIGADQAAP//AHT/5gT5BckCBgAnAAD//wCoAAAFCQWwAgYAOAAA////1AAABSsFsAIGADwAAP//ADP/6APPBFECBgBFAAD//wBF/+oD4ARRAgYASQAA//8ALwAABDcFxQImAO8AAAEHAKAApf/tAAkAsAAvsA3cMDEA//8ARf/oBB8EUgIGAFMAAP///9f+YAP8BFICBgBUAAAAAQBG/+kD5gRSACAAS7IAISIREjkAsABFWLARLxuxERg+WbAARViwCC8bsQgQPlmyAAEKK1gh2Bv0WbIEEQgREjmyFBEIERI5sBEQshgBCitYIdgb9FkwMSUWNjc3DgInLgI3Nz4CFxYWFScmJicmBgcHBhcWFgHoYZwYqw+FymqHu1gOBROQ6IyqzKkCcmGNuxcDBgQHdoICdV8BZqheAwKJ9ZkynPaJBATcqQFqgwQD2MIaQER1iAD///+l/kUD7AQ6AgYAXQAA////xAAAA/QEOgIGAFwAAP//AEX/6gPgBccCJgBJAAABBwBqAIoAAAAMALAIL7A13LAg0DAx//8ALQAAA4MF6gImAOsAAAEHAHUAz//sABMAsABFWLAFLxuxBRg+WbAI3DAxAP//AC7/6QO2BFACBgBXAAD//wAvAAAB4wXHAgYATQAA//8ALgAAArgFxgImAIwAAAEHAGr/Zv//AAwAsAIvsBncsATQMDH///8U/kYB1QXHAgYATgAA//8ALwAABFcF6QImAPAAAAEHAHUBOf/rABMAsABFWLAILxuxCBg+WbAP3DAxAP///6X+RQPsBdkCJgBdAAABBgCgWQEAEwCwAEVYsA8vG7EPGD5ZsBPcMDEA//8AwwAAB0EHNAImADsAAAEHAEQCTAE2ABMAsABFWLAELxuxBBw+WbAU3DAxAP//AIAAAAX+Bf4CJgBbAAABBwBEAYsAAAATALAARViwCy8bsQsYPlmwDtwwMQD//wDDAAAHQQc0AiYAOwAAAQcAdQLWATYAEwCwAEVYsAQvG7EEHD5ZsBXcMDEA//8AgAAABf4F/gImAFsAAAEHAHUCFQAAABMAsABFWLAMLxuxDBg+WbAP3DAxAP//AMMAAAdBBv0CJgA7AAABBwBqAhYBNgAWALAARViwAy8bsQMcPlmwHNywKNAwMf//AIAAAAX+BccCJgBbAAABBwBqAVUAAAAWALAARViwCy8bsQsYPlmwFtywItAwMf//AKgAAAUyBzQCJgA9AAABBwBEATMBNgATALAARViwCC8bsQgcPlmwCtwwMQD///+l/kUD7AX+AiYAXQAAAQcARACUAAAAEwCwAEVYsA8vG7EPGD5ZsBHcMDEA//8AqgQhAYkGAAIGAAsAAP//AMgEEQKmBggCBgAGAAD//wBD//ID/QWwACYABQAAAAcABQIJAAD///8J/kYCxwXaAiYAmwAAAQcAnv9H/9kAEwCwAEVYsAwvG7EMGD5ZsBLcMDEA//8AiQQWAeAGAAIGAW0AAP//ADsAAAa3BzQCJgAxAAABBwB1AsYBNgATALAARViwAi8bsQIcPlmwEdwwMQD//wAeAAAGagX+AiYAUQAAAQcAdQKkAAAAEwCwAEVYsAMvG7EDGD5ZsCPcMDEA////r/5qBIsFsAImACUAAAAHAKYBdAAA//8AM/5qA88EUQImAEUAAAAHAKYAwQAA//8AOwAABLEHQAImACkAAAEHAEQBNwFCABMAsABFWLAGLxuxBhw+WbAN3DAxAP//AEMAAAVuB0ACJgDbAAABBwBEAaYBQgATALAARViwCC8bsQgcPlmwC9wwMQD//wBF/+oD4AX+AiYASQAAAQcARADAAAAAEwCwAEVYsAgvG7EIGD5ZsCHcMDEA//8ALwAABDcF6gImAO8AAAEHAEQA4P/sABMAsABFWLAILxuxCBg+WbAL3DAxAP//AIYAAAWdBbACBgC4AAD//wBP/igFTwQ8AgYAzAAA//8ArQAABUsG6AImARgAAAEHAKsERAD6ABYAsABFWLAPLxuxDxw+WbAR3LAV0DAx//8AhAAABDwFwQImARkAAAEHAKsDrv/TABYAsABFWLAQLxuxEBg+WbAS3LAW0DAx//8ARf5FCGMEUgAmAFMAAAAHAF0EdwAA//8Ad/5FCUwFyAAmADMAAAAHAF0FYAAA//8AJf5RBJgFxwImANoAAAAHAbABg/+4//8AIf5SA6oEUAImAO4AAAAHAbABLf+5//8AdP5RBPkFyQImACcAAAAHAbAByv+4//8ARv5RA+YEUgImAEcAAAAHAbABRv+4//8AqAAABTIFsAIGAD0AAP//AIT+YAQaBDoCBgC8AAD//wBJAAACAQWwAgYALQAA////rAAAB3UHGwImANkAAAEHAKACLAFDABMAsABFWLANLxuxDRw+WbAZ3DAxAP///6UAAAYOBcUCJgDtAAABBwCgAVz/7QATALAARViwDS8bsQ0YPlmwGdwwMQD//wBJAAACAQWwAgYALQAA////rwAABIsHDwImACUAAAEHAKABLgE3ABMAsABFWLAELxuxBBw+WbAO3DAxAP//ADP/6APsBdkCJgBFAAABBwCgAKAAAQATALAARViwGC8bsRgYPlmwL9wwMQD///+vAAAEiwb9AiYAJQAAAQcAagEzATYAFgCwAEVYsAQvG7EEHD5ZsBTcsCDQMDH//wAz/+gD9wXHAiYARQAAAQcAagClAAAADACwGC+wQdywLNAwMf///4QAAAd4BbACBgCBAAD//wAT/+gGYQRSAgYAhgAA//8AOwAABLEHGwImACkAAAEHAKAA/AFDAAkAsAYvsA/cMDEA//8ARf/qA+AF2QImAEkAAAEHAKAAhQABAAkAsAgvsCPcMDEA//8AUf/pBSoG2wImAUUAAAEHAGoBCAEUAAwAsAAvsDrcsCXQMDH//wA+/+kD3wROAgYAnAAA//8APv/pA+EFyAImAJwAAAEHAGoAjwABAAwAsAAvsDjcsCPQMDH///+sAAAHdQcJAiYA2QAAAQcAagIxAUIADACwCS+wK9ywFtAwMf///6UAAAYOBbMCJgDtAAABBwBqAWH/7AAMALAJL7Ar3LAW0DAx//8AJf/qBJgHHgImANoAAAEHAGoA+AFXAAwAsA0vsEDcsCvQMDH//wAh/+oDuQXHAiYA7gAAAQYAamcAAAwAsA0vsD3csCjQMDH//wBDAAAFbgb6AiYA2wAAAQcAcAFBAUoACQCwAC+wCtwwMQD//wAvAAAENwWkAiYA7wAAAQYAcHv0AAkAsAAvsArcMDEA//8AQwAABW4HCQImANsAAAEHAGoBcAFCAAwAsAAvsB/csArQMDH//wAvAAAENwWzAiYA7wAAAQcAagCq/+wADACwAC+wH9ywCtAwMf//AHf/5wUNBv8CJgAzAAABBwBqAVQBOAAMALAKL7A43LAj0DAx//8ARf/oBB8FxwImAFMAAAEHAGoAkwAAAAwAsAAvsDjcsCPQMDH//wBp/+kE/AXIAgYBFgAA//8AQv/nBCAEUwIGARcAAP//AGn/6QT8BwQCJgEWAAABBwBqAWABPQAMALAJL7A63LAl0DAx//8AQv/nBCAFyQImARcAAAEHAGoAkAACAAwAsAQvsDXcsCDQMDH//wB0/+kE/AcfAiYA5gAAAQcAagFMAVgADACwFS+wONywI9AwMf//ADT/5wPWBccCJgD+AAABBwBqAIQAAAAMALAIL7A33LAi0DAx//8Ak//mBUAG+gImAN0AAAEHAHAA7AFKAAkAsAEvsBHcMDEA////pf5FA+wFuAImAF0AAAEGAHAvCAAJALABL7AQ3DAxAP//AJP/5gVABwkCJgDdAAABBwBqARsBQgAMALABL7Am3LAR0DAx////pf5FA+wFxwImAF0AAAEGAGpeAAAMALABL7Al3LAQ0DAx//8Ak//mBUAHQQImAN0AAAEHAKUBXQFCABYAsABFWLABLxuxARw+WbAT3LAX0DAx////pf5FBF4F/wImAF0AAAEHAKUAoAAAABYAsABFWLABLxuxARg+WbAS3LAW0DAx//8AzgAABUQHCQImAOAAAAEHAGoBRAFCABYAsABFWLASLxuxEhw+WbAo3LAc0DAx//8AewAABAAFswImAPgAAAEGAGpp7AAMALAIL7Ao3LAT0DAx//8ARQAABpYHCQAmAOUPAAAnAC0ElQAAAQcAagIIAUIAFgCwAEVYsAovG7EKHD5ZsCHcsC3QMDH//wAwAAAFqQWzACYA/QAAACcAjAQKAAABBwBqAWr/7AAWALAARViwCi8bsQoYPlmwIdywLdAwMf///9T+RQUrBbACJgA8AAAABwGvA5UAAP///8T+RQP0BDoCJgBcAAAABwGvAqoAAP//AEv/6AR1BgACBgBIAAD////K/kUFZQWwAiYA3AAAAAcBrwQkAAD////I/kUESgQ6AiYA8QAAAAcBrwM7AAD///+v/p8EiwWwAiYAJQAAAAcArATcAAD//wAz/p8DzwRRAiYARQAAAAcArAQpAAD///+vAAAEiwe5AiYAJQAAAQcAqgUBAUYACQCwBC+wGNwwMQD//wAz/+gDzwaDAiYARQAAAQcAqgRzABAACQCwGC+wOdwwMQD///+vAAAF7QfDAiYAJQAAAQcBtwDyAS4AFgCwAEVYsAUvG7EFHD5ZsA7csBTQMDH//wAz/+gFXwaOAiYARQAAAQYBt2T5ABYAsABFWLAYLxuxGBg+WbAv3LA10DAx////rwAABIsHvwImACUAAAEHAbYA+AE9ABYAsABFWLAFLxuxBRw+WbAM3LAT0DAx//8AM//oA/0GiQImAEUAAAEGAbZqBwAWALAARViwGC8bsRgYPlmwL9ywNNAwMf///68AAAVsB+oCJgAlAAABBwG1APMBGwAWALAARViwBS8bsQUcPlmwDNywINAwMf//ADP/6ATeBrUCJgBFAAABBgG1ZeYAFgCwAEVYsBgvG7EYGD5ZsC/csDPQMDH///+vAAAEiwfZAiYAJQAAAQcBtADvAQYAFgCwAEVYsAQvG7EEHD5ZsA7csBXQMDH//wAz/+gD9wakAiYARQAAAQYBtGHRABYAsABFWLAYLxuxGBg+WbAt3LA20DAx////r/6fBIsHNgImACUAAAAnAJ0A+QE2AQcArATcAAAAEwCwAEVYsAQvG7EEHD5ZsBDcMDEA//8AM/6fA88GAAImAEUAAAAmAJ1rAAEHAKwEKQAAABMAsABFWLAYLxuxGBg+WbAx3DAxAP///68AAASLB7cCJgAlAAABBwGzARcBLQAMALAEL7AO3LAa0DAx//8AM//oA+UGggImAEUAAAEHAbMAif/4AAwAsBgvsC/csDvQMDH///+vAAAEiwe3AiYAJQAAAQcBuAEXAS0ADACwBC+wDtywGtAwMf//ADP/6APlBoICJgBFAAABBwG4AIn/+AAMALAYL7Av3LA70DAx////rwAABIsIQAImACUAAAEHAbIBHgE9AAwAsAQvsA7csBfQMDH//wAz/+gD1QcKAiYARQAAAQcBsgCQAAcADACwGC+wL9ywONAwMf///68AAASSCBQCJgAlAAABBwGxAR8BRQAMALAEL7AO3LAX0DAx//8AM//oBAQG3gImAEUAAAEHAbEAkQAPAAwAsBgvsC/csDjQMDH///+v/p8EiwcPAiYAJQAAACcAoAEuATcBBwCsBNwAAAATALAARViwBC8bsQQcPlmwDtwwMQD//wAz/p8D7AXZAiYARQAAACcAoACgAAEBBwCsBCkAAAATALAARViwGC8bsRgYPlmwL9wwMQD//wA7/qkEsQWwAiYAKQAAAAcArASdAAr//wBF/p8D4ARRAiYASQAAAAcArAR0AAD//wA7AAAEsQfFAiYAKQAAAQcAqgTPAVIACQCwBi+wGdwwMQD//wBF/+oD4AaDAiYASQAAAQcAqgRYABAACQCwCC+wLdwwMQD//wA7AAAEsQctAiYAKQAAAQcApADPAUYACQCwBi+wFtwwMQD//wBF/+oEBgXrAiYASQAAAQYApFgEAAkAsAgvsCrcMDEA//8AOwAABbsHzwImACkAAAEHAbcAwAE6ABYAsABFWLAGLxuxBhw+WbAR3LAV0DAx//8ARf/qBUQGjgImAEkAAAEGAbdJ+QAWALAARViwCC8bsQgYPlmwI9ywKdAwMf//ADsAAASxB8sCJgApAAABBwG2AMYBSQAWALAARViwBi8bsQYcPlmwD9ywFNAwMf//AEX/6gPiBokCJgBJAAABBgG2TwcAFgCwAEVYsAgvG7EIGD5ZsCPcsCjQMDH//wA7AAAFOgf2AiYAKQAAAQcBtQDBAScAFgCwAEVYsAYvG7EGHD5ZsA/csCHQMDH//wBF/+oEwwa1AiYASQAAAQYBtUrmABYAsABFWLAILxuxCBg+WbAh3LA10DAx//8AOwAABLEH5QImACkAAAEHAbQAvQESABYAsABFWLAGLxuxBhw+WbAP3LAW0DAx//8ARf/qA+AGpAImAEkAAAEGAbRG0QAWALAARViwCC8bsQgYPlmwI9ywKtAwMf//ADv+qQSxB0ICJgApAAAAJwCdAMcBQgEHAKwEnQAKABMAsABFWLAGLxuxBhw+WbAR3DAxAP//AEX+nwPgBgACJgBJAAAAJgCdUAABBwCsBHQAAAATALAARViwCC8bsQgYPlmwJdwwMQD//wBJAAACuwfFAiYALQAAAQcAqgOFAVIACQCwAi+wEdwwMQD//wAuAAACaQaBAiYAjAAAAQcAqgMzAA4ACQCwAi+wEdwwMQD//wAO/qgCAQWwAiYALQAAAAcArANTAAn////x/qkB4wXHAiYATQAAAAcArAM2AAr//wB3/p8FDQXIAiYAMwAAAAcArATxAAD//wBF/p8EHwRSAiYAUwAAAAcArASEAAD//wB3/+cFDQe7AiYAMwAAAQcAqgUiAUgACQCwCi+wMNwwMQD//wBF/+gEHwaDAiYAUwAAAQcAqgRhABAACQCwAC+wMNwwMQD//wB3/+cGDgfFAiYAMwAAAQcBtwETATAAFgCwAEVYsAovG7EKHD5ZsCbcsCzQMDH//wBF/+gFTQaOAiYAUwAAAQYBt1L5ABYAsABFWLAALxuxABg+WbAm3LAs0DAx//8Ad//nBQ0HwQImADMAAAEHAbYBGQE/ABYAsABFWLAKLxuxChw+WbAm3LAr0DAx//8ARf/oBB8GiQImAFMAAAEGAbZYBwAWALAARViwAC8bsQAYPlmwJtywK9AwMf//AHf/5wWNB+wCJgAzAAABBwG1ARQBHQAWALAARViwCi8bsQocPlmwJtywKtAwMf//AEX/6ATMBrUCJgBTAAABBgG1U+YAFgCwAEVYsAAvG7EAGD5ZsCTcsDjQMDH//wB3/+cFDQfbAiYAMwAAAQcBtAEQAQgAFgCwAEVYsAovG7EKHD5ZsCTcsC3QMDH//wBF/+gEHwakAiYAUwAAAQYBtE/RABYAsABFWLAALxuxABg+WbAk3LAt0DAx//8Ad/6fBQ0HOAImADMAAAAnAJ0BGgE4AQcArATxAAAAEwCwAEVYsAovG7EKHD5ZsCjcMDEA//8ARf6fBB8GAAImAFMAAAAmAJ1ZAAEHAKwEhAAAABMAsABFWLAALxuxABg+WbAo3DAxAP//AGf/6QYbBy8CJgCXAAABBwB1Ag8BMQATALAARViwCi8bsQocPlmwK9wwMQD//wBC/+cE/wX+AiYAmAAAAQcAdQFmAAAAEwCwAEVYsAAvG7EAGD5ZsCjcMDEA//8AZ//pBhsHLwImAJcAAAEHAEQBhQExABMAsABFWLAKLxuxChw+WbAq3DAxAP//AEL/5wT/Bf4CJgCYAAABBwBEANwAAAATALAARViwAC8bsQAYPlmwJ9wwMQD//wBn/+kGGwe0AiYAlwAAAQcAqgUdAUEAEwCwAEVYsAovG7EKHD5ZsCncMDEA//8AQv/nBP8GgwImAJgAAAEHAKoEdAAQABMAsABFWLAALxuxABg+WbAm3DAxAP//AGf/6QYbBxwCJgCXAAABBwCkAR0BNQATALAARViwCi8bsQocPlmwLNwwMQD//wBC/+cE/wXrAiYAmAAAAQYApHQEABMAsABFWLAALxuxABg+WbAp3DAxAP//AGf+nwYbBjcCJgCXAAAABwCsBOMAAP//AEL+lgT/BLACJgCYAAAABwCsBHb/9///AGf+nwUgBbACJgA5AAAABwCsBMgAAP//AFv+nwQeBDoCJgBZAAAABwCsBDAAAP//AGf/5wUgB7kCJgA5AAABBwCqBPwBRgAJALAAL7Ag3DAxAP//AFv/6AQeBoMCJgBZAAABBwCqBGUAEAAJALAGL7Ah3DAxAP//AGf/6AaaB0ACJgCZAAABBwB1AgkBQgATALAARViwGi8bsRocPlmwHdwwMQD//wBa/+gFTgXqAiYAmgAAAQcAdQFg/+wAEwCwAEVYsBYvG7EWGD5ZsB7cMDEA//8AZ//oBpoHQAImAJkAAAEHAEQBfwFCABMAsABFWLASLxuxEhw+WbAc3DAxAP//AFr/6AVOBeoCJgCaAAABBwBEANb/7AATALAARViwDS8bsQ0YPlmwHdwwMQD//wBn/+gGmgfFAiYAmQAAAQcAqgUXAVIAEwCwAEVYsBovG7EaHD5ZsCjcMDEA//8AWv/oBU4GbwImAJoAAAEHAKoEbv/8ABMAsABFWLANLxuxDRg+WbAc3DAxAP//AGf/6AaaBy0CJgCZAAABBwCkARcBRgATALAARViwGi8bsRocPlmwHtwwMQD//wBa/+gFTgXXAiYAmgAAAQYApG7wABMAsABFWLAWLxuxFhg+WbAf3DAxAP//AGf+lwaaBgICJgCZAAAABwCsBOH/+P//AFr+nwVOBJECJgCaAAAABwCsBDYAAP//AKj+nwUyBbACJgA9AAAABwCsBJcAAP///6X+AgPsBDoCJgBdAAAABwCsBNr/Y///AKgAAAUyB7kCJgA9AAABBwCqBMsBRgAJALABL7AW3DAxAP///6X+RQPsBoMCJgBdAAABBwCqBCwAEAAJALABL7Ad3DAxAP//AKgAAAUyByECJgA9AAABBwCkAMsBOgAJALABL7AT3DAxAP///6X+RQPsBesCJgBdAAABBgCkLAQACQCwAS+wGtwwMQAAAgBL/+gFEQYAABkAJQB8ALAWL7AARViwDy8bsQ8YPlmwAEVYsAMvG7EDED5ZsABFWLAGLxuxBhA+WbIPFgFdsi8WAV2yFAMWERI5sBQvsBjQsgEBCitYIdgb9FmyBAYPERI5shEPBhESObAS0LAGELIdAQorWCHYG/RZsA8QsiIBCitYIdgb9FkwMQEjAyM3BicmJicmNzYSNhcWFxMjNzM3MwczAQYWFxY3EyYnJgYGBPa11qUTgLyWsgcDCBSO0H21YTD8G/0ctRq2+/ADbGidelY8nmujVQTS+y50jAQE4787UqUBCoQDBIABB5eXl/xOj54CB6UB9JQEA4fz//8AAP7NBREGAAAmAEgAAAAnAd4B+QJHAAcAQwB//2T//wBE/pgFagWwAiYB4wAAAAcBsAQC/////wAv/pkEVwQ6AiYA8AAAAAcBsANGAAD//wA7/pkFdwWwAiYALAAAAAcBsARlAAD//wAv/pkENgQ6AiYA8wAAAAcBsANmAAD//wCo/pkFCQWwAiYAOAAAAAcBsAItAAD//wBg/pkD6AQ6AiYA9QAAAAcBsAG4AAD////U/pkFKwWwAiYAPAAAAAcBsAPDAAD////E/pkD9AQ6AiYAXAAAAAcBsALYAAD//wDO/pkFRAWwAiYA4AAAAAcBsAQkAAD//wB7/pkEAAQ7AiYA+AAAAAcBsAMkAAD//wDO/pkFRAWwAiYA4AAAAAcBsALnAAD//wB7/pkEAAQ7AiYA+AAAAAcBsAHmAAD//wBD/pkEpQWwAiYAsAAAAAcBsADnAAD//wAt/pkDgwQ6AiYA6wAAAAcBsADOAAD///+s/pkHdQWwAiYA2QAAAAcBsAYwAAD///+l/pkGDgQ6AiYA7QAAAAcBsAT0AAD//wCK/lUFxQXIAiYBPwAAAAcBsALj/7z//wAH/lkERwRTAiYBQAAAAAcBsAHn/8D//wAfAAAD4wYAAgYATAAAAAIAKwAABIEFsAASABsAbrIVHB0REjmwFRCwANAAsABFWLAPLxuxDxw+WbAARViwCS8bsQkQPlmyDg8JERI5sA4vsgsBCitYIdgb9FmwANCyAg8JERI5sAIvsA4QsBHQsAIQshMBCitYIdgb9FmwCRCyFAEKK1gh2Bv0WTAxASMHBRYWBwYEIyETIzczNzMHMwEDBTI2NzYmJwKV5CoBNtjsERD+2On957/KG8kjvCPl/rxgAUqNwBEOfHwEUPIBAeK/x/QEUJfJyf3Z/d0BnoN2iAQAAgArAAAEgQWwABIAGwBxshUcHRESObAVELAA0ACwAEVYsBAvG7EQHD5ZsABFWLAJLxuxCRA+WbISEAkREjmwEi+yAAEKK1gh2Bv0WbIDEAkREjmwAy+wABCwC9CwEhCwDdCwCRCyFQEKK1gh2Bv0WbADELIbAQorWCHYG/RZMDEBIwcFFhYHBgQjIRMjNzM3MwczAQMFMjY3NiYnApXkKgE22OwREP7Y6f3nv8obySO8I+X+vGABSo3AEQ58fARQ8gEB4r/H9ARQl8nJ/dn93QGeg3aIBAAAAQAQAAAEpQWwAA0AULILDg8REjkAsABFWLAILxuxCBw+WbAARViwAi8bsQIQPlmyDQgCERI5sA0vsgABCitYIdgb9FmwBNCwDRCwBtCwCBCyCgEKK1gh2Bv0WTAxASEDIxMjNzMTIQchAyECev78dr13qhupbANlHP1YUQEFAqz9VAKslwJtnv4xAAAB/+YAAAODBDoADQBQsgsODxESOQCwAEVYsAgvG7EIGD5ZsABFWLACLxuxAhA+WbINCAIREjmwDS+yAAEKK1gh2Bv0WbAE0LANELAG0LAIELIKAQorWCHYG/RZMDEBIQMjEyM3MxMhByEDIQJQ/uZTtlOaG5lPApoc/h00ARsB3/4hAd+XAcSZ/tUAAAEAWAAABX4FsAAUAG0AsABFWLASLxuxEhw+WbAARViwBC8bsQQcPlmwAEVYsAsvG7ELED5ZsABFWLAILxuxCBA+WbITEgsREjmwEy+wENCyDQEKK1gh2Bv0WbAB0LALELAC0LACL7IKAQorWCHYG/RZsgYKAhESOTAxASMDMwEzAQEjASMDIxMjNzM3MwczAsf4LokCXff9YQG81v5ysnG8u7YbtSi7J/kEN/73AoL9Nf0bAo79cgQ3l+LiAAABADkAAAQyBgAAFABmALARL7AARViwBC8bsQQYPlmwAEVYsAsvG7ELED5ZsABFWLAILxuxCBA+WbIQEQsREjmwEC+wE9CyAQEKK1gh2Bv0WbALELAC0LACL7IKAQorWCHYG/RZsgYKAhESObABELAN0DAxASMDMwEzAQEjASMDIxMjNzM3MwczAqnoYXIBfOT+MgE3yP71gle2080bzR21HegEwf3NAaz+Cv28AfX+CwTBl6io//8AQ/6aBW4HGwImANsAAAAnAKABawFDAQcAEARQ/70AEwCwAEVYsAgvG7EIHD5ZsA3cMDEA//8AL/6aBEUFxQImAO8AAAAnAKAApf/tAQcAEANb/70AEwCwAEVYsAgvG7EIGD5ZsA3cMDEA//8AO/6aBXcFsAImACwAAAAHABAEWf+9//8AL/6aBEQEOgImAPMAAAAHABADWv+9//8AO/6aBrcFsAImADEAAAAHABAFjP+9//8AMP6aBYsEOgImAPIAAAAHABAEof+9////yv6aBWUFsAImANwAAAAHABAERv+9////yP6aBEcEOgImAPEAAAAHABADXf+9AAEAqAAABTIFsAAOAFayCg8QERI5ALAARViwCC8bsQgcPlmwAEVYsAsvG7ELHD5ZsABFWLACLxuxAhA+WbIGAggREjmwBi+yBQEKK1gh2Bv0WbAA0LIKCAIREjmwBhCwDtAwMQEjAyMTIzczATMTATMBMwN82Vu7WtUblf7mzO8B7+D91ZACCf33AgmXAxD9JgLa/PAAAAEAXf5gBBoEOgAOAGOyAQ8QERI5ALAARViwCS8bsQkYPlmwAEVYsAsvG7ELGD5ZsABFWLADLxuxAxI+WbAARViwAC8bsQAQPlmwAEVYsAQvG7EEED5ZsgYBCitYIdgb9FmyCgsAERI5sA3QsA7QMDEFIwMjEyM3MwMzEwEzATMCx99GtUbWG72xsYkBnMD+Cr4L/msBlZcDrvzcAyT8UgAB/9QAAAUrBbAAEQBiALAARViwDC8bsQwcPlmwAEVYsA4vG7EOHD5ZsABFWLAFLxuxBRA+WbAARViwAy8bsQMQPlmyCQwFERI5fLAJLxiwENCyAAEKK1gh2Bv0WbIEBQwREjmwCNCyDQwFERI5MDEBIwEjAQEjASM3MwEzEwEzATMDsaQBOtP+/v5K6AIKlxuR/trQ/QGp6P4TjgKe/WICN/3JAp6XAnv90wIt/YUAAAH/xAAAA/QEOgARAGoAsABFWLAMLxuxDBg+WbAARViwDi8bsQ4YPlmwAEVYsAUvG7EFED5ZsABFWLADLxuxAxA+WbIJBQwREjl8sAkvGLIIAQorWCHYG/RZsAHQsgQFDBESObINDAUREjmwCRCwEdB8sBEvGDAxASMTIwMBIwEjNzMDMxMBMwEzAw+x7MWz/s/dAYKhG57bxqcBJt7+mZ0B4f4fAZT+bAHhlwHC/nYBiv4+//8AKf/nA+UETQIGAL4AAP///9cAAASkBbACJgAqAAAABwHe/0T+f///AJkCiwXXAyIARgGXiABmZkAA//8AFwAABCsFxwIGABYAAP//ADT/6AQhBccCBgAXAAD//wAFAAAEHQWwAgYAGAAA//8Acv/nBGoFsAIGABkAAP//AJT//gQTBcgABgAdAAD//wB8/+cEPwXJAAYAFBQA//8Aef/qBQYHVQImACsAAAEHAHUB9wFXABMAsABFWLAMLxuxDBw+WbAk3DAxAP//AAT+TwQoBf4CJgBLAAABBwB1AU0AAAATALAARViwBC8bsQQYPlmwLNwwMQD//wA7AAAFdwc0AiYAMgAAAQcARAGdATYAEwCwAEVYsAYvG7EGHD5ZsAvcMDEA//8AHwAAA+MF/gImAFIAAAEHAEQA0gAAABMAsABFWLADLxuxAxg+WbAU3DAxAP///68AAASLByACJgAlAAABBwCrBIABMgAWALAARViwBC8bsQQcPlmwDNywENAwMf//ADP/6APPBesCJgBFAAABBwCrA/L//QAWALAARViwGC8bsRgYPlmwLdywMdAwMf//ADsAAASxBywCJgApAAABBwCrBE4BPgAWALAARViwBi8bsQYcPlmwDdywEdAwMf//AEX/6gPgBesCJgBJAAABBwCrA9f//QAWALAARViwCC8bsQgYPlmwIdywJdAwMf///98AAAKKBywCJgAtAAABBwCrAwQBPgAWALAARViwAi8bsQIcPlmwBdywCdAwMf///40AAAI4BekCJgCMAAABBwCrArL/+wAWALAARViwAi8bsQIYPlmwBdywCdAwMf//AHf/5wUNByICJgAzAAABBwCrBKEBNAAWALAARViwCi8bsQocPlmwJNywKNAwMf//AEX/6AQfBesCJgBTAAABBwCrA+D//QAWALAARViwAC8bsQAYPlmwJNywKNAwMf//ADoAAATCByACJgA2AAABBwCrBEMBMgAWALAARViwBC8bsQQcPlmwGdywHdAwMf//AB8AAALUBesCJgBWAAABBwCrA0n//QAWALAARViwCi8bsQoYPlmwEtywDdAwMf//AGf/5wUgByACJgA5AAABBwCrBHsBMgAWALAARViwCi8bsQocPlmwFNywGNAwMf//AFv/6AQeBesCJgBZAAABBwCrA+T//QAWALAARViwBy8bsQcYPlmwFdywGdAwMf///7IAAAU8Bj8AJgDPZAAABwCt/pEAAP//ADv+qQSgBbACJgAmAAAABwCsBJgACv//AB/+lgP+BgACJgBGAAAABwCsBIb/9///ADv+qQTVBbACJgAoAAAABwCsBJcACv//AEv+nwR1BgACJgBIAAAABwCsBJkAAP//ADv+CQTVBbACJgAoAAAABwGiAR/+qv//AEv9/wR1BgACJgBIAAAABwGiASH+oP//ADv+qQV3BbACJgAsAAAABwCsBPoACv//AB/+qQPjBgACJgBMAAAABwCsBH8ACv//ADsAAAVQBy4CJgAvAAABBwB1AbABMAATALAARViwBS8bsQUcPlmwDtwwMQD//wAgAAAEIgc/AiYATwAAAQcAdQF9AUEACQCwBS+wD9wwMQD//wA7/vgFUAWwAiYALwAAAAcArATSAFn//wAg/uUEGgYAAiYATwAAAAcArARQAEb//wA7/qkDsQWwAiYAMAAAAAcArASdAAr////y/qkB7gYAAiYAUAAAAAcArAM3AAr//wA7/qkGtwWwAiYAMQAAAAcArAWnAAr//wAe/qkGagRSAiYAUQAAAAcArAWrAAr//wA7/qkFdwWwAiYAMgAAAAcArAT+AAr//wAf/qkD4wRSAiYAUgAAAAcArARmAAr//wA7AAAE8wdAAiYANAAAAQcAdQG0AUIAEwCwAEVYsAMvG7EDHD5ZsBbcMDEA////1/5gBDYF9QImAFQAAAEHAHUBkf/3ABMAsABFWLANLxuxDRg+WbAh3DAxAP//ADr+qQTCBbACJgA2AAAABwCsBJUACv///+7+qQLUBFQCJgBWAAAABwCsAzMACv//ACf+nwSjBccCJgA3AAAABwCsBKQAAP//AC7+lwO2BFACJgBXAAAABwCsBG3/+P//AKj+nwUJBbACJgA4AAAABwCsBJYAAP//AEP+nwKUBUACJgBYAAAABwCsA/oAAP//AKQAAAVhBy0CJgA6AAABBwCkAOEBRgATALAARViwAS8bsQEcPlmwCtwwMQD//wBuAAAD7QXiAiYAWgAAAQYApBv7ABMAsABFWLABLxuxARg+WbAK3DAxAP//AKT+qQVhBbACJgA6AAAABwCsBMoACv//AG7+qQPtBDoCJgBaAAAABwCsBDgACv//AMP+qQdBBbACJgA7AAAABwCsBc0ACv//AID+qQX+BDoCJgBbAAAABwCsBSwACv///+v+qQTOBbACJgA+AAAABwCsBJgACv///+3+qQPOBDoCJgBeAAAABwCsBEIACv///wz/5wVTBdYAJgAzRgAABwFa/hoAAP///6UAAAPjBRwCJgG6AAAABwCt/6v+3f///+EAAAQrBR8AJgG+PAAABwCt/sD+4P////0AAATWBRwAJgHBPAAABwCt/tz+3f//AAEAAAHmBR4AJgHCPAAABwCt/uD+3///AB3/6gRYBRwAJgHICgAABwCt/vz+3f///5sAAAShBRwAJgHSPAAABwCt/nr+3f//ABYAAAR0BRsAJgHzCgAABwCt/xT+3P///6UAAAPjBI0CBgG6AAD//wAdAAAD5wSNAgYBuwAA//8AHQAAA+8EjQIGAb4AAP///9wAAAQOBI0CBgHTAAD//wAdAAAEmgSNAgYBwQAA//8AKgAAAaoEjQIGAcIAAP//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DAAGiA7uDu4MRg6gCiIO7g7uD5oKigaSDGYMRgrYCqwNUg8QCl4L4gsQDBYGmA22DbYNtgwgCxAKUAxMDbAMTAsQBqYN5gtwD5oLcAasBrIGvAbCBsgMTAbOBtgNtgb+BxQHKgcwB0YHTAdSB4QHigeQDcANwAe+Du4H4AgCDVIIMA7uDu4LJg7uDu4IRg3ADcAIeAiCCIwIpg1ICLgNsAjSCOgLEAkyCUwJaAloCxAJYgloCWgJaAtwDCAK2AxMCxAN5g1IDqAOoA1ICtIK0grSCtIK0gmKCbAJugnECeIJ9AoGChgK/g+aD5oPmg+aDGYLcAtwC3ALcAtwC3ALcAr+DAAMAAwADAAO7g7uDu4O7g7uD5oPmg+aD5oPmgxGDEYMRgxGDxAL4gviC+IL4gviC+IL4gwWDBYMFgwWDbYMIAwgDCAMIAwgDEwMTAtwC+ILcAviC3AL4gr+Cv4K/gr+D5oMAAwWDAAMFgwADBYMAAwWDAAMFg7uDbYO7g7uDu4O7g7uDEYOoAoiCiIKIgoiDu4Ntg7uDbYO7g22DbYPmgwgD5oMIA+aDCAKUApQClAMZgxmDGYMRgxGDEYMRgxGDEYKrA8QDEwPEApeCl4KXgtwDAAO7g7uD5oPEAtwCoAMAApeDu4O7g6gDu4O7g+aCooMZg8QDVIO7g8QDbYMIAxMDCAMAA3mDu4O7gxGDqAOoAsmC3AKgA3mDAAO7g7uD5oKigr+DGYNUgviDBYMIAsQDEwNsAwWDUgMTAqsCqwKrA8QDEwK0grSCtIO7g22C3AL4gwADBYK2AxMCv4PEAxMDu4NUg2wDu4LcAviC3AL4gwADBYMFgwWDVINsA+aDCAMIAsQCyYMTAsmDEwLJgxMDVINsAtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gwADBYMAAwWDAAMFgwADBYMAAwWDAAMFgwADBYMAAwWDu4O7g+aDCAPmgwgD5oMIA+aDCAPmgwgD5oMIA+aDCAMIAxGDEYPEAxMDxAMTA8QDEwOoA7uDGYNUg2wDeYNSA1SDbANtg3ADeYOoA7uDu4PEA+aAAIAhwAGAAYAAAALAAsAAQATABMAAgAlACoAAwAsADUACQA4AD4AEwBFAEYAGgBJAEoAHABMAEwAHgBRAFQAHwBWAFYAIwBaAFoAJABcAF0AJQCKAIoAJwCcAJwAKACwALQAKQC2ALgALgC6ALoAMQC8AL0AMgC/AMAANADCAMQANgDGAMsAOQDRANEAPwDTAN0AQADfAN8ASwDhAOMATADlAOcATwDpAO0AUgDwAPAAVwD1APcAWAD6APsAWwD9AP8AXQEDAQQAYAEJAQkAYgEMAQwAYwEXARkAZAErAS0AZwEwATAAagEyATIAawFJAUkAbAFsAW0AbQFvAXEAbwG6AboAcgG9Ab0AcwHEAcUAdAHIAcgAdgHKAcsAdwHNAc0AeQIoAigAegIqAisAewJHAkgAfQJKAkoAfwJMAm0AgAJvAnIAogJ3AnwApgKBAokArAKLAosAtQKNAo0AtgKPAo8AtwKRApEAuAKTApwAuQKlAqcAwwKpAqkAxgKrAqsAxwKtAq0AyAKvAq8AyQKyArIAygK0ArQAywK2ArYAzAK4ArgAzQK6AroAzgK8ArwAzwK+AsoA0ALMAswA3QLOAs4A3gLQAtAA3wLbAtsA4ALdAt0A4QLfAt8A4gLhAuEA4wLjAuMA5ALlAuUA5QLnAucA5gLpAukA5wLrAusA6ALtAu0A6QLvAvIA6gL0AvQA7gL2AvYA7wNTA1gA8ANbA2oA9gNtA20BBgNxA3EBBwNzA3MBCAN3A3cBCQN6A3sBCgN9A4YBDAOIA4oBFgOMA5EBGQOTA5QBHwOWA5kBIQOfA6ABJQOiA6IBJwOkA6QBKAOmA6kBKQOsA7EBLQOzA7MBMwO3A7gBNAO9A70BNgO/A8gBNwPLA8wBQQPOA9EBQwPYA9kBRwPdA90BSQPfA+UBSgPqA+sBUQPvBBcBUwQZBBkBfAQbBCgBfQQwBDABiwQzBDMBjAQ1BDUBjQRBBEYBjgRJBEkBlARLBEsBlQRNBE0BlgRPBFABlwRVBFgBmQRbBFsBnQRdBF4BngRgBGABoARkBGQBoQRmBGYBogRqBGoBowSqBKoBpAABABP/IAACAFb/5gG6/8AAAQG6AA4AAwANABQAQQASAGEAEwABAPX/9QABAMMADQACALf/wgDDABAAAQDD/+IAAQDG//IAAQDDAA4AAgDJ/+0A9f/AAAkAvv/mAMH/6wDC/+kAxP/wAMX/5wDJ/+MAy//OAMz/1ADN/9sABQDB/+wAwwAPAMX/6gDJ/8QAy//nAAUASv/pAMH/7gDD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Aor/6wKM/+sCjv/rApD/6wKS/+sClP/rApb/6wKY/+sCmv/rApz/6wKe/+sCoP/rAqL/6wKk/+sCsv74Asb/6wLI/+sCyv/rAtsAFALdABQC3wAUAuL/6gLk/+oC5v/qAuj/6gLq/+oC7P/qAvD/6ANT/1YDW/9WA2v/6wNv/+oDcf/rA3P/6AN2/+oDd//rA3j/6gN//vgDg/9WA44AFAOQ/94Dkf/rA5P/6wOV/+sDlv/oA5j/6wOf/+gDp//oA6//VgOw/94Ds//rA7j/6AO5/+sDvv/rA8D/6APF/1YDxv/eA8f/VgPI/94DzP/rA87/6wPP/+sD2f/rA9v/6wPd/+sD4f/oA+P/6APl/+gD7P/rA+//VgPw/94D8f9WA/L/3gPz/1YD9P/eA/X/VgP2/94D9/9WA/j/3gP5/1YD+v/eA/v/VgP8/94D/f9WA/7/3gP//1YEAP/eBAH/VgQC/94EA/9WBAT/3gQF/1YEBv/eBAj/6wQK/+sEDP/rBA7/6wQQ/+sEEv/rBBT/6wQW/+sEHP/rBB7/6wQg/+sEIv/rBCT/6wQm/+sEKP/rBCr/6wQs/+sELv/rBDD/6wQy/+sENP/qBDb/6gQ4/+oEOv/qBDz/6gQ+/+oEQP/qBEL/6ARE/+gERv/oBE0AFAAfADj/1QA6/+QAO//sAD3/3QDR/9UA1f/VARj/5AEy/9UBOv/VAmb/3QLb/9UC3f/VAt//1QLt/+wC7//dAvH/3QNY/90DZ//dA2r/3QOO/9UDoP/sA6L/7AOk/+wDpv/dA7f/5AO//90EQf/dBEP/3QRF/90ETf/VBGr/3QAaADj/sAA6/+0APf/QANH/sADV/7ABGP/tATL/sAE6/7ACZv/QAtv/sALd/7AC3/+wAu//0ALx/9ADWP/QA2f/0ANq/9ADjv+wA6b/0AO3/+0Dv//QBEH/0ARD/9AERf/QBE3/sARq/9AAEAAu/+4AOf/uAmL/7gJj/+4CZP/uAmX/7gKy/+4C4f/uAuP/7gLl/+4C5//uAun/7gLr/+4Df//uBDP/7gQ1/+4ARwAGABAACwAQAEf/6ABI/+gASf/oAEv/6ABV/+gAk//oAJj/6AC6/+gAx//oAMj/6AD2/+gBAv/oAR3/6AEh/+gBOf/oAUv/6AFM/+gBVv/oAWwAEAFtABABbwAQAXAAEAFxABACbv/o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/90AWv/hAF3/4QCT/9wAmP/cAJr/3QC6/9wAvP/hAMD/8wDH/9wAyP/cAMr/3QDr//MA7//zAPD/8wDy//MA8//zAPT/8wD2/9wA9//zAPn/8wD6//MA/f/zAP//8wEC/9wBBP/zARf/1gEZ/+EBHf/cASH/3AE1//MBOf/cAUT/8wFJ//MBS//cAUz/3AFW/9wCbv/cAm//3AJw/9wCcf/cAnL/3AJ3//MCeP/WAnn/1gJ6/9YCe//WAnz/1gJ9/90Cfv/dAn//3QKA/90Cgf/hAoL/4QKK/9wCjP/cAo7/3AKQ/9wCkv/cApT/3AKW/9wCmP/cApr/3AKc/9wCnv/cAqD/3AKi/9wCpP/cAr//8wLB//MCw//zAsT/8wLG/9YCyP/WAsr/1gLi/90C5P/dAub/3QLo/90C6v/dAuz/3QLw/+EDa//cA23/8wNv/90Dcf/WA3P/4QN2/90Dd//WA3j/3QOR/9wDkv/zA5P/1gOU//MDlf/cA5b/4QOY/9wDmf/zA57/8wOf/+EDp//hA67/8wOz/9wDtP/zA7j/4QO5/9wDvv/cA8D/4QPM/9wDzv/cA8//3APV//MD1//zA9n/1gPb/9wD3f/WA+H/4QPj/+ED5f/hA+n/8wPs/9wECP/cBAr/3AQM/9wEDv/cBBD/3AQS/9wEFP/cBBb/3AQc/9YEHv/WBCD/1gQi/9YEJP/WBCb/1gQo/9YEKv/cBCz/3AQu/9wEMP/WBDL/3AQ0/90ENv/dBDj/3QQ6/90EPP/dBD7/3QRA/90EQv/hBET/4QRG/+EESv/zBEz/8wRW//MEY//zBGX/8wRn//MAcQAG/9oAC//aAEf/8ABI//AASf/wAEv/8ABV//AAWf/vAFr/3ABd/9wAk//wAJj/8ACa/+8Auv/wALz/3ADH//AAyP/wAMr/7wD2//ABAv/wARn/3AEd//ABIf/wATn/8AFL//ABTP/wAVb/8AFs/9oBbf/aAW//2gFw/9oBcf/aAm7/8AJv//ACcP/wAnH/8AJy//ACff/vAn7/7wJ//+8CgP/vAoH/3AKC/9wCiv/wAoz/8AKO//ACkP/wApL/8AKU//AClv/wApj/8AKa//ACnP/wAp7/8AKg//ACov/wAqT/8ALi/+8C5P/vAub/7wLo/+8C6v/vAuz/7wLw/9wDa//wA2//7wNz/9wDdv/v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//UA1f/xANn/9ADc//UA3f/zARj/9AEy//EBOv/xAVH/9QJm//AC2//xAt3/8QLf//EC7//wAvH/8ANY//ADZ//wA2j/9ANq//ADgv/zA47/8QOP//QDpv/wA7f/9AO///ADwv/0A9D/9APg//MD4v/zA+T/8wPq//QD7f/1BEH/8ARD//AERf/wBE3/8QRP//QEV//0BGj/9QRq//AAWQAlAA8AOP/mADr/5gA8AA4APf/mALEADwCzAA8A0f/mANMADgDV/+YA2QAOANwADgDdAAsA4P/lAPEADwD4/+gBAwAPAQwADwEY/+YBMv/mATr/5gFRAA4CTAAPAk0ADwJOAA8CTwAPAlAADwJRAA8CUgAPAmb/5gKDAA8ChQAPAocADwLb/+YC3f/mAt//5gLv/+YC8f/mA1MADwNY/+YDWwAPA2f/5gNoAA4Dav/mA4IACwODAA8Djv/mA48ADgOm/+YDrwAPA7f/5gO//+YDwgAOA8UADwPHAA8D0AAOA+AACwPiAAsD5AALA+b/5QPn/+gD6gAOA+0ADgPuAA8D7wAPA/EADwPzAA8D9QAPA/cADwP5AA8D+wAPA/0ADwP/AA8EAQAPBAMADwQFAA8EQf/mBEP/5gRF/+YETf/mBE8ADgRR/+UEUv/oBFP/5QRU/+gEVwAOBGgADgRpAA8Eav/mAC4AOP/jADz/5QA9/+QA0f/jANP/5QDV/+MA2f/lANz/5QDd/+kA8f/qAQP/6gEy/+MBOv/jAVH/5QJm/+QC2//jAt3/4wLf/+MC7//kAvH/5ANY/+QDZ//kA2j/5QNq/+QDgv/pA47/4wOP/+UDpv/kA7//5APC/+UD0P/lA+D/6QPi/+kD5P/pA+r/5QPt/+UD7v/qBEH/5ARD/+QERf/kBE3/4wRP/+UEV//lBGj/5QRp/+oEav/kACEAOP/iADz/5ADR/+IA0//kANX/4gDZ/+QA3P/kAN3/6QDx/+sBA//rATL/4gE6/+IBUf/kAtv/4gLd/+IC3//iA2j/5AOC/+kDjv/iA4//5APC/+QD0P/kA+D/6QPi/+kD5P/pA+r/5APt/+QD7v/rBE3/4gRP/+QEV//kBGj/5ARp/+sAFwA4/+sAPf/zANH/6wDV/+sBMv/rATr/6wJm//MC2//rAt3/6wLf/+sC7//zAvH/8wNY//MDZ//zA2r/8wOO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ABgEJwQnAAMEKAQoABgEMAQwABgEMwQzAAwENQQ1AAwEQQRBAA8EQgRCABkEQwRDAA8ERAREABkERQRFAA8ERgRGABkESQRJAAkESwRLAAIETQRNAAYETwRPAA4EUARQABsEVQRVAAcEVgRWAAgEVwRXAA4EWARYABsEWwRbABcEXQRdAB8EXgReAAcEYARgAAkEZARkAAIEZgRmAAIEagRqAA8EqgSqAAMAAgFtAAYABgAHAAsACwAHABAAEAATABEAEQAXABIAEgATACUAJQARACcAJwAFACsAKwAFAC4ALgAcADMAMwAFADUANQAFADcANwAZADgAOAAKADkAOQAGADoAOgANADsAOwAJADwAPAASAD0APQAOAD4APgAUAEUARQAaAEcASQAVAEsASwAVAFEAUgAYAFMAUwAIAFQAVAAYAFUAVQAVAFcAVwAbAFkAWQALAFoAWgACAFwAXAAWAF0AXQACAF4AXgAMAIMAgwAFAJIAkgAFAJMAkwAVAJcAlwAFAJgAmAAVAJoAmgALALEAsQARALIAsgAFALMAswARALoAugAVALwAvAACAMAAwAAYAMcAyAAVAMoAygALANEA0QAKANIA0gAFANMA0wABANUA1QAKANkA2QASANwA3AABAN0A3QAQAOAA4AAPAOsA6wAYAO0A7QAWAO8A8AAYAPEA8QAEAPIA9AAYAPYA9gAVAPcA9wAYAPgA+AADAPkA+gAYAP0A/QAYAP8A/wAYAQIBAgAVAQMBAwAEAQQBBAAYAQcBBwAFAQwBDAARARYBFgAFARcBFwAIARgBGAANARkBGQACARoBGgAFARwBHAAFAR0BHQAVAR4BHgAFASABIAAFASEBIQAVATIBMgAKATUBNQAYATgBOAAFATkBOQAVAToBOgAKAUQBRAAYAUkBSQAYAUsBTAAVAVEBUQABAVUBVQAFAVYBVgAVAWkBagAXAWwBbQAHAW4BbgATAW8BcQAHAXIBcgATAXYBdwATAigCKQAFAisCLAAFAkYCRgAXAkwCUgARAlMCUwAFAl0CYQAFAmICZQAGAmYCZgAOAmcCbQAaAm4CcgAVAncCdwAYAngCfAAIAn0CgAALAoECggACAoMCgwARAoQChAAaAoUChQARAoYChgAaAocChwARAogCiAAaAokCiQAFAooCigAVAosCiwAFAowCjAAVAo0CjQAFAo4CjgAVAo8CjwAFApACkAAVApICkgAVApQClAAVApYClgAVApgCmAAVApoCmgAVApwCnAAVAp0CnQAFAp4CngAVAp8CnwAFAqACoAAVAqECoQAFAqICogAVAqMCowAFAqQCpAAVArICsgAcAr8CvwAYAsECwQAYAsMCxAAYAsUCxQAFAsYCxgAIAscCxwAFAsgCyAAIAskCyQAFAsoCygAIAtEC0QAZAtIC0gAbAtMC0wAZAtQC1AAbAtUC1QAZAtYC1gAbAtcC1wAZAtgC2AAbAtkC2QAZAtoC2gAbAtsC2wAKAt0C3QAKAt8C3wAKAuEC4QAGAuIC4gALAuMC4wAGAuQC5AALAuUC5QAGAuYC5gALAucC5wAGAugC6AALAukC6QAGAuoC6gALAusC6wAGAuwC7AALAu0C7QAJAu8C7wAOAvAC8AACAvEC8QAOAvIC8gAUAvMC8wAMAvQC9AAUAvUC9QAMAvYC9gAUAvcC9wAMAvoC+gAFA1MDUwARA1cDVwAFA1gDWAAOA1sDWwARA14DXgAUA2QDZAAFA2cDZwAOA2gDaAASA2oDagAOA2sDawAVA20DbQAYA28DbwALA3EDcQAIA3MDcwACA3YDdgALA3cDdwAIA3gDeAALA38DfwAcA4IDggAQA4MDgwARA4oDigAFA40DjQAFA44DjgAKA48DjwASA5ADkAAaA5EDkQAVA5IDkgAYA5MDkwAIA5QDlAAYA5UDlQAVA5YDlgACA5cDlwAWA5gDmAAVA5kDmQAYA5oDmgAbA54DngAYA58DnwACA6ADoAAJA6IDogAJA6QDpAAJA6YDpgAOA6cDpwACA6gDqQAHA6wDrAAHA64DrgAYA68DrwARA7ADsAAaA7MDswAVA7QDtAAYA7cDtwANA7gDuAACA7kDuQAVA7oDugAFA70DvQAFA74DvgAVA78DvwAOA8ADwAACA8IDwgASA8MDwwAWA8UDxQARA8YDxgAaA8cDxwARA8gDyAAaA8wDzAAVA84DzwAVA9AD0AASA9ED0QAWA9UD1QAYA9cD1wAYA9gD2AAFA9kD2QAIA9oD2gAFA9sD2wAVA9wD3AAFA90D3QAIA+AD4AAQA+ED4QACA+ID4gAQA+MD4wACA+QD5AAQA+UD5QACA+YD5gAPA+cD5wADA+kD6QAYA+oD6gASA+sD6wAWA+wD7AAVA+0D7QABA+4D7gAEA+8D7wARA/AD8AAaA/ED8QARA/ID8gAaA/MD8wARA/QD9AAaA/UD9QARA/YD9gAaA/cD9wARA/gD+AAaA/kD+QARA/oD+gAaA/sD+wARA/wD/AAaA/0D/QARA/4D/gAaA/8D/wARBAAEAAAaBAEEAQARBAIEAgAaBAMEAwARBAQEBAAaBAUEBQARBAYEBgAaBAgECAAVBAoECgAVBAwEDAAVBA4EDgAVBBAEEAAVBBIEEgAVBBQEFAAVBBYEFgAVBBsEGwAFBBwEHAAIBB0EHQAFBB4EHgAIBB8EHwAFBCAEIAAIBCEEIQAFBCIEIgAIBCMEIwAFBCQEJAAIBCUEJQAFBCYEJgAIBCcEJwAFBCgEKAAIBCkEKQAFBCoEKgAVBCsEKwAFBCwELAAVBC0ELQAFBC4ELgAVBC8ELwAFBDAEMAAIBDEEMQAFBDIEMgAVBDMEMwAGBDQENAALBDUENQAGBDYENgALBDgEOAALBDoEOgALBDwEPAALBD4EPgALBEAEQAALBEEEQQAOBEIEQgACBEMEQwAOBEQERAACBEUERQAOBEYERgACBEoESgAYBEwETAAYBE0ETQAKBE8ETwASBFAEUAAWBFEEUQAPBFIEUgADBFMEUwAPBFQEVAADBFYEVgAYBFcEVwASBFgEWAAWBGMEYwAYBGUEZQAYBGcEZwAYBGgEaAABBGkEaQAEBGoEagAOBHAEcAAXBKoEqgAFAAEAAAAKAgYG8AAEREZMVAAaY3lybABIZ3JlawB2bGF0bgCkAAQAAAAA//8AEgAAAAoAFAAeACgANABBAEsAVQBfAGkAcwB9AIcAkQCbAKUArwAEAAAAAP//ABIAAQALABUAHwApADUAQgBMAFYAYABqAHQAfgCIAJIAnACmALAABAAAAAD//wASAAIADAAWACAAKgA2AEMATQBXAGEAawB1AH8AiQCTAJ0ApwCxACgABkFaRSAAVENSVCAAfk1PTCAAqE5BViAA1FJPTSABAFRVUiABLAAA//8AEwADAA0AFwAhACsAMgA3AEQATgBYAGIAbAB2AIAAigCUAJ4AqACyAAD//wASAAQADgAYACIALAA4AEUATwBZAGMAbQB3AIEAiwCVAJ8AqQCzAAD//wASAAUADwAZACMALQA5AEYAUABaAGQAbgB4AIIAjACWAKAAqgC0AAD//wATAAYAEAAaACQALgA6AD4ARwBRAFsAZQBvAHkAgwCNAJcAoQCrALUAAP//ABMABwARABsAJQAvADsAPwBIAFIAXABmAHAAegCEAI4AmACiAKwAtgAA//8AEwAIABIAHAAmADAAPABAAEkAUwBdAGcAcQB7AIUAjwCZAKMArQC3AAD//wATAAkAEwAdACcAMQAzAD0ASgBUAF4AaAByAHwAhgCQAJoApACuALgAuWMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGMyc2MEWGNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmNjbXAEXmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRsaWcEZmRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGRub20EbGZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmxpZ2EEfGxpZ2EEhGxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxvY2wEkGxvY2wElmxvY2wEnG51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqHBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5AAAAAEAAAAAAAIAAgADAAAAAQAHAAAAAQAYAAAAAwAVABYAFwAAAAIACAAJAAAAAQAJAAAAAQAUAAAAAQAEAAAAAQAGAAAAAQAFAAAAAQAZAAAAAQARAAAAAQATAAAAAQABAAAAAQAKAAAAAQALAAAAAQAMAAAAAQANAAAAAQAOAAAAAQAPAAAAAQAQAAAAAQASABsAOAPGBrQHYA3wDfAOBg4oDl4OhA6yDsYO2g7uDwAPGg9cD3oPmA/KD/wQLhBCEHoQbBB6EKYAAQAAAAEACAACAcQA3wHnAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHoAekCRAI7AeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AgACAQTdAgICAwIEAgUCBgIHAggCCQIKAgsCLwIPAhACEQIUAhUCFgIXAhgCGQIbAhwCHgIdAvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSBKsErAStBK4ErwSwBLEEsgSzBLQEtQS2BLcEuAS5BLoEuwS8BL0EvgS/BMAEwQTCBMMExATFBMYB/wTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNgE2QTbAhoE3AIOBNcCEwINBNoCDAISAAEA3wAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAhQCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkcCSAJKAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAoMChQKHAokCiwKNAo8CkQKTApUClwKZApsCnQKfAqECowKlAqcCqQKrAq0CrwKyArQCtgK4AroCvAK+AsACwgLFAscCyQLLAs0CzwLRAtMC1QLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvIC9AL2A1MDVANVA1YDVwNYA1kDWwNcA10DXgNfA2ADYQNiA2QDZQNmA2cDaANpA2oDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwO7A70DvwPUA9oD4ARJBEsETwRXBFkEXgRqAAEAAAABAAgAAgF0ALcBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAv0DMAI7AfoEygTLAfsB/AH9Af4B/wIABM4EzwTRBNQE3QICAgMCBAIFAgYCBwIIAgkCCgILAfQB9QH2AfcB+AH5Ai8CDwIQAhECFAIVAhcCGQL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZA08DGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNQA1EDUgTJBMwEzQTQBNIE0wIBBNUEwQTCBMMExATFBMYExwTIBNYE2ATZAhgE2wIaBNwC/AIOBNcCEwINBNoCFgIMAhIAAQC3AEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCHAIwAkwDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEtATEBMwE5ATsBPQFAAUcCSwJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoQChgKIAooCjAKOApACkgKUApYCmAKaApwCngKgAqICpAKmAqgCqgKsAq4CswK1ArcCuQK7Ar0CvwLBAsMCxgLIAsoCzALOAtAC0gLUAtYC2gLcAt4C4ALiAuQC5gLoAuoC7ALuAvAC8wL1AvcDkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwO8A74DwAPOA9UD2wPhBEcESgRMBFAEWARaBFsEXwRrAAYAAAAGABIAKgBCAFoAcgCKAAMAAAABABIAAQCQAAEAAAAaAAEAAQBNAAMAAAABABIAAQB4AAEAAAAaAAEAAQBOAAMAAAABABIAAQBgAAEAAAAaAAEAAQKuAAMAAAABABIAAQBIAAEAAAAaAAEAAQObAAMAAAABABIAAQAwAAEAAAAaAAEAAQOdAAMAAAABABIAAQAYAAEAAAAaAAEAAQQaAAIAAQCnAKsAAAAEAAAAAQAIAAEGHgA2AHIApACuALgAygD8AQ4BGAFKAWQBfgGQAboB7AH2AhgCMgJEAnYCiAKiAswC3gMQAxoDJAM2A2gDcgN8A4YDoAO6A8wD9gQoBDIEVARuBIAEsgTEBN4FCAUaBSQFLgU4BUIFbAWWBcAF6gYUAAYADgAUABoAIAAmACwCTAACAKcCTQACAKgCTwACAKkD8QACAKoEewACAKsD7wACAKwAAQAEBIgAAgCsAAEABAKJAAIAqAACAAYADASKAAIArASMAAIBogAGAA4AFAAaACAAJgAsAlQAAgCnAlUAAgCoBAsAAgCpBAkAAgCqBH0AAgCrBAcAAgCsAAIABgAMBHcAAgCoAqMAAgGiAAEABASOAAIArAAGAA4AFAAaACAAJgAsAlgAAgCnAlkAAgCoAqcAAgCpBBcAAgCqBH8AAgCrBBkAAgCsAAMACAAOABQEkAACAKgEkgACAKwCtAACAaIAAwAIAA4AFAK2AAIAqASUAAIArAK4AAIBogACAAYADAOtAAIAqASWAAIArAAFAAwAEgAYAB4AJAR5AAIApwK+AAIAqAJcAAIAqQSYAAIArALAAAIBogAGAA4AFAAaACAAJgAsAl0AAgCnAl4AAgCoAmAAAgCpBB0AAgCqBIEAAgCrBBsAAgCsAAEABASaAAIAqAAEAAoAEAAWABwCywACAKgEgwACAKsEnAACAKwCzQACAaIAAwAIAA4AFALRAAIAqASeAAIArALXAAIBogACAAYADASgAAIArALbAAIBogAGAA4AFAAaACAAJgAsAmIAAgCnAmMAAgCoAuEAAgCpBDUAAgCqBIUAAgCrBDMAAgCsAAIABgAMBKIAAgCpBKQAAgCsAAMACAAOABQDoAACAKcDogACAKgEpgACAKwABQAMABIAGAAeACQDpgACAKcCZgACAKgERQACAKkEQwACAKoEQQACAKwAAgAGAAwC8gACAKgEqAACAKwABgAOABQAGgAgACYALAJnAAIApwJoAAIAqAJqAAIAqQPyAAIAqgR8AAIAqwPwAAIArAABAAQEiQACAKwAAQAEAooAAgCoAAIABgAMBIsAAgCsBI0AAgGiAAYADgAUABoAIAAmACwCbwACAKcCcAACAKgEDAACAKkECgACAKoEfgACAKsECAACAKwAAQAEBHgAAgCoAAEABASPAAIArAABAAQEGgACAKwAAwAIAA4AFASRAAIAqASTAAIArAK1AAIBogADAAgADgAUArcAAgCoBJUAAgCsArkAAgGiAAIABgAMA64AAgCoBJcAAgCsAAUADAASABgAHgAkBHoAAgCnAr8AAgCoAncAAgCpBJkAAgCsAsEAAgGiAAYADgAUABoAIAAmACwCeAACAKcCeQACAKgCewACAKkEHgACAKoEggACAKsEHAACAKwAAQAEBJsAAgCoAAQACgAQABYAHALMAAIAqASEAAIAqwSdAAIArALOAAIBogADAAgADgAUAtIAAgCoBJ8AAgCsAtgAAgGiAAIABgAMBKEAAgCsAtwAAgGiAAYADgAUABoAIAAmACwCfQACAKcCfgACAKgC4gACAKkENgACAKoEhgACAKsENAACAKwAAgAGAAwEowACAKkEpQACAKwAAwAIAA4AFAOhAAIApwOjAAIAqASnAAIArAAFAAwAEgAYAB4AJAOnAAIApwKBAAIAqARGAAIAqQREAAIAqgRCAAIArAACAAYADALzAAIAqASpAAIArAABAAQC+AACAKgAAQAEAvoAAgCoAAEABAL5AAIAqAABAAQC+wACAKgABQAMABIAGAAeACQCcwACAKcCdAACAKgCqAACAKkEGAACAKoEgAACAKsABQAMABIAGAAeACQEKwACAKcEKQACAKgELwACAKkELQACAKoEMQACAKwABQAMABIAGAAeACQELAACAKcEKgACAKgEMAACAKkELgACAKoEMgACAKwABQAMABIAGAAeACQEOQACAKcENwACAKgEPQACAKkEOwACAKoEPwACAKwABQAMABIAGAAeACQEOgACAKcEOAACAKgEPgACAKkEPAACAKoEQAACAKwAAQAEBIcAAgCoAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCMAIwAMACXAJoAMQDPAM8ANQABAAAAAQAIAAEABgACAAEAAgLVAtYAAQAAAAEACAACAA4ABATeBN8E4AThAAEABAKHAogCmQKaAAQAAAABAAgAAQAmAAIACgAcAAIABgAMAaMAAgBKAagAAgBYAAEABAGpAAIAWAABAAIASgBXAAQAAAABAAgAAQBEAAIACgAUAAEABAGkAAIATQABAAQBpgACAE0ABAAAAAEACAABAB4AAgAKABQAAQAEAaUAAgBQAAEABAGnAAIAUAABAAIASgGjAAEAAAABAAgAAQAGAZUAAQABAEsAAQAAAAEACAABAAYBJwABAAEAugABAAAAAQAIAAEABgGsAAEAAQA2AAEAAAABAAgAAgAcAAIB4wHkAAEAAAABAAgAAgAKAAIB5QHmAAEAAgAvAE8AAQAAAAEACAACAB4ADAIoAioCKQIrAiwCHwIgAiECIgGuAiQCJQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAQAAAAEACAACAAwAAwImAicCJwABAAMASQBLAiIAAQAAAAEACAACAGYACAI9Ai0CLgIwAjECOQI6AjwAAQAAAAEACAACABYACAAbABUAFgAXABgAGQAdABQAAQAIAa0CIwRxBHIEcwR0BHUEdgABAAAAAQAIAAIAFgAIBHYCIwRxBHIEcwR0Aa0EdQABAAgAFAAVABYAFwAYABkAGwAdAAEAAAABAAgAAgAWAAgAFQAWABcAGAAZABsAHQAUAAEACAItAi4CMAIxAjkCOgI8Aj0AAQAAAAEACAABAAYBaQABAAEAEwAGAAAAAQAIAAMAAQASAAEAUgAAAAEAAAAaAAIAAgF8AXwAAAHUAd0AAQABAAAAAQAIAAEAKAHAAAEAAAABAAgAAgAaAAoCMgB6AHMAdAIzAjQCNQI2AjcCOAACAAEAFAAdAAAAAQAAAAEACAACACYAEAHUAdUB1gHXAdgB2QHaAdsB3AHdAkACPgJBAkICPwJDAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgKuA5sDnQQa\",\n\t\"Roboto-Medium.ttf\": \"AAEAAAARAQAABAAQR1BPU32qcYwAAgioAABZDEdTVUJMnCjgAAJhtAAAGWhPUy8yoQuxtgAAAZgAAABgY21hcEAmSHIAABpsAAASyGN2dCAElytKAAAvvAAAAFZmcGdte/lhqwAALTQAAAG8Z2FzcAAIABMAAgicAAAADGdseWaunmLpAAA53AABy8xoZG14PT88IAAAFYAAAATsaGVhZPh7qwgAAAEcAAAANmhoZWEK7wqbAAABVAAAACRobXR4JPNE9QAAAfgAABOIbG9jYd3eZq0AADAUAAAJxm1heHAHEgL1AAABeAAAACBuYW1lPWNvTAACBagAAALUcG9zdP9tAGQAAgh8AAAAIHByZXAbsfg2AAAu8AAAAMwAAQAAAAIAABFApG1fDzz1ABsIAAAAAADE8BEuAAAAANDbTpT6JP3VCVwIcwAAAAkAAgAAAAAAAAABAAAHbP4MAAAJa/ok/kEJXAABAAAAAAAAAAAAAAAAAAAE4gABAAAE4gCPABYATgAFAAEAAAAAAA4AAAIAAhYABgABAAMElQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAK/1AAIX8AAAAhAAAAAEdPT0cAQAAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwACAAIAACA4wAZAAAAAAAAAAAAf4AAAH+AAACJQCPApgAZQTiAGAEjABkBeAAYwUdAFYBWgBSAsoAgALSACgDiQAbBHUARAHCABwCoABHAjwAhwMqAAIEjABpBIwAqASMAFEEjABPBIwANASMAIEEjAB1BIwARQSMAGgEjABdAh8AggHnAC4EEQA/BHoAkQQqAIAD5AA8BygAWwVTABIFDACUBTkAZgU6AJQEhgCUBGUAlAVyAGoFrwCUAkIAowRxAC0FCwCUBFQAlAcBAJQFrgCUBYYAZgUdAJQFhgBgBP4AlATUAEoE2wAtBTcAfQUtABIHCgAwBRAAKQTgAAcE0QBQAjEAhANYABQCMQAMA2sANQOcAAMClAAxBFQAWgSBAHwEMABPBIQATwRLAFMC1gAtBIkAUgRxAHkCCwB9AgH/tQQtAH0CCwCMBvYAfARzAHkEjgBPBIEAfASLAE8C0AB8BCEASwKpAAgEcgB3A/UAFgXyACEEBgAfA+UADAQGAFICrwA4AgIArgKvABsFUQB1Ah4AhgR9AGQEtQBeBZ0AXQTgABkB/ACIBPgAWgOFAF0GRABXA5EAjQPiAFcEbQB/BkQAVwPbAIcDCgB/BEoAXwL2ADwC9gA3ApsAcAS7AJID7QBFAkIAjgIQAG0C9gCAA6cAdwPiAF0F0ABZBisAUAZXAGcD5ABCB4X/9gREAE0FhABpBMoAlATnAIgGwQBIBKcAZwSRAEMEiABPBJcAggWwAB8CGgCPBJgAjgRkACICTwAhBZMAkASIAH4HtABkBzoAWwIMAIsFiABRAtD/5AWKAFgEngBPBaQAfQTyAHcCJv+1BDwAWQPmAJQDsAByA9wAhwN8AHUCCwCBArIAeAJNACkD2AB6Ax8ASQJsAIIAAPyOAAD9XgAA/HMAAP0+AAD8DAAA/RwCXQDGBDwAZwJCAI4EdQCbBb8AGQV6AFsFOAAgBJAAbAWxAJsEkABHBe8ASgWqAEQFWwBrBIQAVgTGAJYEDgAgBIgAVARgAGAEGgBhBIgAfgShAHMCqgCpBGoAFgQTAGQE8wAtBIgAgAQ3AFIEkABSBC0APwRgAIAF0ABEBckATwaUAGYEswB2BHv/4QZxADMF/gAiBVkAaAiIAC0IjwCbBlsAMQWqAJIFCACQBgYAJAeiABYE1gBJBagAlAWpAC0FCgA5Bl8ATwX5AJIFiQCOB5sAmAf5AJgGGgAYBvkAmwUHAJAFUABrB1QAoAT3ACAEfQBbBI8AjwNaAIUE9gAnBnYAHgQWAE0EmACGBG4AjwSaACEGAwCPBJcAhgSYAIYD9QAjBdMAVATTAIYEZgBfBo4AhgbsAH4FFwAfBm8AjwRoAI8EPABRBoQAkQRwACcEcf/bBDwAVAbRAB4G5ACGBIn/7gSYAIYHSQCIBk8AcARn/+AHKACYBgEAhgUMABwEYAAKB0IArAY2AJ0G7QCABeYAggkyAKMH+QCPBCAAKAPwADMFegBfBIgATwUaABAEDgAgBXoAXwSIAE8HRQCIBkQAdAdJAIgGTwBwBRoAZgRKAFwE/wBtAAD8ZgAA/HMAAP17AAD9pQAA+iQAAPpNBGf/4AUTAJQEhgB8BGoAjwOhAH4EtwCbBCAAfgUsAJAEqwCOBpUANAWkAD0H0ACUBaoAfghHAJsG9QB+BioAZwT/AGEHMQAtBXAAJgV0AIAEcwB0BYcAhQYkABYEw//LBSEAkAR4AI4FrwCbBIgAfgWIAFEEpgBbBKYAXQTHADQDUwAtBQcAUgbxAGgG3QBeBlMAPAUoAC8EewBIBD4AdAe+AEIGnQBAB/0AlAaeAHcFBABdBCwAVQWqACEFHQBEBVUAgQMsAGcEFAAACCkAAAQUAAAIKQAAArkAAAIKAAABXAAABH8AAAIwAAABogAAANEAAAAAAAACoQBHAqEARwUpAJ0GMACBA50ABAHAAGMBvAAzAc4AMgGoAEoDFABsAxsAQAMIADIEXQBABJkAXALLAIgD+gCKBaYAigFsAEcHpwBKAnIAbAJpAFQDnAAtAvYANQNcAGkEtQBfBnAAIQa4AJgIkwCUB4gANQaMAHwEjABeBfUAIQQ0ACgEogAhBV4ATwV9ACgF5ABwA+IATAguAJAFCQBtBRQAlgY1AFkG3QBUBtEAWwaiAFgEkQBiBZYApgTZAEAEgwCeBLIAOwhFAF4CLf+vBI4AZQR6AJEEEQA8BCoAgAQMACQCWwChApgAYwHxAEUFGwAtBKgAGAS8AC0HIwAtByMALQURAC0GtwBLAAAAAAgwAFkINQBcBDMAOgSTAE8CEP+wAbMAXAOhAHUDoQB1A6EAdQQLAHUECwB1BAv/TAQLAHoDoQB1AgUAlASeAAkEYAB2BIAATwR6AHYD4AB2A8UAdgSmAFQE3gB2AfwAhQPVACQEWwB2A7kAdgYGAHYE3QB2BMAATwRtAHYEwABMBFwAdgQ0AD4EOwAkBIQAZwR7AAkGBwAoBF4AFQQ8AAUEKgBBAvYASwL2AIAC9gA8AvYANwL2ADUC9gBPAvYATQL2ADYC9gBLAvYARgO5AJACsgCWBDsACgS7AFYFRACbBSgAmwQwAIEFOQCbBC0AgQQ0AD4EZgA4BE0ADgO5AHYEewAJBMAATwR7AAkDmABCBNgAdgQZAEQFnQBQBVQAUATkAF8FkQAkBIAATwdUACQHVwB2BZcAJATXAHYEcQB2BVkAJwY6ABoERgBCBOQAdgRcAHYEywAkBEYAHwVdAHYEjABBBoQAdgcKAHYFWgAKBiAAdgRnAHYEgAA8BpIAdgSIAEMEIgAKBpIAGgSdAHYFGgB2BW4AJAXwAE8EWgAFBMQAFQaVACQEjABBBIwAdgX+AAoE0gBPBEYAQgTAAE8EZgA4A/cARgg2AHYE6wAoBIgAfAQ9AFAEmABPA6QAWwShAEwElAB8BJ8ATwRLAFMEiQBRBXoAawWiAGsFhgCbBeAAawXiAGsEGwCXBIIAbgO5AHYEVwAPBL4ANQL2AEsC9gA1AvYATwL2AE0C9gA2AvYASwL2AEYEawBmBC4AQwaYAE8EtABzBOsAYgIm/7UCJv+1AhsAjwIb//sCGwCPBGAAdgH+AAACoABHBVj/9wVY//cEj//UBNsALQKp/+gFUwASBVMAEgVTABIFUwASBVMAEgVTABIFUwASBTkAZgSGAJQEhgCUBIYAlASGAJQCQv/IAkIAowJC/8sCQv+/Ba4AlAWGAGYFhgBmBYYAZgWGAGYFhgBmBTcAfQU3AH0FNwB9BTcAfQTgAAcEVABaBFQAWgRUAFoEVABaBFQAWgRUAFoEVABaBDAATwRLAFMESwBTBEsAUwRLAFMCGv+0AhoAjwIa/7cCGv+rBHMAeQSOAE8EjgBPBI4ATwSOAE8EjgBPBHIAdwRyAHcEcgB3BHIAdwPlAAwD5QAMBVMAEgRUAFoFUwASBFQAWgVTABIEVABaBTkAZgQwAE8FOQBmBDAATwU5AGYEMABPBTkAZgQwAE8FOgCUBRoATwSGAJQESwBTBIYAlARLAFMEhgCUBEsAUwSGAJQESwBTBIYAlARLAFMFcgBqBIkAUgVyAGoEiQBSBXIAagSJAFIFcgBqBIkAUgWvAJQEcQB5AkL/swIa/58CQv+5Ahr/pQJC/98CGv/LAkIAFwILAAACQgCdBrMAowQMAH0EcQAtAib/tQULAJQELQB9BFQAlAILAIoEVACUAgsAVQRUAJQCoQCMBFQAlALnAIwFrgCUBHMAeQWuAJQEcwB5Ba4AlARzAHkEc/+lBYYAZgSOAE8FhgBmBI4ATwWGAGYEjgBPBP4AlALQAHwE/gCUAtAATwT+AJQC0AA4BNQASgQhAEsE1ABKBCEASwTUAEoEIQBLBNQASgQhAEsE1ABKBCEASwTbAC0CqQAIBNsALQKpAAgE2wAtAtEACAU3AH0EcgB3BTcAfQRyAHcFNwB9BHIAdwU3AH0EcgB3BTcAfQRyAHcFNwB9BHIAdwcKADAF8gAhBOAABwPlAAwE4AAHBNEAUAQGAFIE0QBQBAYAUgTRAFAEBgBSB4X/9gbBAEgFhABpBIgATwR6/6YEev+mBDsAJASeAAkEngAJBJ4ACQSeAAkEngAJBJ4ACQSeAAkEgABPA+AAdgPgAHYD4AB2A+AAdgH8/6YB/ACDAfz/qQH8/50E3QB2BMAATwTAAE8EwABPBMAATwTAAE8EhABnBIQAZwSEAGcEhABnBDwABQSeAAkEngAJBJ4ACQSAAE8EgABPBIAATwSAAE8EegBqA+AAdgPgAHYD4AB2A+AAdgPgAHYEpgBUBKYAVASmAFQEpgBUBN4AdgH8/5EB/P+XAfz/vQH8ABUB/AB8A9UAJARbAHYDuQB2A7kAdgO5AHYDuQB2BN0AdgTdAHYE3QB2BMAATwTAAE8EwABPBFwAdgRcAHYEXAB2BDQAPgQ0AD4ENAA+BDQAPgQ7ACQEOwAkBDsAJASEAGcEhABnBIQAZwSEAGcEhABnBIQAZwYHACgEPAAFBDwABQQqAEEEKgBBBCoAQQVTABIE6v9KBhP/UwKm/1YFmv+nBUT+4QVv/7ICqv+HBVMAEgUMAJQEhgCUBNEAUAWvAJQCQgCjBQsAlAcBAJQFrgCUBYYAZgUdAJQE2wAtBOAABwUQACkCQv+/BOAABwSEAFYEYABgBIgAfgKqAKkEYACABJgAjgSOAE8EuwCSA/UAFgQGAB8Cqv/MBGAAgASOAE8EYACABpQAZgSGAJQEdQCbBNQASgJCAKMCQv+/BHEALQUoAJsFCwCUBQoAOQVTABIFDACUBHUAmwSGAJQFqACUBwEAlAWvAJQFhgBmBbEAmwUdAJQFOQBmBNsALQUQACkEVABaBEsAUwSYAIYEjgBPBIEAfAQwAE8D5QAMBAYAHwRLAFMDWgCFBCEASwILAH0CGv+rAgH/tQRuAI8D5QAMBwoAMAXyACEHCgAwBfIAIQcKADAF8gAhBOAABwPlAAwBWgBSApgAZQRKAI8CJv+xAbwAMwcBAJQG9gB8BVMAEgRUAFoEhgCUBagAlARLAFMEmACGBaoARAXJAE8FGgAQBA7/8QhzAE8JawBmBNYASQQWAE0FOQBmBDAATwTgAAcEDgAgAkIAoweiABYGdgAeAkIAowVTABIEVABaBVMAEgRUAFoHhf/2BsEASASGAJQESwBTBYgAUQQ8AFkEPABZB6IAFgZ2AB4E1gBJBBYATQWoAJQEmACGBagAlASYAIYFhgBmBI4ATwV6AF8EiABPBXoAXwSIAE8FUABrBDwAUQUKADkD5QAMBQoAOQPlAAwFCgA5A+UADAWJAI4EZgBfBvkAmwZvAI8FEAApBAYAHwSEAE8FqQAtBJoAIQVTABIEVABaBVMAEgRUAFoFUwASBFQAWgVTABAEVP+aBVMAEgRUAFoFUwASBFQAWgVTABIEVABaBVMAEgRUAFoFUwASBFQAWgVTABIEVABaBVMAEgRUAFoFUwASBFQAWgSGAJQESwBTBIYAlARLAFMEhgCUBEsAUwSGAJQESwBTBIb/1QRL/44EhgCUBEsAUwSGAJQESwBTBIYAlARLAFMCQgCjAhoAjwJCAJQCCwB4BYYAZgSOAE8FhgBmBI4ATwWGAGYEjgBPBYYAJwSO/6MFhgBmBI4ATwWGAGYEjgBPBYYAZgSOAE8FigBYBJ4ATwWKAFgEngBPBYoAWASeAE8FigBYBJ4ATwWKAFgEngBPBTcAfQRyAHcFNwB9BHIAdwWkAH0E8gB3BaQAfQTyAHcFpAB9BPIAdwWkAH0E8gB3BaQAfQTyAHcE4AAHA+UADATgAAcD5QAMBOAABwPlAAwEogBPBKIATwUoAJsEbgCPBa8AlASXAIYE2wAtA/UAIwUQACkEBgAfBYkAjgRmAF8FiQCOBGYAXwR1AJsDWgCFB6IAFgZ2AB4GJAAWBMP/ywRxAHkFB//QBQf/0AR1//ADWv/iBTz/4wRE/64FqACUBJgAhgWvAJQElwCGBwEAlAYDAI8FqQAtBJoAIQTgAAcEDgAgBRAAKQQGAB8EYABgBGUAAgYwAIEEjABRBIwATwSMADQEjACBBKAAXQS0AH0FcgBqBIkAUgWuAJQEcwB5BVMAEgRUAA0EhgBIBEsAAQJC/vYCGv7iBYYAZgSOABYE/gAyAtD/bgU3AHEEcgAPBN/+rAUMAJQEgQB8BToAlASEAE8FOgCUBIQATwWvAJQEcQB5BQsAlAQtAH0FCwCUBC0AfQRUAJQCCwB4BwEAlAb2AHwFrgCUBHMAeQUdAJQEgQB8BP4AlALQAHIE1ABKBCEASwTbAC0CqQAIBS0AEgP1ABYFLQASA/UAFgcKADAF8gAhBNEAUAQGAFIFzP4cBJ4ACQQc/yoFGv83Ajj/OQTK/5MEeP7oBO7/pASeAAkEYAB2A+AAdgQqAEEE3gB2AfwAhQRbAHYGBgB2BMAATwRtAHYEOwAkBDwABQReABUB/P+dBDwABQPgAHYDuQB2BDQAPgH8AIUB/P+dA9UAJARbAHYERgAfBJ4ACQRgAHYDuQB2A+AAdgTkAHYGBgB2BN4AdgTAAE8E2AB2BG0AdgSAAE8EOwAkBF4AFQRGAEIE3gB2BIAATwQ8AAUF/gAKBOQAdgRGAB8FnQBQBVMAEgRUAFoEhgCUBEsAUwIaAHgAAAABAAAE5AkLBAAAAgICAwYFBwYCAwMEBQIDAwQFBQUFBQUFBQUFAgIFBQUECAYGBgYFBQYGAwUGBQgGBgYGBgUFBgYIBgUFAgQCBAQDBQUFBQUDBQUCAgUCCAUFBQUDBQMFBAcFBAUDAgMGAgUFBgUCBgQHBAQFBwQDBQMDAwUEAwIDBAQHBwcECAUGBQYIBQUFBQYCBQUDBgUJCAIGAwYFBgYCBQQEBAQCAwMEBAMAAAAAAAADBQMFBgYGBQYFBwYGBQUFBQUFBQUDBQUGBQUFBQUHBwcFBQcHBgoKBwYGBwkFBgYGBwcGCQkHCAYGCAYFBQQGBwUFBQUHBQUEBwUFBwgGBwUFBwUFBQgIBQUIBwUIBwYFCAcIBwoJBQQGBQYFBgUIBwgHBgUGAAAAAAAABQYFBQQFBQYFBwYJBgkIBwYIBgYFBgcFBgUGBQYFBQUEBggIBwYFBQkHCQcGBQYGBgQFCQUJAwICBQICAQADAwYHBAICAgIDBAMFBQMEBgIJAwMEAwQFBwgKCAcFBwUFBgYHBAkGBgcICAcFBgUFBQkCBQUFBQUDAwIGBQUICAYIAAkJBQUCAgQEBAUFBQUEAgUFBQUEBAUFAgQFBAcFBQUFBQUFBQUHBQUFAwMDAwMDAwMDAwQDBQUGBgUGBQUFBQQFBQUEBQUGBgYGBQgIBgUFBgcFBgUFBQYFBwgGBwUFBwUFBwUGBgcFBQcFBQcFBQUFBAkGBQUFBAUFBQUFBgYGBwcFBQQFBQMDAwMDAwMFBQcFBgICAgICBQIDBgYFBQMGBgYGBgYGBgUFBQUDAwMDBgYGBgYGBgYGBgUFBQUFBQUFBQUFBQUCAgICBQUFBQUFBQUFBQQEBgUGBQYFBgUGBQYFBgUGBgUFBQUFBQUFBQUGBQYFBgUGBQYFAwIDAgMCAwIDCAUFAgYFBQIFAgUDBQMGBQYFBgUFBgUGBQYFBgMGAwYDBQUFBQUFBQUFBQUDBQMFAwYFBgUGBQYFBgUGBQgHBQQFBQUFBQUFCAgGBQUFBQUFBQUFBQUFBAQEBAICAgIFBQUF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AAADfwAABBsAAAQbAAAA3AAABBwAAAQiAAADhwAABCMAAAQkAAAA3QAABCUAAAQlAAADjgAABCYAAAQvAAAA3wAABDAAAAQwAAADjwAABDEAAAQ0AAAA6QAABDUAAAQ1AAADkAAABDYAAAQ4AAAA7QAABDkAAAQ5AAADkQAABDoAAAQ9AAAA8AAABD4AAAQ+AAADkgAABD8AAAQ/AAAA9AAABEAAAARBAAADkwAABEIAAARCAAAA9QAABEMAAARDAAADlQAABEQAAAREAAAA9gAABEUAAARFAAADlgAABEYAAARPAAAA9wAABFAAAARQAAADsgAABFEAAARRAAADlwAABFIAAARSAAABAQAABFMAAARTAAADmAAABFQAAARUAAABAgAABFUAAARYAAADmQAABFkAAARbAAABAwAABFwAAARcAAADnQAABF0AAARdAAADswAABF4AAAReAAADngAABF8AAARhAAABBgAABGIAAARiAAAEXAAABGMAAARvAAABCQAABHAAAARxAAADtAAABHIAAAR1AAABFgAABHYAAAR3AAADtgAABHgAAAR4AAADuQAABHkAAAR5AAADuAAABHoAAASGAAABGgAABIgAAASJAAABJwAABIoAAASLAAAEYQAABIwAAASMAAAEWwAABI0AAASRAAABKQAABJIAAASTAAAEXQAABJQAAASVAAABLgAABJYAAASXAAAEVgAABJgAAASZAAADugAABJoAAASbAAAESAAABJwAAASdAAABMAAABJ4AAASfAAAEXwAABKAAAAShAAABMgAABKIAAASjAAAESgAABKQAAASpAAABNAAABKoAAASrAAADvAAABKwAAAStAAAETAAABK4AAASvAAADvgAABLAAAASxAAAEaQAABLIAAASzAAAETgAABLQAAAS1AAABOgAABLYAAAS3AAAEUAAABLgAAAS6AAABPAAABLsAAAS7AAAEWgAABLwAAAS9AAABPwAABL4AAAS/AAAEWAAABMAAAATCAAADwAAABMMAAATEAAABQQAABMUAAATGAAAEZwAABMcAAATIAAABQwAABMkAAATKAAAEYwAABMsAAATMAAAEUgAABM0AAATOAAAEZQAABM8AAATXAAADwwAABNgAAATYAAABRQAABNkAAATZAAADzQAABNoAAATaAAADzAAABNsAAATfAAADzgAABOAAAAThAAABRgAABOIAAAT1AAAD0wAABPYAAAT3AAAEVAAABPgAAAT5AAAD5wAABPoAAAT7AAABSAAABPwAAAT9AAAD6QAABP4AAAT/AAAEawAABQAAAAUAAAABSgAABQEAAAUBAAAD6wAABQIAAAUQAAABSwAABREAAAURAAAEbQAABRIAAAUTAAAD7AAAHgAAAB4BAAADrgAAHj4AAB4/AAADrAAAHoAAAB6FAAADnwAAHqAAAB7xAAAD7gAAHvIAAB7zAAADpQAAHvQAAB75AAAEQAAAH00AAB9NAAAEqQAAIAAAACALAAABWwAAIBAAACARAAABZwAAIBMAACAUAAABaQAAIBUAACAVAAAEbwAAIBcAACAeAAABawAAICAAACAiAAABcwAAICUAACAnAAABdgAAIDAAACAwAAABeQAAIDIAACAzAAADpwAAIDkAACA6AAABegAAIDwAACA8AAADqQAAIEQAACBEAAABfAAAIHQAACB0AAABfQAAIH8AACB/AAABfgAAIKMAACCjAAAEbgAAIKQAACCkAAABfwAAIKYAACCqAAABgAAAIKsAACCrAAAERwAAIKwAACCsAAABhQAAILEAACCxAAABhgAAILkAACC6AAABhwAAILwAACC9AAABiQAAIQUAACEFAAABiwAAIRMAACETAAABjAAAIRYAACEWAAABjQAAISIAACEiAAABjgAAISYAACEmAAAAuQAAIS4AACEuAAABjwAAIVsAACFeAAABkAAAIgIAACICAAABlAAAIgYAACIGAAAAsQAAIg8AACIPAAABlQAAIhEAACISAAABlgAAIhoAACIaAAABmAAAIh4AACIeAAABmQAAIisAACIrAAABmgAAIkgAACJIAAABmwAAImAAACJgAAABnAAAImQAACJlAAABnQAAJcoAACXKAAABnwAA7gEAAO4CAAABoAAA9sMAAPbDAAABogAA+wEAAPsEAAABpAAA/v8AAP7/AAABqgAA//wAAP/9AAABq7AALEuwCVBYsQEBjlm4Af+FsIQdsQkDX14tsAEsICBFaUSwAWAtsAIssAEqIS2wAywgRrADJUZSWCNZIIogiklkiiBGIGhhZLAEJUYgaGFkUlgjZYpZLyCwAFNYaSCwAFRYIbBAWRtpILAAVFghsEBlWVk6LbAELCBGsAQlRlJY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seix/7IWsi6yRbJcsnOyi7KdsrSyy7LisvmzEbMoszqzUbNps4Czl7Ops7+z1bPstAS0ELQctDO0RbRbtHK0iLSetLW0zbTetPW1B7UdtS61RrVdtW+1hbWcta61xbXcte22BLYbtoW3J7c5t0u3Yrd4t4+3pre4t8m327fruAK4E7gquEC4V7huuNu5crmJuZq5sbnHud659LoLuiK6LrpAule6abqAupK6qbrAute67rr5uwS7G7snuzO7Srthu227ebuQu6e7s7u/u9S76bv1vAG8GLwqvDa8QrxZvGq8f7yWvKe8vrzVvO29Bb0XvSm9Nb1BvVO9ZL12vYi9n721vcG9zb3ZveW9974IvhS+IL4svji+T75bvnK+iL6avrC+x77evvG/BL8cvy+/jb/vwAbAHcA0wErAYsB5wJDAp8C+wNDA4cD4wQrBIcE4wWjBmMGowb/B1sHswf3CFcItwjnCRcJcwnPCicKgwrfCzcLkwvzDDsMlwzfDTcNew3bDjcOkw7rD0sPpw//EFsR9xI/EpcS8xM3E3sT0xQrFIcWOxaTFusXRxejF9MYKxhzGM8ZKxlXGa8aCxo7GpMawxsXG0cboxvTHC8ccxzPHRsdYx2THdceHx53Hqce6x8bH3Mfox/7ID8gmyDnITMityMTI2sjxyQjJH8k1yUDJTMlYyWTJcMl8yYjJo8mrybPJu8nDycvJ08nbyePJ68nzyfvKA8oLyhPKK8pDylXKZ8p5yorKpMqsyrTKvMrEyszK5Mr7yw3LH8sxy0nLYMvOy9bL7sv2y/7MFcwszDTMPMxEzEzMY8xrzHPMe8yDzIvMk8ybzKPMq8yzzMrM0szazS7NNs0+zVXNbM10zXzNlM2czbPNyc3gzffODs4lzjjOS85iznPOh86mzrLOxM7MzuPO9c8Bzw3PJM87z1LPac9xz3nPkc+pz7XPwc/Nz9nP5c/xz/nQAdAJ0CDQN9A/0FbQbdCF0JzQpNCs0MPQ2dDx0PnRENEo0UDRWNFv0YbRnNG00czR5NH80gTSDNIk0jvSU9Jq0nzSjdKl0rzS1NLs0wTTG9M301PTX9Nr03PTf9OL05fTo9O108fT4NPy1AvUHdQw1ELUVdRn1HfUhtSZ1KvUvtTQ1OPU9dUI1RrVKtU61UbVUtVk1XbViNWZ1bLVxNXd1e/WAtYU1ifWOdZJ1ljWatZ81ojWlNag1qzWvtbQ1uPW9dcI1xrXLdc/11LXZNd014PXj9eh163Xv9fL193X6df62AbYEtge2CrYPNhO2GDYctiE2JbYqNi62MzY3djp2PXZAdkN2R/ZMdlD2VTZztno2fTaANoM2hjaJNow2jzaSNpU2mDabNp42oTakNqc2qjatNrA2sjbLduS29DcD9xt3Mzc590C3Q7dGt0m3TLdPt1K3ZXd5N4+3pbent6q3rTevN7E3sze1N7c3uTe9t8I3x/fNt9O32bfft+W367fxt/e3/bgDuAm4D7gVuBi4G7geuCG4JLgnuCq4LbgwuDU4Obg8uD+4QrhFuEi4S7hOuFG4VjhauF24YLhjuGa4abhsuHE4dXh4eHt4fniBeIR4h3iKeI14kHiTeJZ4mXiceJ94oXijeKV4p3ipeKt4rXiveLF4s3i1eLd4uXi/eMU4yvjPeNF403jZeNt43/jleOd46XjreO148zj1OPc4+Tj7OP04/zkBOQM5JnlCuVr5XPlf+WR5aLlquW25cLlzuXa5eYAAAAFAGQAAAMoBbAAAwAGAAkADAAPAG+yDBARERI5sAwQsADQsAwQsAbQsAwQsAnQsAwQsA3QALAARViwAi8bsQIfPlmwAEVYsAAvG7EADz5ZsgQCABESObIFAgAREjmyBwIAERI5sggCABESObAK3LIMAgAREjmyDQIAERI5sAIQsA7cMDEhIREhAxEBAREBAyEBNQEhAyj9PALENv7u/roBDOQCA/7+AQL9/QWw+qQFB/19Anf7EQJ4/V4CXogCXgACAI//8gGjBbAAAwANADuyBg4PERI5sAYQsAHQALAARViwAi8bsQIfPlmwAEVYsAwvG7EMDz5ZsgYNCitYIdgb9FmwAdCwAS8wMQEjAyEBNDYyFhUUBiImAX7RFwEA/vlKgEpIhEgBrQQD+sM5S0s5N0pKAAIAZQP0AkAGAAAEAAkAJQCwAEVYsAMvG7EDIT5ZsALQsAIvsAfQsAcvsAMQsAjQsAgvMDEBAyMRMwUDIxEzARMji64BLSOLrgV3/n0CDIn+fQIMAAIAYAAABLwFsAAbAB8AjQCwAEVYsAwvG7EMHz5ZsABFWLAQLxuxEB8+WbAARViwAi8bsQIPPlmwAEVYsBovG7EaDz5Zsh0MAhESObAdL7IAAworWCHYG/RZsATQsB0QsAbQsB0QsAvQsAsvsggDCitYIdgb9FmwCxCwDtCwCxCwEtCwCBCwFNCwHRCwFtCwABCwGNCwCBCwHtAwMQEjAyMTIzUhEyM1IRMzAzMTMwMzFSMDMxUjAyMDMxMjAs/gTKhM5wEFOvMBEU6nTuFOp07Q7jrd+0ynduA64AGa/mYBmp4BOZ8BoP5gAaD+YJ/+x57+ZgI4ATkAAQBk/y0EJgabACwAfbIqLS4REjkAsABFWLAMLxuxDB8+WbAARViwCS8bsQkfPlmwAEVYsCMvG7EjDz5ZsABFWLAgLxuxIA8+WbIZDCAREjmwGRCyAgEKK1gh2Bv0WbIPCSMREjmwDBCyEwEKK1gh2Bv0WbInIwkREjmwIxCyKgEKK1gh2Bv0WTAxATQmJicmNTQ2NzUzFRYWFSM0JiMiBhUUFgQeAhUUBgcVIzUmJjUzFBYzMjYDM2z8RunKraCuvvJxYWBsawEAkmQ2z7mfxtXzf3RydwF8VW9ZJn31ptYU2twZ9cR+kWhhV2leUGeGWqnSE8PCFvDGfopuAAAFAGP/7AWJBcUADQAaACcANQA5AImyBTo7ERI5sAUQsBPQsAUQsBvQsAUQsCjQsAUQsDbQALA2L7A4L7AARViwAy8bsQMfPlmwAEVYsCUvG7ElDz5ZsAMQsArQsAovshECCitYIdgb9FmwAxCyGAIKK1gh2Bv0WbAlELAe0LAeL7AlELIrAgorWCHYG/RZsB4QsjICCitYIdgb9FkwMRM0NjMyFhUVFAYjIiY1FxQWMzI2NTU0JiIGFQE0NjMyFhUVFAYgJjUXFBYzMjY1NTQmIyIGFQUnARdjqoqMqamKh6+qTT8+TE1+SwISroeIraf+6KuqTz5ASU49Pk3+An0Cx30EmISpqYlIg6iljAZFVVVJSUVWV0f80Iampo1HgqmniQVEV1NLS0ZUVEr0SARySAADAFb/7AURBcQAHAAlADEAmLIuMjMREjmwLhCwENCwLhCwHtAAsABFWLAJLxuxCR8+WbAARViwGy8bsRsPPlmwAEVYsBgvG7EYDz5ZsiAbCRESObIoCRsREjmyAyAoERI5shAoIBESObITGwkREjmyERMYERI5shkYExESObIWERkREjmwGxCyHQEKK1gh2Bv0WbIfHREREjmwCRCyLwEKK1gh2Bv0WTAxEzQ2NyYmNTQ2MzIWFRQGBwcBNjUzEAcXIScGICQFMjcBBwYVFBYDFBc3NzY1NCYjIgZWbqJVQ9Cwn8tcaWMBGT3Tftb+5lKc/lD+/QHie2v+wh94ghlnbx8+VkJHVAGJZal0a5ZGq8e7iluZTEj+tHiT/vOs/WF15SNSAXcWW3VlfgOqVH9MGTdWOVFgAAABAFID/AELBgAABAAWALAARViwAy8bsQMhPlmwAtCwAi8wMQEDIxEzAQsan7kFg/55AgQAAQCA/jECogZfABAAELIHERIREjkAsAQvsA0vMDETNBISNxcGAgMHEBIXByYCAoB88IYwja8IAauaMIbxewJQ5wGfAUdCjmv+Sf7lVv7R/iV8h0IBSQGdAAEAKP4xAlEGXwASABCyBxMUERI5ALAEL7AOLzAxARQCAgcnNhIRNRACJyc3FhISFwJReviHMJavmI4fMIDwgAgCQN7+Y/6tQYd0Ad0BMhcBFgHJihyIPv7E/nnQAAABABsCTQN0BbAADgAgALAARViwBC8bsQQfPlmwANAZsAAvGLAJ0BmwCS8YMDEBJTcFAzMDJRcFEwcDAycBTP7PNwEuD7MPASk2/srIkbSykgPMWKl1AVj+onOsWP72agEg/ulmAAABAEQAkgQqBLYACwAaALAJL7AA0LAJELIGAQorWCHYG/RZsAPQMDEBIRUhESMRITUhETMCrgF8/oTs/oIBfuwDId7+TwGx3gGVAAEAHP64AV0A6wAJABiyCQoLERI5ALAKL7IFDQorWCHYG/RZMDETJzY2NzUzBwYGn4M6KwHbAQFp/rhOW4dGva9q1QAAAQBHAgkCVALNAAMAEQCwAi+yAQEKK1gh2Bv0WTAxASE1IQJU/fMCDQIJxAABAIf/9QGiAQAACgAisgALDBESOQCwAEVYsAYvG7EGDz5ZsgANCitYIdgb9FkwMQEyFhUUBiMiJjQ2ARRESkpEQUxKAQBNOjlLSnRNAAABAAL/gwL+BbAAAwATALAAL7AARViwAi8bsQIfPlkwMRcjATPBvwI9v30GLQAAAgBp/+wEIgXEAA0AGwBGsgMcHRESObADELAR0ACwAEVYsAovG7EKHz5ZsABFWLADLxuxAw8+WbAKELIRAQorWCHYG/RZsAMQshgBCitYIdgb9FkwMQEQAiMiAgM1EBIzMhITJzQmIyIGBxEUFjMyNjcEIuvw7O8D6/Hv6wPzcHp3cANyenVwAwJl/sb+wQE3ATH8AToBOv7O/s8Uzb+1wP62zMi5xQAAAQCoAAAC/wW1AAYAOQCwAEVYsAUvG7EFHz5ZsABFWLAALxuxAA8+WbIEAAUREjmwBC+yAwEKK1gh2Bv0WbICAwUREjkwMSEjEQU1JTMC//L+mwI4HwSRes3RAAABAFEAAARABcQAGQBOshEaGxESOQCwAEVYsBEvG7ERHz5ZsABFWLAALxuxAA8+WbIDEQAREjmwERCyCQEKK1gh2Bv0WbIWEQAREjmwABCyGAEKK1gh2Bv0WTAxISE1ATY2NTQmIyIGFSM0NjYzMhYVFAYHASEEQPwtAeVpWXVjdoLzeeGT1PV7jP6cAqSnAhF1nU9ogJB9hdV21bxt75j+gwABAE//7AQVBcQAKQBusgcqKxESOQCwAEVYsA8vG7EPHz5ZsABFWLAbLxuxGw8+WbIBDxsREjmwAS+yHwEBcbKfAQFdsj8BAXGwDxCyBwEKK1gh2Bv0WbABELIoAQorWCHYG/RZshUoARESObAbELIiAQorWCHYG/RZMDEBMzY2NTQmIyIGFSM0NjYzMhYVFAYHFhYVFAQjIiQ1MxQWMzI2NTQmIyMBhpRwg21wYn7zd9WE2vl9Y3h9/vPb0v7084FtcYKIho8DRwFybGhzcVtwuGfbw2KtLCmwesTo4LpgeHhyc3wAAAIANAAABFgFsAAKAA4ASQCwAEVYsAkvG7EJHz5ZsABFWLAELxuxBA8+WbIBCQQREjmwAS+yAgEKK1gh2Bv0WbAG0LABELAL0LIIBgsREjmyDQkEERI5MDEBMxUjESMRIScBMwEhEQcDo7W18/2LBwJ0+/2QAX0SAgfD/rwBRJQD2PxXAmAgAAABAIH/7AQ6BbAAHQBqshoeHxESOQCwAEVYsAEvG7EBHz5ZsABFWLANLxuxDQ8+WbABELIDAQorWCHYG/RZsgcBDRESObAHL7IaAQorWCHYG/RZsgUHGhESObANELIUAQorWCHYG/RZshEUGhESObIdGhQREjkwMRMTIRUhAzYzMhIVFAAjIiQnMxYWMzI2NTQmIyIGB65PAw79vChlf9Dn/wDfyP75C+sOfGRwfYp5Qlw2AtIC3tL+pDr+9uHe/vnjumpxoIqFmyMzAAACAHX/7AQ3BbcAFAAfAGKyFSAhERI5sBUQsA3QALAARViwAC8bsQAfPlmwAEVYsA0vG7ENDz5ZsAAQsgEBCitYIdgb9FmyBwANERI5sAcvsgUHDRESObIVAQorWCHYG/RZsA0QshsBCitYIdgb9FkwMQEVIwYGBzYzMhIVFAAjIgARNRAAIQMiBgcVFBYyNhAmA2EezPQXdbbB3/771Nr+8QF1AV7sUIUfiNh+gAW3yQPayHv+8Nfe/u0BQgEFUwF/AbL9SVpLSqK/ogEIpgAAAQBFAAAENgWwAAYAMgCwAEVYsAUvG7EFHz5ZsABFWLABLxuxAQ8+WbAFELIDAQorWCHYG/RZsgADBRESOTAxAQEjASE1IQQ2/br/AkX9DwPxBSn61wTtwwAAAwBo/+wEIgXEABcAIQArAHSyCSwtERI5sAkQsBrQsAkQsCTQALAARViwFS8bsRUfPlmwAEVYsAkvG7EJDz5ZsikJFRESObApL7IfKQFxshoBCitYIdgb9FmyAxopERI5sg8pGhESObAJELIfAQorWCHYG/RZsBUQsiUBCitYIdgb9FkwMQEUBgcWFhUUBCMiJDU0NjcmJjU0NjMyFgM0JiIGFRQWMjYDNCYiBhUUFjI2BAJuX3J7/vzY2f77fHBebfDMzfDTgdR/fdx7H266bG26bQQwa6cwNbh0wOHiv3W6MjCna7ra2vyvbIWEbWuAfAL9X3t1ZWR2dgAAAgBd//oEEgXEABUAIQBksgkiIxESObAJELAW0ACwAEVYsAkvG7EJHz5ZsABFWLARLxuxEQ8+WbIWEQkREjl8sBYvGLICAQorWCHYG/RZsgACCRESObARELISAQorWCHYG/RZsAkQsh0BCitYIdgb9FkwMQEGIyICNTQ2NjMyABEVEAAFIzUzNjYDMjY3NTQmIgYVFBYDHnqjwOR01o3cAQL+nP6fHSPX5txJgCOE0n1+AmGBAQ3bkOqC/rj+7UT+dv5iA8kDyQEPVEpfocSthImoAP//AIL/9QGdBFEAJgAS+wAABwAS//sDUf//AC7+uAGIBFEAJwAS/+YDUQAGABASAAABAD8ApAOEBE4ABgAXsgAHCBESOQCwAEVYsAUvG7EFGz5ZMDEBBRUBNQEVATYCTvy7A0UCd+DzAXXBAXTzAAIAkQFkA+8D1gADAAcAJQCwBy+wA9CwAy+yAAEKK1gh2Bv0WbAHELIEAQorWCHYG/RZMDEBITUhESE1IQPv/KIDXvyiA14DDMr9jskAAAEAgAClA+AETgAGABeyAAcIERI5ALAARViwAi8bsQIbPlkwMQElNQEVATUC6v2WA2D8oAJ84+/+jMH+jO8AAgA8//QDmAXEABgAIwBesgkkJRESObAJELAc0ACwAEVYsBAvG7EQHz5ZsABFWLAiLxuxIg8+WbIcDQorWCHYG/RZsADQsAAvsgQAEBESObAQELIJAQorWCHYG/RZsgwQABESObIVABAREjkwMQE0NjY3NjU0JiMiBhUjNjYzMhYVFAcHBgcDNDYzMhYVFAYiJgFeQsMaKF1aVmnzAu3DyeGYe0IC9Eo/QEpIhEcBrIWevSg9R15jYVOxzsy3o555S5D+yTtJSzk3SkoAAgBb/jsG2QWQADYAQgB8sjtDRBESObA7ELAj0ACwKi+wMy+wAEVYsAMvG7EDDz5ZsABFWLAILxuxCA8+WbIFMwgREjmyDzMIERI5sA8vsAgQsjoCCitYIdgb9FmwFdCwMxCyGwIKK1gh2Bv0WbAqELIjAgorWCHYG/RZsA8QskACCitYIdgb9FkwMQEGAiMiJwYGIyImNzYSNjMyFhcDBjMyNjcSACEiBAIHBhIEMzI2NxcGBiMiJCcmExISJDMyBBIBBhYzMjY3EyYjIgYGzQzevrU9M4dKkpcSEH/DblSBVzQThWaDBhH+wf7AxP7RsgkMiwEfz1S3QCY9z2n+/pRbXgsM3gGB9vkBZ7L8Aw1KUTZgHi0yL2+MAgb6/t+aTEzwyaMBBo8qQv3NxtuuAXEBiMT+je3x/qO2KCKJKDHXzNMBJgESAbXy2/5l/oyIjV9TAe0T0QACABIAAAVCBbAABwAKAEYAsABFWLAELxuxBB8+WbAARViwAi8bsQIPPlmwAEVYsAYvG7EGDz5ZsgkEAhESObAJL7IAAQorWCHYG/RZsgoEAhESOTAxASEDIQEzASEBIQMDw/3Mdv75AibjAif++P2cAabTAVP+rQWw+lACHwJcAAMAlAAABKMFsAAOABYAHwBtsgIgIRESObACELAR0LACELAe0ACwAEVYsAEvG7EBHz5ZsABFWLAALxuxAA8+WbIXAAEREjmwFy+yHxcBcbIPAQorWCHYG/RZsggPFxESObAAELIQAQorWCHYG/RZsAEQsh4BCitYIdgb9FkwMTMRITIEFRQGBxYWFRQEIwERITI2NTQnJTMyNjU0JiMjlAHz9wECbGh2gf759f7qARl3huj+0vh2hXuC9gWwxsRkoCwgsXzN3AKR/jl2aeMFumtibGAAAQBm/+wE6wXEAB0AQLIDHh8REjkAsABFWLAMLxuxDB8+WbAARViwAy8bsQMPPlmwDBCyEwEKK1gh2Bv0WbADELIaAQorWCHYG/RZMDEBBgAjIiQCJzU0EiQzMgAXIyYmIyIGBxUUFjMyNjcE6xb+1Pmu/veQA5IBEbPxASYY/BKTjqWxAqmjlZYUAdrp/vulATDJiM4BOqr++u+di/Hpgez4hpwAAAIAlAAABNIFsAALABUARrICFhcREjmwAhCwFdAAsABFWLABLxuxAR8+WbAARViwAC8bsQAPPlmwARCyDAEKK1gh2Bv0WbAAELINAQorWCHYG/RZMDEzESEyBBIVFRQCBCMDETMyNjc1NCYjlAGuwQErpKX+z8WmpcfVAs7EBbCs/sTMSc/+xqoE5Pvm+elR7foAAQCUAAAETAWwAAsATgCwAEVYsAYvG7EGHz5ZsABFWLAELxuxBA8+WbILBgQREjmwCy+yAAEKK1gh2Bv0WbAEELICAQorWCHYG/RZsAYQsggBCitYIdgb9FkwMQEhESEVIREhFSERIQPn/aoCu/xIA7H9TAJWAor+QMoFsMz+bgABAJQAAAQxBbAACQBAALAARViwBC8bsQQfPlmwAEVYsAIvG7ECDz5ZsgkEAhESObAJL7IAAQorWCHYG/RZsAQQsgYBCitYIdgb9FkwMQEhESMRIRUhESED2/22/QOd/WACSgJp/ZcFsMz+TwABAGr/7ATwBcQAHgBVsgsfIBESOQCwAEVYsAsvG7ELHz5ZsABFWLADLxuxAw8+WbALELIRAQorWCHYG/RZsAMQshgBCitYIdgb9FmyHgsDERI5sB4vshsBCitYIdgb9FkwMSUGBCMiJAInNRAAITIEFyMCISIGBxUUEjMyNxEhNSEE8E/+6LK3/uaZAwE8ARvzAR4d+Cr++aqxA8exwlL+1AIovWdqpgE1znIBSgFz8OIBB/XtcOz++1gBHcAAAQCUAAAFGAWwAAsATACwAEVYsAYvG7EGHz5ZsABFWLAKLxuxCh8+WbAARViwAC8bsQAPPlmwAEVYsAQvG7EEDz5ZsgkGABESObAJL7ICAQorWCHYG/RZMDEhIxEhESMRMxEhETMFGPz9df39Aov8Aof9eQWw/aICXgABAKMAAAGfBbAAAwAdALAARViwAi8bsQIfPlmwAEVYsAAvG7EADz5ZMDEhIxEzAZ/8/AWwAAABAC3/7APkBbAADwAvsgUQERESOQCwAEVYsAAvG7EAHz5ZsABFWLAFLxuxBQ8+WbIMAQorWCHYG/RZMDEBMxEUBCMiJjUzFBYzMjY1Auj8/vvW5Pj8c21meQWw/APR9ubNdHWHdwABAJQAAAUYBbAADABTALAARViwBC8bsQQfPlmwAEVYsAgvG7EIHz5ZsABFWLACLxuxAg8+WbAARViwCy8bsQsPPlmyAAQCERI5tGoAegACXbIGBAIREjm0ZQZ1BgJdMDEBBxEjETMRNwEhAQEhAjal/f2MAaoBMv3jAjz+1AJ1r/46BbD9Va0B/v17/NUAAQCUAAAEJgWwAAUAKACwAEVYsAQvG7EEHz5ZsABFWLACLxuxAg8+WbIAAQorWCHYG/RZMDElIRUhETMBkQKV/G79ysoFsAAAAQCUAAAGagWwAA4AbgCwAEVYsAAvG7EAHz5ZsABFWLACLxuxAh8+WbAARViwBC8bsQQPPlmwAEVYsAgvG7EIDz5ZsABFWLAMLxuxDA8+WbIBAAQREjm0ZQF1AQJdsgcABBESObRqB3oHAl2yCgAEERI5tGoKegoCXTAxCQIhESMREwEjARMRIxEB3AGkAaMBR/wZ/lK1/lMZ/AWw+6QEXPpQAeACgvueBGH9f/4gBbAAAAEAlAAABRcFsAAJAEyyAQoLERI5ALAARViwBS8bsQUfPlmwAEVYsAgvG7EIHz5ZsABFWLAALxuxAA8+WbAARViwAy8bsQMPPlmyAgUAERI5sgcFABESOTAxISMBESMRMwERMwUX/f13/f0Ci/sECfv3BbD78wQNAAIAZv/sBR4FxAAQAB4ARrIEHyAREjmwBBCwFNAAsABFWLAMLxuxDB8+WbAARViwBC8bsQQPPlmwDBCyFAEKK1gh2Bv0WbAEELIbAQorWCHYG/RZMDEBFAIEIyIkAic1NBIkIAQSFwc0AiMiAgcVFBIzMhI1BR6U/u2zsf7rlwGXARMBZAETlgH9t6ikuQK7pqi1ArLW/r2trQFA0VLVAUatq/6/1QXyAQL+/+tU8P76AQD2AAIAlAAABNQFsAAKABMATbIKFBUREjmwChCwDNAAsABFWLADLxuxAx8+WbAARViwAS8bsQEPPlmyCwEDERI5sAsvsgABCitYIdgb9FmwAxCyEwEKK1gh2Bv0WTAxAREjESEyBBUUBCMlITI2NTQmJyEBkf0CLfQBH/7n/f7TATCHjpB+/skCHf3jBbD+0dbuy394do0CAAIAYP8EBRoFxAAVACMARrIIJCUREjmwCBCwINAAsABFWLARLxuxER8+WbAARViwCC8bsQgPPlmwERCyGQEKK1gh2Bv0WbAIELIgAQorWCHYG/RZMDEBFAIHFwclBiMiJAInNTQSJDMyBBIXBzQmIyICBxUUEjMyEjUFGYN2+qT+yj1GsP7rlwGXAROxtAETlgH+uKijuQK5p6m1ArLP/tFZw5T1Da0BQNFS1QFGrav+v9UF9v7+/+pV7P72AQD2AAIAlAAABN4FsAAOABcAWrIFGBkREjmwBRCwENAAsABFWLAELxuxBB8+WbAARViwAi8bsQIPPlmyDwIEERI5sA8vsgEBCitYIdgb9FmyCwEPERI5sAIQsA7QsAQQshcBCitYIdgb9FkwMQEhESMRITIEFRQGBwEVIQEhMjY1NCYnIQKr/ub9AgD8ARKNfgFH/vH9wgEEgJCFhP71AjH9zwWw4taSxTX9oQ0C/IFwdYACAAABAEr/7ASKBcQAJwBjshEoKRESOQCwAEVYsAkvG7EJHz5ZsABFWLAdLxuxHQ8+WbICHQkREjmyDgkdERI5sAkQshEBCitYIdgb9FmwAhCyFwEKK1gh2Bv0WbIiHQkREjmwHRCyJQEKK1gh2Bv0WTAxATQmJCcmNTQkMzIWFhUjNCYjIgYVFBYEFhYVFAQjIiQmNTMUFjMyNgONh/6gaMcBH+WY7oj8j4V8iZQBVM5g/unvnv73k/2kmYSFAXdgaGpBfcmw5HDPfnKBal9Qa2WBp3C213XOiXyIawAAAQAtAAAEsAWwAAcALgCwAEVYsAYvG7EGHz5ZsABFWLACLxuxAg8+WbAGELIAAQorWCHYG/RZsATQMDEBIREjESE1IQSw/jr7/j4EgwTk+xwE5MwAAQB9/+wEvQWwABAAPLIEERIREjkAsABFWLAJLxuxCR8+WbAARViwEC8bsRAfPlmwAEVYsAQvG7EEDz5Zsg0BCitYIdgb9FkwMQERFAAjIgA1ETMRFBYzIBERBL3+1/f6/tr8lJABJAWw/DPo/vEBC+0DzPwykpoBNAPGAAEAEgAABR0FsAAGADiyAAcIERI5ALAARViwAS8bsQEfPlmwAEVYsAUvG7EFHz5ZsABFWLADLxuxAw8+WbIAAQMREjkwMQEBIQEjASEClQFyARb99PX99gEVAT0Ec/pQBbAAAQAwAAAG5QWwAAwAYLIFDQ4REjkAsABFWLABLxuxAR8+WbAARViwCC8bsQgfPlmwAEVYsAsvG7ELHz5ZsABFWLADLxuxAw8+WbAARViwBi8bsQYPPlmyAAEDERI5sgUBAxESObIKAQMREjkwMQETMwEjAQEjATMTATMFCuD7/rDy/uv+5fP+sPviARbUAWgESPpQBCf72QWw+7oERgABACkAAATpBbAACwBTALAARViwAS8bsQEfPlmwAEVYsAovG7EKHz5ZsABFWLAELxuxBA8+WbAARViwBy8bsQcPPlmyAAEEERI5sgYBBBESObIDAAYREjmyCQYAERI5MDEBASEBASEBASEBASECiQEyAST+SAHC/tn+x/7G/toBw/5HASQDogIO/S79IgIW/eoC3gLSAAABAAcAAATWBbAACAAxALAARViwAS8bsQEfPlmwAEVYsAcvG7EHHz5ZsABFWLAELxuxBA8+WbIAAQQREjkwMQEBIQERIxEBIQJvAU8BGP4Y/v4XARkC/gKy/Gj96AIYA5gAAAEAUAAABIwFsAAJAEQAsABFWLAHLxuxBx8+WbAARViwAi8bsQIPPlmyAAEKK1gh2Bv0WbIEAAIREjmwBxCyBQEKK1gh2Bv0WbIJBQcREjkwMSUhFSE1ASE1IRUBggMK+8QC8f0UBB/KyqQEQMygAAABAIT+vAIcBo4ABwAiALAEL7AHL7IAAQorWCHYG/RZsAQQsgMBCitYIdgb9FkwMQEjETMVIREhAhylpf5oAZgF0PmpvQfSAAABABT/gwNkBbAAAwATALACL7AARViwAC8bsQAfPlkwMRMzASMU8AJg8AWw+dMAAQAM/rwBpgaOAAcAJQCwAi+wAS+wAhCyBQEKK1gh2Bv0WbABELIGAQorWCHYG/RZMDETIREhNTMRIwwBmv5mp6cGjvguvQZXAAABADUC2QM1BbAABgAnsgAHCBESOQCwAEVYsAMvG7EDHz5ZsADQsgEHAxESObABL7AF0DAxAQMjATMBIwG1ss4BK6sBKs0Epv4zAtf9KQABAAP/QQOYAAAAAwAbALAARViwAy8bsQMPPlmyAAEKK1gh2Bv0WTAxBSE1IQOY/GsDlb+/AAABADEE0QIJBgAAAwAkALABL7IPAQFdsAPQsAMvtA8DHwMCXbIAAQMREjkZsAAvGDAxASMBIQIJyv7yARUE0QEvAAACAFr/7AP7BE4AHgApAIWyFyorERI5sBcQsCDQALAARViwFy8bsRcbPlmwAEVYsAQvG7EEDz5ZsABFWLAALxuxAA8+WbICFwQREjmyCxcEERI5sAsvsBcQsg8BCitYIdgb9FmyEgsPERI5QAkMEhwSLBI8EgRdsAQQsh8BCitYIdgb9FmwCxCyIwcKK1gh2Bv0WTAxISYnBiMiJjU0JDMzNTQmIyIGFSM0NjYzMhYXERQXFSUyNjc1IyIGFRQWAwMQDHSoo84BAe+VXmBTavN2y32+4gMp/f1IfyCDh4hdH0Z5uomtuUdUZVNAWZtYv63+GJJXEa9GO8xeVkZTAAIAfP/sBDIGAAAPABsAZLITHB0REjmwExCwDNAAsAkvsABFWLAMLxuxDBs+WbAARViwAy8bsQMPPlmwAEVYsAYvG7EGDz5ZsgUMAxESObIKDAMREjmwDBCyEwEKK1gh2Bv0WbADELIYAQorWCHYG/RZMDEBFAIjIicHIxEzETYzMhIRJzQmIyIHERYzMjY3BDLhxb5qDNzzabLG4vN8dp5AQZ9yfAICEvz+1ol1BgD90nz+2v74B7Cwiv5CjaqsAAEAT//sA/UETgAcAEuyAB0eERI5ALAARViwDy8bsQ8bPlmwAEVYsAgvG7EIDz5ZsgABCitYIdgb9FmyAwgPERI5shMPCBESObAPELIWAQorWCHYG/RZMDElMjY3Mw4CIyIAETU0ADMyFhcjJiYjIgYHFRQWAjlbeATlBHbKdeP+9gEI5MHzBuUEd1x2gAF/rmpOZa9mASYBAxn3ASnht114q64nsK0AAAIAT//sBAMGAAAOABkAZLIXGhsREjmwFxCwA9AAsAYvsABFWLADLxuxAxs+WbAARViwDC8bsQwPPlmwAEVYsAgvG7EIDz5ZsgUDDBESObIKAwwREjmwDBCyEgEKK1gh2Bv0WbADELIXAQorWCHYG/RZMDETNBIzMhcRMxEjJwYjIgI3FBYzMjcRJiMiBk/ow6xq89wMbba+6/N/dZVFQ5V2gAIl+gEveAIq+gBwhAEy8qW5hQHOgrsAAAIAU//sBAsETgAVAB0Ag7IWHh8REjmwFhCwCNAAsABFWLAILxuxCBs+WbAARViwAC8bsQAPPlmyGgAIERI5sBovtL8azxoCXbRfGm8aAnG0HxovGgJxtO8a/xoCcbKMGgFdsgwHCitYIdgb9FmwABCyEAEKK1gh2Bv0WbISCAAREjmwCBCyFgEKK1gh2Bv0WTAxBSIANTU0NjYzMhIRFSEWFjMyNxcGBgMiBgchNSYmAlnn/uF94ovd8f09C513p2mDQdmkZHsRAc8IchQBI/Ieov+O/ub+/mKGnId9YWsDn4x9Enp9AAABAC0AAALWBhUAFABTsgcVFhESOQCwAEVYsAgvG7EIIT5ZsABFWLAELxuxBBs+WbAARViwAC8bsQAPPlmwBBCwENCyEwEKK1gh2Bv0WbAB0LAIELINAQorWCHYG/RZMDEzESM1MzU0NjMyFwcmIyIVFTMVIxHSpaXItEBIBig1rtzcA4a0Y7TEEr4Is2C0/HoAAAIAUv5WBAwETgAZACQAg7IiJSYREjmwIhCwC9AAsABFWLADLxuxAxs+WbAARViwBi8bsQYbPlmwAEVYsAsvG7ELET5ZsABFWLAXLxuxFw8+WbIFAxcREjmwCxCyEQEKK1gh2Bv0WbIPERcREjmyFQMXERI5sBcQsh0BCitYIdgb9FmwAxCyIgEKK1gh2Bv0WTAxEzQSMzIXNzMRFAQjIiYnNxYzMjY1NQYjIgI3FBYzMjcRJiMiBlLtxLlqC9v+9+F34ztzcKR5jGmvvvHyhXaTR0WTeIUCJfwBLYFt++fV9mNQkoWDf0l1AS72o7t+Adx7vgABAHkAAAP4BgAAEABCsgoREhESOQCwEC+wAEVYsAIvG7ECGz5ZsABFWLANLxuxDQ8+WbAARViwBi8bsQYPPlmwAhCyCgEKK1gh2Bv0WTAxATYzIBMRIxE0JiMiBxEjETMBbHe2AVoF82Fekkjz8wPEiv51/T0CunBdgvz7BgAAAAIAfQAAAZAF1QADAA0APrIGDg8REjmwBhCwAdAAsABFWLACLxuxAhs+WbAARViwAS8bsQEPPlmwAhCwDNCwDC+yBg0KK1gh2Bv0WTAxISMRMwE0NjIWFRQGIiYBf/Pz/v5HhEhIhEcEOgEZOEpKODdJSQAAAv+1/ksBhQXVAAwAFgBJsgMXGBESObADELAQ0ACwAEVYsAwvG7EMGz5ZsABFWLAELxuxBBE+WbIJAQorWCHYG/RZsAwQsBXQsBUvsg8NCitYIdgb9FkwMQERFAYjIic1FjMyNxEDNDYyFhUUBiImAXqln0M+JjB5AxVHhEhIhEcEOvtmpq8RwAmEBKMBGThKSjg3SUkAAQB9AAAENgYAAAwAUwCwAEVYsAQvG7EEIT5ZsABFWLAILxuxCBs+WbAARViwAi8bsQIPPlmwAEVYsAsvG7ELDz5ZsgAIAhESObRqAHoAAl2yBggCERI5tGUGdQYCXTAxAQcRIxEzETcBIQEBIQHcbPPzTAErAST+bgG9/ucB0G/+nwYA/IpfAVH+Pf2JAAEAjAAAAX8GAAADAB0AsABFWLACLxuxAiE+WbAARViwAC8bsQAPPlkwMSEjETMBf/PzBgAAAAEAfAAABnkETgAdAHeyBB4fERI5ALAARViwAy8bsQMbPlmwAEVYsAcvG7EHGz5ZsABFWLAALxuxABs+WbAARViwGy8bsRsPPlmwAEVYsBUvG7EVDz5ZsABFWLAMLxuxDA8+WbIBAxsREjmyBQcVERI5sAcQshABCitYIdgb9FmwGNAwMQEXNjMyFzYzMhYXESMRNCYjIgYHEyMRJiMiBxEjEQFhB3LG2VB21rOvAvNaaFNpFQHzBb6SPfMEOnGFpqbGwf05AsBnYFlI/RoCyL93/PAEOgABAHkAAAP4BE4AEABTsgsREhESOQCwAEVYsAMvG7EDGz5ZsABFWLAALxuxABs+WbAARViwDi8bsQ4PPlmwAEVYsAcvG7EHDz5ZsgEOAxESObADELILAQorWCHYG/RZMDEBFzYzIBMRIxE0JiMiBxEjEQFeB3jDAVIG81llk0jzBDp9kf59/TUCvWdjhfz+BDoAAAIAT//sBD0ETgAPABoAQ7IMGxwREjmwDBCwGNAAsABFWLAELxuxBBs+WbAARViwDC8bsQwPPlmyEgEKK1gh2Bv0WbAEELIYAQorWCHYG/RZMDETNDY2MzIAFxcUBgYjIgA1FxQWMjY1NCYjIgZPfuSU2wERCwF75Zbl/u3zivaJjXl3jAInn/+J/ubpOaD8igEx/gmnvcC5pMC9AAIAfP5gBDAETgAPABoAbrITGxwREjmwExCwDNAAsABFWLAMLxuxDBs+WbAARViwCS8bsQkbPlmwAEVYsAYvG7EGET5ZsABFWLADLxuxAw8+WbIFDAMREjmyCgwDERI5sAwQshMBCitYIdgb9FmwAxCyGAEKK1gh2Bv0WTAxARQCIyInESMRMxc2MzISESc0JiMiBxEWMzI2BDDkwLJr8+AKa7jG4fKBeJVBQpZ0gwIS+/7Vdf3/Bdpugv7Z/voGor57/iB+uwAAAgBP/mAEAgROAA4AGQBrshcaGxESObAXELAD0ACwAEVYsAMvG7EDGz5ZsABFWLAGLxuxBhs+WbAARViwCC8bsQgRPlmwAEVYsAwvG7EMDz5ZsgUDDBESObIKAwwREjmyEgEKK1gh2Bv0WbADELIXAQorWCHYG/RZMDETNBIzMhc3MxEjEQYjIgI3FBYzMjcRJiMiBk/oxrVqDtjzaqrC6vODdJBGRo50hQIm/gEqf2v6JgH8cAEv9qa9ewHsdroAAQB8AAACtAROAA0ARrIJDg8REjkAsABFWLAILxuxCBs+WbAARViwCy8bsQsbPlmwAEVYsAUvG7EFDz5ZsAsQsgIBCitYIdgb9FmyCQsFERI5MDEBJiMiBxEjETMXNjMyFwKzMDOnOvPoBlicNCIDXAiA/RwEOnmNDgABAEv/7APKBE4AJgBpsgknKBESOQCwAEVYsAkvG7EJGz5ZsABFWLAcLxuxHA8+WbICHAkREjmwAhCwFtCwCRCyEAEKK1gh2Bv0WbINFhAREjm0DA0cDQJdsBwQsiQBCitYIdgb9FmyISQCERI5tAMhEyECXTAxATQmJicmNTQ2MzIWFSM0JiMiBhUUFgQWFhUUBiMiJiY1MxYWMzI2Attr+FO27LbC7/NoVlBlXgEeo0/yxIXQdOwFeGNgZAEmQUQ0KFinjLzAmUZdSj44Pj9XeleStWCoYVZdSQAAAQAI/+wCcgVBABQAUrIAFRYREjkAsABFWLATLxuxExs+WbAARViwDS8bsQ0PPlmwExCwAdCwANCwAC+wARCyBAEKK1gh2Bv0WbANELIIAQorWCHYG/RZsAQQsBDQMDEBETMVIxEUFjMyNxUGIyARESM1MxEBrb+/MT8qK1NN/uiysgVB/vm0/aQ+Nwq8FwE1AmW0AQcAAQB3/+wD9wQ6ABAAU7IKERIREjkAsABFWLAHLxuxBxs+WbAARViwDS8bsQ0bPlmwAEVYsAIvG7ECDz5ZsABFWLAPLxuxDw8+WbIAAg0REjmwAhCyCgEKK1gh2Bv0WTAxJQYjIiY1ETMRFDMyNxEzESMDDGvFsLXzq7E+8+Vqfs7DAr39Rs5/Awn7xgABABYAAAPaBDoABgA4sgAHCBESOQCwAEVYsAEvG7EBGz5ZsABFWLAFLxuxBRs+WbAARViwAy8bsQMPPlmyAAUDERI5MDEBEzMBIwEzAfrl+/6J0/6G/AE0Awb7xgQ6AAABACEAAAXMBDoADABgsgUNDhESOQCwAEVYsAEvG7EBGz5ZsABFWLAILxuxCBs+WbAARViwCy8bsQsbPlmwAEVYsAMvG7EDDz5ZsABFWLAGLxuxBg8+WbIACwMREjmyBQsDERI5sgoLAxESOTAxARMzASMDAyMBMxMTMwQzrO3+2cjo5Mj+2O2v3rcBTwLr+8YC5/0ZBDr9HQLjAAABAB8AAAPoBDoACwBTALAARViwAS8bsQEbPlmwAEVYsAovG7EKGz5ZsABFWLAELxuxBA8+WbAARViwBy8bsQcPPlmyAAoEERI5sgYKBBESObIDAAYREjmyCQYAERI5MDEBEyEBASEDAyEBASECAc4BDv61AVb+9NjX/vIBVv62AQwC1gFk/ev92wFy/o4CJQIVAAEADP5LA9YEOgAPAD+yABARERI5ALAARViwDy8bsQ8bPlmwAEVYsAUvG7EFET5ZsgAFDxESObAPELAB0LAFELIJAQorWCHYG/RZMDEBEyEBAiMiJzUXMjY3NwEhAffcAQP+UmPtNUAuXF0bI/6EAQYBXALe+yL+7xK8A0NPXQQ1AAABAFIAAAPABDoACQBEALAARViwBy8bsQcbPlmwAEVYsAIvG7ECDz5ZsgABCitYIdgb9FmyBAACERI5sAcQsgUBCitYIdgb9FmyCQUHERI5MDElIRUhNQEhNSEVAYACQPySAiX95QNPwsKfAtfEmgAAAQA4/pgCkQY9ABcANrISGBkREjkAsAwvsABFWLAALxuxABc+WbIGAAwREjmwBi+yBQcKK1gh2Bv0WbISBQYREjkwMQEkAzU0IzUyNTU2NjcXBgcVFAcWFRUWFwJh/p8HwcEDtbAwrQatrQat/phjAWDV4bLi1LTeMow4+tjhW1zj1fo4AAABAK7+8gFVBbAAAwATALAAL7AARViwAi8bsQIfPlkwMQEjETMBVaen/vIGvgAAAQAb/pgCdQY9ABgANrIFGRoREjkAsAsvsABFWLAYLxuxGBc+WbIRGAsREjmwES+yEgcKK1gh2Bv0WbIFEhEREjkwMRc2NzU0NyY1NSYnNxYWFRUUMxUiFRUUBgcbsAS2tgSwMLaywsKztds5/9DnVlbqz/85jDPlucjhsuHFu+UzAAEAdQGDBNwDLwAXAD+yERgZERI5ALAPL7IDGA8REjmwAy+wDxCyCAEKK1gh2Bv0WbADELAL0LADELIUAQorWCHYG/RZsA8QsBfQMDEBFAYjIi4CIyIGFSM0NjMyHgIzMjY1BNy+jkp9mkMmQ03BtpRKhZFDJ0NUAxKw3ziJIWhUq9s7hCJwVAACAIb+lAGZBE0AAwAPAD6yBxARERI5sAcQsADQALAARViwDS8bsQ0bPlmwAEVYsAMvG7EDFz5ZsA0QsgcNCitYIdgb9FmwANCwAC8wMRMzEyEBFAYjIiY1NDYzMhaq0Rj+/wEHSEFCSEhCQUgClvv+BTc4S0s4N0tLAAEAZP8LBAoFJgAgAF2yGyEiERI5ALAARViwES8bsREbPlmwAEVYsAovG7EKDz5ZsgABCitYIdgb9FmyAwoRERI5sAoQsAfQsAcvsBEQsBTQsBQvshgRChESObARELIbAQorWCHYG/RZMDElMjY3MwYGBxUjNSYCNTU0Ejc1MxUWFhcjJiYjIgMHFBYCT1l4BuQExZLIt8zMt8ieuQTkB3Zb5hABf65oUIjNHOrqIgEf3BzVASAi4eAc2Jxgdf7ISLCtAAABAF4AAAR8BcMAHwBlshogIRESOQCwAEVYsBIvG7ESHz5ZsABFWLAFLxuxBQ8+WbIEAQorWCHYG/RZsAjQsh4FEhESObAeL7IfAQorWCHYG/RZsAzQsB4QsA/QshYFEhESObASELIZAQorWCHYG/RZMDEBFxQHIQchNTM2NjUnIzUzJzQ2IBYVIzQmIyIGFRchFQH9B0ACuAH751InKwehmwj6AZbo9WleWWcJATcCVrCHVcrKCW9bucfyyurauF9pgmjyxwACAF3/5QVPBPEAGwAoAD+yAikqERI5sAIQsB/QALAARViwAi8bsQIPPlmwENCwEC+wAhCyIAcKK1gh2Bv0WbAQELImBworWCHYG/RZMDElBiMiJwcnNyY1NDcnNxc2MzIXNxcHFhUUBxcHARQWFjI2NjQmJiIGBgQ9n8vKnoGNh2RtkI2Om8DCm5GOlGtii478eG6+3L5tbb3evm1rf36EkImcxcilk5CRc3WUkZefysGcjZECe3jOdXbO7sx1dcwAAAEAGQAABMAFsAAWAHIAsABFWLAWLxuxFh8+WbAARViwDC8bsQwPPlmyAAwWERI5sBYQsAHQsg8MFhESObAPL7AT0LATL7QPEx8TAl2wBNCwBC+wExCyEgQKK1gh2Bv0WbAG0LAPELAH0LAHL7APELIOBAorWCHYG/RZsArQMDEBASEBIRUhFSEVIREjESE1ITUhNSEBIQJtATsBGP53AQ3+owFd/qP8/p4BYv6eARn+dwEZAzQCfP02mIqX/tMBLZeKmALKAAIAiP7yAW0FsAADAAcAGACwAC+wAEVYsAYvG7EGHz5ZsgUBAyswMRMRMxERIxEziOXl5f7yAxv85QPIAvYAAgBa/iYEjAXEAC8APQCCsiA+PxESObAgELAw0ACwBy+wAEVYsCAvG7EgHz5ZsjkgBxESObA5ELITAQorWCHYG/RZsgI5ExESObAHELIOAQorWCHYG/RZsgsOExESObIyIAcREjmwMhCyLAEKK1gh2Bv0WbIaMiwREjmwIBCyJwEKK1gh2Bv0WbIkLCcREjkwMQEUBxYVFAQjIiQ1NxQWMzI2NTQmJy4CNTQ3JiY1NCQzMgQVIzQmIyIGFRQWBBYWJSYnBhUUFh8CNjU0JgSMq4f+8ur2/uDynIh5jYa7vL5dqUFEARPm8AEM85F4e4t4AYPCWv3NUUxsY5WzLnOIAce4WWS5rcbZzwFueF9PTVs3M26abbhaMohkqszhzGqAX1JUV2hxmW4VHCh8UVYvNRAvdVFhAAIAXQTfAyMFzAAIABEAIgCwBy+yDwcBXbICBQorWCHYG/RZsAvQsAcQsBDQsBAvMDETNDYyFhQGIiYlNDYyFhQGIiZdQ3ZERHZDAchEdkREdkQFVjJERGRERDEyRERkREQAAwBX/+wF4gXEABoAKAA2AI6yHzc4ERI5sB8QsAnQsB8QsDPQALAARViwMy8bsTMPPlmwLdCwLS+yAjMtERI5sAIvtA8CHwICXbIJLTMREjmwCS+0AAkQCQJdsg0JAhESObIQAgorWCHYG/RZsAIQshcCCitYIdgb9FmyGgIJERI5sC0Qsh8ICitYIdgb9FmwMxCyJQgKK1gh2Bv0WTAxARQGICY1NTQ2MzIWFSM0JiMiBhUVFBYzMjY1JTQCJCMiBAIQEgQgJBIlNBIkIAQSEAIEIyIkAgRer/7Avb+eo62cXFhcZ2hbWVoBppb+7qOf/u+cmwERAUABE5j677sBSwGAAUq7u/64wsH+t7wCVJii1bRxrtWllWBTiHZ1doZRYoWmAR2rpP7g/qz+4KeqASCnygFax8f+pv5s/qbJyAFaAAIAjQKzAxEFxAAaACQAj7INJSYREjmwDRCwHNAAsABFWLAULxuxFB8+WbIDJRQREjmwAy+wANCwAC+yAQMUERI5sgoDFBESObAKL7AUELINAgorWCHYG/RZshAKDRESObLMEAFdQBMMEBwQLBA8EEwQXBBsEHwQjBAJXbK6EAFxsAMQshsCCitYIdgb9FmwChCyHwIKK1gh2Bv0WTAxAScGIyImNTQ2MzM1NCMiBhUnNDYzMhYVERQXJTI2NzUjBgYVFAJgEU18doOorWZ0QUmtr4iJmhr+oChUG2pMVgLBRFJ7aW55M38zMA5ogZGE/sRhUYIkGYkBPDFY//8AVwCKA4UDqQAmAXrrAAAHAXoBUgAAAAEAfwF2A8IDJQAFABoAsAQvsAHQsAEvsAQQsgIBCitYIdgb9FkwMQEjESE1IQPCyP2FA0MBdgEEqwAEAFf/7AXiBcQADQAbADEAOgCdsgo7PBESObAKELAS0LAKELAx0LAKELAz0ACwAEVYsAMvG7EDHz5ZsABFWLAKLxuxCg8+WbADELISCAorWCHYG/RZsAoQshgICitYIdgb9FmyHQoDERI5sB0vsh8DChESObAfL7QAHxAfAl2yMh0fERI5sDIvshwICitYIdgb9FmyJRwyERI5sB0QsCzQsB8QsjoICitYIdgb9FkwMRM0EiQgBBIQAgQjIiQCJTQCJCMiBAIQEgQgJBIlESMRITIWFRQHFhYUFhcVIyY1NCYjJzMyNjU0JicjV7sBSwGAAUq7u/64wsH+t7wFEZb+7qOf/u+cmwERAUABE5j9JZcBGZmseEE0BwqbDUJNno9FXUddjQLZygFax8f+pv5s/qbJyAFay6YBHauk/uD+rP7gp6oBIFv+rwNSh311Px1vo0QXECKgTEOGPjZGOwEAAQCHBRIDXgWwAAMAEQCwAS+yAgMKK1gh2Bv0WTAxASE1IQNe/SkC1wUSngACAH8DrwKLBcQACQATADmyABQVERI5sArQALAARViwAC8bsQAfPlmwCtCwCi+yBQIKK1gh2Bv0WbAAELIQAgorWCHYG/RZMDEBMhYUBiMiJjQ2EzI2NTQmIgYUFgGHapqYbG2bnWs1RUVqSEkFxJ7cm5vcnv54RzU0TExoSAACAF8AAQPzBPwACwAPAEYAsAkvsABFWLANLxuxDQ8+WbAJELAA0LAJELIGAQorWCHYG/RZsAPQsA0Qsg4BCitYIdgb9FmyBQ4GERI5tAsFGwUCXTAxASEVIREjESE1IREzASE1IQKcAVf+qdj+mwFl2AEy/K8DUQODx/58AYTHAXn7BcQAAAEAPAKbArIFuwAXAFmyCBgZERI5ALAARViwDy8bsQ8fPlmwAEVYsAAvG7EAEz5ZshYCCitYIdgb9FmyAgAWERI5sgMPABESObAPELIIAgorWCHYG/RZsgwPABESObITDwAREjkwMQEhNQE2NTQmIyIGFSM0NjMyFhUUDwIhArL9nAEdcTY0OkK6qYePnGpijAFzApt9AQVnQyo1QjZ0mYBza2ZXcQABADcCjwKpBboAJAB9sh4lJhESOQCwAEVYsA0vG7ENHz5ZsABFWLAXLxuxFxM+WbIBFw0REjl8sAEvGLZAAVABYAEDcbKQAQFdsA0QsgYCCitYIdgb9FmyCQENERI5sAEQsiMCCitYIdgb9FmyEiMBERI5shsXDRESObAXELIeAgorWCHYG/RZMDEBMzI1NCYjIgYVIzQ2MzIWFRQHFhUUBiMiJjUzFBYzMjY1NCcjAQxRhDY+MEG6pYKPo4eVsY+Hq7pFPD89hlwEbGEjNScjY3x5aXczKY5qfn9xJjU3KmUBAAABAHAE0QJIBgAAAwAjALACL7IPAgFdsADQsAAvtA8AHwACXbACELAD0BmwAy8YMDEBIQEjATMBFf7rwwYA/tEAAQCS/mAEHwQ6ABIAYLINExQREjkAsABFWLAALxuxABs+WbAARViwBy8bsQcbPlmwAEVYsBAvG7EQET5ZsABFWLANLxuxDQ8+WbAARViwCi8bsQoPPlmwDRCyBAEKK1gh2Bv0WbILDQcREjkwMQERFhYzMjcRMxEjJwYjIicRIxEBhAJZaqg7898HXJN5TfIEOv2EjYJ5AxL7xlZrN/4+BdoAAQBFAAADVgWwAAoAK7ICCwwREjkAsABFWLAILxuxCB8+WbAARViwAC8bsQAPPlmyAQAIERI5MDEhESMiJDU0JDMhEQKEUOb+9wEK5gEhAgj+1tX/+lAAAAEAjgJFAakDUgAKABayCAsMERI5ALACL7EICitY2BvcWTAxEzQ2MhYVFAYjIiaOSoZLTkBBTALKOk5OOjtKSgABAG3+QQHJAAMADgA0sgkPEBESOQCwBi+wAEVYsA4vG7EODz5ZsAYQsQcKK1jYG9xZsg0HDhESObIBDQ4REjkwMSUHFhUUBiMnMjY1NCYnNwE+C5asmwdCR0dQIAM2G5JpdokvKi0jBYsAAQCAAqACAgWzAAYAObIBBwgREjkAsABFWLAFLxuxBR8+WbAARViwAC8bsQATPlmyBAUAERI5sAQQsgMCCitYIdgb9FkwMQEjEQc1JTMCArnJAW8TAqACOjCSdwACAHcCsgMsBcQADAAaAECyCRscERI5sAkQsBDQALAARViwAi8bsQIfPlmyCRsCERI5sAkvshACCitYIdgb9FmwAhCyFwIKK1gh2Bv0WTAxEzQ2IBYVFRQGIyImNRcUFjMyNjc1NCYjIgYVd78BNsC8nZ6+r11QTlsBXU9OXQRhoMPCpkifw8SjBWJubGFQYW5tZgD//wBdAIoDmQOpACYBewkAAAcBewF+AAD//wBZAAAFgwWrACcB1f/ZApgAJwF8ARsACAEHAdgCxQAAABAAsABFWLAFLxuxBR8+WTAx//8AUAAABcwFrgAnAXwA8AAIACcB1f/QApsBBwHWAxoAAAAQALAARViwCS8bsQkfPlkwMf//AGcAAAX8BbsAJwF8AagACAAnAdgDPgAAAQcB1wAwApsAEACwAEVYsCAvG7EgHz5ZMDEAAgBC/n8DpQROABkAIwBhshAkJRESObAQELAd0ACwAEVYsCEvG7EhGz5ZsABFWLAQLxuxEBc+WbAhELIdDQorWCHYG/RZsADQsAAvsgMAEBESObAQELIJAQorWCHYG/RZsgwQABESObIWEAAREjkwMQEGBgcHBhUUFjMyNjUzBgYjIiY1NDc3Njc3ExQGIiY1NDYyFgJ2AjVJZ1piWVhq8wLvws7im1xOCgL3R4RISIRHApV8kU9qYWpeXWRTsdDJuKWjXUhzNQE3OEtLODdLSwAAAv/2AAAHVwWwAA8AEgB3ALAARViwBi8bsQYfPlmwAEVYsAAvG7EADz5ZsABFWLAELxuxBA8+WbIRBgAREjmwES+yAgEKK1gh2Bv0WbAGELIIAQorWCHYG/RZsgsGABESObALL7IMAQorWCHYG/RZsAAQsg4BCitYIdgb9FmyEgYAERI5MDEhIQMhAyEBIRUhEyEVIRMhASEDB1f8fg/+Crj+3gNDA+D9ehECJP3kFAKX+u0BeRsBVP6sBbDF/mjF/jYBZwKIAAABAE0A1gPsBIYACwA4ALADL7IJDAMREjmwCS+yCgkDERI5sgQDCRESObIBCgQREjmwAxCwBdCyBwQKERI5sAkQsAvQMDETAQE3AQEXAQEHAQFNATz+xJQBOwE8lP7EATyU/sT+xQFsAUIBQpb+vgFClv6+/r6WAUH+vwAAAwBp/6EFIgXuABcAIAApAGayECorERI5sBAQsB3QsBAQsCbQALAARViwEC8bsRAfPlmwAEVYsAQvG7EEDz5ZshoQBBESObIjEAQREjmwIxCwG9CwEBCyHQEKK1gh2Bv0WbAaELAk0LAEELImAQorWCHYG/RZMDEBFAIEIyInByM3JhE1NBIkMzIXNzMHFhMFFBcBJiMiAgcFNCcBFjMyEjUFIpT+7bSkhFupkcOWARSyxY9Xp5OdAfxERwH2V4ekuQICvyz+F05pqbUCstb+va1Llu7DAWdD1QFEr2WP88H+w0vPgAM6Vf7/6wimcvzcNgEA9gAAAgCUAAAEfgWwAAwAFABXsgIVFhESObACELAP0ACwAEVYsAAvG7EAHz5ZsABFWLAKLxuxCg8+WbIBCgAREjmwAS+yDgoAERI5sA4vsgkBCitYIdgb9FmwARCyDQEKK1gh2Bv0WTAxAREzMgQVFAQjIxEjERMRMzI2NCYnAYfx9AES/u7z8vPz9n2RjHoFsP7o7sjH7/7UBbD+Jf4agt6EAgAAAQCI/+wEmwYVACwAW7IjLS4REjkAsABFWLAFLxuxBSE+WbAARViwFS8bsRUPPlmwAEVYsAAvG7EADz5Zsg4FFRESObAVELIcAQorWCHYG/RZsiIVBRESObAFELIqAQorWCHYG/RZMDEhIxE0NjMyFhUUDgIVFB4CFRQGIyImJzcWFjMyNjU0LgI1NDY1NCYjIgcBevLlzrvXG0UWQbJR2cZQqyYxLX82YVpGrlF+XFC4BARR1u67qT5icUEnLFSUiUuruScZwxwlVkMxW4iIUFjJTVFh9wAAAwBI/+wGhARQACkANAA8AMqyAj0+ERI5sAIQsC3QsAIQsDjQALAARViwFy8bsRcbPlmwAEVYsAUvG7EFDz5ZsADQsAAvsgwFFxESObAML7KPDAFdsBcQshABCitYIdgb9FmwFxCwG9CwGy+yOAAbERI5sDgvtB84LzgCcbTvOP84AnG0XzhvOAJxtL84zzgCXbKMOAFdsiAHCitYIdgb9FmwABCyIwEKK1gh2Bv0WbAFELIqAQorWCHYG/RZsAwQsi8HCitYIdgb9FmwGxCyNQEKK1gh2Bv0WTAxBSInBgYjIiY1NDYzMzU0JiMiBhUnNDYzMhc2FzISFRUhFhYzMjc3FwYGJTI2NzUjBgYVFBYBIgYHITU0JgTm/YxB1oawyO7pv19YW3Py/cXfb4PI1O79SQmYholrPUlG0fyYOogtxGh4XQMrY38QAcRtFKFNVLCcnqxHW2dZQhOSuYWHAv7964mLnjoipjhAuDsr0QJfRkFPAueKfx5xegACAGf/7ARABiwAHQArAGWyBywtERI5sAcQsCjQALAARViwGS8bsRkhPlmwAEVYsAcvG7EHDz5Zsg8HGRESObAPL7IRDwcREjmwGRCyGAEKK1gh2Bv0WbAPELIiAQorWCHYG/RZsAcQsigBCitYIdgb9FkwMQESERUUAgYjIiYmNTQ2NjMyFyYnByc3Jic3Fhc3FwMnJiYjIgYVFBYzMjY1A0L+fuWMiuJ+cc6EknExfsxOrH6iS+6xtE6PASB7Tn6LjW5viQUX/vf+b1Km/vmSfuKIled9W6l6h21yUirDMod4bf0ZEjA4qJV+qMitAAADAEMAkwQ3BMwAAwANABkAUrIEGhsREjmwBBCwANCwBBCwEdAAsAMvsgABCitYIdgb9FmwAxCxCQorWNgb3FmyBA0KK1gh2Bv0WbAAELERCitY2BvcWbIXDQorWCHYG/RZMDEBITUhATIWFAYjIiY0NgM0NjMyFhUUBiMiJgQ3/AwD9P4JREpKRENKSkpKQ0RKSkRDSgJG1AGyTHJLS3JM/Eo6TEw6OUpKAAMAT/93BD0EuwAVAB0AJQBmsgQmJxESObAEELAb0LAEELAj0ACwAEVYsAQvG7EEGz5ZsABFWLAPLxuxDw8+WbIYBA8REjmyIAQPERI5sCAQsBnQsAQQshsBCitYIdgb9FmwGBCwIdCwDxCyIwEKK1gh2Bv0WTAxEzQ2NjMyFzczBxYRFAYGIyInByM3JhMUFwEmIyIGBTQnARYzMjZPfuSUalhHkWbEe+WWXVpIkWbO80ABKy85d4wCCTr+2Csze4kCJ5//iSKP0Jn+wKD8ih6Tz5YBNpxiAmEWvaeUXf2nEcAAAAIAgv5gBDcGAAAPABoAZLITGxwREjmwExCwDNAAsAkvsABFWLAMLxuxDBs+WbAARViwBi8bsQYRPlmwAEVYsAMvG7EDDz5ZsgUMAxESObIKDAMREjmwDBCyEwEKK1gh2Bv0WbADELIYAQorWCHYG/RZMDEBFAIjIicRIxEzETYzMhIRJzQmIyIHERYzMjYEN+PCsmvz82qwxePzg3aVQUKWdIMCEvf+0XX9/weg/dd3/tr++gWmunv+IH67AAACAB8AAAWdBbAAEwAXAGsAsABFWLAPLxuxDx8+WbAARViwCC8bsQgPPlmyFAgPERI5sBQvshAUDxESObAQL7AA0LAQELIXBworWCHYG/RZsAPQsAgQsAXQsBQQsgcBCitYIdgb9FmwFxCwCtCwEBCwDdCwDxCwEtAwMQEzFSMRIxEhESMRIzUzETMRIREzASE1IQUef3/8/XX8fHz8Aov8/HkCi/11BK6i+/QCh/15BAyiAQL+/gEC/aK6AAEAjwAAAYIEOgADAB0AsABFWLACLxuxAhs+WbAARViwAC8bsQAPPlkwMSEjETMBgvPzBDoAAAEAjgAABGsEOgAMAF8AsABFWLAELxuxBBs+WbAARViwCC8bsQgbPlmwAEVYsAIvG7ECDz5ZsABFWLALLxuxCw8+WbIGAgQREjmwBi+0HwYvBgJxso8GAV2yAQEKK1gh2Bv0WbIKAQYREjkwMQEjESMRMxEzASEBASEB72/y8lUBUAEs/mEBuf7LAaz+VAQ6/lABsP3z/dMAAQAiAAAENgWwAA0AWwCwAEVYsAwvG7EMHz5ZsABFWLAGLxuxBg8+WbIBDAYREjmwAS+wANCwARCyAgcKK1gh2Bv0WbAD0LAGELIEAQorWCHYG/RZsAMQsAjQsAnQsAAQsAvQsArQMDEBNxUHESEVIREHNTcRMwGh6uoClfxugoL9A2dHk0f99soChyeTJwKWAAABACEAAAIuBgAACwBKALAARViwCi8bsQohPlmwAEVYsAQvG7EEDz5ZsgEEChESObABL7AA0LABELICBworWCHYG/RZsAPQsAbQsAfQsAAQsAnQsAjQMDEBNxUHESMRBzU3ETMBmpSU84aG8wN5NZI1/RkCkC+SLwLeAAEAkP5LBQkFsAATAGeyBhQVERI5ALAARViwAC8bsQAfPlmwAEVYsBAvG7EQHz5ZsABFWLAELxuxBBE+WbAARViwDC8bsQwPPlmwAEVYsA4vG7EODz5ZsAQQsgkBCitYIdgb9FmyDQAMERI5shIOABESOTAxAREUBiMiJzcWMzI1NQERIxEzAREFCb6pRjwOKDp7/YH8/AJ/BbD6GLfGEccMuDEEFfvrBbD77AQUAAEAfv5LBAYETgAaAGGyFRscERI5ALAARViwAy8bsQMbPlmwAEVYsAAvG7EAGz5ZsABFWLAKLxuxChE+WbAARViwGC8bsRgPPlmyARgDERI5sAoQsg8BCitYIdgb9FmwAxCyFQEKK1gh2Bv0WTAxARc2MzIWFxEUBiMiJzcWMzI1ETQmIyIHESMRAVwNc8SwtQG7pkU6Dig7fF1pkUvzBDqWqtbS/Ru0whHGDLAC2XhwZ/zgBDoAAgBk/+wHLQXEABcAIwCRsgEkJRESObABELAa0ACwAEVYsAwvG7EMHz5ZsABFWLAOLxuxDh8+WbAARViwAy8bsQMPPlmwAEVYsAAvG7EADz5ZsA4QshABCitYIdgb9FmyEgAOERI5sBIvshUBCitYIdgb9FmwABCyFwEKK1gh2Bv0WbADELIYAQorWCHYG/RZsAwQsh0BCitYIdgb9FkwMSEhBiMiJAInETQSJDMyFyEVIREhFSERIQUyNxEmIyIGBxEUFgct/J2neaf+95QCkQELqHunA1z9TAJW/aoCu/t9Y2hyW6GvAbIUkwENqgE6rAESlhTM/m7I/kAcDQQ4Ds+8/srB0QAAAwBb/+wG8gRPAB4AKgAyAJuyGTM0ERI5sBkQsCTQsBkQsC7QALAARViwAy8bsQMbPlmwAEVYsAgvG7EIGz5ZsABFWLAXLxuxFw8+WbAARViwGy8bsRsPPlmyBQgXERI5si8XCBESObAvL7QfLy8vAnGyjC8BXbIMBworWCHYG/RZsBcQshABCitYIdgb9FmyGQgXERI5sCLQsAMQsigBCitYIdgb9FmwK9AwMRM0ADMyFzY2FzISFRUhFhYzMjY3FwYGIyInBiMiABEXFBYzMjY1NCYjIgYlIgYHITU0JlsBD+D5hkG3bdbu/VYLkXVZj0dPR81494yG9uP+8vKGeXeGh3h1iAPhVXgUAbVxAif4AS+xVF4B/v3siIueKjKeP0GurgEtAQIJqrq5wKa+urqJeRlvegAAAQCLAAAClQYVAAwAMrIDDQ4REjkAsABFWLAELxuxBCE+WbAARViwAC8bsQAPPlmwBBCyCQEKK1gh2Bv0WTAxMxE0NjMyFwcmIyIVEYvCsD9ZGSoyowSctsMVuQu6+2gAAgBR/+wFHgXEABYAHgBbsgAfIBESObAX0ACwAEVYsA8vG7EPHz5ZsABFWLAALxuxAA8+WbIFDwAREjmwBS+wDxCyCAEKK1gh2Bv0WbAAELIXAQorWCHYG/RZsAUQshoBCitYIdgb9FkwMQUgABE1ISYmIyIHByc3NjMgABEVFAIEJzI2NyEVFBYCuP7c/r0D0AXfzKeXNDEhsNoBOgFrov7lqZa+Ev0vuhQBYAFJieDwNBPGD0j+i/63a8P+w6/U2r0fub8AAf/k/ksC0wYVAB4AcbIUHyAREjkAsABFWLAVLxuxFSE+WbAARViwEC8bsRAbPlmwAEVYsB0vG7EdGz5ZsABFWLAFLxuxBRE+WbAdELIAAQorWCHYG/RZsAUQsgsBCitYIdgb9FmwABCwDtCwD9CwFRCyGgEKK1gh2Bv0WTAxASMRFAYjIic3FhYzMjURIzUzNTQ2MzIXByYjIgcVMwKEybWkSDYPB0QSeKWlwrE9WxkmO50ByQOG/DWwwBG/AwquA8q0YrbDFbwKrWcAAgBY/+wFqgYuABgAJgBbsgQnKBESObAEELAj0ACwAEVYsA0vG7ENHz5ZsABFWLAELxuxBA8+WbIPDQQREjmwDy+yFggKK1gh2Bv0WbANELIcAQorWCHYG/RZsAQQsiMBCitYIdgb9FkwMQEUAgQjIiQCJzU0EiQzMhc2NjUzFAYHFhcHNCYjIgIHFRQSMzISNQUQlP7ttLD+65cBlwETsf+iT0y7eXxXBP24qKS5ArmoqbUCstb+va2tAUDRUtUBRq2oDYOCpNEjp98S9v7+/+tU7P72AQD2AAACAE//7AS7BKgAFwAiAFuyFCMkERI5sBQQsCDQALAARViwBC8bsQQbPlmwAEVYsBQvG7EUDz5ZsgYEFBESObAGL7INCAorWCHYG/RZsBQQshoBCitYIdgb9FmwBBCyIAEKK1gh2Bv0WTAxEzQ2NjMyFzY2NTMUBgcWFxUUBgYjIgARFxQWMjY1NCYjIgZPfeSU4Yo1MKdYZz8Ce+eV4/7s8or2iY15d4wCJ6H9iZUTanKGsyV9nh2g/IoBLgEBCae9wLmnvb0AAAEAff/sBj0GAQAYAFSyDBkaERI5ALAARViwGC8bsRgfPlmwAEVYsBEvG7ERHz5ZsABFWLAMLxuxDA8+WbIBDBgREjmwAS+yCAgKK1gh2Bv0WbAMELIVAQorWCHYG/RZMDEBFTY2NTMUBgcRFAAjIgA1ETMRFBYzIBERBL1tXrW7xf7X9/r+2vyUkAEkBbDcCoKh5NYJ/aXo/vEBC+0DzPwykpoBNAPGAAEAd//sBSgEkwAZAGGyBxobERI5ALAARViwDS8bsQ0bPlmwAEVYsAgvG7EIDz5ZsABFWLAELxuxBA8+WbANELAT0LIVEwgREjmwFS+yAwgKK1gh2Bv0WbIGFQgREjmwCBCyEAEKK1gh2Bv0WTAxARQGBxEjJwYjIiY1ETMRFDMyNxEzFTY2NzcFKI+i5QZrxbC186uxPvNIQQUCBJOypQv8z2p+zsMCvf1Gzn8DCYgHQkxMAAH/tf5LAZMEOgAMAC+yAw0OERI5ALAARViwDC8bsQwbPlmwAEVYsAQvG7EEET5ZsgkBCitYIdgb9FkwMQERBgYjIic3FjMyNREBkwG4p0Y4Dyc6fAQ6+4WywhG/DcAEbAAAAgBZ/+wD+ARPABYAHgBesggfIBESObAIELAX0ACwAEVYsAAvG7EAGz5ZsABFWLAILxuxCA8+WbIMAAgREjmwDC+wABCyEAEKK1gh2Bv0WbAIELIXAQorWCHYG/RZsAwQshoHCitYIdgb9FkwMQEyABUVFAYGJyICNTUhJiYjIgYHJzY2EzI2NyEVFBYCAOQBFHvahtXvAqoLj3dWi05PRtKRVngT/ktxBE/+1PYfmvuNAQEB7YiIoSc1nj5D/GCOdBlvegAAAQCUBOADQwYBAAgARQCwBC+yDwQBXbJQBAFdsnAEAV2wAtCwAi+wAdAZsAEvGLAEELAH0LAHL7QPBx8HAl2yAwcEERI5sAEQsAXQGbAFLxgwMQEVIycHIzUBMwNDw5aVwQEPjwTrC5ycDQEUAAABAHIE4AM0BgEACAAlALAEL7IPBAFdsAHQsAEvtA8BHwECXbIABAEREjmwCNCwCC8wMQE3MxUBIwE1MwHSktD+6Zb+684FZpsK/ukBGAkA//8AhwUSA14FsAAGAHAAAAABAHUEzAL7BeYACwAvALADL7IPAwFdsAbQsAYvtA8GHwYCXbADELIIAgorWCHYG/RZsAYQsAvQsAsvMDEBFAYgJjUzFBYyNjUC+7D+2rC2S4RKBeZ+nJx+QklJQgAAAQCBBN8BhwXVAAkAHbIDCgsREjkAsAgvsg8IAV2yAgUKK1gh2Bv0WTAxEzQ2MhYVFAYiJoFEfkREfkQFWTVHRzU0RkYAAAIAeASNAjMGKgAJABQAKgCwBS+yDwUBXbAT0LATL7IACgorWCHYG/RZsAUQsg0KCitYIdgb9FkwMQEyFhQGIyImNDYHFBYzMjY1NCYiBgFWXYB9YGF9fxFCLi9BP2I/Bip7qnh4qnvQL0FAMC5DQwABACn+UgGhADwADwAisg8QERESOQCwAEVYsAovG7EKET5ZsgUDCitYIdgb9FkwMSEGBhUUMzI3FwYjIiY1NDcBjFdKRywuFUlcX3T0OF4xRBeOLG5btWwAAQB6BNsDVwX1ABUAQACwAy+wCNCwCC+2DwgfCC8IA12wAxCwC9CwCy+wCBCyDwMKK1gh2Bv0WbADELISAworWCHYG/RZsA8QsBXQMDEBFAYjIi4CIyIGFSc0NjMyFjMyNjUDV39gJzlpKxomNZV/XzmhNCY2BelukhE8DDkuCG6WWjkvAAACAEkE0QNWBf8AAwAHAEAAsAIvsg8CAV2wANCwAC+0DwAfAAJdsAIQsAPQGbADLxiwABCwBdCwBS+wAhCwBtCwBi+wAxCwB9AZsAcvGDAxATMBIwMzAyMCaO7+9sWQ6d65Bf/+0gEu/tIAAgCC/moB7P++AAsAFwA9ALAYL7AD0LADL0APAAMQAyADMANAA1ADYAMHXbAP0LAPL7IJCQorWCHYG/RZsAMQshUJCitYIdgb9FkwMRc0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBoJpTklqaklOaWUwIiEtLSEiMO5JY2FLSl5gSCEuLSIkMDAAAAH8jgTR/mYGAAADACMAsAEvsg8BAV2wANAZsAAvGLABELAC0LACL7QPAh8CAl0wMQEjASH+Zsr+8gEVBNEBLwAB/V4E0f82BgAAAwAjALACL7IPAgFdsAHQsAEvtA8BHwECXbACELAD0BmwAy8YMDEBIQEj/iEBFf7rwwYA/tH///xzBNv/UAX1AAcApPv5AAAAAf0+BOb+mQZ/AA4AJQCwAC+wBtCwBi+yAQAGERI5sgcICitYIdgb9FmyDQEAERI5MDEBJzY2NTQjNzIWFRQGBxX9UQdJQZYHqatOSATmkgUcI0h7aFg8TgpFAAAC/AwE5P80Be4AAwAHADcAsAEvsADQGbAALxiwARCwBdCwBS+wBtCwBi+2DwYfBi8GA12wA9CwAy+wABCwBNAZsAQvGDAxASMBIQEjAzP+B9D+1QEGAiLD9foE5AEK/vYBCgAAAf0c/pT+L/+LAAgAEQCwAi+yBgUKK1gh2Bv0WTAxBTQ2MhYUBiIm/RxHhEhIhEfxNUdHakZGAAABAMYE6QHiBkEAAwAXALACL7AA0LAAL7ACELAD0BmwAy8YMDEBMwMjAQPfjJAGQf6oAAMAZwTfA7oGrwADAAwAFQA7ALAUL7AC0LACL7AB0LABL7QPAR8BAl2wAhCwA9AZsAMvGLAUELAL0LALL7IGBQorWCHYG/RZsA/QMDEBMwMjBTQ2MhYUBiImJTQ2MhYUBiImAe7lgpL+qER2Q0N2RAJWQ3ZERHZDBq/+1i8yRERkREQxMkREZERE//8AjgJFAakDUgIGAHgAAAABAJsAAAQ3BbAABQArALAARViwBC8bsQQfPlmwAEVYsAIvG7ECDz5ZsAQQsgABCitYIdgb9FkwMQEhESMRIQQ3/WD8A5wE5PscBbAAAgAZAAAFoAWwAAMABgAvALAARViwAC8bsQAfPlmwAEVYsAIvG7ECDz5ZsgQBCitYIdgb9FmyBgIAERI5MDEBMwEhJSEBAm/zAj76eQFVAuD+mAWw+lDKA7sAAwBb/+wFEwXEAAMAFAAiAHayCCMkERI5sAgQsAHQsAgQsB/QALAARViwEC8bsRAfPlmwAEVYsAgvG7EIDz5ZsgIIEBESOXywAi8YtGACcAICXbQwAkACAl2yAAIBcbIBAQorWCHYG/RZsBAQshgBCitYIdgb9FmwCBCyHwEKK1gh2Bv0WTAxASE1IQUUAgQjIiQCJzU0EiQgBBIXBzQCIyICBxUUEjMyEjUDo/5AAcABcJT+7bOw/u6ZA5YBFAFkAROWAfy3qaS5ArumqbUCecKJ1v69raoBPM1d1QFEr6v+v9UF7wEF/v/rVPD++gEA9gABACAAAAUSBbAABgAxALAARViwAy8bsQMfPlmwAEVYsAEvG7EBDz5ZsABFWLAFLxuxBQ8+WbIAAwEREjkwMQEBIQEzASECmP6X/vEB/vUB//7wBET7vAWw+lAAAAMAbAAABC4FsAADAAcACwBLALAARViwCC8bsQgfPlmwAEVYsAIvG7ECDz5ZsgABCitYIdgb9FmyBQgCERI5sAUvsgYBCitYIdgb9FmwCBCyCgEKK1gh2Bv0WTAxNyEVIRMhFSEDIRUhbAPC/D5kAvb9ClcDmfxnysoDTcYDKcwAAQCbAAAFFAWwAAcAOACwAEVYsAYvG7EGHz5ZsABFWLAALxuxAA8+WbAARViwBC8bsQQPPlmwBhCyAgEKK1gh2Bv0WTAxISMRIREjESEFFPz9f/wEeQTk+xwFsAABAEcAAARNBbAADAA8ALAARViwCC8bsQgfPlmwAEVYsAMvG7EDDz5ZsgEBCitYIdgb9FmwBdCwCBCyCgEKK1gh2Bv0WbAH0DAxAQEhFSE1AQE1IRUhAQMc/nUCvPv6Acn+NwPi/WsBiALQ/frKlwJCAj+YzP3/AAADAEoAAAWuBbAAFQAcACMAbLILJCUREjmwCxCwGdCwCxCwINAAsABFWLAULxuxFB8+WbAARViwCi8bsQoPPlmyExQKERI5sBMvsADQsgkKFBESObAJL7AM0LAJELIhAQorWCHYG/RZsBnQsBMQshoBCitYIdgb9FmwINAwMQEWBBYVFAYHBgcVIzUmJCYQNiQ3NTMBFBYXEQYGBTQmJxE2NgN8oQEDjoh8han9ov78j44BA6T9/caqk5anA3SmlJGpBP8Dj/6emvZITQOpqQGM+gE+/48Dsf0foLACAq4Et5+gtgT9UgKzAAABAEQAAAVcBbAAFwBcsgAYGRESOQCwAEVYsBEvG7ERHz5ZsABFWLAWLxuxFh8+WbAARViwBC8bsQQfPlmwAEVYsAsvG7ELDz5ZshULFhESObAVL7AA0LAVELIMAQorWCHYG/RZsAnQMDEBNjY1ETMRBgAHESMRJgAnETMRFhYXETMDTIOQ/QP+6fb88P7oBPwBj4D8AkMXvqcB8f4G9v7PGf6KAXUXATD1Af/+C53CGANsAAABAGsAAATdBcMAJQBcsgcmJxESOQCwAEVYsBovG7EaHz5ZsABFWLAPLxuxDw8+WbAARViwJC8bsSQPPlmwDxCyEQEKK1gh2Bv0WbAO0LAA0LAaELIHAQorWCHYG/RZsBEQsCLQsCPQMDElNhI3NTQmIyIGFRUUEhcVITUzJgI1NTQSJDMyBBIVFRQCBzMVIQLfdHsBnZCOm393/gfYa3iOAQWkpQEGkHdr1P4QzyABEOdtytrZzWTr/usez8tnAR+eYrYBHZ+e/uK1ZZf+3GfLAAACAFb/6wR5BE4AFgAhAHmyHyIjERI5sB8QsBPQALAARViwEy8bsRMbPlmwAEVYsAAvG7EAGz5ZsABFWLAMLxuxDA8+WbAARViwCC8bsQgPPlmyAwEKK1gh2Bv0WbIKEwwREjmyFRMMERI5sAwQshoBCitYIdgb9FmwExCyHwEKK1gh2Bv0WTAxAREWMzI3FwYjIicGIyICNTUQEjMyFzcBFBYzMjcRJiMiBgP9A0YRChgzTKI1ZsHD4+TEtWcT/hx6doxGRopzfwQ6/Pp7BLQeo6IBHfgNAQoBNpeD/b+erYgBx47FAAIAlv53BGoFxAAUACgAZbInKSoREjmwJxCwANAAsA8vsABFWLAALxuxAB8+WbAARViwDC8bsQwPPlmyJwAMERI5sCcvsiQBCitYIdgb9FmyBiQnERI5sAAQshgBCitYIdgb9FmwDBCyHgEKK1gh2Bv0WTAxATIWFRQGBxYWFRQGIyInESMRNDY2ATQmIyIGFREWMzI2NTQmJyM1MzICac/yY1h5gvLRpXryfNkBTHFdYIFYnXGJemd7SNQFxNiyX5swLL2CzexT/jgFqXPBcP5tWnZ+aPzlUolubZEBuQAAAQAg/l8D9QQ6AAgAOLIACQoREjkAsABFWLABLxuxARs+WbAARViwBy8bsQcbPlmwAEVYsAQvG7EEET5ZsgAHBBESOTAxARMzAREjEQEzAg7s+/6P8/6P+wE7Av/78P41AdAECwAAAgBU/+wEOAYgAB8AKwBishYsLRESObAWELAj0ACwAEVYsAMvG7EDIT5ZsABFWLAWLxuxFg8+WbADELIJAQorWCHYG/RZsg4WAxESObAOL7IpAQorWCHYG/RZsh0pDhESObAWELIjAQorWCHYG/RZMDETNDYzMhYXFSYjIgYVFBcWEhcVFAYGIyIAETQ2NycmJhMUFjMyNjU0JiciBtDUt0lxT5dpTlq84N4CeuGV4v7uuIkCW2h2iXl3h5FteYkE6pGlFhvDNT00XUJP/urMHJv2hwEjAQOl/yIFKIn9faK8vLZ4yxe+AAEAYP/sBAwETQAnAIuyFigpERI5ALAARViwCS8bsQkbPlmwAEVYsCUvG7ElDz5ZshcJJRESOXywFy8YtEAXUBcCXbTQF+AXAl2yGAcKK1gh2Bv0WbIDGBcREjmwCRCyEAEKK1gh2Bv0WbINFxAREjmyHA0BXbILDQFdsCUQsh4BCitYIdgb9FmyIR4YERI5tAQhFCECXTAxEzQ2NyYmNTQ2MzIWFSM0JiMiBhUUFjMzFSMGFRQWMzI2NTMUBCMiJGBpYldh+NK///J6WV5yYGnH0dJ9ZmKC8v78y9X++AEyXH8gJHlIlqW1kTxPTT88S60Dkz9XWUKburIAAAEAYf5+A8oFsAAeAEqyCB8gERI5ALAPL7AARViwAC8bsQAfPlmwAEVYsBUvG7EVDz5ZsAAQshwBCitYIdgb9FmyARwAERI5sBUQsggBCitYIdgb9FkwMQEVAQYGFRQWFxcWFhUUBgcnNjU2JycmJyY1EAE3ITUDyv5gVkY9S91hT3pSfV0CbmjESjkBJdz9xAWwkf4KbbprVFoYQh9iUUe6PmVnRj0hGzJpUIsBIAFR/cMAAAEAfv5hBAYETgARAFOyDBITERI5ALAARViwAy8bsQMbPlmwAEVYsAAvG7EAGz5ZsABFWLAHLxuxBxE+WbAARViwDy8bsQ8PPlmyAQMPERI5sAMQsgwBCitYIdgb9FkwMQEXNjMyFhcRIxE0JiMiBxEjEQFcDHfBtq0D815olkbzBDqDl8TF+5wEU25pevzvBDoAAwBz/+wELAXEAA0AFgAeAHmyAx8gERI5sAMQsBPQsAMQsBvQALAARViwCi8bsQofPlmwAEVYsAMvG7EDDz5Zsg4DChESOXywDi8YtGAOcA4CXbQwDkAOAl2yAA4BcbAKELITAQorWCHYG/RZsA4QshgBCitYIdgb9FmwAxCyGwEKK1gh2Bv0WTAxARACIyICAzUQEjMyEhMFITU0JiMiBhUFIRUUFjI2NwQs+OPf+gX25uL2Bf06AdR6cW96AdT+LHvgdwICcv7E/rYBQQEt6QE1AUz+xP7TIzDOy8vO7yrQ0crKAAABAKn/9AJhBDoADAAoALAARViwAC8bsQAbPlmwAEVYsAkvG7EJDz5ZsgQBCitYIdgb9FkwMQERFBYzMjcVBiMgEREBnDI+KitKVv7oBDr89j02CrwXATUDEQABABb/7gRKBfsAGQBQsgMaGxESOQCwAC+wAEVYsAsvG7ELDz5ZsABFWLAQLxuxEA8+WbALELIHAQorWCHYG/RZsg8ACxESObAPELAS0LAAELIVAQorWCHYG/RZMDEBMhYXARYXFzcXBiMiJicDAyEBJyYnIwcnNgESbHgfAaskMSARBCo0bXUryvb+9wGBWyJJIhsDOwX7VVD7v1YHAQHAClhvAhT9NwQP2ksDArYQAAEAZP52A9QFxAAsAFayAy0uERI5ALAWL7AARViwKi8bsSofPlmyAgEKK1gh2Bv0WbIILSoREjmwCC+yCQEKK1gh2Bv0WbIdLSoREjmwHRCyDgEKK1gh2Bv0WbIkCQgREjkwMQEmIyIGFRQhMxUjIBEUFgQWFxYVBgYHJzY2NTQmJCcmJjU0NjcmJjU0JDMyFwODild6iAEciYz+noEBGW8jUQJ7UIM1Lj/+/Ux/dqOQbnwBAuOZfQTaJFZLuMb+42KIQiUYOG1IuztkOVApIy1EIDW3lJHELSiOYabFLAAAAQAt//QEzwQ6ABQAXLILFRYREjkAsABFWLATLxuxExs+WbAARViwCi8bsQoPPlmwAEVYsA8vG7EPDz5ZsBMQsgAHCitYIdgb9FmwChCyBQEKK1gh2Bv0WbAAELAN0LAO0LAR0LAS0DAxASMRFBYzMjcVBiMgEREhESMRIzUhBKmfMT8mL0pW/uj+tPOrBHwDfP22PjcKvBcBNQJT/IQDfL4AAgCA/mAEMQROAA4AGgBXshEbHBESObARELAA0ACwAEVYsAAvG7EAGz5ZsABFWLAKLxuxChE+WbAARViwBy8bsQcPPlmyCQAHERI5shEBCitYIdgb9FmwABCyFwEKK1gh2Bv0WTAxATISERUUAiMiJxEjETQAAxYzMjY1NCYjIgYVAlbg++DBs2rzAQMQQ5V2fXxyZncETv7L/u8P8v7ld/39A9vyASH81XWts7jFwaAAAAEAUv6KA+kETgAiAE2yGyMkERI5ALAARViwAC8bsQAbPlmwAEVYsBQvG7EUFz5ZsAAQsATQsAAQsgcBCitYIdgb9FmyHCMAERI5sBwQsg0BCitYIdgb9FkwMQEyFhUjNCYjIgYVFRQWBBYWFxQGByc2NjU0JicmJic1NDY2AjjE7eRtYHGDlAEuYDEBf0x/Myo8Qe7tAXjcBE7du2F0vKoag5tWOVNCSL84ZTdOLCgqDzf+0Sed+okAAAIAUv/sBH4EOgAPABsATLIHHB0REjmwBxCwE9AAsABFWLAOLxuxDhs+WbAARViwBy8bsQcPPlmwDhCyAAEKK1gh2Bv0WbAHELITAQorWCHYG/RZsAAQsBnQMDEBIRYVFAYGIyIAETU0ADchARQWMzI2NTQmIyIGBH7+9bp63pHi/vABDN8CQfzHhXp1gYN1docDdpL7juyDASwBAwzuASMC/dipu7y9nLOwAAABAD//7APsBDoAEABJsgEREhESOQCwAEVYsA8vG7EPGz5ZsABFWLAKLxuxCg8+WbAPELIAAQorWCHYG/RZsAoQsgUBCitYIdgb9FmwABCwDdCwDtAwMQEhERQWMzI3FwYjIAMRITUhA+z+mCszJzcmUGz+7AX+rgOtA3n9sDs7FrEsATkCVMEAAQCA/+sECAQ6ABIAOLIOExQREjkAsABFWLAALxuxABs+WbAARViwDi8bsQ4PPlmyAwEKK1gh2Bv0WbAAELAI0LAILzAxAREQMzI2NSYDMxYREAAjIiYnEQFyoXGRA27xc/7858vRAQQ6/Xb+/emg5wEd5v7i/vT+weLYApUAAgBE/iIFhQRBABoAIwBfshAkJRESObAQELAb0ACwGS+wAEVYsBEvG7ERGz5ZsABFWLAGLxuxBhs+WbAARViwAC8bsQAPPlmyDQEKK1gh2Bv0WbAAELAY0LANELAb0LARELIhAQorWCHYG/RZMDEFJAA1NBI3FwYGBxQWFxE0NjMyFhYVFAAFESMTNjY1JiYjIhUCZf78/uN+c5hITAKalJ58k+yH/t7+9fPzlaUCjXQ3DhwBN/+kAQVTkka8aKHNHgKAd5KN+5Lz/tca/jEClBnBl5e/PgAAAQBP/iIFfgQ6ABgARLIAGRoREjkAsA0vsABFWLAULxuxFBs+WbAARViwDy8bsQ8PPlmyFwEKK1gh2Bv0WbAB0LAUELAY0LAG0LAPELAM0DAxARE2NjUmAzMWERAABREjESQAAxEzERAFEQNSk6cFcO55/uH+8/P+/P71AfMBHQQ6/H0bzqTiARTj/u3+/P7KGv4yAdAeATMBCgHt/hj+ojwDggABAGb/7AYtBDoAIABWshohIhESOQCwAEVYsAAvG7EAGz5ZsABFWLAYLxuxGA8+WbAARViwHC8bsRwPPlmyBQEKK1gh2Bv0WbIJABwREjmwDtCwABCwE9CwEy+yGgUYERI5MDEBAgcUFjMyNjURMxEWFjMyNjUmAzMWEAIjIicGIyICEDcB5YYHYVhbYPsCX1pYYQeF8Y3Vy+hcXObL1o0EOv7p7b3LnZQBRv6vjpjLve8BFej9yP7S3t4BLgI46AACAHb/7ASYBcQAIAApAGuyDyorERI5sA8QsCHQALAARViwGi8bsRofPlmwAEVYsAYvG7EGDz5ZsiQaBhESObAkL7ITAQorWCHYG/RZsALQsgsaBhESObAGELIPAQorWCHYG/RZsCQQsB7QsBoQsicBCitYIdgb9FkwMQEGBxUUBiMiADURNxEUFjMyNjU1JgAnNTQ2MzIWFRE2NwEUFhcRJiMiBgSYOkT61dP+/uyCbmJt0f8AA8Wlp7xLKv2qfWsEbTRDAlcUC3Xa/QEF1AEdAv7efY+Gg3wmARPAG6nM0Lv+zgwLASNsoiABRZpJAAAB/+EAAASeBcMAGgBCsgAbHBESOQCwAEVYsAQvG7EEHz5ZsABFWLANLxuxDQ8+WbIABA0REjmwBBCyCQEKK1gh2Bv0WbAS0LAEELAX0DAxARM2NjMyFwcmIyIHAREjEQEmIyIHJzYzMhYXAj/SK3pgRkImDShBH/7Z/P7bIUArCiQ8Smd9LAMHAfhkYBrCBUX9a/3uAhACl0UFwRtkbAAAAgAz/+wGVAQ6ABIAJgBwsggnKBESObAIELAe0ACwAEVYsBEvG7ERGz5ZsABFWLAGLxuxBg8+WbAARViwCi8bsQoPPlmwERCyAAEKK1gh2Bv0WbIIEQYREjmwD9CwENCwFdCwFtCwChCyGwEKK1gh2Bv0WbIfEAoREjmwJNAwMQEjFhUQAiMiJwYjIgIRNDcjNSEBJichBgcUFjMyNjc1MxUWFjMyNgZUgDfKvO5cXO69yDZvBiH+xQQ9/MY8BFNLXGYB+gJjXUtTA4Oer/7i/tTi4gEuARyxnLf9/KCtsZy+ypeV6O6Pl8oAAQAi//IFvAWwABgAbrIRGRoREjkAsABFWLAXLxuxFx8+WbAARViwCS8bsQkPPlmwAEVYsBMvG7ETDz5ZsBcQsgABCitYIdgb9FmyBBcJERI5sAQvsAkQsgoBCitYIdgb9FmwBBCyEAEKK1gh2Bv0WbAAELAV0LAW0DAxASERNjMyBBAEIycyNjUmJiMiBxEjESE1IQSQ/hOUcvsBGP7u/gGJjAGPj4Z4/f58BG4E5P50JvD+UOy/eYR3hyD9dATkzAABAGj/7ATvBcQAHwBxsgMgIRESOQCwAEVYsAwvG7EMHz5ZsABFWLADLxuxAw8+WbAMELITAQorWCHYG/RZshcMAxESOXywFy8YtDAXQBcCXbRgF3AXAl200BfgFwJdsgAXAXGyGAEKK1gh2Bv0WbADELIcAQorWCHYG/RZMDEBBgAjIiQCJzU0EiQzMgAXIyYmIyIGByEVIRYWMzI2NwTuFv7U+K/+9ZEBkgERtPMBJRj8EpSOobAIAfv+BAernZOWFAHZ6P77pQE2z3vPATqq/vbsnI7l0srd5YedAAACAC0AAAhBBbAAGQAiAHSyCSMkERI5sAkQsBrQALAARViwGC8bsRgfPlmwAEVYsAgvG7EIDz5ZsABFWLAQLxuxEA8+WbIAGAgREjmwAC+wGBCyCgEKK1gh2Bv0WbAQELISAQorWCHYG/RZsAAQshoBCitYIdgb9FmwEhCwG9CwHNAwMQEhHgIVFAQHIREhAwICBiMjNTc+AjcTIRERITI2NTQmJwUNATGZ63/+6+X9yv5CGg9jvJ5AKFdfMQocA6sBKX6Rj3oDoQF11IfO/QUE5P3N/vj+3YbKAwhq19ECyf0m/fSTdXOPAgACAJsAAAhHBbAAEwAcAIeyAR0eERI5sAEQsBTQALAARViwAi8bsQIfPlmwAEVYsBMvG7ETHz5ZsABFWLAQLxuxEA8+WbAARViwDS8bsQ0PPlmyABATERI5sAAvsp8AAV2yBA0CERI5sAQvsAAQsg8BCitYIdgb9FmwBBCyFAEKK1gh2Bv0WbANELIVAQorWCHYG/RZMDEBIREzESEyFhYVFAQjIREhESMRMwERITI2NTQmIwGXAoD8ASuc7n/+4/P94P2A/PwDfAEpfpKUfANFAmv90m7Lhc33Anr9hgWw/Qj+GIZwb4MAAQAxAAAFyAWwABUAVgCwAEVYsBQvG7EUHz5ZsABFWLAILxuxCA8+WbAARViwEC8bsRAPPlmwFBCyAAEKK1gh2Bv0WbIEEBQREjmwBC+yDQEKK1gh2Bv0WbAAELAS0LAT0DAxASERNjMgBBURIxE0JiMiBxEjESE1IQSS/hGDjwEMAQf8fZqMhvz+igRhBOT+mxvs5f43AcqLehz9TQTkzAAAAQCS/pgFDQWwAAsASACwCS+wAEVYsAAvG7EAHz5ZsABFWLAELxuxBB8+WbAARViwBi8bsQYPPlmwAEVYsAovG7EKDz5ZsgIBCitYIdgb9FmwA9AwMRMzESERMxEhESMRIZL9AoH9/kv9/jcFsPsaBOb6UP6YAWgAAgCQAAAEwQWwAA0AFgBbshAXGBESObAQELAD0ACwAEVYsAwvG7EMHz5ZsABFWLAKLxuxCg8+WbAMELIAAQorWCHYG/RZsgIMChESObACL7IOAQorWCHYG/RZsAoQsg8BCitYIdgb9FkwMQEhESEyFhYVFAQHIREhAREhMjY1NCYnBCz9YQEqoO58/uvv/dMDnP1hASmAj4x8BOT+n27Khcz4AgWw/Qj+EotzboACAAACACT+mgXcBbAADgAUAGWyEhUWERI5sBIQsAvQALAARViwCy8bsQsfPlmwAEVYsAQvG7EEFz5ZsABFWLACLxuxAg8+WbAEELAB0LACELIGAQorWCHYG/RZsA3QsA7QsA/QsBDQsAsQshEBCitYIdgb9FkwMQEjESERIwMzNhI3EyERMyEhESEDAgXP8PxB9Ah1V2gPJgOWufvbAnD+Vxgb/poBZv6aAjBUAUHLAob7GgQa/mb+ZQAAAQAWAAAHmwWwABUAfQCwAEVYsAkvG7EJHz5ZsABFWLANLxuxDR8+WbAARViwES8bsREfPlmwAEVYsAIvG7ECDz5ZsABFWLAGLxuxBg8+WbAARViwFC8bsRQPPlmyEAkCERI5sBAvsgABCitYIdgb9FmwBNCyCBAAERI5sBAQsAvQshMAEBESOTAxASMRIxEjASEBASEBMxEzETMBIQEBIQT/o/yq/pv+xQHV/koBMgFcnfyWAVkBMf5OAdH+xgJ0/YwCdP2MAwcCqf2gAmD9oAJg/Vn89wAAAQBJ/+0EfwXDACkAhrIlKisREjkAsABFWLALLxuxCx8+WbAARViwFy8bsRcPPlmwCxCyAwEKK1gh2Bv0WbIoCxcREjl8sCgvGLIQKAFdtDAoQCgCXbRgKHAoAl20oCiwKAJdsgYoAxESObIlAQorWCHYG/RZshElKBESObAXELIfAQorWCHYG/RZshwlHxESOTAxATQmIyIGFSM0NjYzMgQVFAYHFhYVFAQjIiYmNTMUFjMyNjU0JiMjNTMgA2yUf22S/ITqjfoBFXhseoH+1Pqa+X38nHiGo4+Kq6IBDAQjYnRzW3e6Z9rEY6YwKqt/xOduvntegX5le2/IAAABAJQAAAUNBbAACQBFALAARViwAC8bsQAfPlmwAEVYsAcvG7EHHz5ZsABFWLACLxuxAg8+WbAARViwBS8bsQUPPlmyBAACERI5sgkAAhESOTAxATMRIxEBIxEzEQQQ/f39gf39BbD6UAQN+/MFsPvyAAABAC0AAAUNBbAAEQBNsgQSExESOQCwAEVYsAAvG7EAHz5ZsABFWLABLxuxAQ8+WbAARViwCS8bsQkPPlmwABCyAwEKK1gh2Bv0WbAJELILAQorWCHYG/RZMDEBESMRIQMCAgYjIzU3PgI3EwUN/P5CGg9jvJ5AKFdfMQocBbD6UATk/c3++P7dhsoDCGrX0QLJAAEAOf/rBN0FsAAPAEmyABARERI5ALAARViwDy8bsQ8fPlmwAEVYsAYvG7EGDz5ZsgAPBhESObAPELAB0LABL7AGELIKAQorWCHYG/RZsg0GDxESOTAxAQEhAQcGIyc3FjMyNzcBIQKgASQBGf4FLmTgaAIYPWwsNP4OARQCtwL5+0hbsgbIBFx7BCQAAwBP/8QGGAXsABYAHwAoAFWyCikqERI5sAoQsB7QsAoQsCDQALAKL7AVL7IUFQoREjmwFC+wANCyCwoVERI5sAsvsAjQsiEBCitYIdgb9FmwHtCwFBCyHwEKK1gh2Bv0WbAg0DAxATIEEhUUAgQjFSM1IyYkAjU0EiQzNTMBIgYVFBYXMxEzETMyNjU0JiMDrrsBFpmZ/uu88xep/uyYmgEUvvP++6rBu6sX8xGrv7+tBSaY/vCsqv7xl76+AZYBDaqtARKXxv5vz7y0zQIDDvzyz7a50AAAAQCS/qEFvQWwAAsAOwCwCS+wAEVYsAAvG7EAHz5ZsABFWLAELxuxBB8+WbAARViwCi8bsQoPPlmyAgEKK1gh2Bv0WbAG0DAxEzMRIREzETMDIxEhkv0Cgf2wFOj70QWw+xoE5vsc/dUBXwAAAQCOAAAE7gWwABEAPwCwAEVYsAAvG7EAHz5ZsABFWLAJLxuxCR8+WbAARViwAS8bsQEPPlmyDgEJERI5sA4vsgUBCitYIdgb9FkwMQERIxEGIyAkJxEzERYWMzI3EQTu/KKw/vv+9AH8AX6XrqQFsPpQAj0p5ugBzv4wi3YqAqcAAAEAmAAABwMFsAALAEgAsABFWLAALxuxAB8+WbAARViwAy8bsQMfPlmwAEVYsAcvG7EHHz5ZsABFWLAJLxuxCQ8+WbIBAQorWCHYG/RZsAXQsAbQMDEBESERMxEhETMRIREBlgG8/AG5/PmVBbD7GgTm+xoE5vpQBbAAAQCY/qIHrQWwAA8AVACwCy+wAEVYsAAvG7EAHz5ZsABFWLADLxuxAx8+WbAARViwBy8bsQcfPlmwAEVYsA0vG7ENDz5ZsgEBCitYIdgb9FmwBdCwBtCwCdCwCtCwAtAwMQERIREzESERMxEzAyMRIREBlgG8/AG5/KoU3vndBbD7GgTm+xoE5vsS/eABXgWwAAACABgAAAXUBbAADQAWAF6yARcYERI5sAEQsA7QALAARViwAC8bsQAfPlmwAEVYsAovG7EKDz5ZsgIAChESObACL7AAELIMAQorWCHYG/RZsAIQsg4BCitYIdgb9FmwChCyDwEKK1gh2Bv0WTAxEyERITIWFhUUBAchESEBESEyNjU0JicYAocBKqDuff7p7v3U/nUChwEpgI+MfAWw/dNuyYbN9wIE7f3L/hKLc26AAgAAAwCbAAAGWAWwAAsADwAYAG2yAhkaERI5sAIQsA3QsAIQsBfQALAARViwCy8bsQsfPlmwAEVYsA4vG7EOHz5ZsABFWLAILxuxCA8+WbAARViwDC8bsQwPPlmyAAgLERI5sAAvshABCitYIdgb9FmwCBCyEQEKK1gh2Bv0WTAxASEyFhYVFAQHIREzASMRMwERITI2NTQmJwGYASqg7nz+6+/90/0EwPz8+0ABKYCPjHwDg27Khcz4AgWw+lAFsP0I/hKLc26AAgACAJAAAATBBbAACwAUAE2yDhUWERI5sA4QsAHQALAARViwCy8bsQsfPlmwAEVYsAkvG7EJDz5ZsgAJCxESObAAL7IMAQorWCHYG/RZsAkQsg0BCitYIdgb9FkwMQEhMhYWFRQEByERMxERITI2NTQmJwGNASqg7nz+6+/90/0BKYCPjHwDg27Khcz4AgWw/Qj+EotzboACAAEAa//sBPEFxAAfAH+yAyAhERI5ALAARViwEy8bsRMfPlmwAEVYsBwvG7EcDz5ZsgkTHBESOXywCS8YtGAJcAkCXbTQCeAJAl20MAlACQJdsgAJAXGyBgEKK1gh2Bv0WbAcELIDAQorWCHYG/RZsgAGAxESObATELIMAQorWCHYG/RZsg8JDBESOTAxARYWMzI2NyE1ISYmIyIGByM2ADMyBBIXFRQCBCMiACcBaBSXk5yrBv3+AgIIsaCMlRL8GAEl8rMBEJMBj/70sPj+1BYB2Z6G5NfM2OSMnu4BCKj+yM17z/7HqAEF6AAAAgCg/+wHBwXEABcAJQB+shImJxESObASELAd0ACwAEVYsBMvG7ETHz5ZsABFWLANLxuxDR8+WbAARViwBC8bsQQPPlmwAEVYsAovG7EKDz5Zsg4KDRESOXywDi8YtGAOcA4CXbIIAQorWCHYG/RZsBMQshsBCitYIdgb9FmwBBCyIgEKK1gh2Bv0WTAxARQCBCMiJAInIxEjETMRMzYSJDMyBBIXBzQCIyICBxUUEjMyEjUHB5T+7bOn/vieDrb8/LMGmgEPrbIBE5YB/beopLkCu6aotQKy1v69rZgBHL39owWw/XHJATWlq/6/1QXyAQL+/+tU8P76AQD2AAACACAAAARfBbAADAAVAGGyEBYXERI5sBAQsArQALAARViwCi8bsQofPlmwAEVYsAAvG7EADz5ZsABFWLADLxuxAw8+WbIRCgAREjmwES+yAQEKK1gh2Bv0WbIFAREREjmwChCyEgEKK1gh2Bv0WTAxIREhASEBJhE0JDchEQEUFjMzESMiBgNi/ub+5/7xAUX+ARP2Ae/9BIqK6+uMiAIg/eACa3gBEdHpAvpQA+l7igIAhgACAFv/6wQ8BhMAGgAmAFSyDicoERI5sA4QsBvQALAARViwES8bsREhPlmwAEVYsAcvG7EHDz5ZsgARBxESObAAL7IZAAcREjmyGwEKK1gh2Bv0WbAHELIhAQorWCHYG/RZMDEBMhIVFRQAIyIAETUQEjc2NjUzFAYGBwYGBzYXIgYVFBYzMjY1NCYCesz2/vXl3/7u+PaKUcRCiKaYnxuRk3aGhHp5hYUD/v7v6gzq/t4BKAEARgFeAZgzHD82ZX5PIyCkkZXDn6Wcrq+wjKMAAwCPAAAEOgQ6AA4AFQAcAHiyAh0eERI5sAIQsBXQsAIQsBfQALAARViwAS8bsQEbPlmwAEVYsAAvG7EADz5ZshYBABESOXywFi8YtEAWUBYCXbTQFuAWAl2yDwcKK1gh2Bv0WbIIDxYREjmwABCyEAEKK1gh2Bv0WbABELIbAQorWCHYG/RZMDEzESEyFhUUBgcWFhUUBiMBESEyNTQjJTMyNTQnI48Bt97oXVtqfN/R/vgBCru+/vnIz8TTBDqbkUt3IBaGW5eeAc3+84aHrnqABAABAIUAAANNBDoABQArALAARViwBC8bsQQbPlmwAEVYsAIvG7ECDz5ZsAQQsgABCitYIdgb9FkwMQEhESMRIQNN/iryAsgDdvyKBDoAAgAn/r4ExQQ6AA4AFABbshIVFhESObASELAE0ACwDC+wAEVYsAQvG7EEGz5ZsABFWLAKLxuxCg8+WbIAAQorWCHYG/RZsAbQsAfQsAwQsAnQsAcQsA/QsBDQsAQQshEBCitYIdgb9FkwMTc2NjcTIREzESMRIREjEyEhESEHAoFlRQcOAu+W8v1K9gEBdgGf/u8HDsJxy54BnvyI/fwBQv6+AgQCp8/+1gABAB4AAAZcBDoAFQCCALAARViwCS8bsQkbPlmwAEVYsA0vG7ENGz5ZsABFWLARLxuxERs+WbAARViwAi8bsQIPPlmwAEVYsAYvG7EGDz5ZsABFWLAULxuxFA8+WbIQEQIREjmwEC+yjxABXbIAAQorWCHYG/RZsATQsggQABESObAQELAL0LITABAREjkwMQEjESMRIwMhAQEhEzMRMxEzEyEBASEENYHzgPn+1gFn/qwBKfVy83P2ASn+rQFp/tIBs/5NAbP+TQIzAgf+VwGp/lcBqf38/coAAAEATf/sA8QETQAnAI2yHigpERI5ALAARViwJS8bsSUbPlmwAEVYsAgvG7EIDz5ZshklCBESOXywGS8YtEAZUBkCXbTQGeAZAl2yFgcKK1gh2Bv0WbIDFhkREjmwCBCyEAcKK1gh2Bv0WbINFhAREjm0Aw0TDQJdsCUQsh4HCitYIdgb9FmyIRkeERI5QAkLIRshKyE7IQRdMDEBFAYHFhUUBiMiJiY1MxQWMzI2NTQmIyM1MzY1NCYjIgYVIzQ2MzIWA7BXT7ryy3zMcvJ2WllpXGCutKNeUlBu8vC5yeADEkh5JEG6lbFTmWlCWVNDT0avAoRCSk88j7ekAAEAhgAABBIEOgAJAEUAsABFWLAALxuxABs+WbAARViwBy8bsQcbPlmwAEVYsAIvG7ECDz5ZsABFWLAFLxuxBQ8+WbIEBwIREjmyCQcCERI5MDEBMxEjEQEjETMRAyDy8v5Y8vIEOvvGAtL9LgQ6/S4AAAEAjwAABGUEOgAMAGgAsABFWLAELxuxBBs+WbAARViwCC8bsQgbPlmwAEVYsAIvG7ECDz5ZsABFWLALLxuxCw8+WbIGAgQREjl8sAYvGLTTBuMGAl20QwZTBgJdshMGAXGyAQEKK1gh2Bv0WbIKAQYREjkwMQEjESMRMxEzASEBASEB/Xvz82sBKwEs/nkBqP7EAaz+VAQ6/lABsP36/cwAAAEAIQAABBQEOgAPAE2yBBARERI5ALAARViwAC8bsQAbPlmwAEVYsAEvG7EBDz5ZsABFWLAILxuxCA8+WbAAELIDAQorWCHYG/RZsAgQsgoBCitYIdgb9FkwMQERIxEhAwIGIyMnNzY2NxMEFPP+zhQTq7BLATJQSQoUBDr7xgN2/of+8O3KBQut5QHOAAABAI8AAAVvBDoADABZALAARViwAS8bsQEbPlmwAEVYsAsvG7ELGz5ZsABFWLADLxuxAw8+WbAARViwBi8bsQYPPlmwAEVYsAkvG7EJDz5ZsgALAxESObIFCwMREjmyCAsDERI5MDEBASERIxEBIwERIxEhAv8BQAEw8/7Wpf7V8wEyASsDD/vGAsz9NALQ/TAEOgAAAQCGAAAEEQQ6AAsAfgCwAEVYsAYvG7EGGz5ZsABFWLAKLxuxChs+WbAARViwAC8bsQAPPlmwAEVYsAQvG7EEDz5ZsgkKABESObAJL7S/Cc8JAl2yvwkBcbQvCT8JAnKyXwkBcrTvCf8JAnG0HwkvCQJxso8JAV20jwmfCQJysgIBCitYIdgb9FkwMSEjESERIxEzESERMwQR8/5b8/MBpfMBtf5LBDr+PQHDAAEAhgAABBIEOgAHADgAsABFWLAGLxuxBhs+WbAARViwAC8bsQAPPlmwAEVYsAQvG7EEDz5ZsAYQsgIBCitYIdgb9FkwMSEjESERIxEhBBLz/lrzA4wDdvyKBDoAAQAjAAAD0AQ6AAcAMQCwAEVYsAYvG7EGGz5ZsABFWLACLxuxAg8+WbAGELIAAQorWCHYG/RZsATQsAXQMDEBIREjESE1IQPQ/qHz/qUDrQN5/IcDecEAAAMAVP5gBX8GAAAaACQALwB/sgcwMRESObAHELAg0LAHELAq0ACwBi+wAEVYsAMvG7EDGz5ZsABFWLAKLxuxChs+WbAARViwEy8bsRMRPlmwAEVYsBAvG7EQDz5ZsABFWLAXLxuxFw8+WbAKELIeAQorWCHYG/RZsBAQsiMBCitYIdgb9FmwKNCwHhCwLdAwMRMQEjMyFxEzETYzMhIRFAIjIicRIxEGIyICJyU0JiMiBxEWMzIBFBYzMjcRJiMiBlTRu0w+8kBWutPUt1NF8j1Pr9EJBDd0ai0lITPc/Lpsai0hIipocAIOAQkBNxwBzv4uIP7L/uDz/uYe/lYBphoBA+M8tscN/ToKAUuiqQoCyQrBAAEAhv6/BKUEOgALADsAsAgvsABFWLAALxuxABs+WbAARViwBC8bsQQbPlmwAEVYsAovG7EKDz5ZsgIBCitYIdgb9FmwBtAwMRMzESERMxEzAyMRIYbzAabzkxTd/NIEOvyIA3j8iP39AUEAAAEAXwAAA+AEOwARAEiyBBITERI5ALAARViwCS8bsQkbPlmwAEVYsBAvG7EQGz5ZsABFWLABLxuxAQ8+WbINAQkREjl8sA0vGLIEAQorWCHYG/RZMDEhIxEGIyImNREzERQWMzI3ETMD4PNeaN7q82lsYmTzAWkW1ccBTP60dmIXAgwAAAEAhgAABgMEOgALAEgAsABFWLAALxuxABs+WbAARViwAy8bsQMbPlmwAEVYsAcvG7EHGz5ZsABFWLAJLxuxCQ8+WbIBAQorWCHYG/RZsAXQsAbQMDEBESERMxEhETMRIREBeQFS8wFT8vqDBDr8iAN4/IgDePvGBDoAAQB+/r8GtAQ6AA8ASwCwDC+wAEVYsAAvG7EAGz5ZsABFWLADLxuxAxs+WbAARViwBy8bsQcbPlmwAEVYsA0vG7ENDz5ZsgEBCitYIdgb9FmwBdCwCdAwMQERIREzESERMxEzAyMRIREBcQFS8wFT8rkU3fq7BDr8iAN4/IgDePyI/f0BQQQ6AAIAHwAABOoEOgANABUAW7IAFhcREjmwDtAAsABFWLAMLxuxDBs+WbAARViwCC8bsQgPPlmyAAwIERI5sAAvsAwQsgoBCitYIdgb9FmwABCyDgEKK1gh2Bv0WbAIELIPAQorWCHYG/RZMDEBMzIWFhUUBgchESE1IRERMzI2NCYnAkruhcZn7MT+Hf7IAivtWWdlVgLiXKZup8oBA3bE/eX+o1mkXwEAAAMAjwAABckEOgALAA8AFwBtsgcYGRESObAHELAN0LAHELAU0ACwAEVYsAovG7EKGz5ZsABFWLAOLxuxDhs+WbAARViwCC8bsQgPPlmwAEVYsAwvG7EMDz5ZsgAOCBESObAAL7IQAQorWCHYG/RZsAgQshEBCitYIdgb9FkwMQEzMhYWFRQGByERMwEjETMBETMyNjQmJwGC7oXGZ+zE/h3zBEfz8/u57VlnZVYC4lymbqfKAQQ6+8YEOv3l/qNZpF8BAAACAI8AAAQiBDoACwATAE2yDhQVERI5sA4QsAHQALAARViwCi8bsQobPlmwAEVYsAgvG7EIDz5ZsgAKCBESObAAL7IMAQorWCHYG/RZsAgQsg0BCitYIdgb9FkwMQEzMhYWFRQGByERMxERMzI2NCYnAYLuhcZn7MT+HfPtWWdlVgLiXKZup8oBBDr95f6jWaRfAQAAAQBR/+wD6AROACAAfbIQISIREjkAsABFWLAILxuxCBs+WbAARViwEC8bsRAPPlmwCBCyAAEKK1gh2Bv0WbIeCBAREjl8sB4vGLRAHlAeAl2yAx4AERI5shwDAV2yCwMBXbIbBworWCHYG/RZsBAQshgBCitYIdgb9FmyFRsYERI5tAQVFBUCXTAxASIGFSM0NjYzMgAVFRQGBiMiJiY1MxQWMzI2NyE1ISYmAgFVduV0ynLcAQt53JF7yG7ldlZmfgz+rAFTDn4Di2lPZK9o/tL8GZv8iGe6dV13mYmohI8AAAIAkf/sBjgETgAUAB8AhbIVICEREjmwFRCwDdAAsABFWLAELxuxBBs+WbAARViwEy8bsRMbPlmwAEVYsBEvG7ERDz5ZsABFWLAMLxuxDA8+WbIBERMREjl8sAEvGLTQAeABAl20QAFQAQJdsg8BCitYIdgb9FmwDBCyFwEKK1gh2Bv0WbAEELIdAQorWCHYG/RZMDEBMzYkMzIAFxcUBgYjIgAnIxEjETMBFBYyNjU0JiMiBgGEzBsBCsvbARELAXvlltL+8xXK8/MBuYr2iI14d4wCh8/4/ubpOaD8igEE1P48BDr92Ke9wLmnvb0AAAIAJwAAA98EOgANABYAYbIUFxgREjmwFBCwBNAAsABFWLAALxuxABs+WbAARViwAS8bsQEPPlmwAEVYsAUvG7EFDz5ZshIAARESObASL7IDAQorWCHYG/RZsgcDEhESObAAELITAQorWCHYG/RZMDEBESMRIwMjEyYmNTQ2NwMUFjMzESMiBgPf8uPn/P9ka+nGvGVP7+BZagQ6+8YBjf5zAbUqnGWXwQL+oERVAThaAAAB/9v+SwP4BgAAIQCLshUiIxESOQCwHi+wAEVYsAQvG7EEGz5ZsABFWLAKLxuxChE+WbAARViwGC8bsRgPPlm2nx6vHr8eA12yLx4BXbIPHgFdsiEYHhESObAhL7IABworWCHYG/RZsgIYBBESObAKELIPAQorWCHYG/RZsAQQshUBCitYIdgb9FmwABCwGtCwIRCwHNAwMQEhFTYzIBMRFAYjIic3FjMyNRE0JiMiBxEjESM1MzUzFSECd/71d7YBWgW5pkY6Dyc7e2Fekkjznp7zAQsEremK/nX8/rLEEb8NvwLtcF2C/PsErauoqAABAFT/7AP5BE4AHQB6shYeHxESOQCwAEVYsA8vG7EPGz5ZsABFWLAILxuxCA8+WbIAAQorWCHYG/RZshkPCBESOXywGS8YtB8ZLxkCcbIbBworWCHYG/RZsgMAGxESObQEAxQDAl2wDxCyFgEKK1gh2Bv0WbITGRYREjmyHBMBXbILEwFdMDElMjY3Mw4CIyIAETU0ADMyFhcjJiYjIgYHIRUhEgI+WXgG5AN4ynTk/vgBCOTA9QTkB3Zbbn0KAVv+phmuaFBmsGQBJwECGfcBKeK2YHWUjaj+7AAAAgAeAAAGmgQ6ABYAHwB5sgkgIRESObAJELAX0ACwAEVYsAAvG7EAGz5ZsABFWLAILxuxCA8+WbAARViwDy8bsQ8PPlmyAQAIERI5sAEvsAAQsgoBCitYIdgb9FmwDxCyEQEKK1gh2Bv0WbABELIXAQorWCHYG/RZsAgQshgBCitYIdgb9FkwMQERMxYWFRQGByERIQMCBgcjJzc2NjcTAREzMjY1NCYnA/r4w+Xpw/4Z/uYVE6ivTgIyUkcKFALz7VhoZFYEOv6HA7yfoMECA3b+h/7y7gHKBQuv4wHO/cX+wVhNSFEBAAIAhgAABrEEOgASABsAgrIBHB0REjmwARCwE9AAsABFWLACLxuxAhs+WbAARViwES8bsREbPlmwAEVYsAsvG7ELDz5ZsABFWLAPLxuxDw8+WbIBEQsREjmwAS+yBBELERI5sAQvsAEQsg0BCitYIdgb9FmwBBCyEwEKK1gh2Bv0WbALELIUAQorWCHYG/RZMDEBIREzETMWFhUUBgchESERIxEzAREzMjY1NCYjAXkBpfP4w+Xpw/4Z/lvz8wKY7VpmZFsCnwGb/ocDvJ+gwQIB3f4jBDr9xf7BWktGVAAAAf/uAAAD+AYAABgAebIMGRoREjkAsBUvsABFWLAELxuxBBs+WbAARViwBy8bsQcPPlmwAEVYsA8vG7EPDz5Zsr8VAV2yLxUBXbIPFQFdshgPFRESObAYL7IABworWCHYG/RZsgIEBxESObAEELIMAQorWCHYG/RZsAAQsBHQsBgQsBPQMDEBIRU2MyATESMRNCYjIgcRIxEjNTM1MxUhAov+4Xe2AVoF82Fekkjzi4vzAR8EtfGK/nX9PQK6cF2C/PsEtaqhoQABAIb+mgQSBDoACwBFALAIL7AARViwAC8bsQAbPlmwAEVYsAMvG7EDGz5ZsABFWLAFLxuxBQ8+WbAARViwCS8bsQkPPlmyAQEKK1gh2Bv0WTAxAREhETMRIREjESERAXkBpvP+tfP+sgQ6/IgDePvG/poBZgQ6AAABAIj/6wbBBbAAHgBgsgYfIBESOQCwAEVYsAAvG7EAHz5ZsABFWLAMLxuxDB8+WbAARViwFS8bsRUfPlmwAEVYsAQvG7EEDz5ZsABFWLAILxuxCA8+WbIGAAQREjmyEQEKK1gh2Bv0WbAa0DAxAREUBiMiJwYjIiY1ETMRFBYzMjY1ESERFBYzMjY1EQbB+dLlbXHpz/P9Z15pcgEBbWNhbgWw+//W7qWl79UEAfv8dYKBdwQD+/x0g395BAMAAQBw/+sF7QQ6AB4AYLIGHyAREjkAsABFWLAALxuxABs+WbAARViwDC8bsQwbPlmwAEVYsBUvG7EVGz5ZsABFWLAELxuxBA8+WbAARViwCC8bsQgPPlmyBhUEERI5shEBCitYIdgb9FmwGtAwMQERBgYjIicGIyImNREzERQWMzI2NREzERQWMzI2NREF7QHavcdgZsu41fNURlNm9FxPSlsEOv1OwdyOjt3DAq/9UXJsbHICr/1RcmxscgKvAAL/4AAABCEGGAASABsAcbIVHB0REjmwFRCwA9AAsABFWLAPLxuxDyE+WbAARViwCS8bsQkPPlmyEg8JERI5sBIvsgAHCitYIdgb9FmyAg8JERI5sAIvsAAQsAvQsBIQsA3QsAIQshMBCitYIdgb9FmwCRCyFAEKK1gh2Bv0WTAxASERMxYWFRQGByERIzUzETMRIQERMzI2NTQmJwKj/t73xOXlwP4Srq7zASL+3u1bZWNXBDr+yQPOrq3TBAQ6qwEz/s39W/6CZVlVaQIAAQCY/+0GzQXFACUAjrIOJicREjkAsABFWLAkLxuxJB8+WbAARViwBS8bsQUfPlmwAEVYsBwvG7EcDz5ZsABFWLAiLxuxIg8+WbIAIiQREjmwAC+yHwABcbIIJBwREjmwBRCyDAEKK1gh2Bv0WbAAELAP0LAAELIhAQorWCHYG/RZsBLQsBwQshUBCitYIdgb9FmyGCQcERI5MDEBMzYSJDMyABcjJiYjIgYHIRUhFhYzMjY3MwYAIyIkAicjESMRMwGUtQuWAQmr8QEmGPwSk46hqwsB6f4WAqiilZYU/Bb+0/is/viTA7T8/ANPvgEdm/76752L3czD4fKGnOn++6EBNMr9dAWwAAABAIb/7AW6BE4AIwCSsg0kJRESOQCwAEVYsAQvG7EEGz5ZsABFWLAjLxuxIxs+WbAARViwGy8bsRsPPlmwAEVYsCAvG7EgDz5Zsg4EGxESOXywDi8YtEAOUA4CXbAA0LAEELILAQorWCHYG/RZsggOCxESObAOELIPBworWCHYG/RZsBsQshMBCitYIdgb9FmyFhMPERI5sA8QsB7QMDEBMzYkMzIWFyMmJiMiAyEVIRYWMzI2NzMOAiMiJCcjESMRMwF5nRQBBNLB9QTkB3Zb2xoBfP6FCn1uWXgG5AN4ynTT/v0UnvPzAnHe/+K2YHX+5quKjmhQZrBk/tz+OgQ6AAACABwAAAUXBbAACwAOAFYAsABFWLAILxuxCB8+WbAARViwAi8bsQIPPlmwAEVYsAYvG7EGDz5ZsABFWLAKLxuxCg8+WbINCAIREjmwDS+yAAEKK1gh2Bv0WbAE0LIOCAIREjkwMQEjESMRIwMhATMBIQEhAwODfuFzj/76Agb1AgD++v3gAVOoAar+VgGq/lYFsPpQAmgB+AAAAgAKAAAERQQ6AAsAEABWALAARViwCC8bsQgbPlmwAEVYsAIvG7ECDz5ZsABFWLAGLxuxBg8+WbAARViwCi8bsQoPPlmyDQIIERI5sA0vsgEBCitYIdgb9FmwBNCyDwgCERI5MDEBIxEjESMDIwEzASMBMwMnBwLkXcNbaPcBqecBq/f+XPhkGRkBF/7pARf+6QQ6+8YBxAEGZGQAAgCsAAAHMAWwABMAFgB8ALAARViwAi8bsQIfPlmwAEVYsBIvG7ESHz5ZsABFWLAELxuxBA8+WbAARViwCC8bsQgPPlmwAEVYsAwvG7EMDz5ZsABFWLAQLxuxEA8+WbIVAgQREjmwFS+wANCwFRCyBgEKK1gh2Bv0WbAK0LAGELAO0LIWAgQREjkwMQEhATMBIQMjESMRIwMhEyERIxEzASEDAagBaAEr9QIA/vqOfuJyj/76mP7b/PwCYgFTqQJnA0n6UAGq/lYBqv5WAav+VQWw/LgB+QAAAgCdAAAGGAQ6ABMAGAB/ALAARViwAi8bsQIbPlmwAEVYsBIvG7ESGz5ZsABFWLAELxuxBA8+WbAARViwCC8bsQgPPlmwAEVYsAwvG7EMDz5ZsABFWLAQLxuxEA8+WbIAEBIREjmwAC+wAdCyDgEKK1gh2Bv0WbAL0LAH0LABELAU0LAV0LIXEgQREjkwMQEzEzMBIwMjESMRIwMjEyMRIxEzATMDJwcBkP745wGr92pdw1to92268/MB7fhkGRkBxAJ2+8YBF/7pARf+6QEX/ukEOv2KAQZkZAACAIAAAAZuBbAAGgAdAHqyGx4fERI5sBsQsA3QALAARViwGS8bsRkfPlmwAEVYsAQvG7EEDz5ZsABFWLAMLxuxDA8+WbAARViwEy8bsRMPPlmyABkEERI5sAAvsgkBCitYIdgb9FmwDtCwD9CwABCwGNCyGxkEERI5sBkQshwBCitYIdgb9FkwMQEWFhcRIxEmJiMjBxEjESMiBgcRIxE2NiEBIQETIQR6/vEF/AJ2j2gG/H6PdQP8A/oBD/6FBOT9jun+LwMoBNnY/o0BbIFvC/2vAlxufv6QAWzh2wKI/YoBqQACAIIAAAVkBDoAGgAdAHqyGx4fERI5sBsQsBTQALAARViwBS8bsQUbPlmwAEVYsAAvG7EADz5ZsABFWLALLxuxCw8+WbAARViwEy8bsRMPPlmyBAUAERI5sAQvsAfQsAQQshAHCitYIdgb9FmwFdCwFtCyGwUAERI5sAUQshwBCitYIdgb9FkwMTM1NjY3ASEBFhYXFSM1JiYnIwcRIxEjIgYHFQETIYICxcz+6wP0/urGvgLzAV5yLwHyLXlgAwGFlf7Wss7SDQHb/iQR08ezsX9yAgP+XwGkbny6AmkBIgAAAgCjAAAIswWwACAAIwCXshwkJRESObAcELAj0ACwAEVYsAcvG7EHHz5ZsABFWLALLxuxCx8+WbAARViwAC8bsQAPPlmwAEVYsAUvG7EFDz5ZsABFWLARLxuxEQ8+WbAARViwGS8bsRkPPlmyCQcAERI5sAkvsgMBCitYIdgb9FmwCRCwDdCwAxCwHNCwF9CyIQcAERI5sAsQsiIBCitYIdgb9FkwMSERNDchESMRMxEhASEBFhYXESMRJiYjIwcRIxEjIgYHEQETIQLFO/6f/PwDMP6HBOX+hP7xBfwCdo9oBfx/kXMDAgjp/i4BYKFl/ZoFsP17AoX9eATZ2P6NAWyBbwn9rQJccXz+kQM5AaoAAAIAjwAAB3YEOgAgACMAl7IdJCUREjmwHRCwI9AAsABFWLAHLxuxBxs+WbAARViwCy8bsQsbPlmwAEVYsAAvG7EADz5ZsABFWLAFLxuxBQ8+WbAARViwES8bsREPPlmwAEVYsBkvG7EZDz5ZsgkLABESObAJL7IDBworWCHYG/RZsAkQsA3QsAMQsBzQsBfQsiELABESObALELIiAQorWCHYG/RZMDEhNTY3IREjETMRIQEhARYWFxUjNSYmJyMHESMRIyIGBxUBEyEClQE1/rfz8wKl/uwD9P7qxb4C8gFecy4B8i15YAMBhZX+1rCUZP5YBDr+JwHZ/iQR1MazsX9yAgP+XwGkbny6AmkBIgAAAgAo/kADqgeIACcAMACnsgIxMhESObACELAo0ACwLC+wAEVYsAUvG7EFHz5ZsABFWLAXLxuxFxE+WbAARViwES8bsREPPlmwBRCyAwEKK1gh2Bv0WbImBREREjl8sCYvGLIQJgFdskAmAV20YCZwJgJdsiMBCitYIdgb9FmyDCMmERI5sBEQsh0BCitYIdgb9FmyDywBXbAsELAp0LApL7QPKR8pAl2yKCwpERI5sDDQsDAvMDEBNCYjITUhMgQVFAYHBBUUBCMjBhUUFwcmJic0NjczNjY1NCEjNTMgAzczFQEjATUzApaFev7lARXtAQt9bgEM/vfoNXqYUoSiArGkP3KJ/s+JiQEQlJPP/uqX/uvOBCFeasfPtXCjLFf+xegDY2tBmSi3f4aLAgF9ZfPHA5+bCv7pARgJAAIAM/5IA4gGHAAnADAAlbICMTIREjmwAhCwKNAAsCwvsABFWLAFLxuxBRs+WbAARViwFy8bsRcRPlmwAEVYsBIvG7ESDz5ZsAUQsgQBCitYIdgb9FmyJRIFERI5fLAlLxi0QCVQJQJdsiQHCitYIdgb9FmyDCQlERI5sBIQsh0BCitYIdgb9FmwLBCwKdCwKS+0DykfKQJdsigpLBESObAw0DAxATQmIyE1ITIWFRQGBxYVFAYjIwYVFBcHJiYnNDY3MzI2NTQhIzUzMgM3MxUBIwE1MwJ0c2n+5AEX3PhhV9n20DZ+kFGClgKpoTVsd/75kZXioJLQ/umW/uvNAv48R7mljU93JEKslq8EYmtBkTC2cH2HAVA/lKkDEpsL/uoBFwoAAAMAX//sBRcFxAAQABcAHgBmsgQfIBESObAEELAR0LAEELAY0ACwAEVYsAwvG7EMHz5ZsABFWLAELxuxBA8+WbAMELIRAQorWCHYG/RZshQEDBESOXywFC8YsAQQshgBCitYIdgb9FmwFBCyHAcKK1gh2Bv0WTAxARQCBCMiJAInNTQSJCAEEhcBIgYHISYmAzI2NyEWFgUXlP7ts7D+7pkDlgEUAWQBE5YB/aSgtggCvAi0oJ+zCv1ECrgCstb+va2qATzNXdUBRK+r/r/VAe/w2dvu+8rl3tnqAAADAE//7AQ9BE4ADwAWAB0AZ7IEHh8REjmwBBCwENCwBBCwF9AAsABFWLAELxuxBBs+WbAARViwDC8bsQwPPlmyEAEKK1gh2Bv0WbIbBAwREjl8sBsvGLRAG1AbAl2yEwcKK1gh2Bv0WbAEELIXAQorWCHYG/RZMDETNDY2MzIAFxcUBgYjIgARATI2NyEWFhMiBgchJiZPfeSU2gETCwF755Xj/uwB92uFEP3/EIRraoUQAgAQhQInof2J/ufqOaD8igEuAQH+k5KJiJMC3ZWCgpUAAAEAEAAABPMFwgAPAEayAhARERI5ALAARViwBi8bsQYfPlmwAEVYsA8vG7EPHz5ZsABFWLAMLxuxDA8+WbIBDA8REjmwBhCyCAEKK1gh2Bv0WTAxARc3EzY2MxcHIwYHASMBIQJhGxvkNZx6LQIYVCf+mPT+DgENAYtybwL3rJcB1wJ8+5QFsAABACAAAAQYBE4AEQBGsgISExESOQCwAEVYsAUvG7EFGz5ZsABFWLARLxuxERs+WbAARViwDi8bsQ4PPlmyAQUOERI5sAUQsgoBCitYIdgb9FkwMQEXNxMSMzIXByYjIgYHASMBMwHjFBR6Ws9DJxcMICI7Df720/6S+wFuYWEBvgEiFsAGNir84gQ6AAIAX/92BRcGLgATACcAVbIFKCkREjmwBRCwIdAAsABFWLANLxuxDR8+WbAARViwAy8bsQMPPlmwBtCwDRCwENCwDRCyGgEKK1gh2Bv0WbAX0LADELIkAQorWCHYG/RZsCHQMDEBEAAHFSM1JgADNRAANzUzFRYAESc0JicVIzUGBhUVFBYXNTMVNjY1BRf+8+nG6P7vAwES6cbqAQ39gnjGeYWEe8Z5gAKy/tr+iyN+fiMBcwEdVQEkAXojcXIj/ob+2QbO9SNgYSP1z0zH/SVgXyP2zwACAE//iAQ9BLQAEwAlAFiyAyYnERI5sAMQsBTQALAARViwAy8bsQMbPlmwAEVYsBAvG7EQDz5ZsAMQsAbQsBAQsA3QsBAQsiMBCitYIdgb9FmwFNCwAxCyHQEKK1gh2Bv0WbAa0DAxEzQSNzUzFRYSFRUUAgcVIzUmAjUBNjY1NCYnFSM1BgYVFBYXNTNP3b24v93fv7i73QJQUlpaULhPWFZPuAIn2gEmH25tH/7Y3RHb/tkda2wfASbd/qcetZeCsh9gYCGylYOuIWgAAAMAiP/rBrUHPwAqAD0ARgC6sjBHSBESObAwELAJ0LAwELBF0ACwAEVYsAAvG7EAHz5ZsABFWLASLxuxEh8+WbAARViwBy8bsQcPPlmwAEVYsAsvG7ELDz5ZsgkABxESObASELITAQorWCHYG/RZsAsQshoBCitYIdgb9FmyHgsSERI5sCPQsBMQsCrQsBIQsDbQsDYvsCzQsCwvsisICitYIdgb9FmwLBCwMtCwMi+yOQgKK1gh2Bv0WbAsELBC0LBCL7BG0LBGLzAxATIWFxEUBiMiJwYjIiYnETQ2MxUiBhURFBYzMjY1ETMRFhYzMjY1ETQmIxMVIyIuAiMiFRUjNTQzMh4CATY3NTMVFAYHBPTO8gHx0ONycuPO8ATzz19mZl9pcvUBcWhfZmZfaiFTir8wFGiG6yVGyW/+KUEDqWA7BbD63f3q3fuenvbVAiDd/cyOgP3tgI6BdwGC/nlzgI6AAhOAjgHjhiNLCmgQItwPTxr+h1I8aGcxeB8AAAMAdP/rBdEF4wAqAD0ARgCvsglHSBESObAJELA60LAJELBG0ACwAEVYsBIvG7ESGz5ZsABFWLALLxuxCw8+WbASELAA0LAAL7ALELAH0LIJEgsREjmwEhCyEwEKK1gh2Bv0WbALELIaAQorWCHYG/RZsh4LEhESObAj0LATELAq0LASELA20LA2L7At0LAtL7IrCAorWCHYG/RZsC0QsDLQsDIvsjkICitYIdgb9FmwNhCwQdCwQS+wRtCwRi8wMQEyFhcVFAYjIicGIyImJxE0NjMVIgYVFRQWMzI2NzUzFRYWMzI2NTU0JiMTFSMiLgIjIhUVIzU0MzIeAgE2NzUzFRQGBwQ6utwB1LXFYWPCstME3LtJW1NDUF4B7AFeUUJUW0m9JFOKwSwVaIfrJUbFcP4wQQOpYDsER+XM+MznkZHgxQEDzefDdXz1fHVwasrKanB1fPV8dQHnhiNMCWgQItwPThv+hVI8aGcxeB8AAgCI/+sGwQcRAB4AJgB9sgYnKBESObAGELAj0ACwAEVYsA0vG7ENHz5ZsABFWLAILxuxCA8+WbAE0LIGCA0REjmwCBCyEQEKK1gh2Bv0WbANELAV0LAVL7ARELAa0LAVELAe0LAeL7ANELAl0LAlL7Am0LAmL7IgCAorWCHYG/RZsCYQsCPQsCMvMDEBERQGIyInBiMiJjURMxEUFjMyNjURIREUFjMyNjURJTUhFyEVIzUGwfnS5W1x6c/z/WdeaXIBAW1jYW78OQNVAf6mtQWw+//W7qWl79UEAfv8dYKBdwQD+/x0g395BAPnenp/fwACAHD/6wXtBbEAHgAmAImyBicoERI5sAYQsCXQALAARViwDS8bsQ0bPlmwAEVYsBUvG7EVGz5ZsABFWLAeLxuxHhs+WbAARViwBC8bsQQPPlmwAEVYsAgvG7EIDz5ZsgYIFRESObIRAQorWCHYG/RZsBrQsA0QsCXQsCUvsB/QsB8vsiAICitYIdgb9FmwHxCwItCwI9AwMQERBgYjIicGIyImNREzERQWMzI2NREzERQWMzI2NRElNSEXIRUjNQXtAdq9x2Bmy7jV81RGU2b0XE9KW/ydAzgE/rK1BDr9TsHcjo7dwwKv/VFybGxyAq/9UXJsbHICr/x7e39/AAEAZv6MBLYFxQAYAFOyFxkaERI5ALAARViwCi8bsQofPlmwAEVYsAAvG7EAFz5ZsABFWLACLxuxAg8+WbAKELAO0LAKELIQAQorWCHYG/RZsAIQshcBCitYIdgb9FkwMQEjESYANRE0EiQzIAAVIxAhIgYVERQWFzMDNPvT/wCNAQGjAQABH/z+3YypqYqf/owBZiABR/kBEa8BGJv+9+kBJt+8/u223wEAAQBc/okD8wROABoAU7IZGxwREjkAsABFWLAKLxuxChs+WbAARViwAC8bsQAXPlmwAEVYsAIvG7ECDz5ZsAoQsA/QsAoQshIBCitYIdgb9FmwAhCyGQEKK1gh2Bv0WTAxASMRJgI1NTQ2NjMyFhYVIzQmIyIGFRUUFhczAtXzs9N525J8xm/ldFhxgn5wmP6JAWogASPcHJv8iWe7dlt6vagbobsCAAEAbQAABJMFPgATABMAsA4vsABFWLAELxuxBA8+WTAxAQUHJQMjEyU3BRMlNwUTMwMFByUCWwEhSP7dta/h/t9HASXK/t5JASO5rOQBJUz+4AHBrICq/sEBjquAqwFoq4KrAUb+a6t/qgAB/GYEov85Bf0ABwARALAAL7IDBgorWCHYG/RZMDEBFSc3IScXFf0XsQECIgGxBSB+Ae5sAdwAAAH8cwUX/20GFQAPAC4AsAsvsAfQsAcvsgAICitYIdgb9FmwCxCwBNCwBC+wCxCyDAgKK1gh2Bv0WTAxATIVFSM1NCMiBAcjNTM2JP5/7ohqNv7iiykneQEYBhXcIhBodwGGAXcAAAH9ewUW/nIGYAAFAAwAsAEvsAXQsAUvMDEBNTMHFwf9e70BO1IF3ISWcEQAAf2lBRb+nAZgAAUADACwAy+wANCwAC8wMQEnNyczFf33UjsBvQUWRHCWhAAI+iT+xAG/Ba8ADAAaACcANQBCAE8AXABqAHoAsEUvsFMvsGAvsDgvsABFWLACLxuxAh8+WbIJCQorWCHYG/RZsEUQsBDQsEUQskwJCitYIdgb9FmwF9CwUxCwHtCwUxCyWgkKK1gh2Bv0WbAl0LBgELAr0LBgELJnCQorWCHYG/RZsDLQsDgQsj8JCitYIdgb9FkwMQE0NjIWFSM0JiMiBhUBNDYzMhYVIzQmIyIGFRM0NjMyFhUjNCYiBhUBNDYzMhYVIzQmIyIGFQE0NjIWFSM0JiMiBhUBNDYyFhUjNCYjIgYVATQ2MzIWFSM0JiIGFRM0NjMyFhUjNCYjIgYV/RFzvnRwMzAuMwHedF1fdXE1LiwzSHVdX3RwNVwz/st0XV90cDUuLTP9T3O+dHAzMC4z/U10vnRwMzAuM/7edV1fdHA1XDM1dV1fdXE1Li0zBPNUaGhULjc1MP7rVGhnVTE0NTD+CVVnaFQxNDcu/flUaGhUMTQ3Lv7kVGhoVC43Ny4FGlRoaFQuNzUw/glVZ2hUMTQ3Lv35VWdnVTE0NTAACPpN/mMBjAXGAAQACQAOABMAGAAdACIAJwAvALAhL7AWL7ASL7ALL7AbL7AmL7AARViwBy8bsQcfPlmwAEVYsAIvG7ECET5ZMDEFFwMjEwMnEzMDATcFFSUFByU1BQE3JRcFAQcFJyUDJwM3EwEXEwcD/lALemBGOgx6YEYCHQ0BTf6m+3UN/rMBWgOcAgFARP7b/PMC/sBFASYrEZRBxgNgEZRCxDwO/q0BYQSiDgFS/qD+EQx8Ykc7DHxiRwGuEJlEyPyOEZlFyALkAgFGRf7V/OMC/rtHASsAAAL/4AAABCEGYgASABsAdLIVHB0REjmwFRCwA9AAsABFWLANLxuxDR8+WbAARViwES8bsREfPlmwAEVYsAkvG7EJDz5ZsBEQsgAHCitYIdgb9FmyAg0JERI5sAIvsAAQsAvQsAzQsAIQshMBCitYIdgb9FmwCRCyFAEKK1gh2Bv0WTAxASERMxYWFRQGByERIzUzNTMVIQERMzI2NTQmJwKj/t73xOXlwP4Srq7zASL+3u1bZWNXBQX9/gPOrq3TBAUFq7Ky/JD+gmVZVWkCAAACAJQAAATZBbAADgAbAE2yBBwdERI5sAQQsBfQALAARViwAy8bsQMfPlmwAEVYsAEvG7EBDz5ZshYDARESObAWL7IAAQorWCHYG/RZsAMQshQBCitYIdgb9FkwMQERIxEhMgQVFAcXBycGIxM2NTQmJyERITI3JzcBkf0CLfQBH3V6bYh5qvkckH7+yQEwTzpzbgId/eMFsP7RwXeHZJY3AUM1SnaNAv4EFoBkAAACAHz+YAQwBE4AEwAiAG6yFyMkERI5sBcQsBDQALAARViwEC8bsRAbPlmwAEVYsA0vG7ENGz5ZsABFWLAKLxuxChE+WbAARViwBy8bsQcPPlmyCRAHERI5sg4QBxESObAQELIXAQorWCHYG/RZsAcQshwBCitYIdgb9FkwMQEUBxcHJwYjIicRIxEzFzYzMhIRJzQmIyIHERYzMjcnNxc2BDBuam9oWXCya/PgCmu4xuHygXiVQUKWRjJqblkiAhL0l3pjeDZ1/f8F2m6C/tn++gaivnv+IH4he2RnWAABAI8AAAQ0BxAABwAysgEICRESOQCwAEVYsAQvG7EEHz5ZsABFWLACLxuxAg8+WbAEELIAAQorWCHYG/RZMDEBIREjESERMwQ0/Vj9ArLzBOT7HAWwAWAAAQB+AAADWwVzAAcAKwCwAEVYsAQvG7EEGz5ZsABFWLACLxuxAg8+WbAEELIAAQorWCHYG/RZMDEBIREjESERMwNb/hbzAevyA3b8igQ6ATkAAAEAm/7GBJ0FsAAUAFuyDxUWERI5ALAJL7AARViwEy8bsRMfPlmwAEVYsBEvG7ERDz5ZsBMQsgABCitYIdgb9FmyAxMJERI5sAMvsAkQsgoHCitYIdgb9FmwAxCyDwEKK1gh2Bv0WTAxASERMyAAERAAIycyNjUCJSMRIxEhBDf9YKgBIgE8/vbzAYOIAv6rvPwDnATk/l/+zf7s/vT+1rqzwgF7Cf2HBbAAAQB+/uID2wQ6ABUASrILFhcREjkAsAovsABFWLAULxuxFBs+WbAARViwEi8bsRIPPlmwFBCyAAEKK1gh2Bv0WbIDFAoREjmwAy+yEAEKK1gh2Bv0WTAxASEVMyAAFRQGBgcnNjU0JiMjESMRIQNG/itJAQEBIF6rc1Xem45O8wLIA3bl/vrdYMKNHa5K1IGX/joEOgAAAQCQAAAFNgWwABQAYQCwAEVYsAAvG7EAHz5ZsABFWLAMLxuxDB8+WbAARViwAi8bsQIPPlmwAEVYsAovG7EKDz5Zsg8KDBESObAPL7KfDwFdsggBCitYIdgb9FmyAQgPERI5sAXQsA8QsBLQMDEJAiEBIxUjNSMRIxEzETM1MxUzAQUN/nwBrf7B/tNBo1n9/VmjNwEbBbD9W/z1Am3p6f2TBbD9mv7+AmYAAAEAjgAABK4EOgAUAFwAsABFWLANLxuxDRs+WbAARViwFC8bsRQbPlmwAEVYsAovG7EKDz5ZsABFWLADLxuxAw8+WbIOCg0REjmwDi+yCQEKK1gh2Bv0WbIBCQ4REjmwBdCwDhCwEtAwMQkCIQMjFSM1IxEjETMRMzUzFTMTBJT+xAFW/svYL5tX8vJXmyfPBDr9/v3IAayysv5UBDr+UMfHAbAAAQA0AAAGogWwAA4AYQCwAEVYsAYvG7EGHz5ZsABFWLAKLxuxCh8+WbAARViwAi8bsQIPPlmwAEVYsA0vG7ENDz5ZsggGAhESObAIL7IBAQorWCHYG/RZsAYQsgQBCitYIdgb9FmyDAEIERI5MDEBIxEjESE1IREzASEBASEDtq38/icC1YsBrQE2/gwCH/7QAnD9kATsxP2cAmT9R/0JAAEAPQAABagEOgAOAGsAsABFWLAGLxuxBhs+WbAARViwCi8bsQobPlmwAEVYsAIvG7ECDz5ZsABFWLANLxuxDQ8+WbIJCgIREjmwCS+yLwkBcbKMCQFdsgABCitYIdgb9FmwBhCyBAEKK1gh2Bv0WbIMAAkREjkwMQEjESMRITUhETMBIQEBIQNAe/L+agKIbAEqAS3+eAGo/sUBrP5UA3bE/lABsP35/c0AAQCUAAAHgwWwAA0AhwCwAEVYsAIvG7ECHz5ZsABFWLAMLxuxDB8+WbAARViwBi8bsQYPPlmwAEVYsAovG7EKDz5ZsgECBhESObABL7KfAQFdsm8BAXGy3wEBcbIPAQFysp8BAXGyPwEBcbQvAT8BAnKyfAEBXbACELIEAQorWCHYG/RZsAEQsggBCitYIdgb9FkwMQEhESEVIREjESERIxEzAZECiwNn/ZX8/XX9/QNSAl7D+xMCh/15BbAAAAEAfgAABWYEOgANAGYAsABFWLACLxuxAhs+WbAARViwDC8bsQwbPlmwAEVYsAYvG7EGDz5ZsABFWLAKLxuxCg8+WbIBDAYREjl8sAEvGLRAAVABAl2wAhCyBAEKK1gh2Bv0WbABELIIAQorWCHYG/RZMDEBIREhFSERIxEhESMRMwFxAaUCUP6j8/5b8/MCdwHDxPyKAbX+SwQ6AAEAm/7EB+8FsAAWAGiyEBcYERI5ALAHL7AARViwFS8bsRUfPlmwAEVYsBMvG7ETDz5ZsABFWLAQLxuxEA8+WbIBFQcREjmwAS+wBxCyCAcKK1gh2Bv0WbABELINAQorWCHYG/RZsBUQshEBCitYIdgb9FkwMQEzIAAREAAjJzI2NQIlIxEjESERIxEhBRR9ASIBPP728wGDiAL+q5H8/X/8BHkDQf7N/uz+9P7WurPCAXsJ/YkE5PscBbAAAQB+/uYGugQ6ABgAV7ISGRoREjkAsAgvsABFWLAXLxuxFxs+WbAARViwFS8bsRUPPlmwAEVYsBIvG7ESDz5ZsgEXCBESObABL7IPAQorWCHYG/RZsBcQshMBCitYIdgb9FkwMQEzIAAVFAYGByc2NjU0JiMjESMRIREjESEECn0BBwEsXatzVXVppZp/8/5a8wOMApT++95hv44drSiPZ4KX/jYDdvyKBDoAAAIAZ//rBdcFxQAlADIAhbIWMzQREjmwFhCwJtAAsABFWLANLxuxDR8+WbAARViwHS8bsR0fPlmwAEVYsAQvG7EEDz5ZsADQsAAvsgIEHRESObACL7ANELIOAQorWCHYG/RZsAQQshUBCitYIdgb9FmwABCyJQEKK1gh2Bv0WbACELAp0LAdELIvAQorWCHYG/RZMDEFIicGIyIkAic1NBI2MxUiBhUVFBIzMjcmETU0EjMyEhEVEAcWMwEUFhc2ETU0JiMiBhUF19+zlLe7/tSpA33hjGZ+27IxKeLtuMLzu1xq/Y5lY6JgWFReFUdHrgE2v8mvAR6h1OG9uNf++QfLAUTL8AE1/r/++sb+2soUAhmE1UiPAQnVrquvoQACAGH/6wTJBE4AIgAuAIyyBC8wERI5sAQQsCPQALAARViwCy8bsQsbPlmwAEVYsBovG7EaGz5ZsABFWLAELxuxBA8+WbAARViwAC8bsQAPPlmyAgQaERI5sAIvsAsQsgwBCitYIdgb9FmwBBCyEwEKK1gh2Bv0WbAAELIiAworWCHYG/RZsAIQsCXQsBoQsisBCitYIdgb9FkwMQUiJwYjIgARNTQSMxUGBhUVFBYzNyY1NTQ2MzIWFRUUBxYzARQXNjU1NCYjIgYVBMm6k3qQ5f7U26pAS5p9JY+2lJa9gU1Y/g54Yz0xMjsSNjkBQgEEQs8BDMoElHtJpswCleJ6u+r/zXfTlBEBj6psY6l7a4d4agABAC3+oQa3BbAADwBPALANL7AARViwCC8bsQgfPlmwAEVYsAIvG7ECHz5ZsABFWLAOLxuxDg8+WbACELIAAQorWCHYG/RZsAXQsA4QsgYBCitYIdgb9FmwCtAwMQEhNSEVIREhETMRMwMjESEBjf6gA77+nwKB/LAU5/vRBOzExPveBOb7HP3VAV8AAAEAJv6/BToEOgAPAEsAsA0vsABFWLADLxuxAxs+WbAARViwDy8bsQ8PPlmwAxCyBAEKK1gh2Bv0WbAA0LAPELIGAQorWCHYG/RZsAMQsAjQsAYQsArQMDEBIzUhFSMRIREzETMDIxEhARv1AsPbAabzkxTd/NIDd8PD/UsDePyI/f0BQQAAAQCAAAAE4QWwABgAT7IFGRoREjkAsABFWLAALxuxAB8+WbAARViwCy8bsQsfPlmwAEVYsA4vG7EODz5ZsgUOABESObAFL7AI0LAFELIUAQorWCHYG/RZsBHQMDEBERYXFhcRMxE2NxEzESMRBgcVIzUmJicRAX0CTzVuo2xk/f1gcKP2+gEFsP4smDknBQEr/twKGQKn+lACPBgK6+UG6t8BzQABAHQAAAP1BDsAFgBRsgYXGBESOQCwAEVYsBUvG7EVGz5ZsABFWLAMLxuxDBs+WbAARViwAS8bsQEPPlmyDwEMERI5fLAPLxiyBwEKK1gh2Bv0WbAE0LAPELAS0DAxISMRBgcVIzUmJicRMxEWFxEzETY3ETMD9fNFMaO2vgHyAYKjOzvzAWkOBYqLE9CxAVD+sKwfAQv+7wYOAgwAAAEAhQAABOUFsAARAEayBRITERI5ALAARViwAS8bsQEfPlmwAEVYsAAvG7EADz5ZsABFWLAJLxuxCQ8+WbIFAQAREjmwBS+yDgEKK1gh2Bv0WTAxMxEzETYzIAQXESMRJiYjIgcRhfygsgEFAQwB/AF+l66kBbD9wynm6f4zAdCLdir9WQAAAgAW/+kFvAXEABwAJABkshYlJhESObAWELAj0ACwAEVYsA4vG7EOHz5ZsABFWLAALxuxAA8+WbIeAA4REjmwHi+yEgEKK1gh2Bv0WbAE0LAeELAK0LAAELIXAQorWCHYG/RZsA4QsiIBCitYIdgb9FkwMQUgABE1JiY1MxQXNBIkFyAAERUhFRQWMzI3FwYGASE1NCYjIgYD3P7S/qqbp7WNlAEIngEIASL8mMu9sawxQ9j+BQJsmpSOsBcBVAErPBjUqrYqrgEcoAH+nP65hDXK10bFKC4DbB+4wN0AAv/L/+wEiwROABoAIQCMsiAiIxESObAgELAU0ACwAEVYsA0vG7ENGz5ZsABFWLAALxuxAA8+WbIcAA0REjmwHC+0vxzPHAJdtF8cbxwCcbQfHC8cAnGyjxwBXbTvHP8cAnGyEQcKK1gh2Bv0WbAE0LAcELAK0LAAELIVAQorWCHYG/RZshcADRESObANELIgAQorWCHYG/RZMDEFIiQnJyYmNTMUFzYkMzISERUhFhYzMjcXBgYBITUmJiIGAtjU/uYUA4KGqWgfAQe73fH9PQudd6hnhEHa/m0BzwhyynoU+9EyHcGTlTDF8/7m/v5ihpyHfWFrApYSen2MAAABAJD+vwTtBbAAFgBmshUXGBESOQCwEC+wAEVYsAQvG7EEHz5ZsABFWLAILxuxCB8+WbAARViwAi8bsQIPPlmyBwQCERI5fLAHLxi0AAcQBwJdsArQsBAQshEBCitYIdgb9FmwBxCyFgEKK1gh2Bv0WTAxASMRIxEzETMBIQEWABUQACMnIBECJSEBlQj9/XEBsgEy/iLpAQD+8PQBAQkC/q7++AJx/Y8FsP2kAlz9ih/+1/n+8/7TwgFvAXoGAAABAI7+6gRDBDoAFgBZsg0XGBESOQCwBy+wAEVYsBEvG7ERGz5ZsABFWLAVLxuxFRs+WbAARViwDy8bsQ8PPlmyFBUPERI5fLAULxi0QBRQFAJdsg4BCitYIdgb9FmyABQOERI5MDEBFhYVFAYGByc2JzQmJyMRIxEzETMBIQLNr7xeqnNV4AKNi67y8lUBQQEtAmEp461guogcrUfKdoUJ/lQEOv5QAbAAAAEAm/5LBRMFsAAUAHSyChUWERI5ALAARViwAC8bsQAfPlmwAEVYsAMvG7EDHz5ZsABFWLASLxuxEg8+WbAARViwCC8bsQgRPlmyAgASERI5fLACLxi0YAJwAgJdtDACQAICXbAIELINAQorWCHYG/RZsAIQshABCitYIdgb9FkwMQERIREzERQGIyInNxYzMjURIREjEQGXAn/9vqlFPA4kPnv9gfwFsP2DAn36GLfGEccMugKY/ZcFsAAAAQB+/ksECQQ6ABQAbbILFRYREjkAsABFWLAALxuxABs+WbAARViwAy8bsQMbPlmwAEVYsBIvG7ESDz5ZsABFWLAILxuxCBE+WbICAxIREjl8sAIvGLRAAlACAl2wCBCyDQEKK1gh2Bv0WbACELIQAQorWCHYG/RZMDEBESERMxEGBiMiJzcWMzI1ESERIxEBcQGl8wG6pkU6Dyc7fP5b8wQ6/j0Bw/uFs8ERvw3AAef+SwQ6AAACAFH/6wUeBcQAFgAeAF6yCB8gERI5sAgQsBfQALAARViwAC8bsQAfPlmwAEVYsAgvG7EIDz5Zsg0ACBESObANL7AAELIQAQorWCHYG/RZsAgQshcBCitYIdgb9FmwDRCyGgEKK1gh2Bv0WTAxASAAERUUAgQnIAARNSEmJiMiBwcnNzYBMjY3IRUUFgJxAUABbaD+46n+3P69A9AF38ynlzQxG6YBKZa+Ev0vugXE/oz+tmvB/sKxAQFgAUmJ4PA0E8YNSvr82r0fub8AAAEAW//rBEsFsAAbAGuyCxwdERI5ALAARViwAi8bsQIfPlmwAEVYsAsvG7ELDz5ZsAIQsgABCitYIdgb9FmyBAIAERI5shsLAhESOXywGy8YsAXQshALAhESObALELITAQorWCHYG/RZsBsQshkHCitYIdgb9FkwMQEhNSEXARYWFRQEIyImJjUzFBYzMjY1NCYjIzUC//2SA5EB/obI2v7l6ovifvyHaHmQmZGMBOTMo/5PGOrCxehnv4NfgH9klIWsAAABAF3+dQRGBDoAGwBcsgscHRESOQCwCy+wAEVYsAIvG7ECGz5ZsgABCitYIdgb9FmyBAACERI5shsLAhESObAbL7AF0LIQCwIREjmwCxCyEwEKK1gh2Bv0WbAbELIZBworWCHYG/RZMDEBITUhFwEWFhUUBCMiJiY1MxQWMzI2NTQmIyM1AvT9mwOMAf6Iy9f+6uuJ5HvziWx6lJqTjwN2xJv+Qxnpv8LqaL+BYIWAaZaDq///ADT+SwSJBbAAJgCwUgAAJgHepCkABwGvATUAAP//AC3+SQOiBDoAJgDrVQAAJwHe/53/egAHAa8BC//+AAIAUgAABIMFsAALABQAULIEFRYREjmwBBCwDtAAsABFWLABLxuxAR8+WbAARViwAy8bsQMPPlmyAAEDERI5sAAvsAMQsgwBCitYIdgb9FmwABCyDQEKK1gh2Bv0WTAxAREzESEiJiY1NCQ3AREhIgYVFBYXA4b9/dqd7oABFesBNP7XfJKLeQObAhX6UHTUiMz8A/0vAgaJdXSRAwAAAgBoAAAGsAWwABgAIQBgsgciIxESObAHELAZ0ACwAEVYsAgvG7EIHz5ZsABFWLAALxuxAA8+WbIHCAAREjmwBy+wABCyCgEKK1gh2Bv0WbIRCAAREjmwGdCwBxCyGgEKK1gh2Bv0WbAZELAh0DAxISIkNTQkNyERMxEzNjY3NiYnMxYWBwYGByURISIGFRQWFwJy7P7iARXrATT8S15sBQIhHfUfJgIE88z+sf7WfZCOev3TzvoDAhX7GgKKfUrZTF7MRdT8A8oCBop0dZIBAAIAXv/nBn8GGAAfACsAg7IZLC0REjmwGRCwKtAAsABFWLAGLxuxBiE+WbAARViwAy8bsQMbPlmwAEVYsBgvG7EYDz5ZsABFWLAcLxuxHA8+WbIFAxgREjmwGBCyCwEKK1gh2Bv0WbIQAxgREjmyGgMYERI5sAMQsiIBCitYIdgb9FmwHBCyKAEKK1gh2Bv0WTAxExASMzIXETMRBhYzNjY3NiczFxYHDgIjBCcGIyICJwEmIyIGFRQWMzI3J17kw6Nl8wJOQ3SCBARA7BcvAwJ94oz+/1Vry7ngCwKuR4Nzf3p2jUUGAg4BCgE2eAJC+09PaQK3qb7VWbeDqPmFBLezAQXeAVFowc2eqnJEAAEAPP/nBeMFsAApAGOyIyorERI5ALAARViwCS8bsQkfPlmwAEVYsCIvG7EiDz5ZsgEqCRESObABL7IAAQorWCHYG/RZsAkQsgcBCitYIdgb9FmyDwABERI5sCIQshUBCitYIdgb9FmyGiIJERI5MDETNTM2NjU0ISE1IRYEFRQHFhMVBhYzNjY3NiczFhYHDgIjBiYnNTQmI+ank4T+8/6lAWT6AQb/9gUBPDNlcgQEQPUaKwICetqKp7IIfGcCYs0BbXXRzQHTzOZkP/7+TTlJArajvtViymep+IUEp6o+bn4AAAEAL//iBP4EOgAkAGCyDyUmERI5ALAARViwHS8bsR0bPlmwAEVYsA4vG7EODz5ZsgIBCitYIdgb9FmyBw4dERI5shYlHRESObAWL7IUBworWCHYG/RZsB0QshsBCitYIdgb9FmyIhQWERI5MDElBjM2Njc2JzMWFgcGBiMGJic1NCMjJzM2NTQjIychFhYQBxYXAwECTlpgAwRB7C0YAQTpvJ6gCKLmAsK5y/8GARTL5LC5ButYAo9/lqmGgDnM8gNxg0h/vQSDlsMCpv7KSjCsAAEASP66BDcFsAAiAF+yCyMkERI5ALAXL7AARViwCS8bsQkfPlmwAEVYsBsvG7EbDz5ZsgEJGxESObABL7IAAQorWCHYG/RZsAkQsgcBCitYIdgb9FmyDwABERI5sBsQshIBCitYIdgb9FkwMRMnMzY2NTQhISchFgQVFAcWExUzFRQGByc2NjcjJic1NCYjlwHOkYH+6/7qAwEu7wED5OMDzWRagyQ4CKM8A350AlzDAXNv68MD3MnfZkf+9oasY9hLTTl3STGxhHGFAAEAdP6pBBoEOgAiAF+yBiMkERI5ALAYL7AARViwCS8bsQkbPlmwAEVYsBwvG7EcDz5ZsgEJHBESObABL7IABworWCHYG/RZsAkQsgcBCitYIdgb9FmyEAABERI5sBwQshMBCitYIdgb9FkwMRMnMzI1NCYjISchMhcWFRQHFhcVMxUUBgcnNjY3IyYnNTQjswHh0mtj/uEEASDjeGqtsQK7aFWDJjgGpisBwwGbs45KU8FkWZKeTzzDJKxl2kdNPX5PHoNUpgAAAQBC/+sHfwWwACIAYrIAIyQREjkAsABFWLANLxuxDR8+WbAARViwHy8bsR8PPlmwAEVYsAYvG7EGDz5ZsA0QsgABCitYIdgb9FmwBhCyCAEKK1gh2Bv0WbAfELISAQorWCHYG/RZshcfDRESOTAxASEDAgIGByM1NzY2ExMhERQWMzI2NzYnMxYWBw4CIyImNQQH/mEYDmG5nEooemgPHAOOTD9ufwQEQfYcKQICf+CMw8YE4/3g/vb+04oCygMJ3wEcAt/7vFJktKe72GbHZqf7hMG9AAEAQP/rBloEOgAhAGKyICIjERI5ALAARViwDC8bsQwbPlmwAEVYsB4vG7EeDz5ZsABFWLAFLxuxBQ8+WbAMELIAAQorWCHYG/RZsAUQsgcBCitYIdgb9FmwHhCyEQEKK1gh2Bv0WbIWHgwREjkwMQEhAwIGByMnNzY2NxMhERYWMzI2NzYnMxcWBw4CIyImJwMX/vcTEaitUwIyUEkKFALhAVFFWGcEBEDsFjADAnDHfcLHAQN0/pr+6fQDygULreUBzv0rUmSgmbXIULF8m+Z8vrkAAQCU/+cHhgWwAB0AZbIUHh8REjkAsABFWLAALxuxAB8+WbAARViwGS8bsRkfPlmwAEVYsBcvG7EXDz5ZsABFWLARLxuxEQ8+WbIEAQorWCHYG/RZsgkAFxESObIcABcREjmwHC+yFQEKK1gh2Bv0WTAxAREUFjM2Njc2JzMXFgcOAiMGJic1IREjETMRIREFCk0+cH4EBEH2Fy8DAnzijrvDCf2C/PwCfgWw+7xWYAKzprvYWbeDqPeHBMDD//2XBbD9gwJ9AAABAHf/4wZcBDoAHAB4shsdHhESOQCwAEVYsAQvG7EEGz5ZsABFWLAILxuxCBs+WbAARViwAi8bsQIPPlmwAEVYsBovG7EaDz5ZsgcIAhESOXywBy8YtNAH4AcCXbRAB1AHAl2yAAEKK1gh2Bv0WbAaELINAQorWCHYG/RZshIIAhESOTAxASERIxEzESERMxEGFjM2Njc2JzMWFgcOAiMEAwMa/lDz8wGw8wJSRl5kAwRA6xorAgJwx37+ihMBuv5GBDr+QwG9/S1SZgKmka/OXb9hm+Z8CAGEAAEAXf/rBLsFxQAhAEeyACIjERI5ALAARViwCS8bsQkfPlmwAEVYsAAvG7EADz5ZsAkQsg4BCitYIdgb9FmwABCyFQEKK1gh2Bv0WbIaAAkREjkwMQUiJAInETQSJDMyFwcmIyIGFREUFjM2Njc2JzMXFgcOAgK7rP7rmwKaARet34g/hqKdxcSefYMDAzX1JxMBAoHqFZwBGK0BD68BHZ5ZuETnvP8AtukChXSVzLFYWIvNbgAAAQBV/+sD5wROAB4ARLITHyAREjkAsABFWLATLxuxExs+WbAARViwCy8bsQsPPlmyAAEKK1gh2Bv0WbIFCxMREjmwExCyGAEKK1gh2Bv0WTAxJTY2NzQnMxYHBgYjIgA1NTQ2NjMyFwcmIyIGFRUUFgJaUUUCE+sdAgTStef+4nzikrtgLmOKcouUrwJDR3dnjFKgsAEx+B6X+otCvTq9pCCavwABACH/5wVaBbAAGQBNsgUaGxESOQCwAEVYsAIvG7ECHz5ZsABFWLAWLxuxFg8+WbACELIAAQorWCHYG/RZsATQsAXQsBYQsgkBCitYIdgb9FmyDhYCERI5MDEBITUhFSERFBYzNjY3NiczFhYHDgIjBiYnAeP+PgSA/j5NPnB+BARB9RsrAwJ94oy7wwkE483N/IdUYAK2o7vYYspnqPmFBMDDAAEARP/jBMsEOgAXAE2yBRgZERI5ALAARViwAi8bsQIbPlmwAEVYsBUvG7EVDz5ZsAIQsgABCitYIdgb9FmwBNCwBdCwFRCyCQEKK1gh2Bv0WbIOFQIREjkwMQEhNSEVIREUFjM2Njc2JzMWFgcGBiMEAwGJ/rsDi/6tUkVeYwMEQOssGQEE8cL+iRMDd8PD/fBUZAKEdJOefH43zPIIAYQAAAEAgf/rBP8FxQAoAHOyJikqERI5ALAARViwFi8bsRYfPlmwAEVYsAsvG7ELDz5ZsgMBCitYIdgb9FmyJBYLERI5fLAkLxiycyQBXbJgJAFdsiUBCitYIdgb9FmyBgMlERI5shAlJBESObAWELIeAQorWCHYG/RZshskHhESOTAxARQWMzI2NTMUBgQjICQ1NCUmJjU0JCEyFhYVIzQmIyIGFRQhMxUjIgYBf7eZhq78jf79oP7z/r8BDnaCAS8BCZf6i/2jfJCqATO2v52jAZhlfoFegr5p6cT9VzGmYsXbabp3WXVzY9nIcAAAAgBnBG8C1gXXAAUADQAbALALL7AH0LAHL7AB0LABL7ALELAE0LAELzAxARMzFQMjATMVFhcHJjUBk3DT5l3+1LEDTFCwBJgBPxX+wQFUX3tGSFq+AP//AEcCCQJUAs0ABgARAAD//wBHAgkCVALNAAYAEQAA//8AnQJtBJkDMQBGAZfgAEzNQAD//wCBAm0F0QMxAEYBl4UAZmZAAP//AAT+PwOZAAAAJwBDAAH+/gEGAEMBAAAcALYAAhACIAIDXbQQAiACAnG2gAKQAqACA10wMQABAGMEIAGWBhoACAAdsggJChESOQCwAEVYsAAvG7EAIT5ZsATQsAQvMDEBFwYHFSM1NjYBGnxbA9UBZwYaTYWQmIpg0QAAAQAzBAABZQYAAAgAHbIICQoREjkAsABFWLAELxuxBCE+WbAA0LAALzAxEyc2NzUzFRQGr3xaA9VpBABNg5KeimfRAAABADL+1gFkAMoACAAYsggJChESOQCwCS+yBA0KK1gh2Bv0WTAxEyc2NzUzFQYGrXtVA9oBZv7WTn+Uk4Vd0AAAAQBKBAABfAYAAAgAFgCwAEVYsAgvG7EIIT5ZsATQsAQvMDEBFRYXByYmNTUBHwNafE1pBgCej4ZNPtFniv//AGwEIALvBhoAJgFsCQAABwFsAVkAAP//AEAEAALABgAAJgFtDQAABwFtAVsAAAACADL+wgKqAP8ACQASACGyCxMUERI5sAsQsAXQALATL7IEDQorWCHYG/RZsA7QMDETJzY3NTMVBgcGFyc2NzUzFRQGsX9VA9oBNzH4f1gE2mb+wk6Jncm6bHJkQU6Olsu2Y90AAQBAAAAEHgWwAAsASwCwAEVYsAgvG7EIHz5ZsABFWLAGLxuxBhs+WbAARViwCi8bsQobPlmwAEVYsAIvG7ECDz5ZsAoQsgABCitYIdgb9FmwBNCwBdAwMQEhESMRITUhETMRIQQe/ojz/o0Bc/MBeANy/I4DcsgBdv6KAAEAXP5gBDkFsAATAHwAsABFWLAMLxuxDB8+WbAARViwCi8bsQobPlmwAEVYsA4vG7EOGz5ZsABFWLACLxuxAhE+WbAARViwAC8bsQAPPlmwAEVYsAQvG7EEDz5ZsgYBCitYIdgb9FmwDhCyCAEKK1gh2Bv0WbAJ0LAQ0LAR0LAGELAS0LAT0DAxISERIxEhNSERITUhETMRIRUhESEEOf6I8/6OAXL+jgFy8wF4/ogBeP5gAaDCArTEAXb+isT9TAAAAQCIAgYCRAPbAA0AFrIDDg8REjkAsAMvsQoKK1jYG9xZMDETNDYzMhYVFRQGIyImJ4h5ZGd4d2djeQIDA195eWIlXndzXQD//wCK//UDbwEAACYAEgMAAAcAEgHNAAD//wCK//UFKAEAACYAEgMAACcAEgHNAAAABwASA4YAAAABAEcCCQEhAs0AAwAYsgAEBRESOQCwAy+yAAEKK1gh2Bv0WTAxASM1MwEh2toCCcQAAAYASv/sB18FxAAVACMAJwA0AEEATgC4sihPUBESObAoELAC0LAoELAb0LAoELAm0LAoELA10LAoELBH0ACwJC+wJi+wAEVYsBkvG7EZHz5ZsABFWLASLxuxEg8+WbAD0LADL7IFAxIREjmwB9CwBy+wEhCwDtCwDi+yEBIDERI5sBkQsCDQsCAvsBIQsisCCitYIdgb9FmwAxCyMgIKK1gh2Bv0WbArELA40LAyELA/0LAgELJFAgorWCHYG/RZsBkQskwCCitYIdgb9FkwMQE0NjMyFzYzMhYVFRQGIyInBiMiJjUBNDYzMhYVFRQGIyImNQEnARcDFBYzMjY1NTQmIgYVBRQWMzI2NTU0JiIGFQEUFjMyNjU1NCYiBhUDL6yIlk5OlYavqYqXTk6Uiqz9G6iFiquriIWqAXd9Asd9sE8+QEpOfE0Bx08+QEpOfE37Tk0/PkxNfksBZYKqb2+njEeBqm5uqoYDe4OqqolGgqmpifwbSARySPw4RFdSTEtGVFRKSkRXUkxLRlRUSgLqRVVVSUhGVldJAAABAGwAigIzA6kABgAQALAFL7ICBwUREjmwAi8wMQETIwE1ATMBPPen/uABIKcCGf5xAYYTAYYAAAEAVACKAhsDqQAGABAAsAAvsgMHABESObADLzAxEwEVASMTA/sBIP7gp/f3A6n+ehP+egGPAZAAAQAtAG0DcQUnAAMACQCwAC+wAi8wMTcnAReqfQLHfW1IBHJIAP//ADUCkwK+BagDBwHYAAACkwATALAARViwCS8bsQkfPlmwDdAwMQAAAQBpAowC/wW6AA8AU7IKEBEREjkAsABFWLAALxuxAB8+WbAARViwAy8bsQMfPlmwAEVYsA0vG7ENEz5ZsABFWLAHLxuxBxM+WbIBAw0REjmwAxCyCgMKK1gh2Bv0WTAxARc2MyARESMRJiMiBxEjEQEBIEuQAQPFBX1jJ8UFrHmH/sn+CQHarVn90gMgAAEAXwAABHwFwwAnAI6yHygpERI5ALAARViwFy8bsRcfPlmwAEVYsAYvG7EGDz5ZsicGFxESObAnL7INAgorWCHYG/RZsAHQsAYQsgUBCitYIdgb9FmwCdCwJxCwENCwJxCwI9CwIy+2DyMfIy8jA12yJQIKK1gh2Bv0WbAR0LAjELAU0LAXELIeAQorWCHYG/RZshsjHhESOTAxASEXFAchByE1MzY2NScjNTMnIzUzJzQ2IBYVIzQmIyIGFRchFSEXIQMy/tACQAK4AfvnUicrAqWgBJyXBfoBluj1aV9YZwYBP/7GBQE1AdQuh1XKyglvWzeReZChyurauF9pgmihkHkABQAhAAAGTwWwABsAHwAjACYAKQC9sgoqKxESObAKELAf0LAKELAh0LAKELAm0LAKELAo0ACwAEVYsBovG7EaHz5ZsABFWLAXLxuxFx8+WbAARViwDC8bsQwPPlmwAEVYsAkvG7EJDz5ZsgUJGhESObAFL7AB0LABL7IPAQFdsgMDCitYIdgb9FmwBRCyBwMKK1gh2Bv0WbAl0LAK0LAO0LAFELAd0LAh0LAR0LADELAe0LAi0LAS0LABELAZ0LAn0LAV0LAJELAk0LAXELAp0DAxATMVIxUzFSMRIwEhESMRIzUzNSM1MxEzASERMwEzNSMFMycjATUjATMnBXfY2NjY/f7J/q3809PT0/wBNQFX+/5xlPP+Z+5fjwKML/2jKysDxaCXoP4SAe7+EgHuoJegAev+FQHr/N6Xl5f+fksB10QAAgCY/+wGOgWwAB4AJQCisiEmJxESObAhELAQ0ACwAEVYsBUvG7EVHz5ZsABFWLAZLxuxGRs+WbAARViwHS8bsR0bPlmwAEVYsAovG7EKDz5ZsABFWLATLxuxEw8+WbAdELIAAQorWCHYG/RZsAoQsgUBCitYIdgb9FmwABCwDdCwDtCyIBMVERI5sCAvshEBCitYIdgb9FmwHRCwHNCwHC+wFRCyJAEKK1gh2Bv0WTAxASMRFBYzMjcVBiMgEREjBgYHIxEjESEyFhczETMRMwEzMhE0JyMGM78yPyYvU03+6Hgc9Mqe+gGM1P0YdfK/+1+S9OagA4b9pD04CrwXATUCZa27A/3lBbDDswEH/vn+rQEA9wYA//8AlP/sCDwFsAAmADYAAAAHAFcEcgAAAAcANQAAB1MFsAAfACMAJwArAC4AMQA0AOuyMjU2ERI5sDIQsB7QsDIQsCLQsDIQsCfQsDIQsCrQsDIQsC7QsDIQsDDQALAARViwAi8bsQIfPlmwAEVYsB8vG7EfHz5ZsABFWLAbLxuxGx8+WbAARViwEC8bsRAPPlmwAEVYsA0vG7ENDz5ZsgkQAhESObAJL7AF0LAFL7IPBQFdsAHQsAUQsgcDCitYIdgb9FmwCRCyCgMKK1gh2Bv0WbAt0LAO0LAw0LAS0LAJELAl0LAp0LAh0LAV0LAHELAm0LAq0LAi0LAW0LABELAd0LAZ0LAQELAv0LAs0LAfELAy0LABELA00DAxASETMwMzFSMHMxUhAyMDIQMjAyE1MycjNTMDMxMhEzMBMzcjBTM3IwUzJyMBNyMFNyMBBzMEmAExV/timr8l5P73fvOQ/vKS8n/+/d4luZRi+1gBNGzU/c6fKuoDDp8h6f6muiplAbAmVv0yL1UBpwgQBAcBqf5XoKKg/dsCJf3bAiWgoqABqf5XAan9FaKioqKi/gC+ubkCAR8AAgB8AAAGEAQ6AA0AGwBrsggcHRESObAIELAQ0ACwAEVYsAAvG7EAGz5ZsABFWLAWLxuxFhs+WbAARViwCy8bsQsPPlmwAEVYsA4vG7EODz5ZshEBCitYIdgb9FmwABCyCQEKK1gh2Bv0WbIFEQkREjmyEAkRERI5MDEBMhYXESMRNCYjIREjEQERMxEhMjY3ETMRBgYjAwy7rgLzWmn+rvMBmfMBUGpZAfQB79wEOsDL/rUBQm1j/IoEOvvGAtb97WFoAq79V7zVAAEAXv/tBDAFwwAjAIqyFSQlERI5ALAARViwFi8bsRYfPlmwAEVYsAkvG7EJDz5ZsiMWCRESObAjL7IAAgorWCHYG/RZsAkQsgQBCitYIdgb9FmwABCwDNCwIxCwDtCwIxCwE9CwEy+2DxMfEy8TA12yEAIKK1gh2Bv0WbAWELIbAQorWCHYG/RZsBMQsB7QsBAQsCDQMDEBIRYWMzI3FwYjIAADIzUzNSM1MzYAMzIXByYjIgYHIRUhFSEDav6cBqOYbl8ceID/AP7aCKysrK0NASz9aoUcZmWXogkBY/6cAWQCD66sIcwdASABAo2Ajf8BGx/NIqykjYAAAAQAIQAABdQFsAAaAB8AJAApAOOyDCorERI5sAwQsBzQsAwQsCPQsAwQsCjQALAARViwCy8bsQsfPlmwAEVYsAEvG7EBDz5ZsAsQsiQBCitYIdgb9FmwINCwIC9AEwAgECAgIDAgQCBQIGAgcCCAIAldsB7QsB4vtrAewB7QHgNdQAsAHhAeIB4wHkAeBV2yJgMKK1gh2Bv0WbAn0LAnL0APMCdAJ1AnYCdwJ4AnkCcHXbIAAQorWCHYG/RZsCYQsAPQsB4QsAbQsCAQsA/QshIDCitYIdgb9FmwHNCwHdCwB9CwIBCwCtCwHhCwFNCwJhCwF9AwMQERIxEjNTM1IzUzESEyBBczFSMXBzMVIwYGIwEnIRUhJSEmJyEBIRUhMgHW/bi4uLgCLa0BATzkvQIBvOE2+r0BFQP9vgJD/b0B8EZy/sgB9P4MATF7Ah394wMfoEigAQmIgaAmIqB9hQHCKEjoOwL+OzcAAQAoAAAEDAWwABoAbbIWGxwREjkAsABFWLAZLxuxGR8+WbAARViwDC8bsQwPPlmwGRCyGAEKK1gh2Bv0WbAB0LAZELAU0LAUL7AD0LAUELITBworWCHYG/RZsAbQsBQQsA7QsA4vsgkHCitYIdgb9FmyDQkOERI5MDEBIxYXMwcjBgYHARUhASczMjY3ITchJiMhNyED2dozD8oylxbcyQHS/uH+AwH9cIMW/eYzAeMx2P7zNgOuBPlLZbalrxH93w0CUZldTLabzAAAAQAh/+wEUQWwAB4AkbIbHyAREjkAsABFWLARLxuxER8+WbAARViwBS8bsQUPPlmyExEFERI5sBMvsBfQsBcvsgAXAV2yGAEKK1gh2Bv0WbAZ0LAI0LAJ0LAXELAW0LAL0LAK0LATELIUAQorWCHYG/RZsBXQsAzQsA3QsBMQsBLQsA/QsA7QsAUQshoBCitYIdgb9FmyHgURERI5MDEBFQYCBCMiJxEHNTc1BzU3ETMVNxUHFTcVBxE2NjU1BFEClv7tsmuM3Nzc3Pzh4eHhqrIC/1nS/sOrFAJdV8dXiVfIVwE711rIWolayFn9+wL8+E0AAAEATwAABQ8EOgAXAFyyABgZERI5ALAARViwFy8bsRcbPlmwAEVYsBAvG7EQDz5ZsABFWLALLxuxCw8+WbAARViwBS8bsQUPPlmyFQsXERI5sBUvsADQsBUQsgwBCitYIdgb9FmwCdAwMQEWABMVIzUmJicRIxEGBhUVIzUSADc1MwMo4AEDBPMBgXLzcYLzAwEE3/MDain+kv7sv7jF7yr9agKVKvPHsboBFAFwK9EAAgAoAAAFMwWwABYAHwB4shggIRESObAYELAN0ACwAEVYsAwvG7EMHz5ZsABFWLACLxuxAg8+WbIGAgwREjmwBi+yBQEKK1gh2Bv0WbAB0LAGELAK0LAKL7IPCgFdsgkBCitYIdgb9FmwFNCwBhCwFdCwChCwF9CwDBCyHwEKK1gh2Bv0WTAxJSEVIzUjNTM1IzUzESEyBBUUBAchFSEBITI2NTQmJyEDM/6+/M3Nzc0CLfEBIP7u9P7EAUL+vgEtiJCNfP7E5+fny2vLAsj70NTxA2sBNn59cI4DAAQAcP/sBYkFxQAZACYANAA4AJSyGjk6ERI5sBoQsADQsBoQsCfQsBoQsDfQALA1L7A3L7AARViwCS8bsQkfPlmwAEVYsCQvG7EkDz5ZsAkQsAPQsAMvsg0JAxESObAJELIQAgorWCHYG/RZsAMQshYCCitYIdgb9FmyGQMJERI5sCQQsB3QsB0vsCQQsioCCitYIdgb9FmwHRCyMQIKK1gh2Bv0WTAxARQGICY1NTQ2MzIWFSM0JiMiBhUVFBYyNjUBNDYzMhYVFRQGICY1FxQWMzI2NTU0JiMiBhUFJwEXArGf/wCinoKAoapBNjRCQ2pAARiuh4itp/7oq6pPPkBJTj0+Tf37fgLHfgQlc5KnikeCq5RzNUBUSkpFVUMx/UCGpqaNR4Kpp4kFRFdTS0tGVFRK9EgEckgAAgBM/+sDkAX5ABcAIQBasgEiIxESObABELAY0ACwDC+wAEVYsAAvG7EADz5ZsgYMABESObAGL7IFBworWCHYG/RZsBPQsAAQshcBCitYIdgb9FmwBhCwGNCwDBCyHwEKK1gh2Bv0WTAxBSImNQYjNTI3ETY2MzIWFRUUAgcVFBYzAzY2NTU0JiMiBwLb4e1hYGFgA7KaiKzXsmhs1E1XKyBWAxXr5RO7GAHpv9a0myat/qlnTY56AkRLzGYpP0CyAAAEAJAAAAfCBcAAAwAPAB0AJwCmsh4oKRESObAeELAB0LAeELAE0LAeELAQ0ACwAEVYsCYvG7EmHz5ZsABFWLAkLxuxJB8+WbAARViwBi8bsQYfPlmwAEVYsCEvG7EhDz5ZsABFWLAfLxuxHw8+WbAGELAN0LANL7AC0LACL7IAAgFdsgECCitYIdgb9FmwDRCyEwIKK1gh2Bv0WbAGELIaAgorWCHYG/RZsiAkIRESObIlHyYREjkwMQEhNSEBNDYgFhUVFAYgJjUXFBYzMjY1NTQmIyIGFQEhAREjESEBETMHl/2fAmH9dr4BOL+6/sK9r1xRT1tcUE9c/sf+9P4N9AELAfbyAZyVAi+fwcCmTpzCwqIGYGxsY1FfbW1i+6MECvv2BbD78wQNAAACAG0DlARXBbAADAAUAG0AsABFWLAGLxuxBh8+WbAARViwCS8bsQkfPlmwAEVYsBMvG7ETHz5ZsgEVBhESObABL7IACQEREjmyAwEGERI5sATQsggBCRESObABELAL0LAGELENCitY2BvcWbABELAP0LANELAR0LAS0DAxAQMjAxEjETMTEzMRIwEjESMRIzUhA+h8PnxviYGFhW/+EYp1jQGMBQn+iwF0/owCHP6DAX395AG9/kUBu18AAAIAlv/sBJEETgAVABwAYrICHR4REjmwAhCwFtAAsABFWLAKLxuxChs+WbAARViwAi8bsQIPPlmyGQoCERI5sBkvsg8KCitYIdgb9FmwAhCyEwwKK1gh2Bv0WbIVCgIREjmwChCyFgoKK1gh2Bv0WTAxJQYjIiYCNTQSNjMyFhYXFSERFjMyNwEiBxEhESYEFLe7kfSHkPiEheOEA/0Ad5rErP6Ql3oCHHNecp0BAZOPAQOfi/OQPv64bnoDKnr+6wEecf//AFn/9QXLBZkAJwHV/9kChgAnAXwA+wAAAQcB3AMhAAAAEACwAEVYsAYvG7EGHz5ZMDH//wBU//UGaAW0ACcB1wAdApQAJwF8AagAAAEHAdwDvgAAABAAsABFWLANLxuxDR8+WTAx//8AW//1BlwFqAAnAdkADAKTACcBfAGMAAABBwHcA7IAAAAQALAARViwAS8bsQEfPlkwMf//AFj/9QYaBaMAJwHbACICjgAnAXwBMwAAAQcB3ANwAAAAEACwAEVYsAUvG7EFHz5ZMDEAAgBi/+sEQwX1ABkAJgBbshMnKBESObATELAg0ACwCy+wAEVYsBMvG7ETDz5ZsgALExESObAAL7ICCxMREjmwCxCyBQEKK1gh2Bv0WbAAELIaAQorWCHYG/RZsBMQsiABCitYIdgb9FkwMQEyFyYmIyIHJzc2MyAAERUUAgYjIgA1NTQSFyIGFRQWMzI2NTUmJgI4rncaxYR8ix08bo8BDQEneuOU4/7z/vR7hYR6eYUWiwQEfcLlNbcZLP5O/nI1wf7TpwEk9w3fARLCp6SasNDFVUxfAAEApv8bBPQFsAAHACcAsAQvsABFWLAGLxuxBh8+WbAEELAB0LAGELICAQorWCHYG/RZMDEFIxEhESMRIQT09P2Z8wRO5QXU+iwGlQABAED+8wTBBbAADAA1ALADL7AARViwCC8bsQgfPlmwAxCyAgEKK1gh2Bv0WbAF0LAIELIKAQorWCHYG/RZsAfQMDEBASEVITUBATUhFSEBA4/97gNE+38CT/2xBEf89gISAkP9c8OXAsgCxpjD/XMAAQCeAm0D7wMxAAMAEQCwAi+yAQEKK1gh2Bv0WTAxASE1IQPv/K8DUQJtxAABADsAAASSBbAACAA8sgAJChESOQCwBy+wAEVYsAEvG7EBHz5ZsABFWLADLxuxAw8+WbIAAQMREjmwBxCyBgEKK1gh2Bv0WTAxAQEzASMDIzUhAkEBeNn+F8XY0QFnASsEhfpQAkHFAAMAXv/sB98ETgAaACoAOQBysgc6OxESObAHELAi0LAHELAy0ACwAEVYsAQvG7EEDz5ZsABFWLAJLxuxCQ8+WbAEELAW0LAWL7IHFgQREjmwEtCwEi+yFBYEERI5sBYQsh4BCitYIdgb9FmwBBCyJwEKK1gh2Bv0WbAu0LAeELA30DAxARQGBiMiJicCISImJjU1NBI2MyATEiEyFhYXBzQmIyIHBgcVFhcWMzI2NQUUFjMyNjc3NSYnJiMiBgffgOaQjelVqv7fj+WBgeSOASSpqQEkjuSBAe+SeqRuKA8PLmufeZX6XZJ7aawrBw8obqR5kgIRmP2Qo6f+to7/mRWYAQCP/rkBR4/9lwSaxslKQiRFVcPDogWdw7OQGiRCSsnDAAAB/6/+SwKoBhUAFQA9sgIWFxESOQCwAEVYsA4vG7EOIT5ZsABFWLADLxuxAxE+WbIIAQorWCHYG/RZsA4QshMBCitYIdgb9FkwMQUUBiMiJzcWMzI3ETQ2MzIXByYjIhUBkLaqQj8SLCWKAsCyP1kZKjKjT7C2E70NnQT0s8MVuQu4AAACAGUBAQQVA/oAFQArAHiyECwtERI5sBAQsBzQALAZL7AD0LADL7AI0LAIL7ADELAK0LAIELINAQorWCHYG/RZsAMQshIBCitYIdgb9FmwDRCwFdCwGRCwHtCwHi+wGRCwINCwHhCyIwEKK1gh2Bv0WbAZELIoAQorWCHYG/RZsCMQsCvQMDETNjYzNhcXFjMyNxUGIyInJyYHIgYHFTY2MzYXFxYzMjcVBiMiJycmByIGB2UwhEJSTJxGUYRlZn9RRphPVEKHMDCAQlRPmEZRh2Vmg1FGnExSQoQwA44yOAIiTiB+2WogTCQCQjzLMjgCJEwgftlqIE4iAkI8AAEAkQCAA+8EwwATADcAsBMvsgABCitYIdgb9FmwBNCwExCwB9CwExCwD9CwDy+yEAEKK1gh2Bv0WbAI0LAPELAL0DAxASEHJzcjNSE3ITUhNxcHMxUhByED7/3igG1dsAEhfv5hAhCGbmO9/tF9AawBZOQ+psnfyu0+r8rf//8APAATA40EawBnACAAAACLQAA5mgAHAZf/nv2m//8AgAATA+AEawBnACIAAACLQAA5mgAHAZf/4v2mAAIAJAAAA+sFsAAFAAkAOLIGCgsREjmwBhCwBNAAsABFWLAALxuxAB8+WbAARViwAy8bsQMPPlmyBgADERI5sggAAxESOTAxATMBASMBAQMTEwGkxAGD/oDF/n4B4e3y7AWw/Sf9KQLXAdb+Kv4pAdcA//8AoQCrAbwFBwAnABIAGgC2AQcAEgAaBAcACQCwAC+wEdwwMQAAAgBjAn8CPgQ5AAMABwAqsgAICRESObAF0ACwAi+wAEVYsAYvG7EGGz5ZsgAIAhESObAAL7AE0DAxASMRMwEjETMBAJ2dAT6dnQJ/Abr+RgG6AAEARf9nAVoBBgAIAAwAsAQvsADQsAAvMDEXJzY3NTMVBgbFgEkDyQFTmU1ze2RPXbr//wAtAAAFGgYVACYASgAAAAcASgJEAAAAAgAYAAAEFwYVABcAGwBzsgkcHRESObAJELAZ0ACwAEVYsAkvG7EJIT5ZsABFWLAELxuxBBs+WbAARViwGi8bsRobPlmwAEVYsBcvG7EXDz5ZsABFWLAZLxuxGQ8+WbAEELAT0LIWAQorWCHYG/RZsAHQsAkQsg8BCitYIdgb9FkwMTMRIzUzNT4CMzIWFwcmIyIGFRUzFSMRISMRM72lpQFqwohQk08linJvZNXVAmfz8wOGtEp/tlwiGskwYWFEtPx6BDoAAQAtAAAELAYVABYAY7ISFxgREjkAsABFWLASLxuxEiE+WbAARViwDi8bsQ4bPlmwAEVYsAkvG7EJDz5ZsABFWLAWLxuxFg8+WbASELICAQorWCHYG/RZsA4QsAXQsA4QsgsBCitYIdgb9FmwCNAwMQEmIyIVFTMVIxEjESM1MzU2NjMyBREjAzlmSsTc3POlpQHXxHoBRPMFPw64W7T8egOGtGG3wzD6GwACAC0AAAaTBhUAKAAsALWyFC0uERI5sBQQsCrQALAARViwCC8bsQghPlmwAEVYsBYvG7EWIT5ZsABFWLArLxuxKxs+WbAARViwIS8bsSEbPlmwAEVYsBEvG7ERGz5ZsABFWLAELxuxBBs+WbAARViwKC8bsSgPPlmwAEVYsCUvG7ElDz5ZsABFWLAqLxuxKg8+WbAhELIiAQorWCHYG/RZsCbQsAHQsAgQsg0BCitYIdgb9FmwFhCyHAEKK1gh2Bv0WTAxMxEjNTM1NDYzMhcHJiMiFRUhNT4CMzIWFwcmIyIGFRUzFSMRIxEhESEjETPSpaXItEBIBig1rgF0AWrCiFCTTyaIc29k1dXz/owEzvPzA4a0Y7TEEr4Is2BKf7ZcIhrJMGFhRLT8egOG/HoEOgABAC0AAAaTBhUAJwClshMoKRESOQCwAEVYsBUvG7EVIT5ZsABFWLAILxuxCCE+WbAARViwBC8bsQQbPlmwAEVYsBAvG7EQGz5ZsABFWLAfLxuxHxs+WbAARViwJy8bsScPPlmwAEVYsCQvG7EkDz5ZsABFWLAZLxuxGQ8+WbAEELIBAQorWCHYG/RZsAgQsg0BCitYIdgb9FmwFRCyHAEKK1gh2Bv0WbABELAm0LAi0DAxMxEjNTM1NDYzMhcHJiMiFRUhNTY2MzIFESMRJiMiFRUzFSMRIxEhEdKlpci0QEgGKDWuAXQB18R6AUTzZkrE3Nzz/owDhrRjtMQSvgizYGG3wzD6GwU/DrhbtPx6A4b8egABAC3/7ATRBhUAJACFshMlJhESOQCwAEVYsA8vG7EPGz5ZsABFWLAaLxuxGhs+WbAARViwIy8bsSMbPlmwAEVYsAovG7EKDz5ZsCMQsgAHCitYIdgb9FmwChCyBQEKK1gh2Bv0WbAAELAN0LAO0LAjELIfAQorWCHYG/RZshMBCitYIdgb9FmwDhCwGNCwGdAwMQEjERQWMzI3FQYjIBERIzUzNSYjIhURIxEjNTM1NDYzMhYXETMEy78xPyYvU03+6LKyRWyj86WlwrBl8XK/A4b9pD43CrwXATUCZbT4ILn7ZwOGtGK2wzgx/o4AAQBL/+wGgAYYAEwAp7JGTU4REjkAsABFWLBHLxuxRyE+WbAARViwQC8bsUAbPlmwAEVYsA8vG7EPGz5ZsABFWLBLLxuxSxs+WbAARViwCS8bsQkPPlmwAEVYsCwvG7EsDz5ZsEsQsgAHCitYIdgb9FmwCRCyBAEKK1gh2Bv0WbAAELAN0LAO0LBHELIUBworWCHYG/RZsEAQsiAHCitYIdgb9FmwLBCyNAcKK1gh2Bv0WTAxASMRFDMyNxUGIyImJxEjNTM1NCYjIgYVFB4CFSM0JiMiBhUUFgQWFhUUBiMiJiY1MxYWMzI2NTQmJicmNTQ2MzIXJjU0NjMyFhUVMwZ5v3EmL1NNh5ABrKxgWE9YHSEc9GhWUGVeAR6jT/LEhdB07AV4Y2Bka/hTtuy2W00t2a7J3r8Dhv23iAq8F6qiAk60WGJpVEU6aWZ5TUZdSj44Pj9XeleStWCoYVZdSTtBRDQoWKeMvBdsT4GlysVPABYAWf5yB+wFrgANABoAKAA3AD0AQwBJAE8AVgBaAF4AYgBmAGoAbgB2AHoAfgCCAIYAigCOAcCyEI+QERI5sBAQsADQsBAQsBvQsBAQsDDQsBAQsDzQsBAQsD7QsBAQsEbQsBAQsErQsBAQsFDQsBAQsFfQsBAQsFvQsBAQsGHQsBAQsGPQsBAQsGfQsBAQsG3QsBAQsHDQsBAQsHfQsBAQsHvQsBAQsH/QsBAQsITQsBAQsIjQsBAQsIzQALA9L7AARViwRi8bsUYfPlmyfUQDK7J8eQMrsniBAyuygDkDK7IKRj0REjmwCi+wA9CwAy+wDtCwDi+wChCwD9CwDy+ybw4PERI5fLBvLxiyUAsKK1gh2Bv0WbIVUG8REjmwChCyHgsKK1gh2Bv0WbADELIlCworWCHYG/RZsA8QsCnQsCkvsA4QsC7QsC4vsjQLCitYIdgb9FmwPRCwa9CwZ9CwY9CwPtCyPwwKK1gh2Bv0WbBl0LBp0LBt0LA80LA5ELBB0LBGELJHDAorWCHYG/RZsFvQsFfQsErQsEYQsGDQsFzQsFjQsEvQsEQQsE7QsA4QslELCitYIdgb9FmwRxCwX9CwDxCydgsKK1gh2Bv0WbB4ELCE0LB5ELCF0LB8ELCI0LB9ELCJ0LCAELCM0LCBELCN0DAxARQGIyImJzU0NjMyFhcTETMyFhUUBxYWFRQjATQmIyIGFRUUFjMyNjUBMxEUBiMiJjUzFDMyNjUBETMVMxUhNTM1MxEBESEVIxUlNSERIzUBFTMyNTQnEzUhFSE1IRUhNSEVATUhFSE1IRUhNSEVEzMyNTQmIyMBIzUzNSM1MxEjNTMlIzUzNSM1MxEjNTMDN4FkZoACfmhlgAJDvGJyVDI00P6PSkFASkpCQEkDulxpUlhtXWgpNvnEccQFKMdv+G0BNcQF7AE2b/xcfmdiywEW/VsBFf1cARQCCgEW/VsBFf1cARS8XXY6PF388XFxcXFxcQcib29vb29vAdRieXhedV98eF7+swIlSU1UIA1GLZsBSEVOTkVwRU5ORQFP/oZOXVFTWzYs/MkBO8pxccr+xQYfAR10qal0/uOp/LapU1IEA0p0dHR0dHT5OHFxcXFxcQPEUCke/tP8fvr8Ffl+/H76/BX5AAUAXP3VB9cIcwADABwAIAAkACgATACwIS+wJS+wANCwAC+wIRCwAtCwAi+yIAIAERI5sCAvsB3QsB0vsATQsAQvsg0AAhESObANL7AU0LAUL7IHBBQREjmyGRQEERI5MDEJAwU0Njc2NjU0JiMiBgczNjYzMhYVFAcGBhUXIxUzAzMVIwMzFSMEGAO//EH8RAQPHiRKXKeVkKACywI6Kzk4XVsvysrKSwQEAgQEBlL8MfwxA8/xOjoYJ4dKgJeLfzM0QDRfPEFcTFuq/UwECp4EAAEAOgAAA+oFsAAGADIAsABFWLAFLxuxBR8+WbAARViwAS8bsQEPPlmwBRCyAwEKK1gh2Bv0WbIAAwUREjkwMQEBIwEhNSED6v3U9AIs/UQDsAUp+tcE7cMAAAIAT/5WBBcETgAbACYAg7IfJygREjmwHxCwDNAAsABFWLAELxuxBBs+WbAARViwBy8bsQcbPlmwAEVYsAwvG7EMET5ZsABFWLAYLxuxGA8+WbIGBBgREjmwDBCyEgEKK1gh2Bv0WbIQEhgREjmyFgQYERI5sBgQsh8BCitYIdgb9FmwBBCyJAEKK1gh2Bv0WTAxEzQ2NjMyFzczERQAIyImJzcWMzI2NTUGIyImJjcUFjMyNxEmIyIGT23Nhb9pENH+++9VuUk1gpCOg2quf8xy8494lUZFlHyNAiag+42Gcvwc9v72Ly2wTJybFneM/J2fwIEB2XvBAAAB/7D+SwGOAM0ADQAusgMODxESOQCwDi+wAEVYsAUvG7EFET5ZsgoBCitYIdgb9FmwDhCwDdCwDS8wMSURFAcGIyInNxYzMjURAY5wW5VGOA4kPXzN/vfIYk8RxgyyAQUAAAEAXP6aAU8AtQADABIAsAQvsALQsAIvsAHQsAEvMDEBIxEzAU/z8/6aAhsAAgB1BNAC9wbcAAwAIAB7ALADL7AG0LAGL0ALDwYfBi8GPwZPBgVdsAMQsgkGCitYIdgb9FmwBhCwDNCwDC+wBhCwENCwEC+wE9CwEy9ADQ8THxMvEz8TTxNfEwZdsBAQsBbQsBYvsBMQshoICitYIdgb9FmwEBCyHQgKK1gh2Bv0WbAaELAg0DAxARQGICY1MxQWMzI2NRMUBiMiJiMiBhUnNDYzMhYzMjY1Avew/t6wr0xGSEqQX0c4gSofKmhhRS+ILB4sBbBle3tlNTo8MwEPS2tHMiUbTWxHMiQAAgB1BNUC9gcIAA0AHABZALADL7AH0LAHL0ALDwcfBy8HPwdPBwVdsAMQsgoGCitYIdgb9FmwBxCwDdCwDS+wBxCwDtCwDi+wFNCwFC+yDw4UERI5shUMCitYIdgb9FmyGw4PERI5MDEBFAYjIiY1MxQWMzI2NScnNjY1NCM3MhYVFAYHBwL2r5GSr61QREVN3whIP5IHnp9ORAEFsGJ5eWI0OTozGXYCFxo2YFBELzoIOgAAAgB1BNMDAAZ+AA0AEQBdALADL7AG0LAGL0ALDwYfBi8GPwZPBgVdsAMQsgoGCitYIdgb9FmwBhCwDdCwDS+wBhCwENCwEC+wDtCwDi9ADw8OHw4vDj8OTw5fDm8OB12wEBCwEdAZsBEvGDAxARQGIyImNTMUFjMyNjUnMwcjAwCvlpWxsUxJR0xltqmABbBhfHpjNDw8NM7AAAIAdQTnA1wG0QAGABoAjQCwAS+wA9CwAy+wBNAZsAQvGLAA0BmwAC8YsAMQsAXQsAUvQAkPBR8FLwU/BQRdsgIFAxESObAK0LAKL0AJPwpPCl8KbwoEXbAN0LANL0APDw0fDS8NPw1PDV8Nbw0HXbAKELAQ0LAQL7ANELIUBgorWCHYG/RZsAoQshcGCitYIdgb9FmwFBCwGtAwMQEjJwcjJTM3FAYjIiYjIgYVJzQ2MzIWMzI2NQNcwbOywQEqk7pZPTF7JBspWlk8Kn8mGiwE546O7d8+X0IsGxhAYEEtHAACAHUE5wQKBssABgAVAGAAsAEvsAPQsAMvsATQGbAELxiwANAZsAAvGLADELAF0LAFL0AJDwUfBS8FPwUEXbICAwUREjmwARCwB9CwBy+wDdCwDS+yCAcNERI5sg4GCitYIdgb9FmyFAgHERI5MDEBIycHIyUzFyc2NjU0IzcyFhUUBgcHA1zBs7LBARa7uQc/OIEHiYxJOAEE56Ki+nR9BRgdPmlZSzdBBzsAAv9MBNoDXAaDAAYACgBbALADL7AE0BmwBC8YsADQGbAALxiwAxCwAdCwAS+wBtCwBi9ACQ8GHwYvBj8GBF2yAgMGERI5sAMQsAjQsAgvsAfQGbAHLxiwCBCwCtCwCi+2DwofCi8KA10wMQEjJwcjJTMFIwMzA1zVn5/UASOh/oed190E2o6O+lwBCwACAHoE5wSLBpAABgAKAFsAsAMvsAXQsAUvsADQsAAvQAkPAB8ALwA/AARdsAMQsALQGbACLxiyBAMAERI5sAbQGbAGLxiwAxCwCdCwCS+wB9CwBy+2DwcfBy8HA12wCRCwCtAZsAovGDAxATMFIycHIwEzAyMBnaEBI9Sfn9UDM97YnQXh+o6OAan+9QAAAgB1BNQDAAZ+AA0AEQBdALADL7AG0LAGL0ALDwYfBi8GPwZPBgVdsAMQsgoGCitYIdgb9FmwBhCwDdCwDS+wBhCwEdCwES+wDtCwDi9ADw8OHw4vDj8OTw5fDm8OB12wERCwENAZsBAvGDAxARQGIyImNTMUFjMyNjUlMxcjAwCvlpWxsUxJR0z+lLdygAWxYXx6YzQ8PDTNwAAAAQCUBGkBqQYrAAgAHbIICQoREjkAsABFWLAALxuxACE+WbAE0LAELzAxARcGBwcjNTQ2ASaDPwIB01UGK1NtfIaFWbYAAAIACQAABJQEjQAHAAoARgCwAEVYsAQvG7EEHT5ZsABFWLACLxuxAg8+WbAARViwBi8bsQYPPlmyCQQCERI5sAkvsgABCitYIdgb9FmyCgQCERI5MDElIQcjATMBIwEhAwM//h5f9QHX3wHV9v4GAVSq+fkEjftzAbIBugADAHYAAAQKBI0ADgAWAB8ApLIeICEREjmwHhCwAtCwHhCwEdAAsABFWLABLxuxAR0+WbAARViwAC8bsQAPPlmyFwEAERI5sBcvtK8XvxcCXbRvF38XAnGy/xcBcbIPFwFytI8XnxcCcrJfFwFyss8XAXGyPxcBcbQfFy8XAl20vxfPFwJysg8BCitYIdgb9FmyCA8XERI5sAAQshABCitYIdgb9FmwARCyHgEKK1gh2Bv0WTAxMxEhMhYVFAYHFhYVFAYjAxEzMjY1NCcnMzY2NTQmIyN2Aa/e61lbYHDi3eLkZmS0+tRbY2dlxgSNpZxPgyMXj2OjqwH7/sdVQZ4FqgJIRU9GAAABAE//8ARDBJ0AGwBOsgMcHRESOQCwAEVYsAsvG7ELHT5ZsABFWLADLxuxAw8+WbIPCwMREjmwCxCyEgEKK1gh2Bv0WbADELIYAQorWCHYG/RZshsDCxESOTAxAQYEIyIAETU0NjYzMgQXIyYmIyARFRQWMzI2NwRCEf732ez+7H7snNYBBBTzDH1y/u2Gh3h8DQGEv9UBLAELRKn/itrCcGn+jki5tWJwAAIAdgAABCoEjQALABMARrITFBUREjmwExCwAtAAsABFWLABLxuxAR0+WbAARViwAC8bsQAPPlmwARCyDAEKK1gh2Bv0WbAAELINAQorWCHYG/RZMDEzESEyBBYXFRQGBCMDETMgEzUQJXYBe6QBA5ACj/75qIOCAUcG/skEjYr7nz2j/osDyfz5AVxDAWAIAAEAdgAAA7UEjQALAE4AsABFWLAGLxuxBh0+WbAARViwBC8bsQQPPlmyCwYEERI5sAsvsgABCitYIdgb9FmwBBCyAgEKK1gh2Bv0WbAGELIIAQorWCHYG/RZMDEBIREhFSERIRUhESEDX/4KAkz8wQM8/bcB9gH4/srCBI3E/vIAAQB2AAADngSNAAkAQACwAEVYsAQvG7EEHT5ZsABFWLACLxuxAg8+WbIJBAIREjmwCS+yAAEKK1gh2Bv0WbAEELIGAQorWCHYG/RZMDEBIREjESEVIREhA1v+DvMDKP3LAfIB2/4lBI3E/tUAAQBU//AESASdABwAXLIaHR4REjkAsABFWLAKLxuxCh0+WbAARViwAy8bsQMPPlmyDgMKERI5sAoQshEBCitYIdgb9FmwAxCyFwEKK1gh2Bv0WbIbAwoREjmwGy+yGQcKK1gh2Bv0WTAxJQcGISIAETUQADMyFhcjJiYjIBEVFBYgNzUjNSEESBeW/tX4/twBFvTX+hntEnls/uSgAShG+QHrkxiLAS4BCUEBCQEsw8BkXP6JQLe6OcixAAABAHYAAARoBI0ACwCGALAARViwBi8bsQYdPlmwAEVYsAovG7EKHT5ZsABFWLAALxuxAA8+WbAARViwBC8bsQQPPlmyCQYAERI5sAkvtK8JvwkCXbI/CQFxss8JAXGyPwkBcrL/CQFxsg8JAXK0bwl/CQJxtN8J7wkCXbJfCQFytBwJLAkCXbICAQorWCHYG/RZMDEhIxEhESMRMxEhETMEaPP99PPzAgzzAdv+JQSN/hEB7wABAIUAAAF3BI0AAwAdALAARViwAi8bsQIdPlmwAEVYsAAvG7EADz5ZMDEhIxEzAXfy8gSNAAABACT/8ANkBI0ADgAisgUPEBESOQCwAEVYsAUvG7EFDz5ZsgsBCitYIdgb9FkwMQEzERQGIyImNTMUMzI2NQJx8+OyyuH0t0tXBI384K7PwK+tXl0AAAEAdgAABGgEjQAMAEsAsABFWLAELxuxBB0+WbAARViwCC8bsQgdPlmwAEVYsAIvG7ECDz5ZsABFWLALLxuxCw8+WbIGAgQREjmwBhCwAdCyCgEGERI5MDEBBxEjETMRNwEhAQEhAfCH8/NuAU8BLP5DAdP+3gHbg/6oBI39/YYBff33/XwAAQB2AAADlASNAAUAKACwAEVYsAQvG7EEHT5ZsABFWLACLxuxAg8+WbIAAQorWCHYG/RZMDElIRUhETMBaQIr/OLzwsIEjQAAAQB2AAAFjwSNAA4AYLIBDxAREjkAsABFWLAALxuxAB0+WbAARViwAi8bsQIdPlmwAEVYsAQvG7EEDz5ZsABFWLAILxuxCA8+WbAARViwDC8bsQwPPlmyAQAEERI5sgcABBESObIKAAQREjkwMQkCIREjERMBIwETESMRAbIBUQFOAT7yGf6gqP6hGfIEjfy1A0v7cwE7Ajr8iwNw/cv+xQSNAAABAHYAAARnBI0ACQBFALAARViwBS8bsQUdPlmwAEVYsAgvG7EIHT5ZsABFWLAALxuxAA8+WbAARViwAy8bsQMPPlmyAgUAERI5sgcFABESOTAxISMBESMRMwERMwRn8v308/MCDPIDG/zlBI385AMcAAACAE//8ARvBJ0ADgAcAEayAx0eERI5sAMQsBLQALAARViwCy8bsQsdPlmwAEVYsAMvG7EDDz5ZsAsQshIBCitYIdgb9FmwAxCyGQEKK1gh2Bv0WTAxARAAIyIAETU0EjYzMgARJzQmIyIGFRUUFjMyNjUEb/7f7ez+2oXwm/ABIPKWiIaYmYeIlAIs/vj+zAE1AQwurAEHi/7H/vUIt8DAtzWyx8O2AAACAHYAAAQsBI0ACgATAE2yBBQVERI5sAQQsAzQALAARViwAy8bsQMdPlmwAEVYsAEvG7EBDz5ZsgsBAxESObALL7IAAQorWCHYG/RZsAMQshIBCitYIdgb9FkwMQERIxEhMhYVFAYHJzMyNjU0JiMjAWnzAeXU/fHU/vJod3ll8wGZ/mcEjdWtqcYDxFhUV2kAAAIATP8wBGwEnQAUACIARrIIIyQREjmwCBCwH9AAsABFWLARLxuxER0+WbAARViwCC8bsQgPPlmwERCyGAEKK1gh2Bv0WbAIELIfAQorWCHYG/RZMDEBFAYHFwclBiMiJgInNTQSNjMyABEnNCYjIgYVFRQWMzI2NQRsbmPPnf72MjSa8oQBgvGc7wEi8ZeJhpeXiImVAiyj8UiYiMkJiwEBqjmrAQWO/sj+9Ai3wMO2M7DJw7YAAgB2AAAEOQSNAA0AFgBhsgUXGBESObAFELAP0ACwAEVYsAQvG7EEHT5ZsABFWLACLxuxAg8+WbAARViwDS8bsQ0PPlmyDgIEERI5sA4vsgABCitYIdgb9FmyCgAOERI5sAQQshUBCitYIdgb9FkwMQEjESMRITIWFRQHARUhATMyNjU0JiMjAkjf8wHI2vDhARL+/P401WxsaW/VAan+VwSNt6rrW/4lCwJrX05RYAABAD7/8APvBJ0AJQBjsgkmJxESOQCwAEVYsAkvG7EJHT5ZsABFWLAcLxuxHA8+WbIDHAkREjmyDQkcERI5sAkQshABCitYIdgb9FmwAxCyFQEKK1gh2Bv0WbIhHAkREjmwHBCyIwEKK1gh2Bv0WTAxATQmJCYmNTQ2MzIWFSM0JiMiBhUUFhcWFhUUBiMiJiY1MxQhMjYDAmj+z7BT9sPS/vN4ZV9ucY/dwPjMiuV+9AEAYW8BMkJPTGKDXJK7yKBRXU1AOkwjNrKOma5dqnHASgABACQAAAQWBI0ABwAuALAARViwBi8bsQYdPlmwAEVYsAIvG7ECDz5ZsAYQsgABCitYIdgb9FmwBNAwMQEhESMRITUhBBb+fvP+gwPyA8n8NwPJxAABAGf/8AQeBI0ADwA1sgwQERESOQCwAEVYsAgvG7EIHT5ZsABFWLAELxuxBA8+WbIMAQorWCHYG/RZsAgQsA/QMDEBERQEICQ1ETMRFBYzMjcRBB7+//5K/wDxfmzlBASN/QG+4N3BAv/9AHNo1AMHAAABAAkAAARyBI0ACAAxALAARViwAy8bsQMdPlmwAEVYsAcvG7EHHT5ZsABFWLAFLxuxBQ8+WbIBAwUREjkwMQEXNwEhASMBIQIqExIBIgEB/kb2/kcBAQE4TUsDV/tzBI0AAAEAKAAABeUEjQAMAFkAsABFWLABLxuxAR0+WbAARViwCC8bsQgdPlmwAEVYsAsvG7ELHT5ZsABFWLADLxuxAw8+WbAARViwBi8bsQYPPlmyAAEDERI5sgUBAxESObIKAQMREjkwMQETMwEjAwMjATMTEzMESq/s/ubr2Nvr/ubssdjWASsDYvtzA0H8vwSN/JwDZAABABUAAARKBI0ACwBTALAARViwAS8bsQEdPlmwAEVYsAovG7EKHT5ZsABFWLAELxuxBA8+WbAARViwBy8bsQcPPlmyAAEEERI5sgYBBBESObIDAAYREjmyCQYAERI5MDEBEyEBASEDAyEBASECJ/IBHP6JAYz+4P/6/uQBgf6IARoC+gGT/b79tQGZ/mcCSwJCAAEABQAABDYEjQAIADEAsABFWLABLxuxAR0+WbAARViwBy8bsQcdPlmwAEVYsAQvG7EEDz5ZsgABBBESOTAxAQEhAREjEQEhAh0BDgEL/l3y/mQBCwJ6AhP9B/5sAaEC7AAAAQBBAAAD8wSNAAkARACwAEVYsAcvG7EHHT5ZsABFWLACLxuxAg8+WbIAAQorWCHYG/RZsgQAAhESObAHELIFAQorWCHYG/RZsgkFBxESOTAxJSEVITUBITUhFQF4Anv8TgJs/ZUDoMLCjQM8xIoAAAIAS//1AqoDIAANABcARrIDGBkREjmwAxCwENAAsABFWLAKLxuxChk+WbAARViwAy8bsQMPPlmwChCyEAIKK1gh2Bv0WbADELIVAgorWCHYG/RZMDEBFAYjIiY1NTQ2MzIWFSc0IyIHFRQzMjcCqp6Qkp+ekZCgu3VyA3dvBAE+n6qqnpidrq2eDKmfuKmaAAEAgAAAAgIDEwAGADEAsABFWLAFLxuxBRk+WbAARViwAS8bsQEPPlmwBRCwBNCwBC+yAwIKK1gh2Bv0WTAxISMRBzUlMwICuckBbxMCOjCSdwABADwAAAKyAyAAFwBZsggYGRESOQCwAEVYsA8vG7EPGT5ZsABFWLAALxuxAA8+WbIWAgorWCHYG/RZsgIWABESObIDDwAREjmwDxCyCAIKK1gh2Bv0WbIMAA8REjmyFQAPERI5MDEhITUBNjU0JiMiBhUjNDYzMhYVFA8CIQKy/ZwBHXE2NDpCuqmHj5xqYowBc30BBWdDKjVCNnSZgHNrZldxAAEAN//1AqkDIAAkAH+yHiUmERI5ALAARViwDS8bsQ0ZPlmwAEVYsBcvG7EXDz5ZsgAXDRESOXywAC8YtFAAYAACcbaAAJAAoAADXbANELIGAgorWCHYG/RZsgoABhESObAAELIkAgorWCHYG/RZshIkABESObAXELIeAgorWCHYG/RZshskHhESOTAxATMyNTQmIyIGFSM0NjMyFhUUBxYVFAYjIiY1MxQWMzI2NTQnIwEMUYQ2PjBBuqWCj6OHlbGPh6u6RTw/PYZcAdJhIzUnI2N8eWl3MymOan5/cSY1NyplAQAAAgA1AAACvgMVAAoADgBJALAARViwCS8bsQkZPlmwAEVYsAQvG7EEDz5ZsgEJBBESObABL7ICAgorWCHYG/RZsAbQsAEQsAvQsggLBhESObINCQQREjkwMQEzFSMVIzUhJwEzATM1BwJfX1+7/poJAW29/ou6DgE6l6OjeQH5/iXyFgAAAQBP//UCrgMVABoAarINGxwREjkAsABFWLACLxuxAhk+WbAARViwDS8bsQ0PPlmwAhCyAwIKK1gh2Bv0WbIHAg0REjmwBy+yGAIKK1gh2Bv0WbIFGAcREjmwDRCyEwIKK1gh2Bv0WbIRExgREjmyGhgTERI5MDETEyEVIQc2MzIWFRQGIyImJzMWMzI1NCYjIgdiNAHs/qwUPkeDjKOMga0CuQVydUNCQzUBfwGWlpQbhnp4mYRjUn04RCgAAAIATf/1ArkDIgATAB4AW7IUHyAREjmwFBCwDNAAsABFWLAALxuxABk+WbAARViwDC8bsQwPPlmwABCyAQIKK1gh2Bv0WbIGDAAREjmwBi+yFAIKK1gh2Bv0WbAMELIaAgorWCHYG/RZMDEBFSIGBzYzMhYVFAYjIiY1NTQ2MwMiBgcVFDMyNjU0AjKRiQ1Ha3WHqIaTq/Deli1CD381RAMimV9iRY56d5mnmzHS6P5XJBckkUY2dAABADYAAAKuAxUABgAyALAARViwBS8bsQUZPlmwAEVYsAIvG7ECDz5ZsAUQsgQCCitYIdgb9FmyAAQFERI5MDEBASMBITUhAq7+rcQBU/5MAngCrP1UAn+WAAADAEv/9QKqAyAAEwAcACQAlrIHJSYREjmwBxCwFNCwBxCwItAAsABFWLARLxuxERk+WbAARViwBy8bsQcPPlmyIgcRERI5fLAiLxi2gCKQIqAiA120UCJgIgJxtAAiECICcbRAIlAiAl200CLgIgJxshkCCitYIdgb9FmyAiIZERI5sgwZIhESObAHELIUAgorWCHYG/RZsBEQsh8CCitYIdgb9FkwMQEUBxYVFAYjIiY1NDcmNTQ2MzIWATI2NCYiBhQWEzQiFRQWMjYCl3GEoY6MpIRxm4GCm/7kNUBBakBAl8QzYDECQXQ3PYBqenlrgD03dGl2dv3gM1owMFozAatWVicwMAACAEb/9wKjAyAAEwAfAGCyFCAhERI5sBQQsAjQALAARViwCC8bsQgZPlmwAEVYsBAvG7EQDz5ZsgIQCBESOXywAi8YsBAQshECCitYIdgb9FmwAhCyFAIKK1gh2Bv0WbAIELIaAgorWCHYG/RZMDEBBiMiJjU0NjMyFhcVFAYHIzUyNicyNzU0JiMiBhUUFgHnQlp+h6qEi6IC3OATj3ljTiNCNDNBPAE2OYp9eKSmlzvX2QGTUqw0RUhBTjk3RAABAJAChwMtAzEAAwARALACL7IBAQorWCHYG/RZMDEBITUhAy39YwKdAoeqAAMAlgRIAqIGlQADAA8AGwBOALANL7AZ0LAZL7IHCQorWCHYG/RZsALQsAIvsADQsAAvQA8PAB8ALwA/AE8AXwBvAAddsAIQsAPQGbADLxiwDRCyEwkKK1gh2Bv0WTAxATMHIwc0NjMyFhUUBiMiJjcUFjMyNjU0JiMiBgG85vWVgm5OTGxpT1FrYzQlJDAwJCU0BpXC3k5kZU1KY2JLJTExJSczMwADAAr+SgQbBE4AKQA2AEMAm7IIREUREjmwCBCwMNCwCBCwOtAAsABFWLAmLxuxJhs+WbAARViwFi8bsRYRPlmwJhCwKNCwKC+yAAMKK1gh2Bv0WbIIFiYREjmwCC+yDxYIERI5sA8vsjUBCitYIdgb9FmyGzUPERI5sh8IJhESObAWELIwAQorWCHYG/RZsAgQsjoBCitYIdgb9FmwJhCyQQEKK1gh2Bv0WTAxASMWFRUUBgYjIicGFRQXMxYWFRQGBiMiJDU0NyY1NDcmJjU1NDYzMhchAQYGFRQWMzI2NTQnJQMUFjMyNjU1NCYiBhUEG4o6c86AUUUlc8LDyo/6mtn+9bYydVpk/MdVSwFx/TAkMYhyhqyT/upAellYd3W4dQOgVWkWZKlfEiMvSgMBmo5YpmKbeaVZMkh3UTGeXxaiyhT75RNIMEJNXkBrCQICs0tmZ04SSmZmTQACAFb/6wRfBE4AEAAdAG6yGx4fERI5sBsQsAnQALAARViwCS8bsQkbPlmwAEVYsAwvG7EMGz5ZsABFWLACLxuxAg8+WbAARViwEC8bsRAPPlmyAAkCERI5sgsJAhESObACELIUAQorWCHYG/RZsAkQshsBCitYIdgb9FkwMSUGIyICNTUQEjMyFzczAxMjARQWMzI2NzUmJiMiBgNjbvLH5ujH6XEc3Wxz3f3HfHRgfBcRfWNzf8TZASD0DwEKATbXw/3i/eQB+aCsq6YvpbnFAAACAJsAAATyBbAAFgAeAGGyGB8gERI5sBgQsATQALAARViwAy8bsQMfPlmwAEVYsAEvG7EBDz5ZsABFWLAPLxuxDw8+WbIXAwEREjmwFy+yAAEKK1gh2Bv0WbIJABcREjmwAxCyHQEKK1gh2Bv0WTAxAREjESEyFhUUBxYTFRQXFSEmJzU0JiMlITI2NTQhIQGX/AIp9f/35QVH/vw7BHtw/tMBFJCB/vj+4wJW/aoFsNnN42VF/vZzqT0aMbh5dIDKcW3mAAABAJsAAAUwBbAADABYALAARViwBC8bsQQfPlmwAEVYsAgvG7EIHz5ZsABFWLACLxuxAg8+WbAARViwCy8bsQsPPlmyBgIEERI5sAYvsh8GAXGyAQEKK1gh2Bv0WbIKAQYREjkwMQEjESMRMxEzASEBASECQ6z8/IsBrAE2/gwCIP7QAnD9kAWw/ZwCZP1H/QkAAAEAgQAABDUGAAAMAFMAsABFWLAELxuxBCE+WbAARViwCC8bsQgbPlmwAEVYsAIvG7ECDz5ZsABFWLALLxuxCw8+WbIHCAIREjmwBy+yAAEKK1gh2Bv0WbIKAAcREjkwMQEjESMRMxEzASEBASEB4m/y8mkBDwEc/p8Bj/7mAdn+JwYA/JwBnv4R/bUAAQCbAAAFEgWwAAsATACwAEVYsAMvG7EDHz5ZsABFWLAHLxuxBx8+WbAARViwAS8bsQEPPlmwAEVYsAovG7EKDz5ZsgADARESObIFAwEREjmyCQAFERI5MDEBESMRMxEzASEBASEBl/z8BgIZATj9pQJ//sgCmv1mBbD9fwKB/TX9GwAAAQCBAAAEIgYYAAoATACwAEVYsAMvG7EDIT5ZsABFWLAGLxuxBhs+WbAARViwAS8bsQEPPlmwAEVYsAkvG7EJDz5ZsgAGARESObIFBgEREjmyCAAFERI5MDEBESMRMxEBIQEBIQFz8vIBWQEq/lAB3P7bAev+FQYY/IQBnv4M/boAAAEAPv8TA+8FcwAqAG+yEyssERI5ALAARViwCS8bsQkdPlmwAEVYsCIvG7EiDz5ZsgMiCRESObAJELAM0LADELIYAQorWCHYG/RZsAkQshMBCitYIdgb9FmyEBgTERI5sCIQsB/QsCIQsigBCitYIdgb9FmyJgMoERI5MDEBNCYkJiY1NDY3NTMVFhYVIzQmIyIGFRQWFxYWFRQGBxUjNSYmNTMUITI2AwJo/s+wU8+poKbL83hlX25xj93Aw66gveP0AQBhbwEyQk9MYoNchrQQ2dwVwI1RXU1AOkwjNrKOhqwR4eETx5rASgAAAQA4AAAEGgSdAB8AbrIbICEREjkAsABFWLATLxuxEx0+WbAARViwBS8bsQUPPlmyHxMFERI5sB8vsgACCitYIdgb9FmwBRCyAwEKK1gh2Bv0WbAH0LAI0LAAELAM0LAfELAO0LATELIaAQorWCHYG/RZshcfGhESOTAxASEWByEHITUzNjYnJyM1MycmNjMyFhUjNCYjIgYXFyEDR/6FBlACmAH8ZQopKwMBoJsDBti/wtnzV1BNVwUEAYAB5bJww8MLk30Hk2nO7tS8YWp+eWkAAQAOAAAEPwSNABgAlbIAGRoREjkAsABFWLABLxuxAR0+WbAARViwGC8bsRgdPlmwAEVYsAwvG7EMDz5ZsgAMGBESObIJDAEREjmwCS+wBNCwBC9ADQ8EHwQvBD8ETwRfBAZdts8E3wTvBANdsgYCCitYIdgb9FmwCRCyCgIKK1gh2Bv0WbAO0LAJELAQ0LAQL7AGELAT0LAEELAW0LAWLzAxAQEhATMVIQcVIRUhFSM1ITUhNSchNTMBIQIlAQ8BC/6+1f7aEAE2/sry/soBNgn+09z+vgELAnoCE/23kx0qkdnZkTYRkwJJAAABAHYAAAOXBI0ABQAysgEGBxESOQCwAEVYsAQvG7EEHT5ZsABFWLADLxuxAw8+WbAEELIAAQorWCHYG/RZMDEBIREjESEDl/3S8wMhA8n8NwSNAAACAAkAAARyBI0AAwAIADyyBQkKERI5sAUQsALQALAARViwAi8bsQIdPlmwAEVYsAAvG7EADz5ZsgUAAhESObIHAQorWCHYG/RZMDEhIQEzAycHAyEEcvuXAbn2aRIT3gHjBI3+yUtN/W8AAwBP//AEbwSdAAMAEgAgAHayByEiERI5sAcQsAHQsAcQsBbQALAARViwDy8bsQ8dPlmwAEVYsAcvG7EHDz5ZsgMPBxESOXywAy8YtGADcAMCXbQwA0ADAl2yAAMBcbIAAQorWCHYG/RZsA8QshYBCitYIdgb9FmwBxCyHQEKK1gh2Bv0WTAxASE1IQUQACMiABE1NBI2MzIAESc0JiMiBhUVFBYzMjY1Azj+WgGmATf+3+3s/tqF8JvwASDyloiGmJmHiJQB38N2/vj+zAE1AQwurAEHi/7H/vUIt8DAtzWyx8O2AAABAAkAAARyBI0ACAA4sgcJChESOQCwAEVYsAIvG7ECHT5ZsABFWLAALxuxAA8+WbAARViwBC8bsQQPPlmyBwIAERI5MDEhIQEzASEBJwcBCv7/Abn2Abr+//7eEhMEjftzA1ZLTQADAEIAAANVBI0AAwAHAAsAXrIEDA0REjmwBBCwANCwBBCwCNAAsABFWLAKLxuxCh0+WbAARViwAC8bsQAPPlmyAgEKK1gh2Bv0WbIHCgAREjmwBy+yBAEKK1gh2Bv0WbAKELIIAQorWCHYG/RZMDEhITUhAyE1IRMhNSEDVfztAxNJ/X4Cgkn87QMTwwE4xAEKxAAAAQB2AAAEYgSNAAcAP7IBCAkREjkAsABFWLAGLxuxBh0+WbAARViwBC8bsQQPPlmwAEVYsAEvG7EBDz5ZsAYQsgIBCitYIdgb9FkwMSEjESERIxEhBGL0/fvzA+wDyfw3BI0AAAEARAAAA+YEjQAMAEuyAA0OERI5ALAARViwCC8bsQgdPlmwAEVYsAMvG7EDDz5ZsgEBCitYIdgb9FmyBQEDERI5sAgQsgoBCitYIdgb9FmyBwoIERI5MDEBASEVITUBATUhFSEBApD+5gJw/F4BP/7BA3z9ugEWAkX+f8SYAbcBppjE/o8AAwBQAAAFTQSNABEAFgAcAG+yCB0eERI5sAgQsBTQsAgQsBrQALAARViwEC8bsRAdPlmwAEVYsAgvG7EIDz5Zsg8QCBESObAPL7AA0LIJCBAREjmwCS+wBtCwCRCyFAEKK1gh2Bv0WbAPELIVAQorWCHYG/RZsBrQsBQQsBvQMDEBFgQVFAQHFSM1JiQ1NCQ3NTMBAgURBAU0JicRJANJ8AEU/unt8/D+6gEX7/P9+QQBGP7sAxmQggESBBUP9srQ+g9tbA/50M33DXj9t/79FQIqFfuFgQr91hUAAAEAUAAABQMEjQAYAEuyABkaERI5ALAARViwEi8bsRIdPlmwAEVYsAwvG7EMDz5ZshYMEhESObAWL7AA0LASELAX0LAE0LAWELINAQorWCHYG/RZsArQMDEBNjY1ETMRBgcGBxEjESYCAxEzERQWFxEzAyN/bvMBaH368+P7AvNwffMB3RjCpwEv/s3jk68d/ugBFxYBKgEAATb+0ajAGAKvAAEAXwAABIQEnQAjAFyyByQlERI5ALAARViwGS8bsRkdPlmwAEVYsA8vG7EPDz5ZsABFWLAiLxuxIg8+WbAPELIRAQorWCHYG/RZsA7QsADQsBkQsgcBCitYIdgb9FmwERCwINCwIdAwMSU2NjU1NCYjIgYVFRQWFxUhNTMmETU0NjYzMgAVFRQGBzMVIQKteGyUjYqUdnT+MLC9g/Kc6gEqY1m2/i/IIsmwK56sqaQosccjyMSbAScWkeyE/uPtGY3fSsQAAAEAJP/sBVIEjQAZAGuyFhobERI5ALAARViwAi8bsQIdPlmwAEVYsA4vG7EODz5ZsABFWLAYLxuxGA8+WbACELIAAQorWCHYG/RZsATQsAXQsggCDhESObAIL7AOELIPBworWCHYG/RZsAgQshUBCitYIdgb9FkwMQEhNSEVIRU2MzIWFRQGIzUyNjU0JiMiBxEjAX7+pgOt/qCKjdrw8OtzdnR1gYXzA8nExO4n1Ma8wL1UaXJnJv3nAAEAT//wBEMEnQAdAI+yAx4fERI5ALAARViwCy8bsQsdPlmwAEVYsAMvG7EDDz5Zsg8LAxESObALELISAQorWCHYG/RZshULAxESObAVL7L/FQFxsg8VAXKyPxUBcbLPFQFxtG8VfxUCcbSvFb8VAl2yXxUBcrKPFQFyshYBCitYIdgb9FmwAxCyGgEKK1gh2Bv0WbIdAwsREjkwMQEGBCMiABE1NDY2MzIEFyMmJiMiAyEVIRYWMzI2NwRCEf732ez+7H7snNYBBBTzDH1y+xYBgP6ACn6DeHwNAYS/1QEsAQtEqf+K2sJwaf7PxJSfYnAAAgAkAAAHFQSNABcAIAB2sgQhIhESObAEELAY0ACwAEVYsBIvG7ESHT5ZsABFWLADLxuxAw8+WbAARViwCy8bsQsPPlmwEhCyBQEKK1gh2Bv0WbALELIOAQorWCHYG/RZshQSAxESObAUL7IYAQorWCHYG/RZsAMQshkBCitYIdgb9FkwMQEUBgchESEDBgIGIyM3NzY2NxMhETMyFiURMzI2NTQmIwcV+c/+Ff6kDgtYrJE0ASZgTgwVAzvs2vr9QPFndXZmAX+r0gIDyf6c7/7/dc0CB5/tAiv+bNAM/o5rU1FjAAACAHYAAAcYBI0AEwAcAMGyAR0eERI5sAEQsBTQALAARViwEy8bsRMdPlmwAEVYsAIvG7ECHT5ZsABFWLAQLxuxEA8+WbAARViwDS8bsQ0PPlmyABATERI5sAAvtK8AvwACXbI/AAFxss8AAXGyPwABcrJfAAFysv8AAXGyDwABcrRvAH8AAnG03wDvAAJdtB8ALwACXbKfAAFysgQNAhESObAEL7AAELIPAQorWCHYG/RZsAQQshQBCitYIdgb9FmwDRCyFQEKK1gh2Bv0WTAxASERMxEzMhYWFRQGIyERIREjETMBETMyNjU0JiMBaQH98/KM0m//0v4f/gPz8wLw8Wd1dmYCngHv/mxfq3Cv0AHb/iUEjf2o/o5rU1FjAAABACQAAAVSBI0AFQBXshIWFxESOQCwAEVYsAMvG7EDHT5ZsABFWLAULxuxFA8+WbAARViwDS8bsQ0PPlmwAxCyBAEKK1gh2Bv0WbAA0LIIFAMREjmwCC+yEQEKK1gh2Bv0WTAxASE1IRUhFTYzMhYXESMRNCYjIgcRIwF+/qYDrf6gho7e6wTzdHSBhfMDycTE7SbPy/6YAVp8aSb95wAAAQB2/p8EYQSNAAsAT7IDDA0REjkAsAIvsABFWLAGLxuxBh0+WbAARViwCi8bsQodPlmwAEVYsAAvG7EADz5ZsABFWLAELxuxBA8+WbIIAQorWCHYG/RZsAnQMDEhIREjESERMxEhETMEYf6K8/5+8wIF8/6fAWEEjfw2A8oAAgB2AAAEKASNAAsAFABesggVFhESObAIELAM0ACwAEVYsAovG7EKHT5ZsABFWLAILxuxCA8+WbAKELIAAQorWCHYG/RZsgMKCBESObADL7AIELIMAQorWCHYG/RZsAMQshIBCitYIdgb9FkwMQEhFTMWFhAGIyERIQEyNjU0JicjEQOy/bf8z/T42f4fAzz+qGhzcGb2A8vgA8T+qMwEjfw2Y1RPXQH+nAACACf+rwUVBI0ADwAVAFuyExYXERI5sBMQsAXQALANL7AARViwBS8bsQUdPlmwAEVYsAsvG7ELDz5ZsgABCitYIdgb9FmwB9CwCNCwDRCwCtCwCBCwENCwEdCwBRCyEgEKK1gh2Bv0WTAxNz4CNxMhETMRIxEhESMTISERIQcCgkpCIwUMAz2W8vz38wEBdAHw/qEHDcNRhrR+AcH8Nv3sAVH+rwIUAwb8/q4AAQAaAAAGHwSNABUAnrIBFhcREjkAsABFWLARLxuxER0+WbAARViwDi8bsQ4dPlmwAEVYsAovG7EKHT5ZsABFWLAGLxuxBg8+WbAARViwAy8bsQMPPlmwAEVYsBUvG7EVDz5ZsgwDDhESObAML7I/DAFxsl8MAXKyzwwBcbSvDL8MAl20jwyfDAJysA/QsgEBCitYIdgb9FmwBNCyCA8EERI5shMBDxESOTAxASMRIxEjAyEBASETMxEzETMTIQEBIQP1X/Ng/P7TAVz+xAEe91TzVPcBHv7CAV7+0wHV/isB1f4rAlQCOf4gAeD+IAHg/dD9owAAAQBC//AD5wSdACcAirImKCkREjkAsABFWLAKLxuxCh0+WbAARViwFi8bsRYPPlmwChCyAwEKK1gh2Bv0WbIGChYREjmyJgoWERI5sCYvss8mAXGyPyYBcbSvJr8mAl2y/yYBcbIPJgFysl8mAXKyIwEKK1gh2Bv0WbIQIyYREjmyHBYKERI5sBYQsh4BCitYIdgb9FkwMQE0JiMiBhUjNDYzMhYVFAYHFhYVFAQjIiYnJjUzFjMyNjU0JyM1MzYC4nBrW2bz88PY9G5db27+/txdrz988wvKd3TglJrHA0NGT0Y8lLOnlluKJySRW5+1LS9bn5NXSKYDsAQAAQB2AAAEbgSNAAkATLIACgsREjkAsABFWLAALxuxAB0+WbAARViwCC8bsQgdPlmwAEVYsAUvG7EFDz5ZsABFWLADLxuxAw8+WbIEAwAREjmyCQUIERI5MDEBMxEjEQEjETMRA3vz8/3u8/MEjftzAyP83QSN/OAAAQB2AAAEQASNAAwAd7IADQ4REjkAsABFWLAILxuxCB0+WbAARViwBS8bsQUdPlmwAEVYsAIvG7ECDz5ZsABFWLAMLxuxDA8+WbIGAgUREjmwBi+yPwYBcbJfBgFyss8GAXG0rwa/BgJdtI8GnwYCcrIBAQorWCHYG/RZsgoBBhESOTAxASMRIxEzETMBIQEBIQHTavPzYwE4AR3+cgGt/tEB1f4rBI3+IAHg/cX9rgABACQAAARVBI0AEABNsgQREhESOQCwAEVYsAAvG7EAHT5ZsABFWLABLxuxAQ8+WbAARViwCS8bsQkPPlmwABCyAwEKK1gh2Bv0WbAJELIMAQorWCHYG/RZMDEBESMRIQMGAgYHIzc3NjY3EwRV8/6kDwxXqow6ASdiSgwWBI37cwPJ/p/t/v54Ac0EC6DmAisAAAEAH//sBDkEjQAPAEOyABARERI5ALAARViwDy8bsQ8dPlmwAEVYsAIvG7ECHT5ZsABFWLAILxuxCA8+WbIBCA8REjmyCwEKK1gh2Bv0WTAxARcTIQEOAiMnNxcyNwEhAikT8wEK/nA4Wn5aZgFXYDP+WwEOAks3Ann8fn5pOAXABGEDfwAAAQB2/q8FJASNAAsAQrIJDA0REjkAsAMvsABFWLAHLxuxBx0+WbAARViwCi8bsQodPlmwAEVYsAUvG7EFDz5ZsggBCitYIdgb9FmwANAwMSUzAyMRIREzESERMwRiwhTd/EPzAgX0w/3sAVEEjfw2A8oAAQBBAAAEFgSNABEARrIEEhMREjkAsABFWLAJLxuxCR0+WbAARViwEC8bsRAdPlmwAEVYsAEvG7EBDz5Zsg0BCRESObANL7IEAQorWCHYG/RZMDEhIxEGIyImJxEzERQWMzI3ETMEFvOGgerwAfNveYKF8wGqJtLRAWb+nndsJgIfAAEAdgAABg4EjQALAEGyBwwNERI5ALAARViwAy8bsQMdPlmwAEVYsAEvG7EBDz5ZsgQBCitYIdgb9FmwAxCwBtCwBBCwCNCwBhCwCtAwMSEhETMRIREzESERMwYO+mjzAV/zAWDzBI38NgPK/DYDygABAHb+rwbRBI0ADwBBsgsQERESOQCwAy+wAEVYsAcvG7EHHT5ZsABFWLAELxuxBA8+WbIAAQorWCHYG/RZsA3QsAnQsAcQsArQsA7QMDElMwMjESERMxEhETMRIREzBg/CFN36lvMBX/MBYPTD/ewBUQSN/DYDyvw2A8oAAgAKAAAFGwSNAAwAFQBesggWFxESObAIELAU0ACwAEVYsAcvG7EHHT5ZsABFWLADLxuxAw8+WbAHELIFAQorWCHYG/RZsgoHAxESObAKL7ADELINAQorWCHYG/RZsAoQshMBCitYIdgb9FkwMQEUBgchESE1IREzMhYBMjY1NCYnIxEFG/nP/hX+ogJS69v5/jJmdXFi+QF/q9ICA8nE/mzQ/pprU09jAv6O//8AdgAABakEjQAmAggAAAAHAcIEMgAAAAIAdgAABCgEjQALABQATbIDFRYREjmwAxCwDNAAsABFWLAGLxuxBh0+WbAARViwBC8bsQQPPlmyBwQGERI5sAcvshMBCitYIdgb9FmwBBCyFAEKK1gh2Bv0WTAxARQGIyERMxEzMhYWATI2NTQmJyMRBCj/0v4f8/KM0m/+MmZ1cWL5AX+v0ASN/mxfq/7Ua1NPYwL+jgAAAQA8//AEMASdAB0Ah7IDHh8REjkAsABFWLASLxuxEh0+WbAARViwGi8bsRoPPlmyABoSERI5sgMBCitYIdgb9FmyCRIaERI5sAkvss8JAXGyPwkBcbRvCX8JAnG0rwm/CQJdsv8JAXGyDwkBcrJfCQFysgYBCitYIdgb9FmwEhCyCwEKK1gh2Bv0WbIOEhoREjkwMQEWFjMyNjchNSECIyIGByM2JDMyABcXFAYGIyIkJwEvDXx4goAK/n8BgBb7cn0M8xQBBNbiARcMAXvqm9z++A8BhHBin5TEATFpcMLa/ujwdan/iNq6AAACAHb/8AZBBJ0AEwAhAK+yBCIjERI5sAQQsBnQALAARViwEC8bsRAdPlmwAEVYsAsvG7ELHT5ZsABFWLADLxuxAw8+WbAARViwCC8bsQgPPlmyDQgLERI5sA0vtK8Nvw0CXbRvDX8NAnGy/w0BcbIPDQFytI8Nnw0CcrJfDQFyss8NAXGyPw0BcbQfDS8NAl2yzw0BcrIGAQorWCHYG/RZsBAQshcBCitYIdgb9FmwAxCyHgEKK1gh2Bv0WTAxARAAIyIAJyMRIxEzETM2ADMyABEnNCYjIgYVFRQWMzI2NQZB/t/t3v7iE7zy8rwUAR3c8AEg8paIhpiZh4iUAiz++P7MARDi/h4Ejf4Y6QEP/sf+9Qi3wMC3NbLHw7YAAgBDAAAEEgSNAAwAFQBasgYWFxESObAGELAQ0ACwAEVYsAcvG7EHHT5ZsABFWLAJLxuxCQ8+WbIRCQcREjmwES+yCgEKK1gh2Bv0WbIBChEREjmwCRCwDNCwBxCyEgEKK1gh2Bv0WTAxMwEmNTQ2MyERIxEjAxMUFjMzESMiBkMBFtbw0wHM8/HmLmFr3d1hawIKVtGjuftzAbz+RAMiSlkBSlcAAAEACgAAA/8EjQANAFCyAQ4PERI5ALAARViwCC8bsQgdPlmwAEVYsAIvG7ECDz5ZsgcCCBESObAHL7IEBworWCHYG/RZsAHQsAgQsgsBCitYIdgb9FmwBxCwDNAwMQEjESMRIzUzESEVIREzAqfW89TUAyH90tYB5v4aAeaqAf3E/scAAAEAGv6vBm0EjQAZAKSyCBobERI5ALADL7AARViwES8bsREdPlmwAEVYsAUvG7EFDz5ZsABFWLAJLxuxCQ8+WbAARViwDS8bsQ0PPlmyFwkRERI5sBcvsj8XAXGyXxcBcrLPFwFxtK8XvxcCXbSPF58XAnKyBwEKK1gh2Bv0WbIABxcREjmwBRCyAQEKK1gh2Bv0WbAHELAL0LIPFwcREjmwFxCwEtCwERCwFNCwGNAwMQETMxEjESMDIxEjESMDIQEBIRMzETMRMxMhBMHuvtCr/V/zYPz+0wFc/sQBHvdU81T3AR4CXf5l/e0BUQHV/isB1f4rAlQCOf4gAeD+IAHgAAEAdv6vBHwEjQAQAIiyABESERI5ALAEL7AARViwDC8bsQwdPlmwAEVYsA8vG7EPHT5ZsABFWLAJLxuxCQ8+WbAARViwBi8bsQYPPlmyDQkMERI5sA0vsj8NAXGyXw0BcrLPDQFxtK8Nvw0CXbSPDZ8NAnKyCAEKK1gh2Bv0WbIACA0REjmwBhCyAQEKK1gh2Bv0WTAxAQEzESMRIwEjESMRMxEzASECkwEhyNCb/sJq8/NjATgBHQJS/nD97QFRAdX+KwSN/iAB4AABAHYAAAT+BI0AFACAsgUVFhESOQCwAEVYsBQvG7EUHT5ZsABFWLAGLxuxBh0+WbAARViwES8bsREPPlmwAEVYsAovG7EKDz5ZsgARFBESObAAL7I/AAFxsl8AAXKyzwABcbSvAL8AAl20jwCfAAJysATQsAAQshABCitYIdgb9FmwDNCyCAwAERI5MDEBMzUzFTMBIQEBIQEjFSM1IxEjETMBaUejNwE4ARz+cgGu/tH+wj6jR/PzAq3e3gHg/cT9rwHVy8v+KwSNAAABACQAAAVOBI0ADgCFsgkPEBESOQCwAEVYsAcvG7EHHT5ZsABFWLAKLxuxCh0+WbAARViwAi8bsQIPPlmwAEVYsA4vG7EODz5ZsggCBxESObAIL7I/CAFxsl8IAXKyzwgBcbSvCL8IAl20jwifCAJysgEBCitYIdgb9FmwBxCyBAEKK1gh2Bv0WbIMAQgREjkwMQEjESMRITUhETMBIQEBIQLhavP+oAJTYwE4AR3+cgGt/tEB1f4rA8rD/iAB4P3E/a8AAgBP/+sFmASlACMALgCMshUvMBESObAVELAk0ACwAEVYsBsvG7EbHT5ZsABFWLALLxuxCx0+WbAARViwBC8bsQQPPlmwAEVYsAAvG7EADz5ZsgIEGxESObACL7ALELIMAQorWCHYG/RZsAQQshMBCitYIdgb9FmwABCyIwEKK1gh2Bv0WbACELAm0LAbELIsAQorWCHYG/RZMDEFIicGIyAAAzU0ADMVIgYVFRQWMzM3JgM1NBIzMhIXFRAHFjMBEBc2NzU0JiMiEQWY466Rqf7a/qwEAQjbcX/LwBsbwALcv8bdAaNfXP2UvqIBU1uzEDk+ATwBGDr+AS7MtLEmy80CqgEeLOoBDf787Ej+/60LAdL+9G948zWgkP7S//8ABQAABDYEjQAmAdIAAAAHAd4AO/7VAAEAFf6vBIsEjQAPAFqyChARERI5ALAHL7AARViwAS8bsQEdPlmwAEVYsA8vG7EPHT5ZsABFWLALLxuxCw8+WbAARViwCS8bsQkPPlmyAA8LERI5sgQBCitYIdgb9FmyCgsPERI5MDEBEyEBATMRIxEjAwMhAQEhAifyARz+iQEJxM+S//r+5AGB/ogBGgL6AZP9vv53/e0BUQGZ/mcCSwJCAAEAJP6vBi4EjQAPAFyyCRARERI5ALACL7AARViwCC8bsQgdPlmwAEVYsA4vG7EOHT5ZsABFWLAELxuxBA8+WbIAAQorWCHYG/RZsAgQsgYBCitYIdgb9FmwCtCwC9CwABCwDNCwDdAwMSUzAyMRIREhNSEVIREhETMFasQU3vxE/qQDov6sAgbyw/3sAVEDycTE/PoDygAAAQBBAAAEFgSNABcAT7IEGBkREjkAsABFWLAMLxuxDB0+WbAARViwFi8bsRYdPlmwAEVYsAEvG7EBDz5ZshABDBESObAQL7IHAQorWCHYG/RZsATQsBAQsBPQMDEhIxEGBxUjNSYmJxEzERQWFzUzFTY3ETMEFvNMVqPMzwLzVFajSljzAaoWCszIDdG/AWr+n2tpDPPyCRgCHwAAAQB2AAAESwSNABEARrIEEhMREjkAsABFWLABLxuxAR0+WbAARViwEC8bsRAPPlmwAEVYsAkvG7EJDz5ZsgQQARESObAEL7INAQorWCHYG/RZMDETMxE2MzIWFREjETQmIyIHESN284aA7e/zdXSBhfMEjf5WJtbR/p4BYXxpJv3gAAIACv/wBagEowAbACMAZLINJCUREjmwDRCwHdAAsABFWLAOLxuxDh0+WbAARViwAC8bsQAPPlmyIA4AERI5sCAvshIBCitYIdgb9FmwA9CwIBCwCtCwABCyFQEKK1gh2Bv0WbAOELIcAQorWCHYG/RZMDEFIAAnJiY1MxQWFz4CMyAAERUhEiEyNzcXBgYDIgYHITU0JgPJ/vr+wAyuv8FUWAmP8ZEBAAEX/MASAU+Gcy9BO8WhgKAIAkyVEAER6gvdu112DJLkfv7l/veV/tArErohLAPupYwWhpUAAAIAT//wBIEEowAWAB4AXrIIHyAREjmwCBCwF9AAsABFWLAALxuxAB0+WbAARViwCC8bsQgPPlmyDQAIERI5sA0vsAAQshABCitYIdgb9FmwCBCyFwEKK1gh2Bv0WbANELIaAQorWCHYG/RZMDEBIAAXFRQGBiMgABE1ISYmIyIHByc2NhMyNjchFRQWAjkBCwE7Aoz5lv7+/usDPwezpoZ2LUFAyZiBngr9tJQEo/7c+Xqb+YgBHAEIlZaaLBG6Iiv8EqOOFoaVAAABAEL/7APoBI0AGQBpshIaGxESOQCwAEVYsAIvG7ECHT5ZsABFWLALLxuxCw8+WbACELIAAQorWCHYG/RZsgQCABESObIZCwIREjmwGS+wBdCyDwsCERI5sAsQshIBCitYIdgb9FmwGRCyGAcKK1gh2Bv0WTAxASE1IRcBFhYVFAQjIiY1MxYWMzI2NTQjIzUCjf3eA1IB/saiwv8A39D38wRxZXNz8X0DycSb/sAUv4uowLmhSVBaU7C7AAMAT//wBG8EnQAOABUAHAB+sgMdHhESObADELAP0LADELAW0ACwAEVYsAsvG7ELHT5ZsABFWLADLxuxAw8+WbALELIPAQorWCHYG/RZshMLAxESOXywEy8YtGATcBMCXbQwE0ATAl2y8BMBXbIAEwFxsAMQshYBCitYIdgb9FmwExCyGQEKK1gh2Bv0WTAxARAAIyIAETU0EjYzMgARASIGByEmJgMyNjchFhYEb/7f7ez+2oXwm/ABIP3weZQOAjYOk3h5kQ79zA+VAiz++P7MATUBDC6sAQeL/sf+9QF/nZWVnfzbnZOTnQAAAQA4AAAEGgSdACcArrIlKCkREjkAsABFWLAdLxuxHR0+WbAARViwDC8bsQwPPlmyBh0MERI5sAYvsg8GAV2wAdCwAS+yzwEBXUAJHwEvAT8BTwEEXbIAAQFdsgICCitYIdgb9FmwBhCyBwIKK1gh2Bv0WbAMELIKAQorWCHYG/RZsA7QsA/QsAcQsBHQsAYQsBPQsAIQsBbQsAEQsBjQsB0QsiQBCitYIdgb9FmyISQBERI5sgwhAV0wMQEhFSEXFSEVIQYHIQchNTM2NyM1MzUnIzUzJyY2MzIWFSM0JiMiBhcBxAGD/oIDAXv+cxImApgB/GUKNBKWoQOemQEG2L/E1/NUU01XBQK6kkIWk0U1w8MObJMOSpInzu7QtlpnfnkAAAEARv/wA7AEngAiAKCyCiMkERI5ALAARViwFi8bsRYdPlmwAEVYsAkvG7EJDz5ZsiIWCRESObAiL7IPIgFdtBAiICICXbIAAgorWCHYG/RZsAkQsgQBCitYIdgb9FmwABCwDNCwIhCwDtCwIhCwE9CwEy+yzxMBXbYfEy8TPxMDXbIAEwFdshACCitYIdgb9FmwFhCyGwEKK1gh2Bv0WbATELAd0LAQELAf0DAxASEWFjMyNxcGIyIkJyM1MzUjNTM2NjMyFwcmIyIHIRUhFSEDTv6DEXtvUHkbdm7U/v8al5KSmBr/02x6Flt11iIBfP59AYMBhGpoHL8f0MSSXJPD1iC/HNaTXAAABAB2AAAHxwSeAAMADwAdACcAqrIeKCkREjmwHhCwAdCwHhCwBNCwHhCwENAAsABFWLAmLxuxJh0+WbAARViwJC8bsSQdPlmwAEVYsAYvG7EGHT5ZsABFWLAhLxuxIQ8+WbAARViwHy8bsR8PPlmwBhCwDdCwDS+wAtCwAi+2AAIQAiACA12yAQIKK1gh2Bv0WbANELITAgorWCHYG/RZsAYQshoCCitYIdgb9FmyICQhERI5siUfJhESOTAxJSE1IQE0NiAWFRUUBiAmNRcUFjMyNjc1NCYjIgYVASMBESMRMwERMweI/cUCO/2KvwE2wL7+ysGvWlNQWAJdT05d/qby/fTz8wIM8siVAfKWubicSJa4uJsFV2ViVFNXZGNb/LQDG/zlBI385AMcAAACACgAAASqBI0AFQAeAIyyDR8gERI5sA0QsBfQALAARViwDC8bsQwdPlmwAEVYsAMvG7EDDz5ZsgYDDBESObAGL7IFAQorWCHYG/RZsAHQsAYQsArQsAovtg8KHwovCgNdto8KnwqvCgNdtB8KLwoCcbIJAQorWCHYG/RZsBPQsAYQsBTQsAoQsBbQsAwQsh4BCitYIdgb9FkwMSUhFSM1IzUzNSM1MxEhMhYQBgchFSEBMzI2NTQmIyMC9v7189DQ0NAB69H27cj+9gEL/vX4YXN1XvmZmZm2TbcCOtP+tM0FTQEEZ1VWZQACAHz/7ARGBgAADwAaAGSyExscERI5sBMQsAzQALAJL7AARViwDC8bsQwbPlmwAEVYsAMvG7EDDz5ZsABFWLAGLxuxBg8+WbIFDAMREjmyCgwDERI5sAwQshMBCitYIdgb9FmwAxCyGAEKK1gh2Bv0WTAxARQCIyInByMRMxE2MzISESc0JiMiBxEWMzI2BEbzx8BtEdLzabLM8POLe5pER5l6igIR9P7PjnoGAP3SfP7W/voIpruF/jeHvAAAAQBQ/+wEAAROAB0AS7IXHh8REjkAsABFWLAQLxuxEBs+WbAARViwCC8bsQgPPlmyAAEKK1gh2Bv0WbIDCBAREjmyFBAIERI5sBAQshcBCitYIdgb9FkwMSUyNjczDgIjIgA1NTQ2NjMyFhcjJiYjIgYVFRQWAkJaegbkBHrKdOb+8nrhmMP0BuQHeFx5hYWuaU9msGQBK/4ZnvuH5LRfdrOyG62wAAIAT//sBBcGAAARABwAZLIaHR4REjmwGhCwBNAAsAcvsABFWLAELxuxBBs+WbAARViwDS8bsQ0PPlmwAEVYsAkvG7EJDz5ZsgYEDRESObILBA0REjmwDRCyFQEKK1gh2Bv0WbAEELIaAQorWCHYG/RZMDETNDY2MzIXETMRIycGIyImJjU3FBYzMjcRJiMiBk9wzYKsavPTEWy7fst08417lEZGkn2NAiaf/Yx3Ain6AHWJjP2bAZ3CgQHXfcEA//8AWwAAArIFtQAGABWzAAACAEz/7ARVBE4ADwAZAEOyBBobERI5sAQQsBfQALAARViwBC8bsQQbPlmwAEVYsAwvG7EMDz5ZshIBCitYIdgb9FmwBBCyFwEKK1gh2Bv0WTAxEzQ2NjMyABUVFAYGIyIANRcUFjI2NTQmIgZMguuW5gEgf+2Y5v7h8pX8k5f4lQInn/2L/s38DZ38jQEx/gmgxMS1n8XGAAIAfP5gBEQETgAQABsAbrIZHB0REjmwGRCwDdAAsABFWLANLxuxDRs+WbAARViwCi8bsQobPlmwAEVYsAcvG7EHET5ZsABFWLAELxuxBA8+WbIGDQQREjmyCw0EERI5sA0QshQBCitYIdgb9FmwBBCyGQEKK1gh2Bv0WTAxARQGBiMiJxEjETMXNjMyEhcHNCYjIgcRFjMyNgREb8iBsWzz2Q5susHvCvGRfJJERZN4kwIRnv2KdP4ABdpxhf7r7Cefwnj+F3jDAAACAE/+YAQWBE4AEAAbAGuyGRwdERI5sBkQsATQALAARViwBC8bsQQbPlmwAEVYsAcvG7EHGz5ZsABFWLAJLxuxCRE+WbAARViwDS8bsQ0PPlmyBgQNERI5sgsEDRESObIUAQorWCHYG/RZsAQQshkBCitYIdgb9FkwMRM0NjYzMhc3MxEjEQYjIgInNxQWMzI3ESYjIgZPb82Gt2sR0vNqqr72C/KTeJBGSIx+jwImovyKgm76JgH8cAEc4ieexXYB9HPGAAACAFP/7AQLBE4AFgAeAHyyCB8gERI5sAgQsBfQALAARViwCC8bsQgbPlmwAEVYsAAvG7EADz5ZshsIABESObAbL7S/G88bAl20XxtvGwJxtB8bLxsCcbKPGwFdtO8b/xsCcbIMBworWCHYG/RZsAAQshABCitYIdgb9FmwCBCyFwEKK1gh2Bv0WTAxBSIANTU0NjYzMhIVFSEWFjMyNjcXBgYDIgYHITU0JgJ28v7PfeKL3fH9Pg+pjVWSMTo/vadmfBAB0HMUASj3IZ75i/7093uFnS8gpjI5A5+NfBpwfwAAAgBR/lYEBAROABkAJACDsiIlJhESObAiELAL0ACwAEVYsAMvG7EDGz5ZsABFWLAGLxuxBhs+WbAARViwCy8bsQsRPlmwAEVYsBcvG7EXDz5ZsgUDFxESObALELIRAQorWCHYG/RZsg8RFxESObIVAxcREjmwFxCyHQEKK1gh2Bv0WbADELIiAQorWCHYG/RZMDETNBIzMhc3MxEUACMiJic3FjMyNjU1BiMiAjcUFjMyNxEmIyIGUefDvWsR0P767VevNzV1g46Caq6+6vKBc5dDRJR2gAIm/QErhnL8EPL+/i4hsD+WlCJ2AS/2qLeFAdF/tQAAAQBr/+sFJgXFAB0AQLIMHh8REjkAsABFWLAMLxuxDB8+WbAARViwAy8bsQMPPlmwDBCyEwEKK1gh2Bv0WbADELIaAQorWCHYG/RZMDEBBgAjIiQCJzU0EiQzMgAXIyYmIyICFRUUEjMyNjcFJBf+0vm2/tygAZ4BILf7ATQX/RajkKzM0qyRmxYB2un++rQBRdI81QFKtP7z6ZiS/ubvNOv+5I+WAAEAa//rBSYFxQAgAFWyDCEiERI5ALAARViwDC8bsQwfPlmwAEVYsAMvG7EDDz5ZsAwQshIBCitYIdgb9FmwAxCyGQEKK1gh2Bv0WbIgDAMREjmwIC+yHQEKK1gh2Bv0WTAxJQYEIyIkAic1NBIkMzIEFyMCISICBxUUEjMyNjcRITUhBSZG/tywwP7OrQKfASO3+AErH/ku/umq0wPovGSbH/7dAh+8X3KyAUjRMdkBT7bw4wEH/uXpM+z+3zAkARvAAAACAJsAAAUXBbAACwAVAEayAxYXERI5sAMQsA/QALAARViwAS8bsQEfPlmwAEVYsAAvG7EADz5ZsAEQsgwBCitYIdgb9FmwABCyDQEKK1gh2Bv0WTAxMxEhMgQSFxUUAgQHAxEzMhI1NTQCI5sBvsgBQbIDsP7AzMSu3Pjx2gWwsf7DyDjM/r+yAwTk++YBDvAm6gEMAAACAGv/6wVyBcUAEQAgAEayBCEiERI5sAQQsB3QALAARViwDS8bsQ0fPlmwAEVYsAQvG7EEDz5ZsA0QshUBCitYIdgb9FmwBBCyHQEKK1gh2Bv0WTAxARQCBCMiJAInNTQSJDMyBBIXBzQCIyICFRUUFhYzMhI3BXKm/ti0sv7YqgGlASq0sgEmqAT73K2p32a2bqTYCgLDzv6wuroBTskxywFNwLf+ucYS5AEi/tvoJZPxhgEJ2gAAAgBr/wMFcgXFABQAIwBGsggkJRESObAIELAg0ACwAEVYsBAvG7EQHz5ZsABFWLAILxuxCA8+WbAQELIYAQorWCHYG/RZsAgQsiABCitYIdgb9FkwMQEUAgcXByUGIyIkAic1NBIkIAQSFwc0AiMiAhUVFBYWMzISNQVyl4nvpf7VQz6z/tqqAqcBKAFoASeoAfvcrareZrVvrtkCxsr+vWLAlPUNtwFNyy7QAVK7t/6vzgXsAR/+3e8dl/KEASD1AAABAJcAAALvBIwABgAyALAARViwBS8bsQUdPlmwAEVYsAAvG7EADz5ZsgQABRESObAEL7IDAQorWCHYG/RZMDEhIxEFNSUzAu/z/psCOR8DaXrN0AABAG4AAAQsBJ4AGQBZsgkaGxESOQCwAEVYsBEvG7ERHT5ZsABFWLAALxuxAA8+WbIYAQorWCHYG/RZsgIYABESObIDABEREjmwERCyCQEKK1gh2Bv0WbIMABEREjmyFxEAERI5MDEhITUBNjY1NCYjIgYVIzQ2NjMyFhUUBgcBIQQs/GAB+0Y5aVpne/N514XK6ldu/rECSZ8Buj9jQEhaeGBzvGq3nFqfZv7WAAABAHYAAAOXBcQABwAysgMICRESOQCwAEVYsAYvG7EGHT5ZsABFWLAFLxuxBQ8+WbAGELICAQorWCHYG/RZMDEBMxEhESMRIQKk8/3S8wIuBcT+Bfw3BI0AAQAP/qMD8gSNABkAWbISGhsREjkAsAwvsABFWLACLxuxAh0+WbIAAQorWCHYG/RZsgQAAhESObIFDAIREjmwBS+wDBCyEQEKK1gh2Bv0WbAFELIXAworWCHYG/RZshkXBRESOTAxASE1IRUBFhYVFAYEIyInNxYzMjY1NCYjIzUCnv26A3f+navbkP7ysMfOOZ2tpMSqt0gDycSP/oAa97Cj84Rntli4kpaSewAAAgA1/sQEiwSMAAoADgBSALAARViwCS8bsQkdPlmwAEVYsAIvG7ECDz5ZsABFWLAGLxuxBg8+WbIAAQorWCHYG/RZsAYQsAXQsAUvsggGABESObAAELAM0LINCQIREjkwMSUzFSMRIxEhJwEzASERBwPVtrby/VgGAqb6/WQBqhfCw/7FATuUA/n8NgKAKgD//wBLAo0CqgW4AwcB1AAAApgAEwCwAEVYsAovG7EKHz5ZsBDQMDEA//8ANQKYAr4FrQMHAdgAAAKYABMAsABFWLAJLxuxCR8+WbAN0DAxAP//AE8CjQKuBa0DBwHZAAACmAAQALAARViwAS8bsQEfPlkwMf//AE0CjQK5BboDBwHaAAACmAATALAARViwAC8bsQAfPlmwFNAwMQD//wA2ApgCrgWtAwcB2wAAApgAEACwAEVYsAUvG7EFHz5ZMDH//wBLAo0CqgW4AwcB3AAAApgAGQCwAEVYsBEvG7ERHz5ZsBnQsBEQsB/QMDEA//8ARgKPAqMFuAMHAd0AAAKYABMAsABFWLAILxuxCB8+WbAa0DAxAAABAGb+oAQeBIwAHABdshkdHhESOQCwDi+wAEVYsAEvG7EBHT5ZsgMBCitYIdgb9FmyBwEOERI5sAcvshkBCitYIdgb9FmyBQcZERI5sA4QshMBCitYIdgb9FmyERMZERI5shwZExESOTAxExMhFSEDNjc2EhUUBgYjIic3FjMyNjU0JiMiBgeHWgMp/ZotZYbP7YX1peS1SoS9j6uOeFNmGwF1AxfS/qoyAgL+9+SY84J1smOzlIeiNTsAAAEAQ/7EBBAEjAAGACUAsAEvsABFWLAFLxuxBR0+WbIDAQorWCHYG/RZsgADBRESOTAxAQEjASE1IQQQ/bbzAj79MgPNBAb6vgUFwwACAE//8AZtBJ0AFAAeAJGyFh8gERI5sBYQsAvQALAARViwCi8bsQodPlmwAEVYsAsvG7ELHT5ZsABFWLAALxuxAA8+WbAARViwAi8bsQIPPlmwCxCyDQEKK1gh2Bv0WbIQAAsREjmwEC+yEQEKK1gh2Bv0WbAAELITAQorWCHYG/RZsAIQshUBCitYIdgb9FmwChCyGAEKK1gh2Bv0WTAxISEFIgARNTQSNjMFIRUhESEVIREhBTcRJyIGFRUUFgZt/Uf+rez+2oXwmwFTArj9twH2/goCTPv0zc+GmJkQATUBDC6sAQeLEMT+8sP+yg8IAxQJwLc1sscAAgBz/rQEVASgABgAJABTsh8lJhESObAfELAM0ACwFC+wAEVYsAwvG7EMHT5ZsBQQsgABCitYIdgb9FmyGRQMERI5fLAZLxiyBQEKK1gh2Bv0WbAMELIfAQorWCHYG/RZMDEFMjY3BiMiAjU0NjYzMgARFRQCBCMiJzcWEzI3NTQmIyIGFRQWAemYvRlyqtH3e9qH8QEUkf7zsp6EL33RsFKIf22HionIvloBEuWZ7YD+0f72zuX+srI8ti8B6XispbSxkoqwAAACAGL/6wSFBKAADQAaAEayAxscERI5sAMQsBfQALAARViwCi8bsQodPlmwAEVYsAMvG7EDDz5ZsAoQshEBCitYIdgb9FmwAxCyFgEKK1gh2Bv0WTAxARAAIyImAjUQADMyFhIHNCYgBhUVFBYzMjY3BIX+4/Oe84IBH/Kf8oHym/72mZqGhZcCAj7+6f7EjgEMxwEWAT6O/vOnuMfIuiy1zcW0////tf5LAZMEOgIGAJsAAP///7X+SwGTBDoCBgCbAAD//wCPAAABggQ6AAYAjAAA////+/5cAYIEOgAmAIwAAAAGAKPSCv//AI8AAAGCBDoABgCMAAAAAQB2/+sEFgScACEAZbIBIiMREjkAsABFWLAVLxuxFR0+WbAARViwHy8bsR8PPlmwAEVYsBAvG7EQDz5ZsB8QsgIBCitYIdgb9FmyCh8VERI5sAovsBnQsggDCitYIdgb9FmwFRCyDQEKK1gh2Bv0WTAxJRYzMjY1NCYjIzUTJiMiFREjETY2MzIWFwMWFhUUBiMiJwHrS0hNXHx0VMpGUbHvAdHPeM1o+aGq2a98bNsxZVJYR6MBATn5/RwC8NfVYW/+1Bekga/KNgD//wBHAgkCVALNAgYAEQAAAAL/9wAABPAFsAAPAB0AgrIQHh8REjmwEBCwBtAAsABFWLAFLxuxBR8+WbAARViwAC8bsQAPPlmyAwAFERI5sAMvss8DAV2yPwMBcbJvAwFxsh8DAXGynwMBXbIPAwFysgIHCitYIdgb9FmwEdCwABCyEgEKK1gh2Bv0WbAFELIbAQorWCHYG/RZsAMQsB3QMDEzESM1MxEhMgQSFRUUAgQjEyMRMzI2NTU0JiMjETOyu7sBrsEBK6Sl/s/FP+Wjy9XOxLHlAoyqAnqs/sTMSc/+xqoCjP4+/fBG7fr+UgAAAv/3AAAE8AWwAA8AHQCCshAeHxESObAQELAG0ACwAEVYsAUvG7EFHz5ZsABFWLAALxuxAA8+WbIDAAUREjmwAy+yzwMBXbI/AwFxsm8DAXGyHwMBcbKfAwFdsg8DAXKyAgcKK1gh2Bv0WbAR0LAAELISAQorWCHYG/RZsAUQshsBCitYIdgb9FmwAxCwHdAwMTMRIzUzESEyBBIVFRQCBCMTIxEzMjY1NTQmIyMRM7K7uwGuwQErpKX+z8U/5aPL1c7EseUCjKoCeqz+xMxJz/7GqgKM/j798Ebt+v5SAAAB/9QAAAQWBgAAGAB0sgwZGhESOQCwFS+wAEVYsAQvG7EEGz5ZsABFWLAHLxuxBw8+WbAARViwDy8bsQ8PPlmyLxUBXbIPFQFdshgPFRESObAYL7IABworWCHYG/RZsgIEDxESObAEELIMAQorWCHYG/RZsAAQsBHQsBgQsBPQMDEBIxE2MyATESMRNCYjIgcRIxEjNTM1MxUzAnHnd7YBWgXzYV6SSPPDw/PnBMf+/Yr+df09ArpwXYL8+wTHqo+PAAEALQAABLAFsAAPAEwAsABFWLAKLxuxCh8+WbAARViwAi8bsQIPPlmyDwoCERI5sA8vsgAHCitYIdgb9FmwBNCwDxCwBtCwChCyCAEKK1gh2Bv0WbAM0DAxASMRIxEjNTMRITUhFSERMwO5z/vT0/4+BIP+Os8DEvzuAxKqASjMzP7YAAH/6P/sAoUFQQAcAHKyAB0eERI5ALAARViwGy8bsRsbPlmwAEVYsBEvG7ERDz5ZsBsQsAHQsBsQshgBCitYIdgb9FmwBNCwGxCwF9CwFy+wBdCwBS+wFxCyFAcKK1gh2Bv0WbAI0LARELIMAQorWCHYG/RZsBsQsBzQsBwvMDEBETMVIxUzFSMRFBYzMjcVBiMgEREjNTM1IzUzEQGtv7/Y2DE/KitTTf7o0tKysgVB/vm0par+8z43CrwXATUBFqqltAEH//8AEgAABUIHNgImACUAAAEHAEQBIwE2ABMAsABFWLAELxuxBB8+WbAM3DAxAP//ABIAAAVCBzYCJgAlAAABBwB1AcIBNgATALAARViwBS8bsQUfPlmwDdwwMQD//wASAAAFQgc3AiYAJQAAAQcAnQDDATYAEwCwAEVYsAQvG7EEHz5ZsA/cMDEA//8AEgAABUIHLAImACUAAAEHAKQAxQE3AAkAsAQvsBbcMDEA//8AEgAABUIHAgImACUAAAEHAGoA7gE2ABYAsABFWLAELxuxBB8+WbAS3LAb0DAx//8AEgAABUIHlAImACUAAAEHAKIBWAFqAAwAsAQvsBDcsBXQMDH//wASAAAFQgexAiYAJQAAAAcB3wFeARz//wBm/jwE6wXEAiYAJwAAAAcAeQHJ//v//wCUAAAETAc9AiYAKQAAAQcARADoAT0AEwCwAEVYsAYvG7EGHz5ZsA3cMDEA//8AlAAABEwHPQImACkAAAEHAHUBhwE9ABMAsABFWLAGLxuxBh8+WbAO3DAxAP//AJQAAARMBz4CJgApAAABBwCdAIgBPQATALAARViwBi8bsQYfPlmwENwwMQD//wCUAAAETAcJAiYAKQAAAQcAagCzAT0AFgCwAEVYsAYvG7EGHz5ZsBPcsBzQMDH////IAAABoAc9AiYALQAAAQcARP+XAT0AEwCwAEVYsAIvG7ECHz5ZsAXcMDEA//8AowAAAn0HPQImAC0AAAEHAHUANQE9ABMAsABFWLADLxuxAx8+WbAG3DAxAP///8sAAAJ6Bz4CJgAtAAABBwCd/zcBPQATALAARViwAi8bsQIfPlmwCNwwMQD///+/AAAChQcJAiYALQAAAQcAav9iAT0AFgCwAEVYsAIvG7ECHz5ZsAvcsBTQMDH//wCUAAAFFwcsAiYAMgAAAQcApADuATcACQCwBS+wFdwwMQD//wBm/+wFHgc2AiYAMwAAAQcARAE6ATYAEwCwAEVYsAwvG7EMHz5ZsCDcMDEA//8AZv/sBR4HNgImADMAAAEHAHUB2QE2ABMAsABFWLANLxuxDR8+WbAh3DAxAP//AGb/7AUeBzcCJgAzAAABBwCdANoBNgATALAARViwDC8bsQwfPlmwI9wwMQD//wBm/+wFHgcsAiYAMwAAAQcApADcATcAEwCwAEVYsA0vG7ENHz5ZsCLcMDEA//8AZv/sBR4HAgImADMAAAEHAGoBBQE2ABYAsABFWLAMLxuxDB8+WbAm3LAv0DAx//8Aff/sBL0HNgImADkAAAEHAEQBEQE2ABMAsABFWLAJLxuxCR8+WbAS3DAxAP//AH3/7AS9BzYCJgA5AAABBwB1AbABNgAJALAAL7AT3DAxAP//AH3/7AS9BzcCJgA5AAABBwCdALEBNgATALAARViwCS8bsQkfPlmwFdwwMQD//wB9/+wEvQcCAiYAOQAAAQcAagDcATYAFgCwAEVYsAkvG7EJHz5ZsBjcsCHQMDH//wAHAAAE1gc2AiYAPQAAAQcAdQGHATYAEwCwAEVYsAEvG7EBHz5ZsAvcMDEA//8AWv/sA/sGAAImAEUAAAEHAEQArQAAABMAsABFWLAXLxuxFxs+WbAr3DAxAP//AFr/7AP7BgACJgBFAAABBwB1AUwAAAAJALAXL7As3DAxAP//AFr/7AP7BgECJgBFAAABBgCdTQAAEwCwAEVYsBcvG7EXGz5ZsC7cMDEA//8AWv/sA/sF9gImAEUAAAEGAKRPAQATALAARViwFy8bsRcbPlmwLdwwMQD//wBa/+wD+wXMAiYARQAAAQYAangAABYAsABFWLAXLxuxFxs+WbAx3LA60DAx//8AWv/sA/sGXgImAEUAAAEHAKIA4gA0ABYAsABFWLAXLxuxFxs+WbAv3LA30DAx//8AWv/sA/sGfAImAEUAAAAHAd8A6P/n//8AT/48A/UETgImAEcAAAAHAHkBPf/7//8AU//sBAsGAAImAEkAAAEHAEQAoQAAABMAsABFWLAILxuxCBs+WbAf3DAxAP//AFP/7AQLBgACJgBJAAABBwB1AUAAAAAJALAIL7Ag3DAxAP//AFP/7AQLBgECJgBJAAABBgCdQQAAEwCwAEVYsAgvG7EIGz5ZsCLcMDEA//8AU//sBAsFzAImAEkAAAEGAGpsAAAWALAARViwCC8bsQgbPlmwJdywLtAwMf///7QAAAGMBfkCJgCMAAABBgBEg/kAEwCwAEVYsAIvG7ECGz5ZsAXcMDEA//8AjwAAAmkF+QImAIwAAAEGAHUh+QATALAARViwAy8bsQMbPlmwBtwwMQD///+3AAACZgX6AiYAjAAAAQcAnf8j//kAEwCwAEVYsAIvG7ECGz5ZsAjcMDEA////qwAAAnEFxQImAIwAAAEHAGr/Tv/5ABYAsABFWLACLxuxAhs+WbAL3LAU0DAx//8AeQAAA/gF9gImAFIAAAEGAKRVAQAJALADL7Ac3DAxAP//AE//7AQ9BgACJgBTAAABBwBEALYAAAATALAARViwBC8bsQQbPlmwHNwwMQD//wBP/+wEPQYAAiYAUwAAAQcAdQFVAAAACQCwBC+wHdwwMQD//wBP/+wEPQYBAiYAUwAAAQYAnVYAABMAsABFWLAELxuxBBs+WbAf3DAxAP//AE//7AQ9BfYCJgBTAAABBgCkWAEACQCwBC+wJtwwMQD//wBP/+wEPQXMAiYAUwAAAQcAagCBAAAAFgCwAEVYsAQvG7EEGz5ZsCLcsCvQMDH//wB3/+wD9wYAAiYAWQAAAQcARACvAAAAEwCwAEVYsAcvG7EHGz5ZsBLcMDEA//8Ad//sA/cGAAImAFkAAAEHAHUBTgAAAAkAsAYvsBPcMDEA//8Ad//sA/cGAQImAFkAAAEGAJ1PAAATALAARViwBy8bsQcbPlmwFdwwMQD//wB3/+wD9wXMAiYAWQAAAQYAanoAABYAsABFWLAHLxuxBxs+WbAY3LAh0DAx//8ADP5LA9YGAAImAF0AAAEHAHUBFgAAAAkAsAEvsBLcMDEA//8ADP5LA9YFzAImAF0AAAEGAGpCAAAWALAARViwDy8bsQ8bPlmwF9ywINAwMf//ABIAAAVCBuoCJgAlAAABBwBwAL4BOgATALAARViwBC8bsQQfPlmwDNwwMQD//wBa/+wD+wW0AiYARQAAAQYAcEgEAAkAsBcvsCrcMDEA//8AEgAABUIHHAImACUAAAEHAKAA9gE2ABMAsABFWLAELxuxBB8+WbAO3DAxAP//AFr/7AP7BeYCJgBFAAABBwCgAIAAAAATALAARViwFy8bsRcbPlmwLdwwMQAAAgAS/lIFQgWwABYAGQB0shkaGxESObAZELAW0ACwAEVYsBYvG7EWHz5ZsABFWLAULxuxFA8+WbAARViwAS8bsQEPPlmwAEVYsAwvG7EMET5ZsgcDCitYIdgb9FmwARCwEdCwES+yFxQWERI5sBcvshMBCitYIdgb9FmyGRYUERI5MDEBASMGBhUUMzI3FwYjIiY1NDcDIQMhAQMhAwMbAic+V0pHLC4VSVxfdJVz/cx2/vkCJmIBptMFsPpQOF4xRBeOLG5bjWIBSf6tBbD8bwJcAAACAFr+UgP7BE4ALQA4AKayFzk6ERI5sBcQsC/QALAARViwFy8bsRcbPlmwAEVYsCkvG7EpET5ZsABFWLAELxuxBA8+WbAARViwHi8bsR4PPlmwANCwAC+yAhcEERI5sgsXBBESObALL7AXELIPAQorWCHYG/RZshILDxESOUAJDBIcEiwSPBIEXbApELIkAworWCHYG/RZsAQQsi4BCitYIdgb9FmwCxCyMgEKK1gh2Bv0WTAxJSYnBiMiJjU0JDMzNTQmIyIGFSM0NjYzMhYXERQXFSMGBhUUMzI3FwYjIiY1NAMyNjc1IyIGFRQWAv8LDXSoo84BAe+VXmBTavN2y32+4gMpKldKRywuFUlcX3R2SH8gg4eIXQcZRXm6ia25R1RlU0BZm1i/rf4YklcROF4xRBeOLG5bjAEIRjvMXlZGU///AGb/7ATrB0sCJgAnAAABBwB1AcABSwAJALAML7Ag3DAxAP//AE//7AP1BgACJgBHAAABBwB1ASkAAAAJALAPL7Af3DAxAP//AGb/7ATrB0wCJgAnAAABBwCdAMEBSwATALAARViwDC8bsQwfPlmwINwwMQD//wBP/+wD9QYBAiYARwAAAQYAnSoAABMAsABFWLAPLxuxDxs+WbAf3DAxAP//AGb/7ATrBykCJgAnAAABBwChAacBVAATALAARViwDC8bsQwfPlmwJtwwMQD//wBP/+wD9QXeAiYARwAAAQcAoQEQAAkAEwCwAEVYsA8vG7EPGz5ZsCXcMDEA//8AZv/sBOsHTAImACcAAAEHAJ4A2AFLAAkAsAwvsCLcMDEA//8AT//sA/UGAQImAEcAAAEGAJ5BAAAJALAPL7Ah3DAxAP//AJQAAATSBz4CJgAoAAABBwCeAGcBPQAJALABL7Aa3DAxAP//AE//7AVbBgIAJgBIAAABBwGiBAEE/AAGALAeLzAx//8AlAAABEwG8QImACkAAAEHAHAAgwFBABMAsABFWLAGLxuxBh8+WbAN3DAxAP//AFP/7AQLBbQCJgBJAAABBgBwPAQACQCwCC+wHtwwMQD//wCUAAAETAcjAiYAKQAAAQcAoAC7AT0AEwCwAEVYsAYvG7EGHz5ZsA/cMDEA//8AU//sBAsF5gImAEkAAAEGAKB0AAATALAARViwCC8bsQgbPlmwIdwwMQD//wCUAAAETAcbAiYAKQAAAQcAoQFuAUYAEwCwAEVYsAYvG7EGHz5ZsBTcMDEA//8AU//sBAsF3gImAEkAAAEHAKEBJwAJABMAsABFWLAILxuxCBs+WbAm3DAxAAABAJT+UgRMBbAAGwCAshEcHRESOQCwAEVYsBYvG7EWHz5ZsABFWLAPLxuxDxE+WbAARViwBC8bsQQPPlmwAEVYsBQvG7EUDz5ZshoUFhESObAaL7IBAQorWCHYG/RZsBQQsgIBCitYIdgb9FmwA9CwDxCyCgMKK1gh2Bv0WbAWELIYAQorWCHYG/RZMDEBIREhFSMGBhUUMzI3FwYjIiY1NDchESEVIREhA+f9qgK7b1dKRywuFUlcX3SH/ZMDsf1MAlYCiv5AyjheMUQXjixuW4ZfBbDM/m4AAAIAU/5tBAsETgAjACsApbIRLC0REjmwERCwJNAAsABFWLAZLxuxGRs+WbAARViwDC8bsQwRPlmwAEVYsBEvG7ERDz5ZsgIRGRESObAMELIHAworWCHYG/RZsigZERESObAoL7QfKC8oAnG0vyjPKAJdso8oAV20XyhvKAJxtO8o/ygCcbIdBworWCHYG/RZsBEQsiEBCitYIdgb9FmyIxkRERI5sBkQsiQBCitYIdgb9FkwMSUGBwYGFRQzMjcXBiMiJjU0NyYAJzU0NjYzMhIRFSEWFjMyNwEiBgchNSYmA/pJcVdKRywuFUlcX3RQz/77Bn3ii93x/T0LnXenaf7FZHsRAc8IcrhqMzheMUQXjixuW2ZSDQET1zqi/47+5v7+YoachwJWjH0Sen3//wCUAAAETAc+AiYAKQAAAQcAngCfAT0AEwCwAEVYsAYvG7EGHz5ZsBHcMDEA//8AU//sBAsGAQImAEkAAAEGAJ5YAAAJALAIL7Ai3DAxAP//AGr/7ATwB0wCJgArAAABBwCdAL4BSwATALAARViwCy8bsQsfPlmwIdwwMQD//wBS/lYEDAYBAiYASwAAAQYAnUAAABMAsABFWLADLxuxAxs+WbAn3DAxAP//AGr/7ATwBzECJgArAAABBwCgAPEBSwATALAARViwCy8bsQsfPlmwItwwMQD//wBS/lYEDAXmAiYASwAAAQYAoHMAABMAsABFWLADLxuxAxs+WbAo3DAxAP//AGr/7ATwBykCJgArAAABBwChAaQBVAATALAARViwCy8bsQsfPlmwJ9wwMQD//wBS/lYEDAXeAiYASwAAAQcAoQEmAAkAEwCwAEVYsAMvG7EDGz5ZsC3cMDEA//8Aav35BPAFxAImACsAAAAHAaIBu/6S//8AUv5WBAwGqQImAEsAAAEHAbkBJwB+AAkAsAMvsCncMDEA//8AlAAABRgHPgImACwAAAEHAJ0A4gE9ABMAsABFWLAHLxuxBx8+WbAQ3DAxAP//AHkAAAP4B14CJgBMAAABBwCdABcBXQAJALAQL7AT3DAxAP///7MAAAKQBzMCJgAtAAABBwCk/zkBPgATALAARViwAy8bsQMfPlmwB9wwMQD///+fAAACfAXvAiYAjAAAAQcApP8l//oACQCwAi+wD9wwMQD///+5AAACkAbxAiYALQAAAQcAcP8yAUEAEwCwAEVYsAIvG7ECHz5ZsAXcMDEA////pQAAAnwFrQImAIwAAAEHAHD/Hv/9ABMAsABFWLACLxuxAhs+WbAF3DAxAP///98AAAJlByMCJgAtAAABBwCg/2oBPQATALAARViwAi8bsQIfPlmwB9wwMQD////LAAACUQXfAiYAjAAAAQcAoP9W//kAEwCwAEVYsAIvG7ECGz5ZsAfcMDEA//8AF/5YAZ8FsAImAC0AAAAGAKPuBv//AAD+UgGQBdUCJgBNAAAABgCj1wD//wCdAAABowcbAiYALQAAAQcAoQAcAUYAEwCwAEVYsAIvG7ECHz5ZsAzcMDEA//8Ao//sBiYFsAAmAC0AAAAHAC4CQgAA//8Aff5LA5AF1QAmAE0AAAAHAE4CCwAA//8ALf/sBKsHNwImAC4AAAEHAJ0BaAE2ABMAsABFWLAALxuxAB8+WbAU3DAxAP///7X+SwJrBd8CJgCbAAABBwCd/yj/3gATALAARViwDC8bsQwbPlmwEdwwMQD//wCU/fkFGAWwAiYALwAAAAcBogGd/pL//wB9/fkENgYAAiYATwAAAAcBogEt/pL//wCUAAAEJgc2AiYAMAAAAQcAdQApATYAEwCwAEVYsAUvG7EFHz5ZsAjcMDEA//8AigAAAmIHkQImAFAAAAEHAHUAGgGRABMAsABFWLADLxuxAyE+WbAG3DAxAP//AJT9+QQmBbACJgAwAAAABwGiAW3+kv//AFX9+QF/BgACJgBQAAAABwGiABD+kv//AJQAAAQmBbECJgAwAAABBwGiAgoEqwAQALAARViwCi8bsQofPlkwMf//AIwAAALnBgIAJgBQAAABBwGiAY0E/AAQALAARViwCC8bsQghPlkwMf//AJQAAAQmBbACJgAwAAAABwChAcr91P//AIwAAALrBgAAJgBQAAAABwChAWT9r///AJQAAAUXBzYCJgAyAAABBwB1AesBNgATALAARViwCC8bsQgfPlmwDNwwMQD//wB5AAAD+AYAAiYAUgAAAQcAdQFSAAAACQCwAy+wE9wwMQD//wCU/fkFFwWwAiYAMgAAAAcBogHc/pL//wB5/fkD+AROAiYAUgAAAAcBogFB/pL//wCUAAAFFwc3AiYAMgAAAQcAngEDATYAEwCwAEVYsAYvG7EGHz5ZsA/cMDEA//8AeQAAA/gGAQImAFIAAAEGAJ5qAAAJALADL7AV3DAxAP///6UAAAP4BgMCJgBSAAABBwGi/2AE/QAQALAARViwFS8bsRUhPlkwMf//AGb/7AUeBuoCJgAzAAABBwBwANUBOgATALAARViwDC8bsQwfPlmwINwwMQD//wBP/+wEPQW0AiYAUwAAAQYAcFEEAAkAsAQvsBvcMDEA//8AZv/sBR4HHAImADMAAAEHAKABDQE2ABMAsABFWLAMLxuxDB8+WbAi3DAxAP//AE//7AQ9BeYCJgBTAAABBwCgAIkAAAATALAARViwBC8bsQQbPlmwHtwwMQD//wBm/+wFHgc1AiYAMwAAAQcApQFjATYAFgCwAEVYsA0vG7ENHz5ZsCHcsCXQMDH//wBP/+wEPQX/AiYAUwAAAQcApQDfAAAAFgCwAEVYsAQvG7EEGz5ZsB3csCHQMDH//wCUAAAE3gc2AiYANgAAAQcAdQFxATYACQCwBC+wGtwwMQD//wB8AAAC9QYAAiYAVgAAAQcAdQCtAAAACQCwCy+wENwwMQD//wCU/fkE3gWwAiYANgAAAAcBogFu/pL//wBP/fkCtAROAiYAVgAAAAcBogAK/pL//wCUAAAE3gc3AiYANgAAAQcAngCJATYACQCwBC+wHNwwMQD//wA4AAAC+gYBAiYAVgAAAQYAnsYAAAkAsAsvsBLcMDEA//8ASv/sBIoHNgImADcAAAEHAHUBjgE2AAkAsAkvsCrcMDEA//8AS//sA8oGAAImAFcAAAEHAHUBOgAAAAkAsAkvsCncMDEA//8ASv/sBIoHNwImADcAAAEHAJ0AjwE2ABMAsABFWLAJLxuxCR8+WbAq3DAxAP//AEv/7APKBgECJgBXAAABBgCdOwAAEwCwAEVYsAkvG7EJGz5ZsCncMDEA//8ASv5BBIoFxAImADcAAAAHAHkBnQAA//8AS/44A8oETgImAFcAAAAHAHkBRP/3//8ASv35BIoFxAImADcAAAAHAaIBif6S//8AS/35A8oETgImAFcAAAAHAaIBMP6S//8ASv/sBIoHNwImADcAAAEHAJ4ApgE2AAkAsAkvsCzcMDEA//8AS//sA8oGAQImAFcAAAEGAJ5SAAAJALAJL7Ar3DAxAP//AC39+QSwBbACJgA4AAAABwGiAXf+kv//AAj9+QJyBUECJgBYAAAABwGiAMj+kv//AC3+RASwBbACJgA4AAAABwB5AYsAA///AAj+QQKlBUECJgBYAAAABwB5ANwAAP//AC0AAASwBzcCJgA4AAABBwCeAJgBNgATALAARViwBi8bsQYfPlmwDdwwMQD//wAI/+wDJwaDACYAWAAAAAcBogHNBX3//wB9/+wEvQcsAiYAOQAAAQcApACzATcAEwCwAEVYsBAvG7EQHz5ZsBTcMDEA//8Ad//sA/cF9gImAFkAAAEGAKRRAQATALAARViwDS8bsQ0bPlmwFNwwMQD//wB9/+wEvQbqAiYAOQAAAQcAcACsAToACQCwAC+wEdwwMQD//wB3/+wD9wW0AiYAWQAAAQYAcEoEABMAsABFWLAGLxuxBhs+WbAS3DAxAP//AH3/7AS9BxwCJgA5AAABBwCgAOQBNgATALAARViwCS8bsQkfPlmwFNwwMQD//wB3/+wD9wXmAiYAWQAAAQcAoACCAAAAEwCwAEVYsAcvG7EHGz5ZsBTcMDEA//8Aff/sBL0HlAImADkAAAEHAKIBRgFqAAwAsAAvsBbcsBvQMDH//wB3/+wD9wZeAiYAWQAAAQcAogDkADQADACwBi+wFtywG9AwMf//AH3/7AS9BzUCJgA5AAABBwClAToBNgAWALAARViwEC8bsRAfPlmwE9ywF9AwMf//AHf/7AQuBf8CJgBZAAABBwClANgAAAAMALAGL7AT3LAV0DAxAAEAff6JBL0FsAAfAFeyHCAhERI5ALAARViwGC8bsRgfPlmwAEVYsBMvG7ETDz5ZsABFWLAOLxuxDhc+WbIEExgREjmyCQMKK1gh2Bv0WbATELIcAQorWCHYG/RZsBgQsB/QMDEBERQGBwYGFRQzMjcXBiMiJjU0NyAANREzERQWMyAREQS9hX49T0csLhVJXF90Nv8A/tv8lJABJAWw/DKY5D0pWTdEF44sbltVRQEM6wPN/DKSmgE0A8YAAQB3/lID9wQ6AB8AZrIaICEREjkAsABFWLAXLxuxFxs+WbAARViwEi8bsRIPPlmwAEVYsB8vG7EfDz5ZsABFWLAKLxuxChE+WbIFAworWCHYG/RZsB8QsA/QsA8vsBIQshoBCitYIdgb9FmwFxCwHdAwMSEGBhUUMzI3FwYjIiY1NDcnBiMiJjURMxEUMzI3ETMRA+JXSkcsLhVJXF90kgVrxbC186uxPvM4XjFEF44sbluMYWJ+zsMCvf1Gzn8DCfvG//8AMAAABuUHNwImADsAAAEHAJ0BqAE2ABMAsABFWLAMLxuxDB8+WbAP3DAxAP//ACEAAAXMBgECJgBbAAABBwCdAQoAAAATALAARViwCy8bsQsbPlmwEdwwMQD//wAHAAAE1gc3AiYAPQAAAQcAnQCIATYAEwCwAEVYsAEvG7EBHz5ZsAvcMDEA//8ADP5LA9YGAQImAF0AAAEGAJ0XAAATALAARViwDy8bsQ8bPlmwFNwwMQD//wAHAAAE1gcCAiYAPQAAAQcAagCzATYAFgCwAEVYsAgvG7EIHz5ZsBDcsBnQMDH//wBQAAAEjAc2AiYAPgAAAQcAdQGDATYAEwCwAEVYsAcvG7EHHz5ZsAzcMDEA//8AUgAAA8AGAAImAF4AAAEHAHUBGwAAABMAsABFWLAHLxuxBxs+WbAM3DAxAP//AFAAAASMBxQCJgA+AAABBwChAWoBPwATALAARViwBy8bsQcfPlmwEtwwMQD//wBSAAADwAXeAiYAXgAAAQcAoQECAAkAEwCwAEVYsAcvG7EHGz5ZsBLcMDEA//8AUAAABIwHNwImAD4AAAEHAJ4AmwE2AAkAsAcvsA7cMDEA//8AUgAAA8AGAQImAF4AAAEGAJ4zAAAJALAHL7AO3DAxAP////YAAAdXB0ICJgCBAAABBwB1ArsBQgATALAARViwBi8bsQYfPlmwFdwwMQD//wBI/+wGhAYBAiYAhgAAAQcAdQJxAAEACQCwFy+wP9wwMQD//wBp/6EFIgeAAiYAgwAAAQcAdQHgAYAAEwCwAEVYsBAvG7EQHz5ZsCzcMDEA//8AT/93BD0F/gImAIkAAAEHAHUBMP/+ABMAsABFWLAELxuxBBs+WbAo3DAxAP///6YAAAQqBI0CJgG9AAABBwHe/xb/bgBGALIfFwFxsm8XAXGy/xcBcbIPFwFytq8XvxfPFwNysv8XAXKyXxcBcra/F88X3xcDcbI/FwFxtN8X7xcCXbQfFy8XAl0wMf///6YAAAQqBI0CJgG9AAABBwHe/xb/bgBGALIfFwFxsm8XAXGy/xcBcbIPFwFytq8XvxfPFwNysv8XAXKyXxcBcra/F88X3xcDcbI/FwFxtN8X7xcCXbQfFy8XAl0wMf//ACQAAAQWBI0CJgHNAAABBgHeMr4ACACyAAsBXTAx//8ACQAABJQGHgImAboAAAEHAEQAxwAeABMAsABFWLAELxuxBB0+WbAM3DAxAP//AAkAAASUBh4CJgG6AAABBwB1AWYAHgATALAARViwBS8bsQUdPlmwDdwwMQD//wAJAAAElAYfAiYBugAAAQYAnWceABMAsABFWLAELxuxBB0+WbAP3DAxAP//AAkAAASUBhQCJgG6AAABBgCkaR8ACQCwBC+wFtwwMQD//wAJAAAElAXqAiYBugAAAQcAagCSAB4AFgCwAEVYsAQvG7EEHT5ZsBLcsBvQMDH//wAJAAAElAZ8AiYBugAAAQcAogD8AFIAFgCwAEVYsAQvG7EEHT5ZsBDcsBjQMDH//wAJAAAElAaZAiYBugAAAAcB3wECAAT//wBP/kEEQwSdAiYBvAAAAAcAeQFrAAD//wB2AAADtQYeAiYBvgAAAQcARACWAB4AEwCwAEVYsAYvG7EGHT5ZsA3cMDEA//8AdgAAA7UGHgImAb4AAAEHAHUBNQAeABMAsABFWLAHLxuxBx0+WbAO3DAxAP//AHYAAAO1Bh8CJgG+AAABBgCdNh4AEwCwAEVYsAYvG7EGHT5ZsBDcMDEA//8AdgAAA7UF6gImAb4AAAEGAGphHgAWALAARViwBi8bsQYdPlmwE9ywHNAwMf///6YAAAF+Bh4CJgHCAAABBwBE/3UAHgATALAARViwAi8bsQIdPlmwBdwwMQD//wCDAAACWwYeAiYBwgAAAQYAdRMeABMAsABFWLADLxuxAx0+WbAG3DAxAP///6kAAAJYBh8CJgHCAAABBwCd/xUAHgATALAARViwAi8bsQIdPlmwCNwwMQD///+dAAACYwXqAiYBwgAAAQcAav9AAB4AFgCwAEVYsAIvG7ECHT5ZsAvcsBTQMDH//wB2AAAEZwYUAiYBxwAAAQcApACIAB8ACQCwBS+wFdwwMQD//wBP//AEbwYeAiYByAAAAQcARADVAB4AEwCwAEVYsAsvG7ELHT5ZsB7cMDEA//8AT//wBG8GHgImAcgAAAEHAHUBdAAeAAkAsAsvsB/cMDEA//8AT//wBG8GHwImAcgAAAEGAJ11HgATALAARViwCy8bsQsdPlmwIdwwMQD//wBP//AEbwYUAiYByAAAAQYApHcfAAkAsAsvsCjcMDEA//8AT//wBG8F6gImAcgAAAEHAGoAoAAeABYAsABFWLALLxuxCx0+WbAk3LAt0DAx//8AZ//wBB4GHgImAc4AAAEHAEQAtQAeABMAsABFWLAILxuxCB0+WbAR3DAxAP//AGf/8AQeBh4CJgHOAAABBwB1AVQAHgATALAARViwDy8bsQ8dPlmwEtwwMQD//wBn//AEHgYfAiYBzgAAAQYAnVUeABMAsABFWLAILxuxCB0+WbAU3DAxAP//AGf/8AQeBeoCJgHOAAABBwBqAIAAHgAWALAARViwCC8bsQgdPlmwF9ywINAwMf//AAUAAAQ2Bh4CJgHSAAABBwB1AS0AHgATALAARViwAS8bsQEdPlmwC9wwMQD//wAJAAAElAXSAiYBugAAAQYAcGIiABMAsABFWLAELxuxBB0+WbAM3DAxAP//AAkAAASUBgQCJgG6AAABBwCgAJoAHgATALAARViwBC8bsQQdPlmwDtwwMQAAAgAJ/lIElASNABYAGQBxshkaGxESObAZELAW0ACwAEVYsAAvG7EAHT5ZsABFWLAULxuxFA8+WbAARViwAS8bsQEPPlmwAEVYsAwvG7EMET5ZsgcDCitYIdgb9FmwARCwEdCyFxQAERI5sBcvshMBCitYIdgb9FmyGQAUERI5MDEBASMGBhUUMzI3FwYjIiY1NDcnIQcjAQMhAwK/AdU2V0pHLC4VSVxfdJ1Z/h5f9QHXPAFUqgSN+3M4XjFEF44sbluSYev5BI39JQG6AP//AE//8ARDBh4CJgG8AAABBwB1AWMAHgAJALALL7Ae3DAxAP//AE//8ARDBh8CJgG8AAABBgCdZB4AEwCwAEVYsAsvG7ELHT5ZsCDcMDEA//8AT//wBEMF/AImAbwAAAEHAKEBSgAnABMAsABFWLALLxuxCx0+WbAk3DAxAP//AE//8ARDBh8CJgG8AAABBgCeex4ACQCwCy+wINwwMQD//wBqAAAEKgYfAiYBvQAAAQYAnvgeAAkAsAEvsBjcMDEA//8AdgAAA7UF0gImAb4AAAEGAHAxIgATALAARViwBi8bsQYdPlmwDdwwMQD//wB2AAADtQYEAiYBvgAAAQYAoGkeABMAsABFWLAGLxuxBh0+WbAP3DAxAP//AHYAAAO1BfwCJgG+AAABBwChARwAJwATALAARViwBi8bsQYdPlmwFNwwMQAAAQB2/lIDtQSNABsAgLIRHB0REjkAsABFWLAWLxuxFh0+WbAARViwDy8bsQ8RPlmwAEVYsAQvG7EEDz5ZsABFWLAULxuxFA8+WbIbFgQREjmwGy+yAAEKK1gh2Bv0WbAUELICAQorWCHYG/RZsAPQsA8QsgoDCitYIdgb9FmwFhCyGAEKK1gh2Bv0WTAxASERIRUjBgYVFDMyNxcGIyImNTQ3IREhFSERIQNf/goCTF5XSkcsLhVJXF90h/37Azz9twH2Afj+ysI4XjFEF44sbluGXwSNxP7yAP//AHYAAAO1Bh8CJgG+AAABBgCeTR4AEwCwAEVYsAYvG7EGHT5ZsBHcMDEA//8AVP/wBEgGHwImAcAAAAEGAJ1oHgATALAARViwCi8bsQodPlmwIdwwMQD//wBU//AESAYEAiYBwAAAAQcAoACbAB4AEwCwAEVYsAovG7EKHT5ZsCDcMDEA//8AVP/wBEgF/AImAcAAAAEHAKEBTgAnABMAsABFWLAKLxuxCh0+WbAl3DAxAP//AFT9+QRIBJ0CJgHAAAAABwGiAWr+kv//AHYAAARoBh8CJgHBAAABBgCdex4AEwCwAEVYsAcvG7EHHT5ZsBDcMDEA////kQAAAm4GFAImAcIAAAEHAKT/FwAfAAkAsAIvsA/cMDEA////lwAAAm4F0gImAcIAAAEHAHD/EAAiABMAsABFWLACLxuxAh0+WbAF3DAxAP///70AAAJDBgQCJgHCAAABBwCg/0gAHgATALAARViwAi8bsQIdPlmwB9wwMQD//wAV/lIBjQSNAiYBwgAAAAYAo+wA//8AfAAAAYIF/AImAcIAAAEGAKH7JwATALAARViwAi8bsQIdPlmwDNwwMQD//wAk//AENwYfAiYBwwAAAQcAnQD0AB4AEwCwAEVYsAAvG7EAHT5ZsBPcMDEA//8Adv35BGgEjQImAcQAAAAHAaIBEv6S//8AdgAAA5QGHgImAcUAAAEGAHUKHgATALAARViwBS8bsQUdPlmwCNwwMQD//wB2/fkDlASNAiYBxQAAAAcBogEQ/pL//wB2AAADlASQAiYBxQAAAQcBogGVA4oAEACwAEVYsAovG7EKHT5ZMDH//wB2AAADlASNAiYBxQAAAAcAoQFy/Ub//wB2AAAEZwYeAiYBxwAAAQcAdQGFAB4AEwCwAEVYsAgvG7EIHT5ZsAzcMDEA//8Adv35BGcEjQImAccAAAAHAaIBeP6S//8AdgAABGcGHwImAccAAAEHAJ4AnQAeABMAsABFWLAGLxuxBh0+WbAP3DAxAP//AE//8ARvBdICJgHIAAABBgBwcCIACQCwCy+wHdwwMQD//wBP//AEbwYEAiYByAAAAQcAoACoAB4AEwCwAEVYsAsvG7ELHT5ZsCDcMDEA//8AT//wBG8GHQImAcgAAAEHAKUA/gAeAAwAsAsvsB/csCHQMDH//wB2AAAEOQYeAiYBywAAAQcAdQEXAB4ACQCwBC+wGdwwMQD//wB2/fkEOQSNAiYBywAAAAcBogEY/pL//wB2AAAEOQYfAiYBywAAAQYAni8eAAkAsAQvsBvcMDEA//8APv/wA+8GHgImAcwAAAEHAHUBQQAeAAkAsAkvsCjcMDEA//8APv/wA+8GHwImAcwAAAEGAJ1CHgATALAARViwCS8bsQkdPlmwKtwwMQD//wA+/kED7wSdAiYBzAAAAAcAeQFPAAD//wA+//AD7wYfAiYBzAAAAQYAnlkeAAkAsAkvsCrcMDEA//8AJP35BBYEjQImAc0AAAAHAaIBJf6S//8AJAAABBYGHwImAc0AAAEGAJ5HHgATALAARViwBi8bsQYdPlmwDdwwMQD//wAk/kcEFgSNAiYBzQAAAAcAeQE5AAb//wBn//AEHgYUAiYBzgAAAQYApFcfABMAsABFWLAPLxuxDx0+WbAT3DAxAP//AGf/8AQeBdICJgHOAAABBgBwUCIACQCwAC+wENwwMQD//wBn//AEHgYEAiYBzgAAAQcAoACIAB4AEwCwAEVYsAgvG7EIHT5ZsBPcMDEA//8AZ//wBB4GfAImAc4AAAEHAKIA6gBSAAwAsAAvsBXcsBrQMDH//wBn//AENAYdAiYBzgAAAQcApQDeAB4ADACwAC+wEtywFNAwMQABAGf+ggQeBI0AHgBhshsfIBESOQCwAEVYsBcvG7EXHT5ZsABFWLAALxuxAB0+WbAARViwDS8bsQ0XPlmwAEVYsBIvG7ESDz5ZsgQSABESObANELIIAworWCHYG/RZsBIQshsBCitYIdgb9FkwMQERBgYHBhUUMzI3FwYjIiY1NDcmJicRMxEUFjMyNxEEHgF9d39HLC4VSVxfdEDN8gLxfmzlBASN/PyBvTJWWkQXjixuW11JBta7AwX9AHNo1AMH//8AKAAABeUGHwImAdAAAAEHAJ0BGQAeABMAsABFWLABLxuxAR0+WbAP3DAxAP//AAUAAAQ2Bh8CJgHSAAABBgCdLh4AEwCwAEVYsAgvG7EIHT5ZsA3cMDEA//8ABQAABDYF6gImAdIAAAEGAGpZHgAWALAARViwCC8bsQgdPlmwENywGdAwMf//AEEAAAPzBh4CJgHTAAABBwB1ATAAHgATALAARViwCC8bsQgdPlmwDNwwMQD//wBBAAAD8wX8AiYB0wAAAQcAoQEXACcAEwCwAEVYsAcvG7EHHT5ZsBLcMDEA//8AQQAAA/MGHwImAdMAAAEGAJ5IHgATALAARViwBy8bsQcdPlmwD9wwMQD//wASAAAFQgZBAiYAJQAAAAYArb8A////SgAABLAGQQAmAClkAAAHAK3+hAAA////UwAABXwGQQAmACxkAAAHAK3+jQAA////VgAAAgMGQwAmAC1kAAAHAK3+kAAC////p//sBTIGQQAmADMUAAAHAK3+4QAA///+4QAABToGQQAmAD1kAAAHAK3+GwAA////sgAABPEGQQAmALkUAAAHAK3+7AAA////h//0AtoGmgImAMIAAAEHAK7/IP/rABwAsABFWLAMLxuxDBs+WbAY3LAQ0LAYELAh0DAx//8AEgAABUIFsAIGACUAAP//AJQAAASjBbACBgAmAAD//wCUAAAETAWwAgYAKQAA//8AUAAABIwFsAIGAD4AAP//AJQAAAUYBbACBgAsAAD//wCjAAABnwWwAgYALQAA//8AlAAABRgFsAIGAC8AAP//AJQAAAZqBbACBgAxAAD//wCUAAAFFwWwAgYAMgAA//8AZv/sBR4FxAIGADMAAP//AJQAAATUBbACBgA0AAD//wAtAAAEsAWwAgYAOAAA//8ABwAABNYFsAIGAD0AAP//ACkAAATpBbACBgA8AAD///+/AAAChQcJAiYALQAAAQcAav9iAT0AFgCwAEVYsAIvG7ECHz5ZsAvcsBTQMDH//wAHAAAE1gcCAiYAPQAAAQcAagCzATYAFgCwAEVYsAgvG7EIHz5ZsBDcsBnQMDH//wBW/+sEeQZBAiYAugAAAQcArQFQAAAACQCwEy+wJNwwMQD//wBg/+wEDAZBAiYAvgAAAQcArQEZAAAACQCwCS+wKtwwMQD//wB+/mEEBgZBAiYAwAAAAQcArQEjAAAACQCwAy+wFNwwMQD//wCp//QCYQYsAiYAwgAAAQYArQ/rAAkAsAAvsA/cMDEA//8AgP/rBAgGogImAMoAAAEGAK4d8wAcALAARViwAC8bsQAbPlmwHtywFdCwHhCwJ9AwMf//AI4AAARrBDoCBgCNAAD//wBP/+wEPQROAgYAUwAA//8Akv5gBB8EOgIGAHYAAP//ABYAAAPaBDoCBgBaAAD//wAfAAAD6AQ6AgYAXAAA////zP/0ApIFtwImAMIAAAEHAGr/b//rABYAsABFWLAMLxuxDBs+WbAU3LAd0DAx//8AgP/rBAgFvwImAMoAAAEGAGps8wAWALAARViwAC8bsQAbPlmwGtywI9AwMf//AE//7AQ9BkECJgBTAAABBwCtASIAAAAJALAEL7Ad3DAxAP//AID/6wQIBjQCJgDKAAABBwCtAQ3/8wAJALAAL7AV3DAxAP//AGb/7AYtBjICJgDNAAABBwCtAiz/8QAJALAAL7Aj3DAxAP//AJQAAARMBwkCJgApAAABBwBqALMBPQAWALAARViwBi8bsQYfPlmwE9ywHNAwMf//AJsAAAQ3Bz0CJgCwAAABBwB1AYIBPQATALAARViwBC8bsQQfPlmwCNwwMQAAAQBK/+wEigXEACcAY7IRKCkREjkAsABFWLAJLxuxCR8+WbAARViwHS8bsR0PPlmyAh0JERI5sg4JHRESObAJELIRAQorWCHYG/RZsAIQshcBCitYIdgb9FmyIh0JERI5sB0QsiUBCitYIdgb9FkwMQE0JiQnJjU0JDMyFhYVIzQmIyIGFRQWBBYWFRQEIyIkJjUzFBYzMjYDjYf+oGjHAR/lmO6I/I+FfImUAVTOYP7p757+95P9pJmEhQF3YGhqQX3JsORwz35ygWpfUGtlgadwttd1zol8iGsA//8AowAAAZ8FsAIGAC0AAP///78AAAKFBwkCJgAtAAABBwBq/2IBPQAWALAARViwAi8bsQIfPlmwC9ywFNAwMf//AC3/7APkBbACBgAuAAD//wCbAAAFMAWwAgYB4wAA//8AlAAABRgHNgImAC8AAAEHAHUBbgE2ABMAsABFWLAFLxuxBR8+WbAP3DAxAP//ADn/6wTdByMCJgDdAAABBwCgANkBPQATALAARViwDy8bsQ8fPlmwE9wwMQD//wASAAAFQgWwAgYAJQAA//8AlAAABKMFsAIGACYAAP//AJsAAAQ3BbACBgCwAAD//wCUAAAETAWwAgYAKQAA//8AlAAABQ0HIwImANsAAAEHAKABHQE9ABMAsABFWLAILxuxCB8+WbAN3DAxAP//AJQAAAZqBbACBgAxAAD//wCUAAAFGAWwAgYALAAA//8AZv/sBR4FxAIGADMAAP//AJsAAAUUBbACBgC1AAD//wCUAAAE1AWwAgYANAAA//8AZv/sBOsFxAIGACcAAP//AC0AAASwBbACBgA4AAD//wApAAAE6QWwAgYAPAAA//8AWv/sA/sETgIGAEUAAP//AFP/7AQLBE4CBgBJAAD//wCGAAAEEgXZAiYA7wAAAQcAoACX//MAEwCwAEVYsAgvG7EIGz5ZsA3cMDEA//8AT//sBD0ETgIGAFMAAP//AHz+YAQwBE4CBgBUAAAAAQBP/+wD9QROABwAS7IAHR4REjkAsABFWLAPLxuxDxs+WbAARViwCC8bsQgPPlmyAAEKK1gh2Bv0WbIDCA8REjmyEw8IERI5sA8QshYBCitYIdgb9FkwMSUyNjczDgIjIgARNTQAMzIWFyMmJiMiBgcVFBYCOVt4BOUEdsp14/72AQjkwfMG5QR3XHaAAX+uak5lr2YBJgEDGfcBKeG3XXirriewrQD//wAM/ksD1gQ6AgYAXQAA//8AHwAAA+gEOgIGAFwAAP//AFP/7AQLBcwCJgBJAAABBgBqbAAAFgCwAEVYsAgvG7EIGz5ZsCXcsC7QMDH//wCFAAADTQXzAiYA6wAAAQcAdQDC//MAEwCwAEVYsAQvG7EEGz5ZsAjcMDEA//8AS//sA8oETgIGAFcAAP//AH0AAAGQBdUCBgBNAAD///+rAAACcQXFAiYAjAAAAQcAav9O//kAFgCwAEVYsAIvG7ECGz5ZsAvcsBTQMDH///+1/ksBhQXVAgYATgAA//8AjwAABGUF8gImAPAAAAEHAHUBRP/yABMAsABFWLAELxuxBBs+WbAP3DAxAP//AAz+SwPWBeYCJgBdAAABBgCgSgAAEwCwAEVYsA8vG7EPGz5ZsBPcMDEA//8AMAAABuUHNgImADsAAAEHAEQCCAE2ABMAsABFWLALLxuxCx8+WbAO3DAxAP//ACEAAAXMBgACJgBbAAABBwBEAWoAAAATALAARViwCy8bsQsbPlmwDtwwMQD//wAwAAAG5Qc2AiYAOwAAAQcAdQKnATYAEwCwAEVYsAwvG7EMHz5ZsA/cMDEA//8AIQAABcwGAAImAFsAAAEHAHUCCQAAABMAsABFWLAMLxuxDBs+WbAP3DAxAP//ADAAAAblBwICJgA7AAABBwBqAdMBNgAMALABL7AW3LAN0DAx//8AIQAABcwFzAImAFsAAAEHAGoBNQAAAAwAsAEvsBbcsA3QMDH//wAHAAAE1gc2AiYAPQAAAQcARADoATYAEwCwAEVYsAgvG7EIHz5ZsArcMDEA//8ADP5LA9YGAAImAF0AAAEGAER3AAAJALABL7AQ3DAxAP//AFID/AELBgADBgALAAAAFgCwAEVYsAQvG7EEIT5ZsAHQsAEvMDH//wBlA/QCQAYAAwYABgAAACwAsABFWLAJLxuxCSE+WbAARViwBC8bsQQhPlmwCRCwBtCwBi+wAdCwAS8wMf//AI//8gPIBbAAJgAFAAAABwAFAiUAAP///7H+SwJzBd8CJgCbAAABBwCe/z//3gAJALAAL7AR3DAxAP//ADMEAAFlBgACBgFtAAD//wCUAAAGagc2AiYAMQAAAQcAdQKQATYAEwCwAEVYsAIvG7ECHz5ZsBHcMDEA//8AfAAABnkGAAImAFEAAAEHAHUCoAAAAAkAsAMvsCDcMDEA//8AEv5tBUIFsAImACUAAAAHAKYBegAD//8AWv5xA/sETgImAEUAAAAHAKYArQAH//8AlAAABEwHPQImACkAAAEHAEQA6AE9ABMAsABFWLAGLxuxBh8+WbAN3DAxAP//AJQAAAUNBz0CJgDbAAABBwBEAUoBPQATALAARViwCC8bsQgfPlmwC9wwMQD//wBT/+wECwYAAiYASQAAAQcARAChAAAAEwCwAEVYsAgvG7EIGz5ZsB/cMDEA//8AhgAABBIF8wImAO8AAAEHAEQAxP/zABMAsABFWLAILxuxCBs+WbAL3DAxAP//AEQAAAVcBbACBgC4AAD//wBP/iIFfgQ6AgYAzAAA//8AEAAABPMG/AImARgAAAEHAKsESQEOABYAsABFWLAPLxuxDx8+WbAR3LAV0DAx////8QAABBgF0AImARkAAAEHAKsD5f/iABYAsABFWLARLxuxERs+WbAT3LAX0DAx//8AT/5LCGQETgAmAFMAAAAHAF0EjgAA//8AZv5LCVwFxAAmADMAAAAHAF0FhgAA//8ASf46BH8FwwImANoAAAAHAbABkv+g//8ATf47A8QETQImAO4AAAAHAbABOf+h//8AZv4+BOsFxAImACcAAAAHAbAB1v+k//8AT/4+A/UETgImAEcAAAAHAbABSv+k//8ABwAABNYFsAIGAD0AAP//ACD+XwP1BDoCBgC8AAD//wCjAAABnwWwAgYALQAA//8AFgAAB5sHIwImANkAAAEHAKACHQE9ABMAsABFWLANLxuxDR8+WbAZ3DAxAP//AB4AAAZcBdkCJgDtAAABBwCgAYf/8wATALAARViwDS8bsQ0bPlmwGdwwMQD//wCjAAABnwWwAgYALQAA//8AEgAABUIHHAImACUAAAEHAKAA9gE2ABMAsABFWLAELxuxBB8+WbAO3DAxAP//AFr/7AP7BeYCJgBFAAABBwCg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ALAARViwBy8bsQcfPlmxDwn0sBXQMDEA//8AU//sBMgGfAImAEkAAAEGAbc97AAMALAIL7Ag3LAl0DAx////1QAABEwHtQImACkAAAEHAbYAiQEyABcAsABFWLAGLxuxBh8+WbEPCfSwFNAwMQD///+O/+wECwZ5AiYASQAAAQYBtkL2AAwAsAgvsB7csCXQMDH//wCUAAAEkgflAiYAKQAAAQcBtQCIARoADACwBi+wDNywE9AwMf//AFP/7ARLBqkCJgBJAAABBgG1Qd4ADACwCC+wHtywJdAwMf//AJQAAARMB90CJgApAAABBwG0AIkBDAAMALAGL7AM3LAT0DAx//8AU//sBAsGoQImAEkAAAEGAbRC0AAMALAIL7Ae3LAl0DAx//8AlP6eBEwHPgImACkAAAAnAJ0AiAE9AAcArATLAAr//wBT/pQECwYBAiYASQAAACYAnUEAAAcArASPAAD//wCjAAACEQfCAiYALQAAAQcAqgN4AUMACQCwAi+wBNwwMQD//wCPAAAB/QZ+AiYAjAAAAQcAqgNk//8ACQCwAi+wBNwwMQD//wCU/poBpwWwAiYALQAAAAcArAN4AAb//wB4/p4BkAXVAiYATQAAAAcArANcAAr//wBm/pQFHgXEAiYAMwAAAAcArAUdAAD//wBP/pIEPQROAiYAUwAAAAcArASd//7//wBm/+wFHge7AiYAMwAAAQcAqgUcATwACQCwFC+wH9wwMQD//wBP/+wEPQaFAiYAUwAAAQcAqgSYAAYACQCwBC+wG9wwMQD//wBm/+wFYQexAiYAMwAAAQcBtwDWASEADACwFC+wIdywJtAwMf//AE//7ATdBnwCJgBTAAABBgG3UuwADACwBC+wHdywItAwMf//ACf/7AUeB64CJgAzAAABBwG2ANsBKwAMALAUL7Af3LAm0DAx////o//sBD0GeQImAFMAAAEGAbZX9gAMALAEL7Ab3LAi0DAx//8AZv/sBR4H3gImADMAAAEHAbUA2gETAAwAsBQvsB/csCbQMDH//wBP/+wEYAapAiYAUwAAAQYBtVbeAAwAsAQvsBvcsCLQMDH//wBm/+wFHgfWAiYAMwAAAQcBtADbAQUADACwFC+wH9ywJtAwMf//AE//7AQ9BqECJgBTAAABBgG0V9AADACwBC+wG9ywItAwMf//AGb+lAUe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GzIcqB5aIBg63iFOIuA5MiUuOt463jb2Ot463iX4J5I5oChwKTIpwCoeKvg5KCuCOZAsTCx2Ldw23DBiMKAx0jOQNtwyVDLaMwQzWjOQN0A3+DakOCQztjbcOco5KDqMOow5KDaeM+A2njaeNp41UjV4NYI1jDWqNbw1zjXgNso7ijuKO4o7ijg+N0A3QDdAN0A3QDdAN0A2yjfYN9g32DfYOt463jreOt463juKO4o7ijuKO4o4HjgeOB44HjsAN7Y3tje2N7Y3tje2N7Y37jfuN+437jmWN/g3+Df4N/g3+DgkOCQ3QDe2N0A3tjdAN7Y2yjbKNso2yjuKN9g37jfYN+432DfuN9g37jfYN+463jmWOt463jreOt463jgeOow16jXqNeo16jreOZY63jmWOt45ljmWO4o3+DuKN/g7ijf4Nhg2GDYYOD44Pjg+OB44HjgeOB44HjgeNng7ADgkOwA2KjYqNio3QDfYOt463juKOwA3QDZMN9g2KjreOt46jDreOt47ijZWOD47ADkyOt47ADmWN/g4JDf4N9g5yjreOt44HjqMOow29jdANkw5yjfYOt463juKNlY2yjg+OTI3tjfuN/g23DgkOZA37jkoOCQ2eDZ4Nng7ADgkNp42njaeOt45ljdAN7Y32DfuNqQ4JDbKOwA4JDreOTI5kDreN0A3tjdAN7Y32DfuN+437jkyOZA7ijf4N/g23Db2OCQ29jgkNvY4JDkyOZA3QDe2N0A3tjdAN7Y3QDe2N0A3tjdAN7Y3QDe2N0A3tjdAN7Y3QDe2N0A3tjdAN7Y32DfuN9g37jfYN+432DfuN9g37jfYN+432DfuN9g37jreOt47ijf4O4o3+DuKN/g7ijf4O4o3+DuKN/g7ijf4N/g4HjgeOwA4JDsAOCQ7ADgkOow63jg+OTI5kDnKOSg5MjmQOZY5oDnKOow63jreOwA7igACAIsABAAEAAAABgAGAAEACwAMAAIAEwATAAQAJQAqAAUALAA2AAsAOAA/ABYARQBGAB4ASQBKACAATABMACIATwBPACMAUQBUACQAVgBWACgAWABYACkAWgBdACoAXwBfAC4AigCKAC8AnACcADAAsAC0ADEAtgC4ADYAugC6ADkAvAC8ADoAvwDAADsAwgDCAD0AxADEAD4AxgDNAD8A0QDRAEcA0wDdAEgA3wDfAFMA4QDjAFQA5QDuAFcA8ADwAGEA9QD3AGIA+gD7AGUA/QD/AGcBAgEEAGoBCQEJAG0BDAEMAG4BFwEZAG8BIQEhAHIBKwEtAHMBMAEwAHYBMgEyAHcBSQFJAHgBbAFtAHkBbwFxAHsBugG6AH4BvQG9AH8BxAHFAIAByAHIAIIBygHLAIMBzQHNAIUCKAIoAIYCKgIrAIcCRgJHAIkCSQJJAIsCSwJsAIwCbgJxAK4CdgJ7ALICgAKIALgCigKKAMECjAKMAMICjgKOAMMCkAKQAMQCkgKbAMUCpAKmAM8CqAKoANICqgKqANMCrAKsANQCrgKuANUCsQKxANYCswKzANcCtQK1ANgCtwK3ANkCuQK5ANoCuwK7ANsCvQLJANwCywLLAOkCzQLNAOoCzwLPAOsC2gLaAOwC3ALcAO0C3gLeAO4C4ALgAO8C4gLiAPAC5ALkAPEC5gLmAPIC6ALoAPMC6gLqAPQC7ALsAPUC7gLxAPYC8wLzAPoC9QL1APsDUgNXAPwDWgNpAQIDbANsARIDcANwARMDcgNyARQDdgN2ARUDeQN6ARYDfAOFARgDhwOJASIDiwOQASUDkgOTASsDlQOYAS0DngOfATEDoQOhATMDowOjATQDpQOoATUDqwOwATkDsgOyAT8DtgO3AUADvAO8AUIDvgPHAUMDygPLAU0DzQPQAU8D1wPYAVMD3APcAVUD3gPkAVYD6QPqAV0D7gQWAV8EGAQYAYgEGgQnAYkELwQvAZcEMgQyAZgENAQ0AZkEQARFAZoESARIAaAESgRKAaEETARMAaIETgRPAaMEVARXAaUEWgRaAakEXARdAaoEXwRfAawEYwRjAa0EZQRlAa4EaQRpAa8EqQSpAbAACgA4/8QA0f/EANX/xAEy/8QBOv/EAtr/xALc/8QC3v/EA43/xARM/8QAFQA6ABQAOwAmAD0AFgEYABQCZQAWAuwAJgLuABYC8AAWA1cAFgNmABYDaQAWA58AJgOhACYDowAmA6UAFgO2ABQDvgAWBEAAFgRCABYERAAWBGkAFgABABP/CADOABD+7gAS/u4AJf9AAC7/MAA4ABQARf/eAEf/6wBI/+sASf/rAEv/6wBT/+sAVf/rAFb/5gBZ/+oAWv/oAF3/6ACT/+sAmP/rAJr/6gCx/0AAs/9AALr/6wC8/+gAx//rAMj/6wDK/+oA0QAUANUAFAD2/+sBAv/rAQz/QAEX/+sBGf/oAR3/6wEh/+sBMgAUATn/6wE6ABQBS//rAUz/6wFW/+sBbv7uAXL+7gF2/u4Bd/7uAbr/wAJL/0ACTP9AAk3/QAJO/0ACT/9AAlD/QAJR/0ACZv/eAmf/3gJo/94Caf/eAmr/3gJr/94CbP/eAm3/6wJu/+sCb//rAnD/6wJx/+sCd//rAnj/6wJ5/+sCev/rAnv/6wJ8/+oCff/qAn7/6gJ//+oCgP/oAoH/6AKC/0ACg//eAoT/QAKF/94Chv9AAof/3gKJ/+sCi//rAo3/6wKP/+sCkf/rApP/6wKV/+sCl//rApn/6wKb/+sCnf/rAp//6wKh/+sCo//rArH/MALF/+sCx//rAsn/6wLaABQC3AAUAt4AFALh/+oC4//qAuX/6gLn/+oC6f/qAuv/6gLv/+gDUv9AA1r/QANq/+sDbv/qA3D/6wNy/+gDdf/qA3b/6wN3/+oDfv8wA4L/QAONABQDj//eA5D/6wOS/+sDlP/rA5X/6AOX/+sDnv/oA6b/6AOu/0ADr//eA7L/6wO3/+gDuP/rA73/6wO//+gDxP9AA8X/3gPG/0ADx//eA8v/6wPN/+sDzv/rA9j/6wPa/+sD3P/rA+D/6APi/+gD5P/oA+v/6wPu/0AD7//eA/D/QAPx/94D8v9AA/P/3gP0/0AD9f/eA/b/QAP3/94D+P9AA/n/3gP6/0AD+//eA/z/QAP9/94D/v9AA///3gQA/0AEAf/eBAL/QAQD/94EBP9ABAX/3gQH/+sECf/rBAv/6wQN/+sED//rBBH/6wQT/+sEFf/rBBv/6wQd/+sEH//rBCH/6wQj/+sEJf/rBCf/6wQp/+sEK//rBC3/6wQv/+sEMf/rBDP/6gQ1/+oEN//qBDn/6gQ7/+oEPf/qBD//6gRB/+gEQ//oBEX/6ARMABQAIAA4/98AOv/kADv/7AA9/90A0f/fANX/3wEY/+QBMv/fATr/3wG6AA4CZf/dAtr/3wLc/98C3v/fAuz/7ALu/90C8P/dA1f/3QNm/90Daf/dA43/3wOf/+wDof/sA6P/7AOl/90Dtv/kA77/3QRA/90EQv/dBET/3QRM/98Eaf/dABoAOP/OADr/7QA9/9AA0f/OANX/zgEY/+0BMv/OATr/zgJl/9AC2v/OAtz/zgLe/84C7v/QAvD/0ANX/9ADZv/QA2n/0AON/84Dpf/QA7b/7QO+/9AEQP/QBEL/0ARE/9AETP/OBGn/0AAQAC7/7gA5/+4CYf/uAmL/7gJj/+4CZP/uArH/7gLg/+4C4v/uAuT/7gLm/+4C6P/uAur/7gN+/+4EMv/uBDT/7gBKAAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCT/+gAmP/oALr/6ADH/+gAyP/oAPb/6AEC/+gBHf/oASH/6AE5/+gBS//oAUz/6AFW/+gBbAAQAW0AEAFvABABcAAQAXEAEAJt/+gCbv/oAm//6AJw/+gCcf/oAon/6AKL/+gCjf/oAo//6AKR/+gCk//oApX/6AKX/+gCmf/oApv/6AKd/+gCn//oAqH/6AKj/+gDav/oA5D/6AOU/+gDl//oA6cAEAOoABADqwAQA7L/6AO4/+gDvf/oA8v/6APN/+gDzv/oA9r/6APr/+gEB//oBAn/6AQL/+gEDf/oBA//6AQR/+gEE//oBBX/6AQp/+gEK//oBC3/6AQx/+gAAgD1/9YBbf+YAD0AR//sAEj/7ABJ/+wAS//sAFX/7ACT/+wAmP/sALr/7ADH/+wAyP/sAPb/7AEC/+wBHf/sASH/7AE5/+wBS//sAUz/7AFW/+wCbf/sAm7/7AJv/+wCcP/sAnH/7AKJ/+wCi//sAo3/7AKP/+wCkf/sApP/7AKV/+wCl//sApn/7AKb/+wCnf/sAp//7AKh/+wCo//sA2r/7AOQ/+wDlP/sA5f/7AOy/+wDuP/sA73/7APL/+wDzf/sA87/7APa/+wD6//sBAf/7AQJ/+wEC//sBA3/7AQP/+wEEf/sBBP/7AQV/+wEKf/sBCv/7AQt/+wEMf/sABgAU//iARf/4gFtABgCd//iAnj/4gJ5/+ICev/iAnv/4gLF/+ICx//iAsn/4gNw/+IDdv/iA5L/4gPY/+ID3P/iBBv/4gQd/+IEH//iBCH/4gQj/+IEJf/iBCf/4gQv/+IABgAQ/4QAEv+EAW7/hAFy/4QBdv+EAXf/hAAQAC7/7AA5/+wCYf/sAmL/7AJj/+wCZP/sArH/7ALg/+wC4v/sAuT/7ALm/+wC6P/sAur/7AN+/+wEMv/sBDT/7AAeAAb/8gAL//IAWv/zAF3/8wC8//MA9f/1ARn/8wFs//IBbf/yAW//8gFw//IBcf/yAoD/8wKB//MC7//zA3L/8wOV//MDnv/zA6b/8wOn//IDqP/yA6v/8gO3//MDv//zA+D/8wPi//MD5P/zBEH/8wRD//MERf/zAD4AJ//zACv/8wAz//MANf/zAIP/8wCS//MAl//zALL/8wDDAA0A0v/zAQf/8wEW//MBGv/zARz/8wEe//MBIP/zATj/8wFV//MCKP/zAin/8wIr//MCLP/zAlL/8wJc//MCXf/zAl7/8wJf//MCYP/zAoj/8wKK//MCjP/zAo7/8wKc//MCnv/zAqD/8wKi//MCxP/zAsb/8wLI//MC+f/zA1b/8wNj//MDif/zA4z/8wO5//MDvP/zA9f/8wPZ//MD2//zBBr/8wQc//MEHv/zBCD/8wQi//MEJP/zBCb/8wQo//MEKv/zBCz/8wQu//MEMP/zBKn/8wA/ACf/5gAr/+YAM//mADX/5gCD/+YAkv/mAJf/5gCy/+YAt//CAMMAEADS/+YBB//mARb/5gEa/+YBHP/mAR7/5gEg/+YBOP/mAVX/5gIo/+YCKf/mAiv/5gIs/+YCUv/mAlz/5gJd/+YCXv/mAl//5gJg/+YCiP/mAor/5gKM/+YCjv/mApz/5gKe/+YCoP/mAqL/5gLE/+YCxv/mAsj/5gL5/+YDVv/mA2P/5gOJ/+YDjP/mA7n/5gO8/+YD1//mA9n/5gPb/+YEGv/mBBz/5gQe/+YEIP/mBCL/5gQk/+YEJv/mBCj/5gQq/+YELP/mBC7/5gQw/+YEqf/mADcAJf/kADz/0gA9/9MAsf/kALP/5ADD/+IA2f/SAQz/5AJL/+QCTP/kAk3/5AJO/+QCT//kAlD/5AJR/+QCZf/TAoL/5AKE/+QChv/kAu7/0wLw/9MDUv/kA1f/0wNa/+QDZv/TA2f/0gNp/9MDgv/kA47/0gOl/9MDrv/kA77/0wPB/9IDxP/kA8b/5APP/9ID6f/SA+7/5APw/+QD8v/kA/T/5AP2/+QD+P/kA/r/5AP8/+QD/v/kBAD/5AQC/+QEBP/kBED/0wRC/9MERP/TBE7/0gRW/9IEaf/TACcAEP9GABL/RgAl/80Asf/NALP/zQDG//IBDP/NAW7/RgFy/0YBdv9GAXf/RgJL/80CTP/NAk3/zQJO/80CT//NAlD/zQJR/80Cgv/NAoT/zQKG/80DUv/NA1r/zQOC/80Drv/NA8T/zQPG/80D7v/NA/D/zQPy/80D9P/NA/b/zQP4/80D+v/NA/z/zQP+/80EAP/NBAL/zQQE/80AAQDDAA4ArwBH/9wASP/cAEn/3ABL/9wAUf/BAFL/wQBT/9YAVP/BAFX/3ABZ/90AWv/hAF3/4QCT/9wAmP/cAJr/3QC6/9wAvP/hAL7/5gDA/8EAwf/rAML/6QDE//AAxf/nAMf/3ADI/9wAyf/jAMr/3QDL/84AzP/UAM3/2wDr/8EA7//BAPD/wQDy/8EA8//BAPT/wQD2/9wA9//BAPn/wQD6/8EA/f/BAP//wQEC/9wBBP/BARf/1gEZ/+EBHf/cASH/3AE1/8EBOf/cAUT/wQFJ/8EBS//cAUz/3AFW/9wCbf/cAm7/3AJv/9wCcP/cAnH/3AJ2/8ECd//WAnj/1gJ5/9YCev/WAnv/1gJ8/90Cff/dAn7/3QJ//90CgP/hAoH/4QKJ/9wCi//cAo3/3AKP/9wCkf/cApP/3AKV/9wCl//cApn/3AKb/9wCnf/cAp//3AKh/9wCo//cAr7/wQLA/8ECwv/BAsP/wQLF/9YCx//WAsn/1gLh/90C4//dAuX/3QLn/90C6f/dAuv/3QLv/+EDav/cA2z/wQNu/90DcP/WA3L/4QN1/90Ddv/WA3f/3QOQ/9wDkf/BA5L/1gOT/8EDlP/cA5X/4QOX/9wDmP/BA53/wQOe/+EDpv/hA63/wQOy/9wDs//BA7f/4QO4/9wDvf/cA7//4QPL/9wDzf/cA87/3APU/8ED1v/BA9j/1gPa/9wD3P/WA+D/4QPi/+ED5P/hA+j/wQPr/9wEB//cBAn/3AQL/9wEDf/cBA//3AQR/9wEE//cBBX/3AQb/9YEHf/WBB//1gQh/9YEI//WBCX/1gQn/9YEKf/cBCv/3AQt/9wEL//WBDH/3AQz/90ENf/dBDf/3QQ5/90EO//dBD3/3QQ//90EQf/hBEP/4QRF/+EESf/BBEv/wQRV/8EEYv/BBGT/wQRm/8EAdgAG/9oAC//aAEf/8ABI//AASf/wAEv/8ABV//AAWf/vAFr/3ABd/9wAk//wAJj/8ACa/+8Auv/wALz/3ADB/+wAwwAPAMX/6gDH//AAyP/wAMn/zgDK/+8Ay//nAPb/8AEC//ABGf/cAR3/8AEh//ABOf/wAUv/8AFM//ABVv/wAWz/2gFt/9oBb//aAXD/2gFx/9oCbf/wAm7/8AJv//ACcP/wAnH/8AJ8/+8Cff/vAn7/7wJ//+8CgP/cAoH/3AKJ//ACi//wAo3/8AKP//ACkf/wApP/8AKV//ACl//wApn/8AKb//ACnf/wAp//8AKh//ACo//wAuH/7wLj/+8C5f/vAuf/7wLp/+8C6//vAu//3ANq//ADbv/vA3L/3AN1/+8Dd//vA5D/8AOU//ADlf/cA5f/8AOe/9wDpv/cA6f/2gOo/9oDq//aA7L/8AO3/9wDuP/wA73/8AO//9wDy//wA83/8APO//AD2v/wA+D/3APi/9wD5P/cA+v/8AQH//AECf/wBAv/8AQN//AED//wBBH/8AQT//AEFf/wBCn/8AQr//AELf/wBDH/8AQz/+8ENf/vBDf/7wQ5/+8EO//vBD3/7wQ//+8EQf/cBEP/3ARF/9wARAAQAAwAEgAMAEf/5wBI/+cASf/nAEv/5wBV/+cAk//nAJj/5wC6/+cAwwAPAMf/5wDI/+cA9v/nAQL/5wEd/+cBIf/nATn/5wFL/+cBTP/nAVb/5wFuAAwBcgAMAXYADAF3AAwCbf/nAm7/5wJv/+cCcP/nAnH/5wKJ/+cCi//nAo3/5wKP/+cCkf/nApP/5wKV/+cCl//nApn/5wKb/+cCnf/nAp//5wKh/+cCo//nA2r/5wOQ/+cDlP/nA5f/5wOy/+cDuP/nA73/5wPL/+cDzf/nA87/5wPa/+cD6//nBAf/5wQJ/+cEC//nBA3/5wQP/+cEEf/nBBP/5wQV/+cEKf/nBCv/5wQt/+cEMf/nAAYAyf/qAOz/7gD1/9UA/f/tATP/7AFY/+wAAQD1/8AAAQDJACAAfgAGAAwACwAMAEf/6ABI/+gASf/oAEoADABL/+gAU//qAFX/6ABaAAsAXQALAJP/6ACY/+gAuv/oALwACwDD/5AAxQALAMf/6ADI/+gAyQAMAPb/6AEC/+gBF//qARkACwEd/+gBIf/oATn/6AFL/+gBTP/oAVb/6AFsAAwBbQAMAW8ADAFwAAwBcQAMAbr/vwG8/+4BwP/sAcj/7QHK/+wBzP/1Ac0ADgHPAA0B0gANAm3/6AJu/+gCb//oAnD/6AJx/+gCd//qAnj/6gJ5/+oCev/qAnv/6gKAAAsCgQALAon/6AKL/+gCjf/oAo//6AKR/+gCk//oApX/6AKX/+gCmf/oApv/6AKd/+gCn//oAqH/6AKj/+gCxf/qAsf/6gLJ/+oC7wALA2r/6ANw/+oDcgALA3b/6gOQ/+gDkv/qA5T/6AOVAAsDl//oA54ACwOmAAsDpwAMA6gADAOrAAwDsv/oA7cACwO4/+gDvf/oA78ACwPL/+gDzf/oA87/6APY/+oD2v/oA9z/6gPgAAsD4gALA+QACwPr/+gEB//oBAn/6AQL/+gEDf/oBA//6AQR/+gEE//oBBX/6AQb/+oEHf/qBB//6gQh/+oEI//qBCX/6gQn/+oEKf/oBCv/6AQt/+gEL//qBDH/6ARBAAsEQwALBEUACwABAPX/4gANAFz/7QBe/+0A7f/tAPX/wALy/+0C9P/tAvb/7QOW/+0Dwv/tA9D/7QPq/+0ET//tBFf/7QAMAFz/8gBe//IA7f/yAvL/8gL0//IC9v/yA5b/8gPC//ID0P/yA+r/8gRP//IEV//yAB8AWv/0AFz/8gBd//QAXv/zALz/9ADt//IBGf/0AoD/9AKB//QC7//0AvL/8wL0//MC9v/zA3L/9AOV//QDlv/yA57/9AOm//QDt//0A7//9APC//ID0P/yA+D/9APi//QD5P/0A+r/8gRB//QEQ//0BEX/9ARP//IEV//yAF0ABv/KAAv/ygA4/9IAOv/UADz/9AA9/9MAWv/mAFz/7wBd/+YAvP/mANH/0gDV/9IA2f/0AN3/7QDg/+EA5f/UAO3/7wD1/8kA/f/RAQj/5QEY/9QBGf/mAR//4wEy/9IBM//EATr/0gE8/+EBTf/UAU7/9QFP/+cBV/9kAVj/yQFs/8oBbf/KAW//ygFw/8oBcf/KAmX/0wKA/+YCgf/mAtr/0gLc/9IC3v/SAu7/0wLv/+YC8P/TA1f/0wNm/9MDZ//0A2n/0wNy/+YDgf/tA43/0gOO//QDlf/mA5b/7wOe/+YDpf/TA6b/5gOn/8oDqP/KA6v/ygO2/9QDt//mA77/0wO//+YDwf/0A8L/7wPP//QD0P/vA9//7QPg/+YD4f/tA+L/5gPj/+0D5P/mA+X/4QPp//QD6v/vBED/0wRB/+YEQv/TBEP/5gRE/9MERf/mBEz/0gRO//QET//vBFD/4QRS/+EEVv/0BFf/7wRp/9MAbAAG/8AAC//AADj/nQA6/8cAPP/wAD3/qwBR/9IAUv/SAFT/0gDA/9IA0f+dANP/9QDV/50A2f/wANz/9QDd/+oA4P/lAOX/wQDr/9IA7//SAPD/0gDy/9IA8//SAPT/0gD1/80A9//SAPn/0gD6/9IA/f/SAP//0gEE/9IBGP/HATL/nQEz/8wBNf/SATr/nQE8/+UBP//fAUT/0gFJ/9IBTf/OAU//6gFR//UBV/+eAVj/zgFs/8ABbf/AAW//wAFw/8ABcf/AAmX/qwJ2/9ICvv/SAsD/0gLC/9ICw//SAtr/nQLc/50C3v+dAu7/qwLw/6sDV/+rA2b/qwNn//ADaf+rA2z/0gOB/+oDjf+dA47/8AOR/9IDk//SA5j/0gOd/9IDpf+rA6f/wAOo/8ADq//AA63/0gOz/9IDtv/HA77/qwPB//ADz//wA9T/0gPW/9ID3//qA+H/6gPj/+oD5f/lA+j/0gPp//AD7P/1BED/qwRC/6sERP+rBEn/0gRL/9IETP+dBE7/8ARQ/+UEUv/lBFX/0gRW//AEYv/SBGT/0gRm/9IEZ//1BGn/qwBvAAb/sQAL/7EAOP+eADr/xQA8//IAPf+oAFH/zwBS/88AVP/PAFz/7wDA/88A0f+eANX/ngDZ//IA3f/sAOD/4QDl/8IA6//PAO3/7wDv/88A8P/PAPL/zwDz/88A9P/PAPX/xgD3/88A+f/PAPr/zwD9/88A///PAQT/zwEY/8UBMv+eATP/wAE1/88BOv+eATz/4QE//98BRP/PAUn/zwFN/80BT//oAVf/nwFY/8YBbP+xAW3/sQFv/7EBcP+xAXH/sQJl/6gCdv/PAr7/zwLA/88Cwv/PAsP/zwLa/54C3P+eAt7/ngLu/6gC8P+oA1f/qANm/6gDZ//yA2n/qANs/88Dgf/sA43/ngOO//IDkf/PA5P/zwOW/+8DmP/PA53/zwOl/6gDp/+xA6j/sQOr/7EDrf/PA7P/zwO2/8UDvv+oA8H/8gPC/+8Dz//yA9D/7wPU/88D1v/PA9//7APh/+wD4//sA+X/4QPo/88D6f/yA+r/7wRA/6gEQv+oBET/qARJ/88ES//PBEz/ngRO//IET//vBFD/4QRS/+EEVf/PBFb/8gRX/+8EYv/PBGT/zwRm/88Eaf+oAE0AOP++AFH/4QBS/+EAVP/hAFr/7wBd/+8AvP/vAMD/4QDR/74A1f++AOX/yQDr/+EA7//hAPD/4QDy/+EA8//hAPT/4QD1/98A9//hAPn/4QD6/+EA/f/hAP//4QEE/+EBCP/tARn/7wEf/+sBMv++ATP/3wE1/+EBOv++AT//6QFE/+EBSf/hAU7/9QFY/+ACdv/hAoD/7wKB/+8Cvv/hAsD/4QLC/+ECw//hAtr/vgLc/74C3v++Au//7wNs/+EDcv/vA43/vgOR/+EDk//hA5X/7wOY/+EDnf/hA57/7wOm/+8Drf/hA7P/4QO3/+8Dv//vA9T/4QPW/+ED4P/vA+L/7wPk/+8D6P/hBEH/7wRD/+8ERf/vBEn/4QRL/+EETP++BFX/4QRi/+EEZP/hBGb/4QBkADj/5gA6/+cAPP/yAD3/5wBR/9YAUv/WAFT/1gBc//EAwP/WANH/5gDV/+YA2f/yAN3/7gDg/+gA5f/mAOv/1gDt//EA7//WAPD/1gDy/9YA8//WAPT/1gD1/9AA9//WAPn/1gD6/9YA/f/WAP//1gEE/9YBGP/nATL/5gEz/84BNf/WATr/5gE8/+gBRP/WAUn/1gFN/+cBT//tAVf/5gFY/9ACZf/nAnb/1gK+/9YCwP/WAsL/1gLD/9YC2v/mAtz/5gLe/+YC7v/nAvD/5wNX/+cDZv/nA2f/8gNp/+cDbP/WA4H/7gON/+YDjv/yA5H/1gOT/9YDlv/xA5j/1gOd/9YDpf/nA63/1gOz/9YDtv/nA77/5wPB//IDwv/xA8//8gPQ//ED1P/WA9b/1gPf/+4D4f/uA+P/7gPl/+gD6P/WA+n/8gPq//EEQP/nBEL/5wRE/+cESf/WBEv/1gRM/+YETv/yBE//8QRQ/+gEUv/oBFX/1gRW//IEV//xBGL/1gRk/9YEZv/WBGn/5wCTACUAEAAn/+gAK//oADP/6AA1/+gAOP/gADr/4AA9/98Ag//oAJL/6ACX/+gAsQAQALL/6ACzABAA0f/gANL/6ADTABAA1f/gANgAFADcABAA4P/hAOX/4ADsABMA8QAQAPj/4AEDABABB//oAQwAEAEW/+gBGP/gARr/6AEc/+gBHv/oASD/6AEy/+ABOP/oATr/4AE8/+EBPf/gAUD/4QFF/+kBTf/fAU//3gFRABABVf/oAVf/3wFZ//ICKP/oAin/6AIr/+gCLP/oAksAEAJMABACTQAQAk4AEAJPABACUAAQAlEAEAJS/+gCXP/oAl3/6AJe/+gCX//oAmD/6AJl/98CggAQAoQAEAKGABACiP/oAor/6AKM/+gCjv/oApz/6AKe/+gCoP/oAqL/6ALE/+gCxv/oAsj/6ALa/+AC3P/gAt7/4ALu/98C8P/fAvn/6ANSABADVv/oA1f/3wNaABADY//oA2b/3wNp/98DggAQA4n/6AOM/+gDjf/gA6X/3wOuABADtv/gA7n/6AO8/+gDvv/fA8QAEAPGABAD1//oA9n/6APb/+gD5f/hA+b/4APsABAD7QAQA+4AEAPwABAD8gAQA/QAEAP2ABAD+AAQA/oAEAP8ABAD/gAQBAAAEAQCABAEBAAQBBr/6AQc/+gEHv/oBCD/6AQi/+gEJP/oBCb/6AQo/+gEKv/oBCz/6AQu/+gEMP/oBED/3wRC/98ERP/fBEz/4ARQ/+EEUf/gBFL/4QRT/+AEZwAQBGgAEARp/98Eqf/oADIAG//yADj/8QA6//QAPP/0AD3/8ADR//EA0//1ANX/8QDZ//QA3P/1AN3/8wDl//EBGP/0ATL/8QE6//EBTf/yAU//8gFR//UBV//yAmX/8ALa//EC3P/xAt7/8QLu//AC8P/wA1f/8ANm//ADZ//0A2n/8AOB//MDjf/xA47/9AOl//ADtv/0A77/8APB//QDz//0A9//8wPh//MD4//zA+n/9APs//UEQP/wBEL/8ARE//AETP/xBE7/9ARW//QEZ//1BGn/8ABmACUADwA4/+YAOv/mADwADgA9/+YAsQAPALMADwDR/+YA0wAOANX/5gDYABMA2QAOANwADgDdAAsA4P/lAOX/5gDm//QA7AASAPEADwD1/+cA+P/oAP3/5wEDAA8BDAAPARj/5gEy/+YBM//nATr/5gE8/+UBPf/oAU3/5gFP/+YBUQAOAVf/5gFY/+cCSwAPAkwADwJNAA8CTgAPAk8ADwJQAA8CUQAPAmX/5gKCAA8ChAAPAoYADwLa/+YC3P/mAt7/5gLu/+YC8P/mA1IADwNX/+YDWgAPA2b/5gNnAA4Daf/mA4EACwOCAA8Djf/mA44ADgOl/+YDrgAPA7b/5gO+/+YDwQAOA8QADwPGAA8DzwAOA98ACwPhAAsD4wALA+X/5QPm/+gD6QAOA+wADgPtAA8D7gAPA/AADwPyAA8D9AAPA/YADwP4AA8D+gAPA/wADwP+AA8EAAAPBAIADwQEAA8EQP/mBEL/5gRE/+YETP/mBE4ADgRQ/+UEUf/oBFL/5QRT/+gEVgAOBGcADgRoAA8Eaf/mADcABv+/AAv/vwA4/58AOv/JAD3/rQDR/58A1f+fAN3/7ADg/+YA5f/EAPX/zQD9/9UBGP/JATL/nwEz/8wBOv+fATz/5gE//98BTf/RAU//7AFX/6EBWP/PAWz/vwFt/78Bb/+/AXD/vwFx/78CZf+tAtr/nwLc/58C3v+fAu7/rQLw/60DV/+tA2b/rQNp/60Dgf/sA43/nwOl/60Dp/+/A6j/vwOr/78Dtv/JA77/rQPf/+wD4f/sA+P/7APl/+YEQP+tBEL/rQRE/60ETP+fBFD/5gRS/+YEaf+tADAAOP/jADz/5QA9/+QA0f/jANP/5QDV/+MA2P/iANn/5QDc/+UA3f/pAPH/6gED/+oBMv/jATr/4wFR/+UBV//kAmX/5ALa/+MC3P/jAt7/4wLu/+QC8P/kA1f/5ANm/+QDZ//lA2n/5AOB/+kDjf/jA47/5QOl/+QDvv/kA8H/5QPP/+UD3//pA+H/6QPj/+kD6f/lA+z/5QPt/+oEQP/kBEL/5ARE/+QETP/jBE7/5QRW/+UEZ//lBGj/6gRp/+QAIwA4/+IAPP/kANH/4gDT/+QA1f/iANj/4QDZ/+QA3P/kAN3/6QDs/+QA8f/rAQP/6wEy/+IBOv/iAVH/5ALa/+IC3P/iAt7/4gNn/+QDgf/pA43/4gOO/+QDwf/kA8//5APf/+kD4f/pA+P/6QPp/+QD7P/kA+3/6wRM/+IETv/kBFb/5ARn/+QEaP/rABcAOP/rAD3/8wDR/+sA1f/rATL/6wE6/+sCZf/zAtr/6wLc/+sC3v/rAu7/8wLw//MDV//zA2b/8wNp//MDjf/rA6X/8wO+//MEQP/zBEL/8wRE//METP/rBGn/8wA2AFH/7wBS/+8AVP/vAFz/8ADA/+8A6//vAOz/7gDt//AA7//vAPD/7wDy/+8A8//vAPT/7wD1/+4A9//vAPn/7wD6/+8A/f/vAP//7wEE/+8BCP/0AR//8QEz/+8BNf/vAUT/7wFJ/+8BWP/vAnb/7wK+/+8CwP/vAsL/7wLD/+8DbP/vA5H/7wOT/+8Dlv/wA5j/7wOd/+8Drf/vA7P/7wPC//AD0P/wA9T/7wPW/+8D6P/vA+r/8ARJ/+8ES//vBE//8ARV/+8EV//wBGL/7wRk/+8EZv/vACIABv/yAAv/8gBa//UAXf/1ALz/9QD1//QA/f/0AQj/9QEZ//UBM//1AVj/9QFs//IBbf/yAW//8gFw//IBcf/yAoD/9QKB//UC7//1A3L/9QOV//UDnv/1A6b/9QOn//IDqP/yA6v/8gO3//UDv//1A+D/9QPi//UD5P/1BEH/9QRD//UERf/1ADIAUf/uAFL/7gBU/+4AwP/uAOv/7gDsABQA7//uAPD/7gDy/+4A8//uAPT/7gD1/+0A9//uAPj/7QD5/+4A+v/uAPv/0AD9/+4A///uAQT/7gEz/+0BNf/uAT3/7QFE/+4BSf/uAVj/7QJ2/+4Cvv/uAsD/7gLC/+4Cw//uA2z/7gOR/+4Dk//uA5j/7gOd/+4Drf/uA7P/7gPU/+4D1v/uA+b/7QPo/+4ESf/uBEv/7gRR/+0EU//tBFX/7gRi/+4EZP/uBGb/7gAKAAb/9QAL//UBbP/1AW3/9QFv//UBcP/1AXH/9QOn//UDqP/1A6v/9QBZAEf/8ABI//AASf/wAEv/8ABT/8cAVf/wAJP/8ACY//AAuv/wAMf/8ADI//AA9v/wAQL/8AEX/8cBG//rAR3/8AEh//ABOf/wAUv/8AFM//ABVv/wAbz/6wHA/+kByP/rAcr/6wJt//ACbv/wAm//8AJw//ACcf/wAnf/xwJ4/8cCef/HAnr/xwJ7/8cCif/wAov/8AKN//ACj//wApH/8AKT//AClf/wApf/8AKZ//ACm//wAp3/8AKf//ACof/wAqP/8ALF/8cCx//HAsn/xwNq//ADcP/HA3b/xwOQ//ADkv/HA5T/8AOX//ADsv/wA7j/8AO9//ADy//wA83/8APO//AD2P/HA9r/8APc/8cD6//wBAf/8AQJ//AEC//wBA3/8AQP//AEEf/wBBP/8AQV//AEG//HBB3/xwQf/8cEIf/HBCP/xwQl/8cEJ//HBCn/8AQr//AELf/wBC//xwQx//AAoQAGAA0ACwANAEX/8ABH/8AASP/AAEn/wABKAA0AS//AAFP/4gBV/8AAWgALAF0ACwCT/8AAmP/AALr/wAC8AAsAxv/WAMf/wADI/8AAy//VAOz/yADx/9cA9v/AAQL/wAED/9cBF//iARkACwEb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AD4AEgBFAEcAGQBJAEkAHABMAEwAHQBRAFQAHgBWAFYAIgBaAFoAIwBcAF4AJACKAIoAJwCwALMAKAC8ALwALADAAMAALQDGAMYALgDTANQALwDWANYAMQDZANkAMgDbAN0AMwDfAN8ANgDhAOEANwDjAOMAOADlAOUAOQDrAOsAOgDtAO0AOwD2APYAPAD7APsAPQD9AP4APgEDAQQAQAEJAQkAQgEMAQwAQwEXARkARAErAS0ARwEwATAASgEyATIASwFJAUkATAFsAXIATQF2AXcAVAIoAigAVgIqAisAVwJGAkcAWQJJAkkAWwJLAnEAXAJ2AnsAgwKAApAAiQKSApsAmgKkAqYApAKoAqgApwKqAqoAqAKsAqwAqQKuAq4AqgKxArEAqwKzArMArAK1ArUArQK3ArcArgK5ArkArwK7ArsAsAK9AskAsQLLAssAvgLNAs0AvwLPAs8AwALaAtoAwQLcAtwAwgLeAt4AwwLgAuAAxALiAuIAxQLkAuQAxgLmAuYAxwLoAugAyALqAuoAyQLsAuwAygLuAvYAywNSA1cA1ANaA2kA2gNsA2wA6gNwA3AA6wNyA3IA7AN2A3YA7QN5A3oA7gN8A4UA8AOHA4kA+gOLA5AA/QOSA5gBAwOeA58BCgOhA6EBDAOjA6MBDQOlA6gBDgOrA7ABEgOyA7IBGAO2A7cBGQO8A8cBGwPKA8sBJwPNA9ABKQPXA9gBLQPcA9wBLwPeA+QBMAPpA+oBNwPuBBYBOQQYBBgBYgQaBCcBYwQvBC8BcQQyBDIBcgQ0BDQBcwRABEUBdARIBEgBegRKBEoBewRMBEwBfAROBE8BfQRUBFcBfwRaBFoBgwRcBF0BhARfBF8BhgRjBGMBhwRlBGUBiARpBGkBiQSpBKkBigACAU4AEAAQAAEAEgASAAEAJQAlAAIAJgAmAAMAJwAnAAQAKAAoAAUAKQApAAYALAAtAAcALgAuAAgALwAvAAkAMAAwAAoAMQAyAAcAMwAzAAUANAA0AAsAOAA4AAwAOQA5AAgAOgA6AA0AOwA7AA4APAA8AA8APQA9ABAAPgA+ABEARQBFABIARgBGABMARwBHABQASQBJABUATABMABYAUQBSABYAUwBTABcAVABUABMAVgBWABgAWgBaABkAXABcABoAXQBdABkAXgBeABsAigCKABMAsACwABwAsQCxAAIAsgCyAAUAswCzAAIAvAC8ABkAwADAABYAxgDGABMA0wDUAB0A1gDWAAcA2QDZAA8A2wDcAAcA3QDdAB4A3wDfAAcA4QDhAAcA4wDjAB0A5QDlAB0A6wDrAB8A7QDtABoA9gD2ABMA+wD7ACAA/QD9ACAA/gD+ABMBAwEEACABCQEJACABDAEMAAIBFwEXABcBGAEYAA0BGQEZABkBKwErABMBLAEsABwBLQEtAB8BMAEwAAkBMgEyAAkBSQFJAB8BbgFuAAEBcgFyAAEBdgF3AAECKAIoAAQCKgIrAAUCRgJHAAUCSQJJAAwCSwJRAAICUgJSAAQCUwJWAAYCVwJbAAcCXAJgAAUCYQJkAAgCZQJlABACZgJsABICbQJtABQCbgJxABUCdgJ2ABYCdwJ7ABcCgAKBABkCggKCAAICgwKDABIChAKEAAIChQKFABIChgKGAAIChwKHABICiAKIAAQCiQKJABQCigKKAAQCiwKLABQCjAKMAAQCjQKNABQCjgKOAAQCjwKPABQCkAKQAAUCkgKSAAYCkwKTABUClAKUAAYClQKVABUClgKWAAYClwKXABUCmAKYAAYCmQKZABUCmgKaAAYCmwKbABUCpAKkAAcCpQKlABYCpgKmAAcCqAKoAAcCqgKqAAcCrAKsAAcCrgKuAAcCsQKxAAgCswKzAAkCtQK1AAoCtwK3AAoCuQK5AAoCuwK7AAoCvQK9AAcCvgK+ABYCvwK/AAcCwALAABYCwQLBAAcCwgLDABYCxALEAAUCxQLFABcCxgLGAAUCxwLHABcCyALIAAUCyQLJABcCywLLABgCzQLNABgCzwLPABgC2gLaAAwC3ALcAAwC3gLeAAwC4ALgAAgC4gLiAAgC5ALkAAgC5gLmAAgC6ALoAAgC6gLqAAgC7ALsAA4C7gLuABAC7wLvABkC8ALwABAC8QLxABEC8gLyABsC8wLzABEC9AL0ABsC9QL1ABEC9gL2ABsDUgNSAAIDUwNTAAYDVANVAAcDVgNWAAUDVwNXABADWgNaAAIDWwNbAAMDXANcAAYDXQNdABEDXgNfAAcDYANgAAkDYQNiAAcDYwNjAAUDZANkAAsDZQNlAAwDZgNmABADZwNnAA8DaANoAAcDaQNpABADbANsABYDcANwABcDcgNyABkDdgN2ABcDeQN5AAYDegN6ABwDfAN9AAcDfgN+AAgDfwOAAAkDgQOBAB4DggOCAAIDgwODAAMDhAOEABwDhQOFAAYDhwOIAAcDiQOJAAUDiwOLAAsDjAOMAAQDjQONAAwDjgOOAA8DjwOPABIDkAOQABUDkgOSABcDkwOTABMDlAOUABQDlQOVABkDlgOWABoDlwOXABUDmAOYAB8DngOeABkDnwOfAA4DoQOhAA4DowOjAA4DpQOlABADpgOmABkDrAOsAAcDrQOtABYDrgOuAAIDrwOvABIDsAOwAAYDsgOyABUDtgO2AA0DtwO3ABkDvAO8AAQDvQO9ABQDvgO+ABADvwO/ABkDwAPAAAcDwQPBAA8DwgPCABoDwwPDAAcDxAPEAAIDxQPFABIDxgPGAAIDxwPHABIDygPKAAYDywPLABUDzQPOABUDzwPPAA8D0APQABoD1wPXAAUD2APYABcD3APcABcD3gPeABMD3wPfAB4D4APgABkD4QPhAB4D4gPiABkD4wPjAB4D5APkABkD6QPpAA8D6gPqABoD7gPuAAID7wPvABID8APwAAID8QPxABID8gPyAAID8wPzABID9AP0AAID9QP1ABID9gP2AAID9wP3ABID+AP4AAID+QP5ABID+gP6AAID+wP7ABID/AP8AAID/QP9ABID/gP+AAID/wP/ABIEAAQAAAIEAQQBABIEAgQCAAIEAwQDABIEBAQEAAIEBQQFABIEBgQGAAYEBwQHABUECAQIAAYECQQJABUECgQKAAYECwQLABUEDAQMAAYEDQQNABUEDgQOAAYEDwQPABUEEAQQAAYEEQQRABUEEgQSAAYEEwQTABUEFAQUAAYEFQQVABUEFgQWAAcEGAQYAAcEGgQaAAUEGwQbABcEHAQcAAUEHQQdABcEHgQeAAUEHwQfABcEIAQgAAUEIQQhABcEIgQiAAUEIwQjABcEJAQkAAUEJQQlABcEJgQmAAUEJwQnABcELwQvABcEMgQyAAgENAQ0AAgEQARAABAEQQRBABkEQgRCABAEQwRDABkERAREABAERQRFABkESARIAAkESgRKAAcETARMAAwETgROAA8ETwRPABoEVARUABwEVQRVAB8EVgRWAA8EVwRXABoEWgRaABYEXARcAB0EXQRdABwEXwRfAAkEYwRjAAcEZQRlAAcEaQRpABAEqQSpAAUAAgFtAAYABgABAAsACwABABAAEAAWABEAEQAZABIAEgAWACUAJQACACcAJwAIACsAKwAIAC4ALgAaADMAMwAIADUANQAIADcANwAbADgAOAAJADkAOQAKADoAOgALADsAOwAMADwAPAAXAD0APQANAD4APgAYAEUARQADAEcASQAEAEsASwAEAFEAUgAFAFMAUwAGAFQAVAAFAFUAVQAEAFcAVwAHAFkAWQAOAFoAWgAPAFwAXAAcAF0AXQAPAF4AXgAQAIMAgwAIAJIAkgAIAJMAkwAEAJcAlwAIAJgAmAAEAJoAmgAOALEAsQACALIAsgAIALMAswACALoAugAEALwAvAAPAMAAwAAFAMcAyAAEAMoAygAOANEA0QAJANIA0gAIANMA0wARANUA1QAJANkA2QAXANwA3AARAN0A3QAVAOAA4AASAOsA6wAFAO0A7QAcAO8A8AAFAPEA8QATAPIA9AAFAPYA9gAEAPcA9wAFAPgA+AAUAPkA+gAFAP0A/QAFAP8A/wAFAQIBAgAEAQMBAwATAQQBBAAFAQcBBwAIAQwBDAACARYBFgAIARcBFwAGARgBGAALARkBGQAPARoBGgAIARwBHAAIAR0BHQAEAR4BHgAIASABIAAIASEBIQAEATIBMgAJATUBNQAFATgBOAAIATkBOQAEAToBOgAJAUQBRAAFAUkBSQAFAUsBTAAEAVEBUQARAVUBVQAIAVYBVgAEAWkBagAZAWwBbQABAW4BbgAWAW8BcQABAXIBcgAWAXYBdwAWAigCKQAIAisCLAAIAkUCRQAZAksCUQACAlICUgAIAlwCYAAIAmECZAAKAmUCZQANAmYCbAADAm0CcQAEAnYCdgAFAncCewAGAnwCfwAOAoACgQAPAoICggACAoMCgwADAoQChAACAoUChQADAoYChgACAocChwADAogCiAAIAokCiQAEAooCigAIAosCiwAEAowCjAAIAo0CjQAEAo4CjgAIAo8CjwAEApECkQAEApMCkwAEApUClQAEApcClwAEApkCmQAEApsCmwAEApwCnAAIAp0CnQAEAp4CngAIAp8CnwAEAqACoAAIAqECoQAEAqICogAIAqMCowAEArECsQAaAr4CvgAFAsACwAAFAsICwwAFAsQCxAAIAsUCxQAGAsYCxgAIAscCxwAGAsgCyAAIAskCyQAGAtAC0AAbAtEC0QAH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ALgAuWMyc2MEWGMyc2MEXmMyc2MEZGMyc2MEamMyc2MEamMyc2MEamMyc2MEamMyc2MEamMyc2MEamMyc2MEamNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGNjbXAEcGRsaWcEeGRsaWcEfmRsaWcEhGRsaWcEimRsaWcEimRsaWcEimRsaWcEimRsaWcEimRsaWcEimRsaWcEimRub20EkGRub20ElmRub20EnGRub20EomRub20EomRub20EomRub20EomRub20EomRub20EomRub20EomZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGZyYWMEqGxpZ2EEsmxpZ2EEumxudW0EwGxudW0ExmxudW0EzGxudW0E0mxudW0E0mxudW0E0mxudW0E0mxudW0E0mxudW0E0mxudW0E0mxvY2wE2GxvY2wE3mxvY2wE5G51bXIE6m51bXIE8G51bXIE9m51bXIE/G51bXIE/G51bXIE/G51bXIE/G51bXIE/G51bXIE/G51bXIE/G9udW0FAm9udW0FCG9udW0FDm9udW0FFG9udW0FFG9udW0FFG9udW0FFG9udW0FFG9udW0FFG9udW0FFHBudW0FGnBudW0FIHBudW0FJnBudW0FLHBudW0FLHBudW0FLHBudW0FLHBudW0FLHBudW0FLHBudW0FLHNtY3AFMnNtY3AFOHNtY3AFPnNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNtY3AFRHNzMDEFSnNzMDEFUHNzMDEFVnNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDEFXHNzMDIFYnNzMDIFaHNzMDIFbnNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDIFdHNzMDMFenNzMDMFgHNzMDMFhnNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDMFjHNzMDQFknNzMDQFmHNzMDQFnnNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDQFpHNzMDUFqnNzMDUFsHNzMDUFtnNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDUFvHNzMDYFwnNzMDYFyHNzMDYFznNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDYF1HNzMDcF2nNzMDcF4HNzMDcF5nNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HNzMDcF7HRudW0F8nRudW0F+HRudW0F/nRudW0GBHRudW0GBHRudW0GBHRudW0GBHRudW0GBHRudW0GBHRudW0GBAAAAAEAAQAAAAEAAwAAAAEAAgAAAAEAAAAAAAIACAAJAAAAAQAOAAAAAQAQAAAAAQAPAAAAAQANAAAAAQBDAAAAAQBFAAAAAQBEAAAAAQBCAAAAAwA/AEAAQQAAAAIAEQASAAAAAQASAAAAAQA8AAAAAQA+AAAAAQA9AAAAAQA7AAAAAQAKAAAAAQAMAAAAAQALAAAAAQBHAAAAAQBJAAAAAQBIAAAAAQBGAAAAAQAwAAAAAQAyAAAAAQAxAAAAAQAvAAAAAQA4AAAAAQA6AAAAAQA5AAAAAQA3AAAAAQAFAAAAAQAHAAAAAQAGAAAAAQAEAAAAAQAUAAAAAQAWAAAAAQAVAAAAAQATAAAAAQAYAAAAAQAaAAAAAQAZAAAAAQAXAAAAAQAcAAAAAQAeAAAAAQAdAAAAAQAbAAAAAQAgAAAAAQAiAAAAAQAhAAAAAQAfAAAAAQAkAAAAAQAmAAAAAQAlAAAAAQAjAAAAAQAoAAAAAQAqAAAAAQApAAAAAQAnAAAAAQAsAAAAAQAuAAAAAQAtAAAAAQArAAAAAQA0AAAAAQA2AAAAAQA1AAAAAQAzAEsAmACYAJgAmAQmBCYEJgQmBxQHwA5QDlAOZg6IDogOiA6IDr4O5A8SDxIPEg8SDyYPJg8mDyYPOg86DzoPOg9OD04PTg9OD2APYA9gD2APeg96D3oPeg+8D7wPvA+8D9oP2g/aD9oP+A/4D/gP+BAqECoQKhAqEFwQXBBcEFwQjhCiENoQzBDMEMwQzBDaENoQ2hDaEQYAAQAAAAEACAACAcQA3wHnAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHoAekCQwI7AeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AgACAQTcAgICAwIEAgUCBgIHAggCCQIKAgsCLwIPAhACEQIUAhUCFgIXAhgCGQIbAhwCHgIdAvsC/AL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRQNEA0YDRwNIA0kDSgNLA0wDTQNOA08DUANRBKoEqwSsBK0ErgSvBLAEsQSyBLMEtAS1BLYEtwS4BLkEugS7BLwEvQS+BL8EwATBBMIEwwTEBMUB/wTGBMcEyATJBMoEywTMBM0EzgTPBNAE0QTSBNME1ATVBNcE2ATaAhoE2wIOBNYCEwINBNkCDAISAAEA3wAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAhQCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkYCRwJJAksCTAJNAk4CTwJQAlECUgJTAlQCVQJWAlcCWAJZAloCWwJcAl0CXgJfAmACYQJiAmMCZAJlAoIChAKGAogCigKMAo4CkAKSApQClgKYApoCnAKeAqACogKkAqYCqAKqAqwCrgKxArMCtQK3ArkCuwK9Ar8CwQLEAsYCyALKAswCzgLQAtIC1ALYAtoC3ALeAuAC4gLkAuYC6ALqAuwC7gLwAvEC8wL1A1IDUwNUA1UDVgNXA1gDWgNbA1wDXQNeA18DYANhA2MDZANlA2YDZwNoA2kDeQN6A3sDfAN9A34DfwOAA4EDggODA4QDhQOGA4cDiAOJA4oDiwOMA40DjgO6A7wDvgPTA9kD3wRIBEoETgRWBFgEXQRpAAEAAAABAAgAAgF0ALcBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAvwDLwI7AfoEyQTKAfsB/AH9Af4B/wIABM0EzgTQBNME3AICAgMCBAIFAgYCBwIIAgkCCgILAfQB9QH2AfcB+AH5Ai8CDwIQAhECFAIVAhcCGQL9Av4C/wMAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxADEQMSAxMDFAMVAxYDFwMYA04DGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDKwMsAy0DLgMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRQNEA0YDRwNIA0kDSgNLA0wDTQNPA1ADUQTIBMsEzATPBNEE0gIBBNQEwATBBMIEwwTEBMUExgTHBNUE1wTYAhgE2gIaBNsC+wIOBNYCEwINBNkCFgIMAhIAAQC3AEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCHAIwAkwDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEtATEBMwE5ATsBPQFAAUcCSgJmAmcCaAJpAmoCawJsAm0CbgJvAnACcQJyAnMCdAJ1AnYCdwJ4AnkCegJ7AnwCfQJ+An8CgAKBAoMChQKHAokCiwKNAo8CkQKTApUClwKZApsCnQKfAqECowKlAqcCqQKrAq0CsgK0ArYCuAK6ArwCvgLAAsICxQLHAskCywLNAs8C0QLTAtUC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8gL0AvYDjwOQA5EDkgOTA5QDlQOWA5cDmAOZA5oDmwOcA50DngO7A70DvwPNA9QD2gPgBEYESQRLBE8EVwRZBFoEXgRqAAYAAAAGABIAKgBCAFoAcgCKAAMAAAABABIAAQCQAAEAAABKAAEAAQBNAAMAAAABABIAAQB4AAEAAABKAAEAAQBOAAMAAAABABIAAQBgAAEAAABKAAEAAQKtAAMAAAABABIAAQBIAAEAAABKAAEAAQOaAAMAAAABABIAAQAwAAEAAABKAAEAAQOcAAMAAAABABIAAQAYAAEAAABKAAEAAQQZAAIAAQCnAKsAAAAEAAAAAQAIAAEGHgA2AHIApACuALgAygD8AQ4BGAFKAWQBfgGQAboB7AH2AhgCMgJEAnYCiAKiAswC3gMQAxoDJAM2A2gDcgN8A4YDoAO6A8wD9gQoBDIEVARuBIAEsgTEBN4FCAUaBSQFLgU4BUIFbAWWBcAF6gYUAAYADgAUABoAIAAmACwCSwACAKcCTAACAKgCTgACAKkD8AACAKoEegACAKsD7gACAKwAAQAEBIcAAgCsAAEABAKIAAIAqAACAAYADASJAAIArASLAAIBogAGAA4AFAAaACAAJgAsAlMAAgCnAlQAAgCoBAoAAgCpBAgAAgCqBHwAAgCrBAYAAgCsAAIABgAMBHYAAgCoAqIAAgGiAAEABASNAAIArAAGAA4AFAAaACAAJgAsAlcAAgCnAlgAAgCoAqYAAgCpBBYAAgCqBH4AAgCrBBgAAgCsAAMACAAOABQEjwACAKgEkQACAKwCswACAaIAAwAIAA4AFAK1AAIAqASTAAIArAK3AAIBogACAAYADAOsAAIAqASVAAIArAAFAAwAEgAYAB4AJAR4AAIApwK9AAIAqAJbAAIAqQSXAAIArAK/AAIBogAGAA4AFAAaACAAJgAsAlwAAgCnAl0AAgCoAl8AAgCpBBwAAgCqBIAAAgCrBBoAAgCsAAEABASZAAIAqAAEAAoAEAAWABwCygACAKgEggACAKsEmwACAKwCzAACAaIAAwAIAA4AFALQAAIAqASdAAIArALWAAIBogACAAYADASfAAIArALaAAIBogAGAA4AFAAaACAAJgAsAmEAAgCnAmIAAgCoAuAAAgCpBDQAAgCqBIQAAgCrBDIAAgCsAAIABgAMBKEAAgCpBKMAAgCsAAMACAAOABQDnwACAKcDoQACAKgEpQACAKwABQAMABIAGAAeACQDpQACAKcCZQACAKgERAACAKkEQgACAKoEQAACAKwAAgAGAAwC8QACAKgEpwACAKwABgAOABQAGgAgACYALAJmAAIApwJnAAIAqAJpAAIAqQPxAAIAqgR7AAIAqwPvAAIArAABAAQEiAACAKwAAQAEAokAAgCoAAIABgAMBIoAAgCsBIwAAgGiAAYADgAUABoAIAAmACwCbgACAKcCbwACAKgECwACAKkECQACAKoEfQACAKsEBwACAKwAAQAEBHcAAgCoAAEABASOAAIArAABAAQEGQACAKwAAwAIAA4AFASQAAIAqASSAAIArAK0AAIBogADAAgADgAUArYAAgCoBJQAAgCsArgAAgGiAAIABgAMA60AAgCoBJYAAgCsAAUADAASABgAHgAkBHkAAgCnAr4AAgCoAnYAAgCpBJgAAgCsAsAAAgGiAAYADgAUABoAIAAmACwCdwACAKcCeAACAKgCegACAKkEHQACAKoEgQACAKsEGwACAKwAAQAEBJoAAgCoAAQACgAQABYAHALLAAIAqASDAAIAqwScAAIArALNAAIBogADAAgADgAUAtEAAgCoBJ4AAgCsAtcAAgGiAAIABgAMBKAAAgCsAtsAAgGiAAYADgAUABoAIAAmACwCfAACAKcCfQACAKgC4QACAKkENQACAKoEhQACAKsEMwACAKwAAgAGAAwEogACAKkEpAACAKwAAwAIAA4AFAOgAAIApwOiAAIAqASmAAIArAAFAAwAEgAYAB4AJAOmAAIApwKAAAIAqARFAAIAqQRDAAIAqgRBAAIArAACAAYADALyAAIAqASoAAIArAABAAQC9wACAKgAAQAEAvkAAgCoAAEABAL4AAIAqAABAAQC+gACAKgABQAMABIAGAAeACQCcgACAKcCcwACAKgCpwACAKkEFwACAKoEfwACAKsABQAMABIAGAAeACQEKgACAKcEKAACAKgELgACAKkELAACAKoEMAACAKwABQAMABIAGAAeACQEKwACAKcEKQACAKgELwACAKkELQACAKoEMQACAKwABQAMABIAGAAeACQEOAACAKcENgACAKgEPAACAKkEOgACAKoEPgACAKwABQAMABIAGAAeACQEOQACAKcENwACAKgEPQACAKkEOwACAKoEPwACAKwAAQAEBIYAAgCoAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCMAIwAMACXAJoAMQDPAM8ANQABAAAAAQAIAAEABgACAAEAAgLUAtUAAQAAAAEACAACAA4ABATdBN4E3wTgAAEABAKGAocCmAKZAAQAAAABAAgAAQAmAAIACgAcAAIABgAMAaMAAgBKAagAAgBYAAEABAGpAAIAWAABAAIASgBXAAQAAAABAAgAAQBEAAIACgAUAAEABAGkAAIATQABAAQBpgACAE0ABAAAAAEACAABAB4AAgAKABQAAQAEAaUAAgBQAAEABAGnAAIAUAABAAIASgGjAAEAAAABAAgAAQAGAZUAAQABAEsAAQAAAAEACAABAAYBJwABAAEAugABAAAAAQAIAAEABgGsAAEAAQA2AAEAAAABAAgAAgAcAAIB4wHkAAEAAAABAAgAAgAKAAIB5QHmAAEAAgAvAE8AAQAAAAEACAACAB4ADAIoAioCKQIrAiwCHwIgAiEBrgIjAiQCJQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAQAAAAEACAACAAwAAwImAicCJwABAAMASQBLAa4AAQAAAAEACAACAGYACAI9Ai0CLgIwAjECOQI6AjwAAQAAAAEACAACABYACAAbABUAFgAXABgAGQAdABQAAQAIAa0CIgRwBHEEcgRzBHQEdQABAAAAAQAIAAIAFgAIBHUCIgRwBHEEcgRzAa0EdAABAAgAFAAVABYAFwAYABkAGwAdAAEAAAABAAgAAgAWAAgAFQAWABcAGAAZABsAHQAUAAEACAItAi4CMAIxAjkCOgI8Aj0AAQAAAAEACAABAAYBaQABAAEAEwAGAAAAAQAIAAMAAQASAAEAUgAAAAEAAABKAAIAAgF8AXwAAAHUAd0AAQABAAAAAQAIAAEAKAHAAAEAAAABAAgAAgAaAAoCMgB6AHMAdAIzAjQCNQI2AjcCOAACAAEAFAAdAAAAAQAAAAEACAACACYAEAHUAdUB1gHXAdgB2QHaAdsB3AHdAkACPgJBAkICPwThAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgKtA5oDnAQZ\",\n\t\"Roboto-MediumItalic.ttf\": \"AAEAAAARAQAABAAQR1BPUyEcbY8AAhQcAABZakdTVULEnLdcAAJtiAAAGXxPUy8yoQuw+wAAAZgAAABgY21hcNhuDxIAABpsAAAGXGN2dCAElytKAAAjUAAAAFZmcGdte/lhqwAAIMgAAAG8Z2FzcAAIABMAAhQQAAAADGdseWZgubUGAAAtcAAB42poZG14LxpP7wAAFYAAAATsaGVhZPi2qwsAAAEcAAAANmhoZWEM2xKRAAABVAAAACRobXR4rRqYNAAAAfgAABOIbG9jYSKZqcwAACOoAAAJxm1heHAHEgLZAAABeAAAACBuYW1lRuRz4wACENwAAAMUcG9zdP9hAGQAAhPwAAAAIHByZXAbsfg2AAAihAAAAMwAAQAAAAIAALDh6v1fDzz1ABsIAAAAAADE8BEuAAAAANDbTpf6Qf3VCXgIcwACAAkAAgAAAAAAAAABAAAHbP4MAAAJN/pB/mwJeAgAAbMAAAAAAAAAAAAAAAAE4gABAAAE4gCPABYAVgAFAAEAAAAAAA4AAAIAAfIABgABAAMEGQH0AAUAAAWaBTMAAAEfBZoFMwAAA9EAZgIAAAACAAAAAAAAAAAA4AAK/1AAIX8AAAAhAAAAAEdPT0cAAQAA//0GAP4AAGYHmgIAIAABnwAAAAAEOgWwACAAIAACA5YAZAAKAAAACgAAAfkAAAH5AAACHwA3Ao4AoQTHADsEcwBCBb0AtQUAAC0BWgCQAr8AaALG/5QDeABnBF0APQG//4kClgA2AjUAMAMc/38EcwBgBHMA7wRzAAsEcwAmBHMACQRzAFoEcwBjBHMAhgRzADsEcwCOAhkAKwHi/5oD/AAyBGIAYgQUAC8D0ACVBvsAMgU0/6QE7wAnBRsAZQUcACcEbQAnBE0AJwVSAGsFjQAnAjsANQRZAAME7gAnBD0AJwbVACcFjAAnBWYAawUAACcFZgBkBOIAJwS5ACQEwACcBRkAWwUPAJsG3gC3BPP/wwTFAKEEtv/lAir/7wNIAKwCKv96A1sARAOK/3kCigDKBD0AIgRoABAEGgA4BGsAOwQ0ADsCygBfBHD/9wRZAA0CBQAfAfz/DAQXABECBQAfBssAEARbAA0EdQA5BGj/xwRyADsCxAAQBAsAHAKfADsEWgBKA+EAZAXOAHcD8f+5A9H/tQPx/+cCpAAwAf0AIAKk/5kFMgBbAfkAAAIY/+YEZQBMBJv/9gV8AAgExQBQAff/7ATc/9wDdADRBh4AXgOAAL4DzgBJBFUAgAKWADYGHgBeA8cA7wL9AOQEMwAbAukAVgLpAGcCkQDIBKH/3QPZAH0COwCeAgr/0wLpAOEDlQC+A84AAgWtALkGBgCxBjAAlgPQ/9IFNP+kBTT/pAU0/6QFNP+kBTT/pAU0/6QHVf+HBRsAZQRtACcEbQAnBG0AJwRtACcCOwA1AjsANQI7ADUCOwA1BTr//wWMACcFZgBrBWYAawVmAGsFZgBrBWYAawQtACMFZAAVBRkAWwUZAFsFGQBbBRkAWwTFAKEErwAnBMsAGwQ9ACIEPQAiBD0AIgQ9ACIEPQAiBD0AIgaXAA8EGgA4BDQAOwQ0ADsENAA7BDQAOwIUACICFAAiAhQAIgIUACIEjQBGBFsADQR1ADkEdQA5BHUAOQR1ADkEdQA5BHgAPQRvACoEWgBKBFoASgRaAEoEWgBKA9H/tQR+/80D0f+1BTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBRsAZQQaADgFGwBlBBoAOAUbAGUEGgA4BRsAZQQaADgFHAAnBQEAOwU6//8EiQA7BG0AJwQ0ADsEbQAnBDQAOwRtACcENAA7BG0AJwQ0ADwEbQAnBDQAOwVSAGsEcP/3BVIAawRw//cFUgBrBHD/9wVSAGsEcP/3BY0AJwRZAA0FjgAuBHcAKwI7ADUCFAAUAjsANQIUAB8COwA1AhQAIgI7/44CBf92AjsANQIUACIGlAA1BAEAHwRZAAMCIP8PBO4AJwQXABEEfwAhBD0AJwIFAB8EPQAnAgX/ogQ9ACcCmwAfBD0AJwLhAB8ETAAhAkcAHwWMACcEWwANBYwAJwRbAA0FjAAnBFsADQRbAA0FcgAjBG8AEQVmAGsEdQA5BWYAawR1ADkFZgBrBHUAOQeDAFAHDQBCBOIAJwLEABAE4gAnAsT/nATiACcCxAAQBLkAJAQLABwEuQAkBAsAHAS5ACQECwAcBLkAJAQLABwEwACcAp8AOwTAAJwCxwA7BMAAnAKf/+IFGQBbBFoASgUZAFsEWgBKBRkAWwRaAEoFGQBbBFoASgUZAFsEWgBKBRkAWwRaAEoG3gC3Bc4AdwTFAKED0f+1BMUAoQS2/+UD8f/nBLb/5QPx/+cEtv/lA/H/5wIGAB4FaABOAsT/SgVpAFsEhQA2BYMAWwTWAEoCIP8PBVIAawRw//cFjAAnBFsADQU0/6QEPQAiB1X/hwaXAA8FZAAVBG8AKgU0/6QEPQAiBG0AJwQ0ADsCO//JAhT/fgVmAGsEdQA5BOIAJwLEAAcFGQBbBFoASgS5ACQECwAcBMAAnAKfADsCIP8PBCUANgG5AIoD0gECA54BDQPIAO8DawD+AgUBAgKnAPoCRf+oA8QA3gMRAKwCY//uAAr9VAAK/dcACvz2AAr91gAK/L8ACvygAlUBLgQlAOgFNP+kAjsAngTR/74F8f/GAp//ygV6ABgFKf9YBVAAHQKgAAsFNP+kBO8AJwRdAC4Fnf+qBG0AJwS2/+UFjQAnBVoAXgI7ADUE7gAnBRr/sgbVACcFjAAnBHcAAAVmAGsFjwAuBQAAJwR3/9wEwACcBMUAoQXLAFIE8//DBYkAdQU8AAkCOwA1BMUAoQRrAD4ESAAoBG8AEQKgAG4ESABXBGsAPgSr/+UD+QB3BG8AOARIACgEBQBmBG8AEQSHAGwCoABuBH8AIQRS/6gEof/dA+EAZAP+AD4EdQA5BNcAXQRv/8sEIQA7BHcAOAQXAG4ESABXBa0AMgPx/7kFpwA/BmsAVAKgAEwESABXBHUAOQRIAFcGawBUBJkAUARjAG0Ex/8kBkoAVwRtACcEbQAnBdoAkQRdAC4FOgBnBLkAJAI7ADUCOwA1BFkAAwhQ/8oIVwAuBjQAoATuACcFhwAnBO0AmwWJACUFNP+kBOsAIwTvACcEXQAuBeL/hARtACcHcf+lBLsAHgWHACcFhwAnBQoALgWI/8oG1QAnBY0AJwVmAGsFjwAuBQAAJwUbAGUEwACcBO0AmwY4AFYE8//DBdUAJQVoAMUHawArB8YAKwX1AIkGzQAuBOoAIwUxAE8HJgAyBNv/sAQ9ACIEZQBDBHYAIgNKABgE2v+FBDQAOwZO/60EAQAWBH8AGQR/ABkEVgAiBIH/vwXfACIEfgAZBHUAOQR/ABkEaP/HBBoAOAPhAFMD0f+1BbAAPQPx/7kEuAAZBE4AcAZmABkGwQASBPoATwZIACIEUAAiBCUAIwZcACQEWP+2BDQAOwQ0ADsEWQANA0oAGAQlADsECwAcAgUAHwIUACIB/P8MBqf/vQa5ABkEcAANBFYAIgR/ABkD0f+1BH8AGQcbAGAGKQBEBOoAIwRPACEG+wArBd0AGQTv/64ESP+cBxQAPgYQADAGwgAUBcMAFgj1ADUHxgAiBAr/qgPc/7UFiQB1BacAPwVaAGIEbwA2BP0AqAP5AHcE/QCoA/kAdwk3AGsIRgA5BVoAZgRvADgHFwBiBh4ASwcbAGAGKQBEBP0AVgQzAEUE4wA4AAr85gAK/Q4ACv4rAAr+PAAK+kEACvpvBYcAJwR/ABkE6gAjBE8AIQT2ACcEbf/HBFIAIgOPABEEXf/8A0r/ywSdAC4ECgARB3H/pQZO/60EuwAeBAEAFgUKAC4EVgAiBQ4AIwSRACEFHgA3BC4AGQZsAKQFgwBsBY0AJwR+ABkHngAnBYkAEQgRAC4GygARBgUAZQTjAEsFGwBlBBoAOATAAJwD4QBTBMUAoQP5AHcExQChA/kAVATz/8MD8f+5BwQAnQVQAFYFaADFBE4AcAVUALkEWwCFBWcA5wRZAA0F/wBiBKj/9AX/AGIEqP/0AjsANQdx/6UGTv+tBQQAIwRgACEFiP/KBIH/vwWNAC4EbwARBY0AJwR+ABkFaADFBE4AcAbVACcF3wAiAjsANQU0/6QEPQAiBTT/pAQ9ACIHVf+HBpcADwRtACcENAA7BWgASAQlADYFaABIBCUANgdx/6UGTv+tBLsAHgQBABYEjAAvBIz/8AWHACcEfwAZBYcAJwR/ABkFZgBrBHUAOQVaAGIEbwA2BVoAYgRvADYFMQBPBCUAIwTtAJsD0f+1BO0AmwPR/7UE7QCbA9H/tQVoAMUETgBwBF0ALgNKABgGzQAuBkgAIgSsADMDQwAJBPP/wwPx/7kE8//DA/H/uQTqADAEawA7BsYARQayAEcGLACqBQoAYQRjAJIEJwCMB43/3gZ0/94HygAnBnUACwTnAEwEFgA9BYkAkAUAAHMFNgBWBEgAKAWI/8oEgf+/BTT/pAQ9ACIE7wAnBGgAEAUcACcEawA7BRwAJwRrADsFjQAnBFkADQTuACcEFwARBO4AJwQXABEEPQAnAgX/5AbVACcGywAQBtUAJwbLABAFjAAnBFsADQUAACcEaP/HBOIAJwLE/94EuQAkBAsAHATAAJwCnwA7BQ8AmwPhAGQFDwCbA+EAZAbeALcFzgB3Bt4AtwXOAHcG3gC3Bc4AdwbeALcFzgB3BLb/5QPx/+cFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIFNP+kBD0AIgU0/6QEPQAiBTT/pAQ9ACIEbQAnBDQAOwRtACcENAA7BG0AJwQ0ADsEbQAnBDQAOwRtACcENAA7BG0AJwQ0ADsEbQAnBDQAOwRtACcENAA7AjsANQIUACICO///AgX/5AVmAGsEdQA5BWYAawR1ADkFZgBrBHUAOQVmAGsEdQA5BWYAawR1ADkFZgBrBHUAOQVmAGsEdQA5BWkAWwSFADYFaQBbBIUANgVpAFsEhQA2BWkAWwSFADYFaQBbBIUANgUZAFsEWgBKBRkAWwRaAEoFgwBbBNYASgWDAFsE1gBKBYMAWwTWAEoFgwBbBNYASgWDAFsE1gBKBMUAoQPR/7UExQChA9H/tQTFAKED0f+1BMUAoQPR/7UFrP6zAx4A7AP/AAAH9AAAA/8AAAf0AAACrgAAAgQAAAFcAAAEZgAAAikAAAGfAAAA1QAAAAoAAAKXADYClwA2BQsAnAYKAIIGCgCCA4v/TgG9AK4BuQCKAcr/pAGlAM0DBgC3Aw0AlwL7/6EERQBpBID/+wLAAJ4D5QAzBYUAMwFrADYHdgCdAVoAkAKOAKECaQBdAmD/+QQ+ADcDiv/hAukAYwNMAG4ETf/DBJv/9gZJAA0GjgArCFsAJwdYACoGZAAQBIn/9ARzAE4F0QBCBB4AOwSIABAFP//kBV3/5gXBAMIDzgAxB/kAIwTsAO0E9wB9Bg8AtgayAIIGpwCIBnkAtQR4AEUFdQAfBL7/pwRqAJwEmAA0CA8ASQIm/xcEdQAwBGIAYgP8/9UEFAAXA/cAOgJTAGkCjgBmAez/zwT+AF8EjgBLBKIAXwb2AF8G9gBfBPQAXwaNABcACgAAB/v/qQg1AFwDhv/XBGP/pwSmADoEY/+nA6YACgQ2AC0ETgARBB4ADgQXABQFGwAuBBoAFAUKAC4FJgAuBKEAOwQl/4cCpwEGBL0ACgLpADMC6QAIAukAIwLpABYC6QAKAun/8QLp//QC6f/jAukAbQLpABcEBP/ZBXwAQwU1AHAEyAAAA6YAkwXjAIwEYwBwBGsAOQQlAGIEHgAOBEUACgSmADcEVQAKBKYAOgTCAAoF4gAKA6YACgREAAoDwv/yAfcAGATDAAoEjAA/A7IACgPMAAoEYgAKBGcAOQRIAAoEhf+bAf8A6wOPAQQD9gDcA/YAEwP2ANgD9gDXA48BBAOPAQUDjwEEBEb/pAQlAG0EZwA5BXAAYgQdAFUEegAqAgr/BwGw/7IEFP/WByb/wQcpAAoFdgBiBLwACgRZAAsFOv+DBhT/qQQvAAwEyAALBEUACgSw/8EELwByBT4ACgRzAF0GXAAKBt4ACgU7AEoF+wALBE8ACwRnABMGagAKBG//0gQM//UGav+pBIQACgT9AAoFTgBiBcwAQARDAG0Eqf+kBmwAYgRzAF0EcwAKBdoANwS3ADQELwAMBKYAOgROAAQD4wAeCAEACgTP/9kEbwAQBCYANwR/ADsDkgCkBIcANAR7/8cEhgA7BDQAOwRwADAFWgBvBYEAcQVmAC4FvQByBb8AcgQFAKsEaQAfA6YACgRA/38EpP/RAukAigLpAGQC6QB9AukAiQLpAJYC6QB7AukApgRT/9QEGAAnBm8AOgSaAEcEzwBOAiD/DwIg/w8CFQAiAhX/fQIVACIESAAKBGL/lwRi/5cEJQBiBIX/mwSF/5sEhf+bBIX/mwSF/5sEhf+bBIX/mwRnADkDzAAKA8wACgPMAAoDzAAKAfcAGAH3ABgB9wAYAfcAGATCAAoEpgA6BKYAOgSmADoEpgA6BKYAOgRrADkEmwB0BIcAjgRzAFoEcwAJBHMAJgRzAAsEawA5BGsAOQRrADkEJQBtBIX/mwSF/5sEhf+bBGcAOQRnADkEZwA5BGcAOQRiAAoDzAAKA8wACgPMAAoDzAAKA8wACgSMAD8EjAA/BIwAPwSMAD8EwwAKAfcADQH3ABgB9wAYAff/igH3ABgDwv/yBEQACgOmAAoDpgAKA6YACgOmAAoEwgAKBMIACgTCAAoEpgA6BKYAOgSmADoERQAKBEUACgRFAAoEHgAOBB4ADgQeAA4EHgAOBCUAYgQlAGIEJQBiBGsAOQRrADkEawA5BGsAOQRrADkEawA6BeMAjAQlAG0EJQBtBBT/1gQU/9YEFP/WBIX/mwQI/20E//94AjP/ewSw/9IEYf8sBNL/4gSF/5sESAAKA8wACgQU/9YEwwAKAfcAGAREAAoF4gAKBKYAOgRVAAoEJQBiBCUAbQRG/6QB9wAYBCUAbQPMAAoDpgAKBB4ADgH3ABgB9wAYA8L/8gREAAoELwByBIX/mwRIAAoDpgAKA8wACgTIAAsF4gAKBMMACgSmADoEvQAKBFUACgRnADkEJQBiBEb/pAQvAA0EwwAKBGcAOgQlAG0F2gA3BMgACwQvAHIFfABDBTT/pAQ9ACIEbQAnBDQAOwIU/+QAAAABAAAE5AkKBAAAAgICAwUFBgYCAwMEBQIDAgQFBQUFBQUFBQUFAgIEBQUECAYGBgYFBQYGAwUGBQgGBgYGBgUFBgYIBgUFAgQCBAQDBQUFBQUDBQUCAgUCCAUFBQUDBQMFBAcEBAQDAgMGAgIFBQYFAgUEBwQEBQMHBAMFAwMDBQQDAgMEBAYHBwQGBgYGBgYIBgUFBQUDAwMDBgYGBgYGBgUGBgYGBgUFBQUFBQUFBQcFBQUFBQICAgIFBQUFBQUFBQUFBQUFBAUEBgUGBQYFBgUGBQYFBgUGBgYFBQUFBQUFBQUFBQYFBgUGBQYFBgUGBQMCAwIDAgMCAwIHBQUCBgUFBQIFAgUDBQMFAwYFBgUGBQUGBQYFBgUGBQgIBgMGAwYDBQUFBQUFBQUFAwUDBQMGBQYFBgUGBQYFBgUIBwUEBQUEBQQFBAIGAwYFBgUCBgUGBQYFCAcGBQYFBQUDAgYFBgMGBQUFBQMCBQIEBAQEAgMDBAMDAAAAAAAAAwUGAwUHAwYGBgMGBgUGBQUGBgMGBggGBQYGBgUFBQcGBgYDBQUFBQMFBQUEBQUFBQUDBQUFBAQFBQUFBQUFBgQGBwMFBQUHBQUFBwUFBwUGBQMDBQkJBwYGBgYGBgYFBwUIBQYGBgYIBgYGBgYFBgcGBwYICQcIBgYIBQUFBQQFBQcFBQUFBQcFBQUFBQQEBgQFBQcIBgcFBQcFBQUFBAUFAgICBwgFBQUEBQgHBgUIBwYFCAcIBgoJBQQGBgYFBgQGBAoJBgUIBwgHBgUGAAAAAAAABgUGBQYFBQQFBAUFCAcFBQYFBgUGBQcGBgUJBgkIBwYGBQUEBQQFBAYECAYGBQYFBgUHBQcFAwgHBgUGBQYFBgUGBQgHAwYFBgUIBwUFBgUGBQgHBQUFBQYFBgUGBQYFBgUGBQYEBgQGBAYFBQQIBwUEBgQGBAYFCAgHBgUFCQcJBwYFBgYGBQYFBgUGBQYFBgUGBQYFBgUFAggICAgGBQYFBgMFBQUDBgQGBAgHCAcIBwgHBQQGBQYFBgUGBQYFBgUGBQYF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RvpHAkcKRzFHXkdmR25HdkgASAhIEEg9SEVITUiPSJdIx0jPSQ1JFUkdSZtJo0oDSnJKhUqYSqpKvErOSt9K9Et+S/lMLUytTT5Nm03qTnFOok6qTwVPDU8VT4xPlE/sUE9Qt1EnUW9RulIqUjJSlFMPUyJTNFNGU1hTalPqVERUUFTPVOZU+VVhVXhV91ZtVnVWiFaQVw5XhVfgV/dYDlggWF9YZ1jDWMtY01ksWTRZoVopWmRadlp+Wspa0lraWuJa6lryWvpbAltHW8JbylwCXElciVzVXTBdmF3pXmle9V9VX11f22BcYINg3GDkYVNh6WIkYjZiiGLRYxxjdWN9Y61jtWQLZDhkQGTgZOhlIGVoZahl8GZLZrFnAGdzZ/5oXWh0aIZpBWkcaYVpjWmVaahpsGopaqBrCmshazhrSWuIa/lsZWzSbUBty25YbqVu9G9hb9BwSHC6cUxx3HJ5cyhzMHM4c7V0JXRpdK50xnTedOp09nVqddh2s3eIeBh4qHkFeV95k3mweel6AHoXevJ7YXt8e5d8BHxzfM99S317faV95n4ofoR+037ffut+938Dfw9/G391f8yALICKgNyBM4E/gUuBmIHpgk+CqYNUg++D+4QHhBOEH4QnhC+Ee4TLhNeE44UshXKFfoWKheGGMYZ2hn6HAIeNh5mHpYeth7+H0YgziI6ImoimiQmJZ4lziX+Ji4mXiaOJr4m3icmJ24nuigGKCYoRiiOKNIqniq+KworUiueK+osNix+Lhovni/6MFIwnjDqMTYxfjGeMb4yCjJSMp4y5jMuM3IzvjQGNFI0sjT+NUY1djWmNhY2hjbCNwI3MjdiOMo6JjtyO5I9Oj+eQY5DakU2Ru5Iukp2TEJOCk+OUOpSTlOqVb5V3lYOVj5WblaeVs5W/lcuV15Xjle+V+5YHlhmWK5Y3lkOWT5ZblnKWhJaQlpyWqJa0lsaW2JbklvCW/JcIlxSXIJcyl0OXT5dbl3KXiZegl7eXypfdl+mX9ZgBmA2YGZglmDeYSZhhmHiYkJinmL+Y1pjumQWZIJk6mVKZaZl8mY6ZoZmzmcaZ2Jnzmg6aGpommjiaSppcmm2ahZqcmrSay5rjmvqbEpspm0SbXptwm4Kbjpuam6abspvEm9ab7pwFnB2cNJxMnGOce5ySnK2cx5zenPWdDJ0jnTqdUZ1o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A/wDXgAA////pP5sBK4FsAImACUAAAAHAXABbwAD//8AIv5wA9wEUAImAEUAAAAHAXAAqQAH//8AJ/6bBLwFsAImACYAAAAHAXYElwAK//8AEP6IBA8GAAImAEYAAAAHAXYEpf/3//8AJ/6bBOAFsAImACgAAAAHAXYEcwAK//8AO/6RBIgGAAImAEgAAAAHAXYEkAAA//8AJ/35BOAFsAImACgAAAAHA6sBAf6S//8AO/35BIgGAAImAEgAAAAHA6sBHv6S//8AJ/6bBYcFsAImACwAAAAHAXYFAAAK//8ADf6bA/kGAAImAEwAAAAHAXYEfwAK//8AJwAABXEHNgImAC8AAAEHAHcBpQE2AAkAsAQvsA/cMDEA//8AEQAABHUHPQImAE8AAAEHAHcBowE9AAkAsAQvsA/cMDEA//8AJ/7cBXEFsAImAC8AAAAHAXYE0QBL//8AEf7HBEoGAAImAE8AAAAHAXYEYAA2//8AJ/6bA8MFsAImADAAAAAHAXYElwAK////5P6bAhcGAAImAFAAAAAHAXYDRAAK//8AJwAABs4HNgImADEAAAEHAHcCvgE2ABMAsABFWLACLxuxAh8+WbAR3DAxAP//ABAAAAZoBgACJgBRAAABBwB3ApgAAAAJALADL7Ak3DAxAP//ACf+mwbOBbACJgAxAAAABwF2BasACv//ABD+mwZoBFICJgBRAAAABwF2Ba4ACv//ACf+lwWGBbACJgAyAAAABwF2BQIABv//AA3+mwP6BFICJgBSAAAABwF2BGwACv//ACcAAAUEB0ICJgA0AAABBwB3AasBQgAJALADL7AW3DAxAP///8f+YARtBfcCJgBUAAABBwB3AZv/9wAJALANL7Ah3DAxAP//ACf+mwTYBbACJgA2AAAABwF2BJgACv///97+mwLvBFMCJgBWAAAABwF2Az4ACv//ACT+kQS7BccCJgA3AAAABwF2BLAAAP//ABz+iAPEBFACJgBXAAAABwF2BGL/9///AJz+lAUiBbACJgA4AAAABwF2BJ8AA///ADv+kQKuBUECJgBYAAAABwF2A/UAAP//AJsAAAWBBzcCJgA6AAABBwFuAN0BQwAJALABL7AR3DAxAP//AGQAAAQNBewCJgBaAAABBgFuFvgACQCwAS+wEdwwMQD//wCb/psFgQWwAiYAOgAAAAcBdgTV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AesB7AHtAe4B7wHwAfEB8gJSAlQCWAJaAlwCXgJiAmQCagJsAnACcgJ0AnYCegJ8An4CgAKaAqICpAKqArADhwOOA5MDlgACAAAAAgAKO9oAAQNsAAQAAAGxBtI6+jr6BvwHUjfeI2I7mDuqOHYHWDiWOJY43jTeDqg4ljiWO6omhAqSCxQ1MDjeNI43uDdKOOQPYgt+OFQ2GjiMC8AM6gz0N643rji4NhoO1g3qOW4OTDeoOW4OZjfeN9433jfeN9433juYOHY4djh2OHY4ljiWOJY4ljuqOJY7qjuqO6o7qjuqON443jjeON445DhUOFQ4VDhUOFQ4VDiMOIw4jDiMN644uDi4OLg4uDi4OW42GjluN944VDfeOFQ33jhUO5g7mDuYO5g7qjuqOHY4jDh2OIw4djiMOHY4jDh2OIw4ljeuOJY4ljiWOJY4ljjeNN4OqA6oDqgOqDiWN644ljeuOJY3rjeuO6o4uDuqOLg7qji4DtYO1g7WNTA1MDUwON443jjeON443jjeN7g45DluOOQPYg9iD2I33jhUNTAO6Dr6N944djiWOJY7qjjkN94jYjZ+N944dg9iOJY7qjiWNN433jiWOJYPhDuqJoQQfjUwOOQRfDdKElo4ljjkN64S+DluEv43rhW8OW4Xlji4GKgYwhjIGM4ayBrOGwQbNji4OHY4dhu0Nn44ljiWON4dKh7cIJo03jY0OJY33iHQI2I2fiNsOHY3SiW6OJY03jiWOJY4ljuqJoQ7mDUwNjQ3SjiWOJYmpihAND4pHingKm44VCrMK6Y3QCwwOIw3qCz6LSQ4uDYaLoo5bjYaN6gxEDFOMoA0aDYaMwI4jDiMN0AziDOyNAg5bjQ+NGg33ji4NI45bjSOOW40tDYaNn43QDZ+N0o3qDTeNN403jTeOJY7mDUwOOQ5bjjkN0o3qDeuOJY3SjeoOJY4ljiWN944VDfeOFQ4djiMOIw4jDdKN6g7qji4OLg2GjY0OW42NDluNjQ5bjZ+N0A3QDdKN6g33jhUOJY3rje4N7g3uDfeOFQ33jhUN944VDfeOFQ33jhUN944VDfeOFQ33jhUN944VDfeOFQ33jhUN944VDh2OIw4djiMOHY4jDh2OIw4djiMOHY4jDh2OIw4djiMOJY4ljuqOLg7qji4O6o4uDuqOLg7qji4O6o4uDuqOLg4uDjeON445DluOOQ5bjjkOW445DluO6o6+jmIOvo6+jr6Ovo6+jsAOwo7HDsuO0A7XjtoO3I7mDuqO6oAAQGxAAQABgALAAwAEwAlACYAJwAoACkAKgAsAC0ALgAvADAAMQAyADMANAA1ADYAOAA5ADoAOwA8AD0APgA/AEUARgBJAEoATABPAFEAUgBTAFQAVgBYAFoAWwBcAF0AXwCDAIQAhQCGAIcAiACKAIsAjACNAI4AjwCQAJEAkgCTAJQAlQCWAJcAmACZAJwAnQCeAJ8AoACjAKQApQCmAKcAqACrAKwArQCuALQAtQC2ALcAuAC5AMAAwQDCAMMAxADFAMYAxwDIAMkAywDNAM8A0QDTANUA1gDXANgA2QDaANsA3ADdAN4A5wDoAOsA7QDvAPEA8wD3APkA/AD+AQABAgEGAQcBCAEJAQoBCwEMAQ8BEAERARIBEwEUARgBGgEcASUBJwEpASsBLQEvATEBMwE1ATcBOQE6ATsBPAE+AUABTgFPAWIBZQFmAXkBewF8AX0BfgF/AYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZIBkwGUAZUBlgGXAZgBmgGbAZ4BoQGjAaYBpwGpAa0BrgGvAbEBsgGzAbQBtQG2AbgBuQG8AcMBxAHFAcYByQHKAcsBzAHNAc4BzwHRAdIB0wHUAdUB1gHXAdgB2QHaAdsB3QHeAd8B4AHhAeMB5AHlAeYB6AHpAesB7AHtAe8B8AHxAfIB8wH0AfUB9gH3AfgB+QH6Af0CAQIDAgUCBgIHAggCCQIMAg0CDwIQAhECEwIUAhYCFwIcAh0CIQIlAiYCKQI2AjcCOAI5AjoCRAJRAlICUwJUAlgCWQJcAl4CYAJiAmQCbAJuAnACcQJyAnQCdQJ9AoICgwKEAosCjwKRApICkwKUApUCmAKZApsCnQKeAp8CqAKpAq0CrwKwArECsgKzArQCtQK4ArkCvQK+Ar8C1gLXAuYC5wL4AvoC/AMCAwMDBAMFAwYDBwMIAwkDCgMLAwwDDQMOAw8DEAMRAxIDEwMUAxUDFgMXAxgDGQMaAxsDHAMdAx4DHwMgAyEDIgMjAyQDJQMmAycDKAMpAyoDLAMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDQwNGA0gDVANVA1YDVwNYA1kDWgNbA1wDcANxA3MDdAN1A34DfwPZA9sD3APeA+ED4gPpA+wEMQQzBDQACgA4/8QBJf/EASf/xAFi/8QBxf/EAc7/xAHl/8QCYv/EAm7/xAJ2/8QAFQA6ABQAOwAmAD0AFgCgABYBNwAmATkAFgE7ABYBfwAWAZUAFgGbABYCNwAUAjkAFAJwABYCcgAWAvgAJgL6ACYC/AAmA1QAFgNWABYDWAAWA1oAFgABABP/CADOABD+7gAS/u4AJf9AAC7/MAA4ABQARf/eAEf/6wBI/+sASf/rAEv/6wBT/+sAVf/rAFb/5gBZ/+oAWv/oAF3/6ACD/0AAhP9AAIX/QACG/0AAh/9AAIj/QACj/94ApP/eAKX/3gCm/94Ap//eAKj/3gCq/+sAq//rAKz/6wCt/+sArv/rALX/6wC2/+sAt//rALj/6wC5/+sAvP/qAL3/6gC+/+oAv//qAMD/6ADC/+gAw/9AAMT/3gDF/0AAxv/eAMf/QADI/94Ayv/rAMz/6wDO/+sA0P/rANL/6wDW/+sA2P/rANr/6wDc/+sA3v/rAOD/6wDi/+sA5P/rAOb/6wD3/zABEP/rARL/6wEU/+sBFv/rASUAFAEnABQBLP/qAS7/6gEw/+oBMv/qATT/6gE2/+oBOv/oAUb/6wFI/+oBTv9AAU//3gFiABQBef9AAYL/QAGF/0ABjP9AAZz/6wGg/+oBof/rAaP/6AGt/+gBr//rAbL/6wGz/+sBtf/qAbv/6gG8/+sBvf/qAcUAFAHL/zABzgAUAdP/QAHlABQB8//eAfj/6wIB/+sCBP/rAgb/6AIH/+sCE//rAhT/6wIX/+sCIf/oAin/QAI2/+sCOP/oAjr/6AI8/+sCQP/rAkT/6wJiABQCa//rAm3/6wJuABQCcf/oAnYAFAKS/0ACk//eApT/QAKV/94Cmf/rApv/6wKd/+sCqf/rAqv/6wKt/+sCsf/oArP/6AK1/+gCw//rAsT/6wLF/+sCz//rAtb/QALX/94DAv9AAwP/3gME/0ADBf/eAwb/QAMH/94DCP9AAwn/3gMK/0ADC//eAwz/QAMN/94DDv9AAw//3gMQ/0ADEf/eAxL/QAMT/94DFP9AAxX/3gMW/0ADF//eAxj/QAMZ/94DG//rAx3/6wMf/+sDIf/rAyP/6wMl/+sDJ//rAyn/6wMv/+sDMf/rAzP/6wM1/+sDN//rAzn/6wM7/+sDPf/rAz//6wNB/+sDQ//rA0X/6wNH/+oDSf/qA0v/6gNN/+oDT//qA1H/6gNT/+oDVf/oA1f/6ANZ/+gDW//oA3L+7gN2/u4Dev7uA3v+7gPs/8AAIAA4/98AOv/kADv/7AA9/90AoP/dASX/3wEn/98BN//sATn/3QE7/90BYv/fAX//3QGV/90Bm//dAcX/3wHO/98B5f/fAjf/5AI5/+QCYv/fAm7/3wJw/90Ccv/dAnb/3wL4/+wC+v/sAvz/7ANU/90DVv/dA1j/3QNa/90D7AAOABoAOP/OADr/7QA9/9AAoP/QASX/zgEn/84BOf/QATv/0AFi/84Bf//QAZX/0AGb/9ABxf/OAc7/zgHl/84CN//tAjn/7QJi/84Cbv/OAnD/0AJy/9ACdv/OA1T/0ANW/9ADWP/QA1r/0AAQAC7/7gA5/+4AnP/uAJ3/7gCe/+4An//uAPf/7gEr/+4BLf/uAS//7gEx/+4BM//uATX/7gHL/+4DRv/uA0j/7gBKAAYAEAALABAADQAUAEEAEgBH/+gASP/oAEn/6ABL/+gAVf/oAGEAEwCq/+gAq//oAKz/6ACt/+gArv/oAMr/6ADM/+gAzv/oAND/6ADS/+gA1v/oANj/6ADa/+gA3P/oAN7/6ADg/+gA4v/oAOT/6ADm/+gBFv/oAUb/6AFmABABnP/oAaH/6AGy/+gBs//oAfj/6AIE/+gCB//oAhP/6AIU/+gCF//oAjz/6AJA/+gCRP/oAmv/6AJt/+gCmf/oApv/6AKd/+gCq//oAsP/6ALE/+gCxf/oAs//6AMb/+gDHf/oAx//6AMh/+gDI//oAyX/6AMn/+gDKf/oAz3/6AM//+gDQf/oA0X/6ANwABADcQAQA3MAEAN0ABADdQAQA34AEAN/ABAAAgIF/9YDcf+YAD0AR//sAEj/7ABJ/+wAS//sAFX/7ACq/+wAq//sAKz/7ACt/+wArv/sAMr/7ADM/+wAzv/sAND/7ADS/+wA1v/sANj/7ADa/+wA3P/sAN7/7ADg/+wA4v/sAOT/7ADm/+wBFv/sAUb/7AGc/+wBof/sAbL/7AGz/+wB+P/sAgT/7AIH/+wCE//sAhT/7AIX/+wCPP/sAkD/7AJE/+wCa//sAm3/7AKZ/+wCm//sAp3/7AKr/+wCw//sAsT/7ALF/+wCz//sAxv/7AMd/+wDH//sAyH/7AMj/+wDJf/sAyf/7AMp/+wDPf/sAz//7ANB/+wDRf/sABgAU//iALX/4gC2/+IAt//iALj/4gC5/+IBEP/iARL/4gEU/+IBr//iAbz/4gIB/+ICNv/iAqn/4gKt/+IDL//iAzH/4gMz/+IDNf/iAzf/4gM5/+IDO//iA0P/4gNxABgABgAQ/4QAEv+EA3L/hAN2/4QDev+EA3v/hAAQAC7/7AA5/+wAnP/sAJ3/7ACe/+wAn//sAPf/7AEr/+wBLf/sAS//7AEx/+wBM//sATX/7AHL/+wDRv/sA0j/7AALAFv/zAPW/9cD1/+4A9j/7gPZ/70D3P/yA97/8gPm//ED6v/zA+wAEwP3/7cABABKABQAWAAyAFsAEQNxABAAHgAG//IAC//yAFr/8wBd//MAwP/zAML/8wE6//MBZv/yAaP/8wGt//MCBf/1Agb/8wIh//MCOP/zAjr/8wJx//MCsf/zArP/8wK1//MDVf/zA1f/8wNZ//MDW//zA3D/8gNx//IDc//yA3T/8gN1//IDfv/yA3//8gAIAFv/5QGW/8sBuP/kA9z/7APe/+wD5v/rA+r/7QPsAA0APgAn//MAK//zADP/8wA1//MAiv/zAJX/8wCW//MAl//zAJj/8wCZ//MAm//zAMn/8wDL//MAzf/zAM//8wDf//MA4f/zAOP/8wDl//MBD//zARH/8wET//MBFf/zAUX/8wFS//MBfv/zAYn/8wGQ//MBqwANAcf/8wHh//MB5P/zAiP/8wI1//MCO//zAj3/8wI///MCQf/zAkP/8wJq//MCbP/zAqj/8wKq//MCrP/zAs7/8wMu//MDMP/zAzL/8wM0//MDNv/zAzj/8wM6//MDPP/zAz7/8wNA//MDQv/zA0T/8wNc//MEMf/zBDL/8wQ0//MENf/zAD8AJ//mACv/5gAz/+YANf/mAIr/5gCV/+YAlv/mAJf/5gCY/+YAmf/mAJv/5gDJ/+YAy//mAM3/5gDP/+YA3//mAOH/5gDj/+YA5f/mAQ//5gER/+YBE//mARX/5gFF/+YBUv/mAX7/5gGJ/+YBkP/mAZb/wgGrABABx//mAeH/5gHk/+YCI//mAjX/5gI7/+YCPf/mAj//5gJB/+YCQ//mAmr/5gJs/+YCqP/mAqr/5gKs/+YCzv/mAy7/5gMw/+YDMv/mAzT/5gM2/+YDOP/mAzr/5gM8/+YDPv/mA0D/5gNC/+YDRP/mA1z/5gQx/+YEMv/mBDT/5gQ1/+YANwAl/+QAPP/SAD3/0wCD/+QAhP/kAIX/5ACG/+QAh//kAIj/5ACg/9MAw//kAMX/5ADH/+QBOf/TATv/0wFO/+QBef/kAX//0wGC/+QBhf/kAYz/5AGV/9MBl//SAZv/0wGr/+IB0//kAdn/0gHo/9ICKf/kAlj/0gJw/9MCcv/TAnT/0gKD/9ICkv/kApT/5AKe/9ICvv/SAtb/5AMC/+QDBP/kAwb/5AMI/+QDCv/kAwz/5AMO/+QDEP/kAxL/5AMU/+QDFv/kAxj/5ANU/9MDVv/TA1j/0wNa/9MAJwAQ/0YAEv9GACX/zQCD/80AhP/NAIX/zQCG/80Ah//NAIj/zQDD/80Axf/NAMf/zQFO/80Bef/NAYL/zQGF/80BjP/NAbH/8gHT/80CKf/NApL/zQKU/80C1v/NAwL/zQME/80DBv/NAwj/zQMK/80DDP/NAw7/zQMQ/80DEv/NAxT/zQMW/80DGP/NA3L/RgN2/0YDev9GA3v/RgABAasADgCvAEf/3ABI/9wASf/cAEv/3ABR/8EAUv/BAFP/1gBU/8EAVf/cAFn/3QBa/+EAXf/hAKr/3ACr/9wArP/cAK3/3ACu/9wAtP/BALX/1gC2/9YAt//WALj/1gC5/9YAvP/dAL3/3QC+/90Av//dAMD/4QDC/+EAyv/cAMz/3ADO/9wA0P/cANL/3ADW/9wA2P/cANr/3ADc/9wA3v/cAOD/3ADi/9wA5P/cAOb/3AEH/8EBCf/BAQv/wQEM/8EBEP/WARL/1gEU/9YBFv/cASz/3QEu/90BMP/dATL/3QE0/90BNv/dATr/4QFG/9wBSP/dAZz/3AGe/8EBoP/dAaH/3AGj/+EBpf/mAaf/wQGo/+sBqf/pAa3/4QGu//ABr//WAbD/5wGy/9wBs//cAbT/4wG1/90Btv/OAbj/1AG5/9sBu//dAbz/1gG9/90B9v/BAfj/3AH7/8EB/P/BAf3/wQH//8ECAP/BAgH/1gIC/8ECA//BAgT/3AIG/+ECB//cAgn/wQIL/8ECDP/BAg//wQIR/8ECE//cAhT/3AIW/8ECF//cAh3/wQIf/8ECIP/BAiH/4QI2/9YCOP/hAjr/4QI8/9wCQP/cAkT/3AJN/8ECXf/BAmX/wQJn/8ECa//cAm3/3AJx/+ECiv/BAoz/wQKQ/8ECmf/cApv/3AKd/9wCpf/BAqf/wQKp/9YCq//cAq3/1gKx/+ECs//hArX/4QK5/8ECu//BAr3/wQLD/9wCxP/cAsX/3ALP/9wC5//BAxv/3AMd/9wDH//cAyH/3AMj/9wDJf/cAyf/3AMp/9wDL//WAzH/1gMz/9YDNf/WAzf/1gM5/9YDO//WAz3/3AM//9wDQf/cA0P/1gNF/9wDR//dA0n/3QNL/90DTf/dA0//3QNR/90DU//dA1X/4QNX/+EDWf/hA1v/4QB2AAb/2gAL/9oAR//wAEj/8ABJ//AAS//wAFX/8ABZ/+8AWv/cAF3/3ACq//AAq//wAKz/8ACt//AArv/wALz/7wC9/+8Avv/vAL//7wDA/9wAwv/cAMr/8ADM//AAzv/wAND/8ADS//AA1v/wANj/8ADa//AA3P/wAN7/8ADg//AA4v/wAOT/8ADm//ABFv/wASz/7wEu/+8BMP/vATL/7wE0/+8BNv/vATr/3AFG//ABSP/vAWb/2gGc//ABoP/vAaH/8AGj/9wBqP/sAasADwGt/9wBsP/qAbL/8AGz//ABtP/OAbX/7wG2/+cBu//vAb3/7wH4//ACBP/wAgb/3AIH//ACE//wAhT/8AIX//ACIf/cAjj/3AI6/9wCPP/wAkD/8AJE//ACa//wAm3/8AJx/9wCmf/wApv/8AKd//ACq//wArH/3AKz/9wCtf/cAsP/8ALE//ACxf/wAs//8AMb//ADHf/wAx//8AMh//ADI//wAyX/8AMn//ADKf/wAz3/8AM///ADQf/wA0X/8ANH/+8DSf/vA0v/7wNN/+8DT//vA1H/7wNT/+8DVf/cA1f/3ANZ/9wDW//cA3D/2gNx/9oDc//aA3T/2gN1/9oDfv/aA3//2gBEABAADAASAAwAR//nAEj/5wBJ/+cAS//nAFX/5wCq/+cAq//nAKz/5wCt/+cArv/nAMr/5wDM/+cAzv/nAND/5wDS/+cA1v/nANj/5wDa/+cA3P/nAN7/5wDg/+cA4v/nAOT/5wDm/+cBFv/nAUb/5wGc/+cBof/nAasADwGy/+cBs//nAfj/5wIE/+cCB//nAhP/5wIU/+cCF//nAjz/5wJA/+cCRP/nAmv/5wJt/+cCmf/nApv/5wKd/+cCq//nAsP/5wLE/+cCxf/nAs//5wMb/+cDHf/nAx//5wMh/+cDI//nAyX/5wMn/+cDKf/nAz3/5wM//+cDQf/nA0X/5wNyAAwDdgAMA3oADAN7AAwABgG0/+oB9//uAgX/1QIP/+0CY//sAtH/7AABAgX/wAABAbQAIAB+AAYADAALAAwAR//oAEj/6ABJ/+gASgAMAEv/6ABT/+oAVf/oAFoACwBdAAsAqv/oAKv/6ACs/+gArf/oAK7/6AC1/+oAtv/qALf/6gC4/+oAuf/qAMAACwDCAAsAyv/oAMz/6ADO/+gA0P/oANL/6ADW/+gA2P/oANr/6ADc/+gA3v/oAOD/6ADi/+gA5P/oAOb/6AEQ/+oBEv/qART/6gEW/+gBOgALAUb/6AFmAAwBnP/oAaH/6AGjAAsBq/+QAa0ACwGv/+oBsAALAbL/6AGz/+gBtAAMAbz/6gH4/+gCAf/qAgT/6AIGAAsCB//oAhP/6AIU/+gCF//oAiEACwI2/+oCOAALAjoACwI8/+gCQP/oAkT/6AJr/+gCbf/oAnEACwKZ/+gCm//oAp3/6AKp/+oCq//oAq3/6gKxAAsCswALArUACwLD/+gCxP/oAsX/6ALP/+gDG//oAx3/6AMf/+gDIf/oAyP/6AMl/+gDJ//oAyn/6AMv/+oDMf/qAzP/6gM1/+oDN//qAzn/6gM7/+oDPf/oAz//6ANB/+gDQ//qA0X/6ANVAAsDVwALA1kACwNbAAsDcAAMA3EADANzAAwDdAAMA3UADAN+AAwDfwAMA9cADQPZAA4D2v/1A9z/7APe/+0D5v/sA+r/7gPs/78D9wANAAECBf/iAA0AXP/tAF7/7QE9/+0BP//tAUH/7QH5/+0CBf/AAgj/7QJZ/+0Cdf/tAoT/7QKf/+0Cv//tAAwAXP/yAF7/8gE9//IBP//yAUH/8gH5//ICCP/yAln/8gJ1//IChP/yAp//8gK///IAHwBa//QAXP/yAF3/9ABe//MAwP/0AML/9AE6//QBPf/zAT//8wFB//MBo//0Aa3/9AH5//ICBv/0Agj/8gIh//QCOP/0Ajr/9AJZ//ICcf/0AnX/8gKE//ICn//yArH/9AKz//QCtf/0Ar//8gNV//QDV//0A1n/9ANb//QAXQAG/8oAC//KADj/0gA6/9QAPP/0AD3/0wBa/+YAXP/vAF3/5gCg/9MAwP/mAML/5gEl/9IBJ//SATn/0wE6/+YBO//TAWL/0gFm/8oBf//TAZX/0wGX//QBm//TAaP/5gGt/+YBxf/SAc7/0gHR/+0B2f/0AeX/0gHm/+0B6P/0Aer/4QHv/9QB+f/vAgX/yQIG/+YCCP/vAg//0QIh/+YCJP/lAjf/1AI4/+YCOf/UAjr/5gJC/+MCWP/0Aln/7wJi/9ICY//EAm7/0gJw/9MCcf/mAnL/0wJ0//QCdf/vAnb/0gJ4/+ECev/hAoP/9AKE/+8Cjf/hAp7/9AKf/+8CsP/tArH/5gKy/+0Cs//mArT/7QK1/+YCtv/hAr7/9AK//+8Cxv/UAsf/9QLI/+cC0P9kAtH/yQNU/9MDVf/mA1b/0wNX/+YDWP/TA1n/5gNa/9MDW//mA3D/ygNx/8oDc//KA3T/ygN1/8oDfv/KA3//ygBsAAb/wAAL/8AAOP+dADr/xwA8//AAPf+rAFH/0gBS/9IAVP/SAKD/qwC0/9IBB//SAQn/0gEL/9IBDP/SASX/nQEn/50BOf+rATv/qwFi/50BZv/AAX//qwGV/6sBl//wAZv/qwGe/9IBp//SAcX/nQHM//UBzv+dAdH/6gHZ//AB3v/1AeX/nQHm/+oB6P/wAer/5QHv/8EB9v/SAfv/0gH8/9IB/f/SAf//0gIA/9ICAv/SAgP/0gIF/80CCf/SAgv/0gIM/9ICD//SAhH/0gIW/9ICHf/SAh//0gIg/9ICN//HAjn/xwJN/9ICWP/wAl3/0gJi/50CY//MAmX/0gJn/9ICbv+dAnD/qwJy/6sCdP/wAnb/nQJ4/+UCev/lAn7/3wKD//ACh//1Aor/0gKM/9ICjf/lApD/0gKe//ACpf/SAqf/0gKw/+oCsv/qArT/6gK2/+UCuf/SArv/0gK9/9ICvv/wAsb/zgLI/+oCyv/1AtD/ngLR/84C1P/1Auf/0gNU/6sDVv+rA1j/qwNa/6sDcP/AA3H/wANz/8ADdP/AA3X/wAN+/8ADf//AAG8ABv+xAAv/sQA4/54AOv/FADz/8gA9/6gAUf/PAFL/zwBU/88AXP/vAKD/qAC0/88BB//PAQn/zwEL/88BDP/PASX/ngEn/54BOf+oATv/qAFi/54BZv+xAX//qAGV/6gBl//yAZv/qAGe/88Bp//PAcX/ngHO/54B0f/sAdn/8gHl/54B5v/sAej/8gHq/+EB7//CAfb/zwH5/+8B+//PAfz/zwH9/88B///PAgD/zwIC/88CA//PAgX/xgII/+8CCf/PAgv/zwIM/88CD//PAhH/zwIW/88CHf/PAh//zwIg/88CN//FAjn/xQJN/88CWP/yAln/7wJd/88CYv+eAmP/wAJl/88CZ//PAm7/ngJw/6gCcv+oAnT/8gJ1/+8Cdv+eAnj/4QJ6/+ECfv/fAoP/8gKE/+8Civ/PAoz/zwKN/+ECkP/PAp7/8gKf/+8Cpf/PAqf/zwKw/+wCsv/sArT/7AK2/+ECuf/PArv/zwK9/88Cvv/yAr//7wLG/80CyP/oAtD/nwLR/8YC5//PA1T/qANW/6gDWP+oA1r/qANw/7EDcf+xA3P/sQN0/7EDdf+xA37/sQN//7EATQA4/74AUf/hAFL/4QBU/+EAWv/vAF3/7wC0/+EAwP/vAML/7wEH/+EBCf/hAQv/4QEM/+EBJf++ASf/vgE6/+8BYv++AZ7/4QGj/+8Bp//hAa3/7wHF/74Bzv++AeX/vgHv/8kB9v/hAfv/4QH8/+EB/f/hAf//4QIA/+ECAv/hAgP/4QIF/98CBv/vAgn/4QIL/+ECDP/hAg//4QIR/+ECFv/hAh3/4QIf/+ECIP/hAiH/7wIk/+0COP/vAjr/7wJC/+sCTf/hAl3/4QJi/74CY//fAmX/4QJn/+ECbv++AnH/7wJ2/74Cfv/pAor/4QKM/+ECkP/hAqX/4QKn/+ECsf/vArP/7wK1/+8Cuf/hArv/4QK9/+ECx//1AtH/4ALn/+EDVf/vA1f/7wNZ/+8DW//vAGQAOP/mADr/5wA8//IAPf/nAFH/1gBS/9YAVP/WAFz/8QCg/+cAtP/WAQf/1gEJ/9YBC//WAQz/1gEl/+YBJ//mATn/5wE7/+cBYv/mAX//5wGV/+cBl//yAZv/5wGe/9YBp//WAcX/5gHO/+YB0f/uAdn/8gHl/+YB5v/uAej/8gHq/+gB7//mAfb/1gH5//EB+//WAfz/1gH9/9YB///WAgD/1gIC/9YCA//WAgX/0AII//ECCf/WAgv/1gIM/9YCD//WAhH/1gIW/9YCHf/WAh//1gIg/9YCN//nAjn/5wJN/9YCWP/yAln/8QJd/9YCYv/mAmP/zgJl/9YCZ//WAm7/5gJw/+cCcv/nAnT/8gJ1//ECdv/mAnj/6AJ6/+gCg//yAoT/8QKK/9YCjP/WAo3/6AKQ/9YCnv/yAp//8QKl/9YCp//WArD/7gKy/+4CtP/uArb/6AK5/9YCu//WAr3/1gK+//ICv//xAsb/5wLI/+0C0P/mAtH/0ALn/9YDVP/nA1b/5wNY/+cDWv/nAAICLQALAtD/5gCTACUAEAAn/+gAK//oADP/6AA1/+gAOP/gADr/4AA9/98AgwAQAIQAEACFABAAhgAQAIcAEACIABAAiv/oAJX/6ACW/+gAl//oAJj/6ACZ/+gAm//oAKD/3wDDABAAxQAQAMcAEADJ/+gAy//oAM3/6ADP/+gA3//oAOH/6ADj/+gA5f/oAQ//6AER/+gBE//oARX/6AEl/+ABJ//gATn/3wE7/98BRf/oAU4AEAFS/+gBYv/gAXkAEAF+/+gBf//fAYIAEAGFABABif/oAYwAEAGQ/+gBlf/fAZv/3wHF/+ABx//oAcwAEAHO/+AB0wAQAdcAFAHeABAB4f/oAeT/6AHl/+AB6v/hAe//4AH3ABMB/gAQAgr/4AIcABACI//oAikAEAI1/+gCN//gAjn/4AI7/+gCPf/oAj//6AJB/+gCQ//oAmL/4AJq/+gCbP/oAm7/4AJw/98Ccv/fAnb/4AJ4/+ECef/gAnr/4QJ7/+ACf//hAocAEAKIABACjf/hAo7/4AKSABAClAAQApr/6QKo/+gCqv/oAqz/6AK2/+ECt//gAsb/3wLI/94CygAQAs7/6ALQ/98C0v/yAtQAEALVABAC1gAQAwIAEAMEABADBgAQAwgAEAMKABADDAAQAw4AEAMQABADEgAQAxQAEAMWABADGAAQAy7/6AMw/+gDMv/oAzT/6AM2/+gDOP/oAzr/6AM8/+gDPv/oA0D/6ANC/+gDRP/oA1T/3wNW/98DWP/fA1r/3wNc/+gEMf/oBDL/6AQ0/+gENf/oADIAG//yADj/8QA6//QAPP/0AD3/8ACg//ABJf/xASf/8QE5//ABO//wAWL/8QF///ABlf/wAZf/9AGb//ABxf/xAcz/9QHO//EB0f/zAdn/9AHe//UB5f/xAeb/8wHo//QB7//xAjf/9AI5//QCWP/0AmL/8QJu//ECcP/wAnL/8AJ0//QCdv/xAoP/9AKH//UCnv/0ArD/8wKy//MCtP/zAr7/9ALG//ICyP/yAsr/9QLQ//IC1P/1A1T/8ANW//ADWP/wA1r/8AAIAFgADgCJ/tcBq/+YAbH/xwHX/xIB9/9SAsL/zwPs/4AAZgAlAA8AOP/mADr/5gA8AA4APf/mAIMADwCEAA8AhQAPAIYADwCHAA8AiAAPAKD/5gDDAA8AxQAPAMcADwEl/+YBJ//mATn/5gE7/+YBTgAPAWL/5gF5AA8Bf//mAYIADwGFAA8BjAAPAZX/5gGXAA4Bm//mAcX/5gHMAA4Bzv/mAdEACwHTAA8B1wATAdkADgHeAA4B5f/mAeYACwHoAA4B6v/lAe//5gHw//QB9wASAf4ADwIF/+cCCv/oAg//5wIcAA8CKQAPAjf/5gI5/+YCWAAOAmL/5gJj/+cCbv/mAnD/5gJy/+YCdAAOAnb/5gJ4/+UCef/oAnr/5QJ7/+gCgwAOAocADgKIAA8Cjf/lAo7/6AKSAA8ClAAPAp4ADgKwAAsCsgALArQACwK2/+UCt//oAr4ADgLG/+YCyP/mAsoADgLQ/+YC0f/nAtQADgLVAA8C1gAPAwIADwMEAA8DBgAPAwgADwMKAA8DDAAPAw4ADwMQAA8DEgAPAxQADwMWAA8DGAAPA1T/5gNW/+YDWP/mA1r/5gA3AAb/vwAL/78AOP+fADr/yQA9/60AoP+tASX/nwEn/58BOf+tATv/rQFi/58BZv+/AX//rQGV/60Bm/+tAcX/nwHO/58B0f/sAeX/nwHm/+wB6v/mAe//xAIF/80CD//VAjf/yQI5/8kCYv+fAmP/zAJu/58CcP+tAnL/rQJ2/58CeP/mAnr/5gJ+/98Cjf/mArD/7AKy/+wCtP/sArb/5gLG/9ECyP/sAtD/oQLR/88DVP+tA1b/rQNY/60DWv+tA3D/vwNx/78Dc/+/A3T/vwN1/78Dfv+/A3//vwAwADj/4wA8/+UAPf/kAKD/5AEl/+MBJ//jATn/5AE7/+QBYv/jAX//5AGV/+QBl//lAZv/5AHF/+MBzP/lAc7/4wHR/+kB1//iAdn/5QHe/+UB5f/jAeb/6QHo/+UB/v/qAhz/6gJY/+UCYv/jAm7/4wJw/+QCcv/kAnT/5QJ2/+MCg//lAof/5QKI/+oCnv/lArD/6QKy/+kCtP/pAr7/5QLK/+UC0P/kAtT/5QLV/+oDVP/kA1b/5ANY/+QDWv/kACMAOP/iADz/5AEl/+IBJ//iAWL/4gGX/+QBxf/iAcz/5AHO/+IB0f/pAdf/4QHZ/+QB3v/kAeX/4gHm/+kB6P/kAff/5AH+/+sCHP/rAlj/5AJi/+ICbv/iAnT/5AJ2/+ICg//kAof/5AKI/+sCnv/kArD/6QKy/+kCtP/pAr7/5ALK/+QC1P/kAtX/6wAXADj/6wA9//MAoP/zASX/6wEn/+sBOf/zATv/8wFi/+sBf//zAZX/8wGb//MBxf/rAc7/6wHl/+sCYv/rAm7/6wJw//MCcv/zAnb/6wNU//MDVv/zA1j/8wNa//MANgBR/+8AUv/vAFT/7wBc//AAtP/vAQf/7wEJ/+8BC//vAQz/7wGe/+8Bp//vAfb/7wH3/+4B+f/wAfv/7wH8/+8B/f/vAf//7wIA/+8CAv/vAgP/7wIF/+4CCP/wAgn/7wIL/+8CDP/vAg//7wIR/+8CFv/vAh3/7wIf/+8CIP/vAiT/9AJC//ECTf/vAln/8AJd/+8CY//vAmX/7wJn/+8Cdf/wAoT/8AKK/+8CjP/vApD/7wKf//ACpf/vAqf/7wK5/+8Cu//vAr3/7wK///AC0f/vAuf/7wAiAAb/8gAL//IAWv/1AF3/9QDA//UAwv/1ATr/9QFm//IBo//1Aa3/9QIF//QCBv/1Ag//9AIh//UCJP/1Ajj/9QI6//UCY//1AnH/9QKx//UCs//1ArX/9QLR//UDVf/1A1f/9QNZ//UDW//1A3D/8gNx//IDc//yA3T/8gN1//IDfv/yA3//8gAyAFH/7gBS/+4AVP/uALT/7gEH/+4BCf/uAQv/7gEM/+4Bnv/uAaf/7gH2/+4B9wAUAfv/7gH8/+4B/f/uAf//7gIA/+4CAv/uAgP/7gIF/+0CCf/uAgr/7QIL/+4CDP/uAg3/0AIP/+4CEf/uAhb/7gId/+4CH//uAiD/7gJN/+4CXf/uAmP/7QJl/+4CZ//uAnn/7QJ7/+0Civ/uAoz/7gKO/+0CkP/uAqX/7gKn/+4Ct//tArn/7gK7/+4Cvf/uAtH/7QLn/+4ACgAG//UAC//1AWb/9QNw//UDcf/1A3P/9QN0//UDdf/1A37/9QN///UAWQBH//AASP/wAEn/8ABL//AAU//HAFX/8ACq//AAq//wAKz/8ACt//AArv/wALX/xwC2/8cAt//HALj/xwC5/8cAyv/wAMz/8ADO//AA0P/wANL/8ADW//AA2P/wANr/8ADc//AA3v/wAOD/8ADi//AA5P/wAOb/8AEQ/8cBEv/HART/xwEW//ABRv/wAZz/8AGh//ABr//HAbL/8AGz//ABvP/HAfj/8AIB/8cCBP/wAgf/8AIT//ACFP/wAhf/8AI2/8cCPP/wAj7/6wJA//ACRP/wAmv/8AJt//ACmf/wApv/8AKd//ACqf/HAqv/8AKt/8cCw//wAsT/8ALF//ACz//wAxv/8AMd//ADH//wAyH/8AMj//ADJf/wAyf/8AMp//ADL//HAzH/xwMz/8cDNf/HAzf/xwM5/8cDO//HAz3/8AM///ADQf/wA0P/xwNF//AD3P/rA97/6wPm/+kD6v/rAKEABgANAAsADQBF//AAR//AAEj/wABJ/8AASgANAEv/wABT/+IAVf/AAFoACwBdAAsAo//wAKT/8ACl//AApv/wAKf/8ACo//AAqv/AAKv/wACs/8AArf/AAK7/wAC1/+IAtv/iALf/4gC4/+IAuf/iAMAACwDCAAsAxP/wAMb/8ADI//AAyv/AAMz/wADO/8AA0P/AANL/wADW/8AA2P/AANr/wADc/8AA3v/AAOD/wADi/8AA5P/AAOb/wAEQ/+IBEv/iART/4gEW/8ABOgALAUb/wAFP//ABZgANAZz/wAGh/8ABowALAa0ACwGv/+IBsf/WAbL/wAGz/8ABtv/VAbz/4gHz//AB9//IAfj/wAH+/9cCAf/iAgT/wAIGAAsCB//AAhP/wAIU/8ACF//AAhz/1wIhAAsCNv/iAjgACwI6AAsCPP/AAj7/7AJA/8ACQgAMAkT/wAJr/8ACbf/AAnEACwKI/9cCk//wApX/8AKZ/8ACm//AAp3/wAKp/+ICq//AAq3/4gKxAAsCswALArUACwLD/8ACxP/AAsX/wALHAAsCyQALAs//wALV/9cC1//wAwP/8AMF//ADB//wAwn/8AML//ADDf/wAw//8AMR//ADE//wAxX/8AMX//ADGf/wAxv/wAMd/8ADH//AAyH/wAMj/8ADJf/AAyf/wAMp/8ADL//iAzH/4gMz/+IDNf/iAzf/4gM5/+IDO//iAz3/wAM//8ADQf/AA0P/4gNF/8ADVQALA1cACwNZAAsDWwALA3AADQNxAA0DcwANA3QADQN1AA0DfgANA38ADQPXAA0D2QAOA9r/9QPc/+wD3v/tA+b/7APq/+4D7P+/A/cADQAPAfcAFAH+ABACBf/wAgr/8AIP//ACEgAWAhwAEAJj/+YCef/wAnv/3AKIABACjv/wArf/8ALR//AC1QAQAEwAR//uAEj/7gBJ/+4AS//uAFX/7gCq/+4Aq//uAKz/7gCt/+4Arv/uAMr/7gDM/+4Azv/uAND/7gDS/+4A1v/uANj/7gDa/+4A3P/uAN7/7gDg/+4A4v/uAOT/7gDm/+4BFv/uAUb/7gGc/+4Bof/uAbL/7gGz/+4B9wASAfj/7gH+AA4CBP/uAgX/4wIH/+4CCv/jAg3/uAIP/+MCE//uAhT/7gIX/+4CHAAOAjz/7gJA/+4CRP/uAmP/ugJr/+4Cbf/uAnn/4wJ7/9kCiAAOAo7/4wKZ/+4Cm//uAp3/7gKr/+4Ct//jAsP/7gLE/+4Cxf/uAs//7gLR/+MC1QAOAxv/7gMd/+4DH//uAyH/7gMj/+4DJf/uAyf/7gMp/+4DPf/uAz//7gNB/+4DRf/uACAAWv/AAF3/wADA/8AAwv/AATr/wAGj/8ABrf/AAgX/gAIG/8ACCv/uAg//8AIh/8ACJP/bAjj/wAI6/8ACQv/cAmP/RwJx/8ACef/uAnv/7gKO/+4Csf/AArP/wAK1/8ACt//uAscABwLJ//QC0f9/A1X/wANX/8ADWf/AA1v/wAAhAFr/9ABc//AAXf/0AMD/9ADC//QBOv/0AaP/9AGt//QB9//vAfn/8AH+//MCBv/0Agj/8AIP/+4CHP/zAiH/9AI4//QCOv/0Aln/8AJx//QCdf/wAoT/8AKI//MCn//wArH/9AKz//QCtf/0Ar//8ALV//MDVf/0A1f/9ANZ//QDW//0AAoABv/WAAv/1gFm/9YDcP/WA3H/1gNz/9YDdP/WA3X/1gN+/9YDf//WABUAXP/gAfn/4AIF/3YCCP/gAgr/wgIP/9MCJP/ZAkL/2wJZ/+ACY/8eAnX/4AJ5/8ICe//tAoT/4AKO/8ICn//gArf/wgK//+ACx//wAsn/8gLR/1YADQIF/2QCCv/SAg//2QIk/9kCQv/bAmP/HgJ5/9ICe//tAo7/0gK3/9ICx//wAsn/8gLR/1YACgHv/8MCBf/PAg//1AJj/84Cev/nAn7/3wLG/9ECyP/sAtD/oALR/9EACQIF/2oCD//GAiT/2QJC/9sCY/8eAnv/7QLH//ACyf/yAtH/VgAJAA0AFABBABEAVv/iAGEAEwPc/9kD3v/ZA+b/2QPq/9kD7P+0AAoABv/XAAv/1wFm/9cDcP/XA3H/1wNz/9cDdP/XA3X/1wN+/9cDf//XABQAW//BAZb/xQG0/7QB9P/XAgX/uQIP/+kCJP+yAj7/0gJC/8gCY/+gAnv/xQKa/+QCx//MAsn/zALR/8sC0v/vA9z/5wPe/+cD5v/mA+r/6AA6AAT/xABW/78AW//RAG7/bAB+/24Aif9DAKn/rAC7/6EBlv+4AaX/fgGp/3sBsP+bAbH/eQG0/7IBtv9+Abj/fQG5/3wB1/+vAe8ADwH0/+QB9f+gAff/dAH6/4ACBf+yAg7/fQIP/7ICEP+AAhL/eQIVACgCIv99AiT/fwI+/2YCQv/aAlH/gQJT/5gCX/99AmP/swJp/6ACe/98An7/mgJ//2wCmv/mAsL/awLH/5ICyf+tAs3/ewLQAA8C0f+RAtL/8gPW//ED2f/xA9r/vAPc/7kD3v+5A+b/uQPq/7kD7P+vA/b/7QAGAbT/6gH3/+4CBf/WAg//7QJj/+wC0f/sABIB1/+uAe8AEgH1/+AB9/+tAfr/1gIO/98CEv/SAiL/4AI+/84CUf/dAlP/4gJf/+ACaf/gAnv/6QJ//9oCwv+9As3/3wLQABEAMABW/34AW/+dAG7+8QB+/vQAif6rAKn/XgC7/0sBlv9yAaX/DwGp/woBsP9BAbH/BwG0/2gBtv8PAbj/DgG5/wwB1/9jAe8ABQH0/70B9f9JAff+/gH6/xMCBf9oAg7/DgIP/2gCEP8TAhL/BwIVADACIv8OAiT/EQI+/ucCQv+sAlH/FQJT/zwCX/8OAmP/agJp/0kCe/8MAn7/PwJ//vECmv/AAsL+7wLH/zECyf9fAs3/CgLQAAUC0f8wAtL/1QACAff/aAI+/+4AFwGW/9QBqP/tAasAEQG0/+ABtv/nAbj/5QG5/+4B1wASAfT/6QIF/9cCY//XAnv/0wJ+/9YCf//FApr/5wLGAA0CyAAMAtH/1gLS//ID3P/pA97/5wPm/+cD6v/pAAECPv/xAAICBf/WA3H/iAAJAA0ADwBBAAwAVv/rAGEADgPc/+cD3v/nA+b/5wPq/+kD7P/LAB0AI/+vAFj/7wBb/98BR//u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AX4BfgAFAX8BfwAQAYIBggACAYMBgwADAYQBhAAcAYUBhQACAYYBhgAGAYcBhwARAYgBiAAHAYkBiQAFAYoBigAHAYsBiwAJAYwBjAACAY0BjgAHAZABkAAFAZIBkgALAZQBlAAMAZUBlQAQAZcBlwAPAZoBmgAHAZsBmwAQAZ4BngAWAaMBowAZAacBpwAWAa0BrQAZAa8BrwAXAbEBsQATAbwBvAAXAcMBxAAGAcYBxgAcAckBygAHAcsBywAIAcwBzQAdAc8BzwAJAdEB0QAeAdIB0gAHAdMB0wACAdUB1QADAdYB1gAcAdgB2AAGAdkB2QAPAdsB2wAHAd0B3QAJAd4B4AAHAeEB4QAFAeMB4wALAeQB5AAEAeUB5QAMAeYB5gAeAegB6AAPAekB6QAHAesB6wAHAe0B7QAdAe8B7wAdAfMB8wASAfYB9gAfAfgB+AAVAfkB+QAaAgECAQAXAgMCAwATAgQCBAAUAgYCBgAZAgcCBwATAggCCAAaAg0CDQAgAg8CDwAgAhACEAATAhMCFAAVAhYCFgAfAhwCHQAgAiECIQAZAiUCJQAdAiYCJgAgAikCKQACAjYCNgAXAjcCNwANAjgCOAAZAjkCOQANAjoCOgAZAlECUQATAlICUgAcAlMCUwAfAlQCVAAcAlgCWAAPAlkCWQAaAlwCXAAJAl4CXgAJAmACYAAJAmICYgAJAmQCZAAHAmwCbAAEAm0CbQAUAm4CbgAMAnACcAAQAnECcQAZAnICcgAQAnQCdAAPAnUCdQAaAn0CfQAWAoICggAHAoMCgwAPAoQChAAaAosCiwAHAo8CjwAHApECkQAHApICkgACApMCkwASApQClAACApUClQASApgCmAAGApkCmQAVApsCmwAVAp0CnQAVAp4CngAPAp8CnwAaAqgCqAAFAqkCqQAXAq0CrQAXAq8CrwATArACsAAeArECsQAZArICsgAeArMCswAZArQCtAAeArUCtQAZArgCuAAcArkCuQAfAr0CvQAfAr4CvgAPAr8CvwAaAtYC1gACAtcC1wASAuYC5gAHAucC5wAWAvgC+AAOAvoC+gAOAvwC/AAOAwIDAgACAwMDAwASAwQDBAACAwUDBQASAwYDBgACAwcDBwASAwgDCAACAwkDCQASAwoDCgACAwsDCwASAwwDDAACAw0DDQASAw4DDgACAw8DDwASAxADEAACAxEDEQASAxIDEgACAxMDEwASAxQDFAACAxUDFQASAxYDFgACAxcDFwASAxgDGAACAxkDGQASAxoDGgAGAxsDGwAVAxwDHAAGAx0DHQAVAx4DHgAGAx8DHwAVAyADIAAGAyEDIQAVAyIDIgAGAyMDIwAVAyQDJAAGAyUDJQAVAyYDJgAGAycDJwAVAygDKAAGAykDKQAVAyoDKgAHAywDLAAHAy4DLgAFAy8DLwAXAzADMAAFAzEDMQAXAzIDMgAFAzMDMwAXAzQDNAAFAzUDNQAXAzYDNgAFAzcDNwAXAzgDOAAFAzkDOQAXAzoDOgAFAzsDOwAXA0MDQwAXA0YDRgAIA0gDSAAIA1QDVAAQA1UDVQAZA1YDVgAQA1cDVwAZA1gDWAAQA1kDWQAZA1oDWgAQA1sDWwAZA1wDXAAFA3IDcgABA3YDdgABA3oDewABBDEEMQAEBDMENAAFAAEABgQwAAEAAAAAAAAAAAABAAAAAAAAAAAAFgAZABYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAAAAAACAAAAAAAGgAAAAAAAAAAAAgAAAAIAAAAGwAJAAoACwAMABcADQAYAAAAAAAAAAAAAAAAAAMAAAAEAAQABAAAAAQAAAAAAAAAAAAAAAUABQAGAAUABAAAAAcAAAAOAA8AAAAcAA8AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAIAAgACAAIAAgAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgACAAIAAgAAAAIAAoACgAKAAoADQAAAAAAAwADAAMAAwADAAMAAAAEAAQABAAEAAQAAAAAAAAAAAAAAAUABgAGAAYABgAGAAAAAAAOAA4ADgAOAA8AAAAPAAIAAwACAAMAAgADAAgABAAIAAQACAAEAAgABAAAAAQAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQACAAEAAgABAAIAAQACAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABQAAAAUABQAAAAAACAAGAAgABgAIAAYACAAEAAAAAAAAAAAAAAAAABsABwAbAAcAGwAHABsABwAJAAAACQAAAAAAAAAKAA4ACgAOAAoADgAKAA4ACgAOAAoADgAMAAAADQAPAA0AGAAQABgAEAAYABAAAAAAAAAACAAEAAAADgAAAAAAAAAAAAAAAgADAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAHAAkAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAACAANAAAAAAACAAAAAAACAAAAGAAAAAgAAAAAAAIAAAAAAAAACAAAAAAAAAAAAA0AAAAXAAAAAAAAAA0ABAAAAAUAAAAOAAQAAAAPAAAAAAAAAAUAAAAAAAAAAAAAAA8AAAAGAAAAAAAEAAQAAAAOAAAAAAAAAAAAAAAOAAYADgAAAAAAAAAAAAAAAAAAAAkAAAAIAAAAAAAAABoAEQAAAAkAAAAAABUAAAACAAAAAAAAAAAAAAAXAAAAAAAAAAAAEQAAAAAACAAAAAAACAAJABUAAAAXAAAAEgAAAAAAAAAAAAAAAAAAAAAAAwAAAAAABQAAAAQAHAAAAAUABQAFABMABQAFAAYABQAFAAQAAAAPAAQAHAAFABQABQAFAAAAAAAFAAAABQAAAAQABAAAAAUABAAHAAAAAAAAABMABQAAAAUABQAPAAAACAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAGAAsADwALAA8ACAAEAAgAAAAIAAQACAAAAAgABAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAABcAHAAAAAAAAAAFAAAAAAAAAAAACQAAAAAABQAAAAUAAAAAAAgABAAIAAQACQAAAA0ADwANAAAAFwAcAAkAAAASABQAAAAAAAAAAAAAAAAAAAAAAAAAFwAcAAAAAAARABMAAAAFAAAABQASABQAAAAFAAAAAgADAAIAAwAAAAAAAAAEAAAABAAAAAQAFwAcAAAAAAAAAAAAAAAFAAAABQAIAAYACAAEAAgABgAAAAAAFQAPABUADwAVAA8AEgAUAAAABQAAAAUAAAAFABcAHAAAAAAAAAAEAAQABAAAAAAAAAAAABEAAAAAAAAACAAEAAAAAAAAAAAAEQATAAIAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAMAAAAAAAAAAAAAAACAAMAAgADAAIAAwACAAMAAgADAAIAAwACAAMAAgADAAIAAwACAAMAAgADAAIAAwAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAAAAAAAACAAGAAgABgAIAAYACAAGAAgABgAIAAYACAAGAAgABAAIAAQACAAEAAgABgAIAAQACgAOAAoADgAAAA4AAAAOAAAADgAAAA4AAAAOAA0ADwANAA8ADQAPAA0ADwAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAGQAZAAAAAQABABYAAQABAAEAFgAAAAAAAAAWABYAAAAAAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAgAAAAIAAgAAAABAAAACgIGCBAABERGTFQAGmN5cmwASGdyZWsAdmxhdG4ApAAEAAAAAP//ABIAAAAKABQAHgAoADQAQQBLAFUAXwBpAHMAfQCHAJEAmwClAK8ABAAAAAD//wASAAEACwAVAB8AKQA1AEIATABWAGAAagB0AH4AiACSAJwApgCwAAQAAAAA//8AEgACAAwAFgAgACoANgBDAE0AVwBhAGsAdQB/AIkAkwCdAKcAsQAoAAZBWkUgAFRDUlQgAH5NT0wgAKhOQVYgANRST00gAQBUVVIgASwAAP//ABMAAwANABcAIQArADIANwBEAE4AWABiAGwAdgCAAIoAlACeAKgAsgAA//8AEgAEAA4AGAAiACwAOABFAE8AWQBjAG0AdwCBAIsAlQCfAKkAswAA//8AEgAFAA8AGQAjAC0AOQBGAFAAWgBkAG4AeACCAIwAlgCgAKoAtAAA//8AEwAGABAAGgAkAC4AOgA+AEcAUQBbAGUAbwB5AIMAjQCXAKEAqwC1AAD//wATAAcAEQAbACUALwA7AD8ASABSAFwAZgBwAHoAhACOAJgAogCsALYAAP//ABMACAASABwAJgAwADwAQABJAFMAXQBnAHEAewCFAI8AmQCjAK0AtwAA//8AEwAJABMAHQAnADEAMwA9AEoAVABeAGgAcgB8AIYAkACaAKQArgC4ALljMnNjBFhjMnNjBF5jMnNjBGRjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjMnNjBGpjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBjY21wBHBkbGlnBHhkbGlnBH5kbGlnBIRkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbGlnBIpkbm9tBJBkbm9tBJZkbm9tBJxkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJkbm9tBKJmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhmcmFjBKhsaWdhBLJsaWdhBLpsbnVtBMBsbnVtBMZsbnVtBMxsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsbnVtBNJsb2NsBNhsb2NsBN5sb2NsBORudW1yBOpudW1yBPBudW1yBPZudW1yBPxudW1yBPxudW1yBPxudW1yBPxudW1yBPxudW1yBPxudW1yBPxvbnVtBQJvbnVtBQhvbnVtBQ5vbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRvbnVtBRRwbnVtBRpwbnVtBSBwbnVtBSZwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxwbnVtBSxzbWNwBTJzbWNwBThzbWNwBT5zbWNwBURzbWNwBURzbWNwBURzbWNwBURzbWNwBURzbWNwBURzbWNwBURzczAxBUpzczAxBVBzczAxBVZzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAxBVxzczAyBWJzczAyBWhzczAyBW5zczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAyBXRzczAzBXpzczAzBYBzczAzBYZzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczAzBYxzczA0BZJzczA0BZhzczA0BZ5zczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA0BaRzczA1BapzczA1BbBzczA1BbZzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA1BbxzczA2BcJzczA2BchzczA2Bc5zczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA2BdRzczA3BdpzczA3BeBzczA3BeZzczA3BexzczA3BexzczA3BexzczA3BexzczA3BexzczA3BexzczA3Bex0bnVtBfJ0bnVtBfh0bnVtBf50bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgR0bnVtBgQAAAABAAEAAAABAAMAAAABAAIAAAABAAAAAAACAAgACQAAAAEADgAAAAEAEAAAAAEADwAAAAEADQAAAAEAQwAAAAEARQAAAAEARAAAAAEAQgAAAAMAPwBAAEEAAAACABEAEgAAAAEAEgAAAAEAPAAAAAEAPgAAAAEAPQAAAAEAOwAAAAEACgAAAAEADAAAAAEACwAAAAEARwAAAAEASQAAAAEASAAAAAEARgAAAAEAMAAAAAEAMgAAAAEAMQAAAAEALwAAAAEAOAAAAAEAOgAAAAEAOQAAAAEANwAAAAEABQAAAAEABwAAAAEABgAAAAEABAAAAAEAFAAAAAEAFgAAAAEAFQAAAAEAEwAAAAEAGAAAAAEAGgAAAAEAGQAAAAEAFwAAAAEAHAAAAAEAHgAAAAEAHQAAAAEAGwAAAAEAIAAAAAEAIgAAAAEAIQAAAAEAHwAAAAEAJAAAAAEAJgAAAAEAJQAAAAEAIwAAAAEAKAAAAAEAKgAAAAEAKQAAAAEAJwAAAAEALAAAAAEALgAAAAEALQAAAAEAKwAAAAEANAAAAAEANgAAAAEANQAAAAEAMwBLAJgAmACYAJgEJgQmBCYEJgcUB8AOUA5QDmYOiA6IDogOiA6+DuQPEg8SDxIPEg8mDyYPJg8mDzoPOg86DzoPTg9OD04PTg9gD2APYA9gD3oPeg96D3oPvA+8D7wPvA/aD9oP2g/aD/gP+A/4D/gQKhAqECoQKhBcEFwQXBBcEI4QohDuEMwQzBDMEMwQ7hDuEO4Q7hEaAAEAAAABAAgAAgHEAN8DvQPsA+sD6gPpA+gD5wPmA+UD5APjA+ID4QPgA98D3gPdA9wD2wPaA9kD2APXA9YD9gP3BKkDvAO7BFAEUQRSBFMEVARVBFcEWARZBFoEWwRcBF0EXgRfBE4EYARhBGIEYwRkBGUEZgRtBG4EbwRwBEwEcQRyBHMEdAR1BHYEdwR4BE0EeQR6BHsEfAR9BH4EfwSABIEEggSDBIQEhQSGBIcEiASJBIoEiwSMBI0EjgSPBJAEkQSSBJMERASUBJUElgSXBJgEmQSaBJ0EnARPBJ4EnwSgBKEEogSjBKQEpQSmBKcEqAP+BFYEmwSqBKsErAStBK4ErwSwBLEEsgO6A7kEswS0BLUDuAS2BLcDtwS4A7YEuQPGBLoD0QS7BLwD0gS9A9MD1AS+BL8EwAP5BMED+ATCBMMExATFA/8EAAQBBMYExwQCBMgEAwTJBMoEBATLBAUEBgQHBMwECAQJBM0EzgTPBNAE0QTSBNMECgTcBNQECwQMBA0EDgQPBBAEEQQSBBMEFAQ4BBUEFgTVBBcEGAQZBNYEGgTXBNgEGwQcBB0EHgQfBCAE2QQhBCIE2gQjBNsEJAQlBCcEJgABAN8ACAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4AZgBoAIMAhACFAIYAhwCIAIoAiwCMAI0AjgCPAJAAkQCSAJMAlACVAJYAlwCYAJkAnACdAJ4AnwCgAKIAwwDFAMcAyQDLAM0AzwDRANMA1QDXANkA2wDdAN8A4QDjAOUA5wDrAO0A7wDxAPMA9wD5APwA/gEAAQIBBgEIAQoBDwERARMBFQEXARkBGwEdAR8BIQEjASUBJwEpASsBLQEvATEBMwE1ATcBOQE7ATwBPgFAAU4BYgF5AXsBfAF9AX4BfwGAAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY8BkAGRAZIBkwGUAZUBlgGXAZgBmQGaAZsBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0QHSAdMB1AHVAdYB1wHYAdkB2gHbAdwB3QHeAd8B4AHhAeIB4wHkAeUB5gHnAegB6QHqAesB7AHtAe4B7wHwAfEB8gJSAlQCWAJaAlwCXgJiAmQCagJsAnACcgJ0AnYCegJ8An4CgAKaAqICpAKqArADhwOOA5MDlgABAAAAAQAIAAIBdAC3A+wD6wPqA+kD6APnA+YD5QPkA+MD4gPhA+AD3wPeA90D3APbA9oD2QPYA9cD1gP2A/cEqQRQBFEEUgRTBFQEVQRXBFgEWQRaBFsEXARdBF4EXwROBGAEYQRiBGMEZARlBGYEbQRuBG8EcASmBHEEcgRzBHQEdQR2BHcEeARNBHkEegR7BHwEfQR+BH8EgASBBIIEgwSEBIUEhgSHBIgEiQSKBIsEjASNBI4EjwSQBJEEkgSTBEQElASVBJYElwSYBJkEmgSdBJwETwSeBJ8EoAShBKIEowSkBKUEpwSoA/4EVgSbBMgEAwTJBMoEBATLBAUEBgQHBMwECAQJBM0EzgTPBNAE0QTSBNMECgTcBNQECwQMBA0EDgQPBBAEEQQSBBMEFATAA/kEwQP4BMIEwwTEBMUD/wQABAEExgTHBAIEOAQVBBYE1QQXBBgEGQTWBBoE1wTYBBsEHAQdBB4EHwQgBNkEIQQiBNoEIwTbAAEAtwBFAEYARwBIAEkASgBLAEwATQBOAE8AUABRAFIAUwBUAFUAVgBXAFgAWQBaAFsAXABdAF4AowCkAKUApgCnAKgAqgCrAKwArQCuAK8AsACxALIAswC0ALUAtgC3ALgAuQC8AL0AvgC/AMAAwgDEAMYAyADKAMwAzgDQANIA1ADWANgA2gDcAN4A4ADiAOQA5gDoAOwA7gDwAPIA9AD4APoA/QD/AQEBAwEHAQkBCwEQARIBFAEWARgBGgEcAR4BIAEiASQBJgEoASoBLAEuATABMgE0ATYBOAE6AT0BPwFBAU8BYwHzAfQB9QH2AfcB+AH5AfoB+wH8Af0B/gH/AgACAQICAgMCBAIFAgYCBwIIAgkCCgILAgwCDQIOAg8CEAIRAhICFAIVAhYCFwIYAhkCGgIbAhwCHQIeAh8CIQIiAlMCVQJZAlsCXQJfAmMCZQJrAm0CcQJzAnUCdwJ7An0CfwKBApsCowKlAqsCsQAGAAAABgASACoAQgBaAHIAigADAAAAAQASAAEAkAABAAAASgABAAEATQADAAAAAQASAAEAeAABAAAASgABAAEATgADAAAAAQASAAEAYAABAAAASgABAAEA8gADAAAAAQASAAEASAABAAAASgABAAECGQADAAAAAQASAAEAMAABAAAASgABAAECGwADAAAAAQASAAEAGAABAAAASgABAAEDLQACAAEBcQF1AAAABAAAAAEACAABBh4ANgByAKQArgC4AMoA/AEOARgBSgFkAX4BkAG6AewB9gIYAjICRAJ2AogCogLMAt4DEAMaAyQDNgNoA3IDfAOGA6ADugPMA/YEKAQyBFQEbgSABLIExATeBQgFGgUkBS4FOAVCBWwFlgXABeoGFAAGAA4AFAAaACAAJgAsAIMAAgFxAIQAAgFyAIYAAgFzAwQAAgF0AVQAAgF1AwIAAgF2AAEABALYAAIBdgABAAQAyQACAXIAAgAGAAwC2gACAXYC3AACA6sABgAOABQAGgAgACYALACLAAIBcQCMAAIBcgMeAAIBcwMcAAIBdAFWAAIBdQMaAAIBdgACAAYADAFKAAIBcgDlAAIDqwABAAQC3gACAXYABgAOABQAGgAgACYALACPAAIBcQCQAAIBcgDrAAIBcwMqAAIBdAFYAAIBdQMsAAIBdgADAAgADgAUAuAAAgFyAuIAAgF2APkAAgOrAAMACAAOABQA/AACAXIC5AACAXYA/gACA6sAAgAGAAwC5gACAXIC6AACAXYABQAMABIAGAAeACQBTAACAXEBBgACAXIAlAACAXMC6gACAXYBCAACA6sABgAOABQAGgAgACYALACVAAIBcQCWAAIBcgCYAAIBcwMwAAIBdAFaAAIBdQMuAAIBdgABAAQC7AACAXIABAAKABAAFgAcARcAAgFyAVwAAgF1Au4AAgF2ARkAAgOrAAMACAAOABQBHQACAXIC8AACAXYBYAACA6sAAgAGAAwC8gACAXYBYgACA6sABgAOABQAGgAgACYALACcAAIBcQCdAAIBcgErAAIBcwNIAAIBdAFeAAIBdQNGAAIBdgACAAYADAL0AAIBcwL2AAIBdgADAAgADgAUAvgAAgFxAvoAAgFyAv4AAgF2AAUADAASABgAHgAkA1QAAgFxAKAAAgFyA1oAAgFzA1gAAgF0A1YAAgF2AAIABgAMATwAAgFyAwAAAgF2AAYADgAUABoAIAAmACwAowACAXEApAACAXIApgACAXMDBQACAXQBVQACAXUDAwACAXYAAQAEAtkAAgF2AAEABADKAAIBcgACAAYADALbAAIBdgLdAAIDqwAGAA4AFAAaACAAJgAsAKsAAgFxAKwAAgFyAx8AAgFzAx0AAgF0AVcAAgF1AxsAAgF2AAEABAFLAAIBcgABAAQC3wACAXYAAQAEAy0AAgF2AAMACAAOABQC4QACAXIC4wACAXYA+gACA6sAAwAIAA4AFAD9AAIBcgLlAAIBdgD/AAIDqwACAAYADALnAAIBcgLpAAIBdgAFAAwAEgAYAB4AJAFNAAIBcQEHAAIBcgC0AAIBcwLrAAIBdgEJAAIDqwAGAA4AFAAaACAAJgAsALUAAgFxALYAAgFyALgAAgFzAzEAAgF0AVsAAgF1Ay8AAgF2AAEABALtAAIBcgAEAAoAEAAWABwBGAACAXIBXQACAXUC7wACAXYBGgACA6sAAwAIAA4AFAEeAAIBcgLxAAIBdgFhAAIDqwACAAYADALzAAIBdgFjAAIDqwAGAA4AFAAaACAAJgAsALwAAgFxAL0AAgFyASwAAgFzA0kAAgF0AV8AAgF1A0cAAgF2AAIABgAMAvUAAgFzAvcAAgF2AAMACAAOABQC+QACAXEC+wACAXIC/wACAXYABQAMABIAGAAeACQDVQACAXEAwAACAXIDWwACAXMDWQACAXQDVwACAXYAAgAGAAwBPQACAXIDAQACAXYAAQAEAVAAAgFyAAEABAFSAAIBcgABAAQBUQACAXIAAQAEAVMAAgFyAAUADAASABgAHgAkAK8AAgFxALAAAgFyAOwAAgFzAysAAgF0AVkAAgF1AAUADAASABgAHgAkAz4AAgFxAzwAAgFyA0IAAgFzA0AAAgF0A0QAAgF2AAUADAASABgAHgAkAz8AAgFxAz0AAgFyA0MAAgFzA0EAAgF0A0UAAgF2AAUADAASABgAHgAkA0wAAgFxA0oAAgFyA1AAAgFzA04AAgF0A1IAAgF2AAUADAASABgAHgAkA00AAgFxA0sAAgFyA1EAAgFzA08AAgF0A1MAAgF2AAEABAHBAAIBcgACABEAJQApAAAAKwAtAAUALwA0AAgANgA7AA4APQA+ABQARQBJABYASwBNABsATwBUAB4AVgBbACQAXQBeACoAiQCJACwAmwCbAC0AqQCpAC4AuwC7AC8A9AD0ADABRQFIADEBwAHAADUAAQAAAAEACAABAAYAPwABAAIBIQEiAAEAAAABAAgAAgAOAAQE3QTeBN8E4AABAAQAxwDIANsA3AAEAAAAAQAIAAEAJgACAAoAHAACAAYADAOsAAIASgOxAAIAWAABAAQDsgACAFgAAQACAEoAVwAEAAAAAQAIAAEARAACAAoAFAABAAQDrQACAE0AAQAEA68AAgBNAAQAAAABAAgAAQAeAAIACgAUAAEABAOuAAIAUAABAAQDsAACAFAAAQACAEoDrAABAAAAAQAIAAEABgN5AAEAAQBLAAEAAAABAAgAAQAGAiIAAQABAaEAAQAAAAEACAABAAYDjAABAAEANgABAAAAAQAIAAIAHAACA8EDwAABAAAAAQAIAAIACgACA78DvgABAAIALwBPAAEAAAABAAgAAgAeAAwEMQQzBDIENAQ1BCgEKQQqA/sELAQtBC4AAQAMACcAKAArADMANQBGAEcASABLAFMAVABVAAEAAAABAAgAAgAMAAMELwQwBDAAAQADAEkASwP7AAEAAAABAAgAAgBmAAgERgQ2BDcEOQQ6BEIEQwRFAAEAAAABAAgAAgAWAAgAGwAVABQAHQAZABgAFwAWAAEACAP6BCsEZwRoBGkEagRrBGwAAQAAAAEACAACABYACARnBCsEbARrBGoEaQP6BGgAAQAIABQAFQAWABcAGAAZABsAHQABAAAAAQAIAAIAFgAIABUAFgAXABgAGQAbAB0AFAABAAgENgQ3BDkEOgRCBEMERQRGAAEAAAABAAgAAQAGA3AAAQABABMABgAAAAEACAADAAEAEgABAGYAAAABAAAASgACAAIDgwODAAADxwPQAAEAAQAAAAEACAACADwACgPQA88DzgPNA8wDywPKA8kDyAPHAAEAAAABAAgAAgAaAAoEOwB8AHUAdgQ8BD0EPgQ/BEAEQQACAAEAFAAdAAAAAQAAAAEACAACACYAEAPQA88DzgPNA8wDywPKA8kDyAPHBEkERwRKBEsESAThAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgDyAhkCGwMt\",\n\t\"Roboto-Regular.ttf\": \"AAEAAAASAQAABAAgR0RFRtRX1FkAAg/sAAACREdQT1NKcuCzAAISMAAAUiRHU1VCw4aZEQACZFQAABfoT1MvMqCnsaYAAAGoAAAAYGNtYXBAmkl2AAAafAAAEshjdnQgJEEG5QAAL9wAAABMZnBnbWf0XKsAAC1EAAABvGdhc3AACAATAAIP4AAAAAxnbHlmHN2bBQAAOfAAAdM2aGRteDc4ERcAABWQAAAE7GhlYWT4RqsOAAABLAAAADZoaGVhCroKggAAAWQAAAAkaG10eOiEiIgAAAIIAAATiGxvY2HgyGepAAAwKAAACcZtYXhwBxIC+QAAAYgAAAAgbmFtZTVTY1kAAg0oAAACmHBvc3T/bQBkAAIPwAAAACBwcmVwdKCP7AAALwAAAADbAAEAAAACAACEKlnoXw889QAbCAAAAAAAxPARLgAAAADQ206a+hv91QkwCHMAAAAJAAIAAAAAAAAAAQAAB2z+DAAACUn6G/5KCTAAAQAAAAAAAAAAAAAAAAAABOIAAQAABOIAjwAWAFQABQABAAAAAAAOAAACAAIUAAYAAQADBIUBkAAFAAAFmgUzAAABHwWaBTMAAAPRAGYCAAAAAgAAAAAAAAAAAOAACv9QACF/AAAAIQAAAABHT09HAEAAAP/9BgD+AABmB5oCACAAAZ8AAAAABDoFsAAgACAAAgOMAGQAAAAAAAAAAAH7AAAB+wAAAg8AoAKPAIgE7QB3BH4AbgXcAGkE+QBlAWUAZwK8AIUCyAAmA3IAHASJAE4BkgAdAjUAJQIbAJADTAASBH4AcwR+AKoEfgBdBH4AXgR+ADUEfgCaBH4AhAR+AE0EfgBwBH4AZAHwAIYBsQApBBEASARkAJgELgCGA8cASwcvAGoFOAAcBPsAqQU1AHcFPwCpBIwAqQRsAKkFcwB6BbQAqQItALcEagA1BQQAqQROAKkG/ACpBbQAqQWAAHYFDACpBYAAbQTtAKgEvwBQBMYAMQUwAIwFFwAcBxkAPQUEADkEzgAPBMoAVgIfAJIDSAAoAh8ACQNYAEADnAAEAnkAOQRaAG0EfQCMBDAAXASDAF8EPQBdAscAPAR9AGAEaACMAfEAjQHp/78EDgCNAfEAnAcDAIsEagCMBJAAWwR9AIwEjABfArUAjAQgAF8CnQAJBGkAiAPgACEGAwArA/cAKQPJABYD9wBYArUAQAHzAK8CtQATBXEAgwHzAIsEYABpBKYAWwW0AGkE2AAfAesAkwToAFoDWABmBkkAWwOTAJMDwQBmBG4AfwZKAFoDqgB4Av0AggRGAGEC7wBCAu8APgKCAHsEiACaA+kAQwIWAJMB+wB0Au8AegOjAHoDwABmBdwAVQY1AFAGOQBvA8kARAd6//IERABZBYAAdgS6AKYEwgCLBsEATgSwAH4EkQBHBIgAWwScAJUFmgAdAfoAmwRzAJoETwAiAikAIgWLAKIEiACRB6EAaAdEAGEB/ACgBYcAXQK5/+QFfgBlBJIAWwWQAIwE8wCIAgP/tAQ3AGIDxACpA40AjAOrAHgDagCBAfEAjQKtAHkCKgAyA8YAewL8AF4CWgB+AAD8pwAA/W8AAPyLAAD9XgAA/CcB7/04Ag0AtwQLAHECFwCTBHMAsQWkAB8FcQBnBT4AMgSRAHgFtQCyBJEARQW7AE0FiQBaBVIAcQSFAGQEvQCgBAIALgSIAGAEUABjBCUAbQSIAJEEjgB6ApcAwwRuACUD7ABlBMQAKQSIAJEETQBlBIgAYAQsAFEEXQCPBaMAVwWaAF8GlwB6BKEAeQRC/9oGSABKBf8AKgVkAHsIkQAxCKQAsQaCAD4FtACwBQsAogYEADIHQwAbBL8AUAW0ALEFqQAvBQcATQYsAFMF2QCvBXoAlgeHALAHwACwBhIAEAbrALIFBQCjBWQAkwcnALcFGABZBGwAYQSSAJ0DWwCaBNQALgYgABUEEABYBJ4AnARSAJwEoAAsBe8AnQSdAJwEngCcA9gAKAXNAGQEvQCcBFkAZwZ4AJwGngCRBPcAHgY2AJ0EWACdBE0AZAaHAJ0EZAAvBGj/6ARNAGcGyQAnBuQAnASJ//0EngCcBwgAnAYrAIEEVv/cBysAtwX4AJkE0gAoBEYADwcLAMkGCwC8BtEAkwXhAJYJBAC2B9EAmwQjAFAD2wBMBXEAZwSLAFsFCgAWBAMALgVxAGcEiABbBwEAnAYkAH4HCACcBisAgQUyAHUERwBkBP0AdAAA/GcAAPxxAAD9ZgAA/aQAAPobAAD6LARW/9wFGwCoBIkAjARjAKIDkACRBNsAsQQFAJEFCQCjBH4AmgaMAEQFgwA+B88AqAW0AJEIMQCwBvQAkQXuAHEE0wBtBywANAVcAB8FbwCWBGoAgwVwAIoGLwA/BL3/3gUJAKMEWgCaBbIAsQSIAJEFhwBdBKgAaASoAGkEtwA6A0kAOwT2AFcGlABZBuQAZAZWADYFKwAxBEkAUgQHAHkHwQBEBnUAPwf7AKkGoQCQBPYAdgQdAGUFrQAjBSAARgVkAJYDIABvBBQAAAgpAAAEFAAACCkAAAK5AAACCgAAAVwAAAR/AAACMAAAAaIAAADRAAAAAAAAAjQAJQI0ACUFQACiBj8AkAOmAA0BmQBgAZkAMAGXACQBmQBPAtQAaALbADwCwQAkBGkARgSPAFcCsgCKA8QAlAVaAJQA9gAmB6oARAJmAGwCZgBZA6MAOwLvADYDYAB6BKYAWwZVAB8GkACnCHYAqAdjADkGKwCMBH4AXwXaAB8EIgAqBHQAIAVIAF0FTwAfBecAegPOAGgIOgCiBQEAZwUXAJgGJgBUBtcAZAbPAGMGagBZBI8AagWOAKkErwBFBJIAqATFAD8IOgBiAgz/sASCAGUEZACYBBEAPgQvAIUECAArAkwAtQKPAG4CAwBcBPMAPARuAB8EiwA8BtQAPAbUADwE7gA8BpsAXwAAAAAIMwBbCDUAXAQgADsEngBaAfz/tgGRAGcDpACDA54AgQOfAIED9ABpBA4AaQPz/14D7wBuA6QAgQH9AJ8EhQATBFAAigR8AGAEgACKA+YAigPLAIoErABjBOMAigHoAJcDzwArBFQAigO0AIoGAgCKBOMAigS7AGAEXACKBLsAWQRKAIoEIABDBCYAKAR8AHQEZwAUBhUAMQRUACYEKwANBCMARwLvAFAC7wB6Au8AQgLvAD4C7wA2Au8AWwLvAFYC7wA6Au8ATwLvAEkDlgCPArUAngQ6AB4EwwBkBUwAsQUkALIEEwCSBT0AsgQPAJIEIABDBDMAMAQ8ABYDrwCKBGcAFAS7AGAEZwAUA4kAPgTOAIoD7wA/BWcAYAUXAGAE8gB1BXIAJgR8AGAHQQAnB08AigV0ACgEzQCKBFkAigUkAC4GCwAfBD8ARwTsAIoETgCLBMEAJwQfACIFKACKBGoAPQZRAIoGrACKBR0ACAXxAIoETgCKBHsASwZ2AIoEhwBQBBEACwZHAB8EeQCLBQkAiwU3ACMFwgBgBF8ADQSoACYGYQAmBGoAPQRqAIoFwwACBMoAXgQ/AEcEuwBgBDMAMAPjAEIIIgCKBKsAKAR9AIwEMgBcBJMAWwSMAFsDeQBXBI0AjAScAFsEPQBdBH0AYAWBAH4FrgB+BZMAsgXgAH4F4wB+A9UAoASCAIMDrwCKBFgADwTPAD4C7wBQAu8ANgLvAFsC7wBWAu8AOgLvAE8C7wBJBGsAZQQuAEoGpABgBLkAggUAAHgCBv+0AgT/tAH7AJsB+//6AfsAmwH7AIYEUACKAfsAAAI1ACUFXQAlBV0AJQSGAAAExgAxAp3/9AU4ABwFOAAcBTgAHAU4ABwFOAAcBTgAHAU4ABwFNQB3BIwAqQSMAKkEjACpBIwAqQIt/+ACLQCwAi3/6QIt/9YFtACpBYAAdgWAAHYFgAB2BYAAdgWAAHYFMACMBTAAjAUwAIwFMACMBM4ADwRaAG0EWgBtBFoAbQRaAG0EWgBtBFoAbQRaAG0EMABcBD0AXQQ9AF0EPQBdBD0AXQH6/8YB+gCWAfr/zwH6/7wEagCMBJAAWwSQAFsEkABbBJAAWwSQAFsEaQCIBGkAiARpAIgEaQCIA8kAFgPJABYFOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FNQB3BDAAXAU1AHcEMABcBTUAdwQwAFwFNQB3BDAAXAU/AKkFGQBfBIwAqQQ9AF0EjACpBD0AXQSMAKkEPQBdBIwAqQQ9AF0EjACpBD0AXQVzAHoEfQBgBXMAegR9AGAFcwB6BH0AYAVzAHoEfQBgBbQAqQRoAIwCLf+3Afr/nQIt/7YB+v+cAi3/7AH6/9ICLQAYAfH/+wItAKoGlwC3A9oAjQRqADUCA/+0BQQAqQQOAI0ETgChAfEAkwROAKkB8QBXBE4AqQKHAJwETgCpAs0AnAW0AKkEagCMBbQAqQRqAIwFtACpBGoAjARq/7wFgAB2BJAAWwWAAHYEkABbBYAAdgSQAFsE7QCoArUAjATtAKgCtQBTBO0AqAK1AGMEvwBQBCAAXwS/AFAEIABfBL8AUAQgAF8EvwBQBCAAXwS/AFAEIABfBMYAMQKdAAkExgAxAp0ACQTGADECxQAJBTAAjARpAIgFMACMBGkAiAUwAIwEaQCIBTAAjARpAIgFMACMBGkAiAUwAIwEaQCIBxkAPQYDACsEzgAPA8kAFgTOAA8EygBWA/cAWATKAFYD9wBYBMoAVgP3AFgHev/yBsEATgWAAHYEiABbBID/vgSA/74EJgAoBIUAEwSFABMEhQATBIUAEwSFABMEhQATBIUAEwR8AGAD5gCKA+YAigPmAIoD5gCKAej/vgHoAI4B6P/HAej/tATjAIoEuwBgBLsAYAS7AGAEuwBgBLsAYAR8AHQEfAB0BHwAdAR8AHQEKwANBIUAEwSFABMEhQATBHwAYAR8AGAEfABgBHwAYASAAIoD5gCKA+YAigPmAIoD5gCKA+YAigSsAGMErABjBKwAYwSsAGME4wCKAej/lQHo/5QB6P/KAegABgHoAIkDzwArBFQAigO0AIIDtACKA7QAigO0AIoE4wCKBOMAigTjAIoEuwBgBLsAYAS7AGAESgCKBEoAigRKAIoEIABDBCAAQwQgAEMEIABDBCYAKAQmACgEJgAoBHwAdAR8AHQEfAB0BHwAdAR8AHQEfAB0BhUAMQQrAA0EKwANBCMARwQjAEcEIwBHBTgAHATw//AGGP/+ApEABAWU//oFMv94BWb//QKX/5sFOAAcBPsAqQSMAKkEygBWBbQAqQItALcFBACpBvwAqQW0AKkFgAB2BQwAqQTGADEEzgAPBQQAOQIt/9YEzgAPBIUAZARQAGMEiACRApcAwwRdAI8EcwCaBJAAWwSIAJoD4AAhA/cAKQKX/+YEXQCPBJAAWwRdAI8GlwB6BIwAqQRzALEEvwBQAi0AtwIt/9YEagA1BSQAsgUEAKkFBwBNBTgAHAT7AKkEcwCxBIwAqQW0ALEG/ACpBbQAqQWAAHYFtQCyBQwAqQU1AHcExgAxBQQAOQRaAG0EPQBdBJ4AnASQAFsEfQCMBDAAXAPJABYD9wApBD0AXQNbAJoEIABfAfEAjQH6/7wB6f+/BFIAnAPJABYHGQA9BgMAKwcZAD0GAwArBxkAPQYDACsEzgAPA8kAFgFlAGcCjwCIBB4AoAID/7QBmQAwBvwAqQcDAIsFOAAcBFoAbQSMAKkFtACxBD0AXQSeAJwFiQBaBZoAXwUKABYEA//7CFkAWwlJAHYEvwBQBBAAWAU1AHcEMABcBM4ADwQCAC4CLQC3B0MAGwYgABUCLQC3BTgAHARaAG0FOAAcBFoAbQd6//IGwQBOBIwAqQQ9AF0FhwBdBDcAYgQ3AGIHQwAbBiAAFQS/AFAEEABYBbQAsQSeAJwFtACxBJ4AnAWAAHYEkABbBXEAZwSLAFsFcQBnBIsAWwVkAJMETQBkBQcATQPJABYFBwBNA8kAFgUHAE0DyQAWBXoAlgRZAGcG6wCyBjYAnQUEADkD9wApBIMAXwWpAC8EoAAsBTgAHARaAG0FOAAcBFoAbQU4ABwEWgBtBTgAHARa/8oFOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FOAAcBFoAbQU4ABwEWgBtBTgAHARaAG0FOAAcBFoAbQU4ABwEWgBtBIwAqQQ9AF0EjACpBD0AXQSMAKkEPQBdBIwAqQQ9AF0EjP/wBD3/ugSMAKkEPQBdBIwAqQQ9AF0EjACpBD0AXQItALcB+gCbAi0AowHxAIUFgAB2BJAAWwWAAHYEkABbBYAAdgSQAFsFgABHBJD/xAWAAHYEkABbBYAAdgSQAFsFgAB2BJAAWwV+AGUEkgBbBX4AZQSSAFsFfgBlBJIAWwV+AGUEkgBbBX4AZQSSAFsFMACMBGkAiAUwAIwEaQCIBZAAjATzAIgFkACMBPMAiAWQAIwE8wCIBZAAjATzAIgFkACMBPMAiATOAA8DyQAWBM4ADwPJABYEzgAPA8kAFgShAF8EoQBfBSQAsgRSAJwFtACpBJ0AnATGADED2AAoBQQAOQP3ACkFegCWBFkAZwV6AJYEWQBnBHMAsQNbAJoHQwAbBiAAFQYvAD8Evf/eBGgAjAUF/9QFBf/UBHMAAwNb//wFOAALBCf/0wW0ALEEngCcBbQAqQSdAJwG/ACpBe8AnQWpAC8EoAAsBM4ADwQCAC4FBAA5A/cAKQRQAGMEbAASBj8AkAR+AF0EfgBeBH4ANQR+AJoEkgBkBKYAhwVzAHoEfQBgBbQAqQRqAIwFOAAcBFoAOQSMAF8EPQApAi3/CgH6/vAFgAB2BJAAMwTtAFUCtf+LBTAAjARpACsEpv86BPsAqQR9AIwFPwCpBIMAXwU/AKkEgwBfBbQAqQRoAIwFBACpBA4AjQUEAKkEDgCNBE4AqQHxAIYG/ACpBwMAiwW0AKkEagCMBQwAqQR9AIwE7QCoArUAggS/AFAEIABfBMYAMQKdAAkFFwAcA+AAIQUXABwD4AAhBxkAPQYDACsEygBWA/cAWAXG/ngEhQATBCL/nwUf/7wCJP/ABMX/3wRn/1cE/P/4BIUAEwRQAIoD5gCKBCMARwTjAIoB6ACXBFQAigYCAIoEuwBgBFwAigQmACgEKwANBFQAJgHo/7QEKwANA+YAigOvAIoEIABDAegAlwHo/7QDzwArBFQAigQfACIEhQATBFAAigOvAIoD5gCKBOwAigYCAIoE4wCKBLsAYATOAIoEXACKBHwAYAQmACgEVAAmBD8ARwTjAIoEfABgBCsADQXDAAIE7ACKBB8AIgVnAGAFOAAcBFoAbQSMAKkEPQBdAAAAAQAABOQJCgQAAAICAgMGBQcGAgMDBAUCAgIEBQUFBQUFBQUFBQICBQUFBAgGBgYGBQUGBgIFBgUIBgYGBgYFBQYGCAYFBQIEAgQEAwUFBQUFAwUFAgIFAggFBQUFAwUDBQQHBAQEAwIDBgIFBQYFAgYEBwQEBQcEAwUDAwMFBAICAwQEBwcHBAgFBgUFCAUFBQUGAgUFAgYFCQgCBgMGBQYGAgUEBAQEAgMCBAMDAAAAAAACAgUCBQYGBgUGBQYGBgUFBQUFBQUFAwUEBQUFBQUFBgYHBQUHBwYKCgcGBgcIBQYGBgcHBggJBwgGBggGBQUEBQcFBQUFBwUFBAcFBQcHBgcFBQcFBQUICAUFCAcFCAcFBQgHCAcKCQUEBgUGBQYFCAcIBwYFBgAAAAAAAAUGBQUEBQUGBQcGCQYJCAcFCAYGBQYHBQYFBgUGBQUFBAYHCAcGBQUJBwkHBgUGBgYEBQkFCQMCAgUCAgEAAgIGBwQCAgICAwMDBQUDBAYBCQMDBAMEBQcHCggHBQcFBQYGBwQJBgYHCAgHBQYFBQUJAgUFBQUFAwMCBgUFCAgGBwAJCQUFAgIEBAQEBQQEBAIFBQUFBAQFBgIEBQQHBgUFBQUFBQUFBwUFBQMDAwMDAwMDAwMEAwUFBgYFBgUFBQUEBQUFBAUEBgYGBgUICAYFBQYHBQYFBQUGBQcIBgcFBQcFBQcFBgYGBQUHBQUGBQUFBQQJBQUFBQUEBQUFBQYGBgcHBAUEBQUDAwMDAwMDBQUHBQYCAgICAgIFAgIGBgUFAwYGBgYGBgYGBQUFBQICAgIGBgYGBgYGBgYGBQUFBQUFBQUFBQUFBQICAgIFBQUFBQUFBQUFBAQGBQYFBgUGBQYFBgUGBQYGBQUFBQUFBQUFBQYFBgUGBQYFBgUCAgICAgICAgIHBAUCBgUFAgUCBQMFAwYFBgUGBQUGBQYFBgUGAwYDBgMFBQUFBQUFBQUFBQMFAwUDBgUGBQYFBgUGBQYFCAcFBAUFBAUEBQQICAYFBQUFBQUF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sRCxUrG2sc2x5LH7shKyK7JEslCyXLJzsoqyobK6stGy6LL/sxizL7NGs12zdLOLs6Szu7PSs+m0ArQZtDC0R7RdtHO0jLSltLG0vbTUtOu1AbUatTC1RrVdtXa1jLWjtbq10LXmtf+2FrYttkO2XLZztou2ora4ts+25rdJt9+39rgNuCS4OrhRuGi4f7iVuKy43bj0uQq5Ibk4uU+5ZrnOulK6abp/upa6rLrDutq68bsIuxS7K7tCu1S7a7uCu5m7sLvHu9676bv0vAu8F7wjvDq8UbxdvGm8gLyXvKO8r7zEvPm9Bb0RvSi9P71LvVe9br2EvZS9q73Bvdi9774IviG+OL5Pvlu+Z75+vpS+q77Cvtm+7777vwe/E78fvza/TL9Yv2S/cL98v5O/n7+2v8y/47/5wBDAJ8BAwFnAcsCLwOjBTsFlwXzBk8GpwcLB2cHwwgfCHsI1wkvCYsJ5wpDCp8LKwvLDBcMcwzPDScNfw3jDkcOdw6nDwMPXw+3EBcQbxDHESMRhxHjEj8SmxL3E1MTtxQTFG8UxxUrFYcV3xY7F8cYIxh7GNcZMxmLGeMaOxqXHDsckxzrHUcdox3THi8eix7nH0Mfbx/HICMgUyCrINshLyFfIbsh6yJHIqMi/yNjI78j7yRHJKMk+yUrJYMlsyYLJjsmkybrJ0cnqygPKX8p2yozKpMq7ytLK6Mrzyv/LC8sXyyPLL8s7y1fLX8tny2/Ld8t/y4fLj8uXy5/Lp8uvy7fLv8vHy+DL+cwQzCfMPsxUzG/Md8x/zIfMj8yXzK/Mx8zezPXNDM0lzTzNp82vzcjN0M3Yze/OBs4OzhbOHs4mzj3ORc5NzlXOXc5lzm3Odc59zoXOjc6kzqzOtM8Hzw/PF88wz0fPT89Xz3DPeM+Pz6XPvM/Tz+rQAdAa0DPQStBh0GnQcdB90JTQnNCz0MrQ1tDi0PnRENEn0T7RRtFO0WfRgNGM0ZjRpNGw0bzRyNHQ0djR4NH30g7SFtIt0kTSW9J00nzShNKb0rLSy9LT0uzTBdMe0zfTT9Nm03zTldOu08fT4NPo0/DUCdQi1DvUU9Rq1IDUmdSx1MrU49T81RTVMdVO1VrVZtVu1XrVhtWS1Z7VtdXM1eXV/dYW1i7WR9Zf1njWkNar1sXW3tb31xDXKddC11vXdNeN16jXw9fP19vX8tgJ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AAUAJABIAAEA3gAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAkgCwALEAsgCzALQAtQC2ALcAuAC5ANEA0gDTANQA1QDWANcA2ADZANoA2wDcAN0A3gDfAOAA4QDiAOMA5ADlAOYA5wDoASwBMAEyATgBOgE8AT4BPwFFAUYBfwGFAYoBjQJHAkgCSgJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJeAl8CYAJhAmICYwJkAmUCZgKDAoUChwKJAosCjQKPApECkwKVApcCmQKbAp0CnwKhAqMCpQKnAqkCqwKtAq8CsgK0ArYCuAK6ArwCvgLAAsICxQLHAskCywLNAs8C0QLTAtUC2QLbAt0C3wLhAuMC5QLnAukC6wLtAu8C8QLyAvQC9gNTA1QDVQNWA1cDWANZA1sDXANdA14DXwNgA2EDYgNkA2UDZgNnA2gDaQNqA3oDewN8A30DfgN/A4ADgQOCA4MDhAOFA4YDhwOIA4kDigOLA4wDjQOOA48DuwO9A78D1APaA+AESQRLBE8EVwRZBF4EagACAAAABAAOD84V8jViAAEDVAAEAAABpQrSCtIGggtwCoAK/g+aDAAGiA7uDu4MRg6gCiIO7g7uD5oKigaSDGYMRgrYCqwNUg8QCl4L4gsQDBYGmA22DbYNtgwgCxAKUAxMDbAMTAsQBqYN5gtwD5oLcAasBrIGvAbCBsgMTAbOBtgNtgb+BxQHKgcwB0YHTAdSB4QHigeQDcANwAe+Du4H4AgCDVIIMA7uDu4LJg7uDu4IRg3ADcAIeAiCCIwIpg1ICLgNsAjSCOgLEAkyCUwJaAloCxAJYgloCWgJaAtwDCAK2AxMCxAN5g1IDqAOoA1ICtIK0grSCtIK0gmKCbAJugnECeIJ9AoGChgK/g+aD5oPmg+aDGYLcAtwC3ALcAtwC3ALcAr+DAAMAAwADAAO7g7uDu4O7g7uD5oPmg+aD5oPmgxGDEYMRgxGDxAL4gviC+IL4gviC+IL4gwWDBYMFgwWDbYMIAwgDCAMIAwgDEwMTAtwC+ILcAviC3AL4gr+Cv4K/gr+D5oMAAwWDAAMFgwADBYMAAwWDAAMFg7uDbYO7g7uDu4O7g7uDEYOoAoiCiIKIgoiDu4Ntg7uDbYO7g22DbYPmgwgD5oMIA+aDCAKUApQClAMZgxmDGYMRgxGDEYMRgxGDEYKrA8QDEwPEApeCl4KXgtwDAAO7g7uD5oPEAtwCoAMAApeDu4O7g6gDu4O7g+aCooMZg8QDVIO7g8QDbYMIAxMDCAMAA3mDu4O7gxGDqAOoAsmC3AKgA3mDAAO7g7uD5oKigr+DGYNUgviDBYMIAsQDEwNsAwWDUgMTAqsCqwKrA8QDEwK0grSCtIO7g22C3AL4gwADBYK2AxMCv4PEAxMDu4NUg2wDu4LcAviC3AL4gwADBYMFgwWDVINsA+aDCAMIAsQCyYMTAsmDEwLJgxMDVINsAtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gtwC+ILcAviC3AL4gwADBYMAAwWDAAMFgwADBYMAAwWDAAMFgwADBYMAAwWDu4O7g+aDCAPmgwgD5oMIA+aDCAPmgwgD5oMIA+aDCAMIAxGDEYPEAxMDxAMTA8QDEwOoA7uDGYNUg2wDeYNSA1SDbANtg3ADeYOoA7uDu4PEA+aAAIAhwAGAAYAAAALAAsAAQATABMAAgAlACoAAwAsADUACQA4AD4AEwBFAEYAGgBJAEoAHABMAEwAHgBRAFQAHwBWAFYAIwBaAFoAJABcAF0AJQCKAIoAJwCcAJwAKACwALQAKQC2ALgALgC6ALoAMQC8AL0AMgC/AMAANADCAMQANgDGAMsAOQDRANEAPwDTAN0AQADfAN8ASwDhAOMATADlAOcATwDpAO0AUgDwAPAAVwD1APcAWAD6APsAWwD9AP8AXQEDAQQAYAEJAQkAYgEMAQwAYwEXARkAZAErAS0AZwEwATAAagEyATIAawFJAUkAbAFsAW0AbQFvAXEAbwG6AboAcgG9Ab0AcwHEAcUAdAHIAcgAdgHKAcsAdwHNAc0AeQIoAigAegIqAisAewJHAkgAfQJKAkoAfwJMAm0AgAJvAnIAogJ3AnwApgKBAokArAKLAosAtQKNAo0AtgKPAo8AtwKRApEAuAKTApwAuQKlAqcAwwKpAqkAxgKrAqsAxwKtAq0AyAKvAq8AyQKyArIAygK0ArQAywK2ArYAzAK4ArgAzQK6AroAzgK8ArwAzwK+AsoA0ALMAswA3QLOAs4A3gLQAtAA3wLbAtsA4ALdAt0A4QLfAt8A4gLh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BB7/6wQg/+sEIv/rBCT/6wQm/+sEKP/rBCr/6wQs/+sELv/rBDD/6wQy/+sENP/qBDb/6gQ4/+oEOv/qBDz/6gQ+/+oEQP/qBEL/6ARE/+gERv/oBE0AFAAfADj/1QA6/+QAO//sAD3/3QDR/9UA1f/VARj/5AEy/9UBOv/VAmb/3QLb/9UC3f/VAt//1QLt/+wC7//dAvH/3QNY/90DZ//dA2r/3QOO/9UDoP/sA6L/7AOk/+wDpv/dA7f/5AO//90EQf/dBEP/3QRF/90ETf/VBGr/3QAaADj/sAA6/+0APf/QANH/sADV/7ABGP/tATL/sAE6/7ACZv/QAtv/sALd/7AC3/+wAu//0ALx/9ADWP/QA2f/0ANq/9ADjv+wA6b/0AO3/+0Dv//QBEH/0ARD/9AERf/QBE3/sARq/9AAEAAu/+4AOf/uAmL/7gJj/+4CZP/uAmX/7gKy/+4C4f/uAuP/7gLl/+4C5//uAun/7gLr/+4Df//uBDP/7gQ1/+4ARwAGABAACwAQAEf/6ABI/+gASf/oAEv/6ABV/+gAk//oAJj/6AC6/+gAx//oAMj/6AD2/+gBAv/oAR3/6AEh/+gBOf/oAUv/6AFM/+gBVv/oAWwAEAFtABABbwAQAXAAEAFxABACbv/oAm//6AJw/+gCcf/oAnL/6AKK/+gCjP/oAo7/6AKQ/+gCkv/oApT/6AKW/+gCmP/oApr/6AKc/+gCnv/oAqD/6AKi/+gCpP/oA2v/6AOR/+gDlf/oA5j/6AOoABADqQAQA6wAEAOz/+gDuf/oA77/6APM/+gDzv/oA8//6APb/+gD7P/oBAj/6AQK/+gEDP/oBA7/6AQQ/+gEEv/oBBT/6AQW/+gEKv/oBCz/6AQu/+gEMv/oAAEAVgAEAAAAJgCmAZwB+gIUAlYCzAPCBLgFkgYsCMYKjAteDFQOGg5MDn4O/BDiEVgSKhRMFQIWaBciF6gYBhjIGT4ewBlQGqIc4B0CHhgelh7AHuoAAQAmAE8AWABbAF8AnAC0ALYAtwC4AL8AwgDDAMQAyQDLAMwAzQDRANUA1wDYANoA4gDmAOcA6ADpAOoA7ADuAPAA9QD3APoA/wECASEBbQA9AEf/7ABI/+wASf/sAEv/7ABV/+wAk//sAJj/7AC6/+wAx//sAMj/7AD2/+wBAv/sAR3/7AEh/+wBOf/sAUv/7AFM/+wBVv/sAm7/7AJv/+wCcP/sAnH/7AJy/+wCiv/sAoz/7AKO/+wCkP/sApL/7AKU/+wClv/sApj/7AKa/+wCnP/sAp7/7AKg/+wCov/sAqT/7ANr/+wDkf/sA5X/7AOY/+wDs//sA7n/7AO+/+wDzP/sA87/7APP/+wD2//sA+z/7AQI/+wECv/sBAz/7AQO/+wEEP/sBBL/7AQU/+wEFv/sBCr/7AQs/+wELv/sBDL/7AAXAFP/7AEX/+wCeP/sAnn/7AJ6/+wCe//sAnz/7ALG/+wCyP/sAsr/7ANx/+wDd//sA5P/7APZ/+wD3f/sBBz/7AQe/+wEIP/sBCL/7AQk/+wEJv/sBCj/7AQw/+wABgAQ/4QAEv+EAW7/hAFy/4QBdv+EAXf/hAAQAC7/7AA5/+wCYv/sAmP/7AJk/+wCZf/sArL/7ALh/+wC4//sAuX/7ALn/+wC6f/sAuv/7AN//+wEM//sBDX/7AAdAAb/8gAL//IAWv/zAF3/8wC8//MBGf/zAWz/8gFt//IBb//yAXD/8gFx//ICgf/zAoL/8wLw//MDc//zA5b/8wOf//MDp//zA6j/8gOp//IDrP/yA7j/8wPA//MD4f/zA+P/8wPl//MEQv/zBET/8wRG//MAPQAn//MAK//zADP/8wA1//MAg//zAJL/8wCX//MAsv/zANL/8wEH//MBFv/zARr/8wEc//MBHv/zASD/8wE4//MBVf/zAij/8wIp//MCK//zAiz/8wJT//MCXf/zAl7/8wJf//MCYP/zAmH/8wKJ//MCi//zAo3/8wKP//MCnf/zAp//8wKh//MCo//zAsX/8wLH//MCyf/zAvr/8wNX//MDZP/zA4r/8wON//MDuv/zA73/8wPY//MD2v/zA9z/8wQb//MEHf/zBB//8wQh//MEI//zBCX/8wQn//MEKf/zBCv/8wQt//MEL//zBDH/8wSq//MAPQAn/+YAK//mADP/5gA1/+YAg//mAJL/5gCX/+YAsv/mANL/5gEH/+YBFv/mARr/5gEc/+YBHv/mASD/5gE4/+YBVf/mAij/5gIp/+YCK//mAiz/5gJT/+YCXf/mAl7/5gJf/+YCYP/mAmH/5gKJ/+YCi//mAo3/5gKP/+YCnf/mAp//5gKh/+YCo//mAsX/5gLH/+YCyf/mAvr/5gNX/+YDZP/mA4r/5gON/+YDuv/mA73/5gPY/+YD2v/mA9z/5gQb/+YEHf/mBB//5gQh/+YEI//mBCX/5gQn/+YEKf/mBCv/5gQt/+YEL//mBDH/5gSq/+YANgAl/+QAPP/SAD3/0wCx/+QAs//kANn/0gEM/+QCTP/kAk3/5AJO/+QCT//kAlD/5AJR/+QCUv/kAmb/0wKD/+QChf/kAof/5ALv/9MC8f/TA1P/5ANY/9MDW//kA2f/0wNo/9IDav/TA4P/5AOP/9IDpv/TA6//5AO//9MDwv/SA8X/5APH/+QD0P/SA+r/0gPv/+QD8f/kA/P/5AP1/+QD9//kA/n/5AP7/+QD/f/kA///5AQB/+QEA//kBAX/5ARB/9MEQ//TBEX/0wRP/9IEV//SBGr/0wAmABD/HgAS/x4AJf/NALH/zQCz/80BDP/NAW7/HgFy/x4Bdv8eAXf/HgJM/80CTf/NAk7/zQJP/80CUP/NAlH/zQJS/80Cg//NAoX/zQKH/80DU//NA1v/zQOD/80Dr//NA8X/zQPH/80D7//NA/H/zQPz/80D9f/NA/f/zQP5/80D+//NA/3/zQP//80EAf/NBAP/zQQF/80ApgBH/9wASP/cAEn/3ABL/9wAUf/zAFL/8wBT/9YAVP/zAFX/3ABZ/90AWv/hAF3/4QCT/9wAmP/cAJr/3QC6/9wAvP/hAMD/8wDH/9wAyP/cAMr/3QDr//MA7//zAPD/8wDy//MA8//zAPT/8wD2/9wA9//zAPn/8wD6//MA/f/zAP//8wEC/9wBBP/zARf/1gEZ/+EBHf/cASH/3AE1//MBOf/cAUT/8wFJ//MBS//cAUz/3AFW/9wCbv/cAm//3AJw/9wCcf/cAnL/3AJ3//MCeP/WAnn/1gJ6/9YCe//WAnz/1gJ9/90Cfv/dAn//3QKA/90Cgf/hAoL/4QKK/9wCjP/cAo7/3AKQ/9wCkv/cApT/3AKW/9wCmP/cApr/3AKc/9wCnv/cAqD/3AKi/9wCpP/cAr//8wLB//MCw//zAsT/8wLG/9YCyP/WAsr/1gLi/90C5P/dAub/3QLo/90C6v/dAuz/3QLw/+EDa//cA23/8wNv/90Dcf/WA3P/4QN2/90Dd//WA3j/3QOR/9wDkv/zA5P/1gOU//MDlf/cA5b/4QOY/9wDmf/zA57/8wOf/+EDp//hA67/8wOz/9wDtP/zA7j/4QO5/9wDvv/cA8D/4QPM/9wDzv/cA8//3APV//MD1//zA9n/1gPb/9wD3f/WA+H/4QPj/+ED5f/hA+n/8wPs/9wECP/cBAr/3AQM/9wEDv/cBBD/3AQS/9wEFP/cBBb/3AQc/9YEHv/WBCD/1gQi/9YEJP/WBCb/1gQo/9YEKv/cBCz/3AQu/9wEMP/WBDL/3AQ0/90ENv/dBDj/3QQ6/90EPP/dBD7/3QRA/90EQv/hBET/4QRG/+EESv/zBEz/8wRW//MEY//zBGX/8wRn//MAcQAG/9oAC//aAEf/8ABI//AASf/wAEv/8ABV//AAWf/vAFr/3ABd/9wAk//wAJj/8ACa/+8Auv/wALz/3ADH//AAyP/wAMr/7wD2//ABAv/wARn/3AEd//ABIf/wATn/8AFL//ABTP/wAVb/8AFs/9oBbf/aAW//2gFw/9oBcf/aAm7/8AJv//ACcP/wAnH/8AJy//ACff/vAn7/7wJ//+8CgP/vAoH/3AKC/9wCiv/wAoz/8AKO//ACkP/wApL/8AKU//AClv/wApj/8AKa//ACnP/wAp7/8AKg//ACov/wAqT/8ALi/+8C5P/vAub/7wLo/+8C6v/vAuz/7wLw/9wDa//wA2//7wNz/9wDdv/vA3j/7wOR//ADlf/wA5b/3AOY//ADn//cA6f/3AOo/9oDqf/aA6z/2gOz//ADuP/cA7n/8AO+//ADwP/cA8z/8APO//ADz//wA9v/8APh/9wD4//cA+X/3APs//AECP/wBAr/8AQM//AEDv/wBBD/8AQS//AEFP/wBBb/8AQq//AELP/wBC7/8AQy//AENP/vBDb/7wQ4/+8EOv/vBDz/7wQ+/+8EQP/vBEL/3ARE/9wERv/cADQABv+gAAv/oABZ//EAWv/FAF3/xQCa//EAvP/FAMr/8QEZ/8UBbP+gAW3/oAFv/6ABcP+gAXH/oAJ9//ECfv/xAn//8QKA//ECgf/FAoL/xQLi//EC5P/xAub/8QLo//EC6v/xAuz/8QLw/8UDb//xA3P/xQN2//EDeP/xA5b/xQOf/8UDp//FA6j/oAOp/6ADrP+gA7j/xQPA/8UD4f/FA+P/xQPl/8UENP/xBDb/8QQ4//EEOv/xBDz/8QQ+//EEQP/xBEL/xQRE/8UERv/FAD0AR//nAEj/5wBJ/+cAS//nAFX/5wCT/+cAmP/nALr/5wDH/+cAyP/nAPb/5wEC/+cBHf/nASH/5wE5/+cBS//nAUz/5wFW/+cCbv/nAm//5wJw/+cCcf/nAnL/5wKK/+cCjP/nAo7/5wKQ/+cCkv/nApT/5wKW/+cCmP/nApr/5wKc/+cCnv/nAqD/5wKi/+cCpP/nA2v/5wOR/+cDlf/nA5j/5wOz/+cDuf/nA77/5wPM/+cDzv/nA8//5wPb/+cD7P/nBAj/5wQK/+cEDP/nBA7/5wQQ/+cEEv/nBBT/5wQW/+cEKv/nBCz/5wQu/+cEMv/nAHEABgAMAAsADABH/+gASP/oAEn/6ABL/+gAU//qAFX/6ABaAAsAXQALAJP/6ACY/+gAuv/oALwACwDH/+gAyP/oAPb/6AEC/+gBF//qARkACwEd/+gBIf/oATn/6AFL/+gBTP/oAVb/6AFsAAwBbQAMAW8ADAFwAAwBcQAMAm7/6AJv/+gCcP/oAnH/6AJy/+gCeP/qAnn/6gJ6/+oCe//qAnz/6gKBAAsCggALAor/6AKM/+gCjv/oApD/6AKS/+gClP/oApb/6AKY/+gCmv/oApz/6AKe/+gCoP/oAqL/6AKk/+gCxv/qAsj/6gLK/+oC8AALA2v/6ANx/+oDcwALA3f/6gOR/+gDk//qA5X/6AOWAAsDmP/oA58ACwOnAAsDqAAMA6kADAOsAAwDs//oA7gACwO5/+gDvv/oA8AACwPM/+gDzv/oA8//6APZ/+oD2//oA93/6gPhAAsD4wALA+UACwPs/+gECP/oBAr/6AQM/+gEDv/oBBD/6AQS/+gEFP/oBBb/6AQc/+oEHv/qBCD/6gQi/+oEJP/qBCb/6gQo/+oEKv/oBCz/6AQu/+gEMP/qBDL/6ARCAAsERAALBEYACwAMAFz/7QBe/+0A7f/tAvP/7QL1/+0C9//tA5f/7QPD/+0D0f/tA+v/7QRQ/+0EWP/tAAwAXP/yAF7/8gDt//IC8//yAvX/8gL3//IDl//yA8P/8gPR//ID6//yBFD/8gRY//IAHwBa//QAXP/yAF3/9ABe//MAvP/0AO3/8gEZ//QCgf/0AoL/9ALw//QC8//zAvX/8wL3//MDc//0A5b/9AOX//IDn//0A6f/9AO4//QDwP/0A8P/8gPR//ID4f/0A+P/9APl//QD6//yBEL/9ARE//QERv/0BFD/8gRY//IAeQAG/8oAC//KADj/0gA6/9QAPP/0AD3/0wBR/9EAUv/RAFT/0QBa/+YAXP/vAF3/5gC8/+YAwP/RANH/0gDV/9IA2f/0AN3/7QDg/+EA6//RAO3/7wDv/9EA8P/RAPL/0QDz/9EA9P/RAPf/0QD5/9EA+v/RAP3/0QD//9EBBP/RARj/1AEZ/+YBMv/SATX/0QE6/9IBRP/RAUn/0QFs/8oBbf/KAW//ygFw/8oBcf/KAmb/0wJ3/9ECgf/mAoL/5gK//9ECwf/RAsP/0QLE/9EC2//SAt3/0gLf/9IC7//TAvD/5gLx/9MDWP/TA2f/0wNo//QDav/TA23/0QNz/+YDgv/tA47/0gOP//QDkv/RA5T/0QOW/+YDl//vA5n/0QOe/9EDn//mA6b/0wOn/+YDqP/KA6n/ygOs/8oDrv/RA7T/0QO3/9QDuP/mA7//0wPA/+YDwv/0A8P/7wPQ//QD0f/vA9X/0QPX/9ED4P/tA+H/5gPi/+0D4//mA+T/7QPl/+YD5v/hA+n/0QPq//QD6//vBEH/0wRC/+YEQ//TBET/5gRF/9MERv/mBEr/0QRM/9EETf/SBE//9ARQ/+8EUf/hBFP/4QRW/9EEV//0BFj/7wRj/9EEZf/RBGf/0QRq/9MAHQA4/74AWv/vAF3/7wC8/+8A0f++ANX/vgEZ/+8BMv++ATr/vgKB/+8Cgv/vAtv/vgLd/74C3/++AvD/7wNz/+8Djv++A5b/7wOf/+8Dp//vA7j/7wPA/+8D4f/vA+P/7wPl/+8EQv/vBET/7wRG/+8ETf++ADQAOP/mADr/5wA8//IAPf/nAFz/8QDR/+YA1f/mANn/8gDd/+4A4P/oAO3/8QEY/+cBMv/mATr/5gJm/+cC2//mAt3/5gLf/+YC7//nAvH/5wNY/+cDZ//nA2j/8gNq/+cDgv/uA47/5gOP//IDl//xA6b/5wO3/+cDv//nA8L/8gPD//ED0P/yA9H/8QPg/+4D4v/uA+T/7gPm/+gD6v/yA+v/8QRB/+cEQ//nBEX/5wRN/+YET//yBFD/8QRR/+gEU//oBFf/8gRY//EEav/nAIgAJQAQACf/6AAr/+gAM//oADX/6AA4/+AAOv/gAD3/3wCD/+gAkv/oAJf/6ACxABAAsv/oALMAEADR/+AA0v/oANMAEADV/+AA3AAQAOD/4QDxABAA+P/gAQMAEAEH/+gBDAAQARb/6AEY/+ABGv/oARz/6AEe/+gBIP/oATL/4AE4/+gBOv/gAVEAEAFV/+gCKP/oAin/6AIr/+gCLP/oAkwAEAJNABACTgAQAk8AEAJQABACUQAQAlIAEAJT/+gCXf/oAl7/6AJf/+gCYP/oAmH/6AJm/98CgwAQAoUAEAKHABACif/oAov/6AKN/+gCj//oAp3/6AKf/+gCof/oAqP/6ALF/+gCx//oAsn/6ALb/+AC3f/gAt//4ALv/98C8f/fAvr/6ANTABADV//oA1j/3wNbABADZP/oA2f/3wNq/98DgwAQA4r/6AON/+gDjv/gA6b/3wOvABADt//gA7r/6AO9/+gDv//fA8UAEAPHABAD2P/oA9r/6APc/+gD5v/hA+f/4APtABAD7gAQA+8AEAPxABAD8wAQA/UAEAP3ABAD+QAQA/sAEAP9ABAD/wAQBAEAEAQDABAEBQAQBBv/6AQd/+gEH//oBCH/6AQj/+gEJf/oBCf/6AQp/+gEK//oBC3/6AQv/+gEMf/oBEH/3wRD/98ERf/fBE3/4ARR/+EEUv/gBFP/4QRU/+AEaAAQBGkAEARq/98Eqv/oAC0AOP/xADr/9AA8//QAPf/wANH/8QDT//UA1f/xANn/9ADc//UA3f/zARj/9AEy//EBOv/xAVH/9QJm//AC2//xAt3/8QLf//EC7//wAvH/8ANY//ADZ//wA2j/9ANq//ADgv/zA47/8QOP//QDpv/wA7f/9AO///ADwv/0A9D/9APg//MD4v/zA+T/8wPq//QD7f/1BEH/8ARD//AERf/wBE3/8QRP//QEV//0BGj/9QRq//AAWQAlAA8AOP/mADr/5gA8AA4APf/mALEADwCzAA8A0f/mANMADgDV/+YA2QAOANwADgDdAAsA4P/lAPEADwD4/+gBAwAPAQwADwEY/+YBMv/mATr/5gFRAA4CTAAPAk0ADwJOAA8CTwAPAlAADwJRAA8CUgAPAmb/5gKDAA8ChQAPAocADwLb/+YC3f/mAt//5gLv/+YC8f/mA1MADwNY/+YDWwAPA2f/5gNoAA4Dav/mA4IACwODAA8Djv/mA48ADgOm/+YDrwAPA7f/5gO//+YDwgAOA8UADwPHAA8D0AAOA+AACwPiAAsD5AALA+b/5QPn/+gD6gAO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ABADogOiABADpAOkABADpgOmAA8DpwOnABkDqAOpAB0DrAOsAB0DrQOtAAIDrgOuABcDsAOwABMDsQOxAAUDswOzABYDtwO3AA0DuAO4ABkDvQO9AAQDvgO+ABQDvwO/AA8DwAPAABkDwQPBAAIDwgPCAA4DwwPDABsDxAPEAAIDxgPGABMDyAPIABMDywPLAAUDzAPMABYDzgPPABYD0APQAA4D0QPRABsD2APYAAMD2QPZABgD3QPdABgD3wPfABUD4APgABID4QPhABkD4gPiABID4wPjABkD5APkABID5QPlABkD6gPqAA4D6wPrABsD8APwABMD8gPyABMD9AP0ABMD9gP2ABMD+AP4ABMD+gP6ABMD/AP8ABMD/gP+ABMEAAQAABMEAgQCABMEBAQEABMEBgQGABMEBwQHAAUECAQIABYECQQJAAUECgQKABYECwQLAAUEDAQMABYEDQQNAAUEDgQOABYEDwQPAAUEEAQQABYEEQQRAAUEEgQSABYEEwQTAAUEFAQUABYEFQQVAAUEFgQWABYEFwQXAAIEGQQZAAIEGwQbAAMEHAQcABgEHQQdAAMEHgQeABgEHwQfAAMEIAQgABgEIQQhAAMEIgQiABgEIwQjAAMEJAQkABgEJQQlAAMEJgQmABgEJwQnAAMEKAQoABgEMAQwABgEMwQzAAwENQQ1AAwEQQRBAA8EQgRCABkEQwRDAA8ERAREABkERQRFAA8ERgRGABkESQRJAAkESwRLAAIETQRNAAYETwRPAA4EUARQABsEVQRVAAcEVgRWAAgEVwRXAA4EWARYABsEWwRbABcEXQRdAB8EXgReAAcEYARgAAkEZARkAAIEZgRmAAIEagRqAA8EqgSqAAMAAgFtAAYABgAHAAsACwAHABAAEAATABEAEQAXABIAEgATACUAJQARACcAJwAFACsAKwAFAC4ALgAcADMAMwAFADUANQAFADcANwAZADgAOAAKADkAOQAGADoAOgANADsAOwAJADwAPAASAD0APQAOAD4APgAUAEUARQAaAEcASQAVAEsASwAVAFEAUgAYAFMAUwAIAFQAVAAYAFUAVQAVAFcAVwAbAFkAWQALAFoAWgACAFwAXAAWAF0AXQACAF4AXgAMAIMAgwAFAJIAkgAFAJMAkwAVAJcAlwAFAJgAmAAVAJoAmgALALEAsQAR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b20EbGRub20EbGRub20EbGZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmZyYWMEcmxpZ2EEfGxpZ2EEhGxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxudW0EimxvY2wEkGxvY2wElmxvY2wEnG51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom51bXIEom9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqG9udW0EqHBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnBudW0ErnNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNtY3AEtHNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDEEunNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDIEwHNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDMExnNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDQEzHNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDUE0nNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDYE2HNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nNzMDcE3nRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5HRudW0E5AAAAAEAAAAAAAIAAgADAAAAAQAHAAAAAQAYAAAAAwAVABYAFwAAAAIACAAJAAAAAQAJAAAAAQAUAAAAAQAEAAAAAQAGAAAAAQAFAAAAAQAZAAAAAQARAAAAAQATAAAAAQABAAAAAQAKAAAAAQALAAAAAQAMAAAAAQANAAAAAQAOAAAAAQAPAAAAAQAQAAAAAQASABsAOAPGBrQHYA3wDfAOBg4oDl4OhA6yDsYO2g7uDwAPGg9cD3oPmA/KD/wQLhBCEHoQbBB6EKYAAQAAAAEACAACAcQA3wHnAboBuwG8Ab0BvgG/AcABwQHCAcMBxAHFAcYBxwHIAckBygHLAcwBzQHOAc8B0AHRAdIB0wHoAekCRAI7AeoB6wHsAe0B7gHvAfAB8QHyAfMB9AH1AfYB9wH4AfkB+gH7AfwB/QH+AgACAQTdAgICAwIEAgUCBgIHAggCCQIKAgsCLwIPAhACEQIUAhUCFgIXAhgCGQIbAhwCHgIdAvwC/QL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZAxoDGwMcAx0DHgMfAyADIQMiAyMDJAMlAyYDJwMoAykDKgMrAywDLQMuAy8DMAMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNPA1ADUQNSBKsErAStBK4ErwSwBLEEsgSzBLQEtQS2BLcEuAS5BLoEuwS8BL0EvgS/BMAEwQTCBMMExATFBMYB/wTHBMgEyQTKBMsEzATNBM4EzwTQBNEE0gTTBNQE1QTWBNgE2QTbAhoE3AIOBNcCEwINBNoCDAISAAEA3wAIACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0APgBlAGcAhQCSALAAsQCyALMAtAC1ALYAtwC4ALkA0QDSANMA1ADVANYA1wDYANkA2gDbANwA3QDeAN8A4ADhAOIA4wDkAOUA5gDnAOgBLAEwATIBOAE6ATwBPgE/AUUBRgF/AYUBigGNAkcCSAJKAkwCTQJOAk8CUAJRAlICUwJUAlUCVgJXAlgCWQJaAlsCXAJdAl4CXwJgAmECYgJjAmQCZQJmAoMChQKHAokCiwKNAo8CkQKTApUClwKZApsCnQKfAqECowKlAqcCqQKrAq0CrwKyArQCtgK4AroCvAK+AsACwgLFAscCyQLLAs0CzwLRAtMC1QLZAtsC3QLfAuEC4wLlAucC6QLrAu0C7wLxAvIC9AL2A1MDVANVA1YDVwNYA1kDWwNcA10DXgNfA2ADYQNiA2QDZQNmA2cDaANpA2oDegN7A3wDfQN+A38DgAOBA4IDgwOEA4UDhgOHA4gDiQOKA4sDjAONA44DjwO7A70DvwPUA9oD4ARJBEsETwRXBFkEXgRqAAEAAAABAAgAAgF0ALcBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgHHAcgByQHKAcsBzAHNAc4BzwHQAdEB0gHTAv0DMAI7AfoEygTLAfsB/AH9Af4B/wIABM4EzwTRBNQE3QICAgMCBAIFAgYCBwIIAgkCCgILAfQB9QH2AfcB+AH5Ai8CDwIQAhECFAIVAhcCGQL+Av8DAAMBAwIDAwMEAwUDBgMHAwgDCQMKAwsDDAMNAw4DDwMQAxEDEgMTAxQDFQMWAxcDGAMZA08DGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMtAy4DLwMxAzIDMwM0AzUDNgM3AzgDOQM6AzsDPAM9Az4DPwNAA0EDQgNDA0QDRgNFA0cDSANJA0oDSwNMA00DTgNQA1EDUgTJBMwEzQTQBNIE0wIBBNUEwQTCBMMExATFBMYExwTIBNYE2ATZAhgE2wIaBNwC/AIOBNcCEwINBNoCFgIMAhIAAQC3AEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0AXgCHAIwAkwDpAOoA6wDsAO0A7gDvAPAA8QDyAPMA9AD1APYA9wD4APkA+gD7APwA/QD+AP8BAAEBAQIBAwEEAQUBBgEtATEBMwE5ATsBPQFAAUcCSwJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCeAJ5AnoCewJ8An0CfgJ/AoACgQKCAoQChgKIAooCjAKOApACkgKUApYCmAKaApwCngKgAqICpAKmAqgCqgKsAq4CswK1ArcCuQK7Ar0CvwLBAsMCxgLIAsoCzALOAtAC0gLUAtYC2gLcAt4C4ALiAuQC5gLoAuoC7ALuAvAC8wL1AvcDkAORA5IDkwOUA5UDlgOXA5gDmQOaA5sDnAOdA54DnwO8A74DwAPOA9UD2wPhBEcESgRMBFAEWARaBFsEXwRrAAYAAAAGABIAKgBCAFoAcgCKAAMAAAABABIAAQCQAAEAAAAaAAEAAQBNAAMAAAABABIAAQB4AAEAAAAaAAEAAQBOAAMAAAABABIAAQBgAAEAAAAaAAEAAQKuAAMAAAABABIAAQBIAAEAAAAaAAEAAQObAAMAAAABABIAAQAwAAEAAAAaAAEAAQOdAAMAAAABABIAAQAYAAEAAAAaAAEAAQQaAAIAAQCnAKsAAAAEAAAAAQAIAAEGHgA2AHIApACuALgAygD8AQ4BGAFKAWQBfgGQAboB7AH2AhgCMgJEAnYCiAKiAswC3gMQAxoDJAM2A2gDcgN8A4YDoAO6A8wD9gQoBDIEVARuBIAEsgTEBN4FCAUaBSQFLgU4BUIFbAWWBcAF6gYUAAYADgAUABoAIAAmACwCTAACAKcCTQACAKgCTwACAKkD8QACAKoEewACAKsD7wACAKwAAQAEBIgAAgCsAAEABAKJAAIAqAACAAYADASKAAIArASMAAIBogAGAA4AFAAaACAAJgAsAlQAAgCnAlUAAgCoBAsAAgCpBAkAAgCqBH0AAgCrBAcAAgCsAAIABgAMBHcAAgCoAqMAAgGiAAEABASOAAIArAAGAA4AFAAaACAAJgAsAlgAAgCnAlkAAgCoAqcAAgCpBBcAAgCqBH8AAgCrBBkAAgCsAAMACAAOABQEkAACAKgEkgACAKwCtAACAaIAAwAIAA4AFAK2AAIAqASUAAIArAK4AAIBogACAAYADAOtAAIAqASWAAIArAAFAAwAEgAYAB4AJAR5AAIApwK+AAIAqAJcAAIAqQSYAAIArALAAAIBogAGAA4AFAAaACAAJgAsAl0AAgCnAl4AAgCoAmAAAgCpBB0AAgCqBIEAAgCrBBsAAgCsAAEABASaAAIAqAAEAAoAEAAWABwCywACAKgEgwACAKsEnAACAKwCzQACAaIAAwAIAA4AFALRAAIAqASeAAIArALXAAIBogACAAYADASgAAIArALbAAIBogAGAA4AFAAaACAAJgAsAmIAAgCnAmMAAgCoAuEAAgCpBDUAAgCqBIUAAgCrBDMAAgCsAAIABgAMBKIAAgCpBKQAAgCsAAMACAAOABQDoAACAKcDogACAKgEpgACAKwABQAMABIAGAAeACQDpgACAKcCZgACAKgERQACAKkEQwACAKoEQQACAKwAAgAGAAwC8gACAKgEqAACAKwABgAOABQAGgAgACYALAJnAAIApwJoAAIAqAJqAAIAqQPyAAIAqgR8AAIAqwPwAAIArAABAAQEiQACAKwAAQAEAooAAgCoAAIABgAMBIsAAgCsBI0AAgGiAAYADgAUABoAIAAmACwCbwACAKcCcAACAKgEDAACAKkECgACAKoEfgACAKsECAACAKwAAQAEBHgAAgCoAAEABASPAAIArAABAAQEGgACAKwAAwAIAA4AFASRAAIAqASTAAIArAK1AAIBogADAAgADgAUArcAAgCoBJUAAgCsArkAAgGiAAIABgAMA64AAgCoBJcAAgCsAAUADAASABgAHgAkBHoAAgCnAr8AAgCoAncAAgCpBJkAAgCsAsEAAgGiAAYADgAUABoAIAAmACwCeAACAKcCeQACAKgCewACAKkEHgACAKoEggACAKsEHAACAKwAAQAEBJsAAgCoAAQACgAQABYAHALMAAIAqASEAAIAqwSdAAIArALOAAIBogADAAgADgAUAtIAAgCoBJ8AAgCsAtgAAgGiAAIABgAMBKEAAgCsAtwAAgGiAAYADgAUABoAIAAmACwCfQACAKcCfgACAKgC4gACAKkENgACAKoEhgACAKsENAACAKwAAgAGAAwEowACAKkEpQACAKwAAwAIAA4AFAOhAAIApwOjAAIAqASnAAIArAAFAAwAEgAYAB4AJAOnAAIApwKBAAIAqARGAAIAqQREAAIAqgRCAAIArAACAAYADALzAAIAqASpAAIArAABAAQC+AACAKgAAQAEAvoAAgCoAAEABAL5AAIAqAABAAQC+wACAKgABQAMABIAGAAeACQCcwACAKcCdAACAKgCqAACAKkEGAACAKoEgAACAKsABQAMABIAGAAeACQEKwACAKcEKQACAKgELwACAKkELQACAKoEMQACAKwABQAMABIAGAAeACQELAACAKcEKgACAKgEMAACAKkELgACAKoEMgACAKwABQAMABIAGAAeACQEOQACAKcENwACAKgEPQACAKkEOwACAKoEPwACAKwABQAMABIAGAAeACQEOgACAKcEOAACAKgEPgACAKkEPAACAKoEQAACAKwAAQAEBIcAAgCoAAIAEQAlACkAAAArAC0ABQAvADQACAA2ADsADgA9AD4AFABFAEkAFgBLAE0AGwBPAFQAHgBWAFsAJABdAF4AKgCBAIEALACDAIMALQCGAIYALgCJAIkALwCMAIwAMACXAJoAMQDPAM8ANQABAAAAAQAIAAEABgACAAEAAgLVAtYAAQAAAAEACAACAA4ABATeBN8E4AThAAEABAKHAogCmQKaAAQAAAABAAgAAQAmAAIACgAcAAIABgAMAaMAAgBKAagAAgBYAAEABAGpAAIAWAABAAIASgBXAAQAAAABAAgAAQBEAAIACgAUAAEABAGkAAIATQABAAQBpgACAE0ABAAAAAEACAABAB4AAgAKABQAAQAEAaUAAgBQAAEABAGnAAIAUAABAAIASgGjAAEAAAABAAgAAQAGAZUAAQABAEsAAQAAAAEACAABAAYBJwABAAEAugABAAAAAQAIAAEABgGsAAEAAQA2AAEAAAABAAgAAgAcAAIB4wHkAAEAAAABAAgAAgAKAAIB5QHmAAEAAgAvAE8AAQAAAAEACAACAB4ADAIoAioCKQIrAiwCHwIgAiECIgGuAiQCJQABAAwAJwAoACsAMwA1AEYARwBIAEsAUwBUAFUAAQAAAAEACAACAAwAAwImAicCJwABAAMASQBLAiIAAQAAAAEACAACAGYACAI9Ai0CLgIwAjECOQI6AjwAAQAAAAEACAACABYACAAbABUAFgAXABgAGQAdABQAAQAIAa0CIwRxBHIEcwR0BHUEdgABAAAAAQAIAAIAFgAIBHYCIwRxBHIEcwR0Aa0EdQABAAgAFAAVABYAFwAYABkAGwAdAAEAAAABAAgAAgAWAAgAFQAWABcAGAAZABsAHQAUAAEACAItAi4CMAIxAjkCOgI8Aj0AAQAAAAEACAABAAYBaQABAAEAEwAGAAAAAQAIAAMAAQASAAEAUgAAAAEAAAAaAAIAAgF8AXwAAAHUAd0AAQABAAAAAQAIAAEAKAHAAAEAAAABAAgAAgAaAAoCMgB6AHMAdAIzAjQCNQI2AjcCOAACAAEAFAAdAAAAAQAAAAEACAACACYAEAHUAdUB1gHXAdgB2QHaAdsB3AHdAkACPgJBAkICPwJDAAEAEAAUABUAFgAXABgAGQAaABsAHAAdAE0ATgKuA5sDnQQa\"\n};\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse {\n\t\tvar a = factory();\n\t\tfor(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n\t}\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn ","// The following break classes are handled by the pair table\r\nexports.OP = 0; // Opening punctuation\r\nexports.CL = 1; // Closing punctuation\r\nexports.CP = 2; // Closing parenthesis\r\nexports.QU = 3; // Ambiguous quotation\r\nexports.GL = 4; // Glue\r\nexports.NS = 5; // Non-starters\r\nexports.EX = 6; // Exclamation/Interrogation\r\nexports.SY = 7; // Symbols allowing break after\r\nexports.IS = 8; // Infix separator\r\nexports.PR = 9; // Prefix\r\nexports.PO = 10; // Postfix\r\nexports.NU = 11; // Numeric\r\nexports.AL = 12; // Alphabetic\r\nexports.HL = 13; // Hebrew Letter\r\nexports.ID = 14; // Ideographic\r\nexports.IN = 15; // Inseparable characters\r\nexports.HY = 16; // Hyphen\r\nexports.BA = 17; // Break after\r\nexports.BB = 18; // Break before\r\nexports.B2 = 19; // Break on either side (but not pair)\r\nexports.ZW = 20; // Zero-width space\r\nexports.CM = 21; // Combining marks\r\nexports.WJ = 22; // Word joiner\r\nexports.H2 = 23; // Hangul LV\r\nexports.H3 = 24; // Hangul LVT\r\nexports.JL = 25; // Hangul L Jamo\r\nexports.JV = 26; // Hangul V Jamo\r\nexports.JT = 27; // Hangul T Jamo\r\nexports.RI = 28; // Regional Indicator\r\nexports.EB = 29; // Emoji Base\r\nexports.EM = 30; // Emoji Modifier\r\nexports.ZWJ = 31; // Zero Width Joiner\r\nexports.CB = 32; // Contingent break\r\n\r\n// The following break classes are not handled by the pair table\r\nexports.AI = 33; // Ambiguous (Alphabetic or Ideograph)\r\nexports.BK = 34; // Break (mandatory)\r\nexports.CJ = 35; // Conditional Japanese Starter\r\nexports.CR = 36; // Carriage return\r\nexports.LF = 37; // Line feed\r\nexports.NL = 38; // Next line\r\nexports.SA = 39; // South-East Asian\r\nexports.SG = 40; // Surrogates\r\nexports.SP = 41; // Space\r\nexports.XX = 42; // Unknown\r\n","let CI_BRK, CP_BRK, DI_BRK, IN_BRK, PR_BRK;\r\nexports.DI_BRK = (DI_BRK = 0); // Direct break opportunity\r\nexports.IN_BRK = (IN_BRK = 1); // Indirect break opportunity\r\nexports.CI_BRK = (CI_BRK = 2); // Indirect break opportunity for combining marks\r\nexports.CP_BRK = (CP_BRK = 3); // Prohibited break for combining marks\r\nexports.PR_BRK = (PR_BRK = 4); // Prohibited break\r\n\r\n// Based on example pair table from https://www.unicode.org/reports/tr14/tr14-37.html#Table2\r\n// - ZWJ special processing for LB8a of Revision 41\r\n// - CB manually added as per Rule LB20\r\n// - CL, CP, NS, SY, IS, PR, PO, HY, BA, B2 and RI manually adjusted as per LB22 of Revision 45\r\nexports.pairTable = [\r\n //OP , CL , CP , QU , GL , NS , EX , SY , IS , PR , PO , NU , AL , HL , ID , IN , HY , BA , BB , B2 , ZW , CM , WJ , H2 , H3 , JL , JV , JT , RI , EB , EM , ZWJ , CB\r\n [PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, CP_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK], // OP\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CL\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CP\r\n [PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // QU\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // GL\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NS\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EX\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // SY\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IS\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // PR\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // PO\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // NU\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // AL\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HL\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ID\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // IN\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // HY\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, DI_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // BA\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK], // BB\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // B2\r\n [DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK], // ZW\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // CM\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK], // WJ\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H2\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // H3\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JL\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JV\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // JT\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // RI\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, DI_BRK], // EB\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, IN_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // EM\r\n [IN_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, PR_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, IN_BRK, IN_BRK, IN_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK], // ZWJ\r\n [DI_BRK, PR_BRK, PR_BRK, IN_BRK, IN_BRK, DI_BRK, PR_BRK, PR_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, PR_BRK, CI_BRK, PR_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, DI_BRK, IN_BRK, DI_BRK] // CB\r\n];","exports.EncodeStream = require('./src/EncodeStream');\r\nexports.DecodeStream = require('./src/DecodeStream');\r\nexports.Array = require('./src/Array');\r\nexports.LazyArray = require('./src/LazyArray');\r\nexports.Bitfield = require('./src/Bitfield');\r\nexports.Boolean = require('./src/Boolean');\r\nexports.Buffer = require('./src/Buffer');\r\nexports.Enum = require('./src/Enum');\r\nexports.Optional = require('./src/Optional');\r\nexports.Reserved = require('./src/Reserved');\r\nexports.String = require('./src/String');\r\nexports.Struct = require('./src/Struct');\r\nexports.VersionedStruct = require('./src/VersionedStruct');\r\n\r\nconst utils = require('./src/utils');\r\nconst NumberT = require('./src/Number');\r\nconst Pointer = require('./src/Pointer');\r\n\r\nObject.assign(exports, utils, NumberT, Pointer);\r\n","const {Number:NumberT} = require('./Number');\r\nconst utils = require('./utils');\r\n\r\nclass ArrayT {\r\n constructor(type, length, lengthType = 'count') {\r\n this.type = type;\r\n this.length = length;\r\n this.lengthType = lengthType;\r\n }\r\n\r\n decode(stream, parent) {\r\n let length;\r\n const { pos } = stream;\r\n\r\n const res = [];\r\n let ctx = parent;\r\n\r\n if (this.length != null) {\r\n length = utils.resolveLength(this.length, stream, parent);\r\n }\r\n\r\n if (this.length instanceof NumberT) {\r\n // define hidden properties\r\n Object.defineProperties(res, {\r\n parent: { value: parent },\r\n _startOffset: { value: pos },\r\n _currentOffset: { value: 0, writable: true },\r\n _length: { value: length }\r\n });\r\n\r\n ctx = res;\r\n }\r\n\r\n if ((length == null) || (this.lengthType === 'bytes')) {\r\n const target = (length != null) ?\r\n stream.pos + length\r\n : (parent != null ? parent._length : undefined) ?\r\n parent._startOffset + parent._length\r\n :\r\n stream.length;\r\n\r\n while (stream.pos < target) {\r\n res.push(this.type.decode(stream, ctx));\r\n }\r\n\r\n } else {\r\n for (let i = 0, end = length; i < end; i++) {\r\n res.push(this.type.decode(stream, ctx));\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n\r\n size(array, ctx) {\r\n if (!array) {\r\n return this.type.size(null, ctx) * utils.resolveLength(this.length, null, ctx);\r\n }\r\n\r\n let size = 0;\r\n if (this.length instanceof NumberT) {\r\n size += this.length.size();\r\n ctx = {parent: ctx};\r\n }\r\n\r\n for (let item of array) {\r\n size += this.type.size(item, ctx);\r\n }\r\n\r\n return size;\r\n }\r\n\r\n encode(stream, array, parent) {\r\n let ctx = parent;\r\n if (this.length instanceof NumberT) {\r\n ctx = {\r\n pointers: [],\r\n startOffset: stream.pos,\r\n parent\r\n };\r\n\r\n ctx.pointerOffset = stream.pos + this.size(array, ctx);\r\n this.length.encode(stream, array.length);\r\n }\r\n\r\n for (let item of array) {\r\n this.type.encode(stream, item, ctx);\r\n }\r\n\r\n if (this.length instanceof NumberT) {\r\n let i = 0;\r\n while (i < ctx.pointers.length) {\r\n const ptr = ctx.pointers[i++];\r\n ptr.type.encode(stream, ptr.val);\r\n }\r\n }\r\n\r\n }\r\n}\r\n\r\nmodule.exports = ArrayT;\r\n","class Bitfield {\r\n constructor(type, flags = []) {\r\n this.type = type;\r\n this.flags = flags;\r\n }\r\n decode(stream) {\r\n const val = this.type.decode(stream);\r\n\r\n const res = {};\r\n for (let i = 0; i < this.flags.length; i++) {\r\n const flag = this.flags[i];\r\n if (flag != null) {\r\n res[flag] = !!(val & (1 << i));\r\n }\r\n }\r\n\r\n return res;\r\n }\r\n\r\n size() {\r\n return this.type.size();\r\n }\r\n\r\n encode(stream, keys) {\r\n let val = 0;\r\n for (let i = 0; i < this.flags.length; i++) {\r\n const flag = this.flags[i];\r\n if (flag != null) {\r\n if (keys[flag]) { val |= (1 << i); }\r\n }\r\n }\r\n\r\n return this.type.encode(stream, val);\r\n }\r\n}\r\n\r\nmodule.exports = Bitfield;\r\n","class BooleanT {\r\n constructor(type) {\r\n this.type = type;\r\n }\r\n\r\n decode(stream, parent) {\r\n return !!this.type.decode(stream, parent);\r\n }\r\n\r\n size(val, parent) {\r\n return this.type.size(val, parent);\r\n }\r\n\r\n encode(stream, val, parent) {\r\n return this.type.encode(stream, +val, parent);\r\n }\r\n}\r\n\r\nmodule.exports = BooleanT;\r\n","const utils = require('./utils');\r\nconst {Number:NumberT} = require('./Number');\r\n\r\nclass BufferT {\r\n constructor(length) {\r\n this.length = length;\r\n }\r\n decode(stream, parent) {\r\n const length = utils.resolveLength(this.length, stream, parent);\r\n return stream.readBuffer(length);\r\n }\r\n\r\n size(val, parent) {\r\n if (!val) {\r\n return utils.resolveLength(this.length, null, parent);\r\n }\r\n\r\n return val.length;\r\n }\r\n\r\n encode(stream, buf, parent) {\r\n if (this.length instanceof NumberT) {\r\n this.length.encode(stream, buf.length);\r\n }\r\n\r\n return stream.writeBuffer(buf);\r\n }\r\n}\r\n\r\nmodule.exports = BufferT;\r\n","let iconv;\r\ntry { iconv = require('iconv-lite'); } catch (error) {}\r\n\r\nclass DecodeStream {\r\n constructor(buffer) {\r\n this.buffer = buffer;\r\n this.pos = 0;\r\n this.length = this.buffer.length;\r\n }\r\n\r\n readString(length, encoding = 'ascii') {\r\n switch (encoding) {\r\n case 'utf16le': case 'ucs2': case 'utf8': case 'ascii':\r\n return this.buffer.toString(encoding, this.pos, (this.pos += length));\r\n\r\n case 'utf16be':\r\n var buf = Buffer.from(this.readBuffer(length));\r\n\r\n // swap the bytes\r\n for (let i = 0, end = buf.length - 1; i < end; i += 2) {\r\n const byte = buf[i];\r\n buf[i] = buf[i + 1];\r\n buf[i + 1] = byte;\r\n }\r\n\r\n return buf.toString('utf16le');\r\n\r\n default:\r\n buf = this.readBuffer(length);\r\n if (iconv) {\r\n try {\r\n return iconv.decode(buf, encoding);\r\n } catch (error1) {}\r\n }\r\n\r\n return buf;\r\n }\r\n }\r\n\r\n readBuffer(length) {\r\n return this.buffer.slice(this.pos, (this.pos += length));\r\n }\r\n\r\n readUInt24BE() {\r\n return (this.readUInt16BE() << 8) + this.readUInt8();\r\n }\r\n\r\n readUInt24LE() {\r\n return this.readUInt16LE() + (this.readUInt8() << 16);\r\n }\r\n\r\n readInt24BE() {\r\n return (this.readInt16BE() << 8) + this.readUInt8();\r\n }\r\n\r\n readInt24LE() {\r\n return this.readUInt16LE() + (this.readInt8() << 16);\r\n }\r\n}\r\n\r\nDecodeStream.TYPES = {\r\n UInt8: 1,\r\n UInt16: 2,\r\n UInt24: 3,\r\n UInt32: 4,\r\n Int8: 1,\r\n Int16: 2,\r\n Int24: 3,\r\n Int32: 4,\r\n Float: 4,\r\n Double: 8\r\n};\r\n\r\nfor (let key in Buffer.prototype) {\r\n if (key.slice(0, 4) === 'read') {\r\n const bytes = DecodeStream.TYPES[key.replace(/read|[BL]E/g, '')];\r\n DecodeStream.prototype[key] = function() {\r\n const ret = this.buffer[key](this.pos);\r\n this.pos += bytes;\r\n return ret;\r\n };\r\n }\r\n}\r\n\r\nmodule.exports = DecodeStream;\r\n","let iconv;\r\nconst stream = require('stream');\r\nconst DecodeStream = require('./DecodeStream');\r\ntry { iconv = require('iconv-lite'); } catch (error) {}\r\n\r\nclass EncodeStream extends stream.Readable {\r\n constructor(bufferSize = 65536) {\r\n super(...arguments);\r\n this.buffer = Buffer.alloc(bufferSize);\r\n this.bufferOffset = 0;\r\n this.pos = 0;\r\n }\r\n\r\n // do nothing, required by node\r\n _read() {}\r\n\r\n ensure(bytes) {\r\n if ((this.bufferOffset + bytes) > this.buffer.length) {\r\n return this.flush();\r\n }\r\n }\r\n\r\n flush() {\r\n if (this.bufferOffset > 0) {\r\n this.push(Buffer.from(this.buffer.slice(0, this.bufferOffset)));\r\n return this.bufferOffset = 0;\r\n }\r\n }\r\n\r\n writeBuffer(buffer) {\r\n this.flush();\r\n this.push(buffer);\r\n return this.pos += buffer.length;\r\n }\r\n\r\n writeString(string, encoding = 'ascii') {\r\n switch (encoding) {\r\n case 'utf16le': case 'ucs2': case 'utf8': case 'ascii':\r\n return this.writeBuffer(Buffer.from(string, encoding));\r\n\r\n case 'utf16be':\r\n var buf = Buffer.from(string, 'utf16le');\r\n\r\n // swap the bytes\r\n for (let i = 0, end = buf.length - 1; i < end; i += 2) {\r\n const byte = buf[i];\r\n buf[i] = buf[i + 1];\r\n buf[i + 1] = byte;\r\n }\r\n\r\n return this.writeBuffer(buf);\r\n\r\n default:\r\n if (iconv) {\r\n return this.writeBuffer(iconv.encode(string, encoding));\r\n } else {\r\n throw new Error('Install iconv-lite to enable additional string encodings.');\r\n }\r\n }\r\n }\r\n\r\n writeUInt24BE(val) {\r\n this.ensure(3);\r\n this.buffer[this.bufferOffset++] = (val >>> 16) & 0xff;\r\n this.buffer[this.bufferOffset++] = (val >>> 8) & 0xff;\r\n this.buffer[this.bufferOffset++] = val & 0xff;\r\n return this.pos += 3;\r\n }\r\n\r\n writeUInt24LE(val) {\r\n this.ensure(3);\r\n this.buffer[this.bufferOffset++] = val & 0xff;\r\n this.buffer[this.bufferOffset++] = (val >>> 8) & 0xff;\r\n this.buffer[this.bufferOffset++] = (val >>> 16) & 0xff;\r\n return this.pos += 3;\r\n }\r\n\r\n writeInt24BE(val) {\r\n if (val >= 0) {\r\n return this.writeUInt24BE(val);\r\n } else {\r\n return this.writeUInt24BE(val + 0xffffff + 1);\r\n }\r\n }\r\n\r\n writeInt24LE(val) {\r\n if (val >= 0) {\r\n return this.writeUInt24LE(val);\r\n } else {\r\n return this.writeUInt24LE(val + 0xffffff + 1);\r\n }\r\n }\r\n\r\n fill(val, length) {\r\n if (length < this.buffer.length) {\r\n this.ensure(length);\r\n this.buffer.fill(val, this.bufferOffset, this.bufferOffset + length);\r\n this.bufferOffset += length;\r\n return this.pos += length;\r\n } else {\r\n const buf = Buffer.alloc(length);\r\n buf.fill(val);\r\n return this.writeBuffer(buf);\r\n }\r\n }\r\n\r\n end() {\r\n this.flush();\r\n return this.push(null);\r\n }\r\n}\r\n\r\nfor (let key in Buffer.prototype) {\r\n if (key.slice(0, 5) === 'write') {\r\n const bytes = +DecodeStream.TYPES[key.replace(/write|[BL]E/g, '')];\r\n EncodeStream.prototype[key] = function(value) {\r\n this.ensure(bytes);\r\n this.buffer[key](value, this.bufferOffset);\r\n this.bufferOffset += bytes;\r\n return this.pos += bytes;\r\n };\r\n }\r\n}\r\n\r\nmodule.exports = EncodeStream;\r\n","class Enum {\r\n constructor(type, options = []) {\r\n this.type = type;\r\n this.options = options;\r\n }\r\n decode(stream) {\r\n const index = this.type.decode(stream);\r\n return this.options[index] || index;\r\n }\r\n\r\n size() {\r\n return this.type.size();\r\n }\r\n\r\n encode(stream, val) {\r\n const index = this.options.indexOf(val);\r\n if (index === -1) {\r\n throw new Error(`Unknown option in enum: ${val}`);\r\n }\r\n\r\n return this.type.encode(stream, index);\r\n }\r\n}\r\n\r\nmodule.exports = Enum;\r\n","const ArrayT = require('./Array');\r\nconst {Number:NumberT} = require('./Number');\r\nconst utils = require('./utils');\r\nconst {inspect} = require('util');\r\n\r\nclass LazyArrayT extends ArrayT {\r\n decode(stream, parent) {\r\n const { pos } = stream;\r\n const length = utils.resolveLength(this.length, stream, parent);\r\n\r\n if (this.length instanceof NumberT) {\r\n parent = {\r\n parent,\r\n _startOffset: pos,\r\n _currentOffset: 0,\r\n _length: length\r\n };\r\n }\r\n\r\n const res = new LazyArray(this.type, length, stream, parent);\r\n\r\n stream.pos += length * this.type.size(null, parent);\r\n return res;\r\n }\r\n\r\n size(val, ctx) {\r\n if (val instanceof LazyArray) {\r\n val = val.toArray();\r\n }\r\n\r\n return super.size(val, ctx);\r\n }\r\n\r\n encode(stream, val, ctx) {\r\n if (val instanceof LazyArray) {\r\n val = val.toArray();\r\n }\r\n\r\n return super.encode(stream, val, ctx);\r\n }\r\n}\r\n\r\nclass LazyArray {\r\n constructor(type, length, stream, ctx) {\r\n this.type = type;\r\n this.length = length;\r\n this.stream = stream;\r\n this.ctx = ctx;\r\n this.base = this.stream.pos;\r\n this.items = [];\r\n }\r\n\r\n get(index) {\r\n if ((index < 0) || (index >= this.length)) {\r\n return undefined;\r\n }\r\n\r\n if (this.items[index] == null) {\r\n const { pos } = this.stream;\r\n this.stream.pos = this.base + (this.type.size(null, this.ctx) * index);\r\n this.items[index] = this.type.decode(this.stream, this.ctx);\r\n this.stream.pos = pos;\r\n }\r\n\r\n return this.items[index];\r\n }\r\n\r\n toArray() {\r\n const result = [];\r\n for (let i = 0, end = this.length; i < end; i++) {\r\n result.push(this.get(i));\r\n }\r\n return result;\r\n }\r\n\r\n inspect() {\r\n return inspect(this.toArray());\r\n }\r\n}\r\n\r\nmodule.exports = LazyArrayT;\r\n","const DecodeStream = require('./DecodeStream');\r\n\r\nclass NumberT {\r\n constructor(type, endian = 'BE') {\r\n this.type = type;\r\n this.endian = endian;\r\n this.fn = this.type;\r\n if (this.type[this.type.length - 1] !== '8') {\r\n this.fn += this.endian;\r\n }\r\n }\r\n\r\n size() {\r\n return DecodeStream.TYPES[this.type];\r\n }\r\n\r\n decode(stream) {\r\n return stream[`read${this.fn}`]();\r\n }\r\n\r\n encode(stream, val) {\r\n return stream[`write${this.fn}`](val);\r\n }\r\n}\r\n\r\nexports.Number = NumberT;\r\nexports.uint8 = new NumberT('UInt8');\r\nexports.uint16be = (exports.uint16 = new NumberT('UInt16', 'BE'));\r\nexports.uint16le = new NumberT('UInt16', 'LE');\r\nexports.uint24be = (exports.uint24 = new NumberT('UInt24', 'BE'));\r\nexports.uint24le = new NumberT('UInt24', 'LE');\r\nexports.uint32be = (exports.uint32 = new NumberT('UInt32', 'BE'));\r\nexports.uint32le = new NumberT('UInt32', 'LE');\r\nexports.int8 = new NumberT('Int8');\r\nexports.int16be = (exports.int16 = new NumberT('Int16', 'BE'));\r\nexports.int16le = new NumberT('Int16', 'LE');\r\nexports.int24be = (exports.int24 = new NumberT('Int24', 'BE'));\r\nexports.int24le = new NumberT('Int24', 'LE');\r\nexports.int32be = (exports.int32 = new NumberT('Int32', 'BE'));\r\nexports.int32le = new NumberT('Int32', 'LE');\r\nexports.floatbe = (exports.float = new NumberT('Float', 'BE'));\r\nexports.floatle = new NumberT('Float', 'LE');\r\nexports.doublebe = (exports.double = new NumberT('Double', 'BE'));\r\nexports.doublele = new NumberT('Double', 'LE');\r\n\r\nclass Fixed extends NumberT {\r\n constructor(size, endian, fracBits = size >> 1) {\r\n super(`Int${size}`, endian);\r\n this._point = 1 << fracBits;\r\n }\r\n\r\n decode(stream) {\r\n return super.decode(stream) / this._point;\r\n }\r\n\r\n encode(stream, val) {\r\n return super.encode(stream, (val * this._point) | 0);\r\n }\r\n}\r\n\r\nexports.Fixed = Fixed;\r\nexports.fixed16be = (exports.fixed16 = new Fixed(16, 'BE'));\r\nexports.fixed16le = new Fixed(16, 'LE');\r\nexports.fixed32be = (exports.fixed32 =new Fixed(32, 'BE'));\r\nexports.fixed32le = new Fixed(32, 'LE');\r\n","class Optional {\r\n constructor(type, condition = true) {\r\n this.type = type;\r\n this.condition = condition;\r\n }\r\n\r\n decode(stream, parent) {\r\n let { condition } = this;\r\n if (typeof condition === 'function') {\r\n condition = condition.call(parent, parent);\r\n }\r\n\r\n if (condition) {\r\n return this.type.decode(stream, parent);\r\n }\r\n }\r\n\r\n size(val, parent) {\r\n let { condition } = this;\r\n if (typeof condition === 'function') {\r\n condition = condition.call(parent, parent);\r\n }\r\n\r\n if (condition) {\r\n return this.type.size(val, parent);\r\n } else {\r\n return 0;\r\n }\r\n }\r\n\r\n encode(stream, val, parent) {\r\n let { condition } = this;\r\n if (typeof condition === 'function') {\r\n condition = condition.call(parent, parent);\r\n }\r\n\r\n if (condition) {\r\n return this.type.encode(stream, val, parent);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = Optional;\r\n","const utils = require('./utils');\r\n\r\nclass Pointer {\r\n constructor(offsetType, type, options = {}) {\r\n this.offsetType = offsetType;\r\n this.type = type;\r\n this.options = options;\r\n if (this.type === 'void') { this.type = null; }\r\n if (this.options.type == null) { this.options.type = 'local'; }\r\n if (this.options.allowNull == null) { this.options.allowNull = true; }\r\n if (this.options.nullValue == null) { this.options.nullValue = 0; }\r\n if (this.options.lazy == null) { this.options.lazy = false; }\r\n if (this.options.relativeTo) {\r\n if (typeof this.options.relativeTo !== 'function') {\r\n throw new Error('relativeTo option must be a function');\r\n }\r\n this.relativeToGetter = options.relativeTo;\r\n }\r\n }\r\n\r\n decode(stream, ctx) {\r\n const offset = this.offsetType.decode(stream, ctx);\r\n\r\n // handle NULL pointers\r\n if ((offset === this.options.nullValue) && this.options.allowNull) {\r\n return null;\r\n }\r\n\r\n let relative;\r\n switch (this.options.type) {\r\n case 'local': relative = ctx._startOffset; break;\r\n case 'immediate': relative = stream.pos - this.offsetType.size(); break;\r\n case 'parent': relative = ctx.parent._startOffset; break;\r\n default:\r\n var c = ctx;\r\n while (c.parent) {\r\n c = c.parent;\r\n }\r\n\r\n relative = c._startOffset || 0;\r\n }\r\n\r\n if (this.options.relativeTo) {\r\n relative += this.relativeToGetter(ctx);\r\n }\r\n\r\n const ptr = offset + relative;\r\n\r\n if (this.type != null) {\r\n let val = null;\r\n const decodeValue = () => {\r\n if (val != null) { return val; }\r\n\r\n const { pos } = stream;\r\n stream.pos = ptr;\r\n val = this.type.decode(stream, ctx);\r\n stream.pos = pos;\r\n return val;\r\n };\r\n\r\n // If this is a lazy pointer, define a getter to decode only when needed.\r\n // This obviously only works when the pointer is contained by a Struct.\r\n if (this.options.lazy) {\r\n return new utils.PropertyDescriptor({\r\n get: decodeValue});\r\n }\r\n\r\n return decodeValue();\r\n } else {\r\n return ptr;\r\n }\r\n }\r\n\r\n size(val, ctx) {\r\n const parent = ctx;\r\n switch (this.options.type) {\r\n case 'local': case 'immediate':\r\n break;\r\n case 'parent':\r\n ctx = ctx.parent;\r\n break;\r\n default: // global\r\n while (ctx.parent) {\r\n ctx = ctx.parent;\r\n }\r\n }\r\n\r\n let { type } = this;\r\n if (type == null) {\r\n if (!(val instanceof VoidPointer)) {\r\n throw new Error(\"Must be a VoidPointer\");\r\n }\r\n\r\n ({ type } = val);\r\n val = val.value;\r\n }\r\n\r\n if (val && ctx) {\r\n ctx.pointerSize += type.size(val, parent);\r\n }\r\n\r\n return this.offsetType.size();\r\n }\r\n\r\n encode(stream, val, ctx) {\r\n let relative;\r\n const parent = ctx;\r\n if ((val == null)) {\r\n this.offsetType.encode(stream, this.options.nullValue);\r\n return;\r\n }\r\n\r\n switch (this.options.type) {\r\n case 'local':\r\n relative = ctx.startOffset;\r\n break;\r\n case 'immediate':\r\n relative = stream.pos + this.offsetType.size(val, parent);\r\n break;\r\n case 'parent':\r\n ctx = ctx.parent;\r\n relative = ctx.startOffset;\r\n break;\r\n default: // global\r\n relative = 0;\r\n while (ctx.parent) {\r\n ctx = ctx.parent;\r\n }\r\n }\r\n\r\n if (this.options.relativeTo) {\r\n relative += this.relativeToGetter(parent.val);\r\n }\r\n\r\n this.offsetType.encode(stream, ctx.pointerOffset - relative);\r\n\r\n let { type } = this;\r\n if (type == null) {\r\n if (!(val instanceof VoidPointer)) {\r\n throw new Error(\"Must be a VoidPointer\");\r\n }\r\n\r\n ({ type } = val);\r\n val = val.value;\r\n }\r\n\r\n ctx.pointers.push({\r\n type,\r\n val,\r\n parent\r\n });\r\n\r\n return ctx.pointerOffset += type.size(val, parent);\r\n }\r\n}\r\n\r\n// A pointer whose type is determined at decode time\r\nclass VoidPointer {\r\n constructor(type, value) {\r\n this.type = type;\r\n this.value = value;\r\n }\r\n}\r\n\r\nexports.Pointer = Pointer;\r\nexports.VoidPointer = VoidPointer;\r\n","const utils = require('./utils');\r\n\r\nclass Reserved {\r\n constructor(type, count = 1) {\r\n this.type = type;\r\n this.count = count;\r\n }\r\n decode(stream, parent) {\r\n stream.pos += this.size(null, parent);\r\n return undefined;\r\n }\r\n\r\n size(data, parent) {\r\n const count = utils.resolveLength(this.count, null, parent);\r\n return this.type.size() * count;\r\n }\r\n\r\n encode(stream, val, parent) {\r\n return stream.fill(0, this.size(val, parent));\r\n }\r\n}\r\n\r\nmodule.exports = Reserved;\r\n","const {Number:NumberT} = require('./Number');\r\nconst utils = require('./utils');\r\n\r\nclass StringT {\r\n constructor(length, encoding = 'ascii') {\r\n this.length = length;\r\n this.encoding = encoding;\r\n }\r\n\r\n decode(stream, parent) {\r\n let length, pos;\r\n\r\n if (this.length != null) {\r\n length = utils.resolveLength(this.length, stream, parent);\r\n } else {\r\n let buffer;\r\n ({buffer, length, pos} = stream);\r\n\r\n while ((pos < length) && (buffer[pos] !== 0x00)) {\r\n ++pos;\r\n }\r\n\r\n length = pos - stream.pos;\r\n }\r\n\r\n let { encoding } = this;\r\n if (typeof encoding === 'function') {\r\n encoding = encoding.call(parent, parent) || 'ascii';\r\n }\r\n\r\n const string = stream.readString(length, encoding);\r\n\r\n if ((this.length == null) && (stream.pos < stream.length)) {\r\n stream.pos++;\r\n }\r\n\r\n return string;\r\n }\r\n\r\n size(val, parent) {\r\n // Use the defined value if no value was given\r\n if (!val) {\r\n return utils.resolveLength(this.length, null, parent);\r\n }\r\n\r\n let { encoding } = this;\r\n if (typeof encoding === 'function') {\r\n encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\r\n }\r\n\r\n if (encoding === 'utf16be') {\r\n encoding = 'utf16le';\r\n }\r\n\r\n let size = Buffer.byteLength(val, encoding);\r\n if (this.length instanceof NumberT) {\r\n size += this.length.size();\r\n }\r\n\r\n if ((this.length == null)) {\r\n size++;\r\n }\r\n\r\n return size;\r\n }\r\n\r\n encode(stream, val, parent) {\r\n let { encoding } = this;\r\n if (typeof encoding === 'function') {\r\n encoding = encoding.call(parent != null ? parent.val : undefined, parent != null ? parent.val : undefined) || 'ascii';\r\n }\r\n\r\n if (this.length instanceof NumberT) {\r\n this.length.encode(stream, Buffer.byteLength(val, encoding));\r\n }\r\n\r\n stream.writeString(val, encoding);\r\n\r\n if ((this.length == null)) {\r\n return stream.writeUInt8(0x00);\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = StringT;\r\n","const utils = require('./utils');\r\n\r\nclass Struct {\r\n constructor(fields = {}) {\r\n this.fields = fields;\r\n }\r\n\r\n decode(stream, parent, length = 0) {\r\n const res = this._setup(stream, parent, length);\r\n this._parseFields(stream, res, this.fields);\r\n\r\n if (this.process != null) {\r\n this.process.call(res, stream);\r\n }\r\n return res;\r\n }\r\n\r\n _setup(stream, parent, length) {\r\n const res = {};\r\n\r\n // define hidden properties\r\n Object.defineProperties(res, {\r\n parent: { value: parent },\r\n _startOffset: { value: stream.pos },\r\n _currentOffset: { value: 0, writable: true },\r\n _length: { value: length }\r\n });\r\n\r\n return res;\r\n }\r\n\r\n _parseFields(stream, res, fields) {\r\n for (let key in fields) {\r\n var val;\r\n const type = fields[key];\r\n if (typeof type === 'function') {\r\n val = type.call(res, res);\r\n } else {\r\n val = type.decode(stream, res);\r\n }\r\n\r\n if (val !== undefined) {\r\n if (val instanceof utils.PropertyDescriptor) {\r\n Object.defineProperty(res, key, val);\r\n } else {\r\n res[key] = val;\r\n }\r\n }\r\n\r\n res._currentOffset = stream.pos - res._startOffset;\r\n }\r\n\r\n }\r\n\r\n size(val, parent, includePointers) {\r\n if (val == null) { val = {}; }\r\n if (includePointers == null) { includePointers = true; }\r\n const ctx = {\r\n parent,\r\n val,\r\n pointerSize: 0\r\n };\r\n\r\n let size = 0;\r\n for (let key in this.fields) {\r\n const type = this.fields[key];\r\n if (type.size != null) {\r\n size += type.size(val[key], ctx);\r\n }\r\n }\r\n\r\n if (includePointers) {\r\n size += ctx.pointerSize;\r\n }\r\n\r\n return size;\r\n }\r\n\r\n encode(stream, val, parent) {\r\n let type;\r\n if (this.preEncode != null) {\r\n this.preEncode.call(val, stream);\r\n }\r\n\r\n const ctx = {\r\n pointers: [],\r\n startOffset: stream.pos,\r\n parent,\r\n val,\r\n pointerSize: 0\r\n };\r\n\r\n ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\r\n\r\n for (let key in this.fields) {\r\n type = this.fields[key];\r\n if (type.encode != null) {\r\n type.encode(stream, val[key], ctx);\r\n }\r\n }\r\n\r\n let i = 0;\r\n while (i < ctx.pointers.length) {\r\n const ptr = ctx.pointers[i++];\r\n ptr.type.encode(stream, ptr.val, ptr.parent);\r\n }\r\n\r\n }\r\n}\r\n\r\nmodule.exports = Struct;\r\n","const Struct = require('./Struct');\r\n\r\nconst getPath = (object, pathArray) => {\r\n return pathArray.reduce((prevObj, key) => prevObj && prevObj[key], object);\r\n};\r\n\r\nclass VersionedStruct extends Struct {\r\n constructor(type, versions = {}) {\r\n super();\r\n this.type = type;\r\n this.versions = versions;\r\n if (typeof type === 'string') {\r\n this.versionPath = type.split('.');\r\n }\r\n }\r\n\r\n decode(stream, parent, length = 0) {\r\n const res = this._setup(stream, parent, length);\r\n\r\n if (typeof this.type === 'string') {\r\n res.version = getPath(parent, this.versionPath);\r\n } else {\r\n res.version = this.type.decode(stream);\r\n }\r\n\r\n if (this.versions.header) {\r\n this._parseFields(stream, res, this.versions.header);\r\n }\r\n\r\n const fields = this.versions[res.version];\r\n if ((fields == null)) {\r\n throw new Error(`Unknown version ${res.version}`);\r\n }\r\n\r\n if (fields instanceof VersionedStruct) {\r\n return fields.decode(stream, parent);\r\n }\r\n\r\n this._parseFields(stream, res, fields);\r\n\r\n if (this.process != null) {\r\n this.process.call(res, stream);\r\n }\r\n return res;\r\n }\r\n\r\n size(val, parent, includePointers = true) {\r\n let key, type;\r\n if (!val) {\r\n throw new Error('Not a fixed size');\r\n }\r\n\r\n const ctx = {\r\n parent,\r\n val,\r\n pointerSize: 0\r\n };\r\n\r\n let size = 0;\r\n if (typeof this.type !== 'string') {\r\n size += this.type.size(val.version, ctx);\r\n }\r\n\r\n if (this.versions.header) {\r\n for (key in this.versions.header) {\r\n type = this.versions.header[key];\r\n if (type.size != null) {\r\n size += type.size(val[key], ctx);\r\n }\r\n }\r\n }\r\n\r\n const fields = this.versions[val.version];\r\n if ((fields == null)) {\r\n throw new Error(`Unknown version ${val.version}`);\r\n }\r\n\r\n for (key in fields) {\r\n type = fields[key];\r\n if (type.size != null) {\r\n size += type.size(val[key], ctx);\r\n }\r\n }\r\n\r\n if (includePointers) {\r\n size += ctx.pointerSize;\r\n }\r\n\r\n return size;\r\n }\r\n\r\n encode(stream, val, parent) {\r\n let key, type;\r\n if (this.preEncode != null) {\r\n this.preEncode.call(val, stream);\r\n }\r\n\r\n const ctx = {\r\n pointers: [],\r\n startOffset: stream.pos,\r\n parent,\r\n val,\r\n pointerSize: 0\r\n };\r\n\r\n ctx.pointerOffset = stream.pos + this.size(val, ctx, false);\r\n\r\n if (typeof this.type !== 'string') {\r\n this.type.encode(stream, val.version);\r\n }\r\n\r\n if (this.versions.header) {\r\n for (key in this.versions.header) {\r\n type = this.versions.header[key];\r\n if (type.encode != null) {\r\n type.encode(stream, val[key], ctx);\r\n }\r\n }\r\n }\r\n\r\n const fields = this.versions[val.version];\r\n for (key in fields) {\r\n type = fields[key];\r\n if (type.encode != null) {\r\n type.encode(stream, val[key], ctx);\r\n }\r\n }\r\n\r\n let i = 0;\r\n while (i < ctx.pointers.length) {\r\n const ptr = ctx.pointers[i++];\r\n ptr.type.encode(stream, ptr.val, ptr.parent);\r\n }\r\n\r\n }\r\n}\r\n\r\nmodule.exports = VersionedStruct;\r\n","const {Number:NumberT} = require('./Number');\r\n\r\nexports.resolveLength = function(length, stream, parent) {\r\n let res;\r\n if (typeof length === 'number') {\r\n res = length;\r\n\r\n } else if (typeof length === 'function') {\r\n res = length.call(parent, parent);\r\n\r\n } else if (parent && (typeof length === 'string')) {\r\n res = parent[length];\r\n\r\n } else if (stream && length instanceof NumberT) {\r\n res = length.decode(stream);\r\n }\r\n\r\n if (isNaN(res)) {\r\n throw new Error('Not a fixed size');\r\n }\r\n\r\n return res;\r\n};\r\n\r\nclass PropertyDescriptor {\r\n constructor(opts = {}) {\r\n this.enumerable = true;\r\n this.configurable = true;\r\n\r\n for (let key in opts) {\r\n const val = opts[key];\r\n this[key] = val;\r\n }\r\n }\r\n}\r\n\r\nexports.PropertyDescriptor = PropertyDescriptor;\r\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return ''\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","// eslint-disable-next-line es/no-typed-arrays -- safe\nmodule.exports = typeof ArrayBuffer != 'undefined' && typeof DataView != 'undefined';\n","'use strict';\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar tryToString = require('../internals/try-to-string');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar defineProperty = require('../internals/object-define-property').f;\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar uid = require('../internals/uid');\n\nvar Int8Array = global.Int8Array;\nvar Int8ArrayPrototype = Int8Array && Int8Array.prototype;\nvar Uint8ClampedArray = global.Uint8ClampedArray;\nvar Uint8ClampedArrayPrototype = Uint8ClampedArray && Uint8ClampedArray.prototype;\nvar TypedArray = Int8Array && getPrototypeOf(Int8Array);\nvar TypedArrayPrototype = Int8ArrayPrototype && getPrototypeOf(Int8ArrayPrototype);\nvar ObjectPrototype = Object.prototype;\nvar TypeError = global.TypeError;\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');\nvar TYPED_ARRAY_CONSTRUCTOR = uid('TYPED_ARRAY_CONSTRUCTOR');\n// Fixing native typed arrays in Opera Presto crashes the browser, see #595\nvar NATIVE_ARRAY_BUFFER_VIEWS = NATIVE_ARRAY_BUFFER && !!setPrototypeOf && classof(global.opera) !== 'Opera';\nvar TYPED_ARRAY_TAG_REQIRED = false;\nvar NAME, Constructor, Prototype;\n\nvar TypedArrayConstructorsList = {\n Int8Array: 1,\n Uint8Array: 1,\n Uint8ClampedArray: 1,\n Int16Array: 2,\n Uint16Array: 2,\n Int32Array: 4,\n Uint32Array: 4,\n Float32Array: 4,\n Float64Array: 8\n};\n\nvar BigIntArrayConstructorsList = {\n BigInt64Array: 8,\n BigUint64Array: 8\n};\n\nvar isView = function isView(it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return klass === 'DataView'\n || hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar isTypedArray = function (it) {\n if (!isObject(it)) return false;\n var klass = classof(it);\n return hasOwn(TypedArrayConstructorsList, klass)\n || hasOwn(BigIntArrayConstructorsList, klass);\n};\n\nvar aTypedArray = function (it) {\n if (isTypedArray(it)) return it;\n throw TypeError('Target is not a typed array');\n};\n\nvar aTypedArrayConstructor = function (C) {\n if (isCallable(C) && (!setPrototypeOf || isPrototypeOf(TypedArray, C))) return C;\n throw TypeError(tryToString(C) + ' is not a typed array constructor');\n};\n\nvar exportTypedArrayMethod = function (KEY, property, forced) {\n if (!DESCRIPTORS) return;\n if (forced) for (var ARRAY in TypedArrayConstructorsList) {\n var TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor.prototype, KEY)) try {\n delete TypedArrayConstructor.prototype[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArrayPrototype[KEY] || forced) {\n redefine(TypedArrayPrototype, KEY, forced ? property\n : NATIVE_ARRAY_BUFFER_VIEWS && Int8ArrayPrototype[KEY] || property);\n }\n};\n\nvar exportTypedArrayStaticMethod = function (KEY, property, forced) {\n var ARRAY, TypedArrayConstructor;\n if (!DESCRIPTORS) return;\n if (setPrototypeOf) {\n if (forced) for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && hasOwn(TypedArrayConstructor, KEY)) try {\n delete TypedArrayConstructor[KEY];\n } catch (error) { /* empty */ }\n }\n if (!TypedArray[KEY] || forced) {\n // V8 ~ Chrome 49-50 `%TypedArray%` methods are non-writable non-configurable\n try {\n return redefine(TypedArray, KEY, forced ? property : NATIVE_ARRAY_BUFFER_VIEWS && TypedArray[KEY] || property);\n } catch (error) { /* empty */ }\n } else return;\n }\n for (ARRAY in TypedArrayConstructorsList) {\n TypedArrayConstructor = global[ARRAY];\n if (TypedArrayConstructor && (!TypedArrayConstructor[KEY] || forced)) {\n redefine(TypedArrayConstructor, KEY, property);\n }\n }\n};\n\nfor (NAME in TypedArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);\n else NATIVE_ARRAY_BUFFER_VIEWS = false;\n}\n\nfor (NAME in BigIntArrayConstructorsList) {\n Constructor = global[NAME];\n Prototype = Constructor && Constructor.prototype;\n if (Prototype) createNonEnumerableProperty(Prototype, TYPED_ARRAY_CONSTRUCTOR, Constructor);\n}\n\n// WebKit bug - typed arrays constructors prototype is Object.prototype\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !isCallable(TypedArray) || TypedArray === Function.prototype) {\n // eslint-disable-next-line no-shadow -- safe\n TypedArray = function TypedArray() {\n throw TypeError('Incorrect invocation');\n };\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME], TypedArray);\n }\n}\n\nif (!NATIVE_ARRAY_BUFFER_VIEWS || !TypedArrayPrototype || TypedArrayPrototype === ObjectPrototype) {\n TypedArrayPrototype = TypedArray.prototype;\n if (NATIVE_ARRAY_BUFFER_VIEWS) for (NAME in TypedArrayConstructorsList) {\n if (global[NAME]) setPrototypeOf(global[NAME].prototype, TypedArrayPrototype);\n }\n}\n\n// WebKit bug - one more object in Uint8ClampedArray prototype chain\nif (NATIVE_ARRAY_BUFFER_VIEWS && getPrototypeOf(Uint8ClampedArrayPrototype) !== TypedArrayPrototype) {\n setPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);\n}\n\nif (DESCRIPTORS && !hasOwn(TypedArrayPrototype, TO_STRING_TAG)) {\n TYPED_ARRAY_TAG_REQIRED = true;\n defineProperty(TypedArrayPrototype, TO_STRING_TAG, { get: function () {\n return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;\n } });\n for (NAME in TypedArrayConstructorsList) if (global[NAME]) {\n createNonEnumerableProperty(global[NAME], TYPED_ARRAY_TAG, NAME);\n }\n}\n\nmodule.exports = {\n NATIVE_ARRAY_BUFFER_VIEWS: NATIVE_ARRAY_BUFFER_VIEWS,\n TYPED_ARRAY_CONSTRUCTOR: TYPED_ARRAY_CONSTRUCTOR,\n TYPED_ARRAY_TAG: TYPED_ARRAY_TAG_REQIRED && TYPED_ARRAY_TAG,\n aTypedArray: aTypedArray,\n aTypedArrayConstructor: aTypedArrayConstructor,\n exportTypedArrayMethod: exportTypedArrayMethod,\n exportTypedArrayStaticMethod: exportTypedArrayStaticMethod,\n isView: isView,\n isTypedArray: isTypedArray,\n TypedArray: TypedArray,\n TypedArrayPrototype: TypedArrayPrototype\n};\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_ARRAY_BUFFER = require('../internals/array-buffer-native');\nvar FunctionName = require('../internals/function-name');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefineAll = require('../internals/redefine-all');\nvar fails = require('../internals/fails');\nvar anInstance = require('../internals/an-instance');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar IEEE754 = require('../internals/ieee754');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar arrayFill = require('../internals/array-fill');\nvar arraySlice = require('../internals/array-slice');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length';\nvar WRONG_INDEX = 'Wrong index';\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\nvar $ArrayBuffer = NativeArrayBuffer;\nvar ArrayBufferPrototype = $ArrayBuffer && $ArrayBuffer[PROTOTYPE];\nvar $DataView = global[DATA_VIEW];\nvar DataViewPrototype = $DataView && $DataView[PROTOTYPE];\nvar ObjectPrototype = Object.prototype;\nvar Array = global.Array;\nvar RangeError = global.RangeError;\nvar fill = uncurryThis(arrayFill);\nvar reverse = uncurryThis([].reverse);\n\nvar packIEEE754 = IEEE754.pack;\nvar unpackIEEE754 = IEEE754.unpack;\n\nvar packInt8 = function (number) {\n return [number & 0xFF];\n};\n\nvar packInt16 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF];\n};\n\nvar packInt32 = function (number) {\n return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];\n};\n\nvar unpackInt32 = function (buffer) {\n return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];\n};\n\nvar packFloat32 = function (number) {\n return packIEEE754(number, 23, 4);\n};\n\nvar packFloat64 = function (number) {\n return packIEEE754(number, 52, 8);\n};\n\nvar addGetter = function (Constructor, key) {\n defineProperty(Constructor[PROTOTYPE], key, { get: function () { return getInternalState(this)[key]; } });\n};\n\nvar get = function (view, count, index, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = arraySlice(bytes, start, start + count);\n return isLittleEndian ? pack : reverse(pack);\n};\n\nvar set = function (view, count, index, conversion, value, isLittleEndian) {\n var intIndex = toIndex(index);\n var store = getInternalState(view);\n if (intIndex + count > store.byteLength) throw RangeError(WRONG_INDEX);\n var bytes = getInternalState(store.buffer).bytes;\n var start = intIndex + store.byteOffset;\n var pack = conversion(+value);\n for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];\n};\n\nif (!NATIVE_ARRAY_BUFFER) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n var byteLength = toIndex(length);\n setInternalState(this, {\n bytes: fill(Array(byteLength), 0),\n byteLength: byteLength\n });\n if (!DESCRIPTORS) this.byteLength = byteLength;\n };\n\n ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE];\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, DataViewPrototype);\n anInstance(buffer, ArrayBufferPrototype);\n var bufferLength = getInternalState(buffer).byteLength;\n var offset = toIntegerOrInfinity(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n setInternalState(this, {\n buffer: buffer,\n byteLength: byteLength,\n byteOffset: offset\n });\n if (!DESCRIPTORS) {\n this.buffer = buffer;\n this.byteLength = byteLength;\n this.byteOffset = offset;\n }\n };\n\n DataViewPrototype = $DataView[PROTOTYPE];\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, 'byteLength');\n addGetter($DataView, 'buffer');\n addGetter($DataView, 'byteLength');\n addGetter($DataView, 'byteOffset');\n }\n\n redefineAll(DataViewPrototype, {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments.length > 1 ? arguments[1] : undefined);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackInt32(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined)) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 23);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments.length > 1 ? arguments[1] : undefined), 52);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packInt8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packInt16, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packInt32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packFloat32, value, arguments.length > 2 ? arguments[2] : undefined);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packFloat64, value, arguments.length > 2 ? arguments[2] : undefined);\n }\n });\n} else {\n var INCORRECT_ARRAY_BUFFER_NAME = PROPER_FUNCTION_NAME && NativeArrayBuffer.name !== ARRAY_BUFFER;\n /* eslint-disable no-new -- required for testing */\n if (!fails(function () {\n NativeArrayBuffer(1);\n }) || !fails(function () {\n new NativeArrayBuffer(-1);\n }) || fails(function () {\n new NativeArrayBuffer();\n new NativeArrayBuffer(1.5);\n new NativeArrayBuffer(NaN);\n return INCORRECT_ARRAY_BUFFER_NAME && !CONFIGURABLE_FUNCTION_NAME;\n })) {\n /* eslint-enable no-new -- required for testing */\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, ArrayBufferPrototype);\n return new NativeArrayBuffer(toIndex(length));\n };\n\n $ArrayBuffer[PROTOTYPE] = ArrayBufferPrototype;\n\n for (var keys = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) {\n createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]);\n }\n }\n\n ArrayBufferPrototype.constructor = $ArrayBuffer;\n } else if (INCORRECT_ARRAY_BUFFER_NAME && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(NativeArrayBuffer, 'name', ARRAY_BUFFER);\n }\n\n // WebKit bug - the same parent prototype for typed arrays and data view\n if (setPrototypeOf && getPrototypeOf(DataViewPrototype) !== ObjectPrototype) {\n setPrototypeOf(DataViewPrototype, ObjectPrototype);\n }\n\n // iOS Safari 7.x bug\n var testView = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = uncurryThis(DataViewPrototype.setInt8);\n testView.setInt8(0, 2147483648);\n testView.setInt8(1, 2147483649);\n if (testView.getInt8(0) || !testView.getInt8(1)) redefineAll(DataViewPrototype, {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8(this, byteOffset, value << 24 >> 24);\n }\n }, { unsafe: true });\n}\n\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\n\nmodule.exports = {\n ArrayBuffer: $ArrayBuffer,\n DataView: $DataView\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar arrayBufferModule = require('../internals/array-buffer');\nvar setSpecies = require('../internals/set-species');\n\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar ArrayBuffer = arrayBufferModule[ARRAY_BUFFER];\nvar NativeArrayBuffer = global[ARRAY_BUFFER];\n\n// `ArrayBuffer` constructor\n// https://tc39.es/ecma262/#sec-arraybuffer-constructor\n$({ global: true, forced: NativeArrayBuffer !== ArrayBuffer }, {\n ArrayBuffer: ArrayBuffer\n});\n\nsetSpecies(ARRAY_BUFFER);\n",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t const N = 16;\n\n\t //Origin pbox and sbox, derived from PI\n\t const ORIG_P = [\n\t 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t 0x9216D5D9, 0x8979FB1B\n\t ];\n\n\t const ORIG_S = [\n\t [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],\n\t [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],\n\t [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],\n\t [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]\n\t ];\n\n\t var BLOWFISH_CTX = {\n\t pbox: [],\n\t sbox: []\n\t }\n\n\t function F(ctx, x){\n\t let a = (x >> 24) & 0xFF;\n\t let b = (x >> 16) & 0xFF;\n\t let c = (x >> 8) & 0xFF;\n\t let d = x & 0xFF;\n\n\t let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t y = y ^ ctx.sbox[2][c];\n\t y = y + ctx.sbox[3][d];\n\n\t return y;\n\t }\n\n\t function BlowFish_Encrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = 0; i < N; ++i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[N];\n\t Xl = Xl ^ ctx.pbox[N + 1];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t function BlowFish_Decrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = N + 1; i > 1; --i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[1];\n\t Xl = Xl ^ ctx.pbox[0];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t /**\n\t * Initialization ctx's pbox and sbox.\n\t *\n\t * @param {Object} ctx The object has pbox and sbox.\n\t * @param {Array} key An array of 32-bit words.\n\t * @param {int} keysize The length of the key.\n\t *\n\t * @example\n\t *\n\t * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t */\n\t function BlowFishInit(ctx, key, keysize)\n\t {\n\t for(let Row = 0; Row < 4; Row++)\n\t {\n\t ctx.sbox[Row] = [];\n\t for(let Col = 0; Col < 256; Col++)\n\t {\n\t ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t }\n\t }\n\n\t let keyIndex = 0;\n\t for(let index = 0; index < N + 2; index++)\n\t {\n\t ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t keyIndex++;\n\t if(keyIndex >= keysize)\n\t {\n\t keyIndex = 0;\n\t }\n\t }\n\n\t let Data1 = 0;\n\t let Data2 = 0;\n\t let res = 0;\n\t for(let i = 0; i < N + 2; i += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.pbox[i] = Data1;\n\t ctx.pbox[i + 1] = Data2;\n\t }\n\n\t for(let i = 0; i < 4; i++)\n\t {\n\t for(let j = 0; j < 256; j += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.sbox[i][j] = Data1;\n\t ctx.sbox[i][j + 1] = Data2;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t /**\n\t * Blowfish block cipher algorithm.\n\t */\n\t var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t //Initialization pbox and sbox\n\t BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t blockSize: 64/32,\n\n\t keySize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt, hasher) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t if (!hasher) {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t } else {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t }\n\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t * @property {number} iterations The number of iterations to perform. Default: 250000\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA256,\n\t iterations: 250000\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));","const INITIAL_STATE = 1;\nconst FAIL_STATE = 0;\n\n/**\n * A StateMachine represents a deterministic finite automaton.\n * It can perform matches over a sequence of values, similar to a regular expression.\n */\nexport default class StateMachine {\n constructor(dfa) {\n this.stateTable = dfa.stateTable;\n this.accepting = dfa.accepting;\n this.tags = dfa.tags;\n }\n\n /**\n * Returns an iterable object that yields pattern matches over the input sequence.\n * Matches are of the form [startIndex, endIndex, tags].\n */\n match(str) {\n let self = this;\n return {\n *[Symbol.iterator]() {\n let state = INITIAL_STATE;\n let startRun = null;\n let lastAccepting = null;\n let lastState = null;\n\n for (let p = 0; p < str.length; p++) {\n let c = str[p];\n\n lastState = state;\n state = self.stateTable[state][c];\n\n if (state === FAIL_STATE) {\n // yield the last match if any\n if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {\n yield [startRun, lastAccepting, self.tags[lastState]];\n }\n\n // reset the state as if we started over from the initial state\n state = self.stateTable[INITIAL_STATE][c];\n startRun = null;\n }\n\n // start a run if not in the failure state\n if (state !== FAIL_STATE && startRun == null) {\n startRun = p;\n }\n\n // if accepting, mark the potential match end\n if (self.accepting[state]) {\n lastAccepting = p;\n }\n\n // reset the state to the initial state if we get into the failure state\n if (state === FAIL_STATE) {\n state = INITIAL_STATE;\n }\n }\n\n // yield the last match if any\n if (startRun != null && lastAccepting != null && lastAccepting >= startRun) {\n yield [startRun, lastAccepting, self.tags[state]];\n }\n }\n };\n }\n\n /**\n * For each match over the input sequence, action functions matching\n * the tag definitions in the input pattern are called with the startIndex,\n * endIndex, and sub-match sequence.\n */\n apply(str, actions) {\n for (let [start, end, tags] of this.match(str)) {\n for (let tag of tags) {\n if (typeof actions[tag] === 'function') {\n actions[tag](start, end, str.slice(start, end + 1));\n }\n }\n }\n }\n}\n","/*\n * MIT LICENSE\n * Copyright (c) 2011 Devon Govett\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this\n * software and associated documentation files (the \"Software\"), to deal in the Software\n * without restriction, including without limitation the rights to use, copy, modify, merge,\n * publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons\n * to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or\n * substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING\n * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nconst fs = require('fs');\nconst zlib = require('zlib');\n\nmodule.exports = class PNG {\n static decode(path, fn) {\n return fs.readFile(path, function(err, file) {\n const png = new PNG(file);\n return png.decode(pixels => fn(pixels));\n });\n }\n\n static load(path) {\n const file = fs.readFileSync(path);\n return new PNG(file);\n }\n\n constructor(data) {\n let i;\n this.data = data;\n this.pos = 8; // Skip the default header\n\n this.palette = [];\n this.imgData = [];\n this.transparency = {};\n this.text = {};\n\n while (true) {\n const chunkSize = this.readUInt32();\n let section = '';\n for (i = 0; i < 4; i++) {\n section += String.fromCharCode(this.data[this.pos++]);\n }\n\n switch (section) {\n case 'IHDR':\n // we can grab interesting values from here (like width, height, etc)\n this.width = this.readUInt32();\n this.height = this.readUInt32();\n this.bits = this.data[this.pos++];\n this.colorType = this.data[this.pos++];\n this.compressionMethod = this.data[this.pos++];\n this.filterMethod = this.data[this.pos++];\n this.interlaceMethod = this.data[this.pos++];\n break;\n\n case 'PLTE':\n this.palette = this.read(chunkSize);\n break;\n\n case 'IDAT':\n for (i = 0; i < chunkSize; i++) {\n this.imgData.push(this.data[this.pos++]);\n }\n break;\n\n case 'tRNS':\n // This chunk can only occur once and it must occur after the\n // PLTE chunk and before the IDAT chunk.\n this.transparency = {};\n switch (this.colorType) {\n case 3:\n // Indexed color, RGB. Each byte in this chunk is an alpha for\n // the palette index in the PLTE (\"palette\") chunk up until the\n // last non-opaque entry. Set up an array, stretching over all\n // palette entries which will be 0 (opaque) or 1 (transparent).\n this.transparency.indexed = this.read(chunkSize);\n var short = 255 - this.transparency.indexed.length;\n if (short > 0) {\n for (i = 0; i < short; i++) {\n this.transparency.indexed.push(255);\n }\n }\n break;\n case 0:\n // Greyscale. Corresponding to entries in the PLTE chunk.\n // Grey is two bytes, range 0 .. (2 ^ bit-depth) - 1\n this.transparency.grayscale = this.read(chunkSize)[0];\n break;\n case 2:\n // True color with proper alpha channel.\n this.transparency.rgb = this.read(chunkSize);\n break;\n }\n break;\n\n case 'tEXt':\n var text = this.read(chunkSize);\n var index = text.indexOf(0);\n var key = String.fromCharCode.apply(String, text.slice(0, index));\n this.text[key] = String.fromCharCode.apply(\n String,\n text.slice(index + 1)\n );\n break;\n\n case 'IEND':\n // we've got everything we need!\n switch (this.colorType) {\n case 0:\n case 3:\n case 4:\n this.colors = 1;\n break;\n case 2:\n case 6:\n this.colors = 3;\n break;\n }\n\n this.hasAlphaChannel = [4, 6].includes(this.colorType);\n var colors = this.colors + (this.hasAlphaChannel ? 1 : 0);\n this.pixelBitlength = this.bits * colors;\n\n switch (this.colors) {\n case 1:\n this.colorSpace = 'DeviceGray';\n break;\n case 3:\n this.colorSpace = 'DeviceRGB';\n break;\n }\n\n this.imgData = new Buffer(this.imgData);\n return;\n break;\n\n default:\n // unknown (or unimportant) section, skip it\n this.pos += chunkSize;\n }\n\n this.pos += 4; // Skip the CRC\n\n if (this.pos > this.data.length) {\n throw new Error('Incomplete or corrupt PNG file');\n }\n }\n }\n\n read(bytes) {\n const result = new Array(bytes);\n for (let i = 0; i < bytes; i++) {\n result[i] = this.data[this.pos++];\n }\n return result;\n }\n\n readUInt32() {\n const b1 = this.data[this.pos++] << 24;\n const b2 = this.data[this.pos++] << 16;\n const b3 = this.data[this.pos++] << 8;\n const b4 = this.data[this.pos++];\n return b1 | b2 | b3 | b4;\n }\n\n readUInt16() {\n const b1 = this.data[this.pos++] << 8;\n const b2 = this.data[this.pos++];\n return b1 | b2;\n }\n\n decodePixels(fn) {\n return zlib.inflate(this.imgData, (err, data) => {\n if (err) {\n throw err;\n }\n\n const { width, height } = this;\n const pixelBytes = this.pixelBitlength / 8;\n\n const pixels = new Buffer(width * height * pixelBytes);\n const { length } = data;\n let pos = 0;\n\n function pass(x0, y0, dx, dy, singlePass = false) {\n const w = Math.ceil((width - x0) / dx);\n const h = Math.ceil((height - y0) / dy);\n const scanlineLength = pixelBytes * w;\n const buffer = singlePass ? pixels : new Buffer(scanlineLength * h);\n let row = 0;\n let c = 0;\n while (row < h && pos < length) {\n var byte, col, i, left, upper;\n switch (data[pos++]) {\n case 0: // None\n for (i = 0; i < scanlineLength; i++) {\n buffer[c++] = data[pos++];\n }\n break;\n\n case 1: // Sub\n for (i = 0; i < scanlineLength; i++) {\n byte = data[pos++];\n left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n buffer[c++] = (byte + left) % 256;\n }\n break;\n\n case 2: // Up\n for (i = 0; i < scanlineLength; i++) {\n byte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n upper =\n row &&\n buffer[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n buffer[c++] = (upper + byte) % 256;\n }\n break;\n\n case 3: // Average\n for (i = 0; i < scanlineLength; i++) {\n byte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n upper =\n row &&\n buffer[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n buffer[c++] = (byte + Math.floor((left + upper) / 2)) % 256;\n }\n break;\n\n case 4: // Paeth\n for (i = 0; i < scanlineLength; i++) {\n var paeth, upperLeft;\n byte = data[pos++];\n col = (i - (i % pixelBytes)) / pixelBytes;\n left = i < pixelBytes ? 0 : buffer[c - pixelBytes];\n\n if (row === 0) {\n upper = upperLeft = 0;\n } else {\n upper =\n buffer[\n (row - 1) * scanlineLength +\n col * pixelBytes +\n (i % pixelBytes)\n ];\n upperLeft =\n col &&\n buffer[\n (row - 1) * scanlineLength +\n (col - 1) * pixelBytes +\n (i % pixelBytes)\n ];\n }\n\n const p = left + upper - upperLeft;\n const pa = Math.abs(p - left);\n const pb = Math.abs(p - upper);\n const pc = Math.abs(p - upperLeft);\n\n if (pa <= pb && pa <= pc) {\n paeth = left;\n } else if (pb <= pc) {\n paeth = upper;\n } else {\n paeth = upperLeft;\n }\n\n buffer[c++] = (byte + paeth) % 256;\n }\n break;\n\n default:\n throw new Error(`Invalid filter algorithm: ${data[pos - 1]}`);\n }\n\n if (!singlePass) {\n let pixelsPos = ((y0 + row * dy) * width + x0) * pixelBytes;\n let bufferPos = row * scanlineLength;\n for (i = 0; i < w; i++) {\n for (let j = 0; j < pixelBytes; j++)\n pixels[pixelsPos++] = buffer[bufferPos++];\n pixelsPos += (dx - 1) * pixelBytes;\n }\n }\n\n row++;\n }\n }\n\n if (this.interlaceMethod === 1) {\n /*\n 1 6 4 6 2 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n 3 6 4 6 3 6 4 6\n 7 7 7 7 7 7 7 7\n 5 6 5 6 5 6 5 6\n 7 7 7 7 7 7 7 7\n */\n pass(0, 0, 8, 8); // 1\n pass(4, 0, 8, 8); // 2\n pass(0, 4, 4, 8); // 3\n pass(2, 0, 4, 4); // 4\n pass(0, 2, 2, 4); // 5\n pass(1, 0, 2, 2); // 6\n pass(0, 1, 1, 2); // 7\n } else {\n pass(0, 0, 1, 1, true);\n }\n\n return fn(pixels);\n });\n }\n\n decodePalette() {\n const { palette } = this;\n const { length } = palette;\n const transparency = this.transparency.indexed || [];\n const ret = new Buffer(transparency.length + length);\n let pos = 0;\n let c = 0;\n\n for (let i = 0; i < length; i += 3) {\n var left;\n ret[pos++] = palette[i];\n ret[pos++] = palette[i + 1];\n ret[pos++] = palette[i + 2];\n ret[pos++] = (left = transparency[c++]) != null ? left : 255;\n }\n\n return ret;\n }\n\n copyToImageData(imageData, pixels) {\n let j, k;\n let { colors } = this;\n let palette = null;\n let alpha = this.hasAlphaChannel;\n\n if (this.palette.length) {\n palette =\n this._decodedPalette || (this._decodedPalette = this.decodePalette());\n colors = 4;\n alpha = true;\n }\n\n const data = imageData.data || imageData;\n const { length } = data;\n const input = palette || pixels;\n let i = (j = 0);\n\n if (colors === 1) {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n const v = input[k++];\n data[i++] = v;\n data[i++] = v;\n data[i++] = v;\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n } else {\n while (i < length) {\n k = palette ? pixels[i / 4] * 4 : j;\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = input[k++];\n data[i++] = alpha ? input[k++] : 255;\n j = k;\n }\n }\n }\n\n decode(fn) {\n const ret = new Buffer(this.width * this.height * 4);\n return this.decodePixels(pixels => {\n this.copyToImageData(ret, pixels);\n return fn(ret);\n });\n }\n};\n","/* eslint-disable node/no-deprecated-api */\n\n'use strict'\n\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\nvar safer = {}\n\nvar key\n\nfor (key in buffer) {\n if (!buffer.hasOwnProperty(key)) continue\n if (key === 'SlowBuffer' || key === 'Buffer') continue\n safer[key] = buffer[key]\n}\n\nvar Safer = safer.Buffer = {}\nfor (key in Buffer) {\n if (!Buffer.hasOwnProperty(key)) continue\n if (key === 'allocUnsafe' || key === 'allocUnsafeSlow') continue\n Safer[key] = Buffer[key]\n}\n\nsafer.Buffer.prototype = Buffer.prototype\n\nif (!Safer.from || Safer.from === Uint8Array.from) {\n Safer.from = function (value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('The \"value\" argument must not be of type number. Received type ' + typeof value)\n }\n if (value && typeof value.length === 'undefined') {\n throw new TypeError('The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type ' + typeof value)\n }\n return Buffer(value, encodingOrOffset, length)\n }\n}\n\nif (!Safer.alloc) {\n Safer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('The \"size\" argument must be of type number. Received type ' + typeof size)\n }\n if (size < 0 || size >= 2 * (1 << 30)) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n var buf = Buffer(size)\n if (!fill || fill.length === 0) {\n buf.fill(0)\n } else if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n return buf\n }\n}\n\nif (!safer.kStringMaxLength) {\n try {\n safer.kStringMaxLength = process.binding('buffer').kStringMaxLength\n } catch (e) {\n // we can't determine kStringMaxLength in environments where process.binding\n // is unsupported, so let's not set it\n }\n}\n\nif (!safer.constants) {\n safer.constants = {\n MAX_LENGTH: safer.kMaxLength\n }\n if (safer.kStringMaxLength) {\n safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength\n }\n}\n\nmodule.exports = safer\n","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar _require = require('buffer'),\n Buffer = _require.Buffer;\nvar _require2 = require('util'),\n inspect = _require2.inspect;\nvar custom = inspect && inspect.custom || 'inspect';\nfunction copyBuffer(src, target, offset) {\n Buffer.prototype.copy.call(src, target, offset);\n}\nmodule.exports = /*#__PURE__*/function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n _createClass(BufferList, [{\n key: \"push\",\n value: function push(v) {\n var entry = {\n data: v,\n next: null\n };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n }\n }, {\n key: \"unshift\",\n value: function unshift(v) {\n var entry = {\n data: v,\n next: this.head\n };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n }\n }, {\n key: \"shift\",\n value: function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n this.head = this.tail = null;\n this.length = 0;\n }\n }, {\n key: \"join\",\n value: function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) ret += s + p.data;\n return ret;\n }\n }, {\n key: \"concat\",\n value: function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n }\n\n // Consumes a specified amount of bytes or characters from the buffered data.\n }, {\n key: \"consume\",\n value: function consume(n, hasStrings) {\n var ret;\n if (n < this.head.data.length) {\n // `slice` is the same for buffers and strings.\n ret = this.head.data.slice(0, n);\n this.head.data = this.head.data.slice(n);\n } else if (n === this.head.data.length) {\n // First chunk is a perfect match.\n ret = this.shift();\n } else {\n // Result spans more than one buffer.\n ret = hasStrings ? this._getString(n) : this._getBuffer(n);\n }\n return ret;\n }\n }, {\n key: \"first\",\n value: function first() {\n return this.head.data;\n }\n\n // Consumes a specified amount of characters from the buffered data.\n }, {\n key: \"_getString\",\n value: function _getString(n) {\n var p = this.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Consumes a specified amount of bytes from the buffered data.\n }, {\n key: \"_getBuffer\",\n value: function _getBuffer(n) {\n var ret = Buffer.allocUnsafe(n);\n var p = this.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) this.head = p.next;else this.head = this.tail = null;\n } else {\n this.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n this.length -= c;\n return ret;\n }\n\n // Make sure the linked list only shows the minimal necessary information.\n }, {\n key: custom,\n value: function value(_, options) {\n return inspect(this, _objectSpread(_objectSpread({}, options), {}, {\n // Only inspect one level.\n depth: 0,\n // It should not recurse.\n customInspect: false\n }));\n }\n }]);\n return BufferList;\n}();","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","const inflate = require('tiny-inflate');\nconst { swap32LE } = require('./swap');\n\n// Shift size for getting the index-1 table offset.\nconst SHIFT_1 = 6 + 5;\n\n// Shift size for getting the index-2 table offset.\nconst SHIFT_2 = 5;\n\n// Difference between the two shift sizes,\n// for getting an index-1 offset from an index-2 offset. 6=11-5\nconst SHIFT_1_2 = SHIFT_1 - SHIFT_2;\n\n// Number of index-1 entries for the BMP. 32=0x20\n// This part of the index-1 table is omitted from the serialized form.\nconst OMITTED_BMP_INDEX_1_LENGTH = 0x10000 >> SHIFT_1;\n\n// Number of entries in an index-2 block. 64=0x40\nconst INDEX_2_BLOCK_LENGTH = 1 << SHIFT_1_2;\n\n// Mask for getting the lower bits for the in-index-2-block offset. */\nconst INDEX_2_MASK = INDEX_2_BLOCK_LENGTH - 1;\n\n// Shift size for shifting left the index array values.\n// Increases possible data size with 16-bit index values at the cost\n// of compactability.\n// This requires data blocks to be aligned by DATA_GRANULARITY.\nconst INDEX_SHIFT = 2;\n\n// Number of entries in a data block. 32=0x20\nconst DATA_BLOCK_LENGTH = 1 << SHIFT_2;\n\n// Mask for getting the lower bits for the in-data-block offset.\nconst DATA_MASK = DATA_BLOCK_LENGTH - 1;\n\n// The part of the index-2 table for U+D800..U+DBFF stores values for\n// lead surrogate code _units_ not code _points_.\n// Values for lead surrogate code _points_ are indexed with this portion of the table.\n// Length=32=0x20=0x400>>SHIFT_2. (There are 1024=0x400 lead surrogates.)\nconst LSCP_INDEX_2_OFFSET = 0x10000 >> SHIFT_2;\nconst LSCP_INDEX_2_LENGTH = 0x400 >> SHIFT_2;\n\n// Count the lengths of both BMP pieces. 2080=0x820\nconst INDEX_2_BMP_LENGTH = LSCP_INDEX_2_OFFSET + LSCP_INDEX_2_LENGTH;\n\n// The 2-byte UTF-8 version of the index-2 table follows at offset 2080=0x820.\n// Length 32=0x20 for lead bytes C0..DF, regardless of SHIFT_2.\nconst UTF8_2B_INDEX_2_OFFSET = INDEX_2_BMP_LENGTH;\nconst UTF8_2B_INDEX_2_LENGTH = 0x800 >> 6; // U+0800 is the first code point after 2-byte UTF-8\n\n// The index-1 table, only used for supplementary code points, at offset 2112=0x840.\n// Variable length, for code points up to highStart, where the last single-value range starts.\n// Maximum length 512=0x200=0x100000>>SHIFT_1.\n// (For 0x100000 supplementary code points U+10000..U+10ffff.)\n//\n// The part of the index-2 table for supplementary code points starts\n// after this index-1 table.\n//\n// Both the index-1 table and the following part of the index-2 table\n// are omitted completely if there is only BMP data.\nconst INDEX_1_OFFSET = UTF8_2B_INDEX_2_OFFSET + UTF8_2B_INDEX_2_LENGTH;\n\n// The alignment size of a data block. Also the granularity for compaction.\nconst DATA_GRANULARITY = 1 << INDEX_SHIFT;\n\nclass UnicodeTrie {\n constructor(data) {\n const isBuffer = (typeof data.readUInt32BE === 'function') && (typeof data.slice === 'function');\n\n if (isBuffer || data instanceof Uint8Array) {\n // read binary format\n let uncompressedLength;\n if (isBuffer) {\n this.highStart = data.readUInt32LE(0);\n this.errorValue = data.readUInt32LE(4);\n uncompressedLength = data.readUInt32LE(8);\n data = data.slice(12);\n } else {\n const view = new DataView(data.buffer);\n this.highStart = view.getUint32(0, true);\n this.errorValue = view.getUint32(4, true);\n uncompressedLength = view.getUint32(8, true);\n data = data.subarray(12);\n }\n\n // double inflate the actual trie data\n data = inflate(data, new Uint8Array(uncompressedLength));\n data = inflate(data, new Uint8Array(uncompressedLength));\n\n // swap bytes from little-endian\n swap32LE(data);\n\n this.data = new Uint32Array(data.buffer);\n\n } else {\n // pre-parsed data\n ({ data: this.data, highStart: this.highStart, errorValue: this.errorValue } = data);\n }\n }\n\n get(codePoint) {\n let index;\n if ((codePoint < 0) || (codePoint > 0x10ffff)) {\n return this.errorValue;\n }\n\n if ((codePoint < 0xd800) || ((codePoint > 0xdbff) && (codePoint <= 0xffff))) {\n // Ordinary BMP code point, excluding leading surrogates.\n // BMP uses a single level lookup. BMP index starts at offset 0 in the index.\n // data is stored in the index array itself.\n index = (this.data[codePoint >> SHIFT_2] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n return this.data[index];\n }\n\n if (codePoint <= 0xffff) {\n // Lead Surrogate Code Point. A Separate index section is stored for\n // lead surrogate code units and code points.\n // The main index has the code unit data.\n // For this function, we need the code point data.\n index = (this.data[LSCP_INDEX_2_OFFSET + ((codePoint - 0xd800) >> SHIFT_2)] << INDEX_SHIFT) + (codePoint & DATA_MASK);\n return this.data[index];\n }\n\n if (codePoint < this.highStart) {\n // Supplemental code point, use two-level lookup.\n index = this.data[(INDEX_1_OFFSET - OMITTED_BMP_INDEX_1_LENGTH) + (codePoint >> SHIFT_1)];\n index = this.data[index + ((codePoint >> SHIFT_2) & INDEX_2_MASK)];\n index = (index << INDEX_SHIFT) + (codePoint & DATA_MASK);\n return this.data[index];\n }\n\n return this.data[this.data.length - DATA_GRANULARITY];\n }\n}\n\nmodule.exports = UnicodeTrie;","const isBigEndian = (new Uint8Array(new Uint32Array([0x12345678]).buffer)[0] === 0x12);\n\nconst swap = (b, n, m) => {\n let i = b[n];\n b[n] = b[m];\n b[m] = i;\n};\n\nconst swap32 = array => {\n const len = array.length;\n for (let i = 0; i < len; i += 4) {\n swap(array, i, i + 3);\n swap(array, i + 1, i + 2);\n }\n};\n\nconst swap32LE = array => {\n if (isBigEndian) {\n swap32(array);\n }\n};\n\nmodule.exports = {\n swap32LE: swap32LE\n};\n","var SVGtoPDF = require('./svg-to-pdfkit/source.js');\r\n\r\nmodule.exports = SVGtoPDF;\r\n","var SVGtoPDF = function(doc, svg, x, y, options) {\r\n \"use strict\";\r\n\r\n const NamedColors = {aliceblue: [240,248,255], antiquewhite: [250,235,215], aqua: [0,255,255], aquamarine: [127,255,212], azure: [240,255,255], beige: [245,245,220], bisque: [255,228,196], black: [0,0,0], blanchedalmond: [255,235,205], blue: [0,0,255], blueviolet: [138,43,226], brown: [165,42,42], burlywood: [222,184,135], cadetblue: [95,158,160], chartreuse: [127,255,0],\r\n chocolate: [210,105,30], coral: [255,127,80], cornflowerblue: [100,149,237], cornsilk: [255,248,220], crimson: [220,20,60], cyan: [0,255,255], darkblue: [0,0,139], darkcyan: [0,139,139], darkgoldenrod: [184,134,11], darkgray: [169,169,169], darkgrey: [169,169,169], darkgreen: [0,100,0], darkkhaki: [189,183,107], darkmagenta: [139,0,139], darkolivegreen: [85,107,47],\r\n darkorange: [255,140,0], darkorchid: [153,50,204], darkred: [139,0,0], darksalmon: [233,150,122], darkseagreen: [143,188,143], darkslateblue: [72,61,139], darkslategray: [47,79,79], darkslategrey: [47,79,79], darkturquoise: [0,206,209], darkviolet: [148,0,211], deeppink: [255,20,147], deepskyblue: [0,191,255], dimgray: [105,105,105], dimgrey: [105,105,105],\r\n dodgerblue: [30,144,255], firebrick: [178,34,34], floralwhite: [255,250,240], forestgreen: [34,139,34], fuchsia: [255,0,255], gainsboro: [220,220,220], ghostwhite: [248,248,255], gold: [255,215,0], goldenrod: [218,165,32], gray: [128,128,128], grey: [128,128,128], green: [0,128,0], greenyellow: [173,255,47], honeydew: [240,255,240], hotpink: [255,105,180],\r\n indianred: [205,92,92], indigo: [75,0,130], ivory: [255,255,240], khaki: [240,230,140], lavender: [230,230,250], lavenderblush: [255,240,245], lawngreen: [124,252,0], lemonchiffon: [255,250,205], lightblue: [173,216,230], lightcoral: [240,128,128], lightcyan: [224,255,255], lightgoldenrodyellow: [250,250,210], lightgray: [211,211,211], lightgrey: [211,211,211],\r\n lightgreen: [144,238,144], lightpink: [255,182,193], lightsalmon: [255,160,122], lightseagreen: [32,178,170], lightskyblue: [135,206,250], lightslategray: [119,136,153], lightslategrey: [119,136,153], lightsteelblue: [176,196,222], lightyellow: [255,255,224], lime: [0,255,0], limegreen: [50,205,50], linen: [250,240,230], magenta: [255,0,255], maroon: [128,0,0],\r\n mediumaquamarine: [102,205,170], mediumblue: [0,0,205], mediumorchid: [186,85,211], mediumpurple: [147,112,219], mediumseagreen: [60,179,113], mediumslateblue: [123,104,238], mediumspringgreen: [0,250,154], mediumturquoise: [72,209,204], mediumvioletred: [199,21,133], midnightblue: [25,25,112], mintcream: [245,255,250], mistyrose: [255,228,225], moccasin: [255,228,181],\r\n navajowhite: [255,222,173], navy: [0,0,128], oldlace: [253,245,230], olive: [128,128,0], olivedrab: [107,142,35], orange: [255,165,0], orangered: [255,69,0], orchid: [218,112,214], palegoldenrod: [238,232,170], palegreen: [152,251,152], paleturquoise: [175,238,238], palevioletred: [219,112,147], papayawhip: [255,239,213], peachpuff: [255,218,185], peru: [205,133,63],\r\n pink: [255,192,203], plum: [221,160,221], powderblue: [176,224,230], purple: [128,0,128], rebeccapurple: [102,51,153], red: [255,0,0], rosybrown: [188,143,143], royalblue: [65,105,225], saddlebrown: [139,69,19], salmon: [250,128,114], sandybrown: [244,164,96], seagreen: [46,139,87], seashell: [255,245,238], sienna: [160,82,45], silver: [192,192,192], skyblue: [135,206,235],\r\n slateblue: [106,90,205], slategray: [112,128,144], slategrey: [112,128,144], snow: [255,250,250], springgreen: [0,255,127], steelblue: [70,130,180], tan: [210,180,140], teal: [0,128,128], thistle: [216,191,216], tomato: [255,99,71], turquoise: [64,224,208], violet: [238,130,238], wheat: [245,222,179], white: [255,255,255], whitesmoke: [245,245,245], yellow: [255,255,0]};\r\n const DefaultColors = {black: [NamedColors.black, 1], white: [NamedColors.white, 1], transparent: [NamedColors.black, 0]};\r\n const Entities = {quot: 34, amp: 38, lt: 60, gt: 62, apos: 39, OElig: 338, oelig: 339, Scaron: 352, scaron: 353, Yuml: 376, circ: 710, tilde: 732, ensp: 8194, emsp: 8195, thinsp: 8201, zwnj: 8204, zwj: 8205, lrm: 8206, rlm: 8207, ndash: 8211, mdash: 8212, lsquo: 8216, rsquo: 8217, sbquo: 8218, ldquo: 8220, rdquo: 8221, bdquo: 8222, dagger: 8224, Dagger: 8225, permil: 8240, lsaquo: 8249,\r\n rsaquo: 8250, euro: 8364, nbsp: 160, iexcl: 161, cent: 162, pound: 163, curren: 164, yen: 165, brvbar: 166, sect: 167, uml: 168, copy: 169, ordf: 170, laquo: 171, not: 172, shy: 173, reg: 174, macr: 175, deg: 176, plusmn: 177, sup2: 178, sup3: 179, acute: 180, micro: 181, para: 182, middot: 183, cedil: 184, sup1: 185, ordm: 186, raquo: 187, frac14: 188, frac12: 189, frac34: 190,\r\n iquest: 191, Agrave: 192, Aacute: 193, Acirc: 194, Atilde: 195, Auml: 196, Aring: 197, AElig: 198, Ccedil: 199, Egrave: 200, Eacute: 201, Ecirc: 202, Euml: 203, Igrave: 204, Iacute: 205, Icirc: 206, Iuml: 207, ETH: 208, Ntilde: 209, Ograve: 210, Oacute: 211, Ocirc: 212, Otilde: 213, Ouml: 214, times: 215, Oslash: 216, Ugrave: 217, Uacute: 218, Ucirc: 219, Uuml: 220, Yacute: 221,\r\n THORN: 222, szlig: 223, agrave: 224, aacute: 225, acirc: 226, atilde: 227, auml: 228, aring: 229, aelig: 230, ccedil: 231, egrave: 232, eacute: 233, ecirc: 234, euml: 235, igrave: 236, iacute: 237, icirc: 238, iuml: 239, eth: 240, ntilde: 241, ograve: 242, oacute: 243, ocirc: 244, otilde: 245, ouml: 246, divide: 247, oslash: 248, ugrave: 249, uacute: 250, ucirc: 251, uuml: 252,\r\n yacute: 253, thorn: 254, yuml: 255, fnof: 402, Alpha: 913, Beta: 914, Gamma: 915, Delta: 916, Epsilon: 917, Zeta: 918, Eta: 919, Theta: 920, Iota: 921, Kappa: 922, Lambda: 923, Mu: 924, Nu: 925, Xi: 926, Omicron: 927, Pi: 928, Rho: 929, Sigma: 931, Tau: 932, Upsilon: 933, Phi: 934, Chi: 935, Psi: 936, Omega: 937, alpha: 945, beta: 946, gamma: 947, delta: 948, epsilon: 949,\r\n zeta: 950, eta: 951, theta: 952, iota: 953, kappa: 954, lambda: 955, mu: 956, nu: 957, xi: 958, omicron: 959, pi: 960, rho: 961, sigmaf: 962, sigma: 963, tau: 964, upsilon: 965, phi: 966, chi: 967, psi: 968, omega: 969, thetasym: 977, upsih: 978, piv: 982, bull: 8226, hellip: 8230, prime: 8242, Prime: 8243, oline: 8254, frasl: 8260, weierp: 8472, image: 8465, real: 8476,\r\n trade: 8482, alefsym: 8501, larr: 8592, uarr: 8593, rarr: 8594, darr: 8595, harr: 8596, crarr: 8629, lArr: 8656, uArr: 8657, rArr: 8658, dArr: 8659, hArr: 8660, forall: 8704, part: 8706, exist: 8707, empty: 8709, nabla: 8711, isin: 8712, notin: 8713, ni: 8715, prod: 8719, sum: 8721, minus: 8722, lowast: 8727, radic: 8730, prop: 8733, infin: 8734, ang: 8736, and: 8743, or: 8744,\r\n cap: 8745, cup: 8746, int: 8747, there4: 8756, sim: 8764, cong: 8773, asymp: 8776, ne: 8800, equiv: 8801, le: 8804, ge: 8805, sub: 8834, sup: 8835, nsub: 8836, sube: 8838, supe: 8839, oplus: 8853, otimes: 8855, perp: 8869, sdot: 8901, lceil: 8968, rceil: 8969, lfloor: 8970, rfloor: 8971, lang: 9001, rang: 9002, loz: 9674, spades: 9824, clubs: 9827, hearts: 9829, diams: 9830};\r\n const PathArguments = {A: 7, a: 7, C: 6, c: 6, H: 1, h: 1, L: 2, l: 2, M: 2, m: 2, Q: 4, q: 4, S: 4, s: 4, T: 2, t: 2, V: 1, v: 1, Z: 0, z: 0};\r\n const PathFlags = {A3: true, A4: true, a3: true, a4: true};\r\n const Properties = {\r\n 'color': {inherit: true, initial: undefined},\r\n 'visibility': {inherit: true, initial: 'visible', values: {'hidden': 'hidden', 'collapse': 'hidden', 'visible':'visible'}},\r\n 'fill': {inherit: true, initial: DefaultColors.black},\r\n 'stroke': {inherit: true, initial: 'none'},\r\n 'stop-color': {inherit: false, initial: DefaultColors.black},\r\n 'fill-opacity': {inherit: true, initial: 1},\r\n 'stroke-opacity': {inherit: true, initial: 1},\r\n 'stop-opacity': {inherit: false, initial: 1},\r\n 'fill-rule': {inherit: true, initial: 'nonzero', values: {'nonzero':'nonzero', 'evenodd':'evenodd'}},\r\n 'clip-rule': {inherit: true, initial: 'nonzero', values: {'nonzero':'nonzero', 'evenodd':'evenodd'}},\r\n 'stroke-width': {inherit: true, initial: 1},\r\n 'stroke-dasharray': {inherit: true, initial: []},\r\n 'stroke-dashoffset': {inherit: true, initial: 0},\r\n 'stroke-miterlimit': {inherit: true, initial: 4},\r\n 'stroke-linejoin': {inherit: true, initial: 'miter', values: {'miter':'miter', 'round':'round', 'bevel':'bevel'}},\r\n 'stroke-linecap': {inherit: true, initial: 'butt', values: {'butt':'butt', 'round':'round', 'square':'square'}},\r\n 'font-size': {inherit: true, initial: 16, values: {'xx-small':9, 'x-small':10, 'small':13, 'medium':16, 'large':18, 'x-large':24, 'xx-large':32}},\r\n 'font-family': {inherit: true, initial: 'sans-serif'},\r\n 'font-weight': {inherit: true, initial: 'normal', values: {'600':'bold', '700':'bold', '800':'bold', '900':'bold', 'bold':'bold', 'bolder':'bold', '500':'normal', '400':'normal', '300':'normal', '200':'normal', '100':'normal', 'normal':'normal', 'lighter':'normal'}},\r\n 'font-style': {inherit: true, initial: 'normal', values: {'italic':'italic', 'oblique':'italic', 'normal':'normal'}},\r\n 'text-anchor': {inherit: true, initial: 'start', values: {'start':'start', 'middle':'middle', 'end':'end'}},\r\n 'direction': {inherit: true, initial: 'ltr', values: {'ltr':'ltr', 'rtl':'rtl'}},\r\n 'dominant-baseline': {inherit: true, initial: 'baseline', values: {'auto':'baseline', 'baseline':'baseline', 'before-edge':'before-edge', 'text-before-edge':'before-edge', 'middle':'middle', 'central':'central', 'after-edge':'after-edge', 'text-after-edge':'after-edge', 'ideographic':'ideographic', 'alphabetic':'alphabetic', 'hanging':'hanging', 'mathematical':'mathematical'}},\r\n 'alignment-baseline': {inherit: false, initial: undefined, values: {'auto':'baseline', 'baseline':'baseline', 'before-edge':'before-edge', 'text-before-edge':'before-edge', 'middle':'middle', 'central':'central', 'after-edge':'after-edge', 'text-after-edge':'after-edge', 'ideographic':'ideographic', 'alphabetic':'alphabetic', 'hanging':'hanging', 'mathematical':'mathematical'}},\r\n 'baseline-shift': {inherit: true, initial: 'baseline', values: {'baseline':'baseline', 'sub':'sub', 'super':'super'}},\r\n 'word-spacing': {inherit: true, initial: 0, values: {normal:0}},\r\n 'letter-spacing': {inherit: true, initial: 0, values: {normal:0}},\r\n 'text-decoration': {inherit: false, initial: 'none', values: {'none':'none', 'underline':'underline', 'overline':'overline', 'line-through':'line-through'}},\r\n 'xml:space': {inherit: true, initial: 'default', css: 'white-space', values: {'preserve':'preserve', 'default':'default', 'pre':'preserve', 'pre-line':'preserve', 'pre-wrap':'preserve', 'nowrap': 'default'}},\r\n 'marker-start': {inherit: true, initial: 'none'},\r\n 'marker-mid': {inherit: true, initial: 'none'},\r\n 'marker-end': {inherit: true, initial: 'none'},\r\n 'opacity': {inherit: false, initial: 1},\r\n 'transform': {inherit: false, initial: [1, 0, 0, 1, 0, 0]},\r\n 'display': {inherit: false, initial: 'inline', values: {'none':'none', 'inline':'inline', 'block':'inline'}},\r\n 'clip-path': {inherit: false, initial: 'none'},\r\n 'mask': {inherit: false, initial: 'none'},\r\n 'overflow': {inherit: false, initial: 'hidden', values: {'hidden':'hidden', 'scroll':'hidden', 'visible':'visible'}}\r\n };\r\n\r\n function docBeginGroup(bbox) {\r\n let group = new (function PDFGroup() {})();\r\n group.name = 'G' + (doc._groupCount = (doc._groupCount || 0) + 1);\r\n group.resources = doc.ref();\r\n group.xobj = doc.ref({\r\n Type: 'XObject',\r\n Subtype: 'Form',\r\n FormType: 1,\r\n BBox: bbox,\r\n Group: {S: 'Transparency', CS: 'DeviceRGB', I: true, K: false},\r\n Resources: group.resources\r\n });\r\n group.xobj.write('');\r\n group.savedMatrix = doc._ctm;\r\n group.savedPage = doc.page;\r\n groupStack.push(group);\r\n doc._ctm = [1, 0, 0, 1, 0, 0];\r\n doc.page = {\r\n width: doc.page.width, height: doc.page.height,\r\n write: function(data) {group.xobj.write(data);},\r\n fonts: {}, xobjects: {}, ext_gstates: {}, patterns: {}\r\n };\r\n return group;\r\n }\r\n function docEndGroup(group) {\r\n if (group !== groupStack.pop()) {throw('Group not matching');}\r\n if (Object.keys(doc.page.fonts).length) {group.resources.data.Font = doc.page.fonts;}\r\n if (Object.keys(doc.page.xobjects).length) {group.resources.data.XObject = doc.page.xobjects;}\r\n if (Object.keys(doc.page.ext_gstates).length) {group.resources.data.ExtGState = doc.page.ext_gstates;}\r\n if (Object.keys(doc.page.patterns).length) {group.resources.data.Pattern = doc.page.patterns;}\r\n group.resources.end();\r\n group.xobj.end();\r\n doc._ctm = group.savedMatrix;\r\n doc.page = group.savedPage;\r\n }\r\n function docInsertGroup(group) {\r\n doc.page.xobjects[group.name] = group.xobj;\r\n doc.addContent('/' + group.name + ' Do');\r\n }\r\n function docApplyMask(group, clip) {\r\n let name = 'M' + (doc._maskCount = (doc._maskCount || 0) + 1);\r\n let gstate = doc.ref({\r\n Type: 'ExtGState', CA: 1, ca: 1, BM: 'Normal',\r\n SMask: {S: 'Luminosity', G: group.xobj, BC: (clip ? [0, 0, 0] : [1, 1, 1])}\r\n });\r\n gstate.end();\r\n doc.page.ext_gstates[name] = gstate;\r\n doc.addContent('/' + name + ' gs');\r\n }\r\n function docCreatePattern(group, dx, dy, matrix) {\r\n let pattern = new (function PDFPattern() {})();\r\n pattern.group = group;\r\n pattern.dx = dx;\r\n pattern.dy = dy;\r\n pattern.matrix = matrix || [1, 0, 0, 1, 0, 0];\r\n return pattern;\r\n }\r\n function docUsePattern(pattern, stroke) {\r\n let name = 'P' + (doc._patternCount = (doc._patternCount || 0) + 1);\r\n let ref = doc.ref({\r\n Type: 'Pattern', PatternType: 1, PaintType: 1, TilingType: 2,\r\n BBox: [0, 0, pattern.dx, pattern.dy], XStep: pattern.dx, YStep: pattern.dy,\r\n Matrix: multiplyMatrix(doc._ctm, pattern.matrix),\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n XObject: (function() {let temp = {}; temp[pattern.group.name] = pattern.group.xobj; return temp;})()\r\n }\r\n });\r\n ref.write('/' + pattern.group.name + ' Do');\r\n ref.end();\r\n doc.page.patterns[name] = ref;\r\n if (stroke) {\r\n doc.addContent('/Pattern CS');\r\n doc.addContent('/' + name + ' SCN');\r\n } else {\r\n doc.addContent('/Pattern cs');\r\n doc.addContent('/' + name + ' scn');\r\n }\r\n }\r\n function docBeginText(font, size) {\r\n if (!doc.page.fonts[font.id]) {doc.page.fonts[font.id] = font.ref();}\r\n doc.addContent('BT').addContent('/' + font.id + ' ' + size + ' Tf');\r\n }\r\n function docSetTextMatrix(a, b, c, d, e, f) {\r\n doc.addContent(validateNumber(a) + ' ' + validateNumber(b) + ' ' + validateNumber(-c) + ' ' + validateNumber(-d) + ' ' + validateNumber(e) + ' ' + validateNumber(f) + ' Tm');\r\n }\r\n function docSetTextMode(fill, stroke) {\r\n let mode = fill && stroke ? 2 : stroke ? 1 : fill ? 0 : 3;\r\n doc.addContent(mode + ' Tr');\r\n }\r\n function docWriteGlyph(glyph) {\r\n doc.addContent('<' + glyph + '> Tj');\r\n }\r\n function docEndText() {\r\n doc.addContent('ET');\r\n }\r\n function docFillColor(color) {\r\n if (color[0].constructor.name === 'PDFPattern') {\r\n doc.fillOpacity(color[1]);\r\n docUsePattern(color[0], false);\r\n } else {\r\n doc.fillColor(color[0], color[1]);\r\n }\r\n }\r\n function docStrokeColor(color) {\r\n if (color[0].constructor.name === 'PDFPattern') {\r\n doc.strokeOpacity(color[1]);\r\n docUsePattern(color[0], true);\r\n } else {\r\n doc.strokeColor(color[0], color[1]);\r\n }\r\n }\r\n function docInsertLink(x, y, w, h, url) {\r\n let ref = doc.ref({\r\n Type: 'Annot',\r\n Subtype: 'Link',\r\n Rect: [x, y, w, h],\r\n Border: [0, 0, 0],\r\n A: {\r\n S: 'URI',\r\n URI: new String(url)\r\n }\r\n });\r\n ref.end();\r\n links.push(ref);\r\n }\r\n function parseXml(xml) {\r\n let SvgNode = function(tag, type, value, error) {\r\n this.error = error;\r\n this.nodeName = tag;\r\n this.nodeValue = value;\r\n this.nodeType = type;\r\n this.attributes = Object.create(null);\r\n this.childNodes = [];\r\n this.parentNode = null;\r\n this.id = '';\r\n this.textContent = '';\r\n this.classList = [];\r\n };\r\n SvgNode.prototype.getAttribute = function(attr) {\r\n return this.attributes[attr] != null ? this.attributes[attr] : null;\r\n };\r\n SvgNode.prototype.getElementById = function(id) {\r\n let result = null;\r\n (function recursive(node) {\r\n if (result) {return;}\r\n if (node.nodeType === 1) {\r\n if (node.id === id) {result = node;}\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n recursive(node.childNodes[i]);\r\n }\r\n }\r\n })(this);\r\n return result;\r\n };\r\n SvgNode.prototype.getElementsByTagName = function(tag) {\r\n let result = [];\r\n (function recursive(node) {\r\n if (node.nodeType === 1) {\r\n if (node.nodeName === tag) {result.push(node);}\r\n for (let i = 0; i < node.childNodes.length; i++) {\r\n recursive(node.childNodes[i]);\r\n }\r\n }\r\n })(this);\r\n return result;\r\n };\r\n let parser = new StringParser(xml.trim()), result, child, error = false; \r\n let recursive = function() {\r\n let temp, child;\r\n if (temp = parser.match(/^<([\\w:.-]+)\\s*/, true)) { // Opening tag\r\n let node = new SvgNode(temp[1], 1, null, error);\r\n while (temp = parser.match(/^([\\w:.-]+)(?:\\s*=\\s*\"([^\"]*)\"|\\s*=\\s*'([^']*)')?\\s*/, true)) { // Attribute\r\n let attr = temp[1], value = decodeEntities(temp[2] || temp[3] || '');\r\n if (!node.attributes[attr]) {\r\n node.attributes[attr] = value;\r\n if (attr === 'id') {node.id = value;}\r\n if (attr === 'class') {node.classList = value.split(' ');}\r\n } else {\r\n warningCallback('parseXml: duplicate attribute \"' + attr + '\"');\r\n error = true;\r\n }\r\n }\r\n if (parser.match(/^>/)) { // End of opening tag\r\n while (child = recursive()) {\r\n node.childNodes.push(child);\r\n child.parentNode = node;\r\n node.textContent += (child.nodeType === 3 || child.nodeType === 4 ? child.nodeValue : child.textContent);\r\n }\r\n if (temp = parser.match(/^<\\/([\\w:.-]+)\\s*>/, true)) { // Closing tag\r\n if (temp[1] === node.nodeName) {\r\n return node;\r\n } else {\r\n warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & closing \"' + temp[1] + '\"');\r\n error = true;\r\n return node;\r\n }\r\n } else {\r\n warningCallback('parseXml: tag not matching, opening \"' + node.nodeName + '\" & not closing');\r\n error = true;\r\n return node;\r\n }\r\n } else if (parser.match(/^\\/>/)) { // Self-closing tag\r\n return node;\r\n } else {\r\n warningCallback('parseXml: tag could not be parsed \"' + node.nodeName + '\"');\r\n error = true;\r\n }\r\n } else if (temp = parser.match(/^/)) { // Comment\r\n return new SvgNode(null, 8, temp, error);\r\n } else if (temp = parser.match(/^<\\?[\\s\\S]*?\\?>/)) { // Processing instructions\r\n return new SvgNode(null, 7, temp, error);\r\n } else if (temp = parser.match(/^/)) { // Doctype\r\n return new SvgNode(null, 10, temp, error);\r\n } else if (temp = parser.match(/^/, true)) { // Cdata node\r\n return new SvgNode('#cdata-section', 4, temp[1], error);\r\n } else if (temp = parser.match(/^([^<]+)/, true)) { // Text node\r\n return new SvgNode('#text', 3, decodeEntities(temp[1]), error);\r\n }\r\n };\r\n while (child = recursive()) {\r\n if (child.nodeType === 1 && !result) {\r\n result = child;\r\n } else if (child.nodeType === 1 || (child.nodeType === 3 && child.nodeValue.trim() !== '')) {\r\n warningCallback('parseXml: data after document end has been discarded');\r\n }\r\n }\r\n if (parser.matchAll()) {\r\n warningCallback('parseXml: parsing error');\r\n }\r\n return result;\r\n };\r\n function decodeEntities(str) {\r\n return(str.replace(/&(?:#([0-9]+)|#[xX]([0-9A-Fa-f]+)|([0-9A-Za-z]+));/g, function(mt, m0, m1, m2) {\r\n if (m0) {return String.fromCharCode(parseInt(m0, 10));}\r\n else if (m1) {return String.fromCharCode(parseInt(m1, 16));}\r\n else if (m2 && Entities[m2]) {return String.fromCharCode(Entities[m2]);}\r\n else {return mt;}\r\n }));\r\n }\r\n function parseColor(raw) {\r\n let temp, result;\r\n raw = (raw || '').trim();\r\n if (temp = NamedColors[raw]) {\r\n result = [temp.slice(), 1];\r\n } else if (temp = raw.match(/^rgba\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9.]+)\\s*\\)$/i)) {\r\n temp[1] = parseInt(temp[1]); temp[2] = parseInt(temp[2]); temp[3] = parseInt(temp[3]); temp[4] = parseFloat(temp[4]);\r\n if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256 && temp[4] <= 1) {\r\n result = [temp.slice(1, 4), temp[4]];\r\n }\r\n } else if (temp = raw.match(/^rgb\\(\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\s*\\)$/i)) {\r\n temp[1] = parseInt(temp[1]); temp[2] = parseInt(temp[2]); temp[3] = parseInt(temp[3]);\r\n if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\r\n result = [temp.slice(1, 4), 1];\r\n }\r\n } else if (temp = raw.match(/^rgb\\(\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*,\\s*([0-9.]+)%\\s*\\)$/i)) {\r\n temp[1] = 2.55 * parseFloat(temp[1]); temp[2] = 2.55 * parseFloat(temp[2]); temp[3] = 2.55 * parseFloat(temp[3]);\r\n if (temp[1] < 256 && temp[2] < 256 && temp[3] < 256) {\r\n result = [temp.slice(1, 4), 1];\r\n }\r\n } else if (temp = raw.match(/^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i)) {\r\n result = [[parseInt(temp[1], 16), parseInt(temp[2], 16), parseInt(temp[3], 16)], 1];\r\n } else if (temp = raw.match(/^#([0-9a-f])([0-9a-f])([0-9a-f])$/i)) {\r\n result = [[0x11 * parseInt(temp[1], 16), 0x11 * parseInt(temp[2], 16), 0x11 * parseInt(temp[3], 16)], 1];\r\n }\r\n return colorCallback ? colorCallback(result, raw) : result;\r\n }\r\n function opacityToColor(color, opacity, isMask) {\r\n let newColor = color[0].slice(),\r\n newOpacity = color[1] * opacity;\r\n if (isMask) {\r\n for (let i = 0; i < color.length; i++) {\r\n newColor[i] *= newOpacity;\r\n }\r\n return [newColor, 1];\r\n } else {\r\n return [newColor, newOpacity];\r\n }\r\n }\r\n function multiplyMatrix() {\r\n function multiply(a, b) {\r\n return [ a[0]*b[0]+a[2]*b[1], a[1]*b[0]+a[3]*b[1], a[0]*b[2]+a[2]*b[3],\r\n a[1]*b[2]+a[3]*b[3], a[0]*b[4]+a[2]*b[5]+a[4], a[1]*b[4]+a[3]*b[5]+a[5] ];\r\n }\r\n let result = arguments[0];\r\n for (let i = 1; i < arguments.length; i++) {\r\n result = multiply(result, arguments[i]);\r\n }\r\n return result;\r\n }\r\n function transformPoint(p, m) {\r\n return [m[0] * p[0] + m[2] * p[1] + m[4], m[1] * p[0] + m[3] * p[1] + m[5]];\r\n }\r\n function getGlobalMatrix() {\r\n let ctm = doc._ctm;\r\n for (let i = groupStack.length - 1; i >= 0; i--) {\r\n ctm = multiplyMatrix(groupStack[i].savedMatrix, ctm);\r\n }\r\n return ctm;\r\n }\r\n function getPageBBox() {\r\n return new SvgShape().M(0, 0).L(doc.page.width, 0).L(doc.page.width, doc.page.height).L(0, doc.page.height)\r\n .transform(inverseMatrix(getGlobalMatrix())).getBoundingBox();\r\n }\r\n function inverseMatrix(m) {\r\n let dt = m[0] * m[3] - m[1] * m[2];\r\n return [m[3] / dt, -m[1] / dt, -m[2] / dt, m[0] / dt, (m[2]*m[5] - m[3]*m[4]) / dt, (m[1]*m[4] - m[0]*m[5]) / dt];\r\n }\r\n function validateMatrix(m) {\r\n let m0 = validateNumber(m[0]), m1 = validateNumber(m[1]), m2 = validateNumber(m[2]),\r\n m3 = validateNumber(m[3]), m4 = validateNumber(m[4]), m5 = validateNumber(m[5]);\r\n if (isNotEqual(m0 * m3 - m1 * m2, 0)) {\r\n return [m0, m1, m2, m3, m4, m5];\r\n }\r\n }\r\n function solveEquation(curve) {\r\n let a = curve[2] || 0, b = curve[1] || 0, c = curve[0] || 0;\r\n if (isEqual(a, 0) && isEqual(b, 0)) {\r\n return [];\r\n } else if (isEqual(a, 0)) {\r\n return [(-c) / b];\r\n } else {\r\n let d = b * b - 4 * a * c;\r\n if (isNotEqual(d, 0) && d > 0) {\r\n return [(-b + Math.sqrt(d)) / (2 * a), (-b - Math.sqrt(d)) / (2 * a)];\r\n } else if (isEqual(d, 0)) {\r\n return [(-b) / (2 * a)];\r\n } else {\r\n return [];\r\n }\r\n }\r\n }\r\n function getCurveValue(t, curve) {\r\n return (curve[0] || 0) + (curve[1] || 0) * t + (curve[2] || 0) * t * t + (curve[3] || 0) * t * t * t;\r\n }\r\n function isEqual(number, ref) {\r\n return Math.abs(number - ref) < 1e-10;\r\n }\r\n function isNotEqual(number, ref) {\r\n return Math.abs(number - ref) >= 1e-10;\r\n }\r\n function validateNumber(n) {\r\n return n > -1e21 && n < 1e21 ? Math.round(n * 1e6) / 1e6 : 0;\r\n }\r\n function isArrayLike(v) {\r\n return typeof v === 'object' && v !== null && typeof v.length === 'number';\r\n }\r\n function parseTranform(v) {\r\n let parser = new StringParser((v || '').trim()), result = [1, 0, 0, 1, 0, 0], temp;\r\n while (temp = parser.match(/^([A-Za-z]+)\\s*[(]([^(]+)[)]/, true)) {\r\n let func = temp[1], nums = [], parser2 = new StringParser(temp[2].trim()), temp2;\r\n while (temp2 = parser2.matchNumber()) {\r\n nums.push(Number(temp2));\r\n parser2.matchSeparator();\r\n }\r\n if (func === 'matrix' && nums.length === 6) {\r\n result = multiplyMatrix(result, [nums[0], nums[1], nums[2], nums[3], nums[4], nums[5]]);\r\n } else if (func === 'translate' && nums.length === 2) {\r\n result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], nums[1]]);\r\n } else if (func === 'translate' && nums.length === 1) {\r\n result = multiplyMatrix(result, [1, 0, 0, 1, nums[0], 0]);\r\n } else if (func === 'scale' && nums.length === 2) {\r\n result = multiplyMatrix(result, [nums[0], 0, 0, nums[1], 0, 0]);\r\n } else if (func === 'scale' && nums.length === 1) {\r\n result = multiplyMatrix(result, [nums[0], 0, 0, nums[0], 0, 0]);\r\n } else if (func === 'rotate' && nums.length === 3) {\r\n let a = nums[0] * Math.PI / 180;\r\n result = multiplyMatrix(result, [1, 0, 0, 1, nums[1], nums[2]], [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0], [1, 0, 0, 1, -nums[1], -nums[2]]);\r\n } else if (func === 'rotate' && nums.length === 1) {\r\n let a = nums[0] * Math.PI / 180;\r\n result = multiplyMatrix(result, [Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]);\r\n } else if (func === 'skewX' && nums.length === 1) {\r\n let a = nums[0] * Math.PI / 180;\r\n result = multiplyMatrix(result, [1, 0, Math.tan(a), 1, 0, 0]);\r\n } else if (func === 'skewY' && nums.length === 1) {\r\n let a = nums[0] * Math.PI / 180;\r\n result = multiplyMatrix(result, [1, Math.tan(a), 0, 1, 0, 0]);\r\n } else {return;}\r\n parser.matchSeparator();\r\n }\r\n if (parser.matchAll()) {return;}\r\n return result;\r\n }\r\n function parseAspectRatio(aspectRatio, availWidth, availHeight, elemWidth, elemHeight, initAlign) {\r\n let temp = (aspectRatio || '').trim().match(/^(none)$|^x(Min|Mid|Max)Y(Min|Mid|Max)(?:\\s+(meet|slice))?$/) || [],\r\n ratioType = temp[1] || temp[4] || 'meet',\r\n xAlign = temp[2] || 'Mid',\r\n yAlign = temp[3] || 'Mid',\r\n scaleX = availWidth / elemWidth,\r\n scaleY = availHeight / elemHeight,\r\n dx = {'Min':0, 'Mid':0.5, 'Max':1}[xAlign] - (initAlign || 0),\r\n dy = {'Min':0, 'Mid':0.5, 'Max':1}[yAlign] - (initAlign || 0);\r\n if (ratioType === 'slice') {\r\n scaleY = scaleX = Math.max(scaleX, scaleY);\r\n } else if (ratioType === 'meet') {\r\n scaleY = scaleX = Math.min(scaleX, scaleY);\r\n }\r\n return [scaleX, 0, 0, scaleY, dx * (availWidth - elemWidth * scaleX), dy * (availHeight - elemHeight * scaleY)];\r\n }\r\n function parseStyleAttr(v) {\r\n let result = Object.create(null);\r\n v = (v || '').trim().split(/;/);\r\n for (let i = 0; i < v.length; i++) {\r\n let key = (v[i].split(':')[0] || '').trim(),\r\n value = (v[i].split(':')[1] || '').trim();\r\n if (key) {\r\n result[key] = value;\r\n }\r\n }\r\n if (result['marker']) {\r\n if (!result['marker-start']) {result['marker-start'] = result['marker'];}\r\n if (!result['marker-mid']) {result['marker-mid'] = result['marker'];}\r\n if (!result['marker-end']) {result['marker-end'] = result['marker'];}\r\n }\r\n if (result['font']) {\r\n let fontFamily = null, fontSize = null, fontStyle = \"normal\", fontWeight = \"normal\", fontVariant = \"normal\";\r\n let parts = result['font'].split(/\\s+/);\r\n for (let i = 0; i < parts.length; i++) {\r\n switch (parts[i]) {\r\n case \"normal\":\r\n break;\r\n case \"italic\": case \"oblique\":\r\n fontStyle = parts[i];\r\n break;\r\n case \"small-caps\":\r\n fontVariant = parts[i];\r\n break;\r\n case \"bold\": case \"bolder\": case \"lighter\": case \"100\": case \"200\": case \"300\":\r\n case \"400\": case \"500\": case \"600\": case \"700\": case \"800\": case \"900\":\r\n fontWeight = parts[i];\r\n break;\r\n default:\r\n if (!fontSize) {\r\n fontSize = parts[i].split('/')[0];\r\n } else {\r\n if (!fontFamily) {\r\n fontFamily = parts[i];\r\n } else {\r\n fontFamily += ' ' + parts[i];\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n if (!result['font-style']) {result['font-style'] = fontStyle;}\r\n if (!result['font-variant']) {result['font-variant'] = fontVariant;}\r\n if (!result['font-weight']) {result['font-weight'] = fontWeight;}\r\n if (!result['font-size']) {result['font-size'] = fontSize;}\r\n if (!result['font-family']) {result['font-family'] = fontFamily;}\r\n }\r\n return result;\r\n }\r\n function parseSelector(v) {\r\n let parts = v.split(/(?=[.#])/g), ids = [], classes = [], tags = [], temp;\r\n for (let i = 0; i < parts.length; i++) {\r\n if (temp = parts[i].match(/^[#]([_A-Za-z0-9-]+)$/)) {\r\n ids.push(temp[1]);\r\n } else if (temp = parts[i].match(/^[.]([_A-Za-z0-9-]+)$/)) {\r\n classes.push(temp[1]);\r\n } else if (temp = parts[i].match(/^([_A-Za-z0-9-]+)$/)) {\r\n tags.push(temp[1]);\r\n } else if (parts[i] !== '*') {\r\n return;\r\n }\r\n }\r\n return {\r\n tags: tags, ids: ids, classes: classes,\r\n specificity: ids.length * 10000 + classes.length * 100 + tags.length\r\n };\r\n }\r\n function parseStyleSheet(v) {\r\n let parser = new StringParser(v.trim()), rules = [], rule;\r\n while (rule = parser.match(/^\\s*([^\\{\\}]*?)\\s*\\{([^\\{\\}]*?)\\}/, true)) {\r\n let selectors = rule[1].split(/\\s*,\\s*/g),\r\n css = parseStyleAttr(rule[2]);\r\n for (let i = 0; i < selectors.length; i++) {\r\n let selector = parseSelector(selectors[i]);\r\n if (selector) {\r\n rules.push({selector: selector, css:css});\r\n }\r\n }\r\n }\r\n return rules;\r\n }\r\n function matchesSelector(elem, selector) {\r\n if (elem.nodeType !== 1) {return false;}\r\n for (let i = 0; i < selector.tags.length; i++) {\r\n if (selector.tags[i] !== elem.nodeName) {return false;}\r\n }\r\n for (let i = 0; i < selector.ids.length; i++) {\r\n if (selector.ids[i] !== elem.id) {return false;}\r\n }\r\n for (let i = 0; i < selector.classes.length; i++) {\r\n if (elem.classList.indexOf(selector.classes[i]) === -1) {return false;}\r\n }\r\n return true;\r\n }\r\n function getStyle(elem) {\r\n let result = Object.create(null);\r\n let specificities = Object.create(null);\r\n for (let i = 0; i < styleRules.length; i++) {\r\n let rule = styleRules[i];\r\n if (matchesSelector(elem, rule.selector)) {\r\n for (let key in rule.css) {\r\n if (!(specificities[key] > rule.selector.specificity)) {\r\n result[key] = rule.css[key];\r\n specificities[key] = rule.selector.specificity;\r\n }\r\n }\r\n }\r\n }\r\n return result;\r\n }\r\n function combineArrays(array1, array2) {\r\n return array1.concat(array2.slice(array1.length));\r\n }\r\n function getAscent(font, size) {\r\n return Math.max(font.ascender, (font.bbox[3] || font.bbox.maxY) * (font.scale || 1)) * size / 1000;\r\n }\r\n function getDescent(font, size) {\r\n return Math.min(font.descender, (font.bbox[1] || font.bbox.minY) * (font.scale || 1)) * size / 1000;\r\n }\r\n function getXHeight(font, size) {\r\n return (font.xHeight || 0.5 * (font.ascender - font.descender)) * size / 1000;\r\n }\r\n function getBaseline(font, size, baseline, shift) {\r\n let dy1, dy2;\r\n switch (baseline) {\r\n case 'middle': dy1 = 0.5 * getXHeight(font, size); break;\r\n case 'central': dy1 = 0.5 * (getDescent(font, size) + getAscent(font, size)); break;\r\n case 'after-edge': case 'text-after-edge': dy1 = getDescent(font, size); break;\r\n case 'alphabetic': case 'auto': case 'baseline': dy1 = 0; break;\r\n case 'mathematical': dy1 = 0.5 * getAscent(font, size); break;\r\n case 'hanging': dy1 = 0.8 * getAscent(font, size); break;\r\n case 'before-edge': case 'text-before-edge': dy1 = getAscent(font, size); break;\r\n default: dy1 = 0; break;\r\n }\r\n switch (shift) {\r\n case 'baseline': dy2 = 0; break;\r\n case 'super': dy2 = 0.6 * size; break;\r\n case 'sub': dy2 = -0.6 * size; break;\r\n default: dy2 = shift; break;\r\n }\r\n return dy1 - dy2;\r\n }\r\n function getTextPos(font, size, text) {\r\n let encoded = font.encode('' + text), hex = encoded[0], pos = encoded[1], data = [];\r\n for (let i = 0; i < hex.length; i++) {\r\n let unicode = font.unicode ? font.unicode[parseInt(hex[i], 16)] : [text.charCodeAt(i)];\r\n data.push({\r\n glyph: hex[i],\r\n unicode: unicode,\r\n width: pos[i].advanceWidth * size / 1000,\r\n xOffset: pos[i].xOffset * size / 1000,\r\n yOffset: pos[i].yOffset * size / 1000,\r\n xAdvance: pos[i].xAdvance * size / 1000,\r\n yAdvance: pos[i].yAdvance * size / 1000\r\n });\r\n }\r\n return data;\r\n }\r\n function createSVGElement(obj, inherits) {\r\n switch (obj.nodeName) {\r\n case 'use': return new SvgElemUse(obj, inherits);\r\n case 'symbol': return new SvgElemSymbol(obj, inherits);\r\n case 'g': return new SvgElemGroup(obj, inherits);\r\n case 'a': return new SvgElemLink(obj, inherits);\r\n case 'svg': return new SvgElemSvg(obj, inherits);\r\n case 'image': return new SVGElemImage(obj, inherits);\r\n case 'rect': return new SvgElemRect(obj, inherits);\r\n case 'circle': return new SvgElemCircle(obj, inherits);\r\n case 'ellipse': return new SvgElemEllipse(obj, inherits);\r\n case 'line': return new SvgElemLine(obj, inherits);\r\n case 'polyline': return new SvgElemPolyline(obj, inherits);\r\n case 'polygon': return new SvgElemPolygon(obj, inherits);\r\n case 'path': return new SvgElemPath(obj, inherits);\r\n case 'text': return new SvgElemText(obj, inherits);\r\n case 'tspan': return new SvgElemTspan(obj, inherits);\r\n case 'textPath': return new SvgElemTextPath(obj, inherits);\r\n case '#text': case '#cdata-section': return new SvgElemTextNode(obj, inherits);\r\n default: return new SvgElem(obj, inherits);\r\n }\r\n }\r\n\r\n var StringParser = function(str) {\r\n this.match = function(exp, all) {\r\n let temp = str.match(exp);\r\n if (!temp || temp.index !== 0) {return;}\r\n str = str.substring(temp[0].length);\r\n return (all ? temp : temp[0]);\r\n };\r\n this.matchSeparator = function() {\r\n return this.match(/^(?:\\s*,\\s*|\\s*|)/);\r\n };\r\n this.matchSpace = function() {\r\n return this.match(/^(?:\\s*)/);\r\n };\r\n this.matchLengthUnit = function() {\r\n return this.match(/^(?:px|pt|cm|mm|in|pc|em|ex|%|)/);\r\n };\r\n this.matchNumber = function() {\r\n return this.match(/^(?:[-+]?(?:[0-9]+[.][0-9]+|[0-9]+[.]|[.][0-9]+|[0-9]+)(?:[eE][-+]?[0-9]+)?)/);\r\n };\r\n this.matchAll = function() {\r\n return this.match(/^[\\s\\S]+/);\r\n };\r\n };\r\n\r\n var BezierSegment = function(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {\r\n let divisions = 6 * precision;\r\n let equationX = [p1x, -3 * p1x + 3 * c1x, 3 * p1x - 6 * c1x + 3 * c2x, -p1x + 3 * c1x - 3 * c2x + p2x];\r\n let equationY = [p1y, -3 * p1y + 3 * c1y, 3 * p1y - 6 * c1y + 3 * c2y, -p1y + 3 * c1y - 3 * c2y + p2y];\r\n let derivativeX = [-3 * p1x + 3 * c1x, 6 * p1x - 12 * c1x + 6 * c2x, -3 * p1x + 9 * c1x - 9 * c2x + 3 * p2x];\r\n let derivativeY = [-3 * p1y + 3 * c1y, 6 * p1y - 12 * c1y + 6 * c2y, -3 * p1y + 9 * c1y - 9 * c2y + 3 * p2y];\r\n let lengthMap = [0];\r\n for (let i = 1; i <= divisions; i++) {\r\n let t = (i - 0.5) / divisions;\r\n let dx = getCurveValue(t, derivativeX) / divisions,\r\n dy = getCurveValue(t, derivativeY) / divisions,\r\n l = Math.sqrt(dx * dx + dy * dy);\r\n lengthMap[i] = lengthMap[i - 1] + l;\r\n }\r\n this.totalLength = lengthMap[divisions];\r\n this.startPoint = [p1x, p1y, isEqual(p1x, c1x) && isEqual(p1y, c1y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(c1y - p1y, c1x - p1x)];\r\n this.endPoint = [p2x, p2y, isEqual(c2x, p2x) && isEqual(c2y, p2y) ? Math.atan2(c2y - c1y, c2x - c1x) : Math.atan2(p2y - c2y, p2x - c2x)];\r\n this.getBoundingBox = function() {\r\n let temp;\r\n let minX = getCurveValue(0, equationX), minY = getCurveValue(0, equationY),\r\n maxX = getCurveValue(1, equationX), maxY = getCurveValue(1, equationY);\r\n if (minX > maxX) {temp = maxX; maxX = minX; minX = temp;}\r\n if (minY > maxY) {temp = maxY; maxY = minY; minY = temp;}\r\n let rootsX = solveEquation(derivativeX);\r\n for (let i = 0; i < rootsX.length; i++) {\r\n if (rootsX[i] >= 0 && rootsX[i] <= 1) {\r\n let x = getCurveValue(rootsX[i], equationX);\r\n if (x < minX) {minX = x;}\r\n if (x > maxX) {maxX = x;}\r\n }\r\n }\r\n let rootsY = solveEquation(derivativeY);\r\n for (let i = 0; i < rootsY.length; i++) {\r\n if (rootsY[i] >= 0 && rootsY[i] <= 1) {\r\n let y = getCurveValue(rootsY[i], equationY);\r\n if (y < minY) {minY = y;}\r\n if (y > maxY) {maxY = y;}\r\n }\r\n }\r\n return [minX, minY, maxX, maxY];\r\n };\r\n this.getPointAtLength = function(l) {\r\n if (isEqual(l, 0)) {return this.startPoint;}\r\n if (isEqual(l, this.totalLength)) {return this.endPoint;}\r\n if (l < 0 || l > this.totalLength) {return;}\r\n for (let i = 1; i <= divisions; i++) {\r\n let l1 = lengthMap[i-1], l2 = lengthMap[i];\r\n if (l1 <= l && l <= l2) {\r\n let t = (i - (l2 - l) / (l2 - l1)) / divisions,\r\n x = getCurveValue(t, equationX), y = getCurveValue(t, equationY),\r\n dx = getCurveValue(t, derivativeX), dy = getCurveValue(t, derivativeY);\r\n return [x, y, Math.atan2(dy, dx)];\r\n }\r\n }\r\n };\r\n };\r\n\r\n var LineSegment = function(p1x, p1y, p2x, p2y) {\r\n this.totalLength = Math.sqrt((p2x - p1x) * (p2x - p1x) + (p2y - p1y) * (p2y - p1y));\r\n this.startPoint = [p1x, p1y, Math.atan2(p2y - p1y, p2x - p1x)];\r\n this.endPoint = [p2x, p2y, Math.atan2(p2y - p1y, p2x - p1x)];\r\n this.getBoundingBox = function() {\r\n return [Math.min(this.startPoint[0], this.endPoint[0]), Math.min(this.startPoint[1], this.endPoint[1]),\r\n Math.max(this.startPoint[0], this.endPoint[0]), Math.max(this.startPoint[1], this.endPoint[1])];\r\n };\r\n this.getPointAtLength = function(l) {\r\n if (l >= 0 && l <= this.totalLength) {\r\n let r = l / this.totalLength || 0,\r\n x = this.startPoint[0] + r * (this.endPoint[0] - this.startPoint[0]),\r\n y = this.startPoint[1] + r * (this.endPoint[1] - this.startPoint[1]);\r\n return [x, y, this.startPoint[2]];\r\n }\r\n };\r\n };\r\n\r\n var SvgShape = function() {\r\n this.pathCommands = [];\r\n this.pathSegments = [];\r\n this.startPoint = null;\r\n this.endPoint = null;\r\n this.totalLength = 0;\r\n let startX = 0, startY = 0, currX = 0, currY = 0, lastCom, lastCtrlX, lastCtrlY;\r\n this.move = function(x, y) {\r\n startX = currX = x; startY = currY = y;\r\n return null;\r\n };\r\n this.line = function(x, y) {\r\n let segment = new LineSegment(currX, currY, x, y);\r\n currX = x; currY = y;\r\n return segment;\r\n };\r\n this.curve = function(c1x, c1y, c2x, c2y, x, y) {\r\n let segment = new BezierSegment(currX, currY, c1x, c1y, c2x, c2y, x, y);\r\n currX = x; currY = y;\r\n return segment;\r\n };\r\n this.close = function() {\r\n let segment = new LineSegment(currX, currY, startX, startY);\r\n currX = startX; currY = startY;\r\n return segment;\r\n };\r\n this.addCommand = function(data) {\r\n this.pathCommands.push(data);\r\n let segment = this[data[0]].apply(this, data.slice(3));\r\n if (segment) {\r\n segment.hasStart = data[1];\r\n segment.hasEnd = data[2];\r\n this.startPoint = this.startPoint || segment.startPoint;\r\n this.endPoint = segment.endPoint;\r\n this.pathSegments.push(segment);\r\n this.totalLength += segment.totalLength;\r\n }\r\n };\r\n this.M = function(x, y) {\r\n this.addCommand(['move', true, true, x, y]);\r\n lastCom = 'M';\r\n return this;\r\n };\r\n this.m = function(x, y) {\r\n return this.M(currX + x, currY + y);\r\n };\r\n this.Z = this.z = function() {\r\n this.addCommand(['close', true, true]);\r\n lastCom = 'Z';\r\n return this;\r\n };\r\n this.L = function(x, y) {\r\n this.addCommand(['line', true, true, x, y]);\r\n lastCom = 'L';\r\n return this;\r\n };\r\n this.l = function(x, y) {\r\n return this.L(currX + x, currY + y);\r\n };\r\n this.H = function(x) {\r\n return this.L(x, currY);\r\n };\r\n this.h = function(x) {\r\n return this.L(currX + x, currY);\r\n };\r\n this.V = function(y) {\r\n return this.L(currX, y);\r\n };\r\n this.v = function(y) {\r\n return this.L(currX, currY + y);\r\n };\r\n this.C = function(c1x, c1y, c2x, c2y, x, y) {\r\n this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\r\n lastCom = 'C'; lastCtrlX = c2x; lastCtrlY = c2y;\r\n return this;\r\n };\r\n this.c = function(c1x, c1y, c2x, c2y, x, y) {\r\n return this.C(currX + c1x, currY + c1y, currX + c2x, currY + c2y, currX + x, currY + y);\r\n };\r\n this.S = function(c1x, c1y, x, y) {\r\n return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), c1x, c1y, x, y);\r\n };\r\n this.s = function(c1x, c1y, x, y) {\r\n return this.C(currX + (lastCom === 'C' ? currX - lastCtrlX : 0), currY + (lastCom === 'C' ? currY - lastCtrlY : 0), currX + c1x, currY + c1y, currX + x, currY + y);\r\n };\r\n this.Q = function(cx, cy, x, y) {\r\n let c1x = currX + 2 / 3 * (cx - currX), c1y = currY + 2 / 3 * (cy - currY),\r\n c2x = x + 2 / 3 * (cx - x), c2y = y + 2 / 3 * (cy - y);\r\n this.addCommand(['curve', true, true, c1x, c1y, c2x, c2y, x, y]);\r\n lastCom = 'Q'; lastCtrlX = cx; lastCtrlY = cy;\r\n return this;\r\n };\r\n this.q = function(c1x, c1y, x, y) {\r\n return this.Q(currX + c1x, currY + c1y, currX + x, currY + y);\r\n };\r\n this.T = function(x, y) {\r\n return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), x, y);\r\n };\r\n this.t = function(x, y) {\r\n return this.Q(currX + (lastCom === 'Q' ? currX - lastCtrlX : 0), currY + (lastCom === 'Q' ? currY - lastCtrlY : 0), currX + x, currY + y);\r\n };\r\n this.A = function(rx, ry, fi, fa, fs, x, y) {\r\n if (isEqual(rx, 0) || isEqual(ry, 0)) {\r\n this.addCommand(['line', true, true, x, y]);\r\n } else {\r\n fi = fi * (Math.PI / 180);\r\n rx = Math.abs(rx);\r\n ry = Math.abs(ry);\r\n fa = 1 * !!fa;\r\n fs = 1 * !!fs;\r\n let x1 = Math.cos(fi) * (currX - x) / 2 + Math.sin(fi) * (currY - y) / 2,\r\n y1 = Math.cos(fi) * (currY - y) / 2 - Math.sin(fi) * (currX - x) / 2,\r\n lambda = (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry);\r\n if (lambda > 1) {\r\n rx *= Math.sqrt(lambda);\r\n ry *= Math.sqrt(lambda);\r\n }\r\n let r = Math.sqrt(Math.max(0, rx * rx * ry * ry - rx * rx * y1 * y1 - ry * ry * x1 * x1) / (rx * rx * y1 * y1 + ry * ry * x1 * x1)),\r\n x2 = (fa === fs ? -1 : 1) * r * rx * y1 / ry,\r\n y2 = (fa === fs ? 1 : -1) * r * ry * x1 / rx;\r\n let cx = Math.cos(fi) * x2 - Math.sin(fi) * y2 + (currX + x) / 2,\r\n cy = Math.sin(fi) * x2 + Math.cos(fi) * y2 + (currY + y) / 2,\r\n th1 = Math.atan2((y1 - y2) / ry, (x1 - x2) / rx),\r\n th2 = Math.atan2((-y1 - y2) / ry, (-x1 - x2) / rx);\r\n if (fs === 0 && th2 - th1 > 0) {\r\n th2 -= 2 * Math.PI;\r\n } else if (fs === 1 && th2 - th1 < 0) {\r\n th2 += 2 * Math.PI;\r\n }\r\n let segms = Math.ceil(Math.abs(th2 - th1) / (Math.PI / precision));\r\n for (let i = 0; i < segms; i++) {\r\n let th3 = th1 + i * (th2 - th1) / segms,\r\n th4 = th1 + (i + 1) * (th2 - th1) / segms,\r\n t = 4/3 * Math.tan((th4 - th3) / 4);\r\n let c1x = cx + Math.cos(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) - Math.sin(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\r\n c1y = cy + Math.sin(fi) * rx * (Math.cos(th3) - t * Math.sin(th3)) + Math.cos(fi) * ry * (Math.sin(th3) + t * Math.cos(th3)),\r\n c2x = cx + Math.cos(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) - Math.sin(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\r\n c2y = cy + Math.sin(fi) * rx * (Math.cos(th4) + t * Math.sin(th4)) + Math.cos(fi) * ry * (Math.sin(th4) - t * Math.cos(th4)),\r\n endX = cx + Math.cos(fi) * rx * Math.cos(th4) - Math.sin(fi) * ry * Math.sin(th4),\r\n endY = cy + Math.sin(fi) * rx * Math.cos(th4) + Math.cos(fi) * ry * Math.sin(th4);\r\n this.addCommand(['curve', (i === 0), (i === segms - 1), c1x, c1y, c2x, c2y, endX, endY]);\r\n }\r\n }\r\n lastCom = 'A';\r\n return this;\r\n };\r\n this.a = function(rx, ry, fi, fa, fs, x, y) {\r\n return this.A(rx, ry, fi, fa, fs, currX + x, currY + y);\r\n };\r\n this.path = function(d) {\r\n let command, value, temp,\r\n parser = new StringParser((d || '').trim());\r\n while (command = parser.match(/^[astvzqmhlcASTVZQMHLC]/)) {\r\n parser.matchSeparator();\r\n let values = [];\r\n while (value = (PathFlags[command + values.length] ? parser.match(/^[01]/) : parser.matchNumber())) {\r\n parser.matchSeparator();\r\n if (values.length === PathArguments[command]) {\r\n this[command].apply(this, values);\r\n values = [];\r\n if (command === 'M') {command = 'L';}\r\n else if (command === 'm') {command = 'l';}\r\n }\r\n values.push(Number(value));\r\n }\r\n if (values.length === PathArguments[command]) {\r\n this[command].apply(this, values);\r\n } else {\r\n warningCallback('SvgPath: command ' + command + ' with ' + values.length + ' numbers'); return;\r\n }\r\n }\r\n if (temp = parser.matchAll()) {\r\n warningCallback('SvgPath: unexpected string ' + temp);\r\n }\r\n return this;\r\n };\r\n this.getBoundingBox = function() {\r\n let bbox = [Infinity, Infinity, -Infinity, -Infinity];\r\n function addBounds(bbox1) {\r\n if (bbox1[0] < bbox[0]) {bbox[0] = bbox1[0];}\r\n if (bbox1[2] > bbox[2]) {bbox[2] = bbox1[2];}\r\n if (bbox1[1] < bbox[1]) {bbox[1] = bbox1[1];}\r\n if (bbox1[3] > bbox[3]) {bbox[3] = bbox1[3];}\r\n }\r\n for (let i = 0; i < this.pathSegments.length; i++) {\r\n addBounds(this.pathSegments[i].getBoundingBox());\r\n }\r\n if (bbox[0] === Infinity) {bbox[0] = 0;}\r\n if (bbox[1] === Infinity) {bbox[1] = 0;}\r\n if (bbox[2] === -Infinity) {bbox[2] = 0;}\r\n if (bbox[3] === -Infinity) {bbox[3] = 0;}\r\n return bbox;\r\n };\r\n this.getPointAtLength = function(l) {\r\n if (l >= 0 && l <= this.totalLength) {\r\n let temp;\r\n for (let i = 0; i < this.pathSegments.length; i++) {\r\n if (temp = this.pathSegments[i].getPointAtLength(l)) {\r\n return temp;\r\n }\r\n l -= this.pathSegments[i].totalLength;\r\n }\r\n return this.endPoint;\r\n }\r\n };\r\n this.transform = function(m) {\r\n this.pathSegments = [];\r\n this.startPoint = null;\r\n this.endPoint = null;\r\n this.totalLength = 0;\r\n for (let i = 0; i < this.pathCommands.length; i++) {\r\n let data = this.pathCommands.shift();\r\n for (let j = 3; j < data.length; j+=2) {\r\n let p = transformPoint([data[j], data[j + 1]], m)\r\n data[j] = p[0];\r\n data[j + 1] = p[1];\r\n }\r\n this.addCommand(data);\r\n }\r\n return this; \r\n };\r\n this.mergeShape = function(shape) {\r\n for (let i = 0; i < shape.pathCommands.length; i++) {\r\n this.addCommand(shape.pathCommands[i].slice());\r\n }\r\n return this;\r\n };\r\n this.clone = function() {\r\n return new SvgShape().mergeShape(this);\r\n };\r\n this.insertInDocument = function() {\r\n for (let i = 0; i < this.pathCommands.length; i++) {\r\n let command = this.pathCommands[i][0], values = this.pathCommands[i].slice(3);\r\n switch(command) {\r\n case 'move': doc.moveTo(values[0], values[1]); break;\r\n case 'line': doc.lineTo(values[0], values[1]); break;\r\n case 'curve': doc.bezierCurveTo(values[0], values[1], values[2], values[3], values[4], values[5]); break;\r\n case 'close': doc.closePath(); break;\r\n }\r\n }\r\n };\r\n this.getSubPaths = function() {\r\n let subPaths = [], shape = new SvgShape();\r\n for (let i = 0; i < this.pathCommands.length; i++) {\r\n let data = this.pathCommands[i], command = this.pathCommands[i][0];\r\n if (command === 'move' && i !== 0) {\r\n subPaths.push(shape);\r\n shape = new SvgShape();\r\n }\r\n shape.addCommand(data);\r\n }\r\n subPaths.push(shape);\r\n return subPaths;\r\n };\r\n this.getMarkers = function() {\r\n let markers = [], subPaths = this.getSubPaths();\r\n for (let i = 0; i < subPaths.length; i++) {\r\n let subPath = subPaths[i], subPathMarkers = [];\r\n for (let j = 0; j < subPath.pathSegments.length; j++) {\r\n let segment = subPath.pathSegments[j];\r\n if (isNotEqual(segment.totalLength, 0) || j === 0 || j === subPath.pathSegments.length - 1) {\r\n if (segment.hasStart) {\r\n let startMarker = segment.getPointAtLength(0), prevEndMarker = subPathMarkers.pop();\r\n if (prevEndMarker) {startMarker[2] = 0.5 * (prevEndMarker[2] + startMarker[2]);}\r\n subPathMarkers.push(startMarker);\r\n }\r\n if (segment.hasEnd) {\r\n let endMarker = segment.getPointAtLength(segment.totalLength);\r\n subPathMarkers.push(endMarker);\r\n }\r\n }\r\n }\r\n markers = markers.concat(subPathMarkers);\r\n }\r\n return markers;\r\n };\r\n };\r\n\r\n var SvgElem = function(obj, inherits) {\r\n let styleCache = Object.create(null);\r\n let childrenCache = null;\r\n this.name = obj.nodeName;\r\n this.isOuterElement = obj === svg || !obj.parentNode;\r\n this.inherits = inherits || (!this.isOuterElement ? createSVGElement(obj.parentNode, null) : null);\r\n this.stack = (this.inherits ? this.inherits.stack.concat(obj) : [obj]);\r\n this.style = parseStyleAttr(typeof obj.getAttribute === 'function' && obj.getAttribute('style'));\r\n this.css = useCSS ? getComputedStyle(obj) : getStyle(obj);\r\n this.allowedChildren = [];\r\n this.attr = function(key) {\r\n if (typeof obj.getAttribute === 'function') {\r\n return obj.getAttribute(key);\r\n }\r\n };\r\n this.resolveUrl = function(value) {\r\n let temp = (value || '').match(/^\\s*(?:url\\(\"(.*)#(.*)\"\\)|url\\('(.*)#(.*)'\\)|url\\((.*)#(.*)\\)|(.*)#(.*))\\s*$/) || [];\r\n let file = temp[1] || temp[3] || temp[5] || temp[7],\r\n id = temp[2] || temp[4] || temp[6] || temp[8];\r\n if (id) {\r\n if (!file) {\r\n let svgObj = svg.getElementById(id);\r\n if (svgObj) {\r\n if (this.stack.indexOf(svgObj) === -1) {\r\n return svgObj;\r\n } else {\r\n warningCallback('SVGtoPDF: loop of circular references for id \"' + id + '\"');\r\n return;\r\n }\r\n }\r\n }\r\n if (documentCallback) {\r\n let svgs = documentCache[file];\r\n if (!svgs) {\r\n svgs = documentCallback(file);\r\n if (!isArrayLike(svgs)) {svgs = [svgs];}\r\n for (let i = 0; i < svgs.length; i++) {\r\n if (typeof svgs[i] === 'string') {svgs[i] = parseXml(svgs[i]);}\r\n }\r\n documentCache[file] = svgs;\r\n }\r\n for (let i = 0; i < svgs.length; i++) {\r\n let svgObj = svgs[i].getElementById(id);\r\n if (svgObj) {\r\n if (this.stack.indexOf(svgObj) === -1) {\r\n return svgObj;\r\n } else {\r\n warningCallback('SVGtoPDF: loop of circular references for id \"' + file + '#' + id + '\"');\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n this.computeUnits = function(value, unit, percent, isFontSize) {\r\n if (unit === '%') {\r\n return parseFloat(value) / 100 * (isFontSize || percent != null ? percent : this.getViewport());\r\n } else if (unit === 'ex' || unit === 'em') {\r\n return value * {'em':1, 'ex':0.5}[unit] * (isFontSize ? percent : this.get('font-size'));\r\n } else {\r\n return value * {'':1, 'px':1, 'pt':96/72, 'cm':96/2.54, 'mm':96/25.4, 'in':96, 'pc':96/6}[unit];\r\n }\r\n };\r\n this.computeLength = function(value, percent, initial, isFontSize) {\r\n let parser = new StringParser((value || '').trim()), temp1, temp2;\r\n if (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string' && !parser.matchAll()) {\r\n return this.computeUnits(temp1, temp2, percent, isFontSize);\r\n }\r\n return initial;\r\n };\r\n this.computeLengthList = function(value, percent, strict) {\r\n let parser = new StringParser((value || '').trim()), result = [], temp1, temp2;\r\n while (typeof (temp1 = parser.matchNumber()) === 'string' && typeof (temp2 = parser.matchLengthUnit()) === 'string') {\r\n result.push(this.computeUnits(temp1, temp2, percent));\r\n parser.matchSeparator();\r\n }\r\n if (strict && parser.matchAll()) {return;}\r\n return result;\r\n };\r\n this.getLength = function(key, percent, initial) {\r\n return this.computeLength(this.attr(key), percent, initial);\r\n };\r\n this.getLengthList = function(key, percent) {\r\n return this.computeLengthList(this.attr(key), percent);\r\n };\r\n this.getUrl = function(key) {\r\n return this.resolveUrl(this.attr(key))\r\n };\r\n this.getNumberList = function(key) {\r\n let parser = new StringParser((this.attr(key) || '').trim()), result = [], temp;\r\n while (temp = parser.matchNumber()) {\r\n result.push(Number(temp));\r\n parser.matchSeparator();\r\n }\r\n result.error = parser.matchAll();\r\n return result;\r\n }\r\n this.getViewbox = function(key, initial) {\r\n let viewBox = this.getNumberList(key);\r\n if (viewBox.length === 4 && viewBox[2] >= 0 && viewBox[3] >= 0) {return viewBox;}\r\n return initial;\r\n };\r\n this.getPercent = function(key, initial) {\r\n let value = this.attr(key);\r\n let parser = new StringParser((value || '').trim()), temp1, temp2;\r\n let number = parser.matchNumber();\r\n if (!number) {return initial;}\r\n if (parser.match('%')) {number *= 0.01;}\r\n if (parser.matchAll()) {return initial;}\r\n return Math.max(0, Math.min(1, number));\r\n };\r\n this.chooseValue = function(args) {\r\n for (let i = 0; i < arguments.length; i++) {\r\n if (arguments[i] != null && arguments[i] === arguments[i]) {return arguments[i];}\r\n }\r\n return arguments[arguments.length - 1];\r\n };\r\n this.get = function(key) {\r\n if (styleCache[key] !== undefined) {return styleCache[key];}\r\n let keyInfo = Properties[key] || {}, value, result;\r\n for (let i = 0; i < 3; i++) {\r\n switch (i) {\r\n case 0:\r\n if (key !== 'transform') { // the CSS transform behaves strangely\r\n value = this.css[keyInfo.css || key];\r\n }\r\n break;\r\n case 1:\r\n value = this.style[key];\r\n break;\r\n case 2:\r\n value = this.attr(key);\r\n break;\r\n }\r\n if (value === 'inherit') {\r\n result = (this.inherits ? this.inherits.get(key) : keyInfo.initial);\r\n if (result != null) {return styleCache[key] = result;}\r\n }\r\n if (keyInfo.values != null) {\r\n result = keyInfo.values[value];\r\n if (result != null) {return styleCache[key] = result;}\r\n }\r\n if (value != null) {\r\n let parsed;\r\n switch (key) {\r\n case 'font-size':\r\n result = this.computeLength(value, this.inherits ? this.inherits.get(key) : keyInfo.initial, undefined, true);\r\n break;\r\n case 'baseline-shift':\r\n result = this.computeLength(value, this.get('font-size'));\r\n break;\r\n case 'font-family':\r\n result = value || undefined;\r\n break;\r\n case 'opacity': case 'stroke-opacity': case 'fill-opacity': case 'stop-opacity':\r\n parsed = parseFloat(value);\r\n if (!isNaN(parsed)) {\r\n result = Math.max(0, Math.min(1, parsed));\r\n }\r\n break;\r\n case 'transform':\r\n result = parseTranform(value);\r\n break;\r\n case 'stroke-dasharray':\r\n if (value === 'none') {\r\n result = [];\r\n } else if (parsed = this.computeLengthList(value, this.getViewport(), true)) {\r\n let sum = 0, error = false;\r\n for (let j = 0; j < parsed.length; j++) {\r\n if (parsed[j] < 0) {error = true;}\r\n sum += parsed[j];\r\n }\r\n if (!error) {\r\n if (parsed.length % 2 === 1) {\r\n parsed = parsed.concat(parsed);\r\n }\r\n result = (sum === 0 ? [] : parsed);\r\n }\r\n }\r\n break;\r\n case 'color':\r\n if (value === 'none' || value === 'transparent') {\r\n result = 'none';\r\n } else {\r\n result = parseColor(value);\r\n }\r\n break;\r\n case 'fill': case 'stroke':\r\n if (value === 'none' || value === 'transparent') {\r\n result = 'none';\r\n } else if (value === 'currentColor') {\r\n result = this.get('color');\r\n } else if (parsed = parseColor(value)) {\r\n return parsed;\r\n } else if (parsed = (value || '').split(' ')) {\r\n let object = this.resolveUrl(parsed[0]),\r\n fallbackColor = parseColor(parsed[1]);\r\n if (object == null) {\r\n result = fallbackColor;\r\n } else if (object.nodeName === 'linearGradient' || object.nodeName === 'radialGradient') {\r\n result = new SvgElemGradient(object, null, fallbackColor);\r\n } else if (object.nodeName === 'pattern') {\r\n result = new SvgElemPattern(object, null, fallbackColor);\r\n } else {\r\n result = fallbackColor;\r\n }\r\n }\r\n break;\r\n case 'stop-color':\r\n if (value === 'none' || value === 'transparent') {\r\n result = 'none';\r\n } else if (value === 'currentColor') {\r\n result = this.get('color');\r\n } else {\r\n result = parseColor(value);\r\n }\r\n break;\r\n case 'marker-start': case 'marker-mid': case 'marker-end': case 'clip-path': case 'mask':\r\n if (value === 'none') {\r\n result = 'none';\r\n } else {\r\n result = this.resolveUrl(value);\r\n }\r\n break;\r\n case 'stroke-width':\r\n parsed = this.computeLength(value, this.getViewport());\r\n if (parsed != null && parsed >= 0) {\r\n result = parsed;\r\n }\r\n break;\r\n case 'stroke-miterlimit':\r\n parsed = parseFloat(value);\r\n if (parsed != null && parsed >= 1) {\r\n result = parsed;\r\n }\r\n break;\r\n case 'word-spacing': case 'letter-spacing':\r\n result = this.computeLength(value, this.getViewport());\r\n break;\r\n case 'stroke-dashoffset':\r\n result = this.computeLength(value, this.getViewport());\r\n if (result != null) {\r\n if (result < 0) { // fix for crbug.com/660850\r\n let dasharray = this.get('stroke-dasharray');\r\n for (let j = 0; j < dasharray.length; j++) {result += dasharray[j];}\r\n }\r\n }\r\n break;\r\n }\r\n if (result != null) {return styleCache[key] = result;}\r\n }\r\n }\r\n return styleCache[key] = (keyInfo.inherit && this.inherits ? this.inherits.get(key) : keyInfo.initial);\r\n };\r\n this.getChildren = function() {\r\n if (childrenCache != null) {return childrenCache;}\r\n let children = [];\r\n for (let i = 0; i < obj.childNodes.length; i++) {\r\n let child = obj.childNodes[i];\r\n if (!child.error && this.allowedChildren.indexOf(child.nodeName) !== -1) {\r\n children.push(createSVGElement(child, this));\r\n }\r\n }\r\n return childrenCache = children;\r\n };\r\n this.getParentVWidth = function() {\r\n return (this.inherits ? this.inherits.getVWidth(): viewportWidth);\r\n };\r\n this.getParentVHeight = function() {\r\n return (this.inherits ? this.inherits.getVHeight() : viewportHeight);\r\n };\r\n this.getParentViewport = function() {\r\n return Math.sqrt(0.5 * this.getParentVWidth() * this.getParentVWidth() + 0.5 * this.getParentVHeight() * this.getParentVHeight());\r\n };\r\n this.getVWidth = function() {\r\n return this.getParentVWidth();\r\n };\r\n this.getVHeight = function() {\r\n return this.getParentVHeight();\r\n };\r\n this.getViewport = function() {\r\n return Math.sqrt(0.5 * this.getVWidth() * this.getVWidth() + 0.5 * this.getVHeight() * this.getVHeight());\r\n };\r\n this.getBoundingBox = function() {\r\n let shape = this.getBoundingShape();\r\n return shape.getBoundingBox();\r\n };\r\n };\r\n\r\n var SvgElemStylable = function(obj, inherits) {\r\n SvgElem.call(this, obj, inherits);\r\n this.transform = function() {\r\n doc.transform.apply(doc, this.getTransformation());\r\n };\r\n this.clip = function() {\r\n if (this.get('clip-path') !== 'none') {\r\n let clipPath = new SvgElemClipPath(this.get('clip-path'), null);\r\n clipPath.useMask(this.getBoundingBox());\r\n return true;\r\n }\r\n };\r\n this.mask = function() {\r\n if (this.get('mask') !== 'none') {\r\n let mask = new SvgElemMask(this.get('mask'), null);\r\n mask.useMask(this.getBoundingBox());\r\n return true;\r\n }\r\n };\r\n this.getFill = function(isClip, isMask) {\r\n let opacity = this.get('opacity'),\r\n fill = this.get('fill'),\r\n fillOpacity = this.get('fill-opacity');\r\n if (isClip) {return DefaultColors.white;}\r\n if (fill !== 'none' && opacity && fillOpacity) {\r\n if (fill instanceof SvgElemGradient || fill instanceof SvgElemPattern) {\r\n return fill.getPaint(this.getBoundingBox(), fillOpacity * opacity, isClip, isMask);\r\n }\r\n return opacityToColor(fill, fillOpacity * opacity, isMask);\r\n }\r\n };\r\n this.getStroke = function(isClip, isMask) {\r\n let opacity = this.get('opacity'),\r\n stroke = this.get('stroke'),\r\n strokeOpacity = this.get('stroke-opacity');\r\n if (isClip || isEqual(this.get('stroke-width'), 0)) {return;}\r\n if (stroke !== 'none' && opacity && strokeOpacity) {\r\n if (stroke instanceof SvgElemGradient || stroke instanceof SvgElemPattern) {\r\n return stroke.getPaint(this.getBoundingBox(), strokeOpacity * opacity, isClip, isMask);\r\n }\r\n return opacityToColor(stroke, strokeOpacity * opacity, isMask);\r\n }\r\n };\r\n };\r\n\r\n var SvgElemHasChildren = function(obj, inherits) {\r\n SvgElemStylable.call(this, obj, inherits);\r\n this.allowedChildren = ['use', 'g', 'a', 'svg', 'image', 'rect', 'circle', 'ellipse', 'line', 'polyline', 'polygon', 'path', 'text'];\r\n this.getBoundingShape = function() {\r\n let shape = new SvgShape(),\r\n children = this.getChildren();\r\n for (let i = 0; i < children.length; i++) {\r\n if (children[i].get('display') !== 'none') {\r\n if (typeof children[i].getBoundingShape === 'function') {\r\n let childShape = children[i].getBoundingShape().clone();\r\n if (typeof children[i].getTransformation === 'function') {\r\n childShape.transform(children[i].getTransformation());\r\n }\r\n shape.mergeShape(childShape);\r\n }\r\n }\r\n }\r\n return shape;\r\n };\r\n this.drawChildren = function(isClip, isMask) {\r\n let children = this.getChildren();\r\n for (let i = 0; i < children.length; i++) {\r\n if (children[i].get('display') !== 'none') {\r\n if (typeof children[i].drawInDocument === 'function') {\r\n children[i].drawInDocument(isClip, isMask);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n\r\n var SvgElemContainer = function(obj, inherits) {\r\n SvgElemHasChildren.call(this, obj, inherits);\r\n this.drawContent = function(isClip, isMask) {\r\n this.transform();\r\n let clipped = this.clip(),\r\n masked = this.mask(),\r\n group;\r\n if ((this.get('opacity') < 1 || clipped || masked) && !isClip) {\r\n group = docBeginGroup(getPageBBox());\r\n }\r\n this.drawChildren(isClip, isMask);\r\n if (group) {\r\n docEndGroup(group);\r\n doc.fillOpacity(this.get('opacity'));\r\n docInsertGroup(group);\r\n }\r\n };\r\n };\r\n\r\n var SvgElemUse = function(obj, inherits) {\r\n SvgElemContainer.call(this, obj, inherits);\r\n let x = this.getLength('x', this.getVWidth(), 0),\r\n y = this.getLength('y', this.getVHeight(), 0),\r\n child = this.getUrl('href') || this.getUrl('xlink:href');\r\n if (child) {child = createSVGElement(child, this);}\r\n this.getChildren = function() {\r\n return child ? [child] : [];\r\n };\r\n this.drawInDocument = function(isClip, isMask) {\r\n doc.save();\r\n this.drawContent(isClip, isMask);\r\n doc.restore();\r\n };\r\n this.getTransformation = function() {\r\n return multiplyMatrix(this.get('transform'), [1, 0, 0, 1, x, y]);\r\n };\r\n };\r\n\r\n var SvgElemSymbol = function(obj, inherits) {\r\n SvgElemContainer.call(this, obj, inherits);\r\n let width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\r\n height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight());\r\n if (inherits instanceof SvgElemUse) {\r\n width = inherits.getLength('width', inherits.getParentVWidth(), width);\r\n height = inherits.getLength('height', inherits.getParentVHeight(), height);\r\n }\r\n let aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\r\n viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\r\n this.getVWidth = function() {\r\n return viewBox[2];\r\n };\r\n this.getVHeight = function() {\r\n return viewBox[3];\r\n };\r\n this.drawInDocument = function(isClip, isMask) {\r\n doc.save();\r\n this.drawContent(isClip, isMask);\r\n doc.restore();\r\n };\r\n this.getTransformation = function() {\r\n return multiplyMatrix(parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]), [1, 0, 0, 1, -viewBox[0], -viewBox[1]]);\r\n };\r\n };\r\n\r\n var SvgElemGroup = function(obj, inherits) {\r\n SvgElemContainer.call(this, obj, inherits);\r\n this.drawInDocument = function(isClip, isMask) {\r\n doc.save();\r\n if (this.link && !isClip && !isMask) {this.addLink();}\r\n this.drawContent(isClip, isMask);\r\n doc.restore();\r\n };\r\n this.getTransformation = function() {\r\n return this.get('transform');\r\n };\r\n };\r\n\r\n var SvgElemLink = function(obj, inherits) {\r\n if (inherits && inherits.isText) {\r\n SvgElemTspan.call(this, obj, inherits);\r\n this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\r\n } else {\r\n SvgElemGroup.call(this, obj, inherits);\r\n }\r\n this.link = this.attr('href') || this.attr('xlink:href');\r\n this.addLink = function() {\r\n if (this.link.match(/^(?:[a-z][a-z0-9+.-]*:|\\/\\/)?/i) && this.getChildren().length) {\r\n let bbox = this.getBoundingShape().transform(getGlobalMatrix()).getBoundingBox();\r\n docInsertLink(bbox[0], bbox[1], bbox[2], bbox[3], this.link);\r\n }\r\n }\r\n };\r\n\r\n var SvgElemSvg = function(obj, inherits) {\r\n SvgElemContainer.call(this, obj, inherits);\r\n let width = this.getLength('width', this.getParentVWidth(), this.getParentVWidth()),\r\n height = this.getLength('height', this.getParentVHeight(), this.getParentVHeight()),\r\n x = this.getLength('x', this.getParentVWidth(), 0),\r\n y = this.getLength('y', this.getParentVHeight(), 0);\r\n if (inherits instanceof SvgElemUse) {\r\n width = inherits.getLength('width', inherits.getParentVWidth(), width);\r\n height = inherits.getLength('height', inherits.getParentVHeight(), height);\r\n }\r\n let aspectRatio = this.attr('preserveAspectRatio'),\r\n viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\r\n if (this.isOuterElement && preserveAspectRatio) {\r\n x = y = 0;\r\n width = viewportWidth;\r\n height = viewportHeight;\r\n aspectRatio = preserveAspectRatio;\r\n }\r\n this.getVWidth = function() {\r\n return viewBox[2];\r\n };\r\n this.getVHeight = function() {\r\n return viewBox[3];\r\n };\r\n this.drawInDocument = function(isClip, isMask) {\r\n doc.save();\r\n if (this.get('overflow') === 'hidden') {\r\n new SvgShape().M(x, y).L(x + width, y).L(x + width, y + height).L(x, y + height).Z()\r\n .transform(this.get('transform'))\r\n .insertInDocument();\r\n doc.clip();\r\n }\r\n this.drawContent(isClip, isMask);\r\n doc.restore();\r\n };\r\n this.getTransformation = function() {\r\n return multiplyMatrix(\r\n this.get('transform'),\r\n [1, 0, 0, 1, x, y],\r\n parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3]),\r\n [1, 0, 0, 1, -viewBox[0], -viewBox[1]]\r\n );\r\n };\r\n };\r\n\r\n var SVGElemImage = function(obj, inherits) {\r\n SvgElemStylable.call(this, obj, inherits);\r\n let link = imageCallback(this.attr('href') || this.attr('xlink:href') || ''),\r\n x = this.getLength('x', this.getVWidth(), 0),\r\n y = this.getLength('y', this.getVHeight(), 0),\r\n width = this.getLength('width', this.getVWidth(), 'auto'),\r\n height = this.getLength('height', this.getVHeight(), 'auto'),\r\n image;\r\n try {\r\n image = doc.openImage(link);\r\n } catch(e) {\r\n warningCallback('SVGElemImage: failed to open image \"' + link + '\" in PDFKit');\r\n }\r\n if (image) {\r\n if (width === 'auto' && height !== 'auto') {\r\n width = height * image.width / image.height;\r\n } else if (height === 'auto' && width !== 'auto') {\r\n height = width * image.height / image.width;\r\n } else if (width === 'auto' && height === 'auto') {\r\n width = image.width;\r\n height = image.height;\r\n }\r\n }\r\n if (width === 'auto' || width < 0) {width = 0;}\r\n if (height === 'auto' || height < 0) {height = 0;}\r\n this.getTransformation = function() {\r\n return this.get('transform');\r\n };\r\n this.getBoundingShape = function() {\r\n return new SvgShape().M(x, y).L(x + width, y).M(x + width, y + height).L(x, y + height);\r\n };\r\n this.drawInDocument = function(isClip, isMask) {\r\n if (this.get('visibility') === 'hidden' || !image) {return;}\r\n doc.save();\r\n this.transform();\r\n if (this.get('overflow') === 'hidden') {\r\n doc.rect(x, y, width, height).clip();\r\n }\r\n this.clip();\r\n this.mask();\r\n doc.translate(x, y);\r\n doc.transform.apply(doc, parseAspectRatio(this.attr('preserveAspectRatio'), width, height, image ? image.width : width, image ? image.height : height));\r\n if (!isClip) {\r\n doc.fillOpacity(this.get('opacity'));\r\n doc.image(image, 0, 0);\r\n } else {\r\n doc.rect(0, 0, image.width, image.height);\r\n docFillColor(DefaultColors.white).fill();\r\n }\r\n doc.restore();\r\n };\r\n };\r\n\r\n var SvgElemPattern = function(obj, inherits, fallback) {\r\n SvgElemHasChildren.call(this, obj, inherits);\r\n this.ref = (function() {\r\n let ref = this.getUrl('href') || this.getUrl('xlink:href');\r\n if (ref && ref.nodeName === obj.nodeName) {\r\n return new SvgElemPattern(ref, inherits, fallback);\r\n }\r\n }).call(this);\r\n let _attr = this.attr;\r\n this.attr = function(key) {\r\n let attr = _attr.call(this, key);\r\n if (attr != null || key === 'href' || key === 'xlink:href') {return attr;}\r\n return this.ref ? this.ref.attr(key) : null;\r\n };\r\n let _getChildren = this.getChildren;\r\n this.getChildren = function() {\r\n let children = _getChildren.call(this);\r\n if (children.length > 0) {return children;}\r\n return this.ref ? this.ref.getChildren() : [];\r\n };\r\n this.getPaint = function(bBox, gOpacity, isClip, isMask) {\r\n let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\r\n bBoxUnitsContent = (this.attr('patternContentUnits') === 'objectBoundingBox'),\r\n x = this.getLength('x', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0),\r\n y = this.getLength('y', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0),\r\n width = this.getLength('width', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0),\r\n height = this.getLength('height', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0);\r\n if (bBoxUnitsContent && !bBoxUnitsPattern) { // Use the same units for pattern & pattern content\r\n x = (x - bBox[0]) / (bBox[2] - bBox[0]) || 0;\r\n y = (y - bBox[1]) / (bBox[3] - bBox[1]) || 0;\r\n width = width / (bBox[2] - bBox[0]) || 0;\r\n height = height / (bBox[3] - bBox[1]) || 0;\r\n } else if (!bBoxUnitsContent && bBoxUnitsPattern) {\r\n x = bBox[0] + x * (bBox[2] - bBox[0]);\r\n y = bBox[1] + y * (bBox[3] - bBox[1]);\r\n width = width * (bBox[2] - bBox[0]);\r\n height = height * (bBox[3] - bBox[1]);\r\n }\r\n let viewBox = this.getViewbox('viewBox', [0, 0, width, height]),\r\n aspectRatio = (this.attr('preserveAspectRatio') || '').trim(),\r\n aspectRatioMatrix = multiplyMatrix(\r\n parseAspectRatio(aspectRatio, width, height, viewBox[2], viewBox[3], 0),\r\n [1, 0, 0, 1, -viewBox[0], -viewBox[1]]\r\n ),\r\n matrix = parseTranform(this.attr('patternTransform'));\r\n if (bBoxUnitsContent) {\r\n matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\r\n }\r\n matrix = multiplyMatrix(matrix, [1, 0, 0, 1, x, y]);\r\n if ((matrix = validateMatrix(matrix)) && (aspectRatioMatrix = validateMatrix(aspectRatioMatrix)) && (width = validateNumber(width)) && (height = validateNumber(height))) {\r\n let group = docBeginGroup([0, 0, width, height]);\r\n doc.transform.apply(doc, aspectRatioMatrix);\r\n this.drawChildren(isClip, isMask);\r\n docEndGroup(group);\r\n return [docCreatePattern(group, width, height, matrix), gOpacity];\r\n } else {\r\n return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\r\n }\r\n };\r\n this.getVWidth = function() {\r\n let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\r\n width = this.getLength('width', (bBoxUnitsPattern ? 1 : this.getParentVWidth()), 0);\r\n return this.getViewbox('viewBox', [0, 0, width, 0])[2];\r\n };\r\n this.getVHeight = function() {\r\n let bBoxUnitsPattern = (this.attr('patternUnits') !== 'userSpaceOnUse'),\r\n height = this.getLength('height', (bBoxUnitsPattern ? 1 : this.getParentVHeight()), 0);\r\n return this.getViewbox('viewBox', [0, 0, 0, height])[3];\r\n };\r\n };\r\n\r\n var SvgElemGradient = function(obj, inherits, fallback) {\r\n SvgElem.call(this, obj, inherits);\r\n this.allowedChildren = ['stop'];\r\n this.ref = (function() {\r\n let ref = this.getUrl('href') || this.getUrl('xlink:href');\r\n if (ref && ref.nodeName === obj.nodeName) {\r\n return new SvgElemGradient(ref, inherits, fallback);\r\n }\r\n }).call(this);\r\n let _attr = this.attr;\r\n this.attr = function(key) {\r\n let attr = _attr.call(this, key);\r\n if (attr != null || key === 'href' || key === 'xlink:href') {return attr;}\r\n return this.ref ? this.ref.attr(key) : null;\r\n };\r\n let _getChildren = this.getChildren;\r\n this.getChildren = function() {\r\n let children = _getChildren.call(this);\r\n if (children.length > 0) {return children;}\r\n return this.ref ? this.ref.getChildren() : [];\r\n };\r\n this.getPaint = function(bBox, gOpacity, isClip, isMask) {\r\n let children = this.getChildren();\r\n if (children.length === 0) {return;}\r\n if (children.length === 1) {\r\n let child = children[0],\r\n stopColor = child.get('stop-color');\r\n if (stopColor === 'none') {return;}\r\n return opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\r\n }\r\n let bBoxUnits = (this.attr('gradientUnits') !== 'userSpaceOnUse'),\r\n matrix = parseTranform(this.attr('gradientTransform')),\r\n spread = this.attr('spreadMethod'),\r\n grad,\r\n x1, x2, y1, y2, r2,\r\n nAfter = 0,\r\n nBefore = 0,\r\n nTotal = 1;\r\n if (bBoxUnits) {\r\n matrix = multiplyMatrix([bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]], matrix);\r\n }\r\n if (matrix = validateMatrix(matrix)) {\r\n if (this.name === 'linearGradient') {\r\n x1 = this.getLength('x1', (bBoxUnits ? 1 : this.getVWidth()), 0);\r\n x2 = this.getLength('x2', (bBoxUnits ? 1 : this.getVWidth()), (bBoxUnits ? 1 : this.getVWidth()));\r\n y1 = this.getLength('y1', (bBoxUnits ? 1 : this.getVHeight()), 0);\r\n y2 = this.getLength('y2', (bBoxUnits ? 1 : this.getVHeight()), 0);\r\n } else {\r\n x2 = this.getLength('cx', (bBoxUnits ? 1 : this.getVWidth()), (bBoxUnits ? 0.5 : 0.5 * this.getVWidth()));\r\n y2 = this.getLength('cy', (bBoxUnits ? 1 : this.getVHeight()), (bBoxUnits ? 0.5 : 0.5 * this.getVHeight()));\r\n r2 = this.getLength('r', (bBoxUnits ? 1 : this.getViewport()), (bBoxUnits ? 0.5 : 0.5 * this.getViewport()));\r\n x1 = this.getLength('fx', (bBoxUnits ? 1 : this.getVWidth()), x2);\r\n y1 = this.getLength('fy', (bBoxUnits ? 1 : this.getVHeight()), y2);\r\n if (r2 < 0) {\r\n warningCallback('SvgElemGradient: negative r value');\r\n }\r\n let d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)),\r\n multiplier = 1;\r\n if (d > r2) { // according to specification\r\n multiplier = r2 / d;\r\n x1 = x2 + (x1 - x2) * multiplier;\r\n y1 = y2 + (y1 - y2) * multiplier;\r\n }\r\n r2 = Math.max(r2, d * multiplier * (1 + 1e-6)); // fix for edge-case gradients see issue #84\r\n }\r\n if (spread === 'reflect' || spread === 'repeat') {\r\n let inv = inverseMatrix(matrix),\r\n corner1 = transformPoint([bBox[0], bBox[1]], inv),\r\n corner2 = transformPoint([bBox[2], bBox[1]], inv),\r\n corner3 = transformPoint([bBox[2], bBox[3]], inv),\r\n corner4 = transformPoint([bBox[0], bBox[3]], inv);\r\n if (this.name === 'linearGradient') { // See file 'gradient-repeat-maths.png'\r\n nAfter = Math.max((corner1[0] - x2) * (x2 - x1) + (corner1[1] - y2) * (y2 - y1),\r\n (corner2[0] - x2) * (x2 - x1) + (corner2[1] - y2) * (y2 - y1),\r\n (corner3[0] - x2) * (x2 - x1) + (corner3[1] - y2) * (y2 - y1),\r\n (corner4[0] - x2) * (x2 - x1) + (corner4[1] - y2) * (y2 - y1))\r\n / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n nBefore = Math.max((corner1[0] - x1) * (x1 - x2) + (corner1[1] - y1) * (y1 - y2),\r\n (corner2[0] - x1) * (x1 - x2) + (corner2[1] - y1) * (y1 - y2),\r\n (corner3[0] - x1) * (x1 - x2) + (corner3[1] - y1) * (y1 - y2),\r\n (corner4[0] - x1) * (x1 - x2) + (corner4[1] - y1) * (y1 - y2))\r\n / (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));\r\n } else {\r\n nAfter = Math.sqrt(Math.max(Math.pow(corner1[0] - x2, 2) + Math.pow(corner1[1] - y2, 2),\r\n Math.pow(corner2[0] - x2, 2) + Math.pow(corner2[1] - y2, 2),\r\n Math.pow(corner3[0] - x2, 2) + Math.pow(corner3[1] - y2, 2),\r\n Math.pow(corner4[0] - x2, 2) + Math.pow(corner4[1] - y2, 2))) / r2 - 1;\r\n }\r\n nAfter = Math.ceil(nAfter + 0.5); // Add a little more because the stroke can extend outside of the bounding box\r\n nBefore = Math.ceil(nBefore + 0.5);\r\n nTotal = nBefore + 1 + nAfter; // How many times the gradient needs to be repeated to fill the object bounding box\r\n }\r\n if (this.name === 'linearGradient') {\r\n grad = doc.linearGradient(x1 - nBefore * (x2 - x1), y1 - nBefore * (y2 - y1), x2 + nAfter * (x2 - x1), y2 + nAfter * (y2 - y1));\r\n } else {\r\n grad = doc.radialGradient(x1, y1, 0, x2, y2, r2 + nAfter * r2);\r\n }\r\n for (let n = 0; n < nTotal; n++) {\r\n let offset = 0,\r\n inOrder = (spread !== 'reflect' || (n - nBefore) % 2 === 0);\r\n for (let i = 0; i < children.length; i++) {\r\n let child = children[inOrder ? i : children.length - 1 - i],\r\n stopColor = child.get('stop-color');\r\n if (stopColor === 'none') {stopColor = DefaultColors.transparent;}\r\n stopColor = opacityToColor(stopColor, child.get('stop-opacity') * gOpacity, isMask);\r\n offset = Math.max(offset, inOrder ? child.getPercent('offset', 0) : 1 - child.getPercent('offset', 0));\r\n if (i === 0 && stopColor[0].length === 4) {grad._colorSpace = 'DeviceCMYK';} // Fix until PR #763 is merged into PDFKit\r\n if (i === 0 && offset > 0) {\r\n grad.stop((n + 0) / nTotal, stopColor[0], stopColor[1]);\r\n }\r\n grad.stop((n + offset) / (nAfter + nBefore + 1), stopColor[0], stopColor[1]);\r\n if (i === children.length - 1 && offset < 1) {\r\n grad.stop((n + 1) / nTotal, stopColor[0], stopColor[1]);\r\n }\r\n }\r\n }\r\n grad.setTransform.apply(grad, matrix);\r\n return [grad, 1];\r\n } else {\r\n return fallback ? [fallback[0], fallback[1] * gOpacity] : undefined;\r\n }\r\n }\r\n };\r\n\r\n var SvgElemBasicShape = function(obj, inherits) {\r\n SvgElemStylable.call(this, obj, inherits);\r\n this.dashScale = 1;\r\n this.getBoundingShape = function() {\r\n return this.shape;\r\n };\r\n this.getTransformation = function() {\r\n return this.get('transform');\r\n };\r\n this.drawInDocument = function(isClip, isMask) {\r\n if (this.get('visibility') === 'hidden' || !this.shape) {return;}\r\n doc.save();\r\n this.transform();\r\n this.clip();\r\n if (!isClip) {\r\n let masked = this.mask(),\r\n group;\r\n if (masked) {\r\n group = docBeginGroup(getPageBBox());\r\n }\r\n let subPaths = this.shape.getSubPaths(),\r\n fill = this.getFill(isClip, isMask),\r\n stroke = this.getStroke(isClip, isMask),\r\n lineWidth = this.get('stroke-width'),\r\n lineCap = this.get('stroke-linecap');\r\n if (fill || stroke) {\r\n if (fill) {\r\n docFillColor(fill);\r\n }\r\n if (stroke) {\r\n for (let j = 0; j < subPaths.length; j++) {\r\n if (isEqual(subPaths[j].totalLength, 0)) {\r\n if ((lineCap === 'square' || lineCap === 'round') && lineWidth > 0) {\r\n if (subPaths[j].startPoint && subPaths[j].startPoint.length > 1) {\r\n let x = subPaths[j].startPoint[0],\r\n y = subPaths[j].startPoint[1];\r\n docFillColor(stroke);\r\n if (lineCap === 'square') {\r\n doc.rect(x - 0.5 * lineWidth, y - 0.5 * lineWidth, lineWidth, lineWidth);\r\n } else if (lineCap === 'round') {\r\n doc.circle(x, y, 0.5 * lineWidth);\r\n }\r\n doc.fill();\r\n }\r\n }\r\n }\r\n }\r\n let dashArray = this.get('stroke-dasharray'),\r\n dashOffset = this.get('stroke-dashoffset');\r\n if (isNotEqual(this.dashScale, 1)) {\r\n for (let j = 0; j < dashArray.length; j++) {\r\n dashArray[j] *= this.dashScale;\r\n }\r\n dashOffset *= this.dashScale;\r\n }\r\n docStrokeColor(stroke);\r\n doc.lineWidth(lineWidth)\r\n .miterLimit(this.get('stroke-miterlimit'))\r\n .lineJoin(this.get('stroke-linejoin'))\r\n .lineCap(lineCap)\r\n .dash(dashArray, {phase: dashOffset});\r\n }\r\n for (let j = 0; j < subPaths.length; j++) {\r\n if (subPaths[j].totalLength > 0) {\r\n subPaths[j].insertInDocument();\r\n }\r\n }\r\n if (fill && stroke) {\r\n doc.fillAndStroke(this.get('fill-rule'));\r\n } else if (fill) {\r\n doc.fill(this.get('fill-rule'));\r\n } else if (stroke) {\r\n doc.stroke();\r\n }\r\n }\r\n let markerStart = this.get('marker-start'),\r\n markerMid = this.get('marker-mid'),\r\n markerEnd = this.get('marker-end');\r\n if (markerStart !== 'none' || markerMid !== 'none' || markerEnd !== 'none') {\r\n let markersPos = this.shape.getMarkers();\r\n if (markerStart !== 'none') {\r\n let marker = new SvgElemMarker(markerStart, null);\r\n marker.drawMarker(false, isMask, markersPos[0], lineWidth);\r\n }\r\n if (markerMid !== 'none') {\r\n for (let i = 1; i < markersPos.length - 1; i++) {\r\n let marker = new SvgElemMarker(markerMid, null);\r\n marker.drawMarker(false, isMask, markersPos[i], lineWidth);\r\n }\r\n }\r\n if (markerEnd !== 'none') {\r\n let marker = new SvgElemMarker(markerEnd, null);\r\n marker.drawMarker(false, isMask, markersPos[markersPos.length - 1], lineWidth);\r\n }\r\n }\r\n if (group) {\r\n docEndGroup(group);\r\n docInsertGroup(group);\r\n }\r\n } else {\r\n this.shape.insertInDocument();\r\n docFillColor(DefaultColors.white);\r\n doc.fill(this.get('clip-rule'));\r\n }\r\n doc.restore();\r\n };\r\n };\r\n\r\n var SvgElemRect = function(obj, inherits) {\r\n SvgElemBasicShape.call(this, obj, inherits);\r\n let x = this.getLength('x', this.getVWidth(), 0),\r\n y = this.getLength('y', this.getVHeight(), 0),\r\n w = this.getLength('width', this.getVWidth(), 0),\r\n h = this.getLength('height', this.getVHeight(), 0),\r\n rx = this.getLength('rx', this.getVWidth()),\r\n ry = this.getLength('ry', this.getVHeight());\r\n if (rx === undefined && ry === undefined) {rx = ry = 0;}\r\n else if (rx === undefined && ry !== undefined) {rx = ry;}\r\n else if (rx !== undefined && ry === undefined) {ry = rx;}\r\n if (w > 0 && h > 0) {\r\n if (rx && ry) {\r\n rx = Math.min(rx, 0.5 * w);\r\n ry = Math.min(ry, 0.5 * h);\r\n this.shape = new SvgShape().M(x + rx, y).L(x + w - rx, y).A(rx, ry, 0, 0, 1, x + w, y + ry)\r\n .L(x + w, y + h - ry).A(rx, ry, 0, 0, 1, x + w - rx, y + h).L(x + rx, y + h)\r\n .A(rx, ry, 0, 0, 1, x, y + h - ry).L(x, y + ry).A(rx, ry, 0, 0, 1, x + rx, y).Z();\r\n } else {\r\n this.shape = new SvgShape().M(x, y).L(x + w, y).L(x + w, y + h).L(x, y + h).Z();\r\n }\r\n } else {\r\n this.shape = new SvgShape();\r\n }\r\n };\r\n\r\n var SvgElemCircle = function(obj, inherits) {\r\n SvgElemBasicShape.call(this, obj, inherits);\r\n let cx = this.getLength('cx', this.getVWidth(), 0),\r\n cy = this.getLength('cy', this.getVHeight(), 0),\r\n r = this.getLength('r', this.getViewport(), 0);\r\n if (r > 0) {\r\n this.shape = new SvgShape().M(cx + r, cy).A(r, r, 0, 0, 1, cx - r, cy).A(r, r, 0, 0, 1, cx + r, cy).Z();\r\n } else {\r\n this.shape = new SvgShape();\r\n }\r\n };\r\n\r\n var SvgElemEllipse = function(obj, inherits) {\r\n SvgElemBasicShape.call(this, obj, inherits);\r\n let cx = this.getLength('cx', this.getVWidth(), 0),\r\n cy = this.getLength('cy', this.getVHeight(), 0),\r\n rx = this.getLength('rx', this.getVWidth(), 0),\r\n ry = this.getLength('ry', this.getVHeight(), 0);\r\n if (rx > 0 && ry > 0) {\r\n this.shape = new SvgShape().M(cx + rx, cy).A(rx, ry, 0, 0, 1, cx - rx, cy).A(rx, ry, 0, 0, 1, cx + rx, cy).Z();\r\n } else {\r\n this.shape = new SvgShape();\r\n }\r\n };\r\n\r\n var SvgElemLine = function(obj, inherits) {\r\n SvgElemBasicShape.call(this, obj, inherits);\r\n let x1 = this.getLength('x1', this.getVWidth(), 0),\r\n y1 = this.getLength('y1', this.getVHeight(), 0),\r\n x2 = this.getLength('x2', this.getVWidth(), 0),\r\n y2 = this.getLength('y2', this.getVHeight(), 0);\r\n this.shape = new SvgShape().M(x1, y1).L(x2, y2);\r\n };\r\n\r\n var SvgElemPolyline = function(obj, inherits) {\r\n SvgElemBasicShape.call(this, obj, inherits);\r\n let points = this.getNumberList('points');\r\n this.shape = new SvgShape();\r\n for (let i = 0; i < points.length - 1; i += 2) {\r\n if (i === 0) {\r\n this.shape.M(points[i], points[i+1]);\r\n } else {\r\n this.shape.L(points[i], points[i+1]);\r\n }\r\n }\r\n if (points.error) {warningCallback('SvgElemPolygon: unexpected string ' + points.error);}\r\n if (points.length % 2 === 1) {warningCallback('SvgElemPolyline: uneven number of coordinates');}\r\n };\r\n\r\n var SvgElemPolygon = function(obj, inherits) {\r\n SvgElemBasicShape.call(this, obj, inherits);\r\n let points = this.getNumberList('points');\r\n this.shape = new SvgShape();\r\n for (let i = 0; i < points.length - 1; i += 2) {\r\n if (i === 0) {\r\n this.shape.M(points[i], points[i+1]);\r\n } else {\r\n this.shape.L(points[i], points[i+1]);\r\n }\r\n }\r\n this.shape.Z();\r\n if (points.error) {warningCallback('SvgElemPolygon: unexpected string ' + points.error);}\r\n if (points.length % 2 === 1) {warningCallback('SvgElemPolygon: uneven number of coordinates');}\r\n };\r\n\r\n var SvgElemPath = function(obj, inherits) {\r\n SvgElemBasicShape.call(this, obj, inherits);\r\n this.shape = new SvgShape().path(this.attr('d'));\r\n let pathLength = this.getLength('pathLength', this.getViewport());\r\n this.pathLength = pathLength > 0 ? pathLength : undefined;\r\n this.dashScale = (this.pathLength !== undefined ? this.shape.totalLength / this.pathLength : 1);\r\n };\r\n\r\n var SvgElemMarker = function(obj, inherits) {\r\n SvgElemHasChildren.call(this, obj, inherits);\r\n let width = this.getLength('markerWidth', this.getParentVWidth(), 3),\r\n height = this.getLength('markerHeight', this.getParentVHeight(), 3),\r\n viewBox = this.getViewbox('viewBox', [0, 0, width, height]);\r\n this.getVWidth = function() {\r\n return viewBox[2];\r\n };\r\n this.getVHeight = function() {\r\n return viewBox[3];\r\n };\r\n this.drawMarker = function(isClip, isMask, posArray, strokeWidth) {\r\n doc.save();\r\n let orient = this.attr('orient'),\r\n units = this.attr('markerUnits'),\r\n rotate = (orient === 'auto' ? posArray[2] : (parseFloat(orient) || 0) * Math.PI / 180),\r\n scale = (units === 'userSpaceOnUse' ? 1 : strokeWidth);\r\n doc.transform(Math.cos(rotate) * scale, Math.sin(rotate) * scale, -Math.sin(rotate) * scale, Math.cos(rotate) * scale, posArray[0], posArray[1]);\r\n let refX = this.getLength('refX', this.getVWidth(), 0),\r\n refY = this.getLength('refY', this.getVHeight(), 0),\r\n aspectRatioMatrix = parseAspectRatio(this.attr('preserveAspectRatio'), width, height, viewBox[2], viewBox[3], 0.5);\r\n if (this.get('overflow') === 'hidden') {\r\n doc.rect(aspectRatioMatrix[0] * (viewBox[0] + viewBox[2] / 2 - refX) - width / 2, aspectRatioMatrix[3] * (viewBox[1] + viewBox[3] / 2 - refY) - height / 2, width, height).clip();\r\n }\r\n doc.transform.apply(doc, aspectRatioMatrix);\r\n doc.translate(-refX, -refY);\r\n let group;\r\n if (this.get('opacity') < 1 && !isClip) {\r\n group = docBeginGroup(getPageBBox());\r\n }\r\n this.drawChildren(isClip, isMask);\r\n if (group) {\r\n docEndGroup(group);\r\n doc.fillOpacity(this.get('opacity'));\r\n docInsertGroup(group);\r\n }\r\n doc.restore();\r\n };\r\n };\r\n\r\n var SvgElemClipPath = function(obj, inherits) {\r\n SvgElemHasChildren.call(this, obj, inherits);\r\n this.useMask = function(bBox) {\r\n let group = docBeginGroup(getPageBBox());\r\n doc.save();\r\n if (this.attr('clipPathUnits') === 'objectBoundingBox') {\r\n doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\r\n }\r\n this.clip();\r\n this.drawChildren(true, false);\r\n doc.restore();\r\n docEndGroup(group);\r\n docApplyMask(group, true);\r\n };\r\n };\r\n\r\n var SvgElemMask = function(obj, inherits) {\r\n SvgElemHasChildren.call(this, obj, inherits);\r\n this.useMask = function(bBox) {\r\n let group = docBeginGroup(getPageBBox());\r\n doc.save();\r\n let x, y, w, h;\r\n if (this.attr('maskUnits') === 'userSpaceOnUse') {\r\n x = this.getLength('x', this.getVWidth(), -0.1 * (bBox[2] - bBox[0]) + bBox[0]);\r\n y = this.getLength('y', this.getVHeight(), -0.1 * (bBox[3] - bBox[1]) + bBox[1]);\r\n w = this.getLength('width', this.getVWidth(), 1.2 * (bBox[2] - bBox[0]));\r\n h = this.getLength('height', this.getVHeight(), 1.2 * (bBox[3] - bBox[1]));\r\n } else {\r\n x = this.getLength('x', this.getVWidth(), -0.1) * (bBox[2] - bBox[0]) + bBox[0];\r\n y = this.getLength('y', this.getVHeight(), -0.1) * (bBox[3] - bBox[1]) + bBox[1];\r\n w = this.getLength('width', this.getVWidth(), 1.2) * (bBox[2] - bBox[0]);\r\n h = this.getLength('height', this.getVHeight(), 1.2) * (bBox[3] - bBox[1]);\r\n }\r\n doc.rect(x, y, w, h).clip();\r\n if (this.attr('maskContentUnits') === 'objectBoundingBox') {\r\n doc.transform(bBox[2] - bBox[0], 0, 0, bBox[3] - bBox[1], bBox[0], bBox[1]);\r\n }\r\n this.clip();\r\n this.drawChildren(false, true);\r\n doc.restore();\r\n docEndGroup(group);\r\n docApplyMask(group, true);\r\n };\r\n };\r\n\r\n var SvgElemTextContainer = function(obj, inherits) {\r\n SvgElemStylable.call(this, obj, inherits);\r\n this.allowedChildren = ['tspan', '#text', '#cdata-section', 'a'];\r\n this.isText = true;\r\n this.getBoundingShape = function() {\r\n let shape = new SvgShape();\r\n for (let i = 0; i < this._pos.length; i++) {\r\n let pos = this._pos[i];\r\n if (!pos.hidden) {\r\n let dx0 = pos.ascent * Math.sin(pos.rotate), dy0 = -pos.ascent * Math.cos(pos.rotate),\r\n dx1 = pos.descent * Math.sin(pos.rotate), dy1 = -pos.descent * Math.cos(pos.rotate),\r\n dx2 = pos.width * Math.cos(pos.rotate), dy2 = pos.width * Math.sin(pos.rotate);\r\n shape.M(pos.x + dx0, pos.y + dy0).L(pos.x + dx0 + dx2, pos.y + dy0 + dy2)\r\n .M(pos.x + dx1 + dx2, pos.y + dy1 + dy2).L(pos.x + dx1, pos.y + dy1);\r\n }\r\n }\r\n return shape;\r\n };\r\n this.drawTextInDocument = function(isClip, isMask) {\r\n if (this.link && !isClip && !isMask) {this.addLink();}\r\n if (this.get('text-decoration') === 'underline') {\r\n this.decorate(0.05 * this._font.size, -0.075 * this._font.size, isClip, isMask);\r\n }\r\n if (this.get('text-decoration') === 'overline') {\r\n this.decorate(0.05 * this._font.size, getAscent(this._font.font, this._font.size) + 0.075 * this._font.size, isClip, isMask);\r\n }\r\n let fill = this.getFill(isClip, isMask),\r\n stroke = this.getStroke(isClip, isMask),\r\n strokeWidth = this.get('stroke-width');\r\n if (this._font.fauxBold) {\r\n if (!stroke) {\r\n stroke = fill;\r\n strokeWidth = this._font.size * 0.03;\r\n } else {\r\n strokeWidth += this._font.size * 0.03;\r\n }\r\n }\r\n let children = this.getChildren();\r\n for (let i = 0; i < children.length; i++) {\r\n let childElem = children[i];\r\n switch(childElem.name) {\r\n case 'tspan': case 'textPath': case 'a':\r\n if (childElem.get('display') !== 'none') {\r\n childElem.drawTextInDocument(isClip, isMask);\r\n }\r\n break;\r\n case '#text': case '#cdata-section':\r\n if (this.get('visibility') === 'hidden') {continue;}\r\n if (fill || stroke || isClip) {\r\n if (fill) {\r\n docFillColor(fill);\r\n }\r\n if (stroke && strokeWidth) {\r\n docStrokeColor(stroke);\r\n doc.lineWidth(strokeWidth)\r\n .miterLimit(this.get('stroke-miterlimit'))\r\n .lineJoin(this.get('stroke-linejoin'))\r\n .lineCap(this.get('stroke-linecap'))\r\n .dash(this.get('stroke-dasharray'), {phase:this.get('stroke-dashoffset')});\r\n }\r\n docBeginText(this._font.font, this._font.size);\r\n docSetTextMode(!!fill, !!stroke);\r\n for (let j = 0, pos = childElem._pos; j < pos.length; j++) {\r\n if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\r\n let cos = Math.cos(pos[j].rotate), sin = Math.sin(pos[j].rotate), skew = (this._font.fauxItalic ? -0.25 : 0);\r\n docSetTextMatrix(cos * pos[j].scale, sin * pos[j].scale, cos * skew - sin, sin * skew + cos, pos[j].x, pos[j].y);\r\n docWriteGlyph(pos[j].glyph);\r\n }\r\n }\r\n docEndText();\r\n }\r\n break;\r\n }\r\n }\r\n if (this.get('text-decoration') === 'line-through') {\r\n this.decorate(0.05 * this._font.size, 0.5 * (getAscent(this._font.font, this._font.size) + getDescent(this._font.font, this._font.size)), isClip, isMask);\r\n }\r\n };\r\n this.decorate = function(lineWidth, linePosition, isClip, isMask) {\r\n let fill = this.getFill(isClip, isMask),\r\n stroke = this.getStroke(isClip, isMask);\r\n if (fill) {\r\n docFillColor(fill);\r\n }\r\n if (stroke) {\r\n docStrokeColor(stroke);\r\n doc.lineWidth(this.get('stroke-width'))\r\n .miterLimit(this.get('stroke-miterlimit'))\r\n .lineJoin(this.get('stroke-linejoin'))\r\n .lineCap(this.get('stroke-linecap'))\r\n .dash(this.get('stroke-dasharray'), {phase:this.get('stroke-dashoffset')});\r\n }\r\n for (let j = 0, pos = this._pos; j < pos.length; j++) {\r\n if (!pos[j].hidden && isNotEqual(pos[j].width, 0)) {\r\n let dx0 = (linePosition + lineWidth / 2) * Math.sin(pos[j].rotate),\r\n dy0 = -(linePosition + lineWidth / 2) * Math.cos(pos[j].rotate),\r\n dx1 = (linePosition - lineWidth / 2) * Math.sin(pos[j].rotate),\r\n dy1 = -(linePosition - lineWidth / 2) * Math.cos(pos[j].rotate),\r\n dx2 = pos[j].width * Math.cos(pos[j].rotate),\r\n dy2 = pos[j].width * Math.sin(pos[j].rotate);\r\n new SvgShape().M(pos[j].x + dx0, pos[j].y + dy0)\r\n .L(pos[j].x + dx0 + dx2, pos[j].y + dy0 + dy2)\r\n .L(pos[j].x + dx1 + dx2, pos[j].y + dy1 + dy2)\r\n .L(pos[j].x + dx1, pos[j].y + dy1).Z()\r\n .insertInDocument();\r\n if (fill && stroke) {\r\n doc.fillAndStroke();\r\n } else if (fill) {\r\n doc.fill();\r\n } else if (stroke) {\r\n doc.stroke();\r\n }\r\n }\r\n }\r\n };\r\n };\r\n\r\n var SvgElemTextNode = function(obj, inherits) {\r\n this.name = obj.nodeName;\r\n this.textContent = obj.nodeValue;\r\n };\r\n\r\n var SvgElemTspan = function(obj, inherits) {\r\n SvgElemTextContainer.call(this, obj, inherits);\r\n };\r\n\r\n var SvgElemTextPath = function(obj, inherits) {\r\n SvgElemTextContainer.call(this, obj, inherits);\r\n let pathObject, pathLength, temp;\r\n if ((temp = this.attr('path')) && temp.trim() !== '') {\r\n let pathLength = this.getLength('pathLength', this.getViewport());\r\n this.pathObject = new SvgShape().path(temp);\r\n this.pathLength = pathLength > 0 ? pathLength : this.pathObject.totalLength;\r\n this.pathScale = this.pathObject.totalLength / this.pathLength;\r\n } else if ((temp = this.getUrl('href') || this.getUrl('xlink:href')) && temp.nodeName === 'path') {\r\n let pathElem = new SvgElemPath(temp, this);\r\n this.pathObject = pathElem.shape.clone().transform(pathElem.get('transform'));\r\n this.pathLength = this.chooseValue(pathElem.pathLength, this.pathObject.totalLength);\r\n this.pathScale = this.pathObject.totalLength / this.pathLength;\r\n }\r\n };\r\n\r\n var SvgElemText = function(obj, inherits) {\r\n SvgElemTextContainer.call(this, obj, inherits);\r\n this.allowedChildren = ['textPath', 'tspan', '#text', '#cdata-section', 'a'];\r\n (function (textParentElem) {\r\n let processedText = '', remainingText = obj.textContent, textPaths = [], currentChunk = [], currentAnchor, currentDirection, currentX = 0, currentY = 0;\r\n function doAnchoring() {\r\n if (currentChunk.length) {\r\n let last = currentChunk[currentChunk.length - 1];\r\n let first = currentChunk[0]\r\n let width = last.x + last.width - first.x;\r\n let anchordx = {'startltr': 0, 'middleltr': 0.5, 'endltr': 1, 'startrtl': 1, 'middlertl': 0.5, 'endrtl': 0}[currentAnchor + currentDirection] * width || 0;\r\n for (let i = 0; i < currentChunk.length; i++) {\r\n currentChunk[i].x -= anchordx;\r\n }\r\n }\r\n currentChunk = [];\r\n }\r\n function adjustLength(pos, length, spacingAndGlyphs) {\r\n let firstChar = pos[0], lastChar = pos[pos.length - 1],\r\n startX = firstChar.x, endX = lastChar.x + lastChar.width;\r\n if (spacingAndGlyphs) {\r\n let textScale = length / (endX - startX);\r\n if (textScale > 0 && textScale < Infinity) {\r\n for (let j = 0; j < pos.length; j++) {\r\n pos[j].x = startX + textScale * (pos[j].x - startX);\r\n pos[j].scale *= textScale;\r\n pos[j].width *= textScale;\r\n }\r\n }\r\n } else {\r\n if (pos.length >= 2) {\r\n let spaceDiff = (length - (endX - startX)) / (pos.length - 1);\r\n for (let j = 0; j < pos.length; j++) {\r\n pos[j].x += j * spaceDiff;\r\n }\r\n }\r\n }\r\n currentX += length - (endX - startX);\r\n }\r\n function recursive(currentElem, parentElem) {\r\n currentElem._x = combineArrays(currentElem.getLengthList('x', currentElem.getVWidth()), (parentElem ? parentElem._x.slice(parentElem._pos.length) : []));\r\n currentElem._y = combineArrays(currentElem.getLengthList('y', currentElem.getVHeight()), (parentElem ? parentElem._y.slice(parentElem._pos.length) : []));\r\n currentElem._dx = combineArrays(currentElem.getLengthList('dx', currentElem.getVWidth()), (parentElem ? parentElem._dx.slice(parentElem._pos.length) : []));\r\n currentElem._dy = combineArrays(currentElem.getLengthList('dy', currentElem.getVHeight()), (parentElem ? parentElem._dy.slice(parentElem._pos.length) : []));\r\n currentElem._rot = combineArrays(currentElem.getNumberList('rotate'), (parentElem ? parentElem._rot.slice(parentElem._pos.length) : []));\r\n currentElem._defRot = currentElem.chooseValue(currentElem._rot[currentElem._rot.length - 1], parentElem && parentElem._defRot, 0);\r\n if (currentElem.name === 'textPath') {currentElem._y = [];}\r\n let fontOptions = {fauxItalic: false, fauxBold: false},\r\n fontNameorLink = fontCallback(currentElem.get('font-family'), currentElem.get('font-weight') === 'bold', currentElem.get('font-style') === 'italic', fontOptions);\r\n try {\r\n doc.font(fontNameorLink);\r\n } catch(e) {\r\n warningCallback('SVGElemText: failed to open font \"' + fontNameorLink + '\" in PDFKit');\r\n }\r\n currentElem._pos = [];\r\n currentElem._index = 0;\r\n currentElem._font = {font: doc._font, size: currentElem.get('font-size'), fauxItalic: fontOptions.fauxItalic, fauxBold: fontOptions.fauxBold};\r\n let textLength = currentElem.getLength('textLength', currentElem.getVWidth(), undefined),\r\n spacingAndGlyphs = currentElem.attr('lengthAdjust') === 'spacingAndGlyphs',\r\n wordSpacing = currentElem.get('word-spacing'),\r\n letterSpacing = currentElem.get('letter-spacing'),\r\n textAnchor = currentElem.get('text-anchor'),\r\n textDirection = currentElem.get('direction'),\r\n baseline = getBaseline(currentElem._font.font, currentElem._font.size, currentElem.get('alignment-baseline') || currentElem.get('dominant-baseline'), currentElem.get('baseline-shift'));\r\n if (currentElem.name === 'textPath') {\r\n doAnchoring();\r\n currentX = currentY = 0;\r\n }\r\n let children = currentElem.getChildren();\r\n for (let i = 0; i < children.length; i++) {\r\n let childElem = children[i];\r\n switch(childElem.name) {\r\n case 'tspan': case 'textPath': case 'a':\r\n recursive(childElem, currentElem);\r\n break;\r\n case '#text': case '#cdata-section':\r\n let rawText = childElem.textContent, renderedText = rawText, words;\r\n childElem._font = currentElem._font;\r\n childElem._pos = [];\r\n remainingText = remainingText.substring(rawText.length);\r\n if (currentElem.get('xml:space') === 'preserve') {\r\n renderedText = renderedText.replace(/[\\s]/g, ' ');\r\n } else {\r\n renderedText = renderedText.replace(/[\\s]+/g, ' ');\r\n if (processedText.match(/[\\s]$|^$/)) {renderedText = renderedText.replace(/^[\\s]/, '');}\r\n if (remainingText.match(/^[\\s]*$/)) {renderedText = renderedText.replace(/[\\s]$/, '');}\r\n }\r\n processedText += rawText;\r\n if (wordSpacing === 0) {\r\n words = [renderedText];\r\n } else {\r\n words = renderedText.split(/(\\s)/);\r\n }\r\n for (let w = 0; w < words.length; w++) {\r\n let pos = getTextPos(currentElem._font.font, currentElem._font.size, words[w]);\r\n for (let j = 0; j < pos.length; j++) {\r\n let index = currentElem._index,\r\n xAttr = currentElem._x[index],\r\n yAttr = currentElem._y[index],\r\n dxAttr = currentElem._dx[index],\r\n dyAttr = currentElem._dy[index],\r\n rotAttr = currentElem._rot[index],\r\n continuous = !(w === 0 && j === 0);\r\n if (xAttr !== undefined) {continuous = false; doAnchoring(); currentX = xAttr;}\r\n if (yAttr !== undefined) {continuous = false; doAnchoring(); currentY = yAttr;}\r\n if (dxAttr !== undefined) {continuous = false; currentX += dxAttr;}\r\n if (dyAttr !== undefined) {continuous = false; currentY += dyAttr;}\r\n if (rotAttr !== undefined || currentElem._defRot !== 0) {continuous = false;}\r\n let position = {\r\n glyph: pos[j].glyph,\r\n rotate: (Math.PI / 180) * currentElem.chooseValue(rotAttr, currentElem._defRot),\r\n x: currentX + pos[j].xOffset,\r\n y: currentY + baseline + pos[j].yOffset,\r\n width: pos[j].width,\r\n ascent: getAscent(currentElem._font.font, currentElem._font.size),\r\n descent: getDescent(currentElem._font.font, currentElem._font.size),\r\n scale: 1,\r\n hidden: false,\r\n continuous: continuous\r\n };\r\n currentChunk.push(position);\r\n childElem._pos.push(position);\r\n currentElem._pos.push(position);\r\n currentElem._index += pos[j].unicode.length;\r\n if (currentChunk.length === 1) {\r\n currentAnchor = textAnchor;\r\n currentDirection = textDirection;\r\n }\r\n currentX += pos[j].xAdvance + letterSpacing;\r\n currentY += pos[j].yAdvance;\r\n }\r\n if (words[w] === ' ') {\r\n currentX += wordSpacing;\r\n }\r\n }\r\n break;\r\n default:\r\n remainingText = remainingText.substring(childElem.textContent.length);\r\n }\r\n }\r\n if (textLength && currentElem._pos.length) {\r\n adjustLength(currentElem._pos, textLength, spacingAndGlyphs);\r\n }\r\n if (currentElem.name === 'textPath' || currentElem.name === 'text') {\r\n doAnchoring();\r\n }\r\n if (currentElem.name === 'textPath') {\r\n textPaths.push(currentElem);\r\n let pathObject = currentElem.pathObject;\r\n if (pathObject) {\r\n currentX = pathObject.endPoint[0]; currentY = pathObject.endPoint[1];\r\n }\r\n }\r\n if (parentElem) {\r\n parentElem._pos = parentElem._pos.concat(currentElem._pos);\r\n parentElem._index += currentElem._index;\r\n }\r\n }\r\n function textOnPath(currentElem) {\r\n let pathObject = currentElem.pathObject,\r\n pathLength = currentElem.pathLength,\r\n pathScale = currentElem.pathScale;\r\n if (pathObject) {\r\n let textOffset = currentElem.getLength('startOffset', pathLength, 0);\r\n for (let j = 0; j < currentElem._pos.length; j++) {\r\n let charMidX = textOffset + currentElem._pos[j].x + 0.5 * currentElem._pos[j].width;\r\n if (charMidX > pathLength || charMidX < 0) {\r\n currentElem._pos[j].hidden = true;\r\n } else {\r\n let pointOnPath = pathObject.getPointAtLength(charMidX * pathScale);\r\n if (isNotEqual(pathScale, 1)) {\r\n currentElem._pos[j].scale *= pathScale;\r\n currentElem._pos[j].width *= pathScale;\r\n }\r\n currentElem._pos[j].x = pointOnPath[0] - 0.5 * currentElem._pos[j].width * Math.cos(pointOnPath[2]) - currentElem._pos[j].y * Math.sin(pointOnPath[2]);\r\n currentElem._pos[j].y = pointOnPath[1] - 0.5 * currentElem._pos[j].width * Math.sin(pointOnPath[2]) + currentElem._pos[j].y * Math.cos(pointOnPath[2]);\r\n currentElem._pos[j].rotate = pointOnPath[2] + currentElem._pos[j].rotate;\r\n currentElem._pos[j].continuous = false;\r\n }\r\n }\r\n } else {\r\n for (let j = 0; j < currentElem._pos.length; j++) {\r\n currentElem._pos[j].hidden = true;\r\n }\r\n }\r\n }\r\n recursive(textParentElem, null);\r\n for (let i = 0; i < textPaths.length; i++) {\r\n textOnPath(textPaths[i]);\r\n }\r\n })(this);\r\n this.getTransformation = function() {\r\n return this.get('transform');\r\n };\r\n this.drawInDocument = function(isClip, isMask) {\r\n doc.save();\r\n this.transform();\r\n this.clip();\r\n let masked = this.mask(), group;\r\n if (masked) {\r\n group = docBeginGroup(getPageBBox());\r\n }\r\n this.drawTextInDocument(isClip, isMask);\r\n if (group) {\r\n docEndGroup(group);\r\n docInsertGroup(group);\r\n }\r\n doc.restore();\r\n };\r\n };\r\n\r\n options = options || {};\r\n var pxToPt = options.assumePt ? 1 : (72/96), // 1px = 72/96pt, but only if assumePt is false\r\n viewportWidth = (options.width || doc.page.width) / pxToPt,\r\n viewportHeight = (options.height || doc.page.height) / pxToPt,\r\n preserveAspectRatio = options.preserveAspectRatio || null, // default to null so that the attr can override if not passed\r\n useCSS = options.useCSS && typeof SVGElement !== 'undefined' && svg instanceof SVGElement && typeof getComputedStyle === 'function',\r\n warningCallback = options.warningCallback,\r\n fontCallback = options.fontCallback,\r\n imageCallback = options.imageCallback,\r\n colorCallback = options.colorCallback,\r\n documentCallback = options.documentCallback,\r\n precision = Math.ceil(Math.max(1, options.precision)) || 3,\r\n groupStack = [],\r\n documentCache = {},\r\n links = [],\r\n styleRules = [];\r\n\r\n if (typeof warningCallback !== 'function') {\r\n warningCallback = function(str) {\r\n if (typeof console !== undefined && typeof console.warn === 'function') {console.warn(str);}\r\n };\r\n }\r\n if (typeof fontCallback !== 'function') {\r\n fontCallback = function(family, bold, italic, fontOptions) {\r\n // Check if the font is already registered in the document\r\n if (bold && italic) {\r\n if (doc._registeredFonts.hasOwnProperty(family + '-BoldItalic')) {\r\n return family + '-BoldItalic';\r\n } else if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\r\n fontOptions.fauxBold = true;\r\n return family + '-Italic';\r\n } else if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\r\n fontOptions.fauxItalic = true;\r\n return family + '-Bold';\r\n } else if (doc._registeredFonts.hasOwnProperty(family)) {\r\n fontOptions.fauxBold = true;\r\n fontOptions.fauxItalic = true;\r\n return family;\r\n }\r\n }\r\n if (bold && !italic) {\r\n if (doc._registeredFonts.hasOwnProperty(family + '-Bold')) {\r\n return family + '-Bold';\r\n } else if (doc._registeredFonts.hasOwnProperty(family)) {\r\n fontOptions.fauxBold = true;\r\n return family;\r\n }\r\n }\r\n if (!bold && italic) {\r\n if (doc._registeredFonts.hasOwnProperty(family + '-Italic')) {\r\n return family + '-Italic';\r\n } else if (doc._registeredFonts.hasOwnProperty(family)) {\r\n fontOptions.fauxItalic = true;\r\n return family;\r\n }\r\n }\r\n if (!bold && !italic) {\r\n if (doc._registeredFonts.hasOwnProperty(family)) {\r\n return family;\r\n }\r\n }\r\n // Use standard fonts as fallback\r\n if (family.match(/(?:^|,)\\s*serif\\s*$/)) {\r\n if (bold && italic) {return 'Times-BoldItalic';}\r\n if (bold && !italic) {return 'Times-Bold';}\r\n if (!bold && italic) {return 'Times-Italic';}\r\n if (!bold && !italic) {return 'Times-Roman';}\r\n } else if (family.match(/(?:^|,)\\s*monospace\\s*$/)) {\r\n if (bold && italic) {return 'Courier-BoldOblique';}\r\n if (bold && !italic) {return 'Courier-Bold';}\r\n if (!bold && italic) {return 'Courier-Oblique';}\r\n if (!bold && !italic) {return 'Courier';}\r\n } else if (family.match(/(?:^|,)\\s*sans-serif\\s*$/) || true) {\r\n if (bold && italic) {return 'Helvetica-BoldOblique';}\r\n if (bold && !italic) {return 'Helvetica-Bold';}\r\n if (!bold && italic) {return 'Helvetica-Oblique';}\r\n if (!bold && !italic) {return 'Helvetica';}\r\n }\r\n };\r\n }\r\n if (typeof imageCallback !== 'function') {\r\n imageCallback = function(link) {\r\n return link.replace(/\\s+/g, '');\r\n };\r\n }\r\n if (typeof colorCallback !== 'function') {\r\n colorCallback = null;\r\n } else {\r\n for (let color in DefaultColors) {\r\n let newColor = colorCallback(DefaultColors[color]);\r\n DefaultColors[color][0] = newColor[0];\r\n DefaultColors[color][1] = newColor[1];\r\n }\r\n }\r\n if (typeof documentCallback !== 'function') {\r\n documentCallback = null;\r\n }\r\n\r\n if (typeof svg === 'string') {svg = parseXml(svg);}\r\n if (svg) {\r\n let styles = svg.getElementsByTagName('style');\r\n for (let i = 0; i < styles.length; i++) {\r\n styleRules = styleRules.concat(parseStyleSheet(styles[i].textContent));\r\n }\r\n let elem = createSVGElement(svg, null);\r\n if (typeof elem.drawInDocument === 'function') {\r\n if (options.useCSS && !useCSS) {\r\n warningCallback('SVGtoPDF: useCSS option can only be used for SVG *elements* in compatible browsers');\r\n }\r\n let savedFillColor = doc._fillColor;\r\n doc.save().translate(x || 0, y || 0).scale(pxToPt);\r\n elem.drawInDocument();\r\n for (let i = 0; i < links.length; i++) {\r\n doc.page.annotations.push(links[i]);\r\n }\r\n doc.restore();\r\n doc._fillColor = savedFillColor;\r\n } else {\r\n warningCallback('SVGtoPDF: this element can\\'t be rendered directly: ' + svg.nodeName);\r\n }\r\n } else {\r\n warningCallback('SVGtoPDF: the input does not look like a valid SVG');\r\n }\r\n\r\n};\r\n\r\nif (typeof module !== 'undefined' && module && typeof module.exports !== 'undefined') {\r\n module.exports = SVGtoPDF;\r\n}\r\n","/*\r\nPDFAbstractReference - abstract class for PDF reference\r\n*/\r\n\r\nclass PDFAbstractReference {\r\n toString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n}\r\n\r\nexport default PDFAbstractReference;\r\n","/*\r\nPDFTree - abstract base class for name and number tree objects\r\n*/\r\n\r\nimport PDFObject from './object';\r\n\r\nclass PDFTree {\r\n constructor(options = {}) {\r\n this._items = {};\r\n // disable /Limits output for this tree\r\n this.limits =\r\n typeof options.limits === 'boolean' ? options.limits : true;\r\n }\r\n\r\n add(key, val) {\r\n return (this._items[key] = val);\r\n }\r\n\r\n get(key) {\r\n return this._items[key];\r\n }\r\n\r\n toString() {\r\n // Needs to be sorted by key\r\n const sortedKeys = Object.keys(this._items).sort((a, b) =>\r\n this._compareKeys(a, b)\r\n );\r\n\r\n const out = ['<<'];\r\n if (this.limits && sortedKeys.length > 1) {\r\n const first = sortedKeys[0],\r\n last = sortedKeys[sortedKeys.length - 1];\r\n out.push(\r\n ` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}`\r\n );\r\n }\r\n out.push(` /${this._keysName()} [`);\r\n for (let key of sortedKeys) {\r\n out.push(\r\n ` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert(\r\n this._items[key]\r\n )}`\r\n );\r\n }\r\n out.push(']');\r\n out.push('>>');\r\n return out.join('\\n');\r\n }\r\n\r\n _compareKeys(/*a, b*/) {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n _keysName() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n _dataForKey(/*k*/) {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n}\r\n\r\nexport default PDFTree;\r\n","/*\r\nPDFObject - converts JavaScript types into their corresponding PDF types.\r\nBy Devon Govett\r\n*/\r\n\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFTree from './tree';\r\n\r\nconst pad = (str, length) => (Array(length + 1).join('0') + str).slice(-length);\r\n\r\nconst escapableRe = /[\\n\\r\\t\\b\\f()\\\\]/g;\r\nconst escapable = {\r\n '\\n': '\\\\n',\r\n '\\r': '\\\\r',\r\n '\\t': '\\\\t',\r\n '\\b': '\\\\b',\r\n '\\f': '\\\\f',\r\n '\\\\': '\\\\\\\\',\r\n '(': '\\\\(',\r\n ')': '\\\\)'\r\n};\r\n\r\n// Convert little endian UTF-16 to big endian\r\nconst swapBytes = function(buff) {\r\n const l = buff.length;\r\n if (l & 0x01) {\r\n throw new Error('Buffer length must be even');\r\n } else {\r\n for (let i = 0, end = l - 1; i < end; i += 2) {\r\n const a = buff[i];\r\n buff[i] = buff[i + 1];\r\n buff[i + 1] = a;\r\n }\r\n }\r\n\r\n return buff;\r\n};\r\n\r\nclass PDFObject {\r\n static convert(object, encryptFn = null) {\r\n // String literals are converted to the PDF name type\r\n if (typeof object === 'string') {\r\n return `/${object}`;\r\n\r\n // String objects are converted to PDF strings (UTF-16)\r\n } else if (object instanceof String) {\r\n let string = object;\r\n // Detect if this is a unicode string\r\n let isUnicode = false;\r\n for (let i = 0, end = string.length; i < end; i++) {\r\n if (string.charCodeAt(i) > 0x7f) {\r\n isUnicode = true;\r\n break;\r\n }\r\n }\r\n\r\n // If so, encode it as big endian UTF-16\r\n let stringBuffer;\r\n if (isUnicode) {\r\n stringBuffer = swapBytes(Buffer.from(`\\ufeff${string}`, 'utf16le'));\r\n } else {\r\n stringBuffer = Buffer.from(string.valueOf(), 'ascii');\r\n }\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(stringBuffer).toString('binary');\r\n } else {\r\n string = stringBuffer.toString('binary');\r\n }\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n\r\n return `(${string})`;\r\n\r\n // Buffers are converted to PDF hex strings\r\n } else if (Buffer.isBuffer(object)) {\r\n return `<${object.toString('hex')}>`;\r\n } else if (\r\n object instanceof PDFAbstractReference ||\r\n object instanceof PDFTree\r\n ) {\r\n return object.toString();\r\n } else if (object instanceof Date) {\r\n let string =\r\n `D:${pad(object.getUTCFullYear(), 4)}` +\r\n pad(object.getUTCMonth() + 1, 2) +\r\n pad(object.getUTCDate(), 2) +\r\n pad(object.getUTCHours(), 2) +\r\n pad(object.getUTCMinutes(), 2) +\r\n pad(object.getUTCSeconds(), 2) +\r\n 'Z';\r\n\r\n // Encrypt the string when necessary\r\n if (encryptFn) {\r\n string = encryptFn(Buffer.from(string, 'ascii')).toString('binary');\r\n\r\n // Escape characters as required by the spec\r\n string = string.replace(escapableRe, c => escapable[c]);\r\n }\r\n\r\n return `(${string})`;\r\n } else if (Array.isArray(object)) {\r\n const items = object.map(e => PDFObject.convert(e, encryptFn)).join(' ');\r\n return `[${items}]`;\r\n } else if ({}.toString.call(object) === '[object Object]') {\r\n const out = ['<<'];\r\n for (let key in object) {\r\n const val = object[key];\r\n out.push(`/${key} ${PDFObject.convert(val, encryptFn)}`);\r\n }\r\n\r\n out.push('>>');\r\n return out.join('\\n');\r\n } else if (typeof object === 'number') {\r\n return PDFObject.number(object);\r\n } else {\r\n return `${object}`;\r\n }\r\n }\r\n\r\n static number(n) {\r\n if (n > -1e21 && n < 1e21) {\r\n return Math.round(n * 1e6) / 1e6;\r\n }\r\n\r\n throw new Error(`unsupported number: ${n}`);\r\n }\r\n}\r\n\r\nexport default PDFObject;\r\n","/*\r\nPDFReference - represents a reference to another object in the PDF object heirarchy\r\nBy Devon Govett\r\n*/\r\n\r\nimport zlib from 'zlib';\r\nimport PDFAbstractReference from './abstract_reference';\r\nimport PDFObject from './object';\r\n\r\nclass PDFReference extends PDFAbstractReference {\r\n constructor(document, id, data = {}) {\r\n super();\r\n this.document = document;\r\n this.id = id;\r\n this.data = data;\r\n this.gen = 0;\r\n this.compress = this.document.compress && !this.data.Filter;\r\n this.uncompressedLength = 0;\r\n this.buffer = [];\r\n }\r\n\r\n write(chunk) {\r\n if (!Buffer.isBuffer(chunk)) {\r\n chunk = Buffer.from(chunk + '\\n', 'binary');\r\n }\r\n\r\n this.uncompressedLength += chunk.length;\r\n if (this.data.Length == null) {\r\n this.data.Length = 0;\r\n }\r\n this.buffer.push(chunk);\r\n this.data.Length += chunk.length;\r\n if (this.compress) {\r\n return (this.data.Filter = 'FlateDecode');\r\n }\r\n }\r\n\r\n end(chunk) {\r\n if (chunk) {\r\n this.write(chunk);\r\n }\r\n return this.finalize();\r\n }\r\n\r\n finalize() {\r\n this.offset = this.document._offset;\r\n\r\n const encryptFn = this.document._security\r\n ? this.document._security.getEncryptFn(this.id, this.gen)\r\n : null;\r\n\r\n if (this.buffer.length) {\r\n this.buffer = Buffer.concat(this.buffer);\r\n if (this.compress) {\r\n this.buffer = zlib.deflateSync(this.buffer);\r\n }\r\n\r\n if (encryptFn) {\r\n this.buffer = encryptFn(this.buffer);\r\n }\r\n\r\n this.data.Length = this.buffer.length;\r\n }\r\n\r\n this.document._write(`${this.id} ${this.gen} obj`);\r\n this.document._write(PDFObject.convert(this.data, encryptFn));\r\n\r\n if (this.buffer.length) {\r\n this.document._write('stream');\r\n this.document._write(this.buffer);\r\n\r\n this.buffer = []; // free up memory\r\n this.document._write('\\nendstream');\r\n }\r\n\r\n this.document._write('endobj');\r\n this.document._refEnd(this);\r\n }\r\n toString() {\r\n return `${this.id} ${this.gen} R`;\r\n }\r\n}\r\n\r\nexport default PDFReference;\r\n","/*\r\nPDFPage - represents a single page in the PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nconst DEFAULT_MARGINS = {\r\n top: 72,\r\n left: 72,\r\n bottom: 72,\r\n right: 72\r\n};\r\n\r\nconst SIZES = {\r\n '4A0': [4767.87, 6740.79],\r\n '2A0': [3370.39, 4767.87],\r\n A0: [2383.94, 3370.39],\r\n A1: [1683.78, 2383.94],\r\n A2: [1190.55, 1683.78],\r\n A3: [841.89, 1190.55],\r\n A4: [595.28, 841.89],\r\n A5: [419.53, 595.28],\r\n A6: [297.64, 419.53],\r\n A7: [209.76, 297.64],\r\n A8: [147.4, 209.76],\r\n A9: [104.88, 147.4],\r\n A10: [73.7, 104.88],\r\n B0: [2834.65, 4008.19],\r\n B1: [2004.09, 2834.65],\r\n B2: [1417.32, 2004.09],\r\n B3: [1000.63, 1417.32],\r\n B4: [708.66, 1000.63],\r\n B5: [498.9, 708.66],\r\n B6: [354.33, 498.9],\r\n B7: [249.45, 354.33],\r\n B8: [175.75, 249.45],\r\n B9: [124.72, 175.75],\r\n B10: [87.87, 124.72],\r\n C0: [2599.37, 3676.54],\r\n C1: [1836.85, 2599.37],\r\n C2: [1298.27, 1836.85],\r\n C3: [918.43, 1298.27],\r\n C4: [649.13, 918.43],\r\n C5: [459.21, 649.13],\r\n C6: [323.15, 459.21],\r\n C7: [229.61, 323.15],\r\n C8: [161.57, 229.61],\r\n C9: [113.39, 161.57],\r\n C10: [79.37, 113.39],\r\n RA0: [2437.8, 3458.27],\r\n RA1: [1729.13, 2437.8],\r\n RA2: [1218.9, 1729.13],\r\n RA3: [864.57, 1218.9],\r\n RA4: [609.45, 864.57],\r\n SRA0: [2551.18, 3628.35],\r\n SRA1: [1814.17, 2551.18],\r\n SRA2: [1275.59, 1814.17],\r\n SRA3: [907.09, 1275.59],\r\n SRA4: [637.8, 907.09],\r\n EXECUTIVE: [521.86, 756.0],\r\n FOLIO: [612.0, 936.0],\r\n LEGAL: [612.0, 1008.0],\r\n LETTER: [612.0, 792.0],\r\n TABLOID: [792.0, 1224.0]\r\n};\r\n\r\nclass PDFPage {\r\n constructor(document, options = {}) {\r\n this.document = document;\r\n this.size = options.size || 'letter';\r\n this.layout = options.layout || 'portrait';\r\n\r\n // process margins\r\n if (typeof options.margin === 'number') {\r\n this.margins = {\r\n top: options.margin,\r\n left: options.margin,\r\n bottom: options.margin,\r\n right: options.margin\r\n };\r\n\r\n // default to 1 inch margins\r\n } else {\r\n this.margins = options.margins || DEFAULT_MARGINS;\r\n }\r\n\r\n // calculate page dimensions\r\n const dimensions = Array.isArray(this.size)\r\n ? this.size\r\n : SIZES[this.size.toUpperCase()];\r\n this.width = dimensions[this.layout === 'portrait' ? 0 : 1];\r\n this.height = dimensions[this.layout === 'portrait' ? 1 : 0];\r\n\r\n this.content = this.document.ref();\r\n\r\n // Initialize the Font, XObject, and ExtGState dictionaries\r\n this.resources = this.document.ref({\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI']\r\n });\r\n\r\n // The page dictionary\r\n this.dictionary = this.document.ref({\r\n Type: 'Page',\r\n Parent: this.document._root.data.Pages,\r\n MediaBox: [0, 0, this.width, this.height],\r\n Contents: this.content,\r\n Resources: this.resources\r\n });\r\n\r\n this.markings = [];\r\n }\r\n\r\n // Lazily create these objects\r\n get fonts() {\r\n const data = this.resources.data;\r\n return data.Font != null ? data.Font : (data.Font = {});\r\n }\r\n\r\n get xobjects() {\r\n const data = this.resources.data;\r\n return data.XObject != null ? data.XObject : (data.XObject = {});\r\n }\r\n\r\n get ext_gstates() {\r\n const data = this.resources.data;\r\n return data.ExtGState != null ? data.ExtGState : (data.ExtGState = {});\r\n }\r\n\r\n get patterns() {\r\n const data = this.resources.data;\r\n return data.Pattern != null ? data.Pattern : (data.Pattern = {});\r\n }\r\n\r\n get colorSpaces() {\r\n const data = this.resources.data;\r\n return data.ColorSpace || (data.ColorSpace = {});\r\n }\r\n\r\n get annotations() {\r\n const data = this.dictionary.data;\r\n return data.Annots != null ? data.Annots : (data.Annots = []);\r\n }\r\n\r\n get structParentTreeKey() {\r\n const data = this.dictionary.data;\r\n return data.StructParents != null\r\n ? data.StructParents\r\n : (data.StructParents = this.document.createStructParentTreeNextKey());\r\n }\r\n\r\n maxY() {\r\n return this.height - this.margins.bottom;\r\n }\r\n\r\n write(chunk) {\r\n return this.content.write(chunk);\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n this.resources.end();\r\n return this.content.end();\r\n }\r\n}\r\n\r\nexport default PDFPage;\r\n","/*\r\nPDFNameTree - represents a name tree object\r\n*/\r\n\r\nimport PDFTree from \"./tree\";\r\n\r\nclass PDFNameTree extends PDFTree {\r\n _compareKeys(a, b) {\r\n return a.localeCompare(b);\r\n }\r\n\r\n _keysName() {\r\n return \"Names\";\r\n }\r\n\r\n _dataForKey(k) {\r\n return new String(k);\r\n }\r\n}\r\n\r\nexport default PDFNameTree;\r\n","/**\r\n * Check if value is in a range group.\r\n * @param {number} value\r\n * @param {number[]} rangeGroup\r\n * @returns {boolean}\r\n */\r\nfunction inRange(value, rangeGroup) {\r\n if (value < rangeGroup[0]) return false;\r\n let startRange = 0;\r\n let endRange = rangeGroup.length / 2;\r\n while (startRange <= endRange) {\r\n const middleRange = Math.floor((startRange + endRange) / 2);\r\n\r\n // actual array index\r\n const arrayIndex = middleRange * 2;\r\n\r\n // Check if value is in range pointed by actual index\r\n if (\r\n value >= rangeGroup[arrayIndex] &&\r\n value <= rangeGroup[arrayIndex + 1]\r\n ) {\r\n return true;\r\n }\r\n\r\n if (value > rangeGroup[arrayIndex + 1]) {\r\n // Search Right Side Of Array\r\n startRange = middleRange + 1;\r\n } else {\r\n // Search Left Side Of Array\r\n endRange = middleRange - 1;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nexport { inRange };\r\n","import { inRange } from './util';\r\n\r\n// prettier-ignore-start\r\n/**\r\n * A.1 Unassigned code points in Unicode 3.2\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-A.1\r\n */\r\nconst unassigned_code_points = [\r\n 0x0221,\r\n 0x0221,\r\n 0x0234,\r\n 0x024f,\r\n 0x02ae,\r\n 0x02af,\r\n 0x02ef,\r\n 0x02ff,\r\n 0x0350,\r\n 0x035f,\r\n 0x0370,\r\n 0x0373,\r\n 0x0376,\r\n 0x0379,\r\n 0x037b,\r\n 0x037d,\r\n 0x037f,\r\n 0x0383,\r\n 0x038b,\r\n 0x038b,\r\n 0x038d,\r\n 0x038d,\r\n 0x03a2,\r\n 0x03a2,\r\n 0x03cf,\r\n 0x03cf,\r\n 0x03f7,\r\n 0x03ff,\r\n 0x0487,\r\n 0x0487,\r\n 0x04cf,\r\n 0x04cf,\r\n 0x04f6,\r\n 0x04f7,\r\n 0x04fa,\r\n 0x04ff,\r\n 0x0510,\r\n 0x0530,\r\n 0x0557,\r\n 0x0558,\r\n 0x0560,\r\n 0x0560,\r\n 0x0588,\r\n 0x0588,\r\n 0x058b,\r\n 0x0590,\r\n 0x05a2,\r\n 0x05a2,\r\n 0x05ba,\r\n 0x05ba,\r\n 0x05c5,\r\n 0x05cf,\r\n 0x05eb,\r\n 0x05ef,\r\n 0x05f5,\r\n 0x060b,\r\n 0x060d,\r\n 0x061a,\r\n 0x061c,\r\n 0x061e,\r\n 0x0620,\r\n 0x0620,\r\n 0x063b,\r\n 0x063f,\r\n 0x0656,\r\n 0x065f,\r\n 0x06ee,\r\n 0x06ef,\r\n 0x06ff,\r\n 0x06ff,\r\n 0x070e,\r\n 0x070e,\r\n 0x072d,\r\n 0x072f,\r\n 0x074b,\r\n 0x077f,\r\n 0x07b2,\r\n 0x0900,\r\n 0x0904,\r\n 0x0904,\r\n 0x093a,\r\n 0x093b,\r\n 0x094e,\r\n 0x094f,\r\n 0x0955,\r\n 0x0957,\r\n 0x0971,\r\n 0x0980,\r\n 0x0984,\r\n 0x0984,\r\n 0x098d,\r\n 0x098e,\r\n 0x0991,\r\n 0x0992,\r\n 0x09a9,\r\n 0x09a9,\r\n 0x09b1,\r\n 0x09b1,\r\n 0x09b3,\r\n 0x09b5,\r\n 0x09ba,\r\n 0x09bb,\r\n 0x09bd,\r\n 0x09bd,\r\n 0x09c5,\r\n 0x09c6,\r\n 0x09c9,\r\n 0x09ca,\r\n 0x09ce,\r\n 0x09d6,\r\n 0x09d8,\r\n 0x09db,\r\n 0x09de,\r\n 0x09de,\r\n 0x09e4,\r\n 0x09e5,\r\n 0x09fb,\r\n 0x0a01,\r\n 0x0a03,\r\n 0x0a04,\r\n 0x0a0b,\r\n 0x0a0e,\r\n 0x0a11,\r\n 0x0a12,\r\n 0x0a29,\r\n 0x0a29,\r\n 0x0a31,\r\n 0x0a31,\r\n 0x0a34,\r\n 0x0a34,\r\n 0x0a37,\r\n 0x0a37,\r\n 0x0a3a,\r\n 0x0a3b,\r\n 0x0a3d,\r\n 0x0a3d,\r\n 0x0a43,\r\n 0x0a46,\r\n 0x0a49,\r\n 0x0a4a,\r\n 0x0a4e,\r\n 0x0a58,\r\n 0x0a5d,\r\n 0x0a5d,\r\n 0x0a5f,\r\n 0x0a65,\r\n 0x0a75,\r\n 0x0a80,\r\n 0x0a84,\r\n 0x0a84,\r\n 0x0a8c,\r\n 0x0a8c,\r\n 0x0a8e,\r\n 0x0a8e,\r\n 0x0a92,\r\n 0x0a92,\r\n 0x0aa9,\r\n 0x0aa9,\r\n 0x0ab1,\r\n 0x0ab1,\r\n 0x0ab4,\r\n 0x0ab4,\r\n 0x0aba,\r\n 0x0abb,\r\n 0x0ac6,\r\n 0x0ac6,\r\n 0x0aca,\r\n 0x0aca,\r\n 0x0ace,\r\n 0x0acf,\r\n 0x0ad1,\r\n 0x0adf,\r\n 0x0ae1,\r\n 0x0ae5,\r\n 0x0af0,\r\n 0x0b00,\r\n 0x0b04,\r\n 0x0b04,\r\n 0x0b0d,\r\n 0x0b0e,\r\n 0x0b11,\r\n 0x0b12,\r\n 0x0b29,\r\n 0x0b29,\r\n 0x0b31,\r\n 0x0b31,\r\n 0x0b34,\r\n 0x0b35,\r\n 0x0b3a,\r\n 0x0b3b,\r\n 0x0b44,\r\n 0x0b46,\r\n 0x0b49,\r\n 0x0b4a,\r\n 0x0b4e,\r\n 0x0b55,\r\n 0x0b58,\r\n 0x0b5b,\r\n 0x0b5e,\r\n 0x0b5e,\r\n 0x0b62,\r\n 0x0b65,\r\n 0x0b71,\r\n 0x0b81,\r\n 0x0b84,\r\n 0x0b84,\r\n 0x0b8b,\r\n 0x0b8d,\r\n 0x0b91,\r\n 0x0b91,\r\n 0x0b96,\r\n 0x0b98,\r\n 0x0b9b,\r\n 0x0b9b,\r\n 0x0b9d,\r\n 0x0b9d,\r\n 0x0ba0,\r\n 0x0ba2,\r\n 0x0ba5,\r\n 0x0ba7,\r\n 0x0bab,\r\n 0x0bad,\r\n 0x0bb6,\r\n 0x0bb6,\r\n 0x0bba,\r\n 0x0bbd,\r\n 0x0bc3,\r\n 0x0bc5,\r\n 0x0bc9,\r\n 0x0bc9,\r\n 0x0bce,\r\n 0x0bd6,\r\n 0x0bd8,\r\n 0x0be6,\r\n 0x0bf3,\r\n 0x0c00,\r\n 0x0c04,\r\n 0x0c04,\r\n 0x0c0d,\r\n 0x0c0d,\r\n 0x0c11,\r\n 0x0c11,\r\n 0x0c29,\r\n 0x0c29,\r\n 0x0c34,\r\n 0x0c34,\r\n 0x0c3a,\r\n 0x0c3d,\r\n 0x0c45,\r\n 0x0c45,\r\n 0x0c49,\r\n 0x0c49,\r\n 0x0c4e,\r\n 0x0c54,\r\n 0x0c57,\r\n 0x0c5f,\r\n 0x0c62,\r\n 0x0c65,\r\n 0x0c70,\r\n 0x0c81,\r\n 0x0c84,\r\n 0x0c84,\r\n 0x0c8d,\r\n 0x0c8d,\r\n 0x0c91,\r\n 0x0c91,\r\n 0x0ca9,\r\n 0x0ca9,\r\n 0x0cb4,\r\n 0x0cb4,\r\n 0x0cba,\r\n 0x0cbd,\r\n 0x0cc5,\r\n 0x0cc5,\r\n 0x0cc9,\r\n 0x0cc9,\r\n 0x0cce,\r\n 0x0cd4,\r\n 0x0cd7,\r\n 0x0cdd,\r\n 0x0cdf,\r\n 0x0cdf,\r\n 0x0ce2,\r\n 0x0ce5,\r\n 0x0cf0,\r\n 0x0d01,\r\n 0x0d04,\r\n 0x0d04,\r\n 0x0d0d,\r\n 0x0d0d,\r\n 0x0d11,\r\n 0x0d11,\r\n 0x0d29,\r\n 0x0d29,\r\n 0x0d3a,\r\n 0x0d3d,\r\n 0x0d44,\r\n 0x0d45,\r\n 0x0d49,\r\n 0x0d49,\r\n 0x0d4e,\r\n 0x0d56,\r\n 0x0d58,\r\n 0x0d5f,\r\n 0x0d62,\r\n 0x0d65,\r\n 0x0d70,\r\n 0x0d81,\r\n 0x0d84,\r\n 0x0d84,\r\n 0x0d97,\r\n 0x0d99,\r\n 0x0db2,\r\n 0x0db2,\r\n 0x0dbc,\r\n 0x0dbc,\r\n 0x0dbe,\r\n 0x0dbf,\r\n 0x0dc7,\r\n 0x0dc9,\r\n 0x0dcb,\r\n 0x0dce,\r\n 0x0dd5,\r\n 0x0dd5,\r\n 0x0dd7,\r\n 0x0dd7,\r\n 0x0de0,\r\n 0x0df1,\r\n 0x0df5,\r\n 0x0e00,\r\n 0x0e3b,\r\n 0x0e3e,\r\n 0x0e5c,\r\n 0x0e80,\r\n 0x0e83,\r\n 0x0e83,\r\n 0x0e85,\r\n 0x0e86,\r\n 0x0e89,\r\n 0x0e89,\r\n 0x0e8b,\r\n 0x0e8c,\r\n 0x0e8e,\r\n 0x0e93,\r\n 0x0e98,\r\n 0x0e98,\r\n 0x0ea0,\r\n 0x0ea0,\r\n 0x0ea4,\r\n 0x0ea4,\r\n 0x0ea6,\r\n 0x0ea6,\r\n 0x0ea8,\r\n 0x0ea9,\r\n 0x0eac,\r\n 0x0eac,\r\n 0x0eba,\r\n 0x0eba,\r\n 0x0ebe,\r\n 0x0ebf,\r\n 0x0ec5,\r\n 0x0ec5,\r\n 0x0ec7,\r\n 0x0ec7,\r\n 0x0ece,\r\n 0x0ecf,\r\n 0x0eda,\r\n 0x0edb,\r\n 0x0ede,\r\n 0x0eff,\r\n 0x0f48,\r\n 0x0f48,\r\n 0x0f6b,\r\n 0x0f70,\r\n 0x0f8c,\r\n 0x0f8f,\r\n 0x0f98,\r\n 0x0f98,\r\n 0x0fbd,\r\n 0x0fbd,\r\n 0x0fcd,\r\n 0x0fce,\r\n 0x0fd0,\r\n 0x0fff,\r\n 0x1022,\r\n 0x1022,\r\n 0x1028,\r\n 0x1028,\r\n 0x102b,\r\n 0x102b,\r\n 0x1033,\r\n 0x1035,\r\n 0x103a,\r\n 0x103f,\r\n 0x105a,\r\n 0x109f,\r\n 0x10c6,\r\n 0x10cf,\r\n 0x10f9,\r\n 0x10fa,\r\n 0x10fc,\r\n 0x10ff,\r\n 0x115a,\r\n 0x115e,\r\n 0x11a3,\r\n 0x11a7,\r\n 0x11fa,\r\n 0x11ff,\r\n 0x1207,\r\n 0x1207,\r\n 0x1247,\r\n 0x1247,\r\n 0x1249,\r\n 0x1249,\r\n 0x124e,\r\n 0x124f,\r\n 0x1257,\r\n 0x1257,\r\n 0x1259,\r\n 0x1259,\r\n 0x125e,\r\n 0x125f,\r\n 0x1287,\r\n 0x1287,\r\n 0x1289,\r\n 0x1289,\r\n 0x128e,\r\n 0x128f,\r\n 0x12af,\r\n 0x12af,\r\n 0x12b1,\r\n 0x12b1,\r\n 0x12b6,\r\n 0x12b7,\r\n 0x12bf,\r\n 0x12bf,\r\n 0x12c1,\r\n 0x12c1,\r\n 0x12c6,\r\n 0x12c7,\r\n 0x12cf,\r\n 0x12cf,\r\n 0x12d7,\r\n 0x12d7,\r\n 0x12ef,\r\n 0x12ef,\r\n 0x130f,\r\n 0x130f,\r\n 0x1311,\r\n 0x1311,\r\n 0x1316,\r\n 0x1317,\r\n 0x131f,\r\n 0x131f,\r\n 0x1347,\r\n 0x1347,\r\n 0x135b,\r\n 0x1360,\r\n 0x137d,\r\n 0x139f,\r\n 0x13f5,\r\n 0x1400,\r\n 0x1677,\r\n 0x167f,\r\n 0x169d,\r\n 0x169f,\r\n 0x16f1,\r\n 0x16ff,\r\n 0x170d,\r\n 0x170d,\r\n 0x1715,\r\n 0x171f,\r\n 0x1737,\r\n 0x173f,\r\n 0x1754,\r\n 0x175f,\r\n 0x176d,\r\n 0x176d,\r\n 0x1771,\r\n 0x1771,\r\n 0x1774,\r\n 0x177f,\r\n 0x17dd,\r\n 0x17df,\r\n 0x17ea,\r\n 0x17ff,\r\n 0x180f,\r\n 0x180f,\r\n 0x181a,\r\n 0x181f,\r\n 0x1878,\r\n 0x187f,\r\n 0x18aa,\r\n 0x1dff,\r\n 0x1e9c,\r\n 0x1e9f,\r\n 0x1efa,\r\n 0x1eff,\r\n 0x1f16,\r\n 0x1f17,\r\n 0x1f1e,\r\n 0x1f1f,\r\n 0x1f46,\r\n 0x1f47,\r\n 0x1f4e,\r\n 0x1f4f,\r\n 0x1f58,\r\n 0x1f58,\r\n 0x1f5a,\r\n 0x1f5a,\r\n 0x1f5c,\r\n 0x1f5c,\r\n 0x1f5e,\r\n 0x1f5e,\r\n 0x1f7e,\r\n 0x1f7f,\r\n 0x1fb5,\r\n 0x1fb5,\r\n 0x1fc5,\r\n 0x1fc5,\r\n 0x1fd4,\r\n 0x1fd5,\r\n 0x1fdc,\r\n 0x1fdc,\r\n 0x1ff0,\r\n 0x1ff1,\r\n 0x1ff5,\r\n 0x1ff5,\r\n 0x1fff,\r\n 0x1fff,\r\n 0x2053,\r\n 0x2056,\r\n 0x2058,\r\n 0x205e,\r\n 0x2064,\r\n 0x2069,\r\n 0x2072,\r\n 0x2073,\r\n 0x208f,\r\n 0x209f,\r\n 0x20b2,\r\n 0x20cf,\r\n 0x20eb,\r\n 0x20ff,\r\n 0x213b,\r\n 0x213c,\r\n 0x214c,\r\n 0x2152,\r\n 0x2184,\r\n 0x218f,\r\n 0x23cf,\r\n 0x23ff,\r\n 0x2427,\r\n 0x243f,\r\n 0x244b,\r\n 0x245f,\r\n 0x24ff,\r\n 0x24ff,\r\n 0x2614,\r\n 0x2615,\r\n 0x2618,\r\n 0x2618,\r\n 0x267e,\r\n 0x267f,\r\n 0x268a,\r\n 0x2700,\r\n 0x2705,\r\n 0x2705,\r\n 0x270a,\r\n 0x270b,\r\n 0x2728,\r\n 0x2728,\r\n 0x274c,\r\n 0x274c,\r\n 0x274e,\r\n 0x274e,\r\n 0x2753,\r\n 0x2755,\r\n 0x2757,\r\n 0x2757,\r\n 0x275f,\r\n 0x2760,\r\n 0x2795,\r\n 0x2797,\r\n 0x27b0,\r\n 0x27b0,\r\n 0x27bf,\r\n 0x27cf,\r\n 0x27ec,\r\n 0x27ef,\r\n 0x2b00,\r\n 0x2e7f,\r\n 0x2e9a,\r\n 0x2e9a,\r\n 0x2ef4,\r\n 0x2eff,\r\n 0x2fd6,\r\n 0x2fef,\r\n 0x2ffc,\r\n 0x2fff,\r\n 0x3040,\r\n 0x3040,\r\n 0x3097,\r\n 0x3098,\r\n 0x3100,\r\n 0x3104,\r\n 0x312d,\r\n 0x3130,\r\n 0x318f,\r\n 0x318f,\r\n 0x31b8,\r\n 0x31ef,\r\n 0x321d,\r\n 0x321f,\r\n 0x3244,\r\n 0x3250,\r\n 0x327c,\r\n 0x327e,\r\n 0x32cc,\r\n 0x32cf,\r\n 0x32ff,\r\n 0x32ff,\r\n 0x3377,\r\n 0x337a,\r\n 0x33de,\r\n 0x33df,\r\n 0x33ff,\r\n 0x33ff,\r\n 0x4db6,\r\n 0x4dff,\r\n 0x9fa6,\r\n 0x9fff,\r\n 0xa48d,\r\n 0xa48f,\r\n 0xa4c7,\r\n 0xabff,\r\n 0xd7a4,\r\n 0xd7ff,\r\n 0xfa2e,\r\n 0xfa2f,\r\n 0xfa6b,\r\n 0xfaff,\r\n 0xfb07,\r\n 0xfb12,\r\n 0xfb18,\r\n 0xfb1c,\r\n 0xfb37,\r\n 0xfb37,\r\n 0xfb3d,\r\n 0xfb3d,\r\n 0xfb3f,\r\n 0xfb3f,\r\n 0xfb42,\r\n 0xfb42,\r\n 0xfb45,\r\n 0xfb45,\r\n 0xfbb2,\r\n 0xfbd2,\r\n 0xfd40,\r\n 0xfd4f,\r\n 0xfd90,\r\n 0xfd91,\r\n 0xfdc8,\r\n 0xfdcf,\r\n 0xfdfd,\r\n 0xfdff,\r\n 0xfe10,\r\n 0xfe1f,\r\n 0xfe24,\r\n 0xfe2f,\r\n 0xfe47,\r\n 0xfe48,\r\n 0xfe53,\r\n 0xfe53,\r\n 0xfe67,\r\n 0xfe67,\r\n 0xfe6c,\r\n 0xfe6f,\r\n 0xfe75,\r\n 0xfe75,\r\n 0xfefd,\r\n 0xfefe,\r\n 0xff00,\r\n 0xff00,\r\n 0xffbf,\r\n 0xffc1,\r\n 0xffc8,\r\n 0xffc9,\r\n 0xffd0,\r\n 0xffd1,\r\n 0xffd8,\r\n 0xffd9,\r\n 0xffdd,\r\n 0xffdf,\r\n 0xffe7,\r\n 0xffe7,\r\n 0xffef,\r\n 0xfff8,\r\n 0x10000,\r\n 0x102ff,\r\n 0x1031f,\r\n 0x1031f,\r\n 0x10324,\r\n 0x1032f,\r\n 0x1034b,\r\n 0x103ff,\r\n 0x10426,\r\n 0x10427,\r\n 0x1044e,\r\n 0x1cfff,\r\n 0x1d0f6,\r\n 0x1d0ff,\r\n 0x1d127,\r\n 0x1d129,\r\n 0x1d1de,\r\n 0x1d3ff,\r\n 0x1d455,\r\n 0x1d455,\r\n 0x1d49d,\r\n 0x1d49d,\r\n 0x1d4a0,\r\n 0x1d4a1,\r\n 0x1d4a3,\r\n 0x1d4a4,\r\n 0x1d4a7,\r\n 0x1d4a8,\r\n 0x1d4ad,\r\n 0x1d4ad,\r\n 0x1d4ba,\r\n 0x1d4ba,\r\n 0x1d4bc,\r\n 0x1d4bc,\r\n 0x1d4c1,\r\n 0x1d4c1,\r\n 0x1d4c4,\r\n 0x1d4c4,\r\n 0x1d506,\r\n 0x1d506,\r\n 0x1d50b,\r\n 0x1d50c,\r\n 0x1d515,\r\n 0x1d515,\r\n 0x1d51d,\r\n 0x1d51d,\r\n 0x1d53a,\r\n 0x1d53a,\r\n 0x1d53f,\r\n 0x1d53f,\r\n 0x1d545,\r\n 0x1d545,\r\n 0x1d547,\r\n 0x1d549,\r\n 0x1d551,\r\n 0x1d551,\r\n 0x1d6a4,\r\n 0x1d6a7,\r\n 0x1d7ca,\r\n 0x1d7cd,\r\n 0x1d800,\r\n 0x1fffd,\r\n 0x2a6d7,\r\n 0x2f7ff,\r\n 0x2fa1e,\r\n 0x2fffd,\r\n 0x30000,\r\n 0x3fffd,\r\n 0x40000,\r\n 0x4fffd,\r\n 0x50000,\r\n 0x5fffd,\r\n 0x60000,\r\n 0x6fffd,\r\n 0x70000,\r\n 0x7fffd,\r\n 0x80000,\r\n 0x8fffd,\r\n 0x90000,\r\n 0x9fffd,\r\n 0xa0000,\r\n 0xafffd,\r\n 0xb0000,\r\n 0xbfffd,\r\n 0xc0000,\r\n 0xcfffd,\r\n 0xd0000,\r\n 0xdfffd,\r\n 0xe0000,\r\n 0xe0000,\r\n 0xe0002,\r\n 0xe001f,\r\n 0xe0080,\r\n 0xefffd\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isUnassignedCodePoint = character =>\r\n inRange(character, unassigned_code_points);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * B.1 Commonly mapped to nothing\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-B.1\r\n */\r\nconst commonly_mapped_to_nothing = [\r\n 0x00ad,\r\n 0x00ad,\r\n 0x034f,\r\n 0x034f,\r\n 0x1806,\r\n 0x1806,\r\n 0x180b,\r\n 0x180b,\r\n 0x180c,\r\n 0x180c,\r\n 0x180d,\r\n 0x180d,\r\n 0x200b,\r\n 0x200b,\r\n 0x200c,\r\n 0x200c,\r\n 0x200d,\r\n 0x200d,\r\n 0x2060,\r\n 0x2060,\r\n 0xfe00,\r\n 0xfe00,\r\n 0xfe01,\r\n 0xfe01,\r\n 0xfe02,\r\n 0xfe02,\r\n 0xfe03,\r\n 0xfe03,\r\n 0xfe04,\r\n 0xfe04,\r\n 0xfe05,\r\n 0xfe05,\r\n 0xfe06,\r\n 0xfe06,\r\n 0xfe07,\r\n 0xfe07,\r\n 0xfe08,\r\n 0xfe08,\r\n 0xfe09,\r\n 0xfe09,\r\n 0xfe0a,\r\n 0xfe0a,\r\n 0xfe0b,\r\n 0xfe0b,\r\n 0xfe0c,\r\n 0xfe0c,\r\n 0xfe0d,\r\n 0xfe0d,\r\n 0xfe0e,\r\n 0xfe0e,\r\n 0xfe0f,\r\n 0xfe0f,\r\n 0xfeff,\r\n 0xfeff\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isCommonlyMappedToNothing = character =>\r\n inRange(character, commonly_mapped_to_nothing);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * C.1.2 Non-ASCII space characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.1.2\r\n */\r\nconst non_ASCII_space_characters = [\r\n 0x00a0,\r\n 0x00a0 /* NO-BREAK SPACE */,\r\n 0x1680,\r\n 0x1680 /* OGHAM SPACE MARK */,\r\n 0x2000,\r\n 0x2000 /* EN QUAD */,\r\n 0x2001,\r\n 0x2001 /* EM QUAD */,\r\n 0x2002,\r\n 0x2002 /* EN SPACE */,\r\n 0x2003,\r\n 0x2003 /* EM SPACE */,\r\n 0x2004,\r\n 0x2004 /* THREE-PER-EM SPACE */,\r\n 0x2005,\r\n 0x2005 /* FOUR-PER-EM SPACE */,\r\n 0x2006,\r\n 0x2006 /* SIX-PER-EM SPACE */,\r\n 0x2007,\r\n 0x2007 /* FIGURE SPACE */,\r\n 0x2008,\r\n 0x2008 /* PUNCTUATION SPACE */,\r\n 0x2009,\r\n 0x2009 /* THIN SPACE */,\r\n 0x200a,\r\n 0x200a /* HAIR SPACE */,\r\n 0x200b,\r\n 0x200b /* ZERO WIDTH SPACE */,\r\n 0x202f,\r\n 0x202f /* NARROW NO-BREAK SPACE */,\r\n 0x205f,\r\n 0x205f /* MEDIUM MATHEMATICAL SPACE */,\r\n 0x3000,\r\n 0x3000 /* IDEOGRAPHIC SPACE */\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isNonASCIISpaceCharacter = character =>\r\n inRange(character, non_ASCII_space_characters);\r\n\r\n// prettier-ignore-start\r\nconst non_ASCII_controls_characters = [\r\n /**\r\n * C.2.2 Non-ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.2\r\n */\r\n 0x0080,\r\n 0x009f /* [CONTROL CHARACTERS] */,\r\n 0x06dd,\r\n 0x06dd /* ARABIC END OF AYAH */,\r\n 0x070f,\r\n 0x070f /* SYRIAC ABBREVIATION MARK */,\r\n 0x180e,\r\n 0x180e /* MONGOLIAN VOWEL SEPARATOR */,\r\n 0x200c,\r\n 0x200c /* ZERO WIDTH NON-JOINER */,\r\n 0x200d,\r\n 0x200d /* ZERO WIDTH JOINER */,\r\n 0x2028,\r\n 0x2028 /* LINE SEPARATOR */,\r\n 0x2029,\r\n 0x2029 /* PARAGRAPH SEPARATOR */,\r\n 0x2060,\r\n 0x2060 /* WORD JOINER */,\r\n 0x2061,\r\n 0x2061 /* FUNCTION APPLICATION */,\r\n 0x2062,\r\n 0x2062 /* INVISIBLE TIMES */,\r\n 0x2063,\r\n 0x2063 /* INVISIBLE SEPARATOR */,\r\n 0x206a,\r\n 0x206f /* [CONTROL CHARACTERS] */,\r\n 0xfeff,\r\n 0xfeff /* ZERO WIDTH NO-BREAK SPACE */,\r\n 0xfff9,\r\n 0xfffc /* [CONTROL CHARACTERS] */,\r\n 0x1d173,\r\n 0x1d17a /* [MUSICAL CONTROL CHARACTERS] */\r\n];\r\n\r\nconst non_character_codepoints = [\r\n /**\r\n * C.4 Non-character code points\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.4\r\n */\r\n 0xfdd0,\r\n 0xfdef /* [NONCHARACTER CODE POINTS] */,\r\n 0xfffe,\r\n 0xffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x1fffe,\r\n 0x1ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x2fffe,\r\n 0x2ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x3fffe,\r\n 0x3ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x4fffe,\r\n 0x4ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x5fffe,\r\n 0x5ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x6fffe,\r\n 0x6ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x7fffe,\r\n 0x7ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x8fffe,\r\n 0x8ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x9fffe,\r\n 0x9ffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xafffe,\r\n 0xaffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xbfffe,\r\n 0xbffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xcfffe,\r\n 0xcffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xdfffe,\r\n 0xdffff /* [NONCHARACTER CODE POINTS] */,\r\n 0xefffe,\r\n 0xeffff /* [NONCHARACTER CODE POINTS] */,\r\n 0x10fffe,\r\n 0x10ffff /* [NONCHARACTER CODE POINTS] */\r\n];\r\n\r\n/**\r\n * 2.3. Prohibited Output\r\n */\r\nconst prohibited_characters = [\r\n /**\r\n * C.2.1 ASCII control characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.2.1\r\n */\r\n 0,\r\n 0x001f /* [CONTROL CHARACTERS] */,\r\n 0x007f,\r\n 0x007f /* DELETE */,\r\n\r\n /**\r\n * C.8 Change display properties or are deprecated\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.8\r\n */\r\n 0x0340,\r\n 0x0340 /* COMBINING GRAVE TONE MARK */,\r\n 0x0341,\r\n 0x0341 /* COMBINING ACUTE TONE MARK */,\r\n 0x200e,\r\n 0x200e /* LEFT-TO-RIGHT MARK */,\r\n 0x200f,\r\n 0x200f /* RIGHT-TO-LEFT MARK */,\r\n 0x202a,\r\n 0x202a /* LEFT-TO-RIGHT EMBEDDING */,\r\n 0x202b,\r\n 0x202b /* RIGHT-TO-LEFT EMBEDDING */,\r\n 0x202c,\r\n 0x202c /* POP DIRECTIONAL FORMATTING */,\r\n 0x202d,\r\n 0x202d /* LEFT-TO-RIGHT OVERRIDE */,\r\n 0x202e,\r\n 0x202e /* RIGHT-TO-LEFT OVERRIDE */,\r\n 0x206a,\r\n 0x206a /* INHIBIT SYMMETRIC SWAPPING */,\r\n 0x206b,\r\n 0x206b /* ACTIVATE SYMMETRIC SWAPPING */,\r\n 0x206c,\r\n 0x206c /* INHIBIT ARABIC FORM SHAPING */,\r\n 0x206d,\r\n 0x206d /* ACTIVATE ARABIC FORM SHAPING */,\r\n 0x206e,\r\n 0x206e /* NATIONAL DIGIT SHAPES */,\r\n 0x206f,\r\n 0x206f /* NOMINAL DIGIT SHAPES */,\r\n\r\n /**\r\n * C.7 Inappropriate for canonical representation\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.7\r\n */\r\n 0x2ff0,\r\n 0x2ffb /* [IDEOGRAPHIC DESCRIPTION CHARACTERS] */,\r\n\r\n /**\r\n * C.5 Surrogate codes\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.5\r\n */\r\n 0xd800,\r\n 0xdfff,\r\n\r\n /**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\r\n 0xe000,\r\n 0xf8ff /* [PRIVATE USE, PLANE 0] */,\r\n\r\n /**\r\n * C.6 Inappropriate for plain text\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.6\r\n */\r\n 0xfff9,\r\n 0xfff9 /* INTERLINEAR ANNOTATION ANCHOR */,\r\n 0xfffa,\r\n 0xfffa /* INTERLINEAR ANNOTATION SEPARATOR */,\r\n 0xfffb,\r\n 0xfffb /* INTERLINEAR ANNOTATION TERMINATOR */,\r\n 0xfffc,\r\n 0xfffc /* OBJECT REPLACEMENT CHARACTER */,\r\n 0xfffd,\r\n 0xfffd /* REPLACEMENT CHARACTER */,\r\n\r\n /**\r\n * C.9 Tagging characters\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.9\r\n */\r\n 0xe0001,\r\n 0xe0001 /* LANGUAGE TAG */,\r\n 0xe0020,\r\n 0xe007f /* [TAGGING CHARACTERS] */,\r\n\r\n /**\r\n * C.3 Private use\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-C.3\r\n */\r\n\r\n 0xf0000,\r\n 0xffffd /* [PRIVATE USE, PLANE 15] */,\r\n 0x100000,\r\n 0x10fffd /* [PRIVATE USE, PLANE 16] */\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isProhibitedCharacter = character =>\r\n inRange(character, non_ASCII_space_characters) ||\r\n inRange(character, prohibited_characters) ||\r\n inRange(character, non_ASCII_controls_characters) ||\r\n inRange(character, non_character_codepoints);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * D.1 Characters with bidirectional property \"R\" or \"AL\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.1\r\n */\r\nconst bidirectional_r_al = [\r\n 0x05be,\r\n 0x05be,\r\n 0x05c0,\r\n 0x05c0,\r\n 0x05c3,\r\n 0x05c3,\r\n 0x05d0,\r\n 0x05ea,\r\n 0x05f0,\r\n 0x05f4,\r\n 0x061b,\r\n 0x061b,\r\n 0x061f,\r\n 0x061f,\r\n 0x0621,\r\n 0x063a,\r\n 0x0640,\r\n 0x064a,\r\n 0x066d,\r\n 0x066f,\r\n 0x0671,\r\n 0x06d5,\r\n 0x06dd,\r\n 0x06dd,\r\n 0x06e5,\r\n 0x06e6,\r\n 0x06fa,\r\n 0x06fe,\r\n 0x0700,\r\n 0x070d,\r\n 0x0710,\r\n 0x0710,\r\n 0x0712,\r\n 0x072c,\r\n 0x0780,\r\n 0x07a5,\r\n 0x07b1,\r\n 0x07b1,\r\n 0x200f,\r\n 0x200f,\r\n 0xfb1d,\r\n 0xfb1d,\r\n 0xfb1f,\r\n 0xfb28,\r\n 0xfb2a,\r\n 0xfb36,\r\n 0xfb38,\r\n 0xfb3c,\r\n 0xfb3e,\r\n 0xfb3e,\r\n 0xfb40,\r\n 0xfb41,\r\n 0xfb43,\r\n 0xfb44,\r\n 0xfb46,\r\n 0xfbb1,\r\n 0xfbd3,\r\n 0xfd3d,\r\n 0xfd50,\r\n 0xfd8f,\r\n 0xfd92,\r\n 0xfdc7,\r\n 0xfdf0,\r\n 0xfdfc,\r\n 0xfe70,\r\n 0xfe74,\r\n 0xfe76,\r\n 0xfefc\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isBidirectionalRAL = character => inRange(character, bidirectional_r_al);\r\n\r\n// prettier-ignore-start\r\n/**\r\n * D.2 Characters with bidirectional property \"L\"\r\n * @link https://tools.ietf.org/html/rfc3454#appendix-D.2\r\n */\r\nconst bidirectional_l = [\r\n 0x0041,\r\n 0x005a,\r\n 0x0061,\r\n 0x007a,\r\n 0x00aa,\r\n 0x00aa,\r\n 0x00b5,\r\n 0x00b5,\r\n 0x00ba,\r\n 0x00ba,\r\n 0x00c0,\r\n 0x00d6,\r\n 0x00d8,\r\n 0x00f6,\r\n 0x00f8,\r\n 0x0220,\r\n 0x0222,\r\n 0x0233,\r\n 0x0250,\r\n 0x02ad,\r\n 0x02b0,\r\n 0x02b8,\r\n 0x02bb,\r\n 0x02c1,\r\n 0x02d0,\r\n 0x02d1,\r\n 0x02e0,\r\n 0x02e4,\r\n 0x02ee,\r\n 0x02ee,\r\n 0x037a,\r\n 0x037a,\r\n 0x0386,\r\n 0x0386,\r\n 0x0388,\r\n 0x038a,\r\n 0x038c,\r\n 0x038c,\r\n 0x038e,\r\n 0x03a1,\r\n 0x03a3,\r\n 0x03ce,\r\n 0x03d0,\r\n 0x03f5,\r\n 0x0400,\r\n 0x0482,\r\n 0x048a,\r\n 0x04ce,\r\n 0x04d0,\r\n 0x04f5,\r\n 0x04f8,\r\n 0x04f9,\r\n 0x0500,\r\n 0x050f,\r\n 0x0531,\r\n 0x0556,\r\n 0x0559,\r\n 0x055f,\r\n 0x0561,\r\n 0x0587,\r\n 0x0589,\r\n 0x0589,\r\n 0x0903,\r\n 0x0903,\r\n 0x0905,\r\n 0x0939,\r\n 0x093d,\r\n 0x0940,\r\n 0x0949,\r\n 0x094c,\r\n 0x0950,\r\n 0x0950,\r\n 0x0958,\r\n 0x0961,\r\n 0x0964,\r\n 0x0970,\r\n 0x0982,\r\n 0x0983,\r\n 0x0985,\r\n 0x098c,\r\n 0x098f,\r\n 0x0990,\r\n 0x0993,\r\n 0x09a8,\r\n 0x09aa,\r\n 0x09b0,\r\n 0x09b2,\r\n 0x09b2,\r\n 0x09b6,\r\n 0x09b9,\r\n 0x09be,\r\n 0x09c0,\r\n 0x09c7,\r\n 0x09c8,\r\n 0x09cb,\r\n 0x09cc,\r\n 0x09d7,\r\n 0x09d7,\r\n 0x09dc,\r\n 0x09dd,\r\n 0x09df,\r\n 0x09e1,\r\n 0x09e6,\r\n 0x09f1,\r\n 0x09f4,\r\n 0x09fa,\r\n 0x0a05,\r\n 0x0a0a,\r\n 0x0a0f,\r\n 0x0a10,\r\n 0x0a13,\r\n 0x0a28,\r\n 0x0a2a,\r\n 0x0a30,\r\n 0x0a32,\r\n 0x0a33,\r\n 0x0a35,\r\n 0x0a36,\r\n 0x0a38,\r\n 0x0a39,\r\n 0x0a3e,\r\n 0x0a40,\r\n 0x0a59,\r\n 0x0a5c,\r\n 0x0a5e,\r\n 0x0a5e,\r\n 0x0a66,\r\n 0x0a6f,\r\n 0x0a72,\r\n 0x0a74,\r\n 0x0a83,\r\n 0x0a83,\r\n 0x0a85,\r\n 0x0a8b,\r\n 0x0a8d,\r\n 0x0a8d,\r\n 0x0a8f,\r\n 0x0a91,\r\n 0x0a93,\r\n 0x0aa8,\r\n 0x0aaa,\r\n 0x0ab0,\r\n 0x0ab2,\r\n 0x0ab3,\r\n 0x0ab5,\r\n 0x0ab9,\r\n 0x0abd,\r\n 0x0ac0,\r\n 0x0ac9,\r\n 0x0ac9,\r\n 0x0acb,\r\n 0x0acc,\r\n 0x0ad0,\r\n 0x0ad0,\r\n 0x0ae0,\r\n 0x0ae0,\r\n 0x0ae6,\r\n 0x0aef,\r\n 0x0b02,\r\n 0x0b03,\r\n 0x0b05,\r\n 0x0b0c,\r\n 0x0b0f,\r\n 0x0b10,\r\n 0x0b13,\r\n 0x0b28,\r\n 0x0b2a,\r\n 0x0b30,\r\n 0x0b32,\r\n 0x0b33,\r\n 0x0b36,\r\n 0x0b39,\r\n 0x0b3d,\r\n 0x0b3e,\r\n 0x0b40,\r\n 0x0b40,\r\n 0x0b47,\r\n 0x0b48,\r\n 0x0b4b,\r\n 0x0b4c,\r\n 0x0b57,\r\n 0x0b57,\r\n 0x0b5c,\r\n 0x0b5d,\r\n 0x0b5f,\r\n 0x0b61,\r\n 0x0b66,\r\n 0x0b70,\r\n 0x0b83,\r\n 0x0b83,\r\n 0x0b85,\r\n 0x0b8a,\r\n 0x0b8e,\r\n 0x0b90,\r\n 0x0b92,\r\n 0x0b95,\r\n 0x0b99,\r\n 0x0b9a,\r\n 0x0b9c,\r\n 0x0b9c,\r\n 0x0b9e,\r\n 0x0b9f,\r\n 0x0ba3,\r\n 0x0ba4,\r\n 0x0ba8,\r\n 0x0baa,\r\n 0x0bae,\r\n 0x0bb5,\r\n 0x0bb7,\r\n 0x0bb9,\r\n 0x0bbe,\r\n 0x0bbf,\r\n 0x0bc1,\r\n 0x0bc2,\r\n 0x0bc6,\r\n 0x0bc8,\r\n 0x0bca,\r\n 0x0bcc,\r\n 0x0bd7,\r\n 0x0bd7,\r\n 0x0be7,\r\n 0x0bf2,\r\n 0x0c01,\r\n 0x0c03,\r\n 0x0c05,\r\n 0x0c0c,\r\n 0x0c0e,\r\n 0x0c10,\r\n 0x0c12,\r\n 0x0c28,\r\n 0x0c2a,\r\n 0x0c33,\r\n 0x0c35,\r\n 0x0c39,\r\n 0x0c41,\r\n 0x0c44,\r\n 0x0c60,\r\n 0x0c61,\r\n 0x0c66,\r\n 0x0c6f,\r\n 0x0c82,\r\n 0x0c83,\r\n 0x0c85,\r\n 0x0c8c,\r\n 0x0c8e,\r\n 0x0c90,\r\n 0x0c92,\r\n 0x0ca8,\r\n 0x0caa,\r\n 0x0cb3,\r\n 0x0cb5,\r\n 0x0cb9,\r\n 0x0cbe,\r\n 0x0cbe,\r\n 0x0cc0,\r\n 0x0cc4,\r\n 0x0cc7,\r\n 0x0cc8,\r\n 0x0cca,\r\n 0x0ccb,\r\n 0x0cd5,\r\n 0x0cd6,\r\n 0x0cde,\r\n 0x0cde,\r\n 0x0ce0,\r\n 0x0ce1,\r\n 0x0ce6,\r\n 0x0cef,\r\n 0x0d02,\r\n 0x0d03,\r\n 0x0d05,\r\n 0x0d0c,\r\n 0x0d0e,\r\n 0x0d10,\r\n 0x0d12,\r\n 0x0d28,\r\n 0x0d2a,\r\n 0x0d39,\r\n 0x0d3e,\r\n 0x0d40,\r\n 0x0d46,\r\n 0x0d48,\r\n 0x0d4a,\r\n 0x0d4c,\r\n 0x0d57,\r\n 0x0d57,\r\n 0x0d60,\r\n 0x0d61,\r\n 0x0d66,\r\n 0x0d6f,\r\n 0x0d82,\r\n 0x0d83,\r\n 0x0d85,\r\n 0x0d96,\r\n 0x0d9a,\r\n 0x0db1,\r\n 0x0db3,\r\n 0x0dbb,\r\n 0x0dbd,\r\n 0x0dbd,\r\n 0x0dc0,\r\n 0x0dc6,\r\n 0x0dcf,\r\n 0x0dd1,\r\n 0x0dd8,\r\n 0x0ddf,\r\n 0x0df2,\r\n 0x0df4,\r\n 0x0e01,\r\n 0x0e30,\r\n 0x0e32,\r\n 0x0e33,\r\n 0x0e40,\r\n 0x0e46,\r\n 0x0e4f,\r\n 0x0e5b,\r\n 0x0e81,\r\n 0x0e82,\r\n 0x0e84,\r\n 0x0e84,\r\n 0x0e87,\r\n 0x0e88,\r\n 0x0e8a,\r\n 0x0e8a,\r\n 0x0e8d,\r\n 0x0e8d,\r\n 0x0e94,\r\n 0x0e97,\r\n 0x0e99,\r\n 0x0e9f,\r\n 0x0ea1,\r\n 0x0ea3,\r\n 0x0ea5,\r\n 0x0ea5,\r\n 0x0ea7,\r\n 0x0ea7,\r\n 0x0eaa,\r\n 0x0eab,\r\n 0x0ead,\r\n 0x0eb0,\r\n 0x0eb2,\r\n 0x0eb3,\r\n 0x0ebd,\r\n 0x0ebd,\r\n 0x0ec0,\r\n 0x0ec4,\r\n 0x0ec6,\r\n 0x0ec6,\r\n 0x0ed0,\r\n 0x0ed9,\r\n 0x0edc,\r\n 0x0edd,\r\n 0x0f00,\r\n 0x0f17,\r\n 0x0f1a,\r\n 0x0f34,\r\n 0x0f36,\r\n 0x0f36,\r\n 0x0f38,\r\n 0x0f38,\r\n 0x0f3e,\r\n 0x0f47,\r\n 0x0f49,\r\n 0x0f6a,\r\n 0x0f7f,\r\n 0x0f7f,\r\n 0x0f85,\r\n 0x0f85,\r\n 0x0f88,\r\n 0x0f8b,\r\n 0x0fbe,\r\n 0x0fc5,\r\n 0x0fc7,\r\n 0x0fcc,\r\n 0x0fcf,\r\n 0x0fcf,\r\n 0x1000,\r\n 0x1021,\r\n 0x1023,\r\n 0x1027,\r\n 0x1029,\r\n 0x102a,\r\n 0x102c,\r\n 0x102c,\r\n 0x1031,\r\n 0x1031,\r\n 0x1038,\r\n 0x1038,\r\n 0x1040,\r\n 0x1057,\r\n 0x10a0,\r\n 0x10c5,\r\n 0x10d0,\r\n 0x10f8,\r\n 0x10fb,\r\n 0x10fb,\r\n 0x1100,\r\n 0x1159,\r\n 0x115f,\r\n 0x11a2,\r\n 0x11a8,\r\n 0x11f9,\r\n 0x1200,\r\n 0x1206,\r\n 0x1208,\r\n 0x1246,\r\n 0x1248,\r\n 0x1248,\r\n 0x124a,\r\n 0x124d,\r\n 0x1250,\r\n 0x1256,\r\n 0x1258,\r\n 0x1258,\r\n 0x125a,\r\n 0x125d,\r\n 0x1260,\r\n 0x1286,\r\n 0x1288,\r\n 0x1288,\r\n 0x128a,\r\n 0x128d,\r\n 0x1290,\r\n 0x12ae,\r\n 0x12b0,\r\n 0x12b0,\r\n 0x12b2,\r\n 0x12b5,\r\n 0x12b8,\r\n 0x12be,\r\n 0x12c0,\r\n 0x12c0,\r\n 0x12c2,\r\n 0x12c5,\r\n 0x12c8,\r\n 0x12ce,\r\n 0x12d0,\r\n 0x12d6,\r\n 0x12d8,\r\n 0x12ee,\r\n 0x12f0,\r\n 0x130e,\r\n 0x1310,\r\n 0x1310,\r\n 0x1312,\r\n 0x1315,\r\n 0x1318,\r\n 0x131e,\r\n 0x1320,\r\n 0x1346,\r\n 0x1348,\r\n 0x135a,\r\n 0x1361,\r\n 0x137c,\r\n 0x13a0,\r\n 0x13f4,\r\n 0x1401,\r\n 0x1676,\r\n 0x1681,\r\n 0x169a,\r\n 0x16a0,\r\n 0x16f0,\r\n 0x1700,\r\n 0x170c,\r\n 0x170e,\r\n 0x1711,\r\n 0x1720,\r\n 0x1731,\r\n 0x1735,\r\n 0x1736,\r\n 0x1740,\r\n 0x1751,\r\n 0x1760,\r\n 0x176c,\r\n 0x176e,\r\n 0x1770,\r\n 0x1780,\r\n 0x17b6,\r\n 0x17be,\r\n 0x17c5,\r\n 0x17c7,\r\n 0x17c8,\r\n 0x17d4,\r\n 0x17da,\r\n 0x17dc,\r\n 0x17dc,\r\n 0x17e0,\r\n 0x17e9,\r\n 0x1810,\r\n 0x1819,\r\n 0x1820,\r\n 0x1877,\r\n 0x1880,\r\n 0x18a8,\r\n 0x1e00,\r\n 0x1e9b,\r\n 0x1ea0,\r\n 0x1ef9,\r\n 0x1f00,\r\n 0x1f15,\r\n 0x1f18,\r\n 0x1f1d,\r\n 0x1f20,\r\n 0x1f45,\r\n 0x1f48,\r\n 0x1f4d,\r\n 0x1f50,\r\n 0x1f57,\r\n 0x1f59,\r\n 0x1f59,\r\n 0x1f5b,\r\n 0x1f5b,\r\n 0x1f5d,\r\n 0x1f5d,\r\n 0x1f5f,\r\n 0x1f7d,\r\n 0x1f80,\r\n 0x1fb4,\r\n 0x1fb6,\r\n 0x1fbc,\r\n 0x1fbe,\r\n 0x1fbe,\r\n 0x1fc2,\r\n 0x1fc4,\r\n 0x1fc6,\r\n 0x1fcc,\r\n 0x1fd0,\r\n 0x1fd3,\r\n 0x1fd6,\r\n 0x1fdb,\r\n 0x1fe0,\r\n 0x1fec,\r\n 0x1ff2,\r\n 0x1ff4,\r\n 0x1ff6,\r\n 0x1ffc,\r\n 0x200e,\r\n 0x200e,\r\n 0x2071,\r\n 0x2071,\r\n 0x207f,\r\n 0x207f,\r\n 0x2102,\r\n 0x2102,\r\n 0x2107,\r\n 0x2107,\r\n 0x210a,\r\n 0x2113,\r\n 0x2115,\r\n 0x2115,\r\n 0x2119,\r\n 0x211d,\r\n 0x2124,\r\n 0x2124,\r\n 0x2126,\r\n 0x2126,\r\n 0x2128,\r\n 0x2128,\r\n 0x212a,\r\n 0x212d,\r\n 0x212f,\r\n 0x2131,\r\n 0x2133,\r\n 0x2139,\r\n 0x213d,\r\n 0x213f,\r\n 0x2145,\r\n 0x2149,\r\n 0x2160,\r\n 0x2183,\r\n 0x2336,\r\n 0x237a,\r\n 0x2395,\r\n 0x2395,\r\n 0x249c,\r\n 0x24e9,\r\n 0x3005,\r\n 0x3007,\r\n 0x3021,\r\n 0x3029,\r\n 0x3031,\r\n 0x3035,\r\n 0x3038,\r\n 0x303c,\r\n 0x3041,\r\n 0x3096,\r\n 0x309d,\r\n 0x309f,\r\n 0x30a1,\r\n 0x30fa,\r\n 0x30fc,\r\n 0x30ff,\r\n 0x3105,\r\n 0x312c,\r\n 0x3131,\r\n 0x318e,\r\n 0x3190,\r\n 0x31b7,\r\n 0x31f0,\r\n 0x321c,\r\n 0x3220,\r\n 0x3243,\r\n 0x3260,\r\n 0x327b,\r\n 0x327f,\r\n 0x32b0,\r\n 0x32c0,\r\n 0x32cb,\r\n 0x32d0,\r\n 0x32fe,\r\n 0x3300,\r\n 0x3376,\r\n 0x337b,\r\n 0x33dd,\r\n 0x33e0,\r\n 0x33fe,\r\n 0x3400,\r\n 0x4db5,\r\n 0x4e00,\r\n 0x9fa5,\r\n 0xa000,\r\n 0xa48c,\r\n 0xac00,\r\n 0xd7a3,\r\n 0xd800,\r\n 0xfa2d,\r\n 0xfa30,\r\n 0xfa6a,\r\n 0xfb00,\r\n 0xfb06,\r\n 0xfb13,\r\n 0xfb17,\r\n 0xff21,\r\n 0xff3a,\r\n 0xff41,\r\n 0xff5a,\r\n 0xff66,\r\n 0xffbe,\r\n 0xffc2,\r\n 0xffc7,\r\n 0xffca,\r\n 0xffcf,\r\n 0xffd2,\r\n 0xffd7,\r\n 0xffda,\r\n 0xffdc,\r\n 0x10300,\r\n 0x1031e,\r\n 0x10320,\r\n 0x10323,\r\n 0x10330,\r\n 0x1034a,\r\n 0x10400,\r\n 0x10425,\r\n 0x10428,\r\n 0x1044d,\r\n 0x1d000,\r\n 0x1d0f5,\r\n 0x1d100,\r\n 0x1d126,\r\n 0x1d12a,\r\n 0x1d166,\r\n 0x1d16a,\r\n 0x1d172,\r\n 0x1d183,\r\n 0x1d184,\r\n 0x1d18c,\r\n 0x1d1a9,\r\n 0x1d1ae,\r\n 0x1d1dd,\r\n 0x1d400,\r\n 0x1d454,\r\n 0x1d456,\r\n 0x1d49c,\r\n 0x1d49e,\r\n 0x1d49f,\r\n 0x1d4a2,\r\n 0x1d4a2,\r\n 0x1d4a5,\r\n 0x1d4a6,\r\n 0x1d4a9,\r\n 0x1d4ac,\r\n 0x1d4ae,\r\n 0x1d4b9,\r\n 0x1d4bb,\r\n 0x1d4bb,\r\n 0x1d4bd,\r\n 0x1d4c0,\r\n 0x1d4c2,\r\n 0x1d4c3,\r\n 0x1d4c5,\r\n 0x1d505,\r\n 0x1d507,\r\n 0x1d50a,\r\n 0x1d50d,\r\n 0x1d514,\r\n 0x1d516,\r\n 0x1d51c,\r\n 0x1d51e,\r\n 0x1d539,\r\n 0x1d53b,\r\n 0x1d53e,\r\n 0x1d540,\r\n 0x1d544,\r\n 0x1d546,\r\n 0x1d546,\r\n 0x1d54a,\r\n 0x1d550,\r\n 0x1d552,\r\n 0x1d6a3,\r\n 0x1d6a8,\r\n 0x1d7c9,\r\n 0x20000,\r\n 0x2a6d6,\r\n 0x2f800,\r\n 0x2fa1d,\r\n 0xf0000,\r\n 0xffffd,\r\n 0x100000,\r\n 0x10fffd\r\n];\r\n// prettier-ignore-end\r\n\r\nconst isBidirectionalL = character => inRange(character, bidirectional_l);\r\n\r\nexport {\r\n isUnassignedCodePoint,\r\n isCommonlyMappedToNothing,\r\n isNonASCIISpaceCharacter,\r\n isProhibitedCharacter,\r\n isBidirectionalRAL,\r\n isBidirectionalL\r\n};\r\n","import {\r\n isUnassignedCodePoint,\r\n isCommonlyMappedToNothing,\r\n isNonASCIISpaceCharacter,\r\n isProhibitedCharacter,\r\n isBidirectionalRAL,\r\n isBidirectionalL\r\n} from './lib/code-points';\r\n\r\n// 2.1. Mapping\r\n\r\n/**\r\n * non-ASCII space characters [StringPrep, C.1.2] that can be\r\n * mapped to SPACE (U+0020)\r\n */\r\nconst mapping2space = isNonASCIISpaceCharacter;\r\n\r\n/**\r\n * the \"commonly mapped to nothing\" characters [StringPrep, B.1]\r\n * that can be mapped to nothing.\r\n */\r\nconst mapping2nothing = isCommonlyMappedToNothing;\r\n\r\n// utils\r\nconst getCodePoint = character => character.codePointAt(0);\r\nconst first = x => x[0];\r\nconst last = x => x[x.length - 1];\r\n\r\n/**\r\n * Convert provided string into an array of Unicode Code Points.\r\n * Based on https://stackoverflow.com/a/21409165/1556249\r\n * and https://www.npmjs.com/package/code-point-at.\r\n * @param {string} input\r\n * @returns {number[]}\r\n */\r\nfunction toCodePoints(input) {\r\n const codepoints = [];\r\n const size = input.length;\r\n\r\n for (let i = 0; i < size; i += 1) {\r\n const before = input.charCodeAt(i);\r\n\r\n if (before >= 0xd800 && before <= 0xdbff && size > i + 1) {\r\n const next = input.charCodeAt(i + 1);\r\n\r\n if (next >= 0xdc00 && next <= 0xdfff) {\r\n codepoints.push((before - 0xd800) * 0x400 + next - 0xdc00 + 0x10000);\r\n i += 1;\r\n continue;\r\n }\r\n }\r\n\r\n codepoints.push(before);\r\n }\r\n\r\n return codepoints;\r\n}\r\n\r\n/**\r\n * SASLprep.\r\n * @param {string} input\r\n * @param {Object} opts\r\n * @param {boolean} opts.allowUnassigned\r\n * @returns {string}\r\n */\r\nfunction saslprep(input, opts = {}) {\r\n if (typeof input !== 'string') {\r\n throw new TypeError('Expected string.');\r\n }\r\n\r\n if (input.length === 0) {\r\n return '';\r\n }\r\n\r\n // 1. Map\r\n const mapped_input = toCodePoints(input)\r\n // 1.1 mapping to space\r\n .map(character => (mapping2space(character) ? 0x20 : character))\r\n // 1.2 mapping to nothing\r\n .filter(character => !mapping2nothing(character));\r\n\r\n // 2. Normalize\r\n const normalized_input = String.fromCodePoint\r\n .apply(null, mapped_input)\r\n .normalize('NFKC');\r\n\r\n const normalized_map = toCodePoints(normalized_input);\r\n\r\n // 3. Prohibit\r\n const hasProhibited = normalized_map.some(isProhibitedCharacter);\r\n\r\n if (hasProhibited) {\r\n throw new Error(\r\n 'Prohibited character, see https://tools.ietf.org/html/rfc4013#section-2.3'\r\n );\r\n }\r\n\r\n // Unassigned Code Points\r\n if (opts.allowUnassigned !== true) {\r\n const hasUnassigned = normalized_map.some(isUnassignedCodePoint);\r\n\r\n if (hasUnassigned) {\r\n throw new Error(\r\n 'Unassigned code point, see https://tools.ietf.org/html/rfc4013#section-2.5'\r\n );\r\n }\r\n }\r\n\r\n // 4. check bidi\r\n\r\n const hasBidiRAL = normalized_map.some(isBidirectionalRAL);\r\n\r\n const hasBidiL = normalized_map.some(isBidirectionalL);\r\n\r\n // 4.1 If a string contains any RandALCat character, the string MUST NOT\r\n // contain any LCat character.\r\n if (hasBidiRAL && hasBidiL) {\r\n throw new Error(\r\n 'String must not contain RandALCat and LCat at the same time,' +\r\n ' see https://tools.ietf.org/html/rfc3454#section-6'\r\n );\r\n }\r\n\r\n /**\r\n * 4.2 If a string contains any RandALCat character, a RandALCat\r\n * character MUST be the first character of the string, and a\r\n * RandALCat character MUST be the last character of the string.\r\n */\r\n\r\n const isFirstBidiRAL = isBidirectionalRAL(\r\n getCodePoint(first(normalized_input))\r\n );\r\n const isLastBidiRAL = isBidirectionalRAL(\r\n getCodePoint(last(normalized_input))\r\n );\r\n\r\n if (hasBidiRAL && !(isFirstBidiRAL && isLastBidiRAL)) {\r\n throw new Error(\r\n 'Bidirectional RandALCat character must be the first and the last' +\r\n ' character of the string, see https://tools.ietf.org/html/rfc3454#section-6'\r\n );\r\n }\r\n\r\n return normalized_input;\r\n}\r\n\r\nexport default saslprep;\r\n","/*\r\n PDFSecurity - represents PDF security settings\r\n By Yang Liu \r\n */\r\n\r\nimport CryptoJS from 'crypto-js';\r\nimport saslprep from './saslprep/index';\r\n\r\nclass PDFSecurity {\r\n static generateFileID(info = {}) {\r\n let infoStr = `${info.CreationDate.getTime()}\\n`;\r\n\r\n for (let key in info) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (!info.hasOwnProperty(key)) {\r\n continue;\r\n }\r\n infoStr += `${key}: ${info[key].valueOf()}\\n`;\r\n }\r\n\r\n return wordArrayToBuffer(CryptoJS.MD5(infoStr));\r\n }\r\n\r\n static generateRandomWordArray(bytes) {\r\n return CryptoJS.lib.WordArray.random(bytes);\r\n }\r\n\r\n static create(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n return null;\r\n }\r\n return new PDFSecurity(document, options);\r\n }\r\n\r\n constructor(document, options = {}) {\r\n if (!options.ownerPassword && !options.userPassword) {\r\n throw new Error('None of owner password and user password is defined.');\r\n }\r\n\r\n this.document = document;\r\n this._setupEncryption(options);\r\n }\r\n\r\n _setupEncryption(options) {\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n case '1.5':\r\n this.version = 2;\r\n break;\r\n case '1.6':\r\n case '1.7':\r\n this.version = 4;\r\n break;\r\n case '1.7ext3':\r\n this.version = 5;\r\n break;\r\n default:\r\n this.version = 1;\r\n break;\r\n }\r\n\r\n const encDict = {\r\n Filter: 'Standard'\r\n };\r\n\r\n switch (this.version) {\r\n case 1:\r\n case 2:\r\n case 4:\r\n this._setupEncryptionV1V2V4(this.version, encDict, options);\r\n break;\r\n case 5:\r\n this._setupEncryptionV5(encDict, options);\r\n break;\r\n }\r\n\r\n this.dictionary = this.document.ref(encDict);\r\n }\r\n\r\n _setupEncryptionV1V2V4(v, encDict, options) {\r\n let r, permissions;\r\n switch (v) {\r\n case 1:\r\n r = 2;\r\n this.keyBits = 40;\r\n permissions = getPermissionsR2(options.permissions);\r\n break;\r\n case 2:\r\n r = 3;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n case 4:\r\n r = 4;\r\n this.keyBits = 128;\r\n permissions = getPermissionsR3(options.permissions);\r\n break;\r\n }\r\n\r\n const paddedUserPassword = processPasswordR2R3R4(options.userPassword);\r\n const paddedOwnerPassword = options.ownerPassword\r\n ? processPasswordR2R3R4(options.ownerPassword)\r\n : paddedUserPassword;\r\n\r\n const ownerPasswordEntry = getOwnerPasswordR2R3R4(\r\n r,\r\n this.keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n );\r\n this.encryptionKey = getEncryptionKeyR2R3R4(\r\n r,\r\n this.keyBits,\r\n this.document._id,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n );\r\n let userPasswordEntry;\r\n if (r === 2) {\r\n userPasswordEntry = getUserPasswordR2(this.encryptionKey);\r\n } else {\r\n userPasswordEntry = getUserPasswordR3R4(\r\n this.document._id,\r\n this.encryptionKey\r\n );\r\n }\r\n\r\n encDict.V = v;\r\n if (v >= 2) {\r\n encDict.Length = this.keyBits;\r\n }\r\n if (v === 4) {\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV2',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n }\r\n encDict.R = r;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.P = permissions;\r\n }\r\n\r\n _setupEncryptionV5(encDict, options) {\r\n this.keyBits = 256;\r\n const permissions = getPermissionsR3(options.permissions);\r\n\r\n const processedUserPassword = processPasswordR5(options.userPassword);\r\n const processedOwnerPassword = options.ownerPassword\r\n ? processPasswordR5(options.ownerPassword)\r\n : processedUserPassword;\r\n\r\n this.encryptionKey = getEncryptionKeyR5(\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userPasswordEntry = getUserPasswordR5(\r\n processedUserPassword,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const userKeySalt = CryptoJS.lib.WordArray.create(\r\n userPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const userEncryptionKeyEntry = getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n this.encryptionKey\r\n );\r\n const ownerPasswordEntry = getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n const ownerKeySalt = CryptoJS.lib.WordArray.create(\r\n ownerPasswordEntry.words.slice(10, 12),\r\n 8\r\n );\r\n const ownerEncryptionKeyEntry = getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n this.encryptionKey\r\n );\r\n const permsEntry = getEncryptedPermissionsR5(\r\n permissions,\r\n this.encryptionKey,\r\n PDFSecurity.generateRandomWordArray\r\n );\r\n\r\n encDict.V = 5;\r\n encDict.Length = this.keyBits;\r\n encDict.CF = {\r\n StdCF: {\r\n AuthEvent: 'DocOpen',\r\n CFM: 'AESV3',\r\n Length: this.keyBits / 8\r\n }\r\n };\r\n encDict.StmF = 'StdCF';\r\n encDict.StrF = 'StdCF';\r\n encDict.R = 5;\r\n encDict.O = wordArrayToBuffer(ownerPasswordEntry);\r\n encDict.OE = wordArrayToBuffer(ownerEncryptionKeyEntry);\r\n encDict.U = wordArrayToBuffer(userPasswordEntry);\r\n encDict.UE = wordArrayToBuffer(userEncryptionKeyEntry);\r\n encDict.P = permissions;\r\n encDict.Perms = wordArrayToBuffer(permsEntry);\r\n }\r\n\r\n getEncryptFn(obj, gen) {\r\n let digest;\r\n if (this.version < 5) {\r\n digest = this.encryptionKey\r\n .clone()\r\n .concat(\r\n CryptoJS.lib.WordArray.create(\r\n [\r\n ((obj & 0xff) << 24) |\r\n ((obj & 0xff00) << 8) |\r\n ((obj >> 8) & 0xff00) |\r\n (gen & 0xff),\r\n (gen & 0xff00) << 16\r\n ],\r\n 5\r\n )\r\n );\r\n }\r\n\r\n if (this.version === 1 || this.version === 2) {\r\n let key = CryptoJS.MD5(digest);\r\n key.sigBytes = Math.min(16, this.keyBits / 8 + 5);\r\n return buffer =>\r\n wordArrayToBuffer(\r\n CryptoJS.RC4.encrypt(CryptoJS.lib.WordArray.create(buffer), key)\r\n .ciphertext\r\n );\r\n }\r\n\r\n let key;\r\n if (this.version === 4) {\r\n key = CryptoJS.MD5(\r\n digest.concat(CryptoJS.lib.WordArray.create([0x73416c54], 4))\r\n );\r\n } else {\r\n key = this.encryptionKey;\r\n }\r\n\r\n const iv = PDFSecurity.generateRandomWordArray(16);\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.Pkcs7,\r\n iv\r\n };\r\n\r\n return buffer =>\r\n wordArrayToBuffer(\r\n iv\r\n .clone()\r\n .concat(\r\n CryptoJS.AES.encrypt(\r\n CryptoJS.lib.WordArray.create(buffer),\r\n key,\r\n options\r\n ).ciphertext\r\n )\r\n );\r\n }\r\n\r\n end() {\r\n this.dictionary.end();\r\n }\r\n}\r\n\r\nfunction getPermissionsR2(permissionObject = {}) {\r\n let permissions = 0xffffffc0 >> 0;\r\n if (permissionObject.printing) {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getPermissionsR3(permissionObject = {}) {\r\n let permissions = 0xfffff0c0 >> 0;\r\n if (permissionObject.printing === 'lowResolution') {\r\n permissions |= 0b000000000100;\r\n }\r\n if (permissionObject.printing === 'highResolution') {\r\n permissions |= 0b100000000100;\r\n }\r\n if (permissionObject.modifying) {\r\n permissions |= 0b000000001000;\r\n }\r\n if (permissionObject.copying) {\r\n permissions |= 0b000000010000;\r\n }\r\n if (permissionObject.annotating) {\r\n permissions |= 0b000000100000;\r\n }\r\n if (permissionObject.fillingForms) {\r\n permissions |= 0b000100000000;\r\n }\r\n if (permissionObject.contentAccessibility) {\r\n permissions |= 0b001000000000;\r\n }\r\n if (permissionObject.documentAssembly) {\r\n permissions |= 0b010000000000;\r\n }\r\n return permissions;\r\n}\r\n\r\nfunction getUserPasswordR2(encryptionKey) {\r\n return CryptoJS.RC4.encrypt(processPasswordR2R3R4(), encryptionKey)\r\n .ciphertext;\r\n}\r\n\r\nfunction getUserPasswordR3R4(documentId, encryptionKey) {\r\n const key = encryptionKey.clone();\r\n let cipher = CryptoJS.MD5(\r\n processPasswordR2R3R4().concat(CryptoJS.lib.WordArray.create(documentId))\r\n );\r\n for (let i = 0; i < 20; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] =\r\n encryptionKey.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher.concat(CryptoJS.lib.WordArray.create(null, 16));\r\n}\r\n\r\nfunction getOwnerPasswordR2R3R4(\r\n r,\r\n keyBits,\r\n paddedUserPassword,\r\n paddedOwnerPassword\r\n) {\r\n let digest = paddedOwnerPassword;\r\n let round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n digest = CryptoJS.MD5(digest);\r\n }\r\n\r\n const key = digest.clone();\r\n key.sigBytes = keyBits / 8;\r\n let cipher = paddedUserPassword;\r\n round = r >= 3 ? 20 : 1;\r\n for (let i = 0; i < round; i++) {\r\n const xorRound = Math.ceil(key.sigBytes / 4);\r\n for (let j = 0; j < xorRound; j++) {\r\n key.words[j] = digest.words[j] ^ (i | (i << 8) | (i << 16) | (i << 24));\r\n }\r\n cipher = CryptoJS.RC4.encrypt(cipher, key).ciphertext;\r\n }\r\n return cipher;\r\n}\r\n\r\nfunction getEncryptionKeyR2R3R4(\r\n r,\r\n keyBits,\r\n documentId,\r\n paddedUserPassword,\r\n ownerPasswordEntry,\r\n permissions\r\n) {\r\n let key = paddedUserPassword\r\n .clone()\r\n .concat(ownerPasswordEntry)\r\n .concat(CryptoJS.lib.WordArray.create([lsbFirstWord(permissions)], 4))\r\n .concat(CryptoJS.lib.WordArray.create(documentId));\r\n const round = r >= 3 ? 51 : 1;\r\n for (let i = 0; i < round; i++) {\r\n key = CryptoJS.MD5(key);\r\n key.sigBytes = keyBits / 8;\r\n }\r\n return key;\r\n}\r\n\r\nfunction getUserPasswordR5(processedUserPassword, generateRandomWordArray) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(processedUserPassword.clone().concat(validationSalt))\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getUserEncryptionKeyR5(\r\n processedUserPassword,\r\n userKeySalt,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedUserPassword.clone().concat(userKeySalt)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getOwnerPasswordR5(\r\n processedOwnerPassword,\r\n userPasswordEntry,\r\n generateRandomWordArray\r\n) {\r\n const validationSalt = generateRandomWordArray(8);\r\n const keySalt = generateRandomWordArray(8);\r\n return CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(validationSalt)\r\n .concat(userPasswordEntry)\r\n )\r\n .concat(validationSalt)\r\n .concat(keySalt);\r\n}\r\n\r\nfunction getOwnerEncryptionKeyR5(\r\n processedOwnerPassword,\r\n ownerKeySalt,\r\n userPasswordEntry,\r\n encryptionKey\r\n) {\r\n const key = CryptoJS.SHA256(\r\n processedOwnerPassword\r\n .clone()\r\n .concat(ownerKeySalt)\r\n .concat(userPasswordEntry)\r\n );\r\n const options = {\r\n mode: CryptoJS.mode.CBC,\r\n padding: CryptoJS.pad.NoPadding,\r\n iv: CryptoJS.lib.WordArray.create(null, 16)\r\n };\r\n return CryptoJS.AES.encrypt(encryptionKey, key, options).ciphertext;\r\n}\r\n\r\nfunction getEncryptionKeyR5(generateRandomWordArray) {\r\n return generateRandomWordArray(32);\r\n}\r\n\r\nfunction getEncryptedPermissionsR5(\r\n permissions,\r\n encryptionKey,\r\n generateRandomWordArray\r\n) {\r\n const cipher = CryptoJS.lib.WordArray.create(\r\n [lsbFirstWord(permissions), 0xffffffff, 0x54616462],\r\n 12\r\n ).concat(generateRandomWordArray(4));\r\n const options = {\r\n mode: CryptoJS.mode.ECB,\r\n padding: CryptoJS.pad.NoPadding\r\n };\r\n return CryptoJS.AES.encrypt(cipher, encryptionKey, options).ciphertext;\r\n}\r\n\r\nfunction processPasswordR2R3R4(password = '') {\r\n const out = Buffer.alloc(32);\r\n const length = password.length;\r\n let index = 0;\r\n while (index < length && index < 32) {\r\n const code = password.charCodeAt(index);\r\n if (code > 0xff) {\r\n throw new Error('Password contains one or more invalid characters.');\r\n }\r\n out[index] = code;\r\n index++;\r\n }\r\n while (index < 32) {\r\n out[index] = PASSWORD_PADDING[index - length];\r\n index++;\r\n }\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction processPasswordR5(password = '') {\r\n password = unescape(encodeURIComponent(saslprep(password)));\r\n const length = Math.min(127, password.length);\r\n const out = Buffer.alloc(length);\r\n\r\n for (let i = 0; i < length; i++) {\r\n out[i] = password.charCodeAt(i);\r\n }\r\n\r\n return CryptoJS.lib.WordArray.create(out);\r\n}\r\n\r\nfunction lsbFirstWord(data) {\r\n return (\r\n ((data & 0xff) << 24) |\r\n ((data & 0xff00) << 8) |\r\n ((data >> 8) & 0xff00) |\r\n ((data >> 24) & 0xff)\r\n );\r\n}\r\n\r\nfunction wordArrayToBuffer(wordArray) {\r\n const byteArray = [];\r\n for (let i = 0; i < wordArray.sigBytes; i++) {\r\n byteArray.push(\r\n (wordArray.words[Math.floor(i / 4)] >> (8 * (3 - (i % 4)))) & 0xff\r\n );\r\n }\r\n return Buffer.from(byteArray);\r\n}\r\n\r\nconst PASSWORD_PADDING = [\r\n 0x28,\r\n 0xbf,\r\n 0x4e,\r\n 0x5e,\r\n 0x4e,\r\n 0x75,\r\n 0x8a,\r\n 0x41,\r\n 0x64,\r\n 0x00,\r\n 0x4e,\r\n 0x56,\r\n 0xff,\r\n 0xfa,\r\n 0x01,\r\n 0x08,\r\n 0x2e,\r\n 0x2e,\r\n 0x00,\r\n 0xb6,\r\n 0xd0,\r\n 0x68,\r\n 0x3e,\r\n 0x80,\r\n 0x2f,\r\n 0x0c,\r\n 0xa9,\r\n 0xfe,\r\n 0x64,\r\n 0x53,\r\n 0x69,\r\n 0x7a\r\n];\r\n\r\nexport default PDFSecurity;\r\n","let cx, cy, px, py, sx, sy;\r\n\r\ncx = cy = px = py = sx = sy = 0;\r\n\r\nconst parameters = {\r\n A: 7,\r\n a: 7,\r\n C: 6,\r\n c: 6,\r\n H: 1,\r\n h: 1,\r\n L: 2,\r\n l: 2,\r\n M: 2,\r\n m: 2,\r\n Q: 4,\r\n q: 4,\r\n S: 4,\r\n s: 4,\r\n T: 2,\r\n t: 2,\r\n V: 1,\r\n v: 1,\r\n Z: 0,\r\n z: 0\r\n};\r\n\r\nconst parse = function(path) {\r\n let cmd;\r\n const ret = [];\r\n let args = [];\r\n let curArg = '';\r\n let foundDecimal = false;\r\n let params = 0;\r\n\r\n for (let c of path) {\r\n if (parameters[c] != null) {\r\n params = parameters[c];\r\n if (cmd) {\r\n // save existing command\r\n if (curArg.length > 0) {\r\n args[args.length] = +curArg;\r\n }\r\n ret[ret.length] = { cmd, args };\r\n\r\n args = [];\r\n curArg = '';\r\n foundDecimal = false;\r\n }\r\n\r\n cmd = c;\r\n } else if (\r\n [' ', ','].includes(c) ||\r\n (c === '-' && curArg.length > 0 && curArg[curArg.length - 1] !== 'e') ||\r\n (c === '.' && foundDecimal)\r\n ) {\r\n if (curArg.length === 0) {\r\n continue;\r\n }\r\n\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n\r\n foundDecimal = c === '.';\r\n\r\n // fix for negative numbers or repeated decimals with no delimeter between commands\r\n curArg = ['-', '.'].includes(c) ? c : '';\r\n } else {\r\n curArg += c;\r\n if (c === '.') {\r\n foundDecimal = true;\r\n }\r\n }\r\n }\r\n\r\n // add the last command\r\n if (curArg.length > 0) {\r\n if (args.length === params) {\r\n // handle reused commands\r\n ret[ret.length] = { cmd, args };\r\n args = [+curArg];\r\n\r\n // handle assumed commands\r\n if (cmd === 'M') {\r\n cmd = 'L';\r\n }\r\n if (cmd === 'm') {\r\n cmd = 'l';\r\n }\r\n } else {\r\n args[args.length] = +curArg;\r\n }\r\n }\r\n\r\n ret[ret.length] = { cmd, args };\r\n\r\n return ret;\r\n};\r\n\r\nconst apply = function(commands, doc) {\r\n // current point, control point, and subpath starting point\r\n cx = cy = px = py = sx = sy = 0;\r\n\r\n // run the commands\r\n for (let i = 0; i < commands.length; i++) {\r\n const c = commands[i];\r\n if (typeof runners[c.cmd] === 'function') {\r\n runners[c.cmd](doc, c.args);\r\n }\r\n }\r\n};\r\n\r\nconst runners = {\r\n M(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n m(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n sx = cx;\r\n sy = cy;\r\n return doc.moveTo(cx, cy);\r\n },\r\n\r\n C(doc, a) {\r\n cx = a[4];\r\n cy = a[5];\r\n px = a[2];\r\n py = a[3];\r\n return doc.bezierCurveTo(...a);\r\n },\r\n\r\n c(doc, a) {\r\n doc.bezierCurveTo(\r\n a[0] + cx,\r\n a[1] + cy,\r\n a[2] + cx,\r\n a[3] + cy,\r\n a[4] + cx,\r\n a[5] + cy\r\n );\r\n px = cx + a[2];\r\n py = cy + a[3];\r\n cx += a[4];\r\n return (cy += a[5]);\r\n },\r\n\r\n S(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(cx - (px - cx), cy - (py - cy), a[0], a[1], a[2], a[3]);\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n return (cy = a[3]);\r\n },\r\n\r\n s(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n }\r\n\r\n doc.bezierCurveTo(\r\n cx - (px - cx),\r\n cy - (py - cy),\r\n cx + a[0],\r\n cy + a[1],\r\n cx + a[2],\r\n cy + a[3]\r\n );\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n Q(doc, a) {\r\n px = a[0];\r\n py = a[1];\r\n cx = a[2];\r\n cy = a[3];\r\n return doc.quadraticCurveTo(a[0], a[1], cx, cy);\r\n },\r\n\r\n q(doc, a) {\r\n doc.quadraticCurveTo(a[0] + cx, a[1] + cy, a[2] + cx, a[3] + cy);\r\n px = cx + a[0];\r\n py = cy + a[1];\r\n cx += a[2];\r\n return (cy += a[3]);\r\n },\r\n\r\n T(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, a[0], a[1]);\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n cx = a[0];\r\n return (cy = a[1]);\r\n },\r\n\r\n t(doc, a) {\r\n if (px === null) {\r\n px = cx;\r\n py = cy;\r\n } else {\r\n px = cx - (px - cx);\r\n py = cy - (py - cy);\r\n }\r\n\r\n doc.quadraticCurveTo(px, py, cx + a[0], cy + a[1]);\r\n cx += a[0];\r\n return (cy += a[1]);\r\n },\r\n\r\n A(doc, a) {\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n a(doc, a) {\r\n a[5] += cx;\r\n a[6] += cy;\r\n solveArc(doc, cx, cy, a);\r\n cx = a[5];\r\n return (cy = a[6]);\r\n },\r\n\r\n L(doc, a) {\r\n cx = a[0];\r\n cy = a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n l(doc, a) {\r\n cx += a[0];\r\n cy += a[1];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n H(doc, a) {\r\n cx = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n h(doc, a) {\r\n cx += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n V(doc, a) {\r\n cy = a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n v(doc, a) {\r\n cy += a[0];\r\n px = py = null;\r\n return doc.lineTo(cx, cy);\r\n },\r\n\r\n Z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n },\r\n\r\n z(doc) {\r\n doc.closePath();\r\n cx = sx;\r\n return (cy = sy);\r\n }\r\n};\r\n\r\nconst solveArc = function(doc, x, y, coords) {\r\n const [rx, ry, rot, large, sweep, ex, ey] = coords;\r\n const segs = arcToSegments(ex, ey, rx, ry, large, sweep, rot, x, y);\r\n\r\n for (let seg of segs) {\r\n const bez = segmentToBezier(...seg);\r\n doc.bezierCurveTo(...bez);\r\n }\r\n};\r\n\r\n// from Inkscape svgtopdf, thanks!\r\nconst arcToSegments = function(x, y, rx, ry, large, sweep, rotateX, ox, oy) {\r\n const th = rotateX * (Math.PI / 180);\r\n const sin_th = Math.sin(th);\r\n const cos_th = Math.cos(th);\r\n rx = Math.abs(rx);\r\n ry = Math.abs(ry);\r\n px = cos_th * (ox - x) * 0.5 + sin_th * (oy - y) * 0.5;\r\n py = cos_th * (oy - y) * 0.5 - sin_th * (ox - x) * 0.5;\r\n let pl = (px * px) / (rx * rx) + (py * py) / (ry * ry);\r\n if (pl > 1) {\r\n pl = Math.sqrt(pl);\r\n rx *= pl;\r\n ry *= pl;\r\n }\r\n\r\n const a00 = cos_th / rx;\r\n const a01 = sin_th / rx;\r\n const a10 = -sin_th / ry;\r\n const a11 = cos_th / ry;\r\n const x0 = a00 * ox + a01 * oy;\r\n const y0 = a10 * ox + a11 * oy;\r\n const x1 = a00 * x + a01 * y;\r\n const y1 = a10 * x + a11 * y;\r\n\r\n const d = (x1 - x0) * (x1 - x0) + (y1 - y0) * (y1 - y0);\r\n let sfactor_sq = 1 / d - 0.25;\r\n if (sfactor_sq < 0) {\r\n sfactor_sq = 0;\r\n }\r\n let sfactor = Math.sqrt(sfactor_sq);\r\n if (sweep === large) {\r\n sfactor = -sfactor;\r\n }\r\n\r\n const xc = 0.5 * (x0 + x1) - sfactor * (y1 - y0);\r\n const yc = 0.5 * (y0 + y1) + sfactor * (x1 - x0);\r\n\r\n const th0 = Math.atan2(y0 - yc, x0 - xc);\r\n const th1 = Math.atan2(y1 - yc, x1 - xc);\r\n\r\n let th_arc = th1 - th0;\r\n if (th_arc < 0 && sweep === 1) {\r\n th_arc += 2 * Math.PI;\r\n } else if (th_arc > 0 && sweep === 0) {\r\n th_arc -= 2 * Math.PI;\r\n }\r\n\r\n const segments = Math.ceil(Math.abs(th_arc / (Math.PI * 0.5 + 0.001)));\r\n const result = [];\r\n\r\n for (let i = 0; i < segments; i++) {\r\n const th2 = th0 + (i * th_arc) / segments;\r\n const th3 = th0 + ((i + 1) * th_arc) / segments;\r\n result[i] = [xc, yc, th2, th3, rx, ry, sin_th, cos_th];\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst segmentToBezier = function(cx, cy, th0, th1, rx, ry, sin_th, cos_th) {\r\n const a00 = cos_th * rx;\r\n const a01 = -sin_th * ry;\r\n const a10 = sin_th * rx;\r\n const a11 = cos_th * ry;\r\n\r\n const th_half = 0.5 * (th1 - th0);\r\n const t =\r\n ((8 / 3) * Math.sin(th_half * 0.5) * Math.sin(th_half * 0.5)) /\r\n Math.sin(th_half);\r\n const x1 = cx + Math.cos(th0) - t * Math.sin(th0);\r\n const y1 = cy + Math.sin(th0) + t * Math.cos(th0);\r\n const x3 = cx + Math.cos(th1);\r\n const y3 = cy + Math.sin(th1);\r\n const x2 = x3 + t * Math.sin(th1);\r\n const y2 = y3 - t * Math.cos(th1);\r\n\r\n return [\r\n a00 * x1 + a01 * y1,\r\n a10 * x1 + a11 * y1,\r\n a00 * x2 + a01 * y2,\r\n a10 * x2 + a11 * y2,\r\n a00 * x3 + a01 * y3,\r\n a10 * x3 + a11 * y3\r\n ];\r\n};\r\n\r\nclass SVGPath {\r\n static apply(doc, path) {\r\n const commands = parse(path);\r\n apply(commands, doc);\r\n }\r\n}\r\n\r\nexport default SVGPath;\r\n","import PDFObject from './object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nclass PDFGradient {\r\n constructor(doc) {\r\n this.doc = doc;\r\n this.stops = [];\r\n this.embedded = false;\r\n this.transform = [1, 0, 0, 1, 0, 0];\r\n }\r\n\r\n stop(pos, color, opacity) {\r\n if (opacity == null) {\r\n opacity = 1;\r\n }\r\n color = this.doc._normalizeColor(color);\r\n\r\n if (this.stops.length === 0) {\r\n if (color.length === 3) {\r\n this._colorSpace = 'DeviceRGB';\r\n } else if (color.length === 4) {\r\n this._colorSpace = 'DeviceCMYK';\r\n } else if (color.length === 1) {\r\n this._colorSpace = 'DeviceGray';\r\n } else {\r\n throw new Error('Unknown color space');\r\n }\r\n } else if (\r\n (this._colorSpace === 'DeviceRGB' && color.length !== 3) ||\r\n (this._colorSpace === 'DeviceCMYK' && color.length !== 4) ||\r\n (this._colorSpace === 'DeviceGray' && color.length !== 1)\r\n ) {\r\n throw new Error('All gradient stops must use the same color space');\r\n }\r\n\r\n opacity = Math.max(0, Math.min(1, opacity));\r\n this.stops.push([pos, color, opacity]);\r\n return this;\r\n }\r\n\r\n setTransform(m11, m12, m21, m22, dx, dy) {\r\n this.transform = [m11, m12, m21, m22, dx, dy];\r\n return this;\r\n }\r\n\r\n embed(m) {\r\n let fn;\r\n const stopsLength = this.stops.length;\r\n if (stopsLength === 0) {\r\n return;\r\n }\r\n this.embedded = true;\r\n this.matrix = m;\r\n\r\n // if the last stop comes before 100%, add a copy at 100%\r\n const last = this.stops[stopsLength - 1];\r\n if (last[0] < 1) {\r\n this.stops.push([1, last[1], last[2]]);\r\n }\r\n\r\n const bounds = [];\r\n const encode = [];\r\n const stops = [];\r\n\r\n for (let i = 0; i < stopsLength - 1; i++) {\r\n encode.push(0, 1);\r\n if (i + 2 !== stopsLength) {\r\n bounds.push(this.stops[i + 1][0]);\r\n }\r\n\r\n fn = this.doc.ref({\r\n FunctionType: 2,\r\n Domain: [0, 1],\r\n C0: this.stops[i + 0][1],\r\n C1: this.stops[i + 1][1],\r\n N: 1\r\n });\r\n\r\n stops.push(fn);\r\n fn.end();\r\n }\r\n\r\n // if there are only two stops, we don't need a stitching function\r\n if (stopsLength === 1) {\r\n fn = stops[0];\r\n } else {\r\n fn = this.doc.ref({\r\n FunctionType: 3, // stitching function\r\n Domain: [0, 1],\r\n Functions: stops,\r\n Bounds: bounds,\r\n Encode: encode\r\n });\r\n\r\n fn.end();\r\n }\r\n\r\n this.id = `Sh${++this.doc._gradCount}`;\r\n\r\n const shader = this.shader(fn);\r\n shader.end();\r\n\r\n const pattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 2,\r\n Shading: shader,\r\n Matrix: this.matrix.map(number)\r\n });\r\n\r\n pattern.end();\r\n\r\n if (this.stops.some(stop => stop[2] < 1)) {\r\n let grad = this.opacityGradient();\r\n grad._colorSpace = 'DeviceGray';\r\n\r\n for (let stop of this.stops) {\r\n grad.stop(stop[0], [stop[2]]);\r\n }\r\n\r\n grad = grad.embed(this.matrix);\r\n\r\n const pageBBox = [0, 0, this.doc.page.width, this.doc.page.height];\r\n\r\n const form = this.doc.ref({\r\n Type: 'XObject',\r\n Subtype: 'Form',\r\n FormType: 1,\r\n BBox: pageBBox,\r\n Group: {\r\n Type: 'Group',\r\n S: 'Transparency',\r\n CS: 'DeviceGray'\r\n },\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: grad\r\n }\r\n }\r\n });\r\n\r\n form.write('/Pattern cs /Sh1 scn');\r\n form.end(`${pageBBox.join(' ')} re f`);\r\n\r\n const gstate = this.doc.ref({\r\n Type: 'ExtGState',\r\n SMask: {\r\n Type: 'Mask',\r\n S: 'Luminosity',\r\n G: form\r\n }\r\n });\r\n\r\n gstate.end();\r\n\r\n const opacityPattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 1,\r\n PaintType: 1,\r\n TilingType: 2,\r\n BBox: pageBBox,\r\n XStep: pageBBox[2],\r\n YStep: pageBBox[3],\r\n Resources: {\r\n ProcSet: ['PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'],\r\n Pattern: {\r\n Sh1: pattern\r\n },\r\n ExtGState: {\r\n Gs1: gstate\r\n }\r\n }\r\n });\r\n\r\n opacityPattern.write('/Gs1 gs /Pattern cs /Sh1 scn');\r\n opacityPattern.end(`${pageBBox.join(' ')} re f`);\r\n\r\n this.doc.page.patterns[this.id] = opacityPattern;\r\n } else {\r\n this.doc.page.patterns[this.id] = pattern;\r\n }\r\n\r\n return pattern;\r\n }\r\n\r\n apply(stroke) {\r\n // apply gradient transform to existing document ctm\r\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n const [m11, m12, m21, m22, dx, dy] = this.transform;\r\n const m = [\r\n m0 * m11 + m2 * m12,\r\n m1 * m11 + m3 * m12,\r\n m0 * m21 + m2 * m22,\r\n m1 * m21 + m3 * m22,\r\n m0 * dx + m2 * dy + m4,\r\n m1 * dx + m3 * dy + m5\r\n ];\r\n\r\n if (!this.embedded || m.join(' ') !== this.matrix.join(' ')) {\r\n this.embed(m);\r\n }\r\n this.doc._setColorSpace('Pattern', stroke);\r\n const op = stroke ? 'SCN' : 'scn';\r\n return this.doc.addContent(`/${this.id} ${op}`);\r\n }\r\n}\r\n\r\nclass PDFLinearGradient extends PDFGradient {\r\n constructor(doc, x1, y1, x2, y2) {\r\n super(doc);\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 2,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.x2, this.y2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFLinearGradient(this.doc, this.x1, this.y1, this.x2, this.y2);\r\n }\r\n}\r\n\r\nclass PDFRadialGradient extends PDFGradient {\r\n constructor(doc, x1, y1, r1, x2, y2, r2) {\r\n super(doc);\r\n this.doc = doc;\r\n this.x1 = x1;\r\n this.y1 = y1;\r\n this.r1 = r1;\r\n this.x2 = x2;\r\n this.y2 = y2;\r\n this.r2 = r2;\r\n }\r\n\r\n shader(fn) {\r\n return this.doc.ref({\r\n ShadingType: 3,\r\n ColorSpace: this._colorSpace,\r\n Coords: [this.x1, this.y1, this.r1, this.x2, this.y2, this.r2],\r\n Function: fn,\r\n Extend: [true, true]\r\n });\r\n }\r\n\r\n opacityGradient() {\r\n return new PDFRadialGradient(\r\n this.doc,\r\n this.x1,\r\n this.y1,\r\n this.r1,\r\n this.x2,\r\n this.y2,\r\n this.r2\r\n );\r\n }\r\n}\r\n\r\nexport default { PDFGradient, PDFLinearGradient, PDFRadialGradient };\r\n","/*\r\nPDF tiling pattern support. Uncolored only.\r\n */\r\n\r\nconst underlyingColorSpaces = ['DeviceCMYK', 'DeviceRGB'];\r\n\r\nclass PDFTilingPattern {\r\n constructor(doc, bBox, xStep, yStep, stream) {\r\n this.doc = doc;\r\n this.bBox = bBox;\r\n this.xStep = xStep;\r\n this.yStep = yStep;\r\n this.stream = stream;\r\n }\r\n\r\n createPattern() {\r\n // no resources needed for our current usage\r\n // required entry\r\n const resources = this.doc.ref();\r\n resources.end();\r\n // apply default transform matrix (flipped in the default doc._ctm)\r\n // see document.js & gradient.js\r\n const [m0, m1, m2, m3, m4, m5] = this.doc._ctm;\r\n const [m11, m12, m21, m22, dx, dy] = [1, 0, 0, 1, 0, 0];\r\n const m = [\r\n m0 * m11 + m2 * m12,\r\n m1 * m11 + m3 * m12,\r\n m0 * m21 + m2 * m22,\r\n m1 * m21 + m3 * m22,\r\n m0 * dx + m2 * dy + m4,\r\n m1 * dx + m3 * dy + m5\r\n ];\r\n const pattern = this.doc.ref({\r\n Type: 'Pattern',\r\n PatternType: 1, // tiling\r\n PaintType: 2, // 1-colored, 2-uncolored\r\n TilingType: 2, // 2-no distortion\r\n BBox: this.bBox,\r\n XStep: this.xStep,\r\n YStep: this.yStep,\r\n Matrix: m.map(v => +v.toFixed(5)),\r\n Resources: resources\r\n });\r\n pattern.end(this.stream);\r\n return pattern;\r\n }\r\n\r\n embedPatternColorSpaces() {\r\n // map each pattern to an underlying color space\r\n // and embed on each page\r\n underlyingColorSpaces.forEach(csName => {\r\n const csId = this.getPatternColorSpaceId(csName);\r\n\r\n if (this.doc.page.colorSpaces[csId]) return;\r\n const cs = this.doc.ref(['Pattern', csName]);\r\n cs.end();\r\n this.doc.page.colorSpaces[csId] = cs;\r\n });\r\n }\r\n\r\n getPatternColorSpaceId(underlyingColorspace) {\r\n return `CsP${underlyingColorspace}`;\r\n }\r\n\r\n embed() {\r\n if (!this.id) {\r\n this.doc._patternCount = this.doc._patternCount + 1;\r\n this.id = 'P' + this.doc._patternCount;\r\n this.pattern = this.createPattern();\r\n }\r\n\r\n // patterns are embedded in each page\r\n if (!this.doc.page.patterns[this.id]) {\r\n this.doc.page.patterns[this.id] = this.pattern;\r\n }\r\n }\r\n\r\n apply(stroke, patternColor) {\r\n // do any embedding/creating that might be needed\r\n this.embedPatternColorSpaces();\r\n this.embed();\r\n\r\n const normalizedColor = this.doc._normalizeColor(patternColor);\r\n if (!normalizedColor)\r\n throw Error(`invalid pattern color. (value: ${patternColor})`);\r\n\r\n // select one of the pattern color spaces\r\n const csId = this.getPatternColorSpaceId(\r\n this.doc._getColorSpace(normalizedColor)\r\n );\r\n this.doc._setColorSpace(csId, stroke);\r\n\r\n // stroke/fill using the pattern and color (in the above underlying color space)\r\n const op = stroke ? 'SCN' : 'scn';\r\n return this.doc.addContent(\r\n `${normalizedColor.join(' ')} /${this.id} ${op}`\r\n );\r\n }\r\n}\r\n\r\nexport default { PDFTilingPattern };\r\n","import Gradient from '../gradient';\r\nimport pattern from '../pattern';\r\n\r\nconst { PDFGradient, PDFLinearGradient, PDFRadialGradient } = Gradient;\r\nconst { PDFTilingPattern } = pattern;\r\n\r\nexport default {\r\n initColor() {\r\n // The opacity dictionaries\r\n this._opacityRegistry = {};\r\n this._opacityCount = 0;\r\n this._patternCount = 0;\r\n return (this._gradCount = 0);\r\n },\r\n\r\n _normalizeColor(color) {\r\n if (typeof color === 'string') {\r\n if (color.charAt(0) === '#') {\r\n if (color.length === 4) {\r\n color = color.replace(\r\n /#([0-9A-F])([0-9A-F])([0-9A-F])/i,\r\n '#$1$1$2$2$3$3'\r\n );\r\n }\r\n const hex = parseInt(color.slice(1), 16);\r\n color = [hex >> 16, (hex >> 8) & 0xff, hex & 0xff];\r\n } else if (namedColors[color]) {\r\n color = namedColors[color];\r\n }\r\n }\r\n\r\n if (Array.isArray(color)) {\r\n // RGB\r\n if (color.length === 3) {\r\n color = color.map(part => part / 255);\r\n // CMYK\r\n } else if (color.length === 4) {\r\n color = color.map(part => part / 100);\r\n }\r\n return color;\r\n }\r\n\r\n return null;\r\n },\r\n\r\n _setColor(color, stroke) {\r\n if (color instanceof PDFGradient) {\r\n color.apply(stroke);\r\n return true;\r\n // see if tiling pattern, decode & apply it it\r\n } else if (Array.isArray(color) && color[0] instanceof PDFTilingPattern) {\r\n color[0].apply(stroke, color[1]);\r\n return true;\r\n }\r\n // any other case should be a normal color and not a pattern\r\n return this._setColorCore(color, stroke);\r\n },\r\n\r\n _setColorCore(color, stroke) {\r\n color = this._normalizeColor(color);\r\n if (!color) {\r\n return false;\r\n }\r\n\r\n const op = stroke ? 'SCN' : 'scn';\r\n const space = this._getColorSpace(color);\r\n this._setColorSpace(space, stroke);\r\n\r\n color = color.join(' ');\r\n this.addContent(`${color} ${op}`);\r\n\r\n return true;\r\n },\r\n\r\n _setColorSpace(space, stroke) {\r\n const op = stroke ? 'CS' : 'cs';\r\n return this.addContent(`/${space} ${op}`);\r\n },\r\n\r\n _getColorSpace(color) {\r\n return color.length === 4 ? 'DeviceCMYK' : 'DeviceRGB';\r\n },\r\n\r\n fillColor(color, opacity) {\r\n const set = this._setColor(color, false);\r\n if (set) {\r\n this.fillOpacity(opacity);\r\n }\r\n\r\n // save this for text wrapper, which needs to reset\r\n // the fill color on new pages\r\n this._fillColor = [color, opacity];\r\n return this;\r\n },\r\n\r\n strokeColor(color, opacity) {\r\n const set = this._setColor(color, true);\r\n if (set) {\r\n this.strokeOpacity(opacity);\r\n }\r\n return this;\r\n },\r\n\r\n opacity(opacity) {\r\n this._doOpacity(opacity, opacity);\r\n return this;\r\n },\r\n\r\n fillOpacity(opacity) {\r\n this._doOpacity(opacity, null);\r\n return this;\r\n },\r\n\r\n strokeOpacity(opacity) {\r\n this._doOpacity(null, opacity);\r\n return this;\r\n },\r\n\r\n _doOpacity(fillOpacity, strokeOpacity) {\r\n let dictionary, name;\r\n if (fillOpacity == null && strokeOpacity == null) {\r\n return;\r\n }\r\n\r\n if (fillOpacity != null) {\r\n fillOpacity = Math.max(0, Math.min(1, fillOpacity));\r\n }\r\n if (strokeOpacity != null) {\r\n strokeOpacity = Math.max(0, Math.min(1, strokeOpacity));\r\n }\r\n const key = `${fillOpacity}_${strokeOpacity}`;\r\n\r\n if (this._opacityRegistry[key]) {\r\n [dictionary, name] = this._opacityRegistry[key];\r\n } else {\r\n dictionary = { Type: 'ExtGState' };\r\n\r\n if (fillOpacity != null) {\r\n dictionary.ca = fillOpacity;\r\n }\r\n if (strokeOpacity != null) {\r\n dictionary.CA = strokeOpacity;\r\n }\r\n\r\n dictionary = this.ref(dictionary);\r\n dictionary.end();\r\n const id = ++this._opacityCount;\r\n name = `Gs${id}`;\r\n this._opacityRegistry[key] = [dictionary, name];\r\n }\r\n\r\n this.page.ext_gstates[name] = dictionary;\r\n return this.addContent(`/${name} gs`);\r\n },\r\n\r\n linearGradient(x1, y1, x2, y2) {\r\n return new PDFLinearGradient(this, x1, y1, x2, y2);\r\n },\r\n\r\n radialGradient(x1, y1, r1, x2, y2, r2) {\r\n return new PDFRadialGradient(this, x1, y1, r1, x2, y2, r2);\r\n },\r\n\r\n pattern(bbox, xStep, yStep, stream) {\r\n return new PDFTilingPattern(this, bbox, xStep, yStep, stream);\r\n }\r\n};\r\n\r\nvar namedColors = {\r\n aliceblue: [240, 248, 255],\r\n antiquewhite: [250, 235, 215],\r\n aqua: [0, 255, 255],\r\n aquamarine: [127, 255, 212],\r\n azure: [240, 255, 255],\r\n beige: [245, 245, 220],\r\n bisque: [255, 228, 196],\r\n black: [0, 0, 0],\r\n blanchedalmond: [255, 235, 205],\r\n blue: [0, 0, 255],\r\n blueviolet: [138, 43, 226],\r\n brown: [165, 42, 42],\r\n burlywood: [222, 184, 135],\r\n cadetblue: [95, 158, 160],\r\n chartreuse: [127, 255, 0],\r\n chocolate: [210, 105, 30],\r\n coral: [255, 127, 80],\r\n cornflowerblue: [100, 149, 237],\r\n cornsilk: [255, 248, 220],\r\n crimson: [220, 20, 60],\r\n cyan: [0, 255, 255],\r\n darkblue: [0, 0, 139],\r\n darkcyan: [0, 139, 139],\r\n darkgoldenrod: [184, 134, 11],\r\n darkgray: [169, 169, 169],\r\n darkgreen: [0, 100, 0],\r\n darkgrey: [169, 169, 169],\r\n darkkhaki: [189, 183, 107],\r\n darkmagenta: [139, 0, 139],\r\n darkolivegreen: [85, 107, 47],\r\n darkorange: [255, 140, 0],\r\n darkorchid: [153, 50, 204],\r\n darkred: [139, 0, 0],\r\n darksalmon: [233, 150, 122],\r\n darkseagreen: [143, 188, 143],\r\n darkslateblue: [72, 61, 139],\r\n darkslategray: [47, 79, 79],\r\n darkslategrey: [47, 79, 79],\r\n darkturquoise: [0, 206, 209],\r\n darkviolet: [148, 0, 211],\r\n deeppink: [255, 20, 147],\r\n deepskyblue: [0, 191, 255],\r\n dimgray: [105, 105, 105],\r\n dimgrey: [105, 105, 105],\r\n dodgerblue: [30, 144, 255],\r\n firebrick: [178, 34, 34],\r\n floralwhite: [255, 250, 240],\r\n forestgreen: [34, 139, 34],\r\n fuchsia: [255, 0, 255],\r\n gainsboro: [220, 220, 220],\r\n ghostwhite: [248, 248, 255],\r\n gold: [255, 215, 0],\r\n goldenrod: [218, 165, 32],\r\n gray: [128, 128, 128],\r\n grey: [128, 128, 128],\r\n green: [0, 128, 0],\r\n greenyellow: [173, 255, 47],\r\n honeydew: [240, 255, 240],\r\n hotpink: [255, 105, 180],\r\n indianred: [205, 92, 92],\r\n indigo: [75, 0, 130],\r\n ivory: [255, 255, 240],\r\n khaki: [240, 230, 140],\r\n lavender: [230, 230, 250],\r\n lavenderblush: [255, 240, 245],\r\n lawngreen: [124, 252, 0],\r\n lemonchiffon: [255, 250, 205],\r\n lightblue: [173, 216, 230],\r\n lightcoral: [240, 128, 128],\r\n lightcyan: [224, 255, 255],\r\n lightgoldenrodyellow: [250, 250, 210],\r\n lightgray: [211, 211, 211],\r\n lightgreen: [144, 238, 144],\r\n lightgrey: [211, 211, 211],\r\n lightpink: [255, 182, 193],\r\n lightsalmon: [255, 160, 122],\r\n lightseagreen: [32, 178, 170],\r\n lightskyblue: [135, 206, 250],\r\n lightslategray: [119, 136, 153],\r\n lightslategrey: [119, 136, 153],\r\n lightsteelblue: [176, 196, 222],\r\n lightyellow: [255, 255, 224],\r\n lime: [0, 255, 0],\r\n limegreen: [50, 205, 50],\r\n linen: [250, 240, 230],\r\n magenta: [255, 0, 255],\r\n maroon: [128, 0, 0],\r\n mediumaquamarine: [102, 205, 170],\r\n mediumblue: [0, 0, 205],\r\n mediumorchid: [186, 85, 211],\r\n mediumpurple: [147, 112, 219],\r\n mediumseagreen: [60, 179, 113],\r\n mediumslateblue: [123, 104, 238],\r\n mediumspringgreen: [0, 250, 154],\r\n mediumturquoise: [72, 209, 204],\r\n mediumvioletred: [199, 21, 133],\r\n midnightblue: [25, 25, 112],\r\n mintcream: [245, 255, 250],\r\n mistyrose: [255, 228, 225],\r\n moccasin: [255, 228, 181],\r\n navajowhite: [255, 222, 173],\r\n navy: [0, 0, 128],\r\n oldlace: [253, 245, 230],\r\n olive: [128, 128, 0],\r\n olivedrab: [107, 142, 35],\r\n orange: [255, 165, 0],\r\n orangered: [255, 69, 0],\r\n orchid: [218, 112, 214],\r\n palegoldenrod: [238, 232, 170],\r\n palegreen: [152, 251, 152],\r\n paleturquoise: [175, 238, 238],\r\n palevioletred: [219, 112, 147],\r\n papayawhip: [255, 239, 213],\r\n peachpuff: [255, 218, 185],\r\n peru: [205, 133, 63],\r\n pink: [255, 192, 203],\r\n plum: [221, 160, 221],\r\n powderblue: [176, 224, 230],\r\n purple: [128, 0, 128],\r\n red: [255, 0, 0],\r\n rosybrown: [188, 143, 143],\r\n royalblue: [65, 105, 225],\r\n saddlebrown: [139, 69, 19],\r\n salmon: [250, 128, 114],\r\n sandybrown: [244, 164, 96],\r\n seagreen: [46, 139, 87],\r\n seashell: [255, 245, 238],\r\n sienna: [160, 82, 45],\r\n silver: [192, 192, 192],\r\n skyblue: [135, 206, 235],\r\n slateblue: [106, 90, 205],\r\n slategray: [112, 128, 144],\r\n slategrey: [112, 128, 144],\r\n snow: [255, 250, 250],\r\n springgreen: [0, 255, 127],\r\n steelblue: [70, 130, 180],\r\n tan: [210, 180, 140],\r\n teal: [0, 128, 128],\r\n thistle: [216, 191, 216],\r\n tomato: [255, 99, 71],\r\n turquoise: [64, 224, 208],\r\n violet: [238, 130, 238],\r\n wheat: [245, 222, 179],\r\n white: [255, 255, 255],\r\n whitesmoke: [245, 245, 245],\r\n yellow: [255, 255, 0],\r\n yellowgreen: [154, 205, 50]\r\n};\r\n","import SVGPath from '../path';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\n// This constant is used to approximate a symmetrical arc using a cubic\r\n// Bezier curve.\r\nconst KAPPA = 4.0 * ((Math.sqrt(2) - 1.0) / 3.0);\r\nexport default {\r\n initVector() {\r\n this._ctm = [1, 0, 0, 1, 0, 0]; // current transformation matrix\r\n return (this._ctmStack = []);\r\n },\r\n\r\n save() {\r\n this._ctmStack.push(this._ctm.slice());\r\n // TODO: save/restore colorspace and styles so not setting it unnessesarily all the time?\r\n return this.addContent('q');\r\n },\r\n\r\n restore() {\r\n this._ctm = this._ctmStack.pop() || [1, 0, 0, 1, 0, 0];\r\n return this.addContent('Q');\r\n },\r\n\r\n closePath() {\r\n return this.addContent('h');\r\n },\r\n\r\n lineWidth(w) {\r\n return this.addContent(`${number(w)} w`);\r\n },\r\n\r\n _CAP_STYLES: {\r\n BUTT: 0,\r\n ROUND: 1,\r\n SQUARE: 2\r\n },\r\n\r\n lineCap(c) {\r\n if (typeof c === 'string') {\r\n c = this._CAP_STYLES[c.toUpperCase()];\r\n }\r\n return this.addContent(`${c} J`);\r\n },\r\n\r\n _JOIN_STYLES: {\r\n MITER: 0,\r\n ROUND: 1,\r\n BEVEL: 2\r\n },\r\n\r\n lineJoin(j) {\r\n if (typeof j === 'string') {\r\n j = this._JOIN_STYLES[j.toUpperCase()];\r\n }\r\n return this.addContent(`${j} j`);\r\n },\r\n\r\n miterLimit(m) {\r\n return this.addContent(`${number(m)} M`);\r\n },\r\n\r\n dash(length, options = {}) {\r\n const originalLength = length;\r\n if (!Array.isArray(length)) {\r\n length = [length, options.space || length];\r\n }\r\n\r\n const valid = length.every(x => Number.isFinite(x) && x > 0);\r\n if (!valid) {\r\n throw new Error(\r\n `dash(${JSON.stringify(originalLength)}, ${JSON.stringify(\r\n options\r\n )}) invalid, lengths must be numeric and greater than zero`\r\n );\r\n }\r\n\r\n length = length.map(number).join(' ');\r\n return this.addContent(`[${length}] ${number(options.phase || 0)} d`);\r\n },\r\n\r\n undash() {\r\n return this.addContent('[] 0 d');\r\n },\r\n\r\n moveTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} m`);\r\n },\r\n\r\n lineTo(x, y) {\r\n return this.addContent(`${number(x)} ${number(y)} l`);\r\n },\r\n\r\n bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) {\r\n return this.addContent(\r\n `${number(cp1x)} ${number(cp1y)} ${number(cp2x)} ${number(cp2y)} ${number(\r\n x\r\n )} ${number(y)} c`\r\n );\r\n },\r\n\r\n quadraticCurveTo(cpx, cpy, x, y) {\r\n return this.addContent(\r\n `${number(cpx)} ${number(cpy)} ${number(x)} ${number(y)} v`\r\n );\r\n },\r\n\r\n rect(x, y, w, h) {\r\n return this.addContent(\r\n `${number(x)} ${number(y)} ${number(w)} ${number(h)} re`\r\n );\r\n },\r\n\r\n roundedRect(x, y, w, h, r) {\r\n if (r == null) {\r\n r = 0;\r\n }\r\n r = Math.min(r, 0.5 * w, 0.5 * h);\r\n\r\n // amount to inset control points from corners (see `ellipse`)\r\n const c = r * (1.0 - KAPPA);\r\n\r\n this.moveTo(x + r, y);\r\n this.lineTo(x + w - r, y);\r\n this.bezierCurveTo(x + w - c, y, x + w, y + c, x + w, y + r);\r\n this.lineTo(x + w, y + h - r);\r\n this.bezierCurveTo(x + w, y + h - c, x + w - c, y + h, x + w - r, y + h);\r\n this.lineTo(x + r, y + h);\r\n this.bezierCurveTo(x + c, y + h, x, y + h - c, x, y + h - r);\r\n this.lineTo(x, y + r);\r\n this.bezierCurveTo(x, y + c, x + c, y, x + r, y);\r\n return this.closePath();\r\n },\r\n\r\n ellipse(x, y, r1, r2) {\r\n // based on http://stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/2173084#2173084\r\n if (r2 == null) {\r\n r2 = r1;\r\n }\r\n x -= r1;\r\n y -= r2;\r\n const ox = r1 * KAPPA;\r\n const oy = r2 * KAPPA;\r\n const xe = x + r1 * 2;\r\n const ye = y + r2 * 2;\r\n const xm = x + r1;\r\n const ym = y + r2;\r\n\r\n this.moveTo(x, ym);\r\n this.bezierCurveTo(x, ym - oy, xm - ox, y, xm, y);\r\n this.bezierCurveTo(xm + ox, y, xe, ym - oy, xe, ym);\r\n this.bezierCurveTo(xe, ym + oy, xm + ox, ye, xm, ye);\r\n this.bezierCurveTo(xm - ox, ye, x, ym + oy, x, ym);\r\n return this.closePath();\r\n },\r\n\r\n circle(x, y, radius) {\r\n return this.ellipse(x, y, radius);\r\n },\r\n\r\n arc(x, y, radius, startAngle, endAngle, anticlockwise) {\r\n if (anticlockwise == null) {\r\n anticlockwise = false;\r\n }\r\n const TWO_PI = 2.0 * Math.PI;\r\n const HALF_PI = 0.5 * Math.PI;\r\n\r\n let deltaAng = endAngle - startAngle;\r\n\r\n if (Math.abs(deltaAng) > TWO_PI) {\r\n // draw only full circle if more than that is specified\r\n deltaAng = TWO_PI;\r\n } else if (deltaAng !== 0 && anticlockwise !== deltaAng < 0) {\r\n // necessary to flip direction of rendering\r\n const dir = anticlockwise ? -1 : 1;\r\n deltaAng = dir * TWO_PI + deltaAng;\r\n }\r\n\r\n const numSegs = Math.ceil(Math.abs(deltaAng) / HALF_PI);\r\n const segAng = deltaAng / numSegs;\r\n const handleLen = (segAng / HALF_PI) * KAPPA * radius;\r\n let curAng = startAngle;\r\n\r\n // component distances between anchor point and control point\r\n let deltaCx = -Math.sin(curAng) * handleLen;\r\n let deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // anchor point\r\n let ax = x + Math.cos(curAng) * radius;\r\n let ay = y + Math.sin(curAng) * radius;\r\n\r\n // calculate and render segments\r\n this.moveTo(ax, ay);\r\n\r\n for (let segIdx = 0; segIdx < numSegs; segIdx++) {\r\n // starting control point\r\n const cp1x = ax + deltaCx;\r\n const cp1y = ay + deltaCy;\r\n\r\n // step angle\r\n curAng += segAng;\r\n\r\n // next anchor point\r\n ax = x + Math.cos(curAng) * radius;\r\n ay = y + Math.sin(curAng) * radius;\r\n\r\n // next control point delta\r\n deltaCx = -Math.sin(curAng) * handleLen;\r\n deltaCy = Math.cos(curAng) * handleLen;\r\n\r\n // ending control point\r\n const cp2x = ax - deltaCx;\r\n const cp2y = ay - deltaCy;\r\n\r\n // render segment\r\n this.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, ax, ay);\r\n }\r\n\r\n return this;\r\n },\r\n\r\n polygon(...points) {\r\n this.moveTo(...(points.shift() || []));\r\n for (let point of points) {\r\n this.lineTo(...(point || []));\r\n }\r\n return this.closePath();\r\n },\r\n\r\n path(path) {\r\n SVGPath.apply(this, path);\r\n return this;\r\n },\r\n\r\n _windingRule(rule) {\r\n if (/even-?odd/.test(rule)) {\r\n return '*';\r\n }\r\n\r\n return '';\r\n },\r\n\r\n fill(color, rule) {\r\n if (/(even-?odd)|(non-?zero)/.test(color)) {\r\n rule = color;\r\n color = null;\r\n }\r\n\r\n if (color) {\r\n this.fillColor(color);\r\n }\r\n return this.addContent(`f${this._windingRule(rule)}`);\r\n },\r\n\r\n stroke(color) {\r\n if (color) {\r\n this.strokeColor(color);\r\n }\r\n return this.addContent('S');\r\n },\r\n\r\n fillAndStroke(fillColor, strokeColor, rule) {\r\n if (strokeColor == null) {\r\n strokeColor = fillColor;\r\n }\r\n const isFillRule = /(even-?odd)|(non-?zero)/;\r\n if (isFillRule.test(fillColor)) {\r\n rule = fillColor;\r\n fillColor = null;\r\n }\r\n\r\n if (isFillRule.test(strokeColor)) {\r\n rule = strokeColor;\r\n strokeColor = fillColor;\r\n }\r\n\r\n if (fillColor) {\r\n this.fillColor(fillColor);\r\n this.strokeColor(strokeColor);\r\n }\r\n\r\n return this.addContent(`B${this._windingRule(rule)}`);\r\n },\r\n\r\n clip(rule) {\r\n return this.addContent(`W${this._windingRule(rule)} n`);\r\n },\r\n\r\n transform(m11, m12, m21, m22, dx, dy) {\r\n // keep track of the current transformation matrix\r\n const m = this._ctm;\r\n const [m0, m1, m2, m3, m4, m5] = m;\r\n m[0] = m0 * m11 + m2 * m12;\r\n m[1] = m1 * m11 + m3 * m12;\r\n m[2] = m0 * m21 + m2 * m22;\r\n m[3] = m1 * m21 + m3 * m22;\r\n m[4] = m0 * dx + m2 * dy + m4;\r\n m[5] = m1 * dx + m3 * dy + m5;\r\n\r\n const values = [m11, m12, m21, m22, dx, dy].map(v => number(v)).join(' ');\r\n return this.addContent(`${values} cm`);\r\n },\r\n\r\n translate(x, y) {\r\n return this.transform(1, 0, 0, 1, x, y);\r\n },\r\n\r\n rotate(angle, options = {}) {\r\n let y;\r\n const rad = (angle * Math.PI) / 180;\r\n const cos = Math.cos(rad);\r\n const sin = Math.sin(rad);\r\n let x = (y = 0);\r\n\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n const x1 = x * cos - y * sin;\r\n const y1 = x * sin + y * cos;\r\n x -= x1;\r\n y -= y1;\r\n }\r\n\r\n return this.transform(cos, sin, -sin, cos, x, y);\r\n },\r\n\r\n scale(xFactor, yFactor, options = {}) {\r\n let y;\r\n if (yFactor == null) {\r\n yFactor = xFactor;\r\n }\r\n if (typeof yFactor === 'object') {\r\n options = yFactor;\r\n yFactor = xFactor;\r\n }\r\n\r\n let x = (y = 0);\r\n if (options.origin != null) {\r\n [x, y] = options.origin;\r\n x -= xFactor * x;\r\n y -= yFactor * y;\r\n }\r\n\r\n return this.transform(xFactor, 0, 0, yFactor, x, y);\r\n }\r\n};\r\n","import fs from 'fs';\r\n\r\nconst WIN_ANSI_MAP = {\r\n 402: 131,\r\n 8211: 150,\r\n 8212: 151,\r\n 8216: 145,\r\n 8217: 146,\r\n 8218: 130,\r\n 8220: 147,\r\n 8221: 148,\r\n 8222: 132,\r\n 8224: 134,\r\n 8225: 135,\r\n 8226: 149,\r\n 8230: 133,\r\n 8364: 128,\r\n 8240: 137,\r\n 8249: 139,\r\n 8250: 155,\r\n 710: 136,\r\n 8482: 153,\r\n 338: 140,\r\n 339: 156,\r\n 732: 152,\r\n 352: 138,\r\n 353: 154,\r\n 376: 159,\r\n 381: 142,\r\n 382: 158\r\n};\r\n\r\nconst characters = `\\\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n.notdef .notdef .notdef .notdef\r\n \r\nspace exclam quotedbl numbersign\r\ndollar percent ampersand quotesingle\r\nparenleft parenright asterisk plus\r\ncomma hyphen period slash\r\nzero one two three\r\nfour five six seven\r\neight nine colon semicolon\r\nless equal greater question\r\n \r\nat A B C\r\nD E F G\r\nH I J K\r\nL M N O\r\nP Q R S\r\nT U V W\r\nX Y Z bracketleft\r\nbackslash bracketright asciicircum underscore\r\n \r\ngrave a b c\r\nd e f g\r\nh i j k\r\nl m n o\r\np q r s\r\nt u v w\r\nx y z braceleft\r\nbar braceright asciitilde .notdef\r\n \r\nEuro .notdef quotesinglbase florin\r\nquotedblbase ellipsis dagger daggerdbl\r\ncircumflex perthousand Scaron guilsinglleft\r\nOE .notdef Zcaron .notdef\r\n.notdef quoteleft quoteright quotedblleft\r\nquotedblright bullet endash emdash\r\ntilde trademark scaron guilsinglright\r\noe .notdef zcaron ydieresis\r\n \r\nspace exclamdown cent sterling\r\ncurrency yen brokenbar section\r\ndieresis copyright ordfeminine guillemotleft\r\nlogicalnot hyphen registered macron\r\ndegree plusminus twosuperior threesuperior\r\nacute mu paragraph periodcentered\r\ncedilla onesuperior ordmasculine guillemotright\r\nonequarter onehalf threequarters questiondown\r\n \r\nAgrave Aacute Acircumflex Atilde\r\nAdieresis Aring AE Ccedilla\r\nEgrave Eacute Ecircumflex Edieresis\r\nIgrave Iacute Icircumflex Idieresis\r\nEth Ntilde Ograve Oacute\r\nOcircumflex Otilde Odieresis multiply\r\nOslash Ugrave Uacute Ucircumflex\r\nUdieresis Yacute Thorn germandbls\r\n \r\nagrave aacute acircumflex atilde\r\nadieresis aring ae ccedilla\r\negrave eacute ecircumflex edieresis\r\nigrave iacute icircumflex idieresis\r\neth ntilde ograve oacute\r\nocircumflex otilde odieresis divide\r\noslash ugrave uacute ucircumflex\r\nudieresis yacute thorn ydieresis\\\r\n`.split(/\\s+/);\r\n\r\nclass AFMFont {\r\n static open(filename) {\r\n return new AFMFont(fs.readFileSync(filename, 'utf8'));\r\n }\r\n\r\n constructor(contents) {\r\n this.contents = contents;\r\n this.attributes = {};\r\n this.glyphWidths = {};\r\n this.boundingBoxes = {};\r\n this.kernPairs = {};\r\n\r\n this.parse();\r\n // todo: remove charWidths since appears to not be used\r\n this.charWidths = new Array(256);\r\n for (let char = 0; char <= 255; char++) {\r\n this.charWidths[char] = this.glyphWidths[characters[char]];\r\n }\r\n\r\n this.bbox = this.attributes['FontBBox'].split(/\\s+/).map(e => +e);\r\n this.ascender = +(this.attributes['Ascender'] || 0);\r\n this.descender = +(this.attributes['Descender'] || 0);\r\n this.xHeight = +(this.attributes['XHeight'] || 0);\r\n this.capHeight = +(this.attributes['CapHeight'] || 0);\r\n this.lineGap =\r\n this.bbox[3] - this.bbox[1] - (this.ascender - this.descender);\r\n }\r\n\r\n parse() {\r\n let section = '';\r\n for (let line of this.contents.split('\\n')) {\r\n var match;\r\n var a;\r\n if ((match = line.match(/^Start(\\w+)/))) {\r\n section = match[1];\r\n continue;\r\n } else if ((match = line.match(/^End(\\w+)/))) {\r\n section = '';\r\n continue;\r\n }\r\n\r\n switch (section) {\r\n case 'FontMetrics':\r\n match = line.match(/(^\\w+)\\s+(.*)/);\r\n var key = match[1];\r\n var value = match[2];\r\n\r\n if ((a = this.attributes[key])) {\r\n if (!Array.isArray(a)) {\r\n a = this.attributes[key] = [a];\r\n }\r\n a.push(value);\r\n } else {\r\n this.attributes[key] = value;\r\n }\r\n break;\r\n\r\n case 'CharMetrics':\r\n if (!/^CH?\\s/.test(line)) {\r\n continue;\r\n }\r\n var name = line.match(/\\bN\\s+(\\.?\\w+)\\s*;/)[1];\r\n this.glyphWidths[name] = +line.match(/\\bWX\\s+(\\d+)\\s*;/)[1];\r\n break;\r\n\r\n case 'KernPairs':\r\n match = line.match(/^KPX\\s+(\\.?\\w+)\\s+(\\.?\\w+)\\s+(-?\\d+)/);\r\n if (match) {\r\n this.kernPairs[match[1] + '\\0' + match[2]] = parseInt(match[3]);\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n encodeText(text) {\r\n const res = [];\r\n for (let i = 0, len = text.length; i < len; i++) {\r\n let char = text.charCodeAt(i);\r\n char = WIN_ANSI_MAP[char] || char;\r\n res.push(char.toString(16));\r\n }\r\n\r\n return res;\r\n }\r\n\r\n glyphsForString(string) {\r\n const glyphs = [];\r\n\r\n for (let i = 0, len = string.length; i < len; i++) {\r\n const charCode = string.charCodeAt(i);\r\n glyphs.push(this.characterToGlyph(charCode));\r\n }\r\n\r\n return glyphs;\r\n }\r\n\r\n characterToGlyph(character) {\r\n return characters[WIN_ANSI_MAP[character] || character] || '.notdef';\r\n }\r\n\r\n widthOfGlyph(glyph) {\r\n return this.glyphWidths[glyph] || 0;\r\n }\r\n\r\n getKernPair(left, right) {\r\n return this.kernPairs[left + '\\0' + right] || 0;\r\n }\r\n\r\n advancesForGlyphs(glyphs) {\r\n const advances = [];\r\n\r\n for (let index = 0; index < glyphs.length; index++) {\r\n const left = glyphs[index];\r\n const right = glyphs[index + 1];\r\n advances.push(this.widthOfGlyph(left) + this.getKernPair(left, right));\r\n }\r\n\r\n return advances;\r\n }\r\n}\r\n\r\nexport default AFMFont;\r\n","class PDFFont {\r\n constructor() {}\r\n\r\n encode() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n widthOfString() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n ref() {\r\n return this.dictionary != null\r\n ? this.dictionary\r\n : (this.dictionary = this.document.ref());\r\n }\r\n\r\n finalize() {\r\n if (this.embedded || this.dictionary == null) {\r\n return;\r\n }\r\n\r\n this.embed();\r\n return (this.embedded = true);\r\n }\r\n\r\n embed() {\r\n throw new Error('Must be implemented by subclasses');\r\n }\r\n\r\n lineHeight(size, includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n const gap = includeGap ? this.lineGap : 0;\r\n return ((this.ascender + gap - this.descender) / 1000) * size;\r\n }\r\n}\r\n\r\nexport default PDFFont;\r\n","import AFMFont from './afm';\r\nimport PDFFont from '../font';\r\nimport fs from 'fs';\r\n\r\n// This insanity is so bundlers can inline the font files\r\nconst STANDARD_FONTS = {\r\n Courier() {\r\n return fs.readFileSync(__dirname + '/data/Courier.afm', 'utf8');\r\n },\r\n 'Courier-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Bold.afm', 'utf8');\r\n },\r\n 'Courier-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-Oblique.afm', 'utf8');\r\n },\r\n 'Courier-BoldOblique'() {\r\n return fs.readFileSync(__dirname + '/data/Courier-BoldOblique.afm', 'utf8');\r\n },\r\n Helvetica() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica.afm', 'utf8');\r\n },\r\n 'Helvetica-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Bold.afm', 'utf8');\r\n },\r\n 'Helvetica-Oblique'() {\r\n return fs.readFileSync(__dirname + '/data/Helvetica-Oblique.afm', 'utf8');\r\n },\r\n 'Helvetica-BoldOblique'() {\r\n return fs.readFileSync(\r\n __dirname + '/data/Helvetica-BoldOblique.afm',\r\n 'utf8'\r\n );\r\n },\r\n 'Times-Roman'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Roman.afm', 'utf8');\r\n },\r\n 'Times-Bold'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Bold.afm', 'utf8');\r\n },\r\n 'Times-Italic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-Italic.afm', 'utf8');\r\n },\r\n 'Times-BoldItalic'() {\r\n return fs.readFileSync(__dirname + '/data/Times-BoldItalic.afm', 'utf8');\r\n },\r\n Symbol() {\r\n return fs.readFileSync(__dirname + '/data/Symbol.afm', 'utf8');\r\n },\r\n ZapfDingbats() {\r\n return fs.readFileSync(__dirname + '/data/ZapfDingbats.afm', 'utf8');\r\n }\r\n};\r\n\r\nclass StandardFont extends PDFFont {\r\n constructor(document, name, id) {\r\n super();\r\n this.document = document;\r\n this.name = name;\r\n this.id = id;\r\n this.font = new AFMFont(STANDARD_FONTS[this.name]());\r\n ({\r\n ascender: this.ascender,\r\n descender: this.descender,\r\n bbox: this.bbox,\r\n lineGap: this.lineGap,\r\n xHeight: this.xHeight,\r\n capHeight: this.capHeight\r\n } = this.font);\r\n }\r\n\r\n embed() {\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n BaseFont: this.name,\r\n Subtype: 'Type1',\r\n Encoding: 'WinAnsiEncoding'\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n encode(text) {\r\n const encoded = this.font.encodeText(text);\r\n const glyphs = this.font.glyphsForString(`${text}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n const positions = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n positions.push({\r\n xAdvance: advances[i],\r\n yAdvance: 0,\r\n xOffset: 0,\r\n yOffset: 0,\r\n advanceWidth: this.font.widthOfGlyph(glyph)\r\n });\r\n }\r\n\r\n return [encoded, positions];\r\n }\r\n\r\n widthOfString(string, size) {\r\n const glyphs = this.font.glyphsForString(`${string}`);\r\n const advances = this.font.advancesForGlyphs(glyphs);\r\n\r\n let width = 0;\r\n for (let advance of advances) {\r\n width += advance;\r\n }\r\n\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n static isStandardFont(name) {\r\n return name in STANDARD_FONTS;\r\n }\r\n}\r\n\r\nexport default StandardFont;\r\n","import PDFFont from '../font';\r\n\r\nconst toHex = function(num) {\r\n return `0000${num.toString(16)}`.slice(-4);\r\n};\r\n\r\nclass EmbeddedFont extends PDFFont {\r\n constructor(document, font, id) {\r\n super();\r\n this.document = document;\r\n this.font = font;\r\n this.id = id;\r\n this.subset = this.font.createSubset();\r\n this.unicode = [[0]];\r\n this.widths = [this.font.getGlyph(0).advanceWidth];\r\n\r\n this.name = this.font.postscriptName;\r\n this.scale = 1000 / this.font.unitsPerEm;\r\n this.ascender = this.font.ascent * this.scale;\r\n this.descender = this.font.descent * this.scale;\r\n this.xHeight = this.font.xHeight * this.scale;\r\n this.capHeight = this.font.capHeight * this.scale;\r\n this.lineGap = this.font.lineGap * this.scale;\r\n this.bbox = this.font.bbox;\r\n\r\n if (document.options.fontLayoutCache !== false) {\r\n this.layoutCache = Object.create(null);\r\n }\r\n }\r\n\r\n layoutRun(text, features) {\r\n const run = this.font.layout(text, features);\r\n\r\n // Normalize position values\r\n for (let i = 0; i < run.positions.length; i++) {\r\n const position = run.positions[i];\r\n for (let key in position) {\r\n position[key] *= this.scale;\r\n }\r\n\r\n position.advanceWidth = run.glyphs[i].advanceWidth * this.scale;\r\n }\r\n\r\n return run;\r\n }\r\n\r\n layoutCached(text) {\r\n if (!this.layoutCache) {\r\n return this.layoutRun(text);\r\n }\r\n let cached;\r\n if ((cached = this.layoutCache[text])) {\r\n return cached;\r\n }\r\n\r\n const run = this.layoutRun(text);\r\n this.layoutCache[text] = run;\r\n return run;\r\n }\r\n\r\n layout(text, features, onlyWidth) {\r\n // Skip the cache if any user defined features are applied\r\n if (features) {\r\n return this.layoutRun(text, features);\r\n }\r\n\r\n let glyphs = onlyWidth ? null : [];\r\n let positions = onlyWidth ? null : [];\r\n let advanceWidth = 0;\r\n\r\n // Split the string by words to increase cache efficiency.\r\n // For this purpose, spaces and tabs are a good enough delimeter.\r\n let last = 0;\r\n let index = 0;\r\n while (index <= text.length) {\r\n var needle;\r\n if (\r\n (index === text.length && last < index) ||\r\n ((needle = text.charAt(index)), [' ', '\\t'].includes(needle))\r\n ) {\r\n const run = this.layoutCached(text.slice(last, ++index));\r\n if (!onlyWidth) {\r\n glyphs = glyphs.concat(run.glyphs);\r\n positions = positions.concat(run.positions);\r\n }\r\n\r\n advanceWidth += run.advanceWidth;\r\n last = index;\r\n } else {\r\n index++;\r\n }\r\n }\r\n\r\n return { glyphs, positions, advanceWidth };\r\n }\r\n\r\n encode(text, features) {\r\n const { glyphs, positions } = this.layout(text, features);\r\n\r\n const res = [];\r\n for (let i = 0; i < glyphs.length; i++) {\r\n const glyph = glyphs[i];\r\n const gid = this.subset.includeGlyph(glyph.id);\r\n res.push(`0000${gid.toString(16)}`.slice(-4));\r\n\r\n if (this.widths[gid] == null) {\r\n this.widths[gid] = glyph.advanceWidth * this.scale;\r\n }\r\n if (this.unicode[gid] == null) {\r\n this.unicode[gid] = glyph.codePoints;\r\n }\r\n }\r\n\r\n return [res, positions];\r\n }\r\n\r\n widthOfString(string, size, features) {\r\n const width = this.layout(string, features, true).advanceWidth;\r\n const scale = size / 1000;\r\n return width * scale;\r\n }\r\n\r\n embed() {\r\n const isCFF = this.subset.cff != null;\r\n const fontFile = this.document.ref();\r\n\r\n if (isCFF) {\r\n fontFile.data.Subtype = 'CIDFontType0C';\r\n }\r\n\r\n this.subset\r\n .encodeStream()\r\n .on('data', data => fontFile.write(data))\r\n .on('end', () => fontFile.end());\r\n\r\n const familyClass =\r\n ((this.font['OS/2'] != null\r\n ? this.font['OS/2'].sFamilyClass\r\n : undefined) || 0) >> 8;\r\n let flags = 0;\r\n if (this.font.post.isFixedPitch) {\r\n flags |= 1 << 0;\r\n }\r\n if (1 <= familyClass && familyClass <= 7) {\r\n flags |= 1 << 1;\r\n }\r\n flags |= 1 << 2; // assume the font uses non-latin characters\r\n if (familyClass === 10) {\r\n flags |= 1 << 3;\r\n }\r\n if (this.font.head.macStyle.italic) {\r\n flags |= 1 << 6;\r\n }\r\n\r\n // generate a tag (6 uppercase letters. 17 is the char code offset from '0' to 'A'. 73 will map to 'Z')\r\n const tag = [1, 2, 3, 4, 5, 6]\r\n .map(i => String.fromCharCode((this.id.charCodeAt(i) || 73) + 17))\r\n .join('');\r\n const name = tag + '+' + this.font.postscriptName;\r\n\r\n const { bbox } = this.font;\r\n const descriptor = this.document.ref({\r\n Type: 'FontDescriptor',\r\n FontName: name,\r\n Flags: flags,\r\n FontBBox: [\r\n bbox.minX * this.scale,\r\n bbox.minY * this.scale,\r\n bbox.maxX * this.scale,\r\n bbox.maxY * this.scale\r\n ],\r\n ItalicAngle: this.font.italicAngle,\r\n Ascent: this.ascender,\r\n Descent: this.descender,\r\n CapHeight: (this.font.capHeight || this.font.ascent) * this.scale,\r\n XHeight: (this.font.xHeight || 0) * this.scale,\r\n StemV: 0\r\n }); // not sure how to calculate this\r\n\r\n if (isCFF) {\r\n descriptor.data.FontFile3 = fontFile;\r\n } else {\r\n descriptor.data.FontFile2 = fontFile;\r\n }\r\n\r\n if (this.document.subset) {\r\n const CIDSet = Buffer.from('FFFFFFFFC0', 'hex');\r\n const CIDSetRef = this.document.ref();\r\n CIDSetRef.write(CIDSet);\r\n CIDSetRef.end();\r\n\r\n descriptor.data.CIDSet = CIDSetRef;\r\n }\r\n\r\n descriptor.end();\r\n\r\n const descendantFontData = {\r\n Type: 'Font',\r\n Subtype: 'CIDFontType0',\r\n BaseFont: name,\r\n CIDSystemInfo: {\r\n Registry: new String('Adobe'),\r\n Ordering: new String('Identity'),\r\n Supplement: 0\r\n },\r\n FontDescriptor: descriptor,\r\n W: [0, this.widths]\r\n };\r\n\r\n if (!isCFF) {\r\n descendantFontData.Subtype = 'CIDFontType2';\r\n descendantFontData.CIDToGIDMap = 'Identity';\r\n }\r\n\r\n const descendantFont = this.document.ref(descendantFontData);\r\n\r\n descendantFont.end();\r\n\r\n this.dictionary.data = {\r\n Type: 'Font',\r\n Subtype: 'Type0',\r\n BaseFont: name,\r\n Encoding: 'Identity-H',\r\n DescendantFonts: [descendantFont],\r\n ToUnicode: this.toUnicodeCmap()\r\n };\r\n\r\n return this.dictionary.end();\r\n }\r\n\r\n // Maps the glyph ids encoded in the PDF back to unicode strings\r\n // Because of ligature substitutions and the like, there may be one or more\r\n // unicode characters represented by each glyph.\r\n toUnicodeCmap() {\r\n const cmap = this.document.ref();\r\n\r\n const entries = [];\r\n for (let codePoints of this.unicode) {\r\n const encoded = [];\r\n\r\n // encode codePoints to utf16\r\n for (let value of codePoints) {\r\n if (value > 0xffff) {\r\n value -= 0x10000;\r\n encoded.push(toHex(((value >>> 10) & 0x3ff) | 0xd800));\r\n value = 0xdc00 | (value & 0x3ff);\r\n }\r\n\r\n encoded.push(toHex(value));\r\n }\r\n\r\n entries.push(`<${encoded.join(' ')}>`);\r\n }\r\n\r\n cmap.end(`\\\r\n/CIDInit /ProcSet findresource begin\r\n12 dict begin\r\nbegincmap\r\n/CIDSystemInfo <<\r\n /Registry (Adobe)\r\n /Ordering (UCS)\r\n /Supplement 0\r\n>> def\r\n/CMapName /Adobe-Identity-UCS def\r\n/CMapType 2 def\r\n1 begincodespacerange\r\n<0000>\r\nendcodespacerange\r\n1 beginbfrange\r\n<0000> <${toHex(entries.length - 1)}> [${entries.join(' ')}]\r\nendbfrange\r\nendcmap\r\nCMapName currentdict /CMap defineresource pop\r\nend\r\nend\\\r\n`);\r\n\r\n return cmap;\r\n }\r\n}\r\n\r\nexport default EmbeddedFont;\r\n","import fs from 'fs';\r\nimport fontkit from '@foliojs-fork/fontkit';\r\nimport StandardFont from './font/standard';\r\nimport EmbeddedFont from './font/embedded';\r\n\r\nclass PDFFontFactory {\r\n static open(document, src, family, id) {\r\n let font;\r\n if (typeof src === 'string') {\r\n if (StandardFont.isStandardFont(src)) {\r\n return new StandardFont(document, src, id);\r\n }\r\n\r\n src = fs.readFileSync(src);\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n font = fontkit.create(src, family);\r\n } else if (src instanceof Uint8Array) {\r\n font = fontkit.create(Buffer.from(src), family);\r\n } else if (src instanceof ArrayBuffer) {\r\n font = fontkit.create(Buffer.from(new Uint8Array(src)), family);\r\n }\r\n\r\n if (font == null) {\r\n throw new Error('Not a supported font format or standard PDF font.');\r\n }\r\n\r\n return new EmbeddedFont(document, font, id);\r\n }\r\n}\r\n\r\nexport default PDFFontFactory;\r\n","import PDFFontFactory from '../font_factory';\r\n\r\nexport default {\r\n initFonts(defaultFont = 'Helvetica') {\r\n // Lookup table for embedded fonts\r\n this._fontFamilies = {};\r\n this._fontCount = 0;\r\n\r\n // Font state\r\n this._fontSize = 12;\r\n this._font = null;\r\n\r\n this._registeredFonts = {};\r\n\r\n // Set the default font\r\n if (defaultFont) {\r\n this.font(defaultFont);\r\n }\r\n },\r\n\r\n font(src, family, size) {\r\n let cacheKey, font;\r\n if (typeof family === 'number') {\r\n size = family;\r\n family = null;\r\n }\r\n\r\n // check registered fonts if src is a string\r\n if (typeof src === 'string' && this._registeredFonts[src]) {\r\n cacheKey = src;\r\n ({ src, family } = this._registeredFonts[src]);\r\n } else {\r\n cacheKey = family || src;\r\n if (typeof cacheKey !== 'string') {\r\n cacheKey = null;\r\n }\r\n }\r\n\r\n if (size != null) {\r\n this.fontSize(size);\r\n }\r\n\r\n // fast path: check if the font is already in the PDF\r\n if ((font = this._fontFamilies[cacheKey])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // load the font\r\n const id = `F${++this._fontCount}`;\r\n this._font = PDFFontFactory.open(this, src, family, id);\r\n\r\n // check for existing font familes with the same name already in the PDF\r\n // useful if the font was passed as a buffer\r\n if ((font = this._fontFamilies[this._font.name])) {\r\n this._font = font;\r\n return this;\r\n }\r\n\r\n // save the font for reuse later\r\n if (cacheKey) {\r\n this._fontFamilies[cacheKey] = this._font;\r\n }\r\n\r\n if (this._font.name) {\r\n this._fontFamilies[this._font.name] = this._font;\r\n }\r\n\r\n return this;\r\n },\r\n\r\n fontSize(_fontSize) {\r\n this._fontSize = _fontSize;\r\n return this;\r\n },\r\n\r\n currentLineHeight(includeGap) {\r\n if (includeGap == null) {\r\n includeGap = false;\r\n }\r\n return this._font.lineHeight(this._fontSize, includeGap);\r\n },\r\n\r\n registerFont(name, src, family) {\r\n this._registeredFonts[name] = {\r\n src,\r\n family\r\n };\r\n\r\n return this;\r\n }\r\n};\r\n","import { EventEmitter } from 'events';\r\nimport LineBreaker from '@foliojs-fork/linebreak';\r\n\r\nclass LineWrapper extends EventEmitter {\r\n constructor(document, options) {\r\n super();\r\n this.document = document;\r\n this.indent = options.indent || 0;\r\n this.characterSpacing = options.characterSpacing || 0;\r\n this.wordSpacing = options.wordSpacing === 0;\r\n this.columns = options.columns || 1;\r\n this.columnGap = options.columnGap != null ? options.columnGap : 18; // 1/4 inch\r\n this.lineWidth =\r\n (options.width - this.columnGap * (this.columns - 1)) / this.columns;\r\n this.spaceLeft = this.lineWidth;\r\n this.startX = this.document.x;\r\n this.startY = this.document.y;\r\n this.column = 1;\r\n this.ellipsis = options.ellipsis;\r\n this.continuedX = 0;\r\n this.features = options.features;\r\n\r\n // calculate the maximum Y position the text can appear at\r\n if (options.height != null) {\r\n this.height = options.height;\r\n this.maxY = this.startY + options.height;\r\n } else {\r\n this.maxY = this.document.page.maxY();\r\n }\r\n\r\n // handle paragraph indents\r\n this.on('firstLine', options => {\r\n // if this is the first line of the text segment, and\r\n // we're continuing where we left off, indent that much\r\n // otherwise use the user specified indent option\r\n const indent = this.continuedX || this.indent;\r\n this.document.x += indent;\r\n this.lineWidth -= indent;\r\n\r\n return this.once('line', () => {\r\n this.document.x -= indent;\r\n this.lineWidth += indent;\r\n if (options.continued && !this.continuedX) {\r\n this.continuedX = this.indent;\r\n }\r\n if (!options.continued) {\r\n return (this.continuedX = 0);\r\n }\r\n });\r\n });\r\n\r\n // handle left aligning last lines of paragraphs\r\n this.on('lastLine', options => {\r\n const { align } = options;\r\n if (align === 'justify') {\r\n options.align = 'left';\r\n }\r\n this.lastLine = true;\r\n\r\n return this.once('line', () => {\r\n this.document.y += options.paragraphGap || 0;\r\n options.align = align;\r\n return (this.lastLine = false);\r\n });\r\n });\r\n }\r\n\r\n wordWidth(word) {\r\n return (\r\n this.document.widthOfString(word, this) +\r\n this.characterSpacing +\r\n this.wordSpacing\r\n );\r\n }\r\n\r\n eachWord(text, fn) {\r\n // setup a unicode line breaker\r\n let bk;\r\n const breaker = new LineBreaker(text);\r\n let last = null;\r\n const wordWidths = Object.create(null);\r\n\r\n while ((bk = breaker.nextBreak())) {\r\n var shouldContinue;\r\n let word = text.slice(\r\n (last != null ? last.position : undefined) || 0,\r\n bk.position\r\n );\r\n let w =\r\n wordWidths[word] != null\r\n ? wordWidths[word]\r\n : (wordWidths[word] = this.wordWidth(word));\r\n\r\n // if the word is longer than the whole line, chop it up\r\n // TODO: break by grapheme clusters, not JS string characters\r\n if (w > this.lineWidth + this.continuedX) {\r\n // make some fake break objects\r\n let lbk = last;\r\n const fbk = {};\r\n\r\n while (word.length) {\r\n // fit as much of the word as possible into the space we have\r\n var l, mightGrow;\r\n if (w > this.spaceLeft) {\r\n // start our check at the end of our available space - this method is faster than a loop of each character and it resolves\r\n // an issue with long loops when processing massive words, such as a huge number of spaces\r\n l = Math.ceil(this.spaceLeft / (w / word.length));\r\n w = this.wordWidth(word.slice(0, l));\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n } else {\r\n l = word.length;\r\n }\r\n let mustShrink = w > this.spaceLeft && l > 0;\r\n // shrink or grow word as necessary after our near-guess above\r\n while (mustShrink || mightGrow) {\r\n if (mustShrink) {\r\n w = this.wordWidth(word.slice(0, --l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n } else {\r\n w = this.wordWidth(word.slice(0, ++l));\r\n mustShrink = w > this.spaceLeft && l > 0;\r\n mightGrow = w <= this.spaceLeft && l < word.length;\r\n }\r\n }\r\n\r\n // check for the edge case where a single character cannot fit into a line.\r\n if (l === 0 && this.spaceLeft === this.lineWidth) {\r\n l = 1;\r\n }\r\n\r\n // send a required break unless this is the last piece and a linebreak is not specified\r\n fbk.required = bk.required || l < word.length;\r\n shouldContinue = fn(word.slice(0, l), w, fbk, lbk);\r\n lbk = { required: false };\r\n\r\n // get the remaining piece of the word\r\n word = word.slice(l);\r\n w = this.wordWidth(word);\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n }\r\n } else {\r\n // otherwise just emit the break as it was given to us\r\n shouldContinue = fn(word, w, bk, last);\r\n }\r\n\r\n if (shouldContinue === false) {\r\n break;\r\n }\r\n last = bk;\r\n }\r\n }\r\n\r\n wrap(text, options) {\r\n // override options from previous continued fragments\r\n if (options.indent != null) {\r\n this.indent = options.indent;\r\n }\r\n if (options.characterSpacing != null) {\r\n this.characterSpacing = options.characterSpacing;\r\n }\r\n if (options.wordSpacing != null) {\r\n this.wordSpacing = options.wordSpacing;\r\n }\r\n if (options.ellipsis != null) {\r\n this.ellipsis = options.ellipsis;\r\n }\r\n\r\n // make sure we're actually on the page\r\n // and that the first line of is never by\r\n // itself at the bottom of a page (orphans)\r\n const nextY = this.document.y + this.document.currentLineHeight(true);\r\n if (this.document.y > this.maxY || nextY > this.maxY) {\r\n this.nextSection();\r\n }\r\n\r\n let buffer = '';\r\n let textWidth = 0;\r\n let wc = 0;\r\n let lc = 0;\r\n\r\n let { y } = this.document; // used to reset Y pos if options.continued (below)\r\n const emitLine = () => {\r\n options.textWidth = textWidth + this.wordSpacing * (wc - 1);\r\n options.wordCount = wc;\r\n options.lineWidth = this.lineWidth;\r\n ({ y } = this.document);\r\n this.emit('line', buffer, options, this);\r\n return lc++;\r\n };\r\n\r\n this.emit('sectionStart', options, this);\r\n\r\n this.eachWord(text, (word, w, bk, last) => {\r\n if (last == null || last.required) {\r\n this.emit('firstLine', options, this);\r\n this.spaceLeft = this.lineWidth;\r\n }\r\n\r\n if (w <= this.spaceLeft) {\r\n buffer += word;\r\n textWidth += w;\r\n wc++;\r\n }\r\n\r\n if (bk.required || w > this.spaceLeft) {\r\n // if the user specified a max height and an ellipsis, and is about to pass the\r\n // max height and max columns after the next line, append the ellipsis\r\n const lh = this.document.currentLineHeight(true);\r\n if (\r\n this.height != null &&\r\n this.ellipsis &&\r\n this.document.y + lh * 2 > this.maxY &&\r\n this.column >= this.columns\r\n ) {\r\n if (this.ellipsis === true) {\r\n this.ellipsis = '…';\r\n } // map default ellipsis character\r\n buffer = buffer.replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n\r\n // remove characters from the buffer until the ellipsis fits\r\n // to avoid infinite loop need to stop while-loop if buffer is empty string\r\n while (buffer && textWidth > this.lineWidth) {\r\n buffer = buffer.slice(0, -1).replace(/\\s+$/, '');\r\n textWidth = this.wordWidth(buffer + this.ellipsis);\r\n }\r\n // need to add ellipsis only if there is enough space for it\r\n if (textWidth <= this.lineWidth) {\r\n buffer = buffer + this.ellipsis;\r\n }\r\n\r\n textWidth = this.wordWidth(buffer);\r\n }\r\n\r\n if (bk.required) {\r\n if (w > this.spaceLeft) {\r\n emitLine();\r\n buffer = word;\r\n textWidth = w;\r\n wc = 1;\r\n }\r\n\r\n this.emit('lastLine', options, this);\r\n }\r\n\r\n emitLine();\r\n\r\n // if we've reached the edge of the page,\r\n // continue on a new page or column\r\n if (this.document.y + lh > this.maxY) {\r\n const shouldContinue = this.nextSection();\r\n\r\n // stop if we reached the maximum height\r\n if (!shouldContinue) {\r\n wc = 0;\r\n buffer = '';\r\n return false;\r\n }\r\n }\r\n\r\n // reset the space left and buffer\r\n if (bk.required) {\r\n this.spaceLeft = this.lineWidth;\r\n buffer = '';\r\n textWidth = 0;\r\n return (wc = 0);\r\n } else {\r\n // reset the space left and buffer\r\n this.spaceLeft = this.lineWidth - w;\r\n buffer = word;\r\n textWidth = w;\r\n return (wc = 1);\r\n }\r\n } else {\r\n return (this.spaceLeft -= w);\r\n }\r\n });\r\n\r\n if (wc > 0) {\r\n this.emit('lastLine', options, this);\r\n emitLine();\r\n }\r\n\r\n this.emit('sectionEnd', options, this);\r\n\r\n // if the wrap is set to be continued, save the X position\r\n // to start the first line of the next segment at, and reset\r\n // the y position\r\n if (options.continued === true) {\r\n if (lc > 1) {\r\n this.continuedX = 0;\r\n }\r\n this.continuedX += options.textWidth || 0;\r\n return (this.document.y = y);\r\n } else {\r\n return (this.document.x = this.startX);\r\n }\r\n }\r\n\r\n nextSection(options) {\r\n this.emit('sectionEnd', options, this);\r\n\r\n if (++this.column > this.columns) {\r\n // if a max height was specified by the user, we're done.\r\n // otherwise, the default is to make a new page at the bottom.\r\n if (this.height != null) {\r\n return false;\r\n }\r\n\r\n this.document.continueOnNewPage();\r\n this.column = 1;\r\n this.startY = this.document.page.margins.top;\r\n this.maxY = this.document.page.maxY();\r\n this.document.x = this.startX;\r\n if (this.document._fillColor) {\r\n this.document.fillColor(...this.document._fillColor);\r\n }\r\n this.emit('pageBreak', options, this);\r\n } else {\r\n this.document.x += this.lineWidth + this.columnGap;\r\n this.document.y = this.startY;\r\n this.emit('columnBreak', options, this);\r\n }\r\n\r\n this.emit('sectionStart', options, this);\r\n return true;\r\n }\r\n}\r\n\r\nexport default LineWrapper;\r\n","import LineWrapper from '../line_wrapper';\r\nimport PDFObject from '../object';\r\n\r\nconst { number } = PDFObject;\r\n\r\nexport default {\r\n initText() {\r\n this._line = this._line.bind(this);\r\n // Current coordinates\r\n this.x = 0;\r\n this.y = 0;\r\n return (this._lineGap = 0);\r\n },\r\n\r\n lineGap(_lineGap) {\r\n this._lineGap = _lineGap;\r\n return this;\r\n },\r\n\r\n moveDown(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y += this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n moveUp(lines) {\r\n if (lines == null) {\r\n lines = 1;\r\n }\r\n this.y -= this.currentLineHeight(true) * lines + this._lineGap;\r\n return this;\r\n },\r\n\r\n _text(text, x, y, options, lineCallback) {\r\n options = this._initOptions(x, y, options);\r\n\r\n // Convert text to a string\r\n text = text == null ? '' : `${text}`;\r\n\r\n // if the wordSpacing option is specified, remove multiple consecutive spaces\r\n if (options.wordSpacing) {\r\n text = text.replace(/\\s{2,}/g, ' ');\r\n }\r\n\r\n const addStructure = () => {\r\n if (options.structParent) {\r\n options.structParent.add(this.struct(options.structType || 'P',\r\n [ this.markStructureContent(options.structType || 'P') ]));\r\n }\r\n };\r\n\r\n // word wrapping\r\n if (options.width) {\r\n let wrapper = this._wrapper;\r\n if (!wrapper) {\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', lineCallback);\r\n wrapper.on('firstLine', addStructure);\r\n }\r\n\r\n this._wrapper = options.continued ? wrapper : null;\r\n this._textOptions = options.continued ? options : null;\r\n wrapper.wrap(text, options);\r\n\r\n // render paragraphs as single lines\r\n } else {\r\n for (let line of text.split('\\n')) {\r\n addStructure();\r\n lineCallback(line, options);\r\n }\r\n }\r\n\r\n return this;\r\n },\r\n\r\n text(text, x, y, options) {\r\n return this._text(text, x, y, options, this._line);\r\n },\r\n\r\n widthOfString(string, options = {}) {\r\n return (\r\n this._font.widthOfString(string, this._fontSize, options.features) +\r\n (options.characterSpacing || 0) * (string.length - 1)\r\n );\r\n },\r\n\r\n heightOfString(text, options) {\r\n const { x, y } = this;\r\n\r\n options = this._initOptions(options);\r\n options.height = Infinity; // don't break pages\r\n\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n this._text(text, this.x, this.y, options, () => {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n });\r\n\r\n const height = this.y - y;\r\n this.x = x;\r\n this.y = y;\r\n\r\n return height;\r\n },\r\n\r\n list(list, x, y, options, wrapper) {\r\n options = this._initOptions(x, y, options);\r\n\r\n const listType = options.listType || 'bullet';\r\n const unit = Math.round((this._font.ascender / 1000) * this._fontSize);\r\n const midLine = unit / 2;\r\n const r = options.bulletRadius || unit / 3;\r\n const indent =\r\n options.textIndent || (listType === 'bullet' ? r * 5 : unit * 2);\r\n const itemIndent =\r\n options.bulletIndent || (listType === 'bullet' ? r * 8 : unit * 2);\r\n\r\n let level = 1;\r\n const items = [];\r\n const levels = [];\r\n const numbers = [];\r\n\r\n var flatten = function(list) {\r\n let n = 1;\r\n for (let i = 0; i < list.length; i++) {\r\n const item = list[i];\r\n if (Array.isArray(item)) {\r\n level++;\r\n flatten(item);\r\n level--;\r\n } else {\r\n items.push(item);\r\n levels.push(level);\r\n if (listType !== 'bullet') {\r\n numbers.push(n++);\r\n }\r\n }\r\n }\r\n };\r\n\r\n flatten(list);\r\n\r\n const label = function(n) {\r\n switch (listType) {\r\n case 'numbered':\r\n return `${n}.`;\r\n case 'lettered':\r\n var letter = String.fromCharCode(((n - 1) % 26) + 65);\r\n var times = Math.floor((n - 1) / 26 + 1);\r\n var text = Array(times + 1).join(letter);\r\n return `${text}.`;\r\n }\r\n };\r\n\r\n wrapper = new LineWrapper(this, options);\r\n wrapper.on('line', this._line);\r\n\r\n level = 1;\r\n let i = 0;\r\n wrapper.on('firstLine', () => {\r\n let item, itemType, labelType, bodyType;\r\n if (options.structParent) {\r\n if (options.structTypes) {\r\n [ itemType, labelType, bodyType ] = options.structTypes;\r\n } else {\r\n [ itemType, labelType, bodyType ] = [ 'LI', 'Lbl', 'LBody' ];\r\n }\r\n }\r\n\r\n if (itemType) {\r\n item = this.struct(itemType);\r\n options.structParent.add(item);\r\n } else if (options.structParent) {\r\n item = options.structParent;\r\n }\r\n\r\n let l;\r\n if ((l = levels[i++]) !== level) {\r\n const diff = itemIndent * (l - level);\r\n this.x += diff;\r\n wrapper.lineWidth -= diff;\r\n level = l;\r\n }\r\n\r\n if (item && (labelType || bodyType)) {\r\n item.add(this.struct(labelType || bodyType,\r\n [ this.markStructureContent(labelType || bodyType) ]));\r\n }\r\n switch (listType) {\r\n case 'bullet':\r\n this.circle(this.x - indent + r, this.y + midLine, r);\r\n this.fill();\r\n break;\r\n case 'numbered':\r\n case 'lettered':\r\n var text = label(numbers[i - 1]);\r\n this._fragment(text, this.x - indent, this.y, options);\r\n break;\r\n }\r\n\r\n if (item && labelType && bodyType) {\r\n item.add(this.struct(bodyType, [ this.markStructureContent(bodyType) ]));\r\n }\r\n if (item && item !== options.structParent) {\r\n item.end();\r\n }\r\n });\r\n\r\n wrapper.on('sectionStart', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x += pos;\r\n return (wrapper.lineWidth -= pos);\r\n });\r\n\r\n wrapper.on('sectionEnd', () => {\r\n const pos = indent + itemIndent * (level - 1);\r\n this.x -= pos;\r\n return (wrapper.lineWidth += pos);\r\n });\r\n\r\n wrapper.wrap(items.join('\\n'), options);\r\n\r\n return this;\r\n },\r\n\r\n _initOptions(x = {}, y, options = {}) {\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n // clone options object\r\n const result = Object.assign({}, options);\r\n\r\n // extend options with previous values for continued text\r\n if (this._textOptions) {\r\n for (let key in this._textOptions) {\r\n const val = this._textOptions[key];\r\n if (key !== 'continued') {\r\n if (result[key] === undefined) {\r\n result[key] = val;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Update the current position\r\n if (x != null) {\r\n this.x = x;\r\n }\r\n if (y != null) {\r\n this.y = y;\r\n }\r\n\r\n // wrap to margins if no x or y position passed\r\n if (result.lineBreak !== false) {\r\n if (result.width == null) {\r\n result.width = this.page.width - this.x - this.page.margins.right;\r\n }\r\n result.width = Math.max(result.width, 0);\r\n }\r\n\r\n if (!result.columns) {\r\n result.columns = 0;\r\n }\r\n if (result.columnGap == null) {\r\n result.columnGap = 18;\r\n } // 1/4 inch\r\n\r\n return result;\r\n },\r\n\r\n _line(text, options = {}, wrapper) {\r\n this._fragment(text, this.x, this.y, options);\r\n const lineGap = options.lineGap || this._lineGap || 0;\r\n\r\n if (!wrapper) {\r\n return (this.x += this.widthOfString(text));\r\n } else {\r\n return (this.y += this.currentLineHeight(true) + lineGap);\r\n }\r\n },\r\n\r\n _fragment(text, x, y, options) {\r\n let dy, encoded, i, positions, textWidth, words;\r\n text = `${text}`.replace(/\\n/g, '');\r\n if (text.length === 0) {\r\n return;\r\n }\r\n\r\n // handle options\r\n const align = options.align || 'left';\r\n let wordSpacing = options.wordSpacing || 0;\r\n const characterSpacing = options.characterSpacing || 0;\r\n\r\n // text alignments\r\n if (options.width) {\r\n switch (align) {\r\n case 'right':\r\n textWidth = this.widthOfString(text.replace(/\\s+$/, ''), options);\r\n x += options.lineWidth - textWidth;\r\n break;\r\n\r\n case 'center':\r\n x += options.lineWidth / 2 - options.textWidth / 2;\r\n break;\r\n\r\n case 'justify':\r\n // calculate the word spacing value\r\n words = text.trim().split(/\\s+/);\r\n textWidth = this.widthOfString(text.replace(/\\s+/g, ''), options);\r\n var spaceWidth = this.widthOfString(' ') + characterSpacing;\r\n wordSpacing = Math.max(\r\n 0,\r\n (options.lineWidth - textWidth) / Math.max(1, words.length - 1) -\r\n spaceWidth\r\n );\r\n break;\r\n }\r\n }\r\n\r\n // text baseline alignments based on http://wiki.apache.org/xmlgraphics-fop/LineLayout/AlignmentHandling\r\n if (typeof options.baseline === 'number') {\r\n dy = -options.baseline;\r\n } else {\r\n switch (options.baseline) {\r\n case 'svg-middle':\r\n dy = 0.5 * this._font.xHeight;\r\n break;\r\n case 'middle':\r\n case 'svg-central':\r\n dy = 0.5 * (this._font.descender + this._font.ascender);\r\n break;\r\n case 'bottom':\r\n case 'ideographic':\r\n dy = this._font.descender;\r\n break;\r\n case 'alphabetic':\r\n dy = 0;\r\n break;\r\n case 'mathematical':\r\n dy = 0.5 * this._font.ascender;\r\n break;\r\n case 'hanging':\r\n dy = 0.8 * this._font.ascender;\r\n break;\r\n case 'top':\r\n dy = this._font.ascender;\r\n break;\r\n default:\r\n dy = this._font.ascender;\r\n }\r\n dy = (dy / 1000) * this._fontSize;\r\n }\r\n\r\n // calculate the actual rendered width of the string after word and character spacing\r\n const renderedWidth =\r\n options.textWidth +\r\n wordSpacing * (options.wordCount - 1) +\r\n characterSpacing * (text.length - 1);\r\n\r\n // create link annotations if the link option is given\r\n if (options.link != null) {\r\n this.link(x, y, renderedWidth, this.currentLineHeight(), options.link);\r\n }\r\n if (options.goTo != null) {\r\n this.goTo(x, y, renderedWidth, this.currentLineHeight(), options.goTo);\r\n }\r\n if (options.destination != null) {\r\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n }\r\n\r\n // create underline\r\n if (options.underline) {\r\n this.save();\r\n if (!options.stroke) {\r\n this.strokeColor(...(this._fillColor || []));\r\n }\r\n\r\n const lineWidth =\r\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n this.lineWidth(lineWidth);\r\n\r\n let lineY = (y + this.currentLineHeight()) - lineWidth\r\n this.moveTo(x, lineY);\r\n this.lineTo(x + renderedWidth, lineY);\r\n this.stroke();\r\n this.restore();\r\n }\r\n \r\n // create strikethrough line\r\n if (options.strike) {\r\n this.save();\r\n if (!options.stroke) {\r\n this.strokeColor(...(this._fillColor || []));\r\n }\r\n\r\n const lineWidth =\r\n this._fontSize < 10 ? 0.5 : Math.floor(this._fontSize / 10);\r\n this.lineWidth(lineWidth);\r\n\r\n let lineY = y + this.currentLineHeight() / 2;\r\n this.moveTo(x, lineY);\r\n this.lineTo(x + renderedWidth, lineY);\r\n this.stroke();\r\n this.restore();\r\n }\r\n\r\n this.save();\r\n\r\n // oblique (angle in degrees or boolean)\r\n if (options.oblique) {\r\n let skew;\r\n if (typeof options.oblique === 'number') {\r\n skew = -Math.tan((options.oblique * Math.PI) / 180);\r\n } else {\r\n skew = -0.25;\r\n }\r\n this.transform(1, 0, 0, 1, x, y);\r\n this.transform(1, 0, skew, 1, -skew * dy, 0);\r\n this.transform(1, 0, 0, 1, -x, -y);\r\n }\r\n\r\n // flip coordinate system\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n y = this.page.height - y - dy;\r\n\r\n // add current font to page if necessary\r\n if (this.page.fonts[this._font.id] == null) {\r\n this.page.fonts[this._font.id] = this._font.ref();\r\n }\r\n\r\n // begin the text object\r\n this.addContent('BT');\r\n\r\n // text position\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n\r\n // font and font size\r\n this.addContent(`/${this._font.id} ${number(this._fontSize)} Tf`);\r\n\r\n // rendering mode\r\n const mode = options.fill && options.stroke ? 2 : options.stroke ? 1 : 0;\r\n if (mode) {\r\n this.addContent(`${mode} Tr`);\r\n }\r\n\r\n // Character spacing\r\n if (characterSpacing) {\r\n this.addContent(`${number(characterSpacing)} Tc`);\r\n }\r\n\r\n // Add the actual text\r\n // If we have a word spacing value, we need to encode each word separately\r\n // since the normal Tw operator only works on character code 32, which isn't\r\n // used for embedded fonts.\r\n if (wordSpacing) {\r\n words = text.trim().split(/\\s+/);\r\n wordSpacing += this.widthOfString(' ') + characterSpacing;\r\n wordSpacing *= 1000 / this._fontSize;\r\n\r\n encoded = [];\r\n positions = [];\r\n for (let word of words) {\r\n const [encodedWord, positionsWord] = this._font.encode(\r\n word,\r\n options.features\r\n );\r\n encoded = encoded.concat(encodedWord);\r\n positions = positions.concat(positionsWord);\r\n\r\n // add the word spacing to the end of the word\r\n // clone object because of cache\r\n const space = {};\r\n const object = positions[positions.length - 1];\r\n for (let key in object) {\r\n const val = object[key];\r\n space[key] = val;\r\n }\r\n space.xAdvance += wordSpacing;\r\n positions[positions.length - 1] = space;\r\n }\r\n } else {\r\n [encoded, positions] = this._font.encode(text, options.features);\r\n }\r\n\r\n const scale = this._fontSize / 1000;\r\n const commands = [];\r\n let last = 0;\r\n let hadOffset = false;\r\n\r\n // Adds a segment of text to the TJ command buffer\r\n const addSegment = cur => {\r\n if (last < cur) {\r\n const hex = encoded.slice(last, cur).join('');\r\n const advance =\r\n positions[cur - 1].xAdvance - positions[cur - 1].advanceWidth;\r\n commands.push(`<${hex}> ${number(-advance)}`);\r\n }\r\n\r\n return (last = cur);\r\n };\r\n\r\n // Flushes the current TJ commands to the output stream\r\n const flush = i => {\r\n addSegment(i);\r\n\r\n if (commands.length > 0) {\r\n this.addContent(`[${commands.join(' ')}] TJ`);\r\n return (commands.length = 0);\r\n }\r\n };\r\n\r\n for (i = 0; i < positions.length; i++) {\r\n // If we have an x or y offset, we have to break out of the current TJ command\r\n // so we can move the text position.\r\n const pos = positions[i];\r\n if (pos.xOffset || pos.yOffset) {\r\n // Flush the current buffer\r\n flush(i);\r\n\r\n // Move the text position and flush just the current character\r\n this.addContent(\r\n `1 0 0 1 ${number(x + pos.xOffset * scale)} ${number(\r\n y + pos.yOffset * scale\r\n )} Tm`\r\n );\r\n flush(i + 1);\r\n\r\n hadOffset = true;\r\n } else {\r\n // If the last character had an offset, reset the text position\r\n if (hadOffset) {\r\n this.addContent(`1 0 0 1 ${number(x)} ${number(y)} Tm`);\r\n hadOffset = false;\r\n }\r\n\r\n // Group segments that don't have any advance adjustments\r\n if (pos.xAdvance - pos.advanceWidth !== 0) {\r\n addSegment(i + 1);\r\n }\r\n }\r\n\r\n x += pos.xAdvance * scale;\r\n }\r\n\r\n // Flush any remaining commands\r\n flush(i);\r\n\r\n // end the text object\r\n this.addContent('ET');\r\n\r\n // restore flipped coordinate system\r\n return this.restore();\r\n }\r\n};\r\n","const MARKERS = [\r\n 0xffc0,\r\n 0xffc1,\r\n 0xffc2,\r\n 0xffc3,\r\n 0xffc5,\r\n 0xffc6,\r\n 0xffc7,\r\n 0xffc8,\r\n 0xffc9,\r\n 0xffca,\r\n 0xffcb,\r\n 0xffcc,\r\n 0xffcd,\r\n 0xffce,\r\n 0xffcf\r\n];\r\n\r\nconst COLOR_SPACE_MAP = {\r\n 1: 'DeviceGray',\r\n 3: 'DeviceRGB',\r\n 4: 'DeviceCMYK'\r\n};\r\n\r\nclass JPEG {\r\n constructor(data, label) {\r\n let marker;\r\n this.data = data;\r\n this.label = label;\r\n if (this.data.readUInt16BE(0) !== 0xffd8) {\r\n throw 'SOI not found in JPEG';\r\n }\r\n\r\n let pos = 2;\r\n while (pos < this.data.length) {\r\n marker = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n if (MARKERS.includes(marker)) {\r\n break;\r\n }\r\n pos += this.data.readUInt16BE(pos);\r\n }\r\n\r\n if (!MARKERS.includes(marker)) {\r\n throw 'Invalid JPEG.';\r\n }\r\n pos += 2;\r\n\r\n this.bits = this.data[pos++];\r\n this.height = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n this.width = this.data.readUInt16BE(pos);\r\n pos += 2;\r\n\r\n const channels = this.data[pos++];\r\n this.colorSpace = COLOR_SPACE_MAP[channels];\r\n\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n this.obj = document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: this.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n ColorSpace: this.colorSpace,\r\n Filter: 'DCTDecode'\r\n });\r\n\r\n // add extra decode params for CMYK images. By swapping the\r\n // min and max values from the default, we invert the colors. See\r\n // section 4.8.4 of the spec.\r\n if (this.colorSpace === 'DeviceCMYK') {\r\n this.obj.data['Decode'] = [1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0];\r\n }\r\n\r\n this.obj.end(this.data);\r\n\r\n // free memory\r\n return (this.data = null);\r\n }\r\n}\r\n\r\nexport default JPEG;\r\n","import zlib from 'zlib';\r\nimport PNG from 'png-js';\r\n\r\nclass PNGImage {\r\n constructor(data, label) {\r\n this.label = label;\r\n this.image = new PNG(data);\r\n this.width = this.image.width;\r\n this.height = this.image.height;\r\n this.imgData = this.image.imgData;\r\n this.obj = null;\r\n }\r\n\r\n embed(document) {\r\n let dataDecoded = false;\r\n\r\n this.document = document;\r\n if (this.obj) {\r\n return;\r\n }\r\n\r\n const hasAlphaChannel = this.image.hasAlphaChannel;\r\n const isInterlaced = this.image.interlaceMethod === 1;\r\n\r\n this.obj = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n BitsPerComponent: hasAlphaChannel ? 8 : this.image.bits,\r\n Width: this.width,\r\n Height: this.height,\r\n Filter: 'FlateDecode'\r\n });\r\n\r\n if (!hasAlphaChannel) {\r\n const params = this.document.ref({\r\n Predictor: isInterlaced ? 1 : 15,\r\n Colors: this.image.colors,\r\n BitsPerComponent: this.image.bits,\r\n Columns: this.width\r\n });\r\n\r\n this.obj.data['DecodeParms'] = params;\r\n params.end();\r\n }\r\n\r\n if (this.image.palette.length === 0) {\r\n this.obj.data['ColorSpace'] = this.image.colorSpace;\r\n } else {\r\n // embed the color palette in the PDF as an object stream\r\n const palette = this.document.ref();\r\n palette.end(Buffer.from(this.image.palette));\r\n\r\n // build the color space array for the image\r\n this.obj.data['ColorSpace'] = [\r\n 'Indexed',\r\n 'DeviceRGB',\r\n this.image.palette.length / 3 - 1,\r\n palette\r\n ];\r\n }\r\n\r\n // For PNG color types 0, 2 and 3, the transparency data is stored in\r\n // a dedicated PNG chunk.\r\n if (this.image.transparency.grayscale != null) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const val = this.image.transparency.grayscale;\r\n this.obj.data['Mask'] = [val, val];\r\n } else if (this.image.transparency.rgb) {\r\n // Use Color Key Masking (spec section 4.8.5)\r\n // An array with N elements, where N is two times the number of color components.\r\n const { rgb } = this.image.transparency;\r\n const mask = [];\r\n for (let x of rgb) {\r\n mask.push(x, x);\r\n }\r\n\r\n this.obj.data['Mask'] = mask;\r\n } else if (this.image.transparency.indexed) {\r\n // Create a transparency SMask for the image based on the data\r\n // in the PLTE and tRNS sections. See below for details on SMasks.\r\n dataDecoded = true;\r\n return this.loadIndexedAlphaChannel();\r\n } else if (hasAlphaChannel) {\r\n // For PNG color types 4 and 6, the transparency data is stored as a alpha\r\n // channel mixed in with the main image data. Separate this data out into an\r\n // SMask object and store it separately in the PDF.\r\n dataDecoded = true;\r\n return this.splitAlphaChannel();\r\n }\r\n\r\n if (isInterlaced && !dataDecoded) {\r\n return this.decodeData();\r\n }\r\n\r\n this.finalize();\r\n }\r\n\r\n finalize() {\r\n if (this.alphaChannel) {\r\n const sMask = this.document.ref({\r\n Type: 'XObject',\r\n Subtype: 'Image',\r\n Height: this.height,\r\n Width: this.width,\r\n BitsPerComponent: 8,\r\n Filter: 'FlateDecode',\r\n ColorSpace: 'DeviceGray',\r\n Decode: [0, 1]\r\n });\r\n\r\n sMask.end(this.alphaChannel);\r\n this.obj.data['SMask'] = sMask;\r\n }\r\n\r\n // add the actual image data\r\n this.obj.end(this.imgData);\r\n\r\n // free memory\r\n this.image = null;\r\n return (this.imgData = null);\r\n }\r\n\r\n splitAlphaChannel() {\r\n return this.image.decodePixels(pixels => {\r\n let a, p;\r\n const colorCount = this.image.colors;\r\n const pixelCount = this.width * this.height;\r\n const imgData = Buffer.alloc(pixelCount * colorCount);\r\n const alphaChannel = Buffer.alloc(pixelCount);\r\n\r\n let i = (p = a = 0);\r\n const len = pixels.length;\r\n // For 16bit images copy only most significant byte (MSB) - PNG data is always stored in network byte order (MSB first)\r\n const skipByteCount = this.image.bits === 16 ? 1 : 0;\r\n while (i < len) {\r\n for (let colorIndex = 0; colorIndex < colorCount; colorIndex++) {\r\n imgData[p++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n alphaChannel[a++] = pixels[i++];\r\n i += skipByteCount;\r\n }\r\n\r\n this.imgData = zlib.deflateSync(imgData);\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n\r\n loadIndexedAlphaChannel() {\r\n const transparency = this.image.transparency.indexed;\r\n return this.image.decodePixels(pixels => {\r\n const alphaChannel = Buffer.alloc(this.width * this.height);\r\n\r\n let i = 0;\r\n for (let j = 0, end = pixels.length; j < end; j++) {\r\n alphaChannel[i++] = transparency[pixels[j]];\r\n }\r\n\r\n this.alphaChannel = zlib.deflateSync(alphaChannel);\r\n return this.finalize();\r\n });\r\n }\r\n\r\n decodeData() {\r\n this.image.decodePixels(pixels => {\r\n this.imgData = zlib.deflateSync(pixels);\r\n this.finalize();\r\n });\r\n }\r\n}\r\n\r\nexport default PNGImage;\r\n","/*\r\nPDFImage - embeds images in PDF documents\r\nBy Devon Govett\r\n*/\r\n\r\nimport fs from 'fs';\r\nimport JPEG from './image/jpeg';\r\nimport PNG from './image/png';\r\n\r\nclass PDFImage {\r\n static open(src, label) {\r\n let data;\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n let match;\r\n if ((match = /^data:.+;base64,(.*)$/.exec(src))) {\r\n data = Buffer.from(match[1], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n if (data[0] === 0xff && data[1] === 0xd8) {\r\n return new JPEG(data, label);\r\n } else if (data[0] === 0x89 && data.toString('ascii', 1, 4) === 'PNG') {\r\n return new PNG(data, label);\r\n } else {\r\n throw new Error('Unknown image format.');\r\n }\r\n }\r\n}\r\n\r\nexport default PDFImage;\r\n","import PDFImage from '../image';\r\n\r\nexport default {\r\n initImages() {\r\n this._imageRegistry = {};\r\n return (this._imageCount = 0);\r\n },\r\n\r\n image(src, x, y, options = {}) {\r\n let bh, bp, bw, image, ip, left, left1;\r\n if (typeof x === 'object') {\r\n options = x;\r\n x = null;\r\n }\r\n\r\n x = (left = x != null ? x : options.x) != null ? left : this.x;\r\n y = (left1 = y != null ? y : options.y) != null ? left1 : this.y;\r\n\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n if (src.width && src.height) {\r\n image = src;\r\n } else {\r\n image = this.openImage(src);\r\n }\r\n }\r\n\r\n if (!image.obj) {\r\n image.embed(this);\r\n }\r\n\r\n if (this.page.xobjects[image.label] == null) {\r\n this.page.xobjects[image.label] = image.obj;\r\n }\r\n\r\n let w = options.width || image.width;\r\n let h = options.height || image.height;\r\n\r\n if (options.width && !options.height) {\r\n const wp = w / image.width;\r\n w = image.width * wp;\r\n h = image.height * wp;\r\n } else if (options.height && !options.width) {\r\n const hp = h / image.height;\r\n w = image.width * hp;\r\n h = image.height * hp;\r\n } else if (options.scale) {\r\n w = image.width * options.scale;\r\n h = image.height * options.scale;\r\n } else if (options.fit) {\r\n [bw, bh] = options.fit;\r\n bp = bw / bh;\r\n ip = image.width / image.height;\r\n if (ip > bp) {\r\n w = bw;\r\n h = bw / ip;\r\n } else {\r\n h = bh;\r\n w = bh * ip;\r\n }\r\n } else if (options.cover) {\r\n [bw, bh] = options.cover;\r\n bp = bw / bh;\r\n ip = image.width / image.height;\r\n if (ip > bp) {\r\n h = bh;\r\n w = bh * ip;\r\n } else {\r\n w = bw;\r\n h = bw / ip;\r\n }\r\n }\r\n\r\n if (options.fit || options.cover) {\r\n if (options.align === 'center') {\r\n x = x + bw / 2 - w / 2;\r\n } else if (options.align === 'right') {\r\n x = x + bw - w;\r\n }\r\n\r\n if (options.valign === 'center') {\r\n y = y + bh / 2 - h / 2;\r\n } else if (options.valign === 'bottom') {\r\n y = y + bh - h;\r\n }\r\n }\r\n\r\n // create link annotations if the link option is given\r\n if (options.link != null) {\r\n this.link(x, y, w, h, options.link);\r\n }\r\n if (options.goTo != null) {\r\n this.goTo(x, y, w, h, options.goTo);\r\n }\r\n if (options.destination != null) {\r\n this.addNamedDestination(options.destination, 'XYZ', x, y, null);\r\n }\r\n\r\n // Set the current y position to below the image if it is in the document flow\r\n if (this.y === y) {\r\n this.y += h;\r\n }\r\n\r\n this.save();\r\n this.transform(w, 0, 0, -h, x, y + h);\r\n this.addContent(`/${image.label} Do`);\r\n this.restore();\r\n\r\n return this;\r\n },\r\n\r\n openImage(src) {\r\n let image;\r\n if (typeof src === 'string') {\r\n image = this._imageRegistry[src];\r\n }\r\n\r\n if (!image) {\r\n image = PDFImage.open(src, `I${++this._imageCount}`);\r\n if (typeof src === 'string') {\r\n this._imageRegistry[src] = image;\r\n }\r\n }\r\n\r\n return image;\r\n }\r\n};\r\n","export default {\r\n annotate(x, y, w, h, options) {\r\n options.Type = 'Annot';\r\n options.Rect = this._convertRect(x, y, w, h);\r\n options.Border = [0, 0, 0];\r\n\r\n if (options.Subtype === 'Link' && typeof options.F === 'undefined') {\r\n options.F = 1 << 2; // Print Annotation Flag\r\n }\r\n\r\n if (options.Subtype !== 'Link') {\r\n if (options.C == null) {\r\n options.C = this._normalizeColor(options.color || [0, 0, 0]);\r\n }\r\n } // convert colors\r\n delete options.color;\r\n\r\n if (typeof options.Dest === 'string') {\r\n options.Dest = new String(options.Dest);\r\n }\r\n\r\n // Capitalize keys\r\n for (let key in options) {\r\n const val = options[key];\r\n options[key[0].toUpperCase() + key.slice(1)] = val;\r\n }\r\n\r\n const ref = this.ref(options);\r\n this.page.annotations.push(ref);\r\n ref.end();\r\n return this;\r\n },\r\n\r\n note(x, y, w, h, contents, options = {}) {\r\n options.Subtype = 'Text';\r\n options.Contents = new String(contents);\r\n options.Name = 'Comment';\r\n if (options.color == null) {\r\n options.color = [243, 223, 92];\r\n }\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n goTo(x, y, w, h, name, options = {}) {\r\n options.Subtype = 'Link';\r\n options.A = this.ref({\r\n S: 'GoTo',\r\n D: new String(name)\r\n });\r\n options.A.end();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n link(x, y, w, h, url, options = {}) {\r\n options.Subtype = 'Link';\r\n\r\n if (typeof url === 'number') {\r\n // Link to a page in the document (the page must already exist)\r\n const pages = this._root.data.Pages.data;\r\n if (url >= 0 && url < pages.Kids.length) {\r\n options.A = this.ref({\r\n S: 'GoTo',\r\n D: [pages.Kids[url], 'XYZ', null, null, null]\r\n });\r\n options.A.end();\r\n } else {\r\n throw new Error(`The document has no page ${url}`);\r\n }\r\n } else {\r\n // Link to an external url\r\n options.A = this.ref({\r\n S: 'URI',\r\n URI: new String(url)\r\n });\r\n options.A.end();\r\n }\r\n\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _markup(x, y, w, h, options = {}) {\r\n const [x1, y1, x2, y2] = this._convertRect(x, y, w, h);\r\n options.QuadPoints = [x1, y2, x2, y2, x1, y1, x2, y1];\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n highlight(x, y, w, h, options = {}) {\r\n options.Subtype = 'Highlight';\r\n if (options.color == null) {\r\n options.color = [241, 238, 148];\r\n }\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n underline(x, y, w, h, options = {}) {\r\n options.Subtype = 'Underline';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n strike(x, y, w, h, options = {}) {\r\n options.Subtype = 'StrikeOut';\r\n return this._markup(x, y, w, h, options);\r\n },\r\n\r\n lineAnnotation(x1, y1, x2, y2, options = {}) {\r\n options.Subtype = 'Line';\r\n options.Contents = new String();\r\n options.L = [x1, this.page.height - y1, x2, this.page.height - y2];\r\n return this.annotate(x1, y1, x2, y2, options);\r\n },\r\n\r\n rectAnnotation(x, y, w, h, options = {}) {\r\n options.Subtype = 'Square';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n ellipseAnnotation(x, y, w, h, options = {}) {\r\n options.Subtype = 'Circle';\r\n options.Contents = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n textAnnotation(x, y, w, h, text, options = {}) {\r\n options.Subtype = 'FreeText';\r\n options.Contents = new String(text);\r\n options.DA = new String();\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n fileAnnotation(x, y, w, h, file = {}, options = {}) {\r\n // create hidden file\r\n const filespec = this.file(\r\n file.src,\r\n Object.assign({ hidden: true }, file)\r\n );\r\n\r\n options.Subtype = 'FileAttachment';\r\n options.FS = filespec;\r\n\r\n // add description from filespec unless description (Contents) has already been set\r\n if (options.Contents) {\r\n options.Contents = new String(options.Contents);\r\n } else if (filespec.data.Desc) {\r\n options.Contents = filespec.data.Desc;\r\n }\r\n\r\n return this.annotate(x, y, w, h, options);\r\n },\r\n\r\n _convertRect(x1, y1, w, h) {\r\n // flip y1 and y2\r\n let y2 = y1;\r\n y1 += h;\r\n\r\n // make x2\r\n let x2 = x1 + w;\r\n\r\n // apply current transformation matrix to points\r\n const [m0, m1, m2, m3, m4, m5] = this._ctm;\r\n x1 = m0 * x1 + m2 * y1 + m4;\r\n y1 = m1 * x1 + m3 * y1 + m5;\r\n x2 = m0 * x2 + m2 * y2 + m4;\r\n y2 = m1 * x2 + m3 * y2 + m5;\r\n\r\n return [x1, y1, x2, y2];\r\n }\r\n};\r\n","class PDFOutline {\r\n constructor(document, parent, title, dest, options = { expanded: false }) {\r\n this.document = document;\r\n this.options = options;\r\n this.outlineData = {};\r\n\r\n if (dest !== null) {\r\n this.outlineData['Dest'] = [dest.dictionary, 'Fit'];\r\n }\r\n\r\n if (parent !== null) {\r\n this.outlineData['Parent'] = parent;\r\n }\r\n\r\n if (title !== null) {\r\n this.outlineData['Title'] = new String(title);\r\n }\r\n\r\n this.dictionary = this.document.ref(this.outlineData);\r\n this.children = [];\r\n }\r\n\r\n addItem(title, options = { expanded: false }) {\r\n const result = new PDFOutline(\r\n this.document,\r\n this.dictionary,\r\n title,\r\n this.document.page,\r\n options\r\n );\r\n this.children.push(result);\r\n\r\n return result;\r\n }\r\n\r\n endOutline() {\r\n if (this.children.length > 0) {\r\n if (this.options.expanded) {\r\n this.outlineData.Count = this.children.length;\r\n }\r\n\r\n const first = this.children[0],\r\n last = this.children[this.children.length - 1];\r\n this.outlineData.First = first.dictionary;\r\n this.outlineData.Last = last.dictionary;\r\n\r\n for (let i = 0, len = this.children.length; i < len; i++) {\r\n const child = this.children[i];\r\n if (i > 0) {\r\n child.outlineData.Prev = this.children[i - 1].dictionary;\r\n }\r\n if (i < this.children.length - 1) {\r\n child.outlineData.Next = this.children[i + 1].dictionary;\r\n }\r\n child.endOutline();\r\n }\r\n }\r\n\r\n return this.dictionary.end();\r\n }\r\n}\r\n\r\nexport default PDFOutline;\r\n","import PDFOutline from '../outline';\r\n\r\nexport default {\r\n initOutline() {\r\n return (this.outline = new PDFOutline(this, null, null, null));\r\n },\r\n\r\n endOutline() {\r\n this.outline.endOutline();\r\n if (this.outline.children.length > 0) {\r\n this._root.data.Outlines = this.outline.dictionary;\r\n return (this._root.data.PageMode = 'UseOutlines');\r\n }\r\n }\r\n};\r\n","/*\r\nPDFStructureContent - a reference to a marked structure content\r\nBy Ben Schmidt\r\n*/\r\n\r\nclass PDFStructureContent {\r\n constructor(pageRef, mcid) {\r\n this.refs = [{ pageRef, mcid }];\r\n }\r\n\r\n push(structContent) {\r\n structContent.refs.forEach((ref) => this.refs.push(ref));\r\n }\r\n}\r\n\r\nexport default PDFStructureContent;\r\n","/*\r\nPDFStructureElement - represents an element in the PDF logical structure tree\r\nBy Ben Schmidt\r\n*/\r\n\r\nimport PDFStructureContent from \"./structure_content\";\r\n\r\nclass PDFStructureElement {\r\n constructor(document, type, options = {}, children = null) {\r\n this.document = document;\r\n\r\n this._attached = false;\r\n this._ended = false;\r\n this._flushed = false;\r\n this.dictionary = document.ref({\r\n // Type: \"StructElem\",\r\n S: type\r\n });\r\n\r\n const data = this.dictionary.data;\r\n\r\n if (Array.isArray(options) || this._isValidChild(options)) {\r\n children = options;\r\n options = {};\r\n }\r\n\r\n if (typeof options.title !== 'undefined') {\r\n data.T = new String(options.title);\r\n }\r\n if (typeof options.lang !== 'undefined') {\r\n data.Lang = new String(options.lang);\r\n }\r\n if (typeof options.alt !== 'undefined') {\r\n data.Alt = new String(options.alt);\r\n }\r\n if (typeof options.expanded !== 'undefined') {\r\n data.E = new String(options.expanded);\r\n }\r\n if (typeof options.actual !== 'undefined') {\r\n data.ActualText = new String(options.actual);\r\n }\r\n\r\n this._children = [];\r\n\r\n if (children) {\r\n if (!Array.isArray(children)) {\r\n children = [children];\r\n }\r\n children.forEach((child) => this.add(child));\r\n this.end();\r\n }\r\n }\r\n\r\n add(child) {\r\n if (this._ended) {\r\n throw new Error(`Cannot add child to already-ended structure element`);\r\n }\r\n\r\n if (!this._isValidChild(child)) {\r\n throw new Error(`Invalid structure element child`);\r\n }\r\n\r\n if (child instanceof PDFStructureElement) {\r\n child.setParent(this.dictionary);\r\n if (this._attached) {\r\n child.setAttached();\r\n }\r\n }\r\n\r\n if (child instanceof PDFStructureContent) {\r\n this._addContentToParentTree(child);\r\n }\r\n\r\n if (typeof child === 'function' && this._attached) {\r\n // _contentForClosure() adds the content to the parent tree\r\n child = this._contentForClosure(child);\r\n }\r\n\r\n this._children.push(child);\r\n\r\n return this;\r\n }\r\n\r\n _addContentToParentTree(content) {\r\n content.refs.forEach(({ pageRef, mcid }) => {\r\n const pageStructParents = this.document.getStructParentTree()\r\n .get(pageRef.data.StructParents);\r\n pageStructParents[mcid] = this.dictionary;\r\n });\r\n }\r\n\r\n setParent(parentRef) {\r\n if (this.dictionary.data.P) {\r\n throw new Error(`Structure element added to more than one parent`);\r\n }\r\n\r\n this.dictionary.data.P = parentRef;\r\n\r\n this._flush();\r\n }\r\n\r\n setAttached() {\r\n if (this._attached) {\r\n return;\r\n }\r\n\r\n this._children.forEach((child, index) => {\r\n if (child instanceof PDFStructureElement) {\r\n child.setAttached();\r\n }\r\n if (typeof child === 'function') {\r\n this._children[index] = this._contentForClosure(child);\r\n }\r\n });\r\n\r\n this._attached = true;\r\n\r\n this._flush();\r\n }\r\n\r\n end() {\r\n if (this._ended) {\r\n return;\r\n }\r\n\r\n this._children\r\n .filter((child) => child instanceof PDFStructureElement)\r\n .forEach((child) => child.end());\r\n\r\n this._ended = true;\r\n\r\n this._flush();\r\n }\r\n\r\n _isValidChild(child) {\r\n return child instanceof PDFStructureElement ||\r\n child instanceof PDFStructureContent ||\r\n typeof child === 'function';\r\n }\r\n\r\n _contentForClosure(closure) {\r\n const content = this.document.markStructureContent(this.dictionary.data.S);\r\n closure();\r\n this.document.endMarkedContent();\r\n\r\n this._addContentToParentTree(content);\r\n\r\n return content;\r\n }\r\n\r\n _isFlushable() {\r\n if (!this.dictionary.data.P || !this._ended) {\r\n return false;\r\n }\r\n\r\n return this._children.every((child) => {\r\n if (typeof child === 'function') {\r\n return false;\r\n }\r\n if (child instanceof PDFStructureElement) {\r\n return child._isFlushable();\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n _flush() {\r\n if (this._flushed || !this._isFlushable()) {\r\n return;\r\n }\r\n\r\n this.dictionary.data.K = [];\r\n\r\n this._children.forEach((child) => this._flushChild(child));\r\n\r\n this.dictionary.end();\r\n\r\n // free memory used by children; the dictionary itself may still be\r\n // referenced by a parent structure element or root, but we can\r\n // at least trim the tree here\r\n this._children = [];\r\n this.dictionary.data.K = null;\r\n\r\n this._flushed = true;\r\n }\r\n\r\n _flushChild(child) {\r\n if (child instanceof PDFStructureElement) {\r\n this.dictionary.data.K.push(child.dictionary);\r\n }\r\n\r\n if (child instanceof PDFStructureContent) {\r\n child.refs.forEach(({ pageRef, mcid }) => {\r\n if (!this.dictionary.data.Pg) {\r\n this.dictionary.data.Pg = pageRef;\r\n }\r\n\r\n if (this.dictionary.data.Pg === pageRef) {\r\n this.dictionary.data.K.push(mcid);\r\n } else {\r\n this.dictionary.data.K.push({\r\n Type: \"MCR\",\r\n Pg: pageRef,\r\n MCID: mcid\r\n });\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default PDFStructureElement;\r\n","/*\r\nPDFNumberTree - represents a number tree object\r\n*/\r\n\r\nimport PDFTree from \"./tree\";\r\n\r\nclass PDFNumberTree extends PDFTree {\r\n _compareKeys(a, b) {\r\n return parseInt(a) - parseInt(b);\r\n }\r\n\r\n _keysName() {\r\n return \"Nums\";\r\n }\r\n\r\n _dataForKey(k) {\r\n return parseInt(k);\r\n }\r\n}\r\n\r\nexport default PDFNumberTree;\r\n","/*\r\nMarkings mixin - support marked content sequences in content streams\r\nBy Ben Schmidt\r\n*/\r\n\r\nimport PDFStructureElement from \"../structure_element\";\r\nimport PDFStructureContent from \"../structure_content\";\r\nimport PDFNumberTree from \"../number_tree\";\r\nimport PDFObject from \"../object\";\r\n\r\nexport default {\r\n\r\n initMarkings(options) {\r\n this.structChildren = [];\r\n\r\n if (options.tagged) {\r\n this.getMarkInfoDictionary().data.Marked = true;\r\n this.getStructTreeRoot();\r\n }\r\n },\r\n\r\n markContent(tag, options = null) {\r\n if (tag === 'Artifact' || (options && options.mcid)) {\r\n let toClose = 0;\r\n this.page.markings.forEach((marking) => {\r\n if (toClose || marking.structContent || marking.tag === 'Artifact') {\r\n toClose++;\r\n }\r\n });\r\n while (toClose--) {\r\n this.endMarkedContent();\r\n }\r\n }\r\n\r\n if (!options) {\r\n this.page.markings.push({ tag });\r\n this.addContent(`/${tag} BMC`);\r\n return this;\r\n }\r\n\r\n this.page.markings.push({ tag, options });\r\n\r\n const dictionary = {};\r\n\r\n if (typeof options.mcid !== 'undefined') {\r\n dictionary.MCID = options.mcid;\r\n }\r\n if (tag === 'Artifact') {\r\n if (typeof options.type === 'string') {\r\n dictionary.Type = options.type;\r\n }\r\n if (Array.isArray(options.bbox)) {\r\n dictionary.BBox = [options.bbox[0], this.page.height - options.bbox[3],\r\n options.bbox[2], this.page.height - options.bbox[1]];\r\n }\r\n if (Array.isArray(options.attached) &&\r\n options.attached.every(val => typeof val === 'string')) {\r\n dictionary.Attached = options.attached;\r\n }\r\n }\r\n if (tag === 'Span') {\r\n if (options.lang) {\r\n dictionary.Lang = new String(options.lang);\r\n }\r\n if (options.alt) {\r\n dictionary.Alt = new String(options.alt);\r\n }\r\n if (options.expanded) {\r\n dictionary.E = new String(options.expanded);\r\n }\r\n if (options.actual) {\r\n dictionary.ActualText = new String(options.actual);\r\n }\r\n }\r\n\r\n this.addContent(`/${tag} ${PDFObject.convert(dictionary)} BDC`);\r\n return this;\r\n },\r\n\r\n markStructureContent(tag, options = {}) {\r\n const pageStructParents = this.getStructParentTree().get(this.page.structParentTreeKey);\r\n const mcid = pageStructParents.length;\r\n pageStructParents.push(null);\r\n\r\n this.markContent(tag, { ...options, mcid });\r\n\r\n const structContent = new PDFStructureContent(this.page.dictionary, mcid);\r\n this.page.markings.slice(-1)[0].structContent = structContent;\r\n return structContent;\r\n },\r\n\r\n endMarkedContent() {\r\n this.page.markings.pop();\r\n this.addContent('EMC');\r\n return this;\r\n },\r\n\r\n struct(type, options = {}, children = null) {\r\n return new PDFStructureElement(this, type, options, children);\r\n },\r\n\r\n addStructure(structElem) {\r\n const structTreeRoot = this.getStructTreeRoot();\r\n structElem.setParent(structTreeRoot);\r\n structElem.setAttached();\r\n this.structChildren.push(structElem);\r\n if (!structTreeRoot.data.K) {\r\n structTreeRoot.data.K = [];\r\n }\r\n structTreeRoot.data.K.push(structElem.dictionary);\r\n return this;\r\n },\r\n\r\n initPageMarkings(pageMarkings) {\r\n pageMarkings.forEach((marking) => {\r\n if (marking.structContent) {\r\n const structContent = marking.structContent;\r\n const newStructContent = this.markStructureContent(marking.tag, marking.options);\r\n structContent.push(newStructContent);\r\n this.page.markings.slice(-1)[0].structContent = structContent;\r\n } else {\r\n this.markContent(marking.tag, marking.options);\r\n }\r\n });\r\n },\r\n\r\n endPageMarkings(page) {\r\n const pageMarkings = page.markings;\r\n pageMarkings.forEach(() => page.write('EMC'));\r\n page.markings = [];\r\n return pageMarkings;\r\n },\r\n\r\n getMarkInfoDictionary() {\r\n if (!this._root.data.MarkInfo) {\r\n this._root.data.MarkInfo = this.ref({});\r\n }\r\n return this._root.data.MarkInfo;\r\n },\r\n\r\n getStructTreeRoot() {\r\n if (!this._root.data.StructTreeRoot) {\r\n this._root.data.StructTreeRoot = this.ref({\r\n Type: 'StructTreeRoot',\r\n ParentTree: new PDFNumberTree(),\r\n ParentTreeNextKey: 0\r\n });\r\n }\r\n return this._root.data.StructTreeRoot;\r\n },\r\n\r\n getStructParentTree() {\r\n return this.getStructTreeRoot().data.ParentTree;\r\n },\r\n\r\n createStructParentTreeNextKey() {\r\n // initialise the MarkInfo dictionary\r\n this.getMarkInfoDictionary();\r\n\r\n const structTreeRoot = this.getStructTreeRoot();\r\n const key = structTreeRoot.data.ParentTreeNextKey++;\r\n structTreeRoot.data.ParentTree.add(key, []);\r\n return key;\r\n },\r\n\r\n endMarkings() {\r\n const structTreeRoot = this._root.data.StructTreeRoot;\r\n if (structTreeRoot) {\r\n structTreeRoot.end();\r\n this.structChildren.forEach((structElem) => structElem.end());\r\n }\r\n if (this._root.data.MarkInfo) {\r\n this._root.data.MarkInfo.end();\r\n }\r\n }\r\n\r\n};\r\n","const FIELD_FLAGS = {\r\n readOnly: 1,\r\n required: 2,\r\n noExport: 4,\r\n multiline: 0x1000,\r\n password: 0x2000,\r\n toggleToOffButton: 0x4000,\r\n radioButton: 0x8000,\r\n pushButton: 0x10000,\r\n combo: 0x20000,\r\n edit: 0x40000,\r\n sort: 0x80000,\r\n multiSelect: 0x200000,\r\n noSpell: 0x400000\r\n};\r\nconst FIELD_JUSTIFY = {\r\n left: 0,\r\n center: 1,\r\n right: 2\r\n};\r\nconst VALUE_MAP = { value: 'V', defaultValue: 'DV' };\r\nconst FORMAT_SPECIAL = {\r\n zip: '0',\r\n zipPlus4: '1',\r\n zip4: '1',\r\n phone: '2',\r\n ssn: '3'\r\n};\r\nconst FORMAT_DEFAULT = {\r\n number: {\r\n nDec: 0,\r\n sepComma: false,\r\n negStyle: 'MinusBlack',\r\n currency: '',\r\n currencyPrepend: true\r\n },\r\n percent: {\r\n nDec: 0,\r\n sepComma: false\r\n }\r\n};\r\n\r\nexport default {\r\n /**\r\n * Must call if adding AcroForms to a document. Must also call font() before\r\n * this method to set the default font.\r\n */\r\n initForm() {\r\n if (!this._font) {\r\n throw new Error('Must set a font before calling initForm method');\r\n }\r\n this._acroform = {\r\n fonts: {},\r\n defaultFont: this._font.name\r\n };\r\n this._acroform.fonts[this._font.id] = this._font.ref();\r\n\r\n let data = {\r\n Fields: [],\r\n NeedAppearances: true,\r\n DA: new String(`/${this._font.id} 0 Tf 0 g`),\r\n DR: {\r\n Font: {}\r\n }\r\n };\r\n data.DR.Font[this._font.id] = this._font.ref();\r\n const AcroForm = this.ref(data);\r\n this._root.data.AcroForm = AcroForm;\r\n return this;\r\n },\r\n\r\n /**\r\n * Called automatically by document.js\r\n */\r\n endAcroForm() {\r\n if (this._root.data.AcroForm) {\r\n if (\r\n !Object.keys(this._acroform.fonts).length &&\r\n !this._acroform.defaultFont\r\n ) {\r\n throw new Error('No fonts specified for PDF form');\r\n }\r\n let fontDict = this._root.data.AcroForm.data.DR.Font;\r\n Object.keys(this._acroform.fonts).forEach(name => {\r\n fontDict[name] = this._acroform.fonts[name];\r\n });\r\n this._root.data.AcroForm.data.Fields.forEach(fieldRef => {\r\n this._endChild(fieldRef);\r\n });\r\n this._root.data.AcroForm.end();\r\n }\r\n return this;\r\n },\r\n\r\n _endChild(ref) {\r\n if (Array.isArray(ref.data.Kids)) {\r\n ref.data.Kids.forEach(childRef => {\r\n this._endChild(childRef);\r\n });\r\n ref.end();\r\n }\r\n return this;\r\n },\r\n\r\n /**\r\n * Creates and adds a form field to the document. Form fields are intermediate\r\n * nodes in a PDF form that are used to specify form name heirarchy and form\r\n * value defaults.\r\n * @param {string} name - field name (T attribute in field dictionary)\r\n * @param {object} options - other attributes to include in field dictionary\r\n */\r\n formField(name, options = {}) {\r\n let fieldDict = this._fieldDict(name, null, options);\r\n let fieldRef = this.ref(fieldDict);\r\n this._addToParent(fieldRef);\r\n return fieldRef;\r\n },\r\n\r\n /**\r\n * Creates and adds a Form Annotation to the document. Form annotations are\r\n * called Widget annotations internally within a PDF file.\r\n * @param {string} name - form field name (T attribute of widget annotation\r\n * dictionary)\r\n * @param {number} x\r\n * @param {number} y\r\n * @param {number} w\r\n * @param {number} h\r\n * @param {object} options\r\n */\r\n formAnnotation(name, type, x, y, w, h, options = {}) {\r\n let fieldDict = this._fieldDict(name, type, options);\r\n fieldDict.Subtype = 'Widget';\r\n if (fieldDict.F === undefined) {\r\n fieldDict.F = 4; // print the annotation\r\n }\r\n\r\n // Add Field annot to page, and get it's ref\r\n this.annotate(x, y, w, h, fieldDict);\r\n let annotRef = this.page.annotations[this.page.annotations.length - 1];\r\n\r\n return this._addToParent(annotRef);\r\n },\r\n\r\n formText(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'text', x, y, w, h, options);\r\n },\r\n\r\n formPushButton(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'pushButton', x, y, w, h, options);\r\n },\r\n\r\n formCombo(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'combo', x, y, w, h, options);\r\n },\r\n\r\n formList(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'list', x, y, w, h, options);\r\n },\r\n\r\n formRadioButton(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'radioButton', x, y, w, h, options);\r\n },\r\n\r\n formCheckbox(name, x, y, w, h, options = {}) {\r\n return this.formAnnotation(name, 'checkbox', x, y, w, h, options);\r\n },\r\n\r\n _addToParent(fieldRef) {\r\n let parent = fieldRef.data.Parent;\r\n if (parent) {\r\n if (!parent.data.Kids) {\r\n parent.data.Kids = [];\r\n }\r\n parent.data.Kids.push(fieldRef);\r\n } else {\r\n this._root.data.AcroForm.data.Fields.push(fieldRef);\r\n }\r\n return this;\r\n },\r\n\r\n _fieldDict(name, type, options = {}) {\r\n if (!this._acroform) {\r\n throw new Error(\r\n 'Call document.initForms() method before adding form elements to document'\r\n );\r\n }\r\n let opts = Object.assign({}, options);\r\n if (type !== null) {\r\n opts = this._resolveType(type, options);\r\n }\r\n opts = this._resolveFlags(opts);\r\n opts = this._resolveJustify(opts);\r\n opts = this._resolveFont(opts);\r\n opts = this._resolveStrings(opts);\r\n opts = this._resolveColors(opts);\r\n opts = this._resolveFormat(opts);\r\n opts.T = new String(name);\r\n if (opts.parent) {\r\n opts.Parent = opts.parent;\r\n delete opts.parent;\r\n }\r\n return opts;\r\n },\r\n\r\n _resolveType(type, opts) {\r\n if (type === 'text') {\r\n opts.FT = 'Tx';\r\n } else if (type === 'pushButton') {\r\n opts.FT = 'Btn';\r\n opts.pushButton = true;\r\n } else if (type === 'radioButton') {\r\n opts.FT = 'Btn';\r\n opts.radioButton = true;\r\n } else if (type === 'checkbox') {\r\n opts.FT = 'Btn';\r\n } else if (type === 'combo') {\r\n opts.FT = 'Ch';\r\n opts.combo = true;\r\n } else if (type === 'list') {\r\n opts.FT = 'Ch';\r\n } else {\r\n throw new Error(`Invalid form annotation type '${type}'`);\r\n }\r\n return opts;\r\n },\r\n\r\n _resolveFormat(opts) {\r\n const f = opts.format;\r\n if (f && f.type) {\r\n let fnKeystroke;\r\n let fnFormat;\r\n let params = '';\r\n if (FORMAT_SPECIAL[f.type] !== undefined) {\r\n fnKeystroke = `AFSpecial_Keystroke`;\r\n fnFormat = `AFSpecial_Format`;\r\n params = FORMAT_SPECIAL[f.type];\r\n } else {\r\n let format = f.type.charAt(0).toUpperCase() + f.type.slice(1);\r\n fnKeystroke = `AF${format}_Keystroke`;\r\n fnFormat = `AF${format}_Format`;\r\n\r\n if (f.type === 'date') {\r\n fnKeystroke += 'Ex';\r\n params = String(f.param);\r\n } else if (f.type === 'time') {\r\n params = String(f.param);\r\n } else if (f.type === 'number') {\r\n let p = Object.assign({}, FORMAT_DEFAULT.number, f);\r\n params = String(\r\n [\r\n String(p.nDec),\r\n p.sepComma ? '0' : '1',\r\n '\"' + p.negStyle + '\"',\r\n 'null',\r\n '\"' + p.currency + '\"',\r\n String(p.currencyPrepend)\r\n ].join(',')\r\n );\r\n } else if (f.type === 'percent') {\r\n let p = Object.assign({}, FORMAT_DEFAULT.percent, f);\r\n params = String([String(p.nDec), p.sepComma ? '0' : '1'].join(','));\r\n }\r\n }\r\n opts.AA = opts.AA ? opts.AA : {};\r\n opts.AA.K = {\r\n S: 'JavaScript',\r\n JS: new String(`${fnKeystroke}(${params});`)\r\n };\r\n opts.AA.F = {\r\n S: 'JavaScript',\r\n JS: new String(`${fnFormat}(${params});`)\r\n };\r\n }\r\n delete opts.format;\r\n return opts;\r\n },\r\n\r\n _resolveColors(opts) {\r\n let color = this._normalizeColor(opts.backgroundColor);\r\n if (color) {\r\n if (!opts.MK) {\r\n opts.MK = {};\r\n }\r\n opts.MK.BG = color;\r\n }\r\n color = this._normalizeColor(opts.borderColor);\r\n if (color) {\r\n if (!opts.MK) {\r\n opts.MK = {};\r\n }\r\n opts.MK.BC = color;\r\n }\r\n delete opts.backgroundColor;\r\n delete opts.borderColor;\r\n return opts;\r\n },\r\n\r\n _resolveFlags(options) {\r\n let result = 0;\r\n Object.keys(options).forEach(key => {\r\n if (FIELD_FLAGS[key]) {\r\n result |= FIELD_FLAGS[key];\r\n delete options[key];\r\n }\r\n });\r\n if (result !== 0) {\r\n options.Ff = options.Ff ? options.Ff : 0;\r\n options.Ff |= result;\r\n }\r\n return options;\r\n },\r\n\r\n _resolveJustify(options) {\r\n let result = 0;\r\n if (options.align !== undefined) {\r\n if (typeof FIELD_JUSTIFY[options.align] === 'number') {\r\n result = FIELD_JUSTIFY[options.align];\r\n }\r\n delete options.align;\r\n }\r\n if (result !== 0) {\r\n options.Q = result; // default\r\n }\r\n return options;\r\n },\r\n\r\n _resolveFont(options) {\r\n // add current font to document-level AcroForm dict if necessary\r\n if (this._acroform.fonts[this._font.id] === null) {\r\n this._acroform.fonts[this._font.id] = this._font.ref();\r\n }\r\n\r\n // add current font to field's resource dict (RD) if not the default acroform font\r\n if (this._acroform.defaultFont !== this._font.name) {\r\n options.DR = { Font: {} };\r\n\r\n // Get the fontSize option. If not set use auto sizing\r\n const fontSize = options.fontSize || 0;\r\n\r\n options.DR.Font[this._font.id] = this._font.ref();\r\n options.DA = new String(`/${this._font.id} ${fontSize} Tf 0 g`);\r\n }\r\n return options;\r\n },\r\n\r\n _resolveStrings(options) {\r\n let select = [];\r\n function appendChoices(a) {\r\n if (Array.isArray(a)) {\r\n for (let idx = 0; idx < a.length; idx++) {\r\n if (typeof a[idx] === 'string') {\r\n select.push(new String(a[idx]));\r\n } else {\r\n select.push(a[idx]);\r\n }\r\n }\r\n }\r\n }\r\n appendChoices(options.Opt);\r\n if (options.select) {\r\n appendChoices(options.select);\r\n delete options.select;\r\n }\r\n if (select.length) {\r\n options.Opt = select;\r\n }\r\n\r\n Object.keys(VALUE_MAP).forEach(key => {\r\n if (options[key] !== undefined) {\r\n options[VALUE_MAP[key]] = options[key];\r\n delete options[key];\r\n }\r\n });\r\n ['V', 'DV'].forEach(key => {\r\n if (typeof options[key] === 'string') {\r\n options[key] = new String(options[key]);\r\n }\r\n });\r\n\r\n if (options.MK && options.MK.CA) {\r\n options.MK.CA = new String(options.MK.CA);\r\n }\r\n if (options.label) {\r\n options.MK = options.MK ? options.MK : {};\r\n options.MK.CA = new String(options.label);\r\n delete options.label;\r\n }\r\n return options;\r\n }\r\n};\r\n","import fs from 'fs';\r\nimport CryptoJS from 'crypto-js';\r\n\r\nexport default {\r\n /**\r\n * Embed contents of `src` in PDF\r\n * @param {Buffer | ArrayBuffer | string} src input Buffer, ArrayBuffer, base64 encoded string or path to file\r\n * @param {object} options\r\n * * options.name: filename to be shown in PDF, will use `src` if none set\r\n * * options.type: filetype to be shown in PDF\r\n * * options.description: description to be shown in PDF\r\n * * options.hidden: if true, do not add attachment to EmbeddedFiles dictionary. Useful for file attachment annotations\r\n * * options.creationDate: override creation date\r\n * * options.modifiedDate: override modified date\r\n * @returns filespec reference\r\n */\r\n file(src, options = {}) {\r\n options.name = options.name || src;\r\n\r\n const refBody = {\r\n Type: 'EmbeddedFile',\r\n Params: {}\r\n };\r\n let data;\r\n\r\n if (!src) {\r\n throw new Error('No src specified');\r\n }\r\n if (Buffer.isBuffer(src)) {\r\n data = src;\r\n } else if (src instanceof ArrayBuffer) {\r\n data = Buffer.from(new Uint8Array(src));\r\n } else {\r\n let match;\r\n if ((match = /^data:(.*);base64,(.*)$/.exec(src))) {\r\n if (match[1]) {\r\n refBody.Subtype = match[1].replace('/', '#2F');\r\n }\r\n data = Buffer.from(match[2], 'base64');\r\n } else {\r\n data = fs.readFileSync(src);\r\n if (!data) {\r\n throw new Error(`Could not read contents of file at filepath ${src}`);\r\n }\r\n\r\n // update CreationDate and ModDate\r\n const { birthtime, ctime } = fs.statSync(src);\r\n refBody.Params.CreationDate = birthtime;\r\n refBody.Params.ModDate = ctime;\r\n }\r\n }\r\n\r\n // override creation date and modified date\r\n if (options.creationDate instanceof Date) {\r\n refBody.Params.CreationDate = options.creationDate;\r\n }\r\n if (options.modifiedDate instanceof Date) {\r\n refBody.Params.ModDate = options.modifiedDate;\r\n }\r\n // add optional subtype\r\n if (options.type) {\r\n refBody.Subtype = options.type.replace('/', '#2F');\r\n }\r\n\r\n // add checksum and size information\r\n const checksum = CryptoJS.MD5(\r\n CryptoJS.lib.WordArray.create(new Uint8Array(data))\r\n );\r\n refBody.Params.CheckSum = new String(checksum);\r\n refBody.Params.Size = data.byteLength;\r\n\r\n // save some space when embedding the same file again\r\n // if a file with the same name and metadata exists, reuse its reference\r\n let ref;\r\n if (!this._fileRegistry) this._fileRegistry = {};\r\n let file = this._fileRegistry[options.name];\r\n if (file && isEqual(refBody, file)) {\r\n ref = file.ref;\r\n } else {\r\n ref = this.ref(refBody);\r\n ref.end(data);\r\n\r\n this._fileRegistry[options.name] = { ...refBody, ref };\r\n }\r\n // add filespec for embedded file\r\n const fileSpecBody = {\r\n Type: 'Filespec',\r\n F: new String(options.name),\r\n EF: { F: ref },\r\n UF: new String(options.name)\r\n };\r\n if (options.description) {\r\n fileSpecBody.Desc = new String(options.description);\r\n }\r\n const filespec = this.ref(fileSpecBody);\r\n filespec.end();\r\n\r\n if (!options.hidden) {\r\n this.addNamedEmbeddedFile(options.name, filespec);\r\n }\r\n\r\n return filespec;\r\n }\r\n};\r\n\r\n/** check two embedded file metadata objects for equality */\r\nfunction isEqual(a, b) {\r\n return (\r\n a.Subtype === b.Subtype &&\r\n a.Params.CheckSum.toString() === b.Params.CheckSum.toString() &&\r\n a.Params.Size === b.Params.Size &&\r\n a.Params.CreationDate === b.Params.CreationDate &&\r\n a.Params.ModDate === b.Params.ModDate\r\n );\r\n}\r\n","import fs from 'fs';\r\n\r\nexport default {\r\n\r\n initPDFA(pSubset) {\r\n if (pSubset.charAt(pSubset.length - 3) === '-') {\r\n this.subset_conformance = pSubset.charAt(pSubset.length - 1).toUpperCase();\r\n this.subset = parseInt(pSubset.charAt(pSubset.length - 2));\r\n } else {\r\n // Default to Basic conformance when user doesn't specify\r\n this.subset_conformance = 'B';\r\n this.subset = parseInt(pSubset.charAt(pSubset.length - 1));\r\n }\r\n },\r\n\r\n endSubset() {\r\n this._addPdfaMetadata();\r\n const jsPath = `${__dirname}/data/sRGB_IEC61966_2_1.icc`\r\n const jestPath = `${__dirname}/../color_profiles/sRGB_IEC61966_2_1.icc`\r\n this._addColorOutputIntent(fs.existsSync(jsPath) ? jsPath : jestPath);\r\n },\r\n\r\n _addColorOutputIntent(pICCPath) {\r\n const iccProfile = fs.readFileSync(pICCPath);\r\n\r\n const colorProfileRef = this.ref({\r\n Length: iccProfile.length,\r\n N: 3\r\n });\r\n colorProfileRef.write(iccProfile);\r\n colorProfileRef.end();\r\n\r\n const intentRef = this.ref({\r\n Type: 'OutputIntent',\r\n S: 'GTS_PDFA1',\r\n Info: new String('sRGB IEC61966-2.1'),\r\n OutputConditionIdentifier: new String('sRGB IEC61966-2.1'),\r\n DestOutputProfile: colorProfileRef,\r\n });\r\n intentRef.end();\r\n\r\n this._root.data.OutputIntents = [intentRef];\r\n },\r\n\r\n _getPdfaid() {\r\n return `\r\n \r\n ${this.subset}\r\n ${this.subset_conformance}\r\n \r\n `;\r\n },\r\n\r\n _addPdfaMetadata() {\r\n this.appendXML(this._getPdfaid());\r\n },\r\n\r\n}","import PDFA from './pdfa';\r\n\r\nexport default {\r\n _importSubset(subset) {\r\n Object.assign(this, subset)\r\n },\r\n\r\n initSubset(options) {\r\n\r\n switch (options.subset) {\r\n case 'PDF/A-1':\r\n case 'PDF/A-1a':\r\n case 'PDF/A-1b':\r\n case 'PDF/A-2':\r\n case 'PDF/A-2a':\r\n case 'PDF/A-2b':\r\n case 'PDF/A-3':\r\n case 'PDF/A-3a':\r\n case 'PDF/A-3b':\r\n this._importSubset(PDFA);\r\n this.initPDFA(options.subset);\r\n break;\r\n }\r\n }\r\n}","\r\nclass PDFMetadata {\r\n constructor() {\r\n this._metadata = `\r\n \r\n \r\n \r\n `;\r\n }\r\n \r\n _closeTags() {\r\n this._metadata = this._metadata.concat(`\r\n \r\n \r\n \r\n `);\r\n }\r\n\r\n append(xml, newline=true) {\r\n this._metadata = this._metadata.concat(xml); \r\n if (newline)\r\n this._metadata = this._metadata.concat('\\n'); \r\n }\r\n\r\n getXML() { return this._metadata; }\r\n\r\n getLength() { return this._metadata.length; }\r\n\r\n end() {\r\n this._closeTags();\r\n this._metadata = this._metadata.trim();\r\n }\r\n}\r\n\r\nexport default PDFMetadata;","import PDFMetadata from \"../metadata\"\r\n\r\nexport default {\r\n initMetadata() {\r\n this.metadata = new PDFMetadata();\r\n },\r\n\r\n appendXML(xml, newline=true) { this.metadata.append(xml,newline); },\r\n\r\n _addInfo() {\r\n this.appendXML(`\r\n \r\n ${this.info.CreationDate.toISOString().split('.')[0]+\"Z\"}\r\n ${this.info.Creator}\r\n \r\n `\r\n );\r\n\r\n if (this.info.Title || this.info.Author || this.info.Subject) {\r\n this.appendXML(`\r\n \r\n `);\r\n \r\n if (this.info.Title) {\r\n this.appendXML(`\r\n \r\n \r\n ${this.info.Title}\r\n \r\n \r\n `);\r\n }\r\n\r\n if (this.info.Author) {\r\n this.appendXML(`\r\n \r\n \r\n ${this.info.Author}\r\n \r\n \r\n `);\r\n }\r\n\r\n if (this.info.Subject) {\r\n this.appendXML(`\r\n \r\n \r\n ${this.info.Subject}\r\n \r\n \r\n `);\r\n }\r\n\r\n this.appendXML(`\r\n \r\n `);\r\n }\r\n\r\n this.appendXML(`\r\n \r\n ${this.info.Creator}`, false);\r\n\r\n if (this.info.Keywords) {\r\n this.appendXML(`\r\n ${this.info.Keywords}`, false);\r\n }\r\n\r\n this.appendXML(`\r\n \r\n `);\r\n },\r\n\r\n endMetadata() {\r\n this._addInfo();\r\n \r\n this.metadata.end();\r\n\r\n /*\r\n Metadata was introduced in PDF 1.4, so adding it to 1.3 \r\n will likely only take up more space.\r\n */\r\n if (this.version != 1.3) {\r\n this.metadataRef = this.ref({\r\n length: this.metadata.getLength(),\r\n Type: 'Metadata',\r\n Subtype: 'XML'\r\n });\r\n this.metadataRef.compress = false;\r\n this.metadataRef.write(Buffer.from(this.metadata.getXML(), 'utf-8'));\r\n this.metadataRef.end();\r\n this._root.data.Metadata = this.metadataRef;\r\n }\r\n }\r\n}","/*\r\nPDFDocument - represents an entire PDF document\r\nBy Devon Govett\r\n*/\r\n\r\nimport stream from 'stream';\r\nimport fs from 'fs';\r\nimport PDFObject from './object';\r\nimport PDFReference from './reference';\r\nimport PDFPage from './page';\r\nimport PDFNameTree from './name_tree';\r\nimport PDFSecurity from './security';\r\nimport ColorMixin from './mixins/color';\r\nimport VectorMixin from './mixins/vector';\r\nimport FontsMixin from './mixins/fonts';\r\nimport TextMixin from './mixins/text';\r\nimport ImagesMixin from './mixins/images';\r\nimport AnnotationsMixin from './mixins/annotations';\r\nimport OutlineMixin from './mixins/outline';\r\nimport MarkingsMixin from './mixins/markings';\r\nimport AcroFormMixin from './mixins/acroform';\r\nimport AttachmentsMixin from './mixins/attachments';\r\nimport LineWrapper from './line_wrapper';\r\nimport SubsetMixin from './mixins/subsets';\r\nimport MetadataMixin from './mixins/metadata';\r\n\r\nclass PDFDocument extends stream.Readable {\r\n constructor(options = {}) {\r\n super(options);\r\n this.options = options;\r\n\r\n // PDF version\r\n switch (options.pdfVersion) {\r\n case '1.4':\r\n this.version = 1.4;\r\n break;\r\n case '1.5':\r\n this.version = 1.5;\r\n break;\r\n case '1.6':\r\n this.version = 1.6;\r\n break;\r\n case '1.7':\r\n case '1.7ext3':\r\n this.version = 1.7;\r\n break;\r\n default:\r\n this.version = 1.3;\r\n break;\r\n }\r\n\r\n // Whether streams should be compressed\r\n this.compress =\r\n this.options.compress != null ? this.options.compress : true;\r\n\r\n this._pageBuffer = [];\r\n this._pageBufferStart = 0;\r\n\r\n // The PDF object store\r\n this._offsets = [];\r\n this._waiting = 0;\r\n this._ended = false;\r\n this._offset = 0;\r\n const Pages = this.ref({\r\n Type: 'Pages',\r\n Count: 0,\r\n Kids: []\r\n });\r\n\r\n const Names = this.ref({\r\n Dests: new PDFNameTree()\r\n });\r\n\r\n this._root = this.ref({\r\n Type: 'Catalog',\r\n Pages,\r\n Names\r\n });\r\n\r\n if (this.options.lang) {\r\n this._root.data.Lang = new String(this.options.lang);\r\n }\r\n\r\n // The current page\r\n this.page = null;\r\n\r\n // Initialize mixins\r\n this.initMetadata();\r\n this.initColor();\r\n this.initVector();\r\n this.initFonts(options.font);\r\n this.initText();\r\n this.initImages();\r\n this.initOutline();\r\n this.initMarkings(options);\r\n this.initSubset(options);\r\n\r\n // Initialize the metadata\r\n this.info = {\r\n Producer: 'PDFKit',\r\n Creator: 'PDFKit',\r\n CreationDate: new Date()\r\n };\r\n\r\n if (this.options.info) {\r\n for (let key in this.options.info) {\r\n const val = this.options.info[key];\r\n this.info[key] = val;\r\n }\r\n }\r\n\r\n if (this.options.displayTitle) {\r\n this._root.data.ViewerPreferences = this.ref({\r\n DisplayDocTitle: true\r\n });\r\n }\r\n\r\n // Generate file ID\r\n this._id = PDFSecurity.generateFileID(this.info);\r\n\r\n // Initialize security settings\r\n this._security = PDFSecurity.create(this, options);\r\n\r\n // Write the header\r\n // PDF version\r\n this._write(`%PDF-${this.version}`);\r\n\r\n // 4 binary chars, as recommended by the spec\r\n this._write('%\\xFF\\xFF\\xFF\\xFF');\r\n\r\n // Add the first page\r\n if (this.options.autoFirstPage !== false) {\r\n this.addPage();\r\n }\r\n }\r\n\r\n addPage(options) {\r\n if (options == null) {\r\n ({ options } = this);\r\n }\r\n\r\n // end the current page if needed\r\n if (!this.options.bufferPages) {\r\n this.flushPages();\r\n }\r\n\r\n // create a page object\r\n this.page = new PDFPage(this, options);\r\n this._pageBuffer.push(this.page);\r\n\r\n // add the page to the object store\r\n const pages = this._root.data.Pages.data;\r\n pages.Kids.push(this.page.dictionary);\r\n pages.Count++;\r\n\r\n // reset x and y coordinates\r\n this.x = this.page.margins.left;\r\n this.y = this.page.margins.top;\r\n\r\n // flip PDF coordinate system so that the origin is in\r\n // the top left rather than the bottom left\r\n this._ctm = [1, 0, 0, 1, 0, 0];\r\n this.transform(1, 0, 0, -1, 0, this.page.height);\r\n\r\n this.emit('pageAdded');\r\n\r\n return this;\r\n }\r\n\r\n continueOnNewPage(options) {\r\n const pageMarkings = this.endPageMarkings(this.page);\r\n\r\n this.addPage(options);\r\n\r\n this.initPageMarkings(pageMarkings);\r\n\r\n return this;\r\n }\r\n\r\n bufferedPageRange() {\r\n return { start: this._pageBufferStart, count: this._pageBuffer.length };\r\n }\r\n\r\n switchToPage(n) {\r\n let page;\r\n if (!(page = this._pageBuffer[n - this._pageBufferStart])) {\r\n throw new Error(\r\n `switchToPage(${n}) out of bounds, current buffer covers pages ${\r\n this._pageBufferStart\r\n } to ${this._pageBufferStart + this._pageBuffer.length - 1}`\r\n );\r\n }\r\n\r\n return (this.page = page);\r\n }\r\n\r\n flushPages() {\r\n // this local variable exists so we're future-proof against\r\n // reentrant calls to flushPages.\r\n const pages = this._pageBuffer;\r\n this._pageBuffer = [];\r\n this._pageBufferStart += pages.length;\r\n for (let page of pages) {\r\n this.endPageMarkings(page);\r\n page.end();\r\n }\r\n }\r\n\r\n addNamedDestination(name, ...args) {\r\n if (args.length === 0) {\r\n args = ['XYZ', null, null, null];\r\n }\r\n if (args[0] === 'XYZ' && args[2] !== null) {\r\n args[2] = this.page.height - args[2];\r\n }\r\n args.unshift(this.page.dictionary);\r\n this._root.data.Names.data.Dests.add(name, args);\r\n }\r\n\r\n addNamedEmbeddedFile(name, ref) {\r\n if (!this._root.data.Names.data.EmbeddedFiles) {\r\n // disabling /Limits for this tree fixes attachments not showing in Adobe Reader\r\n this._root.data.Names.data.EmbeddedFiles = new PDFNameTree({ limits: false });\r\n }\r\n\r\n // add filespec to EmbeddedFiles\r\n this._root.data.Names.data.EmbeddedFiles.add(name, ref);\r\n }\r\n\r\n addNamedJavaScript(name, js) {\r\n if (!this._root.data.Names.data.JavaScript) {\r\n this._root.data.Names.data.JavaScript = new PDFNameTree();\r\n }\r\n let data = {\r\n JS: new String(js),\r\n S: 'JavaScript'\r\n };\r\n this._root.data.Names.data.JavaScript.add(name, data);\r\n }\r\n\r\n ref(data) {\r\n const ref = new PDFReference(this, this._offsets.length + 1, data);\r\n this._offsets.push(null); // placeholder for this object's offset once it is finalized\r\n this._waiting++;\r\n return ref;\r\n }\r\n\r\n _read() {}\r\n // do nothing, but this method is required by node\r\n\r\n _write(data) {\r\n if (!Buffer.isBuffer(data)) {\r\n data = Buffer.from(data + '\\n', 'binary');\r\n }\r\n\r\n this.push(data);\r\n return (this._offset += data.length);\r\n }\r\n\r\n addContent(data) {\r\n this.page.write(data);\r\n return this;\r\n }\r\n\r\n _refEnd(ref) {\r\n this._offsets[ref.id - 1] = ref.offset;\r\n if (--this._waiting === 0 && this._ended) {\r\n this._finalize();\r\n return (this._ended = false);\r\n }\r\n }\r\n\r\n write(filename, fn) {\r\n // print a deprecation warning with a stacktrace\r\n const err = new Error(`\\\r\nPDFDocument#write is deprecated, and will be removed in a future version of PDFKit. \\\r\nPlease pipe the document into a Node stream.\\\r\n`);\r\n\r\n console.warn(err.stack);\r\n\r\n this.pipe(fs.createWriteStream(filename));\r\n this.end();\r\n return this.once('end', fn);\r\n }\r\n\r\n end() {\r\n this.flushPages();\r\n\r\n this._info = this.ref();\r\n for (let key in this.info) {\r\n let val = this.info[key];\r\n if (typeof val === 'string') {\r\n val = new String(val);\r\n }\r\n\r\n let entry = this.ref(val);\r\n entry.end();\r\n\r\n this._info.data[key] = entry;\r\n }\r\n\r\n this._info.end();\r\n\r\n for (let name in this._fontFamilies) {\r\n const font = this._fontFamilies[name];\r\n font.finalize();\r\n }\r\n\r\n this.endOutline();\r\n this.endMarkings();\r\n\r\n if (this.subset) {\r\n this.endSubset();\r\n }\r\n\r\n this.endMetadata();\r\n\r\n this._root.end();\r\n this._root.data.Pages.end();\r\n this._root.data.Names.end();\r\n this.endAcroForm();\r\n\r\n if (this._root.data.ViewerPreferences) {\r\n this._root.data.ViewerPreferences.end();\r\n }\r\n\r\n if (this._security) {\r\n this._security.end();\r\n }\r\n\r\n if (this._waiting === 0) {\r\n return this._finalize();\r\n } else {\r\n return (this._ended = true);\r\n }\r\n }\r\n\r\n _finalize() {\r\n // generate xref\r\n const xRefOffset = this._offset;\r\n this._write('xref');\r\n this._write(`0 ${this._offsets.length + 1}`);\r\n this._write('0000000000 65535 f ');\r\n\r\n for (let offset of this._offsets) {\r\n offset = `0000000000${offset}`.slice(-10);\r\n this._write(offset + ' 00000 n ');\r\n }\r\n\r\n // trailer\r\n const trailer = {\r\n Size: this._offsets.length + 1,\r\n Root: this._root,\r\n Info: this._info,\r\n ID: [this._id, this._id]\r\n };\r\n if (this._security) {\r\n trailer.Encrypt = this._security.dictionary;\r\n }\r\n\r\n this._write('trailer');\r\n this._write(PDFObject.convert(trailer));\r\n\r\n this._write('startxref');\r\n this._write(`${xRefOffset}`);\r\n this._write('%%EOF');\r\n\r\n // end the stream\r\n return this.push(null);\r\n }\r\n\r\n toString() {\r\n return '[object PDFDocument]';\r\n }\r\n}\r\n\r\nconst mixin = methods => {\r\n Object.assign(PDFDocument.prototype, methods);\r\n};\r\n\r\nmixin(MetadataMixin);\r\nmixin(ColorMixin);\r\nmixin(VectorMixin);\r\nmixin(FontsMixin);\r\nmixin(TextMixin);\r\nmixin(ImagesMixin);\r\nmixin(AnnotationsMixin);\r\nmixin(OutlineMixin);\r\nmixin(MarkingsMixin);\r\nmixin(AcroFormMixin);\r\nmixin(AttachmentsMixin);\r\nmixin(SubsetMixin);\r\n\r\nPDFDocument.LineWrapper = LineWrapper;\r\n\r\nexport default PDFDocument;\r\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../../node_modules/source-map-loader/dist/cjs.js!./pdfMake.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../node_modules/expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"pdfMake\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a51ae424a513ec9a6aa3466baa0cc1d55dd4f3b\n\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nvar _require = require('./internal/errors'),\n _require$codes = _require.codes,\n ERR_AMBIGUOUS_ARGUMENT = _require$codes.ERR_AMBIGUOUS_ARGUMENT,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_INVALID_ARG_VALUE = _require$codes.ERR_INVALID_ARG_VALUE,\n ERR_INVALID_RETURN_VALUE = _require$codes.ERR_INVALID_RETURN_VALUE,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS;\nvar AssertionError = require('./internal/assert/assertion_error');\nvar _require2 = require('util/'),\n inspect = _require2.inspect;\nvar _require$types = require('util/').types,\n isPromise = _require$types.isPromise,\n isRegExp = _require$types.isRegExp;\nvar objectAssign = require('object.assign/polyfill')();\nvar objectIs = require('object-is/polyfill')();\nvar RegExpPrototypeTest = require('call-bind/callBound')('RegExp.prototype.test');\nvar errorCache = new Map();\nvar isDeepEqual;\nvar isDeepStrictEqual;\nvar parseExpressionAt;\nvar findNodeAround;\nvar decoder;\nfunction lazyLoadComparison() {\n var comparison = require('./internal/util/comparisons');\n isDeepEqual = comparison.isDeepEqual;\n isDeepStrictEqual = comparison.isDeepStrictEqual;\n}\n\n// Escape control characters but not \\n and \\t to keep the line breaks and\n// indentation intact.\n// eslint-disable-next-line no-control-regex\nvar escapeSequencesRegExp = /[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]/g;\nvar meta = [\"\\\\u0000\", \"\\\\u0001\", \"\\\\u0002\", \"\\\\u0003\", \"\\\\u0004\", \"\\\\u0005\", \"\\\\u0006\", \"\\\\u0007\", '\\\\b', '', '', \"\\\\u000b\", '\\\\f', '', \"\\\\u000e\", \"\\\\u000f\", \"\\\\u0010\", \"\\\\u0011\", \"\\\\u0012\", \"\\\\u0013\", \"\\\\u0014\", \"\\\\u0015\", \"\\\\u0016\", \"\\\\u0017\", \"\\\\u0018\", \"\\\\u0019\", \"\\\\u001a\", \"\\\\u001b\", \"\\\\u001c\", \"\\\\u001d\", \"\\\\u001e\", \"\\\\u001f\"];\nvar escapeFn = function escapeFn(str) {\n return meta[str.charCodeAt(0)];\n};\nvar warned = false;\n\n// The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\nvar NO_EXCEPTION_SENTINEL = {};\n\n// All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction innerFail(obj) {\n if (obj.message instanceof Error) throw obj.message;\n throw new AssertionError(obj);\n}\nfunction fail(actual, expected, message, operator, stackStartFn) {\n var argsLen = arguments.length;\n var internalMessage;\n if (argsLen === 0) {\n internalMessage = 'Failed';\n } else if (argsLen === 1) {\n message = actual;\n actual = undefined;\n } else {\n if (warned === false) {\n warned = true;\n var warn = process.emitWarning ? process.emitWarning : console.warn.bind(console);\n warn('assert.fail() with more than one argument is deprecated. ' + 'Please use assert.strictEqual() instead or only pass a message.', 'DeprecationWarning', 'DEP0094');\n }\n if (argsLen === 2) operator = '!=';\n }\n if (message instanceof Error) throw message;\n var errArgs = {\n actual: actual,\n expected: expected,\n operator: operator === undefined ? 'fail' : operator,\n stackStartFn: stackStartFn || fail\n };\n if (message !== undefined) {\n errArgs.message = message;\n }\n var err = new AssertionError(errArgs);\n if (internalMessage) {\n err.message = internalMessage;\n err.generatedMessage = true;\n }\n throw err;\n}\nassert.fail = fail;\n\n// The AssertionError is defined in internal/error.\nassert.AssertionError = AssertionError;\nfunction innerOk(fn, argLen, value, message) {\n if (!value) {\n var generatedMessage = false;\n if (argLen === 0) {\n generatedMessage = true;\n message = 'No value argument passed to `assert.ok()`';\n } else if (message instanceof Error) {\n throw message;\n }\n var err = new AssertionError({\n actual: value,\n expected: true,\n message: message,\n operator: '==',\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n}\n\n// Pure assertion tests whether a value is truthy, as determined\n// by !!value.\nfunction ok() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n innerOk.apply(void 0, [ok, args.length].concat(args));\n}\nassert.ok = ok;\n\n// The equality assertion tests shallow, coercive equality with ==.\n/* eslint-disable no-restricted-properties */\nassert.equal = function equal(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n // eslint-disable-next-line eqeqeq\n if (actual != expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '==',\n stackStartFn: equal\n });\n }\n};\n\n// The non-equality assertion tests for whether two objects are not\n// equal with !=.\nassert.notEqual = function notEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n // eslint-disable-next-line eqeqeq\n if (actual == expected) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: '!=',\n stackStartFn: notEqual\n });\n }\n};\n\n// The equivalence assertion tests a deep equality relation.\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n if (!isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepEqual',\n stackStartFn: deepEqual\n });\n }\n};\n\n// The non-equivalence assertion tests for any deep inequality.\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n if (isDeepEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepEqual',\n stackStartFn: notDeepEqual\n });\n }\n};\n/* eslint-enable */\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n if (!isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'deepStrictEqual',\n stackStartFn: deepStrictEqual\n });\n }\n};\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n if (isDeepStrictEqual(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notDeepStrictEqual',\n stackStartFn: notDeepStrictEqual\n });\n }\n}\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (!objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'strictEqual',\n stackStartFn: strictEqual\n });\n }\n};\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (arguments.length < 2) {\n throw new ERR_MISSING_ARGS('actual', 'expected');\n }\n if (objectIs(actual, expected)) {\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: 'notStrictEqual',\n stackStartFn: notStrictEqual\n });\n }\n};\nvar Comparison = /*#__PURE__*/_createClass(function Comparison(obj, keys, actual) {\n var _this = this;\n _classCallCheck(this, Comparison);\n keys.forEach(function (key) {\n if (key in obj) {\n if (actual !== undefined && typeof actual[key] === 'string' && isRegExp(obj[key]) && RegExpPrototypeTest(obj[key], actual[key])) {\n _this[key] = actual[key];\n } else {\n _this[key] = obj[key];\n }\n }\n });\n});\nfunction compareExceptionKey(actual, expected, key, message, keys, fn) {\n if (!(key in actual) || !isDeepStrictEqual(actual[key], expected[key])) {\n if (!message) {\n // Create placeholder objects to create a nice output.\n var a = new Comparison(actual, keys);\n var b = new Comparison(expected, keys, actual);\n var err = new AssertionError({\n actual: a,\n expected: b,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.actual = actual;\n err.expected = expected;\n err.operator = fn.name;\n throw err;\n }\n innerFail({\n actual: actual,\n expected: expected,\n message: message,\n operator: fn.name,\n stackStartFn: fn\n });\n }\n}\nfunction expectedException(actual, expected, msg, fn) {\n if (typeof expected !== 'function') {\n if (isRegExp(expected)) return RegExpPrototypeTest(expected, actual);\n // assert.doesNotThrow does not accept objects.\n if (arguments.length === 2) {\n throw new ERR_INVALID_ARG_TYPE('expected', ['Function', 'RegExp'], expected);\n }\n\n // Handle primitives properly.\n if (_typeof(actual) !== 'object' || actual === null) {\n var err = new AssertionError({\n actual: actual,\n expected: expected,\n message: msg,\n operator: 'deepStrictEqual',\n stackStartFn: fn\n });\n err.operator = fn.name;\n throw err;\n }\n var keys = Object.keys(expected);\n // Special handle errors to make sure the name and the message are compared\n // as well.\n if (expected instanceof Error) {\n keys.push('name', 'message');\n } else if (keys.length === 0) {\n throw new ERR_INVALID_ARG_VALUE('error', expected, 'may not be an empty object');\n }\n if (isDeepEqual === undefined) lazyLoadComparison();\n keys.forEach(function (key) {\n if (typeof actual[key] === 'string' && isRegExp(expected[key]) && RegExpPrototypeTest(expected[key], actual[key])) {\n return;\n }\n compareExceptionKey(actual, expected, key, msg, keys, fn);\n });\n return true;\n }\n // Guard instanceof against arrow functions as they don't have a prototype.\n if (expected.prototype !== undefined && actual instanceof expected) {\n return true;\n }\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n return expected.call({}, actual) === true;\n}\nfunction getActual(fn) {\n if (typeof fn !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('fn', 'Function', fn);\n }\n try {\n fn();\n } catch (e) {\n return e;\n }\n return NO_EXCEPTION_SENTINEL;\n}\nfunction checkIsPromise(obj) {\n // Accept native ES6 promises and promises that are implemented in a similar\n // way. Do not accept thenables that use a function as `obj` and that have no\n // `catch` handler.\n\n // TODO: thenables are checked up until they have the correct methods,\n // but according to documentation, the `then` method should receive\n // the `fulfill` and `reject` arguments as well or it may be never resolved.\n\n return isPromise(obj) || obj !== null && _typeof(obj) === 'object' && typeof obj.then === 'function' && typeof obj.catch === 'function';\n}\nfunction waitForActual(promiseFn) {\n return Promise.resolve().then(function () {\n var resultPromise;\n if (typeof promiseFn === 'function') {\n // Return a rejected promise if `promiseFn` throws synchronously.\n resultPromise = promiseFn();\n // Fail in case no promise is returned.\n if (!checkIsPromise(resultPromise)) {\n throw new ERR_INVALID_RETURN_VALUE('instance of Promise', 'promiseFn', resultPromise);\n }\n } else if (checkIsPromise(promiseFn)) {\n resultPromise = promiseFn;\n } else {\n throw new ERR_INVALID_ARG_TYPE('promiseFn', ['Function', 'Promise'], promiseFn);\n }\n return Promise.resolve().then(function () {\n return resultPromise;\n }).then(function () {\n return NO_EXCEPTION_SENTINEL;\n }).catch(function (e) {\n return e;\n });\n });\n}\nfunction expectsError(stackStartFn, actual, error, message) {\n if (typeof error === 'string') {\n if (arguments.length === 4) {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n if (_typeof(actual) === 'object' && actual !== null) {\n if (actual.message === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error message \\\"\".concat(actual.message, \"\\\" is identical to the message.\"));\n }\n } else if (actual === error) {\n throw new ERR_AMBIGUOUS_ARGUMENT('error/message', \"The error \\\"\".concat(actual, \"\\\" is identical to the message.\"));\n }\n message = error;\n error = undefined;\n } else if (error != null && _typeof(error) !== 'object' && typeof error !== 'function') {\n throw new ERR_INVALID_ARG_TYPE('error', ['Object', 'Error', 'Function', 'RegExp'], error);\n }\n if (actual === NO_EXCEPTION_SENTINEL) {\n var details = '';\n if (error && error.name) {\n details += \" (\".concat(error.name, \")\");\n }\n details += message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'rejects' ? 'rejection' : 'exception';\n innerFail({\n actual: undefined,\n expected: error,\n operator: stackStartFn.name,\n message: \"Missing expected \".concat(fnType).concat(details),\n stackStartFn: stackStartFn\n });\n }\n if (error && !expectedException(actual, error, message, stackStartFn)) {\n throw actual;\n }\n}\nfunction expectsNoError(stackStartFn, actual, error, message) {\n if (actual === NO_EXCEPTION_SENTINEL) return;\n if (typeof error === 'string') {\n message = error;\n error = undefined;\n }\n if (!error || expectedException(actual, error)) {\n var details = message ? \": \".concat(message) : '.';\n var fnType = stackStartFn.name === 'doesNotReject' ? 'rejection' : 'exception';\n innerFail({\n actual: actual,\n expected: error,\n operator: stackStartFn.name,\n message: \"Got unwanted \".concat(fnType).concat(details, \"\\n\") + \"Actual message: \\\"\".concat(actual && actual.message, \"\\\"\"),\n stackStartFn: stackStartFn\n });\n }\n throw actual;\n}\nassert.throws = function throws(promiseFn) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n expectsError.apply(void 0, [throws, getActual(promiseFn)].concat(args));\n};\nassert.rejects = function rejects(promiseFn) {\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return waitForActual(promiseFn).then(function (result) {\n return expectsError.apply(void 0, [rejects, result].concat(args));\n });\n};\nassert.doesNotThrow = function doesNotThrow(fn) {\n for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {\n args[_key4 - 1] = arguments[_key4];\n }\n expectsNoError.apply(void 0, [doesNotThrow, getActual(fn)].concat(args));\n};\nassert.doesNotReject = function doesNotReject(fn) {\n for (var _len5 = arguments.length, args = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {\n args[_key5 - 1] = arguments[_key5];\n }\n return waitForActual(fn).then(function (result) {\n return expectsNoError.apply(void 0, [doesNotReject, result].concat(args));\n });\n};\nassert.ifError = function ifError(err) {\n if (err !== null && err !== undefined) {\n var message = 'ifError got unwanted exception: ';\n if (_typeof(err) === 'object' && typeof err.message === 'string') {\n if (err.message.length === 0 && err.constructor) {\n message += err.constructor.name;\n } else {\n message += err.message;\n }\n } else {\n message += inspect(err);\n }\n var newErr = new AssertionError({\n actual: err,\n expected: null,\n operator: 'ifError',\n message: message,\n stackStartFn: ifError\n });\n\n // Make sure we actually have a stack trace!\n var origStack = err.stack;\n if (typeof origStack === 'string') {\n // This will remove any duplicated frames from the error frames taken\n // from within `ifError` and add the original error frames to the newly\n // created ones.\n var tmp2 = origStack.split('\\n');\n tmp2.shift();\n // Filter all frames existing in err.stack.\n var tmp1 = newErr.stack.split('\\n');\n for (var i = 0; i < tmp2.length; i++) {\n // Find the first occurrence of the frame.\n var pos = tmp1.indexOf(tmp2[i]);\n if (pos !== -1) {\n // Only keep new frames.\n tmp1 = tmp1.slice(0, pos);\n break;\n }\n }\n newErr.stack = \"\".concat(tmp1.join('\\n'), \"\\n\").concat(tmp2.join('\\n'));\n }\n throw newErr;\n }\n};\n\n// Currently in sync with Node.js lib/assert.js\n// https://github.com/nodejs/node/commit/2a871df3dfb8ea663ef5e1f8f62701ec51384ecb\nfunction internalMatch(string, regexp, message, fn, fnName) {\n if (!isRegExp(regexp)) {\n throw new ERR_INVALID_ARG_TYPE('regexp', 'RegExp', regexp);\n }\n var match = fnName === 'match';\n if (typeof string !== 'string' || RegExpPrototypeTest(regexp, string) !== match) {\n if (message instanceof Error) {\n throw message;\n }\n var generatedMessage = !message;\n\n // 'The input was expected to not match the regular expression ' +\n message = message || (typeof string !== 'string' ? 'The \"string\" argument must be of type string. Received type ' + \"\".concat(_typeof(string), \" (\").concat(inspect(string), \")\") : (match ? 'The input did not match the regular expression ' : 'The input was expected to not match the regular expression ') + \"\".concat(inspect(regexp), \". Input:\\n\\n\").concat(inspect(string), \"\\n\"));\n var err = new AssertionError({\n actual: string,\n expected: regexp,\n message: message,\n operator: fnName,\n stackStartFn: fn\n });\n err.generatedMessage = generatedMessage;\n throw err;\n }\n}\nassert.match = function match(string, regexp, message) {\n internalMatch(string, regexp, message, match, 'match');\n};\nassert.doesNotMatch = function doesNotMatch(string, regexp, message) {\n internalMatch(string, regexp, message, doesNotMatch, 'doesNotMatch');\n};\n\n// Expose a strict only variant of assert\nfunction strict() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n innerOk.apply(void 0, [strict, args.length].concat(args));\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;","// Currently in sync with Node.js lib/internal/assert/assertion_error.js\n// https://github.com/nodejs/node/commit/0817840f775032169ddd70c85ac059f18ffcc81c\n\n'use strict';\n\nfunction ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }\nfunction _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct.bind(); } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar _require = require('util/'),\n inspect = _require.inspect;\nvar _require2 = require('../errors'),\n ERR_INVALID_ARG_TYPE = _require2.codes.ERR_INVALID_ARG_TYPE;\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n return str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/repeat\nfunction repeat(str, count) {\n count = Math.floor(count);\n if (str.length == 0 || count == 0) return '';\n var maxCount = str.length * count;\n count = Math.floor(Math.log(count) / Math.log(2));\n while (count) {\n str += str;\n count--;\n }\n str += str.substring(0, maxCount - str.length);\n return str;\n}\nvar blue = '';\nvar green = '';\nvar red = '';\nvar white = '';\nvar kReadableOperator = {\n deepStrictEqual: 'Expected values to be strictly deep-equal:',\n strictEqual: 'Expected values to be strictly equal:',\n strictEqualObject: 'Expected \"actual\" to be reference-equal to \"expected\":',\n deepEqual: 'Expected values to be loosely deep-equal:',\n equal: 'Expected values to be loosely equal:',\n notDeepStrictEqual: 'Expected \"actual\" not to be strictly deep-equal to:',\n notStrictEqual: 'Expected \"actual\" to be strictly unequal to:',\n notStrictEqualObject: 'Expected \"actual\" not to be reference-equal to \"expected\":',\n notDeepEqual: 'Expected \"actual\" not to be loosely deep-equal to:',\n notEqual: 'Expected \"actual\" to be loosely unequal to:',\n notIdentical: 'Values identical but not reference-equal:'\n};\n\n// Comparing short primitives should just show === / !== instead of using the\n// diff.\nvar kMaxShortLength = 10;\nfunction copyError(source) {\n var keys = Object.keys(source);\n var target = Object.create(Object.getPrototypeOf(source));\n keys.forEach(function (key) {\n target[key] = source[key];\n });\n Object.defineProperty(target, 'message', {\n value: source.message\n });\n return target;\n}\nfunction inspectValue(val) {\n // The util.inspect default values could be changed. This makes sure the\n // error messages contain the necessary information nevertheless.\n return inspect(val, {\n compact: false,\n customInspect: false,\n depth: 1000,\n maxArrayLength: Infinity,\n // Assert compares only enumerable properties (with a few exceptions).\n showHidden: false,\n // Having a long line as error is better than wrapping the line for\n // comparison for now.\n // TODO(BridgeAR): `breakLength` should be limited as soon as soon as we\n // have meta information about the inspected properties (i.e., know where\n // in what line the property starts and ends).\n breakLength: Infinity,\n // Assert does not detect proxies currently.\n showProxy: false,\n sorted: true,\n // Inspect getters as we also check them when comparing entries.\n getters: true\n });\n}\nfunction createErrDiff(actual, expected, operator) {\n var other = '';\n var res = '';\n var lastPos = 0;\n var end = '';\n var skipped = false;\n var actualInspected = inspectValue(actual);\n var actualLines = actualInspected.split('\\n');\n var expectedLines = inspectValue(expected).split('\\n');\n var i = 0;\n var indicator = '';\n\n // In case both values are objects explicitly mark them as not reference equal\n // for the `strictEqual` operator.\n if (operator === 'strictEqual' && _typeof(actual) === 'object' && _typeof(expected) === 'object' && actual !== null && expected !== null) {\n operator = 'strictEqualObject';\n }\n\n // If \"actual\" and \"expected\" fit on a single line and they are not strictly\n // equal, check further special handling.\n if (actualLines.length === 1 && expectedLines.length === 1 && actualLines[0] !== expectedLines[0]) {\n var inputLength = actualLines[0].length + expectedLines[0].length;\n // If the character length of \"actual\" and \"expected\" together is less than\n // kMaxShortLength and if neither is an object and at least one of them is\n // not `zero`, use the strict equal comparison to visualize the output.\n if (inputLength <= kMaxShortLength) {\n if ((_typeof(actual) !== 'object' || actual === null) && (_typeof(expected) !== 'object' || expected === null) && (actual !== 0 || expected !== 0)) {\n // -0 === +0\n return \"\".concat(kReadableOperator[operator], \"\\n\\n\") + \"\".concat(actualLines[0], \" !== \").concat(expectedLines[0], \"\\n\");\n }\n } else if (operator !== 'strictEqualObject') {\n // If the stderr is a tty and the input length is lower than the current\n // columns per line, add a mismatch indicator below the output. If it is\n // not a tty, use a default value of 80 characters.\n var maxLength = process.stderr && process.stderr.isTTY ? process.stderr.columns : 80;\n if (inputLength < maxLength) {\n while (actualLines[0][i] === expectedLines[0][i]) {\n i++;\n }\n // Ignore the first characters.\n if (i > 2) {\n // Add position indicator for the first mismatch in case it is a\n // single line and the input length is less than the column length.\n indicator = \"\\n \".concat(repeat(' ', i), \"^\");\n i = 0;\n }\n }\n }\n }\n\n // Remove all ending lines that match (this optimizes the output for\n // readability by reducing the number of total changed lines).\n var a = actualLines[actualLines.length - 1];\n var b = expectedLines[expectedLines.length - 1];\n while (a === b) {\n if (i++ < 2) {\n end = \"\\n \".concat(a).concat(end);\n } else {\n other = a;\n }\n actualLines.pop();\n expectedLines.pop();\n if (actualLines.length === 0 || expectedLines.length === 0) break;\n a = actualLines[actualLines.length - 1];\n b = expectedLines[expectedLines.length - 1];\n }\n var maxLines = Math.max(actualLines.length, expectedLines.length);\n // Strict equal with identical objects that are not identical by reference.\n // E.g., assert.deepStrictEqual({ a: Symbol() }, { a: Symbol() })\n if (maxLines === 0) {\n // We have to get the result again. The lines were all removed before.\n var _actualLines = actualInspected.split('\\n');\n\n // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n if (_actualLines.length > 30) {\n _actualLines[26] = \"\".concat(blue, \"...\").concat(white);\n while (_actualLines.length > 27) {\n _actualLines.pop();\n }\n }\n return \"\".concat(kReadableOperator.notIdentical, \"\\n\\n\").concat(_actualLines.join('\\n'), \"\\n\");\n }\n if (i > 3) {\n end = \"\\n\".concat(blue, \"...\").concat(white).concat(end);\n skipped = true;\n }\n if (other !== '') {\n end = \"\\n \".concat(other).concat(end);\n other = '';\n }\n var printedLines = 0;\n var msg = kReadableOperator[operator] + \"\\n\".concat(green, \"+ actual\").concat(white, \" \").concat(red, \"- expected\").concat(white);\n var skippedMsg = \" \".concat(blue, \"...\").concat(white, \" Lines skipped\");\n for (i = 0; i < maxLines; i++) {\n // Only extra expected lines exist\n var cur = i - lastPos;\n if (actualLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(expectedLines[i - 2]);\n printedLines++;\n }\n res += \"\\n \".concat(expectedLines[i - 1]);\n printedLines++;\n }\n // Mark the current line as the last diverging one.\n lastPos = i;\n // Add the expected line to the cache.\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLines[i]);\n printedLines++;\n // Only extra actual lines exist\n } else if (expectedLines.length < i + 1) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n }\n // Mark the current line as the last diverging one.\n lastPos = i;\n // Add the actual line to the result.\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLines[i]);\n printedLines++;\n // Lines diverge\n } else {\n var expectedLine = expectedLines[i];\n var actualLine = actualLines[i];\n // If the lines diverge, specifically check for lines that only diverge by\n // a trailing comma. In that case it is actually identical and we should\n // mark it as such.\n var divergingLines = actualLine !== expectedLine && (!endsWith(actualLine, ',') || actualLine.slice(0, -1) !== expectedLine);\n // If the expected line has a trailing comma but is otherwise identical,\n // add a comma at the end of the actual line. Otherwise the output could\n // look weird as in:\n //\n // [\n // 1 // No comma at the end!\n // + 2\n // ]\n //\n if (divergingLines && endsWith(expectedLine, ',') && expectedLine.slice(0, -1) === actualLine) {\n divergingLines = false;\n actualLine += ',';\n }\n if (divergingLines) {\n // If the last diverging line is more than one line above and the\n // current line is at least line three, add some of the former lines and\n // also add dots to indicate skipped entries.\n if (cur > 1 && i > 2) {\n if (cur > 4) {\n res += \"\\n\".concat(blue, \"...\").concat(white);\n skipped = true;\n } else if (cur > 3) {\n res += \"\\n \".concat(actualLines[i - 2]);\n printedLines++;\n }\n res += \"\\n \".concat(actualLines[i - 1]);\n printedLines++;\n }\n // Mark the current line as the last diverging one.\n lastPos = i;\n // Add the actual line to the result and cache the expected diverging\n // line so consecutive diverging lines show up as +++--- and not +-+-+-.\n res += \"\\n\".concat(green, \"+\").concat(white, \" \").concat(actualLine);\n other += \"\\n\".concat(red, \"-\").concat(white, \" \").concat(expectedLine);\n printedLines += 2;\n // Lines are identical\n } else {\n // Add all cached information to the result before adding other things\n // and reset the cache.\n res += other;\n other = '';\n // If the last diverging line is exactly one line above or if it is the\n // very first line, add the line to the result.\n if (cur === 1 || i === 0) {\n res += \"\\n \".concat(actualLine);\n printedLines++;\n }\n }\n }\n // Inspected object to big (Show ~20 rows max)\n if (printedLines > 20 && i < maxLines - 2) {\n return \"\".concat(msg).concat(skippedMsg, \"\\n\").concat(res, \"\\n\").concat(blue, \"...\").concat(white).concat(other, \"\\n\") + \"\".concat(blue, \"...\").concat(white);\n }\n }\n return \"\".concat(msg).concat(skipped ? skippedMsg : '', \"\\n\").concat(res).concat(other).concat(end).concat(indicator);\n}\nvar AssertionError = /*#__PURE__*/function (_Error, _inspect$custom) {\n _inherits(AssertionError, _Error);\n var _super = _createSuper(AssertionError);\n function AssertionError(options) {\n var _this;\n _classCallCheck(this, AssertionError);\n if (_typeof(options) !== 'object' || options === null) {\n throw new ERR_INVALID_ARG_TYPE('options', 'Object', options);\n }\n var message = options.message,\n operator = options.operator,\n stackStartFn = options.stackStartFn;\n var actual = options.actual,\n expected = options.expected;\n var limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 0;\n if (message != null) {\n _this = _super.call(this, String(message));\n } else {\n if (process.stderr && process.stderr.isTTY) {\n // Reset on each call to make sure we handle dynamically set environment\n // variables correct.\n if (process.stderr && process.stderr.getColorDepth && process.stderr.getColorDepth() !== 1) {\n blue = \"\\x1B[34m\";\n green = \"\\x1B[32m\";\n white = \"\\x1B[39m\";\n red = \"\\x1B[31m\";\n } else {\n blue = '';\n green = '';\n white = '';\n red = '';\n }\n }\n // Prevent the error stack from being visible by duplicating the error\n // in a very close way to the original in case both sides are actually\n // instances of Error.\n if (_typeof(actual) === 'object' && actual !== null && _typeof(expected) === 'object' && expected !== null && 'stack' in actual && actual instanceof Error && 'stack' in expected && expected instanceof Error) {\n actual = copyError(actual);\n expected = copyError(expected);\n }\n if (operator === 'deepStrictEqual' || operator === 'strictEqual') {\n _this = _super.call(this, createErrDiff(actual, expected, operator));\n } else if (operator === 'notDeepStrictEqual' || operator === 'notStrictEqual') {\n // In case the objects are equal but the operator requires unequal, show\n // the first object and say A equals B\n var base = kReadableOperator[operator];\n var res = inspectValue(actual).split('\\n');\n\n // In case \"actual\" is an object, it should not be reference equal.\n if (operator === 'notStrictEqual' && _typeof(actual) === 'object' && actual !== null) {\n base = kReadableOperator.notStrictEqualObject;\n }\n\n // Only remove lines in case it makes sense to collapse those.\n // TODO: Accept env to always show the full error.\n if (res.length > 30) {\n res[26] = \"\".concat(blue, \"...\").concat(white);\n while (res.length > 27) {\n res.pop();\n }\n }\n\n // Only print a single input.\n if (res.length === 1) {\n _this = _super.call(this, \"\".concat(base, \" \").concat(res[0]));\n } else {\n _this = _super.call(this, \"\".concat(base, \"\\n\\n\").concat(res.join('\\n'), \"\\n\"));\n }\n } else {\n var _res = inspectValue(actual);\n var other = '';\n var knownOperators = kReadableOperator[operator];\n if (operator === 'notDeepEqual' || operator === 'notEqual') {\n _res = \"\".concat(kReadableOperator[operator], \"\\n\\n\").concat(_res);\n if (_res.length > 1024) {\n _res = \"\".concat(_res.slice(0, 1021), \"...\");\n }\n } else {\n other = \"\".concat(inspectValue(expected));\n if (_res.length > 512) {\n _res = \"\".concat(_res.slice(0, 509), \"...\");\n }\n if (other.length > 512) {\n other = \"\".concat(other.slice(0, 509), \"...\");\n }\n if (operator === 'deepEqual' || operator === 'equal') {\n _res = \"\".concat(knownOperators, \"\\n\\n\").concat(_res, \"\\n\\nshould equal\\n\\n\");\n } else {\n other = \" \".concat(operator, \" \").concat(other);\n }\n }\n _this = _super.call(this, \"\".concat(_res).concat(other));\n }\n }\n Error.stackTraceLimit = limit;\n _this.generatedMessage = !message;\n Object.defineProperty(_assertThisInitialized(_this), 'name', {\n value: 'AssertionError [ERR_ASSERTION]',\n enumerable: false,\n writable: true,\n configurable: true\n });\n _this.code = 'ERR_ASSERTION';\n _this.actual = actual;\n _this.expected = expected;\n _this.operator = operator;\n if (Error.captureStackTrace) {\n // eslint-disable-next-line no-restricted-syntax\n Error.captureStackTrace(_assertThisInitialized(_this), stackStartFn);\n }\n // Create error message including the error code in the name.\n _this.stack;\n // Reset the name.\n _this.name = 'AssertionError';\n return _possibleConstructorReturn(_this);\n }\n _createClass(AssertionError, [{\n key: \"toString\",\n value: function toString() {\n return \"\".concat(this.name, \" [\").concat(this.code, \"]: \").concat(this.message);\n }\n }, {\n key: _inspect$custom,\n value: function value(recurseTimes, ctx) {\n // This limits the `actual` and `expected` property default inspection to\n // the minimum depth. Otherwise those values would be too verbose compared\n // to the actual error message which contains a combined view of these two\n // input values.\n return inspect(this, _objectSpread(_objectSpread({}, ctx), {}, {\n customInspect: false,\n depth: 0\n }));\n }\n }]);\n return AssertionError;\n}( /*#__PURE__*/_wrapNativeSuper(Error), inspect.custom);\nmodule.exports = AssertionError;","// Currently in sync with Node.js lib/internal/errors.js\n// https://github.com/nodejs/node/commit/3b044962c48fe313905877a96b5d0894a5404f6f\n\n/* eslint node-core/documented-errors: \"error\" */\n/* eslint node-core/alphabetize-errors: \"error\" */\n/* eslint node-core/prefer-util-format-errors: \"error\" */\n\n'use strict';\n\n// The whole point behind this internal module is to allow Node.js to no\n// longer be forced to treat every error message change as a semver-major\n// change. The NodeError classes here all expose a `code` property whose\n// value statically and permanently identifies the error. While the error\n// message may change, the code should not.\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return _typeof(key) === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (_typeof(input) !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (_typeof(res) !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, \"prototype\", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } else if (call !== void 0) { throw new TypeError(\"Derived constructors may only return object or undefined\"); } return _assertThisInitialized(self); }\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\nvar codes = {};\n\n// Lazy loaded\nvar assert;\nvar util;\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n var NodeError = /*#__PURE__*/function (_Base) {\n _inherits(NodeError, _Base);\n var _super = _createSuper(NodeError);\n function NodeError(arg1, arg2, arg3) {\n var _this;\n _classCallCheck(this, NodeError);\n _this = _super.call(this, getMessage(arg1, arg2, arg3));\n _this.code = code;\n return _this;\n }\n return _createClass(NodeError);\n }(Base);\n codes[code] = NodeError;\n}\n\n// https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n return str.substring(this_len - search.length, this_len) === search;\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\ncreateErrorType('ERR_AMBIGUOUS_ARGUMENT', 'The \"%s\" argument is ambiguous. %s', TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n if (assert === undefined) assert = require('../assert');\n assert(typeof name === 'string', \"'name' must be a string\");\n\n // determiner: 'must be' or 'must not be'\n var determiner;\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n var msg;\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n // TODO(BridgeAR): Improve the output by showing `null` and similar.\n msg += \". Received type \".concat(_typeof(actual));\n return msg;\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_VALUE', function (name, value) {\n var reason = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'is invalid';\n if (util === undefined) util = require('util/');\n var inspected = util.inspect(value);\n if (inspected.length > 128) {\n inspected = \"\".concat(inspected.slice(0, 128), \"...\");\n }\n return \"The argument '\".concat(name, \"' \").concat(reason, \". Received \").concat(inspected);\n}, TypeError, RangeError);\ncreateErrorType('ERR_INVALID_RETURN_VALUE', function (input, name, value) {\n var type;\n if (value && value.constructor && value.constructor.name) {\n type = \"instance of \".concat(value.constructor.name);\n } else {\n type = \"type \".concat(_typeof(value));\n }\n return \"Expected \".concat(input, \" to be returned from the \\\"\").concat(name, \"\\\"\") + \" function but got \".concat(type, \".\");\n}, TypeError);\ncreateErrorType('ERR_MISSING_ARGS', function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (assert === undefined) assert = require('../assert');\n assert(args.length > 0, 'At least one arg needs to be specified');\n var msg = 'The ';\n var len = args.length;\n args = args.map(function (a) {\n return \"\\\"\".concat(a, \"\\\"\");\n });\n switch (len) {\n case 1:\n msg += \"\".concat(args[0], \" argument\");\n break;\n case 2:\n msg += \"\".concat(args[0], \" and \").concat(args[1], \" arguments\");\n break;\n default:\n msg += args.slice(0, len - 1).join(', ');\n msg += \", and \".concat(args[len - 1], \" arguments\");\n break;\n }\n return \"\".concat(msg, \" must be specified\");\n}, TypeError);\nmodule.exports.codes = codes;","// Currently in sync with Node.js lib/internal/util/comparisons.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nvar regexFlagsSupported = /a/g.flags !== undefined;\nvar arrayFromSet = function arrayFromSet(set) {\n var array = [];\n set.forEach(function (value) {\n return array.push(value);\n });\n return array;\n};\nvar arrayFromMap = function arrayFromMap(map) {\n var array = [];\n map.forEach(function (value, key) {\n return array.push([key, value]);\n });\n return array;\n};\nvar objectIs = Object.is ? Object.is : require('object-is');\nvar objectGetOwnPropertySymbols = Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols : function () {\n return [];\n};\nvar numberIsNaN = Number.isNaN ? Number.isNaN : require('is-nan');\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\nvar hasOwnProperty = uncurryThis(Object.prototype.hasOwnProperty);\nvar propertyIsEnumerable = uncurryThis(Object.prototype.propertyIsEnumerable);\nvar objectToString = uncurryThis(Object.prototype.toString);\nvar _require$types = require('util/').types,\n isAnyArrayBuffer = _require$types.isAnyArrayBuffer,\n isArrayBufferView = _require$types.isArrayBufferView,\n isDate = _require$types.isDate,\n isMap = _require$types.isMap,\n isRegExp = _require$types.isRegExp,\n isSet = _require$types.isSet,\n isNativeError = _require$types.isNativeError,\n isBoxedPrimitive = _require$types.isBoxedPrimitive,\n isNumberObject = _require$types.isNumberObject,\n isStringObject = _require$types.isStringObject,\n isBooleanObject = _require$types.isBooleanObject,\n isBigIntObject = _require$types.isBigIntObject,\n isSymbolObject = _require$types.isSymbolObject,\n isFloat32Array = _require$types.isFloat32Array,\n isFloat64Array = _require$types.isFloat64Array;\nfunction isNonIndex(key) {\n if (key.length === 0 || key.length > 10) return true;\n for (var i = 0; i < key.length; i++) {\n var code = key.charCodeAt(i);\n if (code < 48 || code > 57) return true;\n }\n // The maximum size for an array is 2 ** 32 -1.\n return key.length === 10 && key >= Math.pow(2, 32);\n}\nfunction getOwnNonIndexProperties(value) {\n return Object.keys(value).filter(isNonIndex).concat(objectGetOwnPropertySymbols(value).filter(Object.prototype.propertyIsEnumerable.bind(value)));\n}\n\n// Taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n var x = a.length;\n var y = b.length;\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nvar ONLY_ENUMERABLE = undefined;\nvar kStrict = true;\nvar kLoose = false;\nvar kNoIterator = 0;\nvar kIsArray = 1;\nvar kIsSet = 2;\nvar kIsMap = 3;\n\n// Check if they have the same source and flags\nfunction areSimilarRegExps(a, b) {\n return regexFlagsSupported ? a.source === b.source && a.flags === b.flags : RegExp.prototype.toString.call(a) === RegExp.prototype.toString.call(b);\n}\nfunction areSimilarFloatArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n for (var offset = 0; offset < a.byteLength; offset++) {\n if (a[offset] !== b[offset]) {\n return false;\n }\n }\n return true;\n}\nfunction areSimilarTypedArrays(a, b) {\n if (a.byteLength !== b.byteLength) {\n return false;\n }\n return compare(new Uint8Array(a.buffer, a.byteOffset, a.byteLength), new Uint8Array(b.buffer, b.byteOffset, b.byteLength)) === 0;\n}\nfunction areEqualArrayBuffers(buf1, buf2) {\n return buf1.byteLength === buf2.byteLength && compare(new Uint8Array(buf1), new Uint8Array(buf2)) === 0;\n}\nfunction isEqualBoxedPrimitive(val1, val2) {\n if (isNumberObject(val1)) {\n return isNumberObject(val2) && objectIs(Number.prototype.valueOf.call(val1), Number.prototype.valueOf.call(val2));\n }\n if (isStringObject(val1)) {\n return isStringObject(val2) && String.prototype.valueOf.call(val1) === String.prototype.valueOf.call(val2);\n }\n if (isBooleanObject(val1)) {\n return isBooleanObject(val2) && Boolean.prototype.valueOf.call(val1) === Boolean.prototype.valueOf.call(val2);\n }\n if (isBigIntObject(val1)) {\n return isBigIntObject(val2) && BigInt.prototype.valueOf.call(val1) === BigInt.prototype.valueOf.call(val2);\n }\n return isSymbolObject(val2) && Symbol.prototype.valueOf.call(val1) === Symbol.prototype.valueOf.call(val2);\n}\n\n// Notes: Type tags are historical [[Class]] properties that can be set by\n// FunctionTemplate::SetClassName() in C++ or Symbol.toStringTag in JS\n// and retrieved using Object.prototype.toString.call(obj) in JS\n// See https://tc39.github.io/ecma262/#sec-object.prototype.tostring\n// for a list of tags pre-defined in the spec.\n// There are some unspecified tags in the wild too (e.g. typed array tags).\n// Since tags can be altered, they only serve fast failures\n//\n// Typed arrays and buffers are checked by comparing the content in their\n// underlying ArrayBuffer. This optimization requires that it's\n// reasonable to interpret their underlying memory in the same way,\n// which is checked by comparing their type tags.\n// (e.g. a Uint8Array and a Uint16Array with the same memory content\n// could still be different because they will be interpreted differently).\n//\n// For strict comparison, objects should have\n// a) The same built-in type tags\n// b) The same prototypes.\n\nfunction innerDeepEqual(val1, val2, strict, memos) {\n // All identical values are equivalent, as determined by ===.\n if (val1 === val2) {\n if (val1 !== 0) return true;\n return strict ? objectIs(val1, val2) : true;\n }\n\n // Check more closely if val1 and val2 are equal.\n if (strict) {\n if (_typeof(val1) !== 'object') {\n return typeof val1 === 'number' && numberIsNaN(val1) && numberIsNaN(val2);\n }\n if (_typeof(val2) !== 'object' || val1 === null || val2 === null) {\n return false;\n }\n if (Object.getPrototypeOf(val1) !== Object.getPrototypeOf(val2)) {\n return false;\n }\n } else {\n if (val1 === null || _typeof(val1) !== 'object') {\n if (val2 === null || _typeof(val2) !== 'object') {\n // eslint-disable-next-line eqeqeq\n return val1 == val2;\n }\n return false;\n }\n if (val2 === null || _typeof(val2) !== 'object') {\n return false;\n }\n }\n var val1Tag = objectToString(val1);\n var val2Tag = objectToString(val2);\n if (val1Tag !== val2Tag) {\n return false;\n }\n if (Array.isArray(val1)) {\n // Check for sparse arrays and general fast path\n if (val1.length !== val2.length) {\n return false;\n }\n var keys1 = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n if (keys1.length !== keys2.length) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kIsArray, keys1);\n }\n // [browserify] This triggers on certain types in IE (Map/Set) so we don't\n // wan't to early return out of the rest of the checks. However we can check\n // if the second value is one of these values and the first isn't.\n if (val1Tag === '[object Object]') {\n // return keyCheck(val1, val2, strict, memos, kNoIterator);\n if (!isMap(val1) && isMap(val2) || !isSet(val1) && isSet(val2)) {\n return false;\n }\n }\n if (isDate(val1)) {\n if (!isDate(val2) || Date.prototype.getTime.call(val1) !== Date.prototype.getTime.call(val2)) {\n return false;\n }\n } else if (isRegExp(val1)) {\n if (!isRegExp(val2) || !areSimilarRegExps(val1, val2)) {\n return false;\n }\n } else if (isNativeError(val1) || val1 instanceof Error) {\n // Do not compare the stack as it might differ even though the error itself\n // is otherwise identical.\n if (val1.message !== val2.message || val1.name !== val2.name) {\n return false;\n }\n } else if (isArrayBufferView(val1)) {\n if (!strict && (isFloat32Array(val1) || isFloat64Array(val1))) {\n if (!areSimilarFloatArrays(val1, val2)) {\n return false;\n }\n } else if (!areSimilarTypedArrays(val1, val2)) {\n return false;\n }\n // Buffer.compare returns true, so val1.length === val2.length. If they both\n // only contain numeric keys, we don't need to exam further than checking\n // the symbols.\n var _keys = getOwnNonIndexProperties(val1, ONLY_ENUMERABLE);\n var _keys2 = getOwnNonIndexProperties(val2, ONLY_ENUMERABLE);\n if (_keys.length !== _keys2.length) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kNoIterator, _keys);\n } else if (isSet(val1)) {\n if (!isSet(val2) || val1.size !== val2.size) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kIsSet);\n } else if (isMap(val1)) {\n if (!isMap(val2) || val1.size !== val2.size) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kIsMap);\n } else if (isAnyArrayBuffer(val1)) {\n if (!areEqualArrayBuffers(val1, val2)) {\n return false;\n }\n } else if (isBoxedPrimitive(val1) && !isEqualBoxedPrimitive(val1, val2)) {\n return false;\n }\n return keyCheck(val1, val2, strict, memos, kNoIterator);\n}\nfunction getEnumerables(val, keys) {\n return keys.filter(function (k) {\n return propertyIsEnumerable(val, k);\n });\n}\nfunction keyCheck(val1, val2, strict, memos, iterationType, aKeys) {\n // For all remaining Object pairs, including Array, objects and Maps,\n // equivalence is determined by having:\n // a) The same number of owned enumerable properties\n // b) The same set of keys/indexes (although not necessarily the same order)\n // c) Equivalent values for every corresponding key/index\n // d) For Sets and Maps, equal contents\n // Note: this accounts for both named and indexed properties on Arrays.\n if (arguments.length === 5) {\n aKeys = Object.keys(val1);\n var bKeys = Object.keys(val2);\n\n // The pair must have the same number of owned properties.\n if (aKeys.length !== bKeys.length) {\n return false;\n }\n }\n\n // Cheap key test\n var i = 0;\n for (; i < aKeys.length; i++) {\n if (!hasOwnProperty(val2, aKeys[i])) {\n return false;\n }\n }\n if (strict && arguments.length === 5) {\n var symbolKeysA = objectGetOwnPropertySymbols(val1);\n if (symbolKeysA.length !== 0) {\n var count = 0;\n for (i = 0; i < symbolKeysA.length; i++) {\n var key = symbolKeysA[i];\n if (propertyIsEnumerable(val1, key)) {\n if (!propertyIsEnumerable(val2, key)) {\n return false;\n }\n aKeys.push(key);\n count++;\n } else if (propertyIsEnumerable(val2, key)) {\n return false;\n }\n }\n var symbolKeysB = objectGetOwnPropertySymbols(val2);\n if (symbolKeysA.length !== symbolKeysB.length && getEnumerables(val2, symbolKeysB).length !== count) {\n return false;\n }\n } else {\n var _symbolKeysB = objectGetOwnPropertySymbols(val2);\n if (_symbolKeysB.length !== 0 && getEnumerables(val2, _symbolKeysB).length !== 0) {\n return false;\n }\n }\n }\n if (aKeys.length === 0 && (iterationType === kNoIterator || iterationType === kIsArray && val1.length === 0 || val1.size === 0)) {\n return true;\n }\n\n // Use memos to handle cycles.\n if (memos === undefined) {\n memos = {\n val1: new Map(),\n val2: new Map(),\n position: 0\n };\n } else {\n // We prevent up to two map.has(x) calls by directly retrieving the value\n // and checking for undefined. The map can only contain numbers, so it is\n // safe to check for undefined only.\n var val2MemoA = memos.val1.get(val1);\n if (val2MemoA !== undefined) {\n var val2MemoB = memos.val2.get(val2);\n if (val2MemoB !== undefined) {\n return val2MemoA === val2MemoB;\n }\n }\n memos.position++;\n }\n memos.val1.set(val1, memos.position);\n memos.val2.set(val2, memos.position);\n var areEq = objEquiv(val1, val2, strict, aKeys, memos, iterationType);\n memos.val1.delete(val1);\n memos.val2.delete(val2);\n return areEq;\n}\nfunction setHasEqualElement(set, val1, strict, memo) {\n // Go looking.\n var setValues = arrayFromSet(set);\n for (var i = 0; i < setValues.length; i++) {\n var val2 = setValues[i];\n if (innerDeepEqual(val1, val2, strict, memo)) {\n // Remove the matching element to make sure we do not check that again.\n set.delete(val2);\n return true;\n }\n }\n return false;\n}\n\n// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness#Loose_equality_using\n// Sadly it is not possible to detect corresponding values properly in case the\n// type is a string, number, bigint or boolean. The reason is that those values\n// can match lots of different string values (e.g., 1n == '+00001').\nfunction findLooseMatchingPrimitives(prim) {\n switch (_typeof(prim)) {\n case 'undefined':\n return null;\n case 'object':\n // Only pass in null as object!\n return undefined;\n case 'symbol':\n return false;\n case 'string':\n prim = +prim;\n // Loose equal entries exist only if the string is possible to convert to\n // a regular number and not NaN.\n // Fall through\n case 'number':\n if (numberIsNaN(prim)) {\n return false;\n }\n }\n return true;\n}\nfunction setMightHaveLoosePrim(a, b, prim) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) return altValue;\n return b.has(altValue) && !a.has(altValue);\n}\nfunction mapMightHaveLoosePrim(a, b, prim, item, memo) {\n var altValue = findLooseMatchingPrimitives(prim);\n if (altValue != null) {\n return altValue;\n }\n var curB = b.get(altValue);\n if (curB === undefined && !b.has(altValue) || !innerDeepEqual(item, curB, false, memo)) {\n return false;\n }\n return !a.has(altValue) && innerDeepEqual(item, curB, false, memo);\n}\nfunction setEquiv(a, b, strict, memo) {\n // This is a lazily initiated Set of entries which have to be compared\n // pairwise.\n var set = null;\n var aValues = arrayFromSet(a);\n for (var i = 0; i < aValues.length; i++) {\n var val = aValues[i];\n // Note: Checking for the objects first improves the performance for object\n // heavy sets but it is a minor slow down for primitives. As they are fast\n // to check this improves the worst case scenario instead.\n if (_typeof(val) === 'object' && val !== null) {\n if (set === null) {\n set = new Set();\n }\n // If the specified value doesn't exist in the second set its an not null\n // object (or non strict only: a not matching primitive) we'll need to go\n // hunting for something thats deep-(strict-)equal to it. To make this\n // O(n log n) complexity we have to copy these values in a new set first.\n set.add(val);\n } else if (!b.has(val)) {\n if (strict) return false;\n\n // Fast path to detect missing string, symbol, undefined and null values.\n if (!setMightHaveLoosePrim(a, b, val)) {\n return false;\n }\n if (set === null) {\n set = new Set();\n }\n set.add(val);\n }\n }\n if (set !== null) {\n var bValues = arrayFromSet(b);\n for (var _i = 0; _i < bValues.length; _i++) {\n var _val = bValues[_i];\n // We have to check if a primitive value is already\n // matching and only if it's not, go hunting for it.\n if (_typeof(_val) === 'object' && _val !== null) {\n if (!setHasEqualElement(set, _val, strict, memo)) return false;\n } else if (!strict && !a.has(_val) && !setHasEqualElement(set, _val, strict, memo)) {\n return false;\n }\n }\n return set.size === 0;\n }\n return true;\n}\nfunction mapHasEqualEntry(set, map, key1, item1, strict, memo) {\n // To be able to handle cases like:\n // Map([[{}, 'a'], [{}, 'b']]) vs Map([[{}, 'b'], [{}, 'a']])\n // ... we need to consider *all* matching keys, not just the first we find.\n var setValues = arrayFromSet(set);\n for (var i = 0; i < setValues.length; i++) {\n var key2 = setValues[i];\n if (innerDeepEqual(key1, key2, strict, memo) && innerDeepEqual(item1, map.get(key2), strict, memo)) {\n set.delete(key2);\n return true;\n }\n }\n return false;\n}\nfunction mapEquiv(a, b, strict, memo) {\n var set = null;\n var aEntries = arrayFromMap(a);\n for (var i = 0; i < aEntries.length; i++) {\n var _aEntries$i = _slicedToArray(aEntries[i], 2),\n key = _aEntries$i[0],\n item1 = _aEntries$i[1];\n if (_typeof(key) === 'object' && key !== null) {\n if (set === null) {\n set = new Set();\n }\n set.add(key);\n } else {\n // By directly retrieving the value we prevent another b.has(key) check in\n // almost all possible cases.\n var item2 = b.get(key);\n if (item2 === undefined && !b.has(key) || !innerDeepEqual(item1, item2, strict, memo)) {\n if (strict) return false;\n // Fast path to detect missing string, symbol, undefined and null\n // keys.\n if (!mapMightHaveLoosePrim(a, b, key, item1, memo)) return false;\n if (set === null) {\n set = new Set();\n }\n set.add(key);\n }\n }\n }\n if (set !== null) {\n var bEntries = arrayFromMap(b);\n for (var _i2 = 0; _i2 < bEntries.length; _i2++) {\n var _bEntries$_i = _slicedToArray(bEntries[_i2], 2),\n _key = _bEntries$_i[0],\n item = _bEntries$_i[1];\n if (_typeof(_key) === 'object' && _key !== null) {\n if (!mapHasEqualEntry(set, a, _key, item, strict, memo)) return false;\n } else if (!strict && (!a.has(_key) || !innerDeepEqual(a.get(_key), item, false, memo)) && !mapHasEqualEntry(set, a, _key, item, false, memo)) {\n return false;\n }\n }\n return set.size === 0;\n }\n return true;\n}\nfunction objEquiv(a, b, strict, keys, memos, iterationType) {\n // Sets and maps don't have their entries accessible via normal object\n // properties.\n var i = 0;\n if (iterationType === kIsSet) {\n if (!setEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsMap) {\n if (!mapEquiv(a, b, strict, memos)) {\n return false;\n }\n } else if (iterationType === kIsArray) {\n for (; i < a.length; i++) {\n if (hasOwnProperty(a, i)) {\n if (!hasOwnProperty(b, i) || !innerDeepEqual(a[i], b[i], strict, memos)) {\n return false;\n }\n } else if (hasOwnProperty(b, i)) {\n return false;\n } else {\n // Array is sparse.\n var keysA = Object.keys(a);\n for (; i < keysA.length; i++) {\n var key = keysA[i];\n if (!hasOwnProperty(b, key) || !innerDeepEqual(a[key], b[key], strict, memos)) {\n return false;\n }\n }\n if (keysA.length !== Object.keys(b).length) {\n return false;\n }\n return true;\n }\n }\n }\n\n // The pair must have equivalent values for every corresponding key.\n // Possibly expensive deep test:\n for (i = 0; i < keys.length; i++) {\n var _key2 = keys[i];\n if (!innerDeepEqual(a[_key2], b[_key2], strict, memos)) {\n return false;\n }\n }\n return true;\n}\nfunction isDeepEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kLoose);\n}\nfunction isDeepStrictEqual(val1, val2) {\n return innerDeepEqual(val1, val2, kStrict);\n}\nmodule.exports = {\n isDeepEqual: isDeepEqual,\n isDeepStrictEqual: isDeepStrictEqual\n};","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Bit reading helpers\n*/\n\nvar BROTLI_READ_SIZE = 4096;\nvar BROTLI_IBUF_SIZE = (2 * BROTLI_READ_SIZE + 32);\nvar BROTLI_IBUF_MASK = (2 * BROTLI_READ_SIZE - 1);\n\nvar kBitMask = new Uint32Array([\n 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767,\n 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215\n]);\n\n/* Input byte buffer, consist of a ringbuffer and a \"slack\" region where */\n/* bytes from the start of the ringbuffer are copied. */\nfunction BrotliBitReader(input) {\n this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE);\n this.input_ = input; /* input callback */\n \n this.reset();\n}\n\nBrotliBitReader.READ_SIZE = BROTLI_READ_SIZE;\nBrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK;\n\nBrotliBitReader.prototype.reset = function() {\n this.buf_ptr_ = 0; /* next input will write here */\n this.val_ = 0; /* pre-fetched bits */\n this.pos_ = 0; /* byte position in stream */\n this.bit_pos_ = 0; /* current bit-reading position in val_ */\n this.bit_end_pos_ = 0; /* bit-reading end position from LSB of val_ */\n this.eos_ = 0; /* input stream is finished */\n \n this.readMoreInput();\n for (var i = 0; i < 4; i++) {\n this.val_ |= this.buf_[this.pos_] << (8 * i);\n ++this.pos_;\n }\n \n return this.bit_end_pos_ > 0;\n};\n\n/* Fills up the input ringbuffer by calling the input callback.\n\n Does nothing if there are at least 32 bytes present after current position.\n\n Returns 0 if either:\n - the input callback returned an error, or\n - there is no more input and the position is past the end of the stream.\n\n After encountering the end of the input stream, 32 additional zero bytes are\n copied to the ringbuffer, therefore it is safe to call this function after\n every 32 bytes of input is read.\n*/\nBrotliBitReader.prototype.readMoreInput = function() {\n if (this.bit_end_pos_ > 256) {\n return;\n } else if (this.eos_) {\n if (this.bit_pos_ > this.bit_end_pos_)\n throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_);\n } else {\n var dst = this.buf_ptr_;\n var bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE);\n if (bytes_read < 0) {\n throw new Error('Unexpected end of input');\n }\n \n if (bytes_read < BROTLI_READ_SIZE) {\n this.eos_ = 1;\n /* Store 32 bytes of zero after the stream end. */\n for (var p = 0; p < 32; p++)\n this.buf_[dst + bytes_read + p] = 0;\n }\n \n if (dst === 0) {\n /* Copy the head of the ringbuffer to the slack region. */\n for (var p = 0; p < 32; p++)\n this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p];\n\n this.buf_ptr_ = BROTLI_READ_SIZE;\n } else {\n this.buf_ptr_ = 0;\n }\n \n this.bit_end_pos_ += bytes_read << 3;\n }\n};\n\n/* Guarantees that there are at least 24 bits in the buffer. */\nBrotliBitReader.prototype.fillBitWindow = function() { \n while (this.bit_pos_ >= 8) {\n this.val_ >>>= 8;\n this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24;\n ++this.pos_;\n this.bit_pos_ = this.bit_pos_ - 8 >>> 0;\n this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0;\n }\n};\n\n/* Reads the specified number of bits from Read Buffer. */\nBrotliBitReader.prototype.readBits = function(n_bits) {\n if (32 - this.bit_pos_ < n_bits) {\n this.fillBitWindow();\n }\n \n var val = ((this.val_ >>> this.bit_pos_) & kBitMask[n_bits]);\n this.bit_pos_ += n_bits;\n return val;\n};\n\nmodule.exports = BrotliBitReader;\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Lookup table to map the previous two bytes to a context id.\n\n There are four different context modeling modes defined here:\n CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,\n CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,\n CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,\n CONTEXT_SIGNED: second-order context model tuned for signed integers.\n\n The context id for the UTF8 context model is calculated as follows. If p1\n and p2 are the previous two bytes, we calcualte the context as\n\n context = kContextLookup[p1] | kContextLookup[p2 + 256].\n\n If the previous two bytes are ASCII characters (i.e. < 128), this will be\n equivalent to\n\n context = 4 * context1(p1) + context2(p2),\n\n where context1 is based on the previous byte in the following way:\n\n 0 : non-ASCII control\n 1 : \\t, \\n, \\r\n 2 : space\n 3 : other punctuation\n 4 : \" '\n 5 : %\n 6 : ( < [ {\n 7 : ) > ] }\n 8 : , ; :\n 9 : .\n 10 : =\n 11 : number\n 12 : upper-case vowel\n 13 : upper-case consonant\n 14 : lower-case vowel\n 15 : lower-case consonant\n\n and context2 is based on the second last byte:\n\n 0 : control, space\n 1 : punctuation\n 2 : upper-case letter, number\n 3 : lower-case letter\n\n If the last byte is ASCII, and the second last byte is not (in a valid UTF8\n stream it will be a continuation byte, value between 128 and 191), the\n context is the same as if the second last byte was an ASCII control or space.\n\n If the last byte is a UTF8 lead byte (value >= 192), then the next byte will\n be a continuation byte and the context id is 2 or 3 depending on the LSB of\n the last byte and to a lesser extent on the second last byte if it is ASCII.\n\n If the last byte is a UTF8 continuation byte, the second last byte can be:\n - continuation byte: the next byte is probably ASCII or lead byte (assuming\n 4-byte UTF8 characters are rare) and the context id is 0 or 1.\n - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1\n - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3\n\n The possible value combinations of the previous two bytes, the range of\n context ids and the type of the next byte is summarized in the table below:\n\n |--------\\-----------------------------------------------------------------|\n | \\ Last byte |\n | Second \\---------------------------------------------------------------|\n | last byte \\ ASCII | cont. byte | lead byte |\n | \\ (0-127) | (128-191) | (192-) |\n |=============|===================|=====================|==================|\n | ASCII | next: ASCII/lead | not valid | next: cont. |\n | (0-127) | context: 4 - 63 | | context: 2 - 3 |\n |-------------|-------------------|---------------------|------------------|\n | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |\n | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |\n |-------------|-------------------|---------------------|------------------|\n | lead byte | not valid | next: ASCII/lead | not valid |\n | (192-207) | | context: 0 - 1 | |\n |-------------|-------------------|---------------------|------------------|\n | lead byte | not valid | next: cont. | not valid |\n | (208-) | | context: 2 - 3 | |\n |-------------|-------------------|---------------------|------------------|\n\n The context id for the signed context mode is calculated as:\n\n context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2].\n\n For any context modeling modes, the context ids can be calculated by |-ing\n together two lookups from one table using context model dependent offsets:\n\n context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2].\n\n where offset1 and offset2 are dependent on the context mode.\n*/\n\nvar CONTEXT_LSB6 = 0;\nvar CONTEXT_MSB6 = 1;\nvar CONTEXT_UTF8 = 2;\nvar CONTEXT_SIGNED = 3;\n\n/* Common context lookup table for all context modes. */\nexports.lookup = new Uint8Array([\n /* CONTEXT_UTF8, last byte. */\n /* ASCII range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,\n 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,\n 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,\n 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,\n 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,\n 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,\n /* UTF8 continuation byte range. */\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n /* UTF8 lead byte range. */\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n /* CONTEXT_UTF8 second last byte. */\n /* ASCII range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,\n 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,\n /* UTF8 continuation byte range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n /* UTF8 lead byte range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n /* CONTEXT_SIGNED, second last byte. */\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,\n /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */\n 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,\n /* CONTEXT_LSB6, last byte. */\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n /* CONTEXT_MSB6, last byte. */\n 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,\n 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,\n 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,\n 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,\n 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,\n 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,\n 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,\n 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,\n 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,\n 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,\n 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,\n 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,\n 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,\n 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,\n 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,\n /* CONTEXT_{M,L}SB6, second last byte, */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n]);\n\nexports.lookupOffsets = new Uint16Array([\n /* CONTEXT_LSB6 */\n 1024, 1536,\n /* CONTEXT_MSB6 */\n 1280, 1536,\n /* CONTEXT_UTF8 */\n 0, 256,\n /* CONTEXT_SIGNED */\n 768, 512,\n]);\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n*/\n\nvar BrotliInput = require('./streams').BrotliInput;\nvar BrotliOutput = require('./streams').BrotliOutput;\nvar BrotliBitReader = require('./bit_reader');\nvar BrotliDictionary = require('./dictionary');\nvar HuffmanCode = require('./huffman').HuffmanCode;\nvar BrotliBuildHuffmanTable = require('./huffman').BrotliBuildHuffmanTable;\nvar Context = require('./context');\nvar Prefix = require('./prefix');\nvar Transform = require('./transform');\n\nvar kDefaultCodeLength = 8;\nvar kCodeLengthRepeatCode = 16;\nvar kNumLiteralCodes = 256;\nvar kNumInsertAndCopyCodes = 704;\nvar kNumBlockLengthCodes = 26;\nvar kLiteralContextBits = 6;\nvar kDistanceContextBits = 2;\n\nvar HUFFMAN_TABLE_BITS = 8;\nvar HUFFMAN_TABLE_MASK = 0xff;\n/* Maximum possible Huffman table size for an alphabet size of 704, max code\n * length 15 and root table bits 8. */\nvar HUFFMAN_MAX_TABLE_SIZE = 1080;\n\nvar CODE_LENGTH_CODES = 18;\nvar kCodeLengthCodeOrder = new Uint8Array([\n 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n]);\n\nvar NUM_DISTANCE_SHORT_CODES = 16;\nvar kDistanceShortCodeIndexOffset = new Uint8Array([\n 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2\n]);\n\nvar kDistanceShortCodeValueOffset = new Int8Array([\n 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3\n]);\n\nvar kMaxHuffmanTableSize = new Uint16Array([\n 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,\n 854, 886, 920, 952, 984, 1016, 1048, 1080\n]);\n\nfunction DecodeWindowBits(br) {\n var n;\n if (br.readBits(1) === 0) {\n return 16;\n }\n \n n = br.readBits(3);\n if (n > 0) {\n return 17 + n;\n }\n \n n = br.readBits(3);\n if (n > 0) {\n return 8 + n;\n }\n \n return 17;\n}\n\n/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */\nfunction DecodeVarLenUint8(br) {\n if (br.readBits(1)) {\n var nbits = br.readBits(3);\n if (nbits === 0) {\n return 1;\n } else {\n return br.readBits(nbits) + (1 << nbits);\n }\n }\n return 0;\n}\n\nfunction MetaBlockLength() {\n this.meta_block_length = 0;\n this.input_end = 0;\n this.is_uncompressed = 0;\n this.is_metadata = false;\n}\n\nfunction DecodeMetaBlockLength(br) {\n var out = new MetaBlockLength; \n var size_nibbles;\n var size_bytes;\n var i;\n \n out.input_end = br.readBits(1);\n if (out.input_end && br.readBits(1)) {\n return out;\n }\n \n size_nibbles = br.readBits(2) + 4;\n if (size_nibbles === 7) {\n out.is_metadata = true;\n \n if (br.readBits(1) !== 0)\n throw new Error('Invalid reserved bit');\n \n size_bytes = br.readBits(2);\n if (size_bytes === 0)\n return out;\n \n for (i = 0; i < size_bytes; i++) {\n var next_byte = br.readBits(8);\n if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)\n throw new Error('Invalid size byte');\n \n out.meta_block_length |= next_byte << (i * 8);\n }\n } else {\n for (i = 0; i < size_nibbles; ++i) {\n var next_nibble = br.readBits(4);\n if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)\n throw new Error('Invalid size nibble');\n \n out.meta_block_length |= next_nibble << (i * 4);\n }\n }\n \n ++out.meta_block_length;\n \n if (!out.input_end && !out.is_metadata) {\n out.is_uncompressed = br.readBits(1);\n }\n \n return out;\n}\n\n/* Decodes the next Huffman code from bit-stream. */\nfunction ReadSymbol(table, index, br) {\n var start_index = index;\n \n var nbits;\n br.fillBitWindow();\n index += (br.val_ >>> br.bit_pos_) & HUFFMAN_TABLE_MASK;\n nbits = table[index].bits - HUFFMAN_TABLE_BITS;\n if (nbits > 0) {\n br.bit_pos_ += HUFFMAN_TABLE_BITS;\n index += table[index].value;\n index += (br.val_ >>> br.bit_pos_) & ((1 << nbits) - 1);\n }\n br.bit_pos_ += table[index].bits;\n return table[index].value;\n}\n\nfunction ReadHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) {\n var symbol = 0;\n var prev_code_len = kDefaultCodeLength;\n var repeat = 0;\n var repeat_code_len = 0;\n var space = 32768;\n \n var table = [];\n for (var i = 0; i < 32; i++)\n table.push(new HuffmanCode(0, 0));\n \n BrotliBuildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES);\n\n while (symbol < num_symbols && space > 0) {\n var p = 0;\n var code_len;\n \n br.readMoreInput();\n br.fillBitWindow();\n p += (br.val_ >>> br.bit_pos_) & 31;\n br.bit_pos_ += table[p].bits;\n code_len = table[p].value & 0xff;\n if (code_len < kCodeLengthRepeatCode) {\n repeat = 0;\n code_lengths[symbol++] = code_len;\n if (code_len !== 0) {\n prev_code_len = code_len;\n space -= 32768 >> code_len;\n }\n } else {\n var extra_bits = code_len - 14;\n var old_repeat;\n var repeat_delta;\n var new_len = 0;\n if (code_len === kCodeLengthRepeatCode) {\n new_len = prev_code_len;\n }\n if (repeat_code_len !== new_len) {\n repeat = 0;\n repeat_code_len = new_len;\n }\n old_repeat = repeat;\n if (repeat > 0) {\n repeat -= 2;\n repeat <<= extra_bits;\n }\n repeat += br.readBits(extra_bits) + 3;\n repeat_delta = repeat - old_repeat;\n if (symbol + repeat_delta > num_symbols) {\n throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols');\n }\n \n for (var x = 0; x < repeat_delta; x++)\n code_lengths[symbol + x] = repeat_code_len;\n \n symbol += repeat_delta;\n \n if (repeat_code_len !== 0) {\n space -= repeat_delta << (15 - repeat_code_len);\n }\n }\n }\n if (space !== 0) {\n throw new Error(\"[ReadHuffmanCodeLengths] space = \" + space);\n }\n \n for (; symbol < num_symbols; symbol++)\n code_lengths[symbol] = 0;\n}\n\nfunction ReadHuffmanCode(alphabet_size, tables, table, br) {\n var table_size = 0;\n var simple_code_or_skip;\n var code_lengths = new Uint8Array(alphabet_size);\n \n br.readMoreInput();\n \n /* simple_code_or_skip is used as follows:\n 1 for simple code;\n 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */\n simple_code_or_skip = br.readBits(2);\n if (simple_code_or_skip === 1) {\n /* Read symbols, codes & code lengths directly. */\n var i;\n var max_bits_counter = alphabet_size - 1;\n var max_bits = 0;\n var symbols = new Int32Array(4);\n var num_symbols = br.readBits(2) + 1;\n while (max_bits_counter) {\n max_bits_counter >>= 1;\n ++max_bits;\n }\n\n for (i = 0; i < num_symbols; ++i) {\n symbols[i] = br.readBits(max_bits) % alphabet_size;\n code_lengths[symbols[i]] = 2;\n }\n code_lengths[symbols[0]] = 1;\n switch (num_symbols) {\n case 1:\n break;\n case 3:\n if ((symbols[0] === symbols[1]) ||\n (symbols[0] === symbols[2]) ||\n (symbols[1] === symbols[2])) {\n throw new Error('[ReadHuffmanCode] invalid symbols');\n }\n break;\n case 2:\n if (symbols[0] === symbols[1]) {\n throw new Error('[ReadHuffmanCode] invalid symbols');\n }\n \n code_lengths[symbols[1]] = 1;\n break;\n case 4:\n if ((symbols[0] === symbols[1]) ||\n (symbols[0] === symbols[2]) ||\n (symbols[0] === symbols[3]) ||\n (symbols[1] === symbols[2]) ||\n (symbols[1] === symbols[3]) ||\n (symbols[2] === symbols[3])) {\n throw new Error('[ReadHuffmanCode] invalid symbols');\n }\n \n if (br.readBits(1)) {\n code_lengths[symbols[2]] = 3;\n code_lengths[symbols[3]] = 3;\n } else {\n code_lengths[symbols[0]] = 2;\n }\n break;\n }\n } else { /* Decode Huffman-coded code lengths. */\n var i;\n var code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES);\n var space = 32;\n var num_codes = 0;\n /* Static Huffman code for the code length code lengths */\n var huff = [\n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),\n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2), \n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5)\n ];\n for (i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; ++i) {\n var code_len_idx = kCodeLengthCodeOrder[i];\n var p = 0;\n var v;\n br.fillBitWindow();\n p += (br.val_ >>> br.bit_pos_) & 15;\n br.bit_pos_ += huff[p].bits;\n v = huff[p].value;\n code_length_code_lengths[code_len_idx] = v;\n if (v !== 0) {\n space -= (32 >> v);\n ++num_codes;\n }\n }\n \n if (!(num_codes === 1 || space === 0))\n throw new Error('[ReadHuffmanCode] invalid num_codes or space');\n \n ReadHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br);\n }\n \n table_size = BrotliBuildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size);\n \n if (table_size === 0) {\n throw new Error(\"[ReadHuffmanCode] BuildHuffmanTable failed: \");\n }\n \n return table_size;\n}\n\nfunction ReadBlockLength(table, index, br) {\n var code;\n var nbits;\n code = ReadSymbol(table, index, br);\n nbits = Prefix.kBlockLengthPrefixCode[code].nbits;\n return Prefix.kBlockLengthPrefixCode[code].offset + br.readBits(nbits);\n}\n\nfunction TranslateShortCodes(code, ringbuffer, index) {\n var val;\n if (code < NUM_DISTANCE_SHORT_CODES) {\n index += kDistanceShortCodeIndexOffset[code];\n index &= 3;\n val = ringbuffer[index] + kDistanceShortCodeValueOffset[code];\n } else {\n val = code - NUM_DISTANCE_SHORT_CODES + 1;\n }\n return val;\n}\n\nfunction MoveToFront(v, index) {\n var value = v[index];\n var i = index;\n for (; i; --i) v[i] = v[i - 1];\n v[0] = value;\n}\n\nfunction InverseMoveToFrontTransform(v, v_len) {\n var mtf = new Uint8Array(256);\n var i;\n for (i = 0; i < 256; ++i) {\n mtf[i] = i;\n }\n for (i = 0; i < v_len; ++i) {\n var index = v[i];\n v[i] = mtf[index];\n if (index) MoveToFront(mtf, index);\n }\n}\n\n/* Contains a collection of huffman trees with the same alphabet size. */\nfunction HuffmanTreeGroup(alphabet_size, num_htrees) {\n this.alphabet_size = alphabet_size;\n this.num_htrees = num_htrees;\n this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[(alphabet_size + 31) >>> 5]); \n this.htrees = new Uint32Array(num_htrees);\n}\n\nHuffmanTreeGroup.prototype.decode = function(br) {\n var i;\n var table_size;\n var next = 0;\n for (i = 0; i < this.num_htrees; ++i) {\n this.htrees[i] = next;\n table_size = ReadHuffmanCode(this.alphabet_size, this.codes, next, br);\n next += table_size;\n }\n};\n\nfunction DecodeContextMap(context_map_size, br) {\n var out = { num_htrees: null, context_map: null };\n var use_rle_for_zeros;\n var max_run_length_prefix = 0;\n var table;\n var i;\n \n br.readMoreInput();\n var num_htrees = out.num_htrees = DecodeVarLenUint8(br) + 1;\n\n var context_map = out.context_map = new Uint8Array(context_map_size);\n if (num_htrees <= 1) {\n return out;\n }\n\n use_rle_for_zeros = br.readBits(1);\n if (use_rle_for_zeros) {\n max_run_length_prefix = br.readBits(4) + 1;\n }\n \n table = [];\n for (i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {\n table[i] = new HuffmanCode(0, 0);\n }\n \n ReadHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br);\n \n for (i = 0; i < context_map_size;) {\n var code;\n\n br.readMoreInput();\n code = ReadSymbol(table, 0, br);\n if (code === 0) {\n context_map[i] = 0;\n ++i;\n } else if (code <= max_run_length_prefix) {\n var reps = 1 + (1 << code) + br.readBits(code);\n while (--reps) {\n if (i >= context_map_size) {\n throw new Error(\"[DecodeContextMap] i >= context_map_size\");\n }\n context_map[i] = 0;\n ++i;\n }\n } else {\n context_map[i] = code - max_run_length_prefix;\n ++i;\n }\n }\n if (br.readBits(1)) {\n InverseMoveToFrontTransform(context_map, context_map_size);\n }\n \n return out;\n}\n\nfunction DecodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) {\n var ringbuffer = tree_type * 2;\n var index = tree_type;\n var type_code = ReadSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br);\n var block_type;\n if (type_code === 0) {\n block_type = ringbuffers[ringbuffer + (indexes[index] & 1)];\n } else if (type_code === 1) {\n block_type = ringbuffers[ringbuffer + ((indexes[index] - 1) & 1)] + 1;\n } else {\n block_type = type_code - 2;\n }\n if (block_type >= max_block_type) {\n block_type -= max_block_type;\n }\n block_types[tree_type] = block_type;\n ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type;\n ++indexes[index];\n}\n\nfunction CopyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) {\n var rb_size = ringbuffer_mask + 1;\n var rb_pos = pos & ringbuffer_mask;\n var br_pos = br.pos_ & BrotliBitReader.IBUF_MASK;\n var nbytes;\n\n /* For short lengths copy byte-by-byte */\n if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) {\n while (len-- > 0) {\n br.readMoreInput();\n ringbuffer[rb_pos++] = br.readBits(8);\n if (rb_pos === rb_size) {\n output.write(ringbuffer, rb_size);\n rb_pos = 0;\n }\n }\n return;\n }\n\n if (br.bit_end_pos_ < 32) {\n throw new Error('[CopyUncompressedBlockToOutput] br.bit_end_pos_ < 32');\n }\n\n /* Copy remaining 0-4 bytes from br.val_ to ringbuffer. */\n while (br.bit_pos_ < 32) {\n ringbuffer[rb_pos] = (br.val_ >>> br.bit_pos_);\n br.bit_pos_ += 8;\n ++rb_pos;\n --len;\n }\n\n /* Copy remaining bytes from br.buf_ to ringbuffer. */\n nbytes = (br.bit_end_pos_ - br.bit_pos_) >> 3;\n if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) {\n var tail = BrotliBitReader.IBUF_MASK + 1 - br_pos;\n for (var x = 0; x < tail; x++)\n ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n \n nbytes -= tail;\n rb_pos += tail;\n len -= tail;\n br_pos = 0;\n }\n\n for (var x = 0; x < nbytes; x++)\n ringbuffer[rb_pos + x] = br.buf_[br_pos + x];\n \n rb_pos += nbytes;\n len -= nbytes;\n\n /* If we wrote past the logical end of the ringbuffer, copy the tail of the\n ringbuffer to its beginning and flush the ringbuffer to the output. */\n if (rb_pos >= rb_size) {\n output.write(ringbuffer, rb_size);\n rb_pos -= rb_size; \n for (var x = 0; x < rb_pos; x++)\n ringbuffer[x] = ringbuffer[rb_size + x];\n }\n\n /* If we have more to copy than the remaining size of the ringbuffer, then we\n first fill the ringbuffer from the input and then flush the ringbuffer to\n the output */\n while (rb_pos + len >= rb_size) {\n nbytes = rb_size - rb_pos;\n if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) {\n throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n }\n output.write(ringbuffer, rb_size);\n len -= nbytes;\n rb_pos = 0;\n }\n\n /* Copy straight from the input onto the ringbuffer. The ringbuffer will be\n flushed to the output at a later time. */\n if (br.input_.read(ringbuffer, rb_pos, len) < len) {\n throw new Error('[CopyUncompressedBlockToOutput] not enough bytes');\n }\n\n /* Restore the state of the bit reader. */\n br.reset();\n}\n\n/* Advances the bit reader position to the next byte boundary and verifies\n that any skipped bits are set to zero. */\nfunction JumpToByteBoundary(br) {\n var new_bit_pos = (br.bit_pos_ + 7) & ~7;\n var pad_bits = br.readBits(new_bit_pos - br.bit_pos_);\n return pad_bits == 0;\n}\n\nfunction BrotliDecompressedSize(buffer) {\n var input = new BrotliInput(buffer);\n var br = new BrotliBitReader(input);\n DecodeWindowBits(br);\n var out = DecodeMetaBlockLength(br);\n return out.meta_block_length;\n}\n\nexports.BrotliDecompressedSize = BrotliDecompressedSize;\n\nfunction BrotliDecompressBuffer(buffer, output_size) {\n var input = new BrotliInput(buffer);\n \n if (output_size == null) {\n output_size = BrotliDecompressedSize(buffer);\n }\n \n var output_buffer = new Uint8Array(output_size);\n var output = new BrotliOutput(output_buffer);\n \n BrotliDecompress(input, output);\n \n if (output.pos < output.buffer.length) {\n output.buffer = output.buffer.subarray(0, output.pos);\n }\n \n return output.buffer;\n}\n\nexports.BrotliDecompressBuffer = BrotliDecompressBuffer;\n\nfunction BrotliDecompress(input, output) {\n var i;\n var pos = 0;\n var input_end = 0;\n var window_bits = 0;\n var max_backward_distance;\n var max_distance = 0;\n var ringbuffer_size;\n var ringbuffer_mask;\n var ringbuffer;\n var ringbuffer_end;\n /* This ring buffer holds a few past copy distances that will be used by */\n /* some special distance codes. */\n var dist_rb = [ 16, 15, 11, 4 ];\n var dist_rb_idx = 0;\n /* The previous 2 bytes used for context. */\n var prev_byte1 = 0;\n var prev_byte2 = 0;\n var hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)];\n var block_type_trees;\n var block_len_trees;\n var br;\n\n /* We need the slack region for the following reasons:\n - always doing two 8-byte copies for fast backward copying\n - transforms\n - flushing the input ringbuffer when decoding uncompressed blocks */\n var kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE;\n\n br = new BrotliBitReader(input);\n\n /* Decode window size. */\n window_bits = DecodeWindowBits(br);\n max_backward_distance = (1 << window_bits) - 16;\n\n ringbuffer_size = 1 << window_bits;\n ringbuffer_mask = ringbuffer_size - 1;\n ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + BrotliDictionary.maxDictionaryWordLength);\n ringbuffer_end = ringbuffer_size;\n\n block_type_trees = [];\n block_len_trees = [];\n for (var x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) {\n block_type_trees[x] = new HuffmanCode(0, 0);\n block_len_trees[x] = new HuffmanCode(0, 0);\n }\n\n while (!input_end) {\n var meta_block_remaining_len = 0;\n var is_uncompressed;\n var block_length = [ 1 << 28, 1 << 28, 1 << 28 ];\n var block_type = [ 0 ];\n var num_block_types = [ 1, 1, 1 ];\n var block_type_rb = [ 0, 1, 0, 1, 0, 1 ];\n var block_type_rb_index = [ 0 ];\n var distance_postfix_bits;\n var num_direct_distance_codes;\n var distance_postfix_mask;\n var num_distance_codes;\n var context_map = null;\n var context_modes = null;\n var num_literal_htrees;\n var dist_context_map = null;\n var num_dist_htrees;\n var context_offset = 0;\n var context_map_slice = null;\n var literal_htree_index = 0;\n var dist_context_offset = 0;\n var dist_context_map_slice = null;\n var dist_htree_index = 0;\n var context_lookup_offset1 = 0;\n var context_lookup_offset2 = 0;\n var context_mode;\n var htree_command;\n\n for (i = 0; i < 3; ++i) {\n hgroup[i].codes = null;\n hgroup[i].htrees = null;\n }\n\n br.readMoreInput();\n \n var _out = DecodeMetaBlockLength(br);\n meta_block_remaining_len = _out.meta_block_length;\n if (pos + meta_block_remaining_len > output.buffer.length) {\n /* We need to grow the output buffer to fit the additional data. */\n var tmp = new Uint8Array( pos + meta_block_remaining_len );\n tmp.set( output.buffer );\n output.buffer = tmp;\n } \n input_end = _out.input_end;\n is_uncompressed = _out.is_uncompressed;\n \n if (_out.is_metadata) {\n JumpToByteBoundary(br);\n \n for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {\n br.readMoreInput();\n /* Read one byte and ignore it. */\n br.readBits(8);\n }\n \n continue;\n }\n \n if (meta_block_remaining_len === 0) {\n continue;\n }\n \n if (is_uncompressed) {\n br.bit_pos_ = (br.bit_pos_ + 7) & ~7;\n CopyUncompressedBlockToOutput(output, meta_block_remaining_len, pos,\n ringbuffer, ringbuffer_mask, br);\n pos += meta_block_remaining_len;\n continue;\n }\n \n for (i = 0; i < 3; ++i) {\n num_block_types[i] = DecodeVarLenUint8(br) + 1;\n if (num_block_types[i] >= 2) {\n ReadHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n ReadHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n block_length[i] = ReadBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br);\n block_type_rb_index[i] = 1;\n }\n }\n \n br.readMoreInput();\n \n distance_postfix_bits = br.readBits(2);\n num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits);\n distance_postfix_mask = (1 << distance_postfix_bits) - 1;\n num_distance_codes = (num_direct_distance_codes + (48 << distance_postfix_bits));\n context_modes = new Uint8Array(num_block_types[0]);\n\n for (i = 0; i < num_block_types[0]; ++i) {\n br.readMoreInput();\n context_modes[i] = (br.readBits(2) << 1);\n }\n \n var _o1 = DecodeContextMap(num_block_types[0] << kLiteralContextBits, br);\n num_literal_htrees = _o1.num_htrees;\n context_map = _o1.context_map;\n \n var _o2 = DecodeContextMap(num_block_types[2] << kDistanceContextBits, br);\n num_dist_htrees = _o2.num_htrees;\n dist_context_map = _o2.context_map;\n \n hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees);\n hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1]);\n hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees);\n\n for (i = 0; i < 3; ++i) {\n hgroup[i].decode(br);\n }\n\n context_map_slice = 0;\n dist_context_map_slice = 0;\n context_mode = context_modes[block_type[0]];\n context_lookup_offset1 = Context.lookupOffsets[context_mode];\n context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n htree_command = hgroup[1].htrees[0];\n\n while (meta_block_remaining_len > 0) {\n var cmd_code;\n var range_idx;\n var insert_code;\n var copy_code;\n var insert_length;\n var copy_length;\n var distance_code;\n var distance;\n var context;\n var j;\n var copy_dst;\n\n br.readMoreInput();\n \n if (block_length[1] === 0) {\n DecodeBlockType(num_block_types[1],\n block_type_trees, 1, block_type, block_type_rb,\n block_type_rb_index, br);\n block_length[1] = ReadBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br);\n htree_command = hgroup[1].htrees[block_type[1]];\n }\n --block_length[1];\n cmd_code = ReadSymbol(hgroup[1].codes, htree_command, br);\n range_idx = cmd_code >> 6;\n if (range_idx >= 2) {\n range_idx -= 2;\n distance_code = -1;\n } else {\n distance_code = 0;\n }\n insert_code = Prefix.kInsertRangeLut[range_idx] + ((cmd_code >> 3) & 7);\n copy_code = Prefix.kCopyRangeLut[range_idx] + (cmd_code & 7);\n insert_length = Prefix.kInsertLengthPrefixCode[insert_code].offset +\n br.readBits(Prefix.kInsertLengthPrefixCode[insert_code].nbits);\n copy_length = Prefix.kCopyLengthPrefixCode[copy_code].offset +\n br.readBits(Prefix.kCopyLengthPrefixCode[copy_code].nbits);\n prev_byte1 = ringbuffer[pos-1 & ringbuffer_mask];\n prev_byte2 = ringbuffer[pos-2 & ringbuffer_mask];\n for (j = 0; j < insert_length; ++j) {\n br.readMoreInput();\n\n if (block_length[0] === 0) {\n DecodeBlockType(num_block_types[0],\n block_type_trees, 0, block_type, block_type_rb,\n block_type_rb_index, br);\n block_length[0] = ReadBlockLength(block_len_trees, 0, br);\n context_offset = block_type[0] << kLiteralContextBits;\n context_map_slice = context_offset;\n context_mode = context_modes[block_type[0]];\n context_lookup_offset1 = Context.lookupOffsets[context_mode];\n context_lookup_offset2 = Context.lookupOffsets[context_mode + 1];\n }\n context = (Context.lookup[context_lookup_offset1 + prev_byte1] |\n Context.lookup[context_lookup_offset2 + prev_byte2]);\n literal_htree_index = context_map[context_map_slice + context];\n --block_length[0];\n prev_byte2 = prev_byte1;\n prev_byte1 = ReadSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br);\n ringbuffer[pos & ringbuffer_mask] = prev_byte1;\n if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n output.write(ringbuffer, ringbuffer_size);\n }\n ++pos;\n }\n meta_block_remaining_len -= insert_length;\n if (meta_block_remaining_len <= 0) break;\n\n if (distance_code < 0) {\n var context;\n \n br.readMoreInput();\n if (block_length[2] === 0) {\n DecodeBlockType(num_block_types[2],\n block_type_trees, 2, block_type, block_type_rb,\n block_type_rb_index, br);\n block_length[2] = ReadBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br);\n dist_context_offset = block_type[2] << kDistanceContextBits;\n dist_context_map_slice = dist_context_offset;\n }\n --block_length[2];\n context = (copy_length > 4 ? 3 : copy_length - 2) & 0xff;\n dist_htree_index = dist_context_map[dist_context_map_slice + context];\n distance_code = ReadSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br);\n if (distance_code >= num_direct_distance_codes) {\n var nbits;\n var postfix;\n var offset;\n distance_code -= num_direct_distance_codes;\n postfix = distance_code & distance_postfix_mask;\n distance_code >>= distance_postfix_bits;\n nbits = (distance_code >> 1) + 1;\n offset = ((2 + (distance_code & 1)) << nbits) - 4;\n distance_code = num_direct_distance_codes +\n ((offset + br.readBits(nbits)) <<\n distance_postfix_bits) + postfix;\n }\n }\n\n /* Convert the distance code to the actual distance by possibly looking */\n /* up past distnaces from the ringbuffer. */\n distance = TranslateShortCodes(distance_code, dist_rb, dist_rb_idx);\n if (distance < 0) {\n throw new Error('[BrotliDecompress] invalid distance');\n }\n\n if (pos < max_backward_distance &&\n max_distance !== max_backward_distance) {\n max_distance = pos;\n } else {\n max_distance = max_backward_distance;\n }\n\n copy_dst = pos & ringbuffer_mask;\n\n if (distance > max_distance) {\n if (copy_length >= BrotliDictionary.minDictionaryWordLength &&\n copy_length <= BrotliDictionary.maxDictionaryWordLength) {\n var offset = BrotliDictionary.offsetsByLength[copy_length];\n var word_id = distance - max_distance - 1;\n var shift = BrotliDictionary.sizeBitsByLength[copy_length];\n var mask = (1 << shift) - 1;\n var word_idx = word_id & mask;\n var transform_idx = word_id >> shift;\n offset += word_idx * copy_length;\n if (transform_idx < Transform.kNumTransforms) {\n var len = Transform.transformDictionaryWord(ringbuffer, copy_dst, offset, copy_length, transform_idx);\n copy_dst += len;\n pos += len;\n meta_block_remaining_len -= len;\n if (copy_dst >= ringbuffer_end) {\n output.write(ringbuffer, ringbuffer_size);\n \n for (var _x = 0; _x < (copy_dst - ringbuffer_end); _x++)\n ringbuffer[_x] = ringbuffer[ringbuffer_end + _x];\n }\n } else {\n throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n }\n } else {\n throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n }\n } else {\n if (distance_code > 0) {\n dist_rb[dist_rb_idx & 3] = distance;\n ++dist_rb_idx;\n }\n\n if (copy_length > meta_block_remaining_len) {\n throw new Error(\"Invalid backward reference. pos: \" + pos + \" distance: \" + distance +\n \" len: \" + copy_length + \" bytes left: \" + meta_block_remaining_len);\n }\n\n for (j = 0; j < copy_length; ++j) {\n ringbuffer[pos & ringbuffer_mask] = ringbuffer[(pos - distance) & ringbuffer_mask];\n if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n output.write(ringbuffer, ringbuffer_size);\n }\n ++pos;\n --meta_block_remaining_len;\n }\n }\n\n /* When we get here, we must have inserted at least one literal and */\n /* made a copy of at least length two, therefore accessing the last 2 */\n /* bytes is valid. */\n prev_byte1 = ringbuffer[(pos - 1) & ringbuffer_mask];\n prev_byte2 = ringbuffer[(pos - 2) & ringbuffer_mask];\n }\n\n /* Protect pos from overflow, wrap it around at every GB of input data */\n pos &= 0x3fffffff;\n }\n\n output.write(ringbuffer, pos & ringbuffer_mask);\n}\n\nexports.BrotliDecompress = BrotliDecompress;\n\nBrotliDictionary.init();\n","var base64 = require('base64-js');\n\n/**\n * The normal dictionary-data.js is quite large, which makes it \n * unsuitable for browser usage. In order to make it smaller, \n * we read dictionary.bin, which is a compressed version of\n * the dictionary, and on initial load, Brotli decompresses \n * it's own dictionary. 😜\n */\nexports.init = function() {\n var BrotliDecompressBuffer = require('./decode').BrotliDecompressBuffer;\n var compressed = base64.toByteArray(require('./dictionary.bin.js'));\n return BrotliDecompressBuffer(compressed);\n};\n","module.exports=\"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\";\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Collection of static dictionary words.\n*/\n\nvar data = require('./dictionary-data');\nexports.init = function() {\n exports.dictionary = data.init();\n};\n\nexports.offsetsByLength = new Uint32Array([\n 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032,\n 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536,\n 115968, 118528, 119872, 121280, 122016,\n]);\n\nexports.sizeBitsByLength = new Uint8Array([\n 0, 0, 0, 0, 10, 10, 11, 11, 10, 10,\n 10, 10, 10, 9, 9, 8, 7, 7, 8, 7,\n 7, 6, 6, 5, 5,\n]);\n\nexports.minDictionaryWordLength = 4;\nexports.maxDictionaryWordLength = 24;\n","function HuffmanCode(bits, value) {\n this.bits = bits; /* number of bits used for this symbol */\n this.value = value; /* symbol value or table offset */\n}\n\nexports.HuffmanCode = HuffmanCode;\n\nvar MAX_LENGTH = 15;\n\n/* Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the\n bit-wise reversal of the len least significant bits of key. */\nfunction GetNextKey(key, len) {\n var step = 1 << (len - 1);\n while (key & step) {\n step >>= 1;\n }\n return (key & (step - 1)) + step;\n}\n\n/* Stores code in table[0], table[step], table[2*step], ..., table[end] */\n/* Assumes that end is an integer multiple of step */\nfunction ReplicateValue(table, i, step, end, code) {\n do {\n end -= step;\n table[i + end] = new HuffmanCode(code.bits, code.value);\n } while (end > 0);\n}\n\n/* Returns the table width of the next 2nd level table. count is the histogram\n of bit lengths for the remaining symbols, len is the code length of the next\n processed symbol */\nfunction NextTableBitSize(count, len, root_bits) {\n var left = 1 << (len - root_bits);\n while (len < MAX_LENGTH) {\n left -= count[len];\n if (left <= 0) break;\n ++len;\n left <<= 1;\n }\n return len - root_bits;\n}\n\nexports.BrotliBuildHuffmanTable = function(root_table, table, root_bits, code_lengths, code_lengths_size) {\n var start_table = table;\n var code; /* current table entry */\n var len; /* current code length */\n var symbol; /* symbol index in original or sorted table */\n var key; /* reversed prefix code */\n var step; /* step size to replicate values in current table */\n var low; /* low bits for current root entry */\n var mask; /* mask for low bits */\n var table_bits; /* key length of current table */\n var table_size; /* size of current table */\n var total_size; /* sum of root table size and 2nd level table sizes */\n var sorted; /* symbols sorted by code length */\n var count = new Int32Array(MAX_LENGTH + 1); /* number of codes of each length */\n var offset = new Int32Array(MAX_LENGTH + 1); /* offsets in sorted table for each length */\n\n sorted = new Int32Array(code_lengths_size);\n\n /* build histogram of code lengths */\n for (symbol = 0; symbol < code_lengths_size; symbol++) {\n count[code_lengths[symbol]]++;\n }\n\n /* generate offsets into sorted symbol table by code length */\n offset[1] = 0;\n for (len = 1; len < MAX_LENGTH; len++) {\n offset[len + 1] = offset[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (symbol = 0; symbol < code_lengths_size; symbol++) {\n if (code_lengths[symbol] !== 0) {\n sorted[offset[code_lengths[symbol]]++] = symbol;\n }\n }\n \n table_bits = root_bits;\n table_size = 1 << table_bits;\n total_size = table_size;\n\n /* special case code with only one value */\n if (offset[MAX_LENGTH] === 1) {\n for (key = 0; key < total_size; ++key) {\n root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff);\n }\n \n return total_size;\n }\n\n /* fill in root table */\n key = 0;\n symbol = 0;\n for (len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {\n for (; count[len] > 0; --count[len]) {\n code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff);\n ReplicateValue(root_table, table + key, step, table_size, code);\n key = GetNextKey(key, len);\n }\n }\n\n /* fill in 2nd level tables and add pointers to root table */\n mask = total_size - 1;\n low = -1;\n for (len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) {\n for (; count[len] > 0; --count[len]) {\n if ((key & mask) !== low) {\n table += table_size;\n table_bits = NextTableBitSize(count, len, root_bits);\n table_size = 1 << table_bits;\n total_size += table_size;\n low = key & mask;\n root_table[start_table + low] = new HuffmanCode((table_bits + root_bits) & 0xff, ((table - start_table) - low) & 0xffff);\n }\n code = new HuffmanCode((len - root_bits) & 0xff, sorted[symbol++] & 0xffff);\n ReplicateValue(root_table, table + (key >> root_bits), step, table_size, code);\n key = GetNextKey(key, len);\n }\n }\n \n return total_size;\n}\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Lookup tables to map prefix codes to value ranges. This is used during\n decoding of the block lengths, literal insertion lengths and copy lengths.\n*/\n\n/* Represents the range of values belonging to a prefix code: */\n/* [offset, offset + 2^nbits) */\nfunction PrefixCodeRange(offset, nbits) {\n this.offset = offset;\n this.nbits = nbits;\n}\n\nexports.kBlockLengthPrefixCode = [\n new PrefixCodeRange(1, 2), new PrefixCodeRange(5, 2), new PrefixCodeRange(9, 2), new PrefixCodeRange(13, 2),\n new PrefixCodeRange(17, 3), new PrefixCodeRange(25, 3), new PrefixCodeRange(33, 3), new PrefixCodeRange(41, 3),\n new PrefixCodeRange(49, 4), new PrefixCodeRange(65, 4), new PrefixCodeRange(81, 4), new PrefixCodeRange(97, 4),\n new PrefixCodeRange(113, 5), new PrefixCodeRange(145, 5), new PrefixCodeRange(177, 5), new PrefixCodeRange(209, 5),\n new PrefixCodeRange(241, 6), new PrefixCodeRange(305, 6), new PrefixCodeRange(369, 7), new PrefixCodeRange(497, 8),\n new PrefixCodeRange(753, 9), new PrefixCodeRange(1265, 10), new PrefixCodeRange(2289, 11), new PrefixCodeRange(4337, 12),\n new PrefixCodeRange(8433, 13), new PrefixCodeRange(16625, 24)\n];\n\nexports.kInsertLengthPrefixCode = [\n new PrefixCodeRange(0, 0), new PrefixCodeRange(1, 0), new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0),\n new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0), new PrefixCodeRange(6, 1), new PrefixCodeRange(8, 1),\n new PrefixCodeRange(10, 2), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 3), new PrefixCodeRange(26, 3),\n new PrefixCodeRange(34, 4), new PrefixCodeRange(50, 4), new PrefixCodeRange(66, 5), new PrefixCodeRange(98, 5),\n new PrefixCodeRange(130, 6), new PrefixCodeRange(194, 7), new PrefixCodeRange(322, 8), new PrefixCodeRange(578, 9),\n new PrefixCodeRange(1090, 10), new PrefixCodeRange(2114, 12), new PrefixCodeRange(6210, 14), new PrefixCodeRange(22594, 24),\n];\n\nexports.kCopyLengthPrefixCode = [\n new PrefixCodeRange(2, 0), new PrefixCodeRange(3, 0), new PrefixCodeRange(4, 0), new PrefixCodeRange(5, 0),\n new PrefixCodeRange(6, 0), new PrefixCodeRange(7, 0), new PrefixCodeRange(8, 0), new PrefixCodeRange(9, 0),\n new PrefixCodeRange(10, 1), new PrefixCodeRange(12, 1), new PrefixCodeRange(14, 2), new PrefixCodeRange(18, 2),\n new PrefixCodeRange(22, 3), new PrefixCodeRange(30, 3), new PrefixCodeRange(38, 4), new PrefixCodeRange(54, 4),\n new PrefixCodeRange(70, 5), new PrefixCodeRange(102, 5), new PrefixCodeRange(134, 6), new PrefixCodeRange(198, 7),\n new PrefixCodeRange(326, 8), new PrefixCodeRange(582, 9), new PrefixCodeRange(1094, 10), new PrefixCodeRange(2118, 24),\n];\n\nexports.kInsertRangeLut = [\n 0, 0, 8, 8, 0, 16, 8, 16, 16,\n];\n\nexports.kCopyRangeLut = [\n 0, 8, 0, 8, 16, 0, 16, 8, 16,\n];\n","function BrotliInput(buffer) {\n this.buffer = buffer;\n this.pos = 0;\n}\n\nBrotliInput.prototype.read = function(buf, i, count) {\n if (this.pos + count > this.buffer.length) {\n count = this.buffer.length - this.pos;\n }\n \n for (var p = 0; p < count; p++)\n buf[i + p] = this.buffer[this.pos + p];\n \n this.pos += count;\n return count;\n}\n\nexports.BrotliInput = BrotliInput;\n\nfunction BrotliOutput(buf) {\n this.buffer = buf;\n this.pos = 0;\n}\n\nBrotliOutput.prototype.write = function(buf, count) {\n if (this.pos + count > this.buffer.length)\n throw new Error('Output buffer is not large enough');\n \n this.buffer.set(buf.subarray(0, count), this.pos);\n this.pos += count;\n return count;\n};\n\nexports.BrotliOutput = BrotliOutput;\n","/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Transformations on dictionary words.\n*/\n\nvar BrotliDictionary = require('./dictionary');\n\nvar kIdentity = 0;\nvar kOmitLast1 = 1;\nvar kOmitLast2 = 2;\nvar kOmitLast3 = 3;\nvar kOmitLast4 = 4;\nvar kOmitLast5 = 5;\nvar kOmitLast6 = 6;\nvar kOmitLast7 = 7;\nvar kOmitLast8 = 8;\nvar kOmitLast9 = 9;\nvar kUppercaseFirst = 10;\nvar kUppercaseAll = 11;\nvar kOmitFirst1 = 12;\nvar kOmitFirst2 = 13;\nvar kOmitFirst3 = 14;\nvar kOmitFirst4 = 15;\nvar kOmitFirst5 = 16;\nvar kOmitFirst6 = 17;\nvar kOmitFirst7 = 18;\nvar kOmitFirst8 = 19;\nvar kOmitFirst9 = 20;\n\nfunction Transform(prefix, transform, suffix) {\n this.prefix = new Uint8Array(prefix.length);\n this.transform = transform;\n this.suffix = new Uint8Array(suffix.length);\n \n for (var i = 0; i < prefix.length; i++)\n this.prefix[i] = prefix.charCodeAt(i);\n \n for (var i = 0; i < suffix.length; i++)\n this.suffix[i] = suffix.charCodeAt(i);\n}\n\nvar kTransforms = [\n new Transform( \"\", kIdentity, \"\" ),\n new Transform( \"\", kIdentity, \" \" ),\n new Transform( \" \", kIdentity, \" \" ),\n new Transform( \"\", kOmitFirst1, \"\" ),\n new Transform( \"\", kUppercaseFirst, \" \" ),\n new Transform( \"\", kIdentity, \" the \" ),\n new Transform( \" \", kIdentity, \"\" ),\n new Transform( \"s \", kIdentity, \" \" ),\n new Transform( \"\", kIdentity, \" of \" ),\n new Transform( \"\", kUppercaseFirst, \"\" ),\n new Transform( \"\", kIdentity, \" and \" ),\n new Transform( \"\", kOmitFirst2, \"\" ),\n new Transform( \"\", kOmitLast1, \"\" ),\n new Transform( \", \", kIdentity, \" \" ),\n new Transform( \"\", kIdentity, \", \" ),\n new Transform( \" \", kUppercaseFirst, \" \" ),\n new Transform( \"\", kIdentity, \" in \" ),\n new Transform( \"\", kIdentity, \" to \" ),\n new Transform( \"e \", kIdentity, \" \" ),\n new Transform( \"\", kIdentity, \"\\\"\" ),\n new Transform( \"\", kIdentity, \".\" ),\n new Transform( \"\", kIdentity, \"\\\">\" ),\n new Transform( \"\", kIdentity, \"\\n\" ),\n new Transform( \"\", kOmitLast3, \"\" ),\n new Transform( \"\", kIdentity, \"]\" ),\n new Transform( \"\", kIdentity, \" for \" ),\n new Transform( \"\", kOmitFirst3, \"\" ),\n new Transform( \"\", kOmitLast2, \"\" ),\n new Transform( \"\", kIdentity, \" a \" ),\n new Transform( \"\", kIdentity, \" that \" ),\n new Transform( \" \", kUppercaseFirst, \"\" ),\n new Transform( \"\", kIdentity, \". \" ),\n new Transform( \".\", kIdentity, \"\" ),\n new Transform( \" \", kIdentity, \", \" ),\n new Transform( \"\", kOmitFirst4, \"\" ),\n new Transform( \"\", kIdentity, \" with \" ),\n new Transform( \"\", kIdentity, \"'\" ),\n new Transform( \"\", kIdentity, \" from \" ),\n new Transform( \"\", kIdentity, \" by \" ),\n new Transform( \"\", kOmitFirst5, \"\" ),\n new Transform( \"\", kOmitFirst6, \"\" ),\n new Transform( \" the \", kIdentity, \"\" ),\n new Transform( \"\", kOmitLast4, \"\" ),\n new Transform( \"\", kIdentity, \". The \" ),\n new Transform( \"\", kUppercaseAll, \"\" ),\n new Transform( \"\", kIdentity, \" on \" ),\n new Transform( \"\", kIdentity, \" as \" ),\n new Transform( \"\", kIdentity, \" is \" ),\n new Transform( \"\", kOmitLast7, \"\" ),\n new Transform( \"\", kOmitLast1, \"ing \" ),\n new Transform( \"\", kIdentity, \"\\n\\t\" ),\n new Transform( \"\", kIdentity, \":\" ),\n new Transform( \" \", kIdentity, \". \" ),\n new Transform( \"\", kIdentity, \"ed \" ),\n new Transform( \"\", kOmitFirst9, \"\" ),\n new Transform( \"\", kOmitFirst7, \"\" ),\n new Transform( \"\", kOmitLast6, \"\" ),\n new Transform( \"\", kIdentity, \"(\" ),\n new Transform( \"\", kUppercaseFirst, \", \" ),\n new Transform( \"\", kOmitLast8, \"\" ),\n new Transform( \"\", kIdentity, \" at \" ),\n new Transform( \"\", kIdentity, \"ly \" ),\n new Transform( \" the \", kIdentity, \" of \" ),\n new Transform( \"\", kOmitLast5, \"\" ),\n new Transform( \"\", kOmitLast9, \"\" ),\n new Transform( \" \", kUppercaseFirst, \", \" ),\n new Transform( \"\", kUppercaseFirst, \"\\\"\" ),\n new Transform( \".\", kIdentity, \"(\" ),\n new Transform( \"\", kUppercaseAll, \" \" ),\n new Transform( \"\", kUppercaseFirst, \"\\\">\" ),\n new Transform( \"\", kIdentity, \"=\\\"\" ),\n new Transform( \" \", kIdentity, \".\" ),\n new Transform( \".com/\", kIdentity, \"\" ),\n new Transform( \" the \", kIdentity, \" of the \" ),\n new Transform( \"\", kUppercaseFirst, \"'\" ),\n new Transform( \"\", kIdentity, \". This \" ),\n new Transform( \"\", kIdentity, \",\" ),\n new Transform( \".\", kIdentity, \" \" ),\n new Transform( \"\", kUppercaseFirst, \"(\" ),\n new Transform( \"\", kUppercaseFirst, \".\" ),\n new Transform( \"\", kIdentity, \" not \" ),\n new Transform( \" \", kIdentity, \"=\\\"\" ),\n new Transform( \"\", kIdentity, \"er \" ),\n new Transform( \" \", kUppercaseAll, \" \" ),\n new Transform( \"\", kIdentity, \"al \" ),\n new Transform( \" \", kUppercaseAll, \"\" ),\n new Transform( \"\", kIdentity, \"='\" ),\n new Transform( \"\", kUppercaseAll, \"\\\"\" ),\n new Transform( \"\", kUppercaseFirst, \". \" ),\n new Transform( \" \", kIdentity, \"(\" ),\n new Transform( \"\", kIdentity, \"ful \" ),\n new Transform( \" \", kUppercaseFirst, \". \" ),\n new Transform( \"\", kIdentity, \"ive \" ),\n new Transform( \"\", kIdentity, \"less \" ),\n new Transform( \"\", kUppercaseAll, \"'\" ),\n new Transform( \"\", kIdentity, \"est \" ),\n new Transform( \" \", kUppercaseFirst, \".\" ),\n new Transform( \"\", kUppercaseAll, \"\\\">\" ),\n new Transform( \" \", kIdentity, \"='\" ),\n new Transform( \"\", kUppercaseFirst, \",\" ),\n new Transform( \"\", kIdentity, \"ize \" ),\n new Transform( \"\", kUppercaseAll, \".\" ),\n new Transform( \"\\xc2\\xa0\", kIdentity, \"\" ),\n new Transform( \" \", kIdentity, \",\" ),\n new Transform( \"\", kUppercaseFirst, \"=\\\"\" ),\n new Transform( \"\", kUppercaseAll, \"=\\\"\" ),\n new Transform( \"\", kIdentity, \"ous \" ),\n new Transform( \"\", kUppercaseAll, \", \" ),\n new Transform( \"\", kUppercaseFirst, \"='\" ),\n new Transform( \" \", kUppercaseFirst, \",\" ),\n new Transform( \" \", kUppercaseAll, \"=\\\"\" ),\n new Transform( \" \", kUppercaseAll, \", \" ),\n new Transform( \"\", kUppercaseAll, \",\" ),\n new Transform( \"\", kUppercaseAll, \"(\" ),\n new Transform( \"\", kUppercaseAll, \". \" ),\n new Transform( \" \", kUppercaseAll, \".\" ),\n new Transform( \"\", kUppercaseAll, \"='\" ),\n new Transform( \" \", kUppercaseAll, \". \" ),\n new Transform( \" \", kUppercaseFirst, \"=\\\"\" ),\n new Transform( \" \", kUppercaseAll, \"='\" ),\n new Transform( \" \", kUppercaseFirst, \"='\" )\n];\n\nexports.kTransforms = kTransforms;\nexports.kNumTransforms = kTransforms.length;\n\nfunction ToUpperCase(p, i) {\n if (p[i] < 0xc0) {\n if (p[i] >= 97 && p[i] <= 122) {\n p[i] ^= 32;\n }\n return 1;\n }\n \n /* An overly simplified uppercasing model for utf-8. */\n if (p[i] < 0xe0) {\n p[i + 1] ^= 32;\n return 2;\n }\n \n /* An arbitrary transform for three byte characters. */\n p[i + 2] ^= 5;\n return 3;\n}\n\nexports.transformDictionaryWord = function(dst, idx, word, len, transform) {\n var prefix = kTransforms[transform].prefix;\n var suffix = kTransforms[transform].suffix;\n var t = kTransforms[transform].transform;\n var skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1);\n var i = 0;\n var start_idx = idx;\n var uppercase;\n \n if (skip > len) {\n skip = len;\n }\n \n var prefix_pos = 0;\n while (prefix_pos < prefix.length) {\n dst[idx++] = prefix[prefix_pos++];\n }\n \n word += skip;\n len -= skip;\n \n if (t <= kOmitLast9) {\n len -= t;\n }\n \n for (i = 0; i < len; i++) {\n dst[idx++] = BrotliDictionary.dictionary[word + i];\n }\n \n uppercase = idx - len;\n \n if (t === kUppercaseFirst) {\n ToUpperCase(dst, uppercase);\n } else if (t === kUppercaseAll) {\n while (len > 0) {\n var step = ToUpperCase(dst, uppercase);\n uppercase += step;\n len -= step;\n }\n }\n \n var suffix_pos = 0;\n while (suffix_pos < suffix.length) {\n dst[idx++] = suffix[suffix_pos++];\n }\n \n return idx - start_idx;\n}\n","module.exports = require('./dec/decode').BrotliDecompressBuffer;\n","'use strict';\n/* eslint camelcase: \"off\" */\n\nvar assert = require('assert');\n\nvar Zstream = require('pako/lib/zlib/zstream');\nvar zlib_deflate = require('pako/lib/zlib/deflate.js');\nvar zlib_inflate = require('pako/lib/zlib/inflate.js');\nvar constants = require('pako/lib/zlib/constants');\n\nfor (var key in constants) {\n exports[key] = constants[key];\n}\n\n// zlib modes\nexports.NONE = 0;\nexports.DEFLATE = 1;\nexports.INFLATE = 2;\nexports.GZIP = 3;\nexports.GUNZIP = 4;\nexports.DEFLATERAW = 5;\nexports.INFLATERAW = 6;\nexports.UNZIP = 7;\n\nvar GZIP_HEADER_ID1 = 0x1f;\nvar GZIP_HEADER_ID2 = 0x8b;\n\n/**\n * Emulate Node's zlib C++ layer for use by the JS layer in index.js\n */\nfunction Zlib(mode) {\n if (typeof mode !== 'number' || mode < exports.DEFLATE || mode > exports.UNZIP) {\n throw new TypeError('Bad argument');\n }\n\n this.dictionary = null;\n this.err = 0;\n this.flush = 0;\n this.init_done = false;\n this.level = 0;\n this.memLevel = 0;\n this.mode = mode;\n this.strategy = 0;\n this.windowBits = 0;\n this.write_in_progress = false;\n this.pending_close = false;\n this.gzip_id_bytes_read = 0;\n}\n\nZlib.prototype.close = function () {\n if (this.write_in_progress) {\n this.pending_close = true;\n return;\n }\n\n this.pending_close = false;\n\n assert(this.init_done, 'close before init');\n assert(this.mode <= exports.UNZIP);\n\n if (this.mode === exports.DEFLATE || this.mode === exports.GZIP || this.mode === exports.DEFLATERAW) {\n zlib_deflate.deflateEnd(this.strm);\n } else if (this.mode === exports.INFLATE || this.mode === exports.GUNZIP || this.mode === exports.INFLATERAW || this.mode === exports.UNZIP) {\n zlib_inflate.inflateEnd(this.strm);\n }\n\n this.mode = exports.NONE;\n\n this.dictionary = null;\n};\n\nZlib.prototype.write = function (flush, input, in_off, in_len, out, out_off, out_len) {\n return this._write(true, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype.writeSync = function (flush, input, in_off, in_len, out, out_off, out_len) {\n return this._write(false, flush, input, in_off, in_len, out, out_off, out_len);\n};\n\nZlib.prototype._write = function (async, flush, input, in_off, in_len, out, out_off, out_len) {\n assert.equal(arguments.length, 8);\n\n assert(this.init_done, 'write before init');\n assert(this.mode !== exports.NONE, 'already finalized');\n assert.equal(false, this.write_in_progress, 'write already in progress');\n assert.equal(false, this.pending_close, 'close is pending');\n\n this.write_in_progress = true;\n\n assert.equal(false, flush === undefined, 'must provide flush value');\n\n this.write_in_progress = true;\n\n if (flush !== exports.Z_NO_FLUSH && flush !== exports.Z_PARTIAL_FLUSH && flush !== exports.Z_SYNC_FLUSH && flush !== exports.Z_FULL_FLUSH && flush !== exports.Z_FINISH && flush !== exports.Z_BLOCK) {\n throw new Error('Invalid flush value');\n }\n\n if (input == null) {\n input = Buffer.alloc(0);\n in_len = 0;\n in_off = 0;\n }\n\n this.strm.avail_in = in_len;\n this.strm.input = input;\n this.strm.next_in = in_off;\n this.strm.avail_out = out_len;\n this.strm.output = out;\n this.strm.next_out = out_off;\n this.flush = flush;\n\n if (!async) {\n // sync version\n this._process();\n\n if (this._checkError()) {\n return this._afterSync();\n }\n return;\n }\n\n // async version\n var self = this;\n process.nextTick(function () {\n self._process();\n self._after();\n });\n\n return this;\n};\n\nZlib.prototype._afterSync = function () {\n var avail_out = this.strm.avail_out;\n var avail_in = this.strm.avail_in;\n\n this.write_in_progress = false;\n\n return [avail_in, avail_out];\n};\n\nZlib.prototype._process = function () {\n var next_expected_header_byte = null;\n\n // If the avail_out is left at 0, then it means that it ran out\n // of room. If there was avail_out left over, then it means\n // that all of the input was consumed.\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.GZIP:\n case exports.DEFLATERAW:\n this.err = zlib_deflate.deflate(this.strm, this.flush);\n break;\n case exports.UNZIP:\n if (this.strm.avail_in > 0) {\n next_expected_header_byte = this.strm.next_in;\n }\n\n switch (this.gzip_id_bytes_read) {\n case 0:\n if (next_expected_header_byte === null) {\n break;\n }\n\n if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID1) {\n this.gzip_id_bytes_read = 1;\n next_expected_header_byte++;\n\n if (this.strm.avail_in === 1) {\n // The only available byte was already read.\n break;\n }\n } else {\n this.mode = exports.INFLATE;\n break;\n }\n\n // fallthrough\n case 1:\n if (next_expected_header_byte === null) {\n break;\n }\n\n if (this.strm.input[next_expected_header_byte] === GZIP_HEADER_ID2) {\n this.gzip_id_bytes_read = 2;\n this.mode = exports.GUNZIP;\n } else {\n // There is no actual difference between INFLATE and INFLATERAW\n // (after initialization).\n this.mode = exports.INFLATE;\n }\n\n break;\n default:\n throw new Error('invalid number of gzip magic number bytes read');\n }\n\n // fallthrough\n case exports.INFLATE:\n case exports.GUNZIP:\n case exports.INFLATERAW:\n this.err = zlib_inflate.inflate(this.strm, this.flush\n\n // If data was encoded with dictionary\n );if (this.err === exports.Z_NEED_DICT && this.dictionary) {\n // Load it\n this.err = zlib_inflate.inflateSetDictionary(this.strm, this.dictionary);\n if (this.err === exports.Z_OK) {\n // And try to decode again\n this.err = zlib_inflate.inflate(this.strm, this.flush);\n } else if (this.err === exports.Z_DATA_ERROR) {\n // Both inflateSetDictionary() and inflate() return Z_DATA_ERROR.\n // Make it possible for After() to tell a bad dictionary from bad\n // input.\n this.err = exports.Z_NEED_DICT;\n }\n }\n while (this.strm.avail_in > 0 && this.mode === exports.GUNZIP && this.err === exports.Z_STREAM_END && this.strm.next_in[0] !== 0x00) {\n // Bytes remain in input buffer. Perhaps this is another compressed\n // member in the same archive, or just trailing garbage.\n // Trailing zero bytes are okay, though, since they are frequently\n // used for padding.\n\n this.reset();\n this.err = zlib_inflate.inflate(this.strm, this.flush);\n }\n break;\n default:\n throw new Error('Unknown mode ' + this.mode);\n }\n};\n\nZlib.prototype._checkError = function () {\n // Acceptable error states depend on the type of zlib stream.\n switch (this.err) {\n case exports.Z_OK:\n case exports.Z_BUF_ERROR:\n if (this.strm.avail_out !== 0 && this.flush === exports.Z_FINISH) {\n this._error('unexpected end of file');\n return false;\n }\n break;\n case exports.Z_STREAM_END:\n // normal statuses, not fatal\n break;\n case exports.Z_NEED_DICT:\n if (this.dictionary == null) {\n this._error('Missing dictionary');\n } else {\n this._error('Bad dictionary');\n }\n return false;\n default:\n // something else.\n this._error('Zlib error');\n return false;\n }\n\n return true;\n};\n\nZlib.prototype._after = function () {\n if (!this._checkError()) {\n return;\n }\n\n var avail_out = this.strm.avail_out;\n var avail_in = this.strm.avail_in;\n\n this.write_in_progress = false;\n\n // call the write() cb\n this.callback(avail_in, avail_out);\n\n if (this.pending_close) {\n this.close();\n }\n};\n\nZlib.prototype._error = function (message) {\n if (this.strm.msg) {\n message = this.strm.msg;\n }\n this.onerror(message, this.err\n\n // no hope of rescue.\n );this.write_in_progress = false;\n if (this.pending_close) {\n this.close();\n }\n};\n\nZlib.prototype.init = function (windowBits, level, memLevel, strategy, dictionary) {\n assert(arguments.length === 4 || arguments.length === 5, 'init(windowBits, level, memLevel, strategy, [dictionary])');\n\n assert(windowBits >= 8 && windowBits <= 15, 'invalid windowBits');\n assert(level >= -1 && level <= 9, 'invalid compression level');\n\n assert(memLevel >= 1 && memLevel <= 9, 'invalid memlevel');\n\n assert(strategy === exports.Z_FILTERED || strategy === exports.Z_HUFFMAN_ONLY || strategy === exports.Z_RLE || strategy === exports.Z_FIXED || strategy === exports.Z_DEFAULT_STRATEGY, 'invalid strategy');\n\n this._init(level, windowBits, memLevel, strategy, dictionary);\n this._setDictionary();\n};\n\nZlib.prototype.params = function () {\n throw new Error('deflateParams Not supported');\n};\n\nZlib.prototype.reset = function () {\n this._reset();\n this._setDictionary();\n};\n\nZlib.prototype._init = function (level, windowBits, memLevel, strategy, dictionary) {\n this.level = level;\n this.windowBits = windowBits;\n this.memLevel = memLevel;\n this.strategy = strategy;\n\n this.flush = exports.Z_NO_FLUSH;\n\n this.err = exports.Z_OK;\n\n if (this.mode === exports.GZIP || this.mode === exports.GUNZIP) {\n this.windowBits += 16;\n }\n\n if (this.mode === exports.UNZIP) {\n this.windowBits += 32;\n }\n\n if (this.mode === exports.DEFLATERAW || this.mode === exports.INFLATERAW) {\n this.windowBits = -1 * this.windowBits;\n }\n\n this.strm = new Zstream();\n\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.GZIP:\n case exports.DEFLATERAW:\n this.err = zlib_deflate.deflateInit2(this.strm, this.level, exports.Z_DEFLATED, this.windowBits, this.memLevel, this.strategy);\n break;\n case exports.INFLATE:\n case exports.GUNZIP:\n case exports.INFLATERAW:\n case exports.UNZIP:\n this.err = zlib_inflate.inflateInit2(this.strm, this.windowBits);\n break;\n default:\n throw new Error('Unknown mode ' + this.mode);\n }\n\n if (this.err !== exports.Z_OK) {\n this._error('Init error');\n }\n\n this.dictionary = dictionary;\n\n this.write_in_progress = false;\n this.init_done = true;\n};\n\nZlib.prototype._setDictionary = function () {\n if (this.dictionary == null) {\n return;\n }\n\n this.err = exports.Z_OK;\n\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.DEFLATERAW:\n this.err = zlib_deflate.deflateSetDictionary(this.strm, this.dictionary);\n break;\n default:\n break;\n }\n\n if (this.err !== exports.Z_OK) {\n this._error('Failed to set dictionary');\n }\n};\n\nZlib.prototype._reset = function () {\n this.err = exports.Z_OK;\n\n switch (this.mode) {\n case exports.DEFLATE:\n case exports.DEFLATERAW:\n case exports.GZIP:\n this.err = zlib_deflate.deflateReset(this.strm);\n break;\n case exports.INFLATE:\n case exports.INFLATERAW:\n case exports.GUNZIP:\n this.err = zlib_inflate.inflateReset(this.strm);\n break;\n default:\n break;\n }\n\n if (this.err !== exports.Z_OK) {\n this._error('Failed to reset stream');\n }\n};\n\nexports.Zlib = Zlib;","'use strict';\n\nvar Buffer = require('buffer').Buffer;\nvar Transform = require('stream').Transform;\nvar binding = require('./binding');\nvar util = require('util');\nvar assert = require('assert').ok;\nvar kMaxLength = require('buffer').kMaxLength;\nvar kRangeErrorMessage = 'Cannot create final Buffer. It would be larger ' + 'than 0x' + kMaxLength.toString(16) + ' bytes';\n\n// zlib doesn't provide these, so kludge them in following the same\n// const naming scheme zlib uses.\nbinding.Z_MIN_WINDOWBITS = 8;\nbinding.Z_MAX_WINDOWBITS = 15;\nbinding.Z_DEFAULT_WINDOWBITS = 15;\n\n// fewer than 64 bytes per chunk is stupid.\n// technically it could work with as few as 8, but even 64 bytes\n// is absurdly low. Usually a MB or more is best.\nbinding.Z_MIN_CHUNK = 64;\nbinding.Z_MAX_CHUNK = Infinity;\nbinding.Z_DEFAULT_CHUNK = 16 * 1024;\n\nbinding.Z_MIN_MEMLEVEL = 1;\nbinding.Z_MAX_MEMLEVEL = 9;\nbinding.Z_DEFAULT_MEMLEVEL = 8;\n\nbinding.Z_MIN_LEVEL = -1;\nbinding.Z_MAX_LEVEL = 9;\nbinding.Z_DEFAULT_LEVEL = binding.Z_DEFAULT_COMPRESSION;\n\n// expose all the zlib constants\nvar bkeys = Object.keys(binding);\nfor (var bk = 0; bk < bkeys.length; bk++) {\n var bkey = bkeys[bk];\n if (bkey.match(/^Z/)) {\n Object.defineProperty(exports, bkey, {\n enumerable: true, value: binding[bkey], writable: false\n });\n }\n}\n\n// translation table for return codes.\nvar codes = {\n Z_OK: binding.Z_OK,\n Z_STREAM_END: binding.Z_STREAM_END,\n Z_NEED_DICT: binding.Z_NEED_DICT,\n Z_ERRNO: binding.Z_ERRNO,\n Z_STREAM_ERROR: binding.Z_STREAM_ERROR,\n Z_DATA_ERROR: binding.Z_DATA_ERROR,\n Z_MEM_ERROR: binding.Z_MEM_ERROR,\n Z_BUF_ERROR: binding.Z_BUF_ERROR,\n Z_VERSION_ERROR: binding.Z_VERSION_ERROR\n};\n\nvar ckeys = Object.keys(codes);\nfor (var ck = 0; ck < ckeys.length; ck++) {\n var ckey = ckeys[ck];\n codes[codes[ckey]] = ckey;\n}\n\nObject.defineProperty(exports, 'codes', {\n enumerable: true, value: Object.freeze(codes), writable: false\n});\n\nexports.Deflate = Deflate;\nexports.Inflate = Inflate;\nexports.Gzip = Gzip;\nexports.Gunzip = Gunzip;\nexports.DeflateRaw = DeflateRaw;\nexports.InflateRaw = InflateRaw;\nexports.Unzip = Unzip;\n\nexports.createDeflate = function (o) {\n return new Deflate(o);\n};\n\nexports.createInflate = function (o) {\n return new Inflate(o);\n};\n\nexports.createDeflateRaw = function (o) {\n return new DeflateRaw(o);\n};\n\nexports.createInflateRaw = function (o) {\n return new InflateRaw(o);\n};\n\nexports.createGzip = function (o) {\n return new Gzip(o);\n};\n\nexports.createGunzip = function (o) {\n return new Gunzip(o);\n};\n\nexports.createUnzip = function (o) {\n return new Unzip(o);\n};\n\n// Convenience methods.\n// compress/decompress a string or buffer in one step.\nexports.deflate = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Deflate(opts), buffer, callback);\n};\n\nexports.deflateSync = function (buffer, opts) {\n return zlibBufferSync(new Deflate(opts), buffer);\n};\n\nexports.gzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Gzip(opts), buffer, callback);\n};\n\nexports.gzipSync = function (buffer, opts) {\n return zlibBufferSync(new Gzip(opts), buffer);\n};\n\nexports.deflateRaw = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new DeflateRaw(opts), buffer, callback);\n};\n\nexports.deflateRawSync = function (buffer, opts) {\n return zlibBufferSync(new DeflateRaw(opts), buffer);\n};\n\nexports.unzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Unzip(opts), buffer, callback);\n};\n\nexports.unzipSync = function (buffer, opts) {\n return zlibBufferSync(new Unzip(opts), buffer);\n};\n\nexports.inflate = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Inflate(opts), buffer, callback);\n};\n\nexports.inflateSync = function (buffer, opts) {\n return zlibBufferSync(new Inflate(opts), buffer);\n};\n\nexports.gunzip = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new Gunzip(opts), buffer, callback);\n};\n\nexports.gunzipSync = function (buffer, opts) {\n return zlibBufferSync(new Gunzip(opts), buffer);\n};\n\nexports.inflateRaw = function (buffer, opts, callback) {\n if (typeof opts === 'function') {\n callback = opts;\n opts = {};\n }\n return zlibBuffer(new InflateRaw(opts), buffer, callback);\n};\n\nexports.inflateRawSync = function (buffer, opts) {\n return zlibBufferSync(new InflateRaw(opts), buffer);\n};\n\nfunction zlibBuffer(engine, buffer, callback) {\n var buffers = [];\n var nread = 0;\n\n engine.on('error', onError);\n engine.on('end', onEnd);\n\n engine.end(buffer);\n flow();\n\n function flow() {\n var chunk;\n while (null !== (chunk = engine.read())) {\n buffers.push(chunk);\n nread += chunk.length;\n }\n engine.once('readable', flow);\n }\n\n function onError(err) {\n engine.removeListener('end', onEnd);\n engine.removeListener('readable', flow);\n callback(err);\n }\n\n function onEnd() {\n var buf;\n var err = null;\n\n if (nread >= kMaxLength) {\n err = new RangeError(kRangeErrorMessage);\n } else {\n buf = Buffer.concat(buffers, nread);\n }\n\n buffers = [];\n engine.close();\n callback(err, buf);\n }\n}\n\nfunction zlibBufferSync(engine, buffer) {\n if (typeof buffer === 'string') buffer = Buffer.from(buffer);\n\n if (!Buffer.isBuffer(buffer)) throw new TypeError('Not a string or buffer');\n\n var flushFlag = engine._finishFlushFlag;\n\n return engine._processChunk(buffer, flushFlag);\n}\n\n// generic zlib\n// minimal 2-byte header\nfunction Deflate(opts) {\n if (!(this instanceof Deflate)) return new Deflate(opts);\n Zlib.call(this, opts, binding.DEFLATE);\n}\n\nfunction Inflate(opts) {\n if (!(this instanceof Inflate)) return new Inflate(opts);\n Zlib.call(this, opts, binding.INFLATE);\n}\n\n// gzip - bigger header, same deflate compression\nfunction Gzip(opts) {\n if (!(this instanceof Gzip)) return new Gzip(opts);\n Zlib.call(this, opts, binding.GZIP);\n}\n\nfunction Gunzip(opts) {\n if (!(this instanceof Gunzip)) return new Gunzip(opts);\n Zlib.call(this, opts, binding.GUNZIP);\n}\n\n// raw - no header\nfunction DeflateRaw(opts) {\n if (!(this instanceof DeflateRaw)) return new DeflateRaw(opts);\n Zlib.call(this, opts, binding.DEFLATERAW);\n}\n\nfunction InflateRaw(opts) {\n if (!(this instanceof InflateRaw)) return new InflateRaw(opts);\n Zlib.call(this, opts, binding.INFLATERAW);\n}\n\n// auto-detect header.\nfunction Unzip(opts) {\n if (!(this instanceof Unzip)) return new Unzip(opts);\n Zlib.call(this, opts, binding.UNZIP);\n}\n\nfunction isValidFlushFlag(flag) {\n return flag === binding.Z_NO_FLUSH || flag === binding.Z_PARTIAL_FLUSH || flag === binding.Z_SYNC_FLUSH || flag === binding.Z_FULL_FLUSH || flag === binding.Z_FINISH || flag === binding.Z_BLOCK;\n}\n\n// the Zlib class they all inherit from\n// This thing manages the queue of requests, and returns\n// true or false if there is anything in the queue when\n// you call the .write() method.\n\nfunction Zlib(opts, mode) {\n var _this = this;\n\n this._opts = opts = opts || {};\n this._chunkSize = opts.chunkSize || exports.Z_DEFAULT_CHUNK;\n\n Transform.call(this, opts);\n\n if (opts.flush && !isValidFlushFlag(opts.flush)) {\n throw new Error('Invalid flush flag: ' + opts.flush);\n }\n if (opts.finishFlush && !isValidFlushFlag(opts.finishFlush)) {\n throw new Error('Invalid flush flag: ' + opts.finishFlush);\n }\n\n this._flushFlag = opts.flush || binding.Z_NO_FLUSH;\n this._finishFlushFlag = typeof opts.finishFlush !== 'undefined' ? opts.finishFlush : binding.Z_FINISH;\n\n if (opts.chunkSize) {\n if (opts.chunkSize < exports.Z_MIN_CHUNK || opts.chunkSize > exports.Z_MAX_CHUNK) {\n throw new Error('Invalid chunk size: ' + opts.chunkSize);\n }\n }\n\n if (opts.windowBits) {\n if (opts.windowBits < exports.Z_MIN_WINDOWBITS || opts.windowBits > exports.Z_MAX_WINDOWBITS) {\n throw new Error('Invalid windowBits: ' + opts.windowBits);\n }\n }\n\n if (opts.level) {\n if (opts.level < exports.Z_MIN_LEVEL || opts.level > exports.Z_MAX_LEVEL) {\n throw new Error('Invalid compression level: ' + opts.level);\n }\n }\n\n if (opts.memLevel) {\n if (opts.memLevel < exports.Z_MIN_MEMLEVEL || opts.memLevel > exports.Z_MAX_MEMLEVEL) {\n throw new Error('Invalid memLevel: ' + opts.memLevel);\n }\n }\n\n if (opts.strategy) {\n if (opts.strategy != exports.Z_FILTERED && opts.strategy != exports.Z_HUFFMAN_ONLY && opts.strategy != exports.Z_RLE && opts.strategy != exports.Z_FIXED && opts.strategy != exports.Z_DEFAULT_STRATEGY) {\n throw new Error('Invalid strategy: ' + opts.strategy);\n }\n }\n\n if (opts.dictionary) {\n if (!Buffer.isBuffer(opts.dictionary)) {\n throw new Error('Invalid dictionary: it should be a Buffer instance');\n }\n }\n\n this._handle = new binding.Zlib(mode);\n\n var self = this;\n this._hadError = false;\n this._handle.onerror = function (message, errno) {\n // there is no way to cleanly recover.\n // continuing only obscures problems.\n _close(self);\n self._hadError = true;\n\n var error = new Error(message);\n error.errno = errno;\n error.code = exports.codes[errno];\n self.emit('error', error);\n };\n\n var level = exports.Z_DEFAULT_COMPRESSION;\n if (typeof opts.level === 'number') level = opts.level;\n\n var strategy = exports.Z_DEFAULT_STRATEGY;\n if (typeof opts.strategy === 'number') strategy = opts.strategy;\n\n this._handle.init(opts.windowBits || exports.Z_DEFAULT_WINDOWBITS, level, opts.memLevel || exports.Z_DEFAULT_MEMLEVEL, strategy, opts.dictionary);\n\n this._buffer = Buffer.allocUnsafe(this._chunkSize);\n this._offset = 0;\n this._level = level;\n this._strategy = strategy;\n\n this.once('end', this.close);\n\n Object.defineProperty(this, '_closed', {\n get: function () {\n return !_this._handle;\n },\n configurable: true,\n enumerable: true\n });\n}\n\nutil.inherits(Zlib, Transform);\n\nZlib.prototype.params = function (level, strategy, callback) {\n if (level < exports.Z_MIN_LEVEL || level > exports.Z_MAX_LEVEL) {\n throw new RangeError('Invalid compression level: ' + level);\n }\n if (strategy != exports.Z_FILTERED && strategy != exports.Z_HUFFMAN_ONLY && strategy != exports.Z_RLE && strategy != exports.Z_FIXED && strategy != exports.Z_DEFAULT_STRATEGY) {\n throw new TypeError('Invalid strategy: ' + strategy);\n }\n\n if (this._level !== level || this._strategy !== strategy) {\n var self = this;\n this.flush(binding.Z_SYNC_FLUSH, function () {\n assert(self._handle, 'zlib binding closed');\n self._handle.params(level, strategy);\n if (!self._hadError) {\n self._level = level;\n self._strategy = strategy;\n if (callback) callback();\n }\n });\n } else {\n process.nextTick(callback);\n }\n};\n\nZlib.prototype.reset = function () {\n assert(this._handle, 'zlib binding closed');\n return this._handle.reset();\n};\n\n// This is the _flush function called by the transform class,\n// internally, when the last chunk has been written.\nZlib.prototype._flush = function (callback) {\n this._transform(Buffer.alloc(0), '', callback);\n};\n\nZlib.prototype.flush = function (kind, callback) {\n var _this2 = this;\n\n var ws = this._writableState;\n\n if (typeof kind === 'function' || kind === undefined && !callback) {\n callback = kind;\n kind = binding.Z_FULL_FLUSH;\n }\n\n if (ws.ended) {\n if (callback) process.nextTick(callback);\n } else if (ws.ending) {\n if (callback) this.once('end', callback);\n } else if (ws.needDrain) {\n if (callback) {\n this.once('drain', function () {\n return _this2.flush(kind, callback);\n });\n }\n } else {\n this._flushFlag = kind;\n this.write(Buffer.alloc(0), '', callback);\n }\n};\n\nZlib.prototype.close = function (callback) {\n _close(this, callback);\n process.nextTick(emitCloseNT, this);\n};\n\nfunction _close(engine, callback) {\n if (callback) process.nextTick(callback);\n\n // Caller may invoke .close after a zlib error (which will null _handle).\n if (!engine._handle) return;\n\n engine._handle.close();\n engine._handle = null;\n}\n\nfunction emitCloseNT(self) {\n self.emit('close');\n}\n\nZlib.prototype._transform = function (chunk, encoding, cb) {\n var flushFlag;\n var ws = this._writableState;\n var ending = ws.ending || ws.ended;\n var last = ending && (!chunk || ws.length === chunk.length);\n\n if (chunk !== null && !Buffer.isBuffer(chunk)) return cb(new Error('invalid input'));\n\n if (!this._handle) return cb(new Error('zlib binding closed'));\n\n // If it's the last chunk, or a final flush, we use the Z_FINISH flush flag\n // (or whatever flag was provided using opts.finishFlush).\n // If it's explicitly flushing at some other time, then we use\n // Z_FULL_FLUSH. Otherwise, use Z_NO_FLUSH for maximum compression\n // goodness.\n if (last) flushFlag = this._finishFlushFlag;else {\n flushFlag = this._flushFlag;\n // once we've flushed the last of the queue, stop flushing and\n // go back to the normal behavior.\n if (chunk.length >= ws.length) {\n this._flushFlag = this._opts.flush || binding.Z_NO_FLUSH;\n }\n }\n\n this._processChunk(chunk, flushFlag, cb);\n};\n\nZlib.prototype._processChunk = function (chunk, flushFlag, cb) {\n var availInBefore = chunk && chunk.length;\n var availOutBefore = this._chunkSize - this._offset;\n var inOff = 0;\n\n var self = this;\n\n var async = typeof cb === 'function';\n\n if (!async) {\n var buffers = [];\n var nread = 0;\n\n var error;\n this.on('error', function (er) {\n error = er;\n });\n\n assert(this._handle, 'zlib binding closed');\n do {\n var res = this._handle.writeSync(flushFlag, chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore); // out_len\n } while (!this._hadError && callback(res[0], res[1]));\n\n if (this._hadError) {\n throw error;\n }\n\n if (nread >= kMaxLength) {\n _close(this);\n throw new RangeError(kRangeErrorMessage);\n }\n\n var buf = Buffer.concat(buffers, nread);\n _close(this);\n\n return buf;\n }\n\n assert(this._handle, 'zlib binding closed');\n var req = this._handle.write(flushFlag, chunk, // in\n inOff, // in_off\n availInBefore, // in_len\n this._buffer, // out\n this._offset, //out_off\n availOutBefore); // out_len\n\n req.buffer = chunk;\n req.callback = callback;\n\n function callback(availInAfter, availOutAfter) {\n // When the callback is used in an async write, the callback's\n // context is the `req` object that was created. The req object\n // is === this._handle, and that's why it's important to null\n // out the values after they are done being used. `this._handle`\n // can stay in memory longer than the callback and buffer are needed.\n if (this) {\n this.buffer = null;\n this.callback = null;\n }\n\n if (self._hadError) return;\n\n var have = availOutBefore - availOutAfter;\n assert(have >= 0, 'have should not go down');\n\n if (have > 0) {\n var out = self._buffer.slice(self._offset, self._offset + have);\n self._offset += have;\n // serve some output to the consumer.\n if (async) {\n self.push(out);\n } else {\n buffers.push(out);\n nread += out.length;\n }\n }\n\n // exhausted the output buffer, or used all the input create a new one.\n if (availOutAfter === 0 || self._offset >= self._chunkSize) {\n availOutBefore = self._chunkSize;\n self._offset = 0;\n self._buffer = Buffer.allocUnsafe(self._chunkSize);\n }\n\n if (availOutAfter === 0) {\n // Not actually done. Need to reprocess.\n // Also, update the availInBefore to the availInAfter value,\n // so that if we have to hit it a third (fourth, etc.) time,\n // it'll have the correct byte counts.\n inOff += availInBefore - availInAfter;\n availInBefore = availInAfter;\n\n if (!async) return true;\n\n var newReq = self._handle.write(flushFlag, chunk, inOff, availInBefore, self._buffer, self._offset, self._chunkSize);\n newReq.callback = callback; // this same function\n newReq.buffer = chunk;\n return;\n }\n\n if (!async) return false;\n\n // finished with the chunk.\n cb();\n }\n};\n\nutil.inherits(Deflate, Zlib);\nutil.inherits(Inflate, Zlib);\nutil.inherits(Gzip, Zlib);\nutil.inherits(Gunzip, Zlib);\nutil.inherits(DeflateRaw, Zlib);\nutil.inherits(InflateRaw, Zlib);\nutil.inherits(Unzip, Zlib);","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar callBind = require('./');\n\nvar $indexOf = callBind(GetIntrinsic('String.prototype.indexOf'));\n\nmodule.exports = function callBoundIntrinsic(name, allowMissing) {\n\tvar intrinsic = GetIntrinsic(name, !!allowMissing);\n\tif (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) {\n\t\treturn callBind(intrinsic);\n\t}\n\treturn intrinsic;\n};\n","'use strict';\n\nvar bind = require('function-bind');\nvar GetIntrinsic = require('get-intrinsic');\nvar setFunctionLength = require('set-function-length');\n\nvar $TypeError = require('es-errors/type');\nvar $apply = GetIntrinsic('%Function.prototype.apply%');\nvar $call = GetIntrinsic('%Function.prototype.call%');\nvar $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply);\n\nvar $defineProperty = require('es-define-property');\nvar $max = GetIntrinsic('%Math.max%');\n\nmodule.exports = function callBind(originalFunction) {\n\tif (typeof originalFunction !== 'function') {\n\t\tthrow new $TypeError('a function is required');\n\t}\n\tvar func = $reflectApply(bind, $call, arguments);\n\treturn setFunctionLength(\n\t\tfunc,\n\t\t1 + $max(0, originalFunction.length - (arguments.length - 1)),\n\t\ttrue\n\t);\n};\n\nvar applyBind = function applyBind() {\n\treturn $reflectApply(bind, $apply, arguments);\n};\n\nif ($defineProperty) {\n\t$defineProperty(module.exports, 'apply', { value: applyBind });\n} else {\n\tmodule.exports.apply = applyBind;\n}\n","var clone = (function() {\n'use strict';\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n * circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n * a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n * (optional - defaults to parent prototype).\n*/\nfunction clone(parent, circular, depth, prototype) {\n var filter;\n if (typeof circular === 'object') {\n depth = circular.depth;\n prototype = circular.prototype;\n filter = circular.filter;\n circular = circular.circular\n }\n // maintain two arrays for circular references, where corresponding parents\n // and children have the same index\n var allParents = [];\n var allChildren = [];\n\n var useBuffer = typeof Buffer != 'undefined';\n\n if (typeof circular == 'undefined')\n circular = true;\n\n if (typeof depth == 'undefined')\n depth = Infinity;\n\n // recurse this function so we don't reset allParents and allChildren\n function _clone(parent, depth) {\n // cloning null always returns null\n if (parent === null)\n return null;\n\n if (depth == 0)\n return parent;\n\n var child;\n var proto;\n if (typeof parent != 'object') {\n return parent;\n }\n\n if (clone.__isArray(parent)) {\n child = [];\n } else if (clone.__isRegExp(parent)) {\n child = new RegExp(parent.source, __getRegExpFlags(parent));\n if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n } else if (clone.__isDate(parent)) {\n child = new Date(parent.getTime());\n } else if (useBuffer && Buffer.isBuffer(parent)) {\n if (Buffer.allocUnsafe) {\n // Node.js >= 4.5.0\n child = Buffer.allocUnsafe(parent.length);\n } else {\n // Older Node.js versions\n child = new Buffer(parent.length);\n }\n parent.copy(child);\n return child;\n } else {\n if (typeof prototype == 'undefined') {\n proto = Object.getPrototypeOf(parent);\n child = Object.create(proto);\n }\n else {\n child = Object.create(prototype);\n proto = prototype;\n }\n }\n\n if (circular) {\n var index = allParents.indexOf(parent);\n\n if (index != -1) {\n return allChildren[index];\n }\n allParents.push(parent);\n allChildren.push(child);\n }\n\n for (var i in parent) {\n var attrs;\n if (proto) {\n attrs = Object.getOwnPropertyDescriptor(proto, i);\n }\n\n if (attrs && attrs.set == null) {\n continue;\n }\n child[i] = _clone(parent[i], depth - 1);\n }\n\n return child;\n }\n\n return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n if (parent === null)\n return null;\n\n var c = function () {};\n c.prototype = parent;\n return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n return Object.prototype.toString.call(o);\n};\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Date]';\n};\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n return typeof o === 'object' && __objToStr(o) === '[object Array]';\n};\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n};\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n var flags = '';\n if (re.global) flags += 'g';\n if (re.ignoreCase) flags += 'i';\n if (re.multiline) flags += 'm';\n return flags;\n};\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n module.exports = clone;\n}\n","require('../../modules/es.object.values');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Object.values;\n","require('../../modules/es.aggregate-error');\nrequire('../../modules/es.array.iterator');\nrequire('../../modules/es.object.to-string');\nrequire('../../modules/es.promise');\nrequire('../../modules/es.promise.all-settled');\nrequire('../../modules/es.promise.any');\nrequire('../../modules/es.promise.finally');\nrequire('../../modules/es.string.iterator');\nvar path = require('../../internals/path');\n\nmodule.exports = path.Promise;\n","var parent = require('../../stable/promise');\nrequire('../../modules/esnext.aggregate-error');\n// TODO: Remove from `core-js@4`\nrequire('../../modules/esnext.promise.all-settled');\nrequire('../../modules/esnext.promise.try');\nrequire('../../modules/esnext.promise.any');\n\nmodule.exports = parent;\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsCallable(argument) is true`\nmodule.exports = function (argument) {\n if (isCallable(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a function');\n};\n","var global = require('../internals/global');\nvar isConstructor = require('../internals/is-constructor');\nvar tryToString = require('../internals/try-to-string');\n\nvar TypeError = global.TypeError;\n\n// `Assert: IsConstructor(argument) is true`\nmodule.exports = function (argument) {\n if (isConstructor(argument)) return argument;\n throw TypeError(tryToString(argument) + ' is not a constructor');\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument) {\n if (typeof argument == 'object' || isCallable(argument)) return argument;\n throw TypeError(\"Can't set \" + String(argument) + ' as a prototype');\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar create = require('../internals/object-create');\nvar definePropertyModule = require('../internals/object-define-property');\n\nvar UNSCOPABLES = wellKnownSymbol('unscopables');\nvar ArrayPrototype = Array.prototype;\n\n// Array.prototype[@@unscopables]\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\nif (ArrayPrototype[UNSCOPABLES] == undefined) {\n definePropertyModule.f(ArrayPrototype, UNSCOPABLES, {\n configurable: true,\n value: create(null)\n });\n}\n\n// add a key to Array.prototype[@@unscopables]\nmodule.exports = function (key) {\n ArrayPrototype[UNSCOPABLES][key] = true;\n};\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\n\n// `AdvanceStringIndex` abstract operation\n// https://tc39.es/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? charAt(S, index).length : 1);\n};\n","var global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it, Prototype) {\n if (isPrototypeOf(Prototype, it)) return it;\n throw TypeError('Incorrect invocation');\n};\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar String = global.String;\nvar TypeError = global.TypeError;\n\n// `Assert: Type(argument) is Object`\nmodule.exports = function (argument) {\n if (isObject(argument)) return argument;\n throw TypeError(String(argument) + ' is not an object');\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar min = Math.min;\n\n// `Array.prototype.copyWithin` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n// eslint-disable-next-line es/no-array-prototype-copywithin -- safe\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","'use strict';\nvar toObject = require('../internals/to-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.fill` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.fill\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = lengthOfArrayLike(O);\n var argumentsLength = arguments.length;\n var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);\n var end = argumentsLength > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar $forEach = require('../internals/array-iteration').forEach;\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar STRICT_METHOD = arrayMethodIsStrict('forEach');\n\n// `Array.prototype.forEach` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.foreach\nmodule.exports = !STRICT_METHOD ? function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n// eslint-disable-next-line es/no-array-prototype-foreach -- safe\n} : [].forEach;\n","module.exports = function (Constructor, list) {\n var index = 0;\n var length = list.length;\n var result = new Constructor(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar toObject = require('../internals/to-object');\nvar callWithSafeIterationClosing = require('../internals/call-with-safe-iteration-closing');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar isConstructor = require('../internals/is-constructor');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar Array = global.Array;\n\n// `Array.from` method implementation\n// https://tc39.es/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var IS_CONSTRUCTOR = isConstructor(this);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined);\n var iteratorMethod = getIteratorMethod(O);\n var index = 0;\n var length, result, step, iterator, next, value;\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod && !(this == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n result = IS_CONSTRUCTOR ? new this() : [];\n for (;!(step = call(next, iterator)).done; index++) {\n value = mapping ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true) : step.value;\n createProperty(result, index, value);\n }\n } else {\n length = lengthOfArrayLike(O);\n result = IS_CONSTRUCTOR ? new this(length) : Array(length);\n for (;length > index; index++) {\n value = mapping ? mapfn(O[index], index) : O[index];\n createProperty(result, index, value);\n }\n }\n result.length = index;\n return result;\n};\n","var toIndexedObject = require('../internals/to-indexed-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\nvar createMethod = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = lengthOfArrayLike(O);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare -- NaN check\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare -- NaN check\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) {\n if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.includes` method\n // https://tc39.es/ecma262/#sec-array.prototype.includes\n includes: createMethod(true),\n // `Array.prototype.indexOf` method\n // https://tc39.es/ecma262/#sec-array.prototype.indexof\n indexOf: createMethod(false)\n};\n","var bind = require('../internals/function-bind-context');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arraySpeciesCreate = require('../internals/array-species-create');\n\nvar push = uncurryThis([].push);\n\n// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterReject }` methods implementation\nvar createMethod = function (TYPE) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var IS_FILTER_REJECT = TYPE == 7;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n return function ($this, callbackfn, that, specificCreate) {\n var O = toObject($this);\n var self = IndexedObject(O);\n var boundFunction = bind(callbackfn, that);\n var length = lengthOfArrayLike(self);\n var index = 0;\n var create = specificCreate || arraySpeciesCreate;\n var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_REJECT ? create($this, 0) : undefined;\n var value, result;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n value = self[index];\n result = boundFunction(value, index, O);\n if (TYPE) {\n if (IS_MAP) target[index] = result; // map\n else if (result) switch (TYPE) {\n case 3: return true; // some\n case 5: return value; // find\n case 6: return index; // findIndex\n case 2: push(target, value); // filter\n } else switch (TYPE) {\n case 4: return false; // every\n case 7: push(target, value); // filterReject\n }\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.forEach` method\n // https://tc39.es/ecma262/#sec-array.prototype.foreach\n forEach: createMethod(0),\n // `Array.prototype.map` method\n // https://tc39.es/ecma262/#sec-array.prototype.map\n map: createMethod(1),\n // `Array.prototype.filter` method\n // https://tc39.es/ecma262/#sec-array.prototype.filter\n filter: createMethod(2),\n // `Array.prototype.some` method\n // https://tc39.es/ecma262/#sec-array.prototype.some\n some: createMethod(3),\n // `Array.prototype.every` method\n // https://tc39.es/ecma262/#sec-array.prototype.every\n every: createMethod(4),\n // `Array.prototype.find` method\n // https://tc39.es/ecma262/#sec-array.prototype.find\n find: createMethod(5),\n // `Array.prototype.findIndex` method\n // https://tc39.es/ecma262/#sec-array.prototype.findIndex\n findIndex: createMethod(6),\n // `Array.prototype.filterReject` method\n // https://github.com/tc39/proposal-array-filtering\n filterReject: createMethod(7)\n};\n","'use strict';\n/* eslint-disable es/no-array-prototype-lastindexof -- safe */\nvar apply = require('../internals/function-apply');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar min = Math.min;\nvar $lastIndexOf = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$lastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;\nvar STRICT_METHOD = arrayMethodIsStrict('lastIndexOf');\nvar FORCED = NEGATIVE_ZERO || !STRICT_METHOD;\n\n// `Array.prototype.lastIndexOf` method implementation\n// https://tc39.es/ecma262/#sec-array.prototype.lastindexof\nmodule.exports = FORCED ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return apply($lastIndexOf, this, arguments) || 0;\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var index = length - 1;\n if (arguments.length > 1) index = min(index, toIntegerOrInfinity(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;\n return -1;\n} : $lastIndexOf;\n","var fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (METHOD_NAME) {\n // We can't use this feature detection in V8 since it causes\n // deoptimization and serious performance degradation\n // https://github.com/zloirock/core-js/issues/677\n return V8_VERSION >= 51 || !fails(function () {\n var array = [];\n var constructor = array.constructor = {};\n constructor[SPECIES] = function () {\n return { foo: 1 };\n };\n return array[METHOD_NAME](Boolean).foo !== 1;\n });\n};\n","'use strict';\nvar fails = require('../internals/fails');\n\nmodule.exports = function (METHOD_NAME, argument) {\n var method = [][METHOD_NAME];\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing\n method.call(null, argument || function () { throw 1; }, 1);\n });\n};\n","var global = require('../internals/global');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\n\nvar TypeError = global.TypeError;\n\n// `Array.prototype.{ reduce, reduceRight }` methods implementation\nvar createMethod = function (IS_RIGHT) {\n return function (that, callbackfn, argumentsLength, memo) {\n aCallable(callbackfn);\n var O = toObject(that);\n var self = IndexedObject(O);\n var length = lengthOfArrayLike(O);\n var index = IS_RIGHT ? length - 1 : 0;\n var i = IS_RIGHT ? -1 : 1;\n if (argumentsLength < 2) while (true) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (IS_RIGHT ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n };\n};\n\nmodule.exports = {\n // `Array.prototype.reduce` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduce\n left: createMethod(false),\n // `Array.prototype.reduceRight` method\n // https://tc39.es/ecma262/#sec-array.prototype.reduceright\n right: createMethod(true)\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis([].slice);\n","var arraySlice = require('../internals/array-slice');\n\nvar floor = Math.floor;\n\nvar mergeSort = function (array, comparefn) {\n var length = array.length;\n var middle = floor(length / 2);\n return length < 8 ? insertionSort(array, comparefn) : merge(\n array,\n mergeSort(arraySlice(array, 0, middle), comparefn),\n mergeSort(arraySlice(array, middle), comparefn),\n comparefn\n );\n};\n\nvar insertionSort = function (array, comparefn) {\n var length = array.length;\n var i = 1;\n var element, j;\n\n while (i < length) {\n j = i;\n element = array[i];\n while (j && comparefn(array[j - 1], element) > 0) {\n array[j] = array[--j];\n }\n if (j !== i++) array[j] = element;\n } return array;\n};\n\nvar merge = function (array, left, right, comparefn) {\n var llength = left.length;\n var rlength = right.length;\n var lindex = 0;\n var rindex = 0;\n\n while (lindex < llength || rindex < rlength) {\n array[lindex + rindex] = (lindex < llength && rindex < rlength)\n ? comparefn(left[lindex], right[rindex]) <= 0 ? left[lindex++] : right[rindex++]\n : lindex < llength ? left[lindex++] : right[rindex++];\n } return array;\n};\n\nmodule.exports = mergeSort;\n","var global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\n\n// a part of `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray) {\n var C;\n if (isArray(originalArray)) {\n C = originalArray.constructor;\n // cross-realm fallback\n if (isConstructor(C) && (C === Array || isArray(C.prototype))) C = undefined;\n else if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","var arraySpeciesConstructor = require('../internals/array-species-constructor');\n\n// `ArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#sec-arrayspeciescreate\nmodule.exports = function (originalArray, length) {\n return new (arraySpeciesConstructor(originalArray))(length === 0 ? 0 : length);\n};\n","var anObject = require('../internals/an-object');\nvar iteratorClose = require('../internals/iterator-close');\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line es/no-array-from, no-throw-literal -- required for testing\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar toString = uncurryThis({}.toString);\nvar stringSlice = uncurryThis(''.slice);\n\nmodule.exports = function (it) {\n return stringSlice(toString(it), 8, -1);\n};\n","var global = require('../internals/global');\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar isCallable = require('../internals/is-callable');\nvar classofRaw = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar Object = global.Object;\n\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && isCallable(O.callee) ? 'Arguments' : result;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar arraySlice = require('../internals/array-slice');\n\nvar replace = uncurryThis(''.replace);\nvar split = uncurryThis(''.split);\nvar join = uncurryThis([].join);\n\nvar TEST = (function (arg) { return String(Error(arg).stack); })('zxcasd');\nvar V8_OR_CHAKRA_STACK_ENTRY = /\\n\\s*at [^:]*:[^\\n]*/;\nvar IS_V8_OR_CHAKRA_STACK = V8_OR_CHAKRA_STACK_ENTRY.test(TEST);\nvar IS_FIREFOX_OR_SAFARI_STACK = /@[^\\n]*\\n/.test(TEST) && !/zxcasd/.test(TEST);\n\nmodule.exports = function (stack, dropEntries) {\n if (typeof stack != 'string') return stack;\n if (IS_V8_OR_CHAKRA_STACK) {\n while (dropEntries--) stack = replace(stack, V8_OR_CHAKRA_STACK_ENTRY, '');\n } else if (IS_FIREFOX_OR_SAFARI_STACK) {\n return join(arraySlice(split(stack, '\\n'), dropEntries), '\\n');\n } return stack;\n};\n","'use strict';\nvar defineProperty = require('../internals/object-define-property').f;\nvar create = require('../internals/object-create');\nvar redefineAll = require('../internals/redefine-all');\nvar bind = require('../internals/function-bind-context');\nvar anInstance = require('../internals/an-instance');\nvar iterate = require('../internals/iterate');\nvar defineIterator = require('../internals/define-iterator');\nvar setSpecies = require('../internals/set-species');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar fastKey = require('../internals/internal-metadata').fastKey;\nvar InternalStateModule = require('../internals/internal-state');\n\nvar setInternalState = InternalStateModule.set;\nvar internalStateGetterFor = InternalStateModule.getterFor;\n\nmodule.exports = {\n getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) {\n var Constructor = wrapper(function (that, iterable) {\n anInstance(that, Prototype);\n setInternalState(that, {\n type: CONSTRUCTOR_NAME,\n index: create(null),\n first: undefined,\n last: undefined,\n size: 0\n });\n if (!DESCRIPTORS) that.size = 0;\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n });\n\n var Prototype = Constructor.prototype;\n\n var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME);\n\n var define = function (that, key, value) {\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n var previous, index;\n // change existing entry\n if (entry) {\n entry.value = value;\n // create new entry\n } else {\n state.last = entry = {\n index: index = fastKey(key, true),\n key: key,\n value: value,\n previous: previous = state.last,\n next: undefined,\n removed: false\n };\n if (!state.first) state.first = entry;\n if (previous) previous.next = entry;\n if (DESCRIPTORS) state.size++;\n else that.size++;\n // add to index\n if (index !== 'F') state.index[index] = entry;\n } return that;\n };\n\n var getEntry = function (that, key) {\n var state = getInternalState(that);\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return state.index[index];\n // frozen object case\n for (entry = state.first; entry; entry = entry.next) {\n if (entry.key == key) return entry;\n }\n };\n\n redefineAll(Prototype, {\n // `{ Map, Set }.prototype.clear()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.clear\n // https://tc39.es/ecma262/#sec-set.prototype.clear\n clear: function clear() {\n var that = this;\n var state = getInternalState(that);\n var data = state.index;\n var entry = state.first;\n while (entry) {\n entry.removed = true;\n if (entry.previous) entry.previous = entry.previous.next = undefined;\n delete data[entry.index];\n entry = entry.next;\n }\n state.first = state.last = undefined;\n if (DESCRIPTORS) state.size = 0;\n else that.size = 0;\n },\n // `{ Map, Set }.prototype.delete(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.delete\n // https://tc39.es/ecma262/#sec-set.prototype.delete\n 'delete': function (key) {\n var that = this;\n var state = getInternalState(that);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.next;\n var prev = entry.previous;\n delete state.index[entry.index];\n entry.removed = true;\n if (prev) prev.next = next;\n if (next) next.previous = prev;\n if (state.first == entry) state.first = next;\n if (state.last == entry) state.last = prev;\n if (DESCRIPTORS) state.size--;\n else that.size--;\n } return !!entry;\n },\n // `{ Map, Set }.prototype.forEach(callbackfn, thisArg = undefined)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.foreach\n // https://tc39.es/ecma262/#sec-set.prototype.foreach\n forEach: function forEach(callbackfn /* , that = undefined */) {\n var state = getInternalState(this);\n var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n var entry;\n while (entry = entry ? entry.next : state.first) {\n boundFunction(entry.value, entry.key, this);\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n }\n },\n // `{ Map, Set}.prototype.has(key)` methods\n // https://tc39.es/ecma262/#sec-map.prototype.has\n // https://tc39.es/ecma262/#sec-set.prototype.has\n has: function has(key) {\n return !!getEntry(this, key);\n }\n });\n\n redefineAll(Prototype, IS_MAP ? {\n // `Map.prototype.get(key)` method\n // https://tc39.es/ecma262/#sec-map.prototype.get\n get: function get(key) {\n var entry = getEntry(this, key);\n return entry && entry.value;\n },\n // `Map.prototype.set(key, value)` method\n // https://tc39.es/ecma262/#sec-map.prototype.set\n set: function set(key, value) {\n return define(this, key === 0 ? 0 : key, value);\n }\n } : {\n // `Set.prototype.add(value)` method\n // https://tc39.es/ecma262/#sec-set.prototype.add\n add: function add(value) {\n return define(this, value = value === 0 ? 0 : value, value);\n }\n });\n if (DESCRIPTORS) defineProperty(Prototype, 'size', {\n get: function () {\n return getInternalState(this).size;\n }\n });\n return Constructor;\n },\n setStrong: function (Constructor, CONSTRUCTOR_NAME, IS_MAP) {\n var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator';\n var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME);\n var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME);\n // `{ Map, Set }.prototype.{ keys, values, entries, @@iterator }()` methods\n // https://tc39.es/ecma262/#sec-map.prototype.entries\n // https://tc39.es/ecma262/#sec-map.prototype.keys\n // https://tc39.es/ecma262/#sec-map.prototype.values\n // https://tc39.es/ecma262/#sec-map.prototype-@@iterator\n // https://tc39.es/ecma262/#sec-set.prototype.entries\n // https://tc39.es/ecma262/#sec-set.prototype.keys\n // https://tc39.es/ecma262/#sec-set.prototype.values\n // https://tc39.es/ecma262/#sec-set.prototype-@@iterator\n defineIterator(Constructor, CONSTRUCTOR_NAME, function (iterated, kind) {\n setInternalState(this, {\n type: ITERATOR_NAME,\n target: iterated,\n state: getInternalCollectionState(iterated),\n kind: kind,\n last: undefined\n });\n }, function () {\n var state = getInternalIteratorState(this);\n var kind = state.kind;\n var entry = state.last;\n // revert to the last existing entry\n while (entry && entry.removed) entry = entry.previous;\n // get next entry\n if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) {\n // or finish the iteration\n state.target = undefined;\n return { value: undefined, done: true };\n }\n // return step by kind\n if (kind == 'keys') return { value: entry.key, done: false };\n if (kind == 'values') return { value: entry.value, done: false };\n return { value: [entry.key, entry.value], done: false };\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // `{ Map, Set }.prototype[@@species]` accessors\n // https://tc39.es/ecma262/#sec-get-map-@@species\n // https://tc39.es/ecma262/#sec-get-set-@@species\n setSpecies(CONSTRUCTOR_NAME);\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar InternalMetadataModule = require('../internals/internal-metadata');\nvar iterate = require('../internals/iterate');\nvar anInstance = require('../internals/an-instance');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nmodule.exports = function (CONSTRUCTOR_NAME, wrapper, common) {\n var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1;\n var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1;\n var ADDER = IS_MAP ? 'set' : 'add';\n var NativeConstructor = global[CONSTRUCTOR_NAME];\n var NativePrototype = NativeConstructor && NativeConstructor.prototype;\n var Constructor = NativeConstructor;\n var exported = {};\n\n var fixMethod = function (KEY) {\n var uncurriedNativeMethod = uncurryThis(NativePrototype[KEY]);\n redefine(NativePrototype, KEY,\n KEY == 'add' ? function add(value) {\n uncurriedNativeMethod(this, value === 0 ? 0 : value);\n return this;\n } : KEY == 'delete' ? function (key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'get' ? function get(key) {\n return IS_WEAK && !isObject(key) ? undefined : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : KEY == 'has' ? function has(key) {\n return IS_WEAK && !isObject(key) ? false : uncurriedNativeMethod(this, key === 0 ? 0 : key);\n } : function set(key, value) {\n uncurriedNativeMethod(this, key === 0 ? 0 : key, value);\n return this;\n }\n );\n };\n\n var REPLACE = isForced(\n CONSTRUCTOR_NAME,\n !isCallable(NativeConstructor) || !(IS_WEAK || NativePrototype.forEach && !fails(function () {\n new NativeConstructor().entries().next();\n }))\n );\n\n if (REPLACE) {\n // create collection constructor\n Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);\n InternalMetadataModule.enable();\n } else if (isForced(CONSTRUCTOR_NAME, true)) {\n var instance = new Constructor();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n // eslint-disable-next-line no-new -- required for testing\n var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new NativeConstructor();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n\n if (!ACCEPT_ITERABLES) {\n Constructor = wrapper(function (dummy, iterable) {\n anInstance(dummy, NativePrototype);\n var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor);\n if (iterable != undefined) iterate(iterable, that[ADDER], { that: that, AS_ENTRIES: IS_MAP });\n return that;\n });\n Constructor.prototype = NativePrototype;\n NativePrototype.constructor = Constructor;\n }\n\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n\n // weak collections should not contains .clear method\n if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear;\n }\n\n exported[CONSTRUCTOR_NAME] = Constructor;\n $({ global: true, forced: Constructor != NativeConstructor }, exported);\n\n setToStringTag(Constructor, CONSTRUCTOR_NAME);\n\n if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP);\n\n return Constructor;\n};\n","var hasOwn = require('../internals/has-own-property');\nvar ownKeys = require('../internals/own-keys');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!hasOwn(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\nmodule.exports = function (METHOD_NAME) {\n var regexp = /./;\n try {\n '/./'[METHOD_NAME](regexp);\n } catch (error1) {\n try {\n regexp[MATCH] = false;\n return '/./'[METHOD_NAME](regexp);\n } catch (error2) { /* empty */ }\n } return false;\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n // eslint-disable-next-line es/no-object-getprototypeof -- required for testing\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\n\nvar quot = /\"/g;\nvar replace = uncurryThis(''.replace);\n\n// `CreateHTML` abstract operation\n// https://tc39.es/ecma262/#sec-createhtml\nmodule.exports = function (string, tag, attribute, value) {\n var S = toString(requireObjectCoercible(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + replace(toString(value), quot, '"') + '\"';\n return p1 + '>' + S + '';\n};\n","'use strict';\nvar IteratorPrototype = require('../internals/iterators-core').IteratorPrototype;\nvar create = require('../internals/object-create');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar Iterators = require('../internals/iterators');\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","'use strict';\nvar toPropertyKey = require('../internals/to-property-key');\nvar definePropertyModule = require('../internals/object-define-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPropertyKey(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n","'use strict';\nvar global = require('../internals/global');\nvar anObject = require('../internals/an-object');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\n\nvar TypeError = global.TypeError;\n\n// `Date.prototype[@@toPrimitive](hint)` method implementation\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nmodule.exports = function (hint) {\n anObject(this);\n if (hint === 'string' || hint === 'default') hint = 'string';\n else if (hint !== 'number') throw TypeError('Incorrect hint');\n return ordinaryToPrimitive(this, hint);\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar IS_PURE = require('../internals/is-pure');\nvar FunctionName = require('../internals/function-name');\nvar isCallable = require('../internals/is-callable');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\nvar IteratorsCore = require('../internals/iterators-core');\n\nvar PROPER_FUNCTION_NAME = FunctionName.PROPER;\nvar CONFIGURABLE_FUNCTION_NAME = FunctionName.CONFIGURABLE;\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (CurrentIteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (!isCallable(CurrentIteratorPrototype[ITERATOR])) {\n redefine(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array.prototype.{ values, @@iterator }.name in V8 / FF\n if (PROPER_FUNCTION_NAME && DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n if (!IS_PURE && CONFIGURABLE_FUNCTION_NAME) {\n createNonEnumerableProperty(IterablePrototype, 'name', VALUES);\n } else {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return call(nativeIterator, this); };\n }\n }\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n redefine(IterablePrototype, ITERATOR, defaultIterator, { name: DEFAULT });\n }\n Iterators[NAME] = defaultIterator;\n\n return methods;\n};\n","var path = require('../internals/path');\nvar hasOwn = require('../internals/has-own-property');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineProperty = require('../internals/object-define-property').f;\n\nmodule.exports = function (NAME) {\n var Symbol = path.Symbol || (path.Symbol = {});\n if (!hasOwn(Symbol, NAME)) defineProperty(Symbol, NAME, {\n value: wrappedWellKnownSymbolModule.f(NAME)\n });\n};\n","var fails = require('../internals/fails');\n\n// Detect IE8's incomplete defineProperty implementation\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- required for testing\n return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;\n});\n","var global = require('../internals/global');\nvar isObject = require('../internals/is-object');\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar EXISTS = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return EXISTS ? document.createElement(it) : {};\n};\n","// iterable DOM collections\n// flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods\nmodule.exports = {\n CSSRuleList: 0,\n CSSStyleDeclaration: 0,\n CSSValueList: 0,\n ClientRectList: 0,\n DOMRectList: 0,\n DOMStringList: 0,\n DOMTokenList: 1,\n DataTransferItemList: 0,\n FileList: 0,\n HTMLAllCollection: 0,\n HTMLCollection: 0,\n HTMLFormElement: 0,\n HTMLSelectElement: 0,\n MediaList: 0,\n MimeTypeArray: 0,\n NamedNodeMap: 0,\n NodeList: 1,\n PaintRequestList: 0,\n Plugin: 0,\n PluginArray: 0,\n SVGLengthList: 0,\n SVGNumberList: 0,\n SVGPathSegList: 0,\n SVGPointList: 0,\n SVGStringList: 0,\n SVGTransformList: 0,\n SourceBufferList: 0,\n StyleSheetList: 0,\n TextTrackCueList: 0,\n TextTrackList: 0,\n TouchList: 0\n};\n","// in old WebKit versions, `element.classList` is not an instance of global `DOMTokenList`\nvar documentCreateElement = require('../internals/document-create-element');\n\nvar classList = documentCreateElement('span').classList;\nvar DOMTokenListPrototype = classList && classList.constructor && classList.constructor.prototype;\n\nmodule.exports = DOMTokenListPrototype === Object.prototype ? undefined : DOMTokenListPrototype;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar firefox = userAgent.match(/firefox\\/(\\d+)/i);\n\nmodule.exports = !!firefox && +firefox[1];\n","module.exports = typeof window == 'object';\n","var UA = require('../internals/engine-user-agent');\n\nmodule.exports = /MSIE|Trident/.test(UA);\n","var userAgent = require('../internals/engine-user-agent');\nvar global = require('../internals/global');\n\nmodule.exports = /ipad|iphone|ipod/i.test(userAgent) && global.Pebble !== undefined;\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /(?:ipad|iphone|ipod).*applewebkit/i.test(userAgent);\n","var classof = require('../internals/classof-raw');\nvar global = require('../internals/global');\n\nmodule.exports = classof(global.process) == 'process';\n","var userAgent = require('../internals/engine-user-agent');\n\nmodule.exports = /web0s(?!.*chrome)/i.test(userAgent);\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('navigator', 'userAgent') || '';\n","var global = require('../internals/global');\nvar userAgent = require('../internals/engine-user-agent');\n\nvar process = global.process;\nvar Deno = global.Deno;\nvar versions = process && process.versions || Deno && Deno.version;\nvar v8 = versions && versions.v8;\nvar match, version;\n\nif (v8) {\n match = v8.split('.');\n // in old Chrome, versions of V8 isn't V8 = Chrome / 10\n // but their correct versions are not interesting for us\n version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]);\n}\n\n// BrowserFS NodeJS `process` polyfill incorrectly set `.v8` to `0.0`\n// so check `userAgent` even if `.v8` exists, but 0\nif (!version && userAgent) {\n match = userAgent.match(/Edge\\/(\\d+)/);\n if (!match || match[1] >= 74) {\n match = userAgent.match(/Chrome\\/(\\d+)/);\n if (match) version = +match[1];\n }\n}\n\nmodule.exports = version;\n","var userAgent = require('../internals/engine-user-agent');\n\nvar webkit = userAgent.match(/AppleWebKit\\/(\\d+)\\./);\n\nmodule.exports = !!webkit && +webkit[1];\n","// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n","var fails = require('../internals/fails');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\n\nmodule.exports = !fails(function () {\n var error = Error('a');\n if (!('stack' in error)) return true;\n // eslint-disable-next-line es/no-object-defineproperty -- safe\n Object.defineProperty(error, 'stack', createPropertyDescriptor(1, 7));\n return error.stack !== 7;\n});\n","var global = require('../internals/global');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar redefine = require('../internals/redefine');\nvar setGlobal = require('../internals/set-global');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar isForced = require('../internals/is-forced');\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n options.name - the .name of the function if it does not match the key\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty == typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n createNonEnumerableProperty(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n","'use strict';\n// TODO: Remove from `core-js@4` since it's moved to entry points\nrequire('../modules/es.regexp.exec');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar redefine = require('../internals/redefine');\nvar regexpExec = require('../internals/regexp-exec');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar SPECIES = wellKnownSymbol('species');\nvar RegExpPrototype = RegExp.prototype;\n\nmodule.exports = function (KEY, exec, FORCED, SHAM) {\n var SYMBOL = wellKnownSymbol(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n\n if (KEY === 'split') {\n // We can't use real regex here since it causes deoptimization\n // and serious performance degradation in V8\n // https://github.com/zloirock/core-js/issues/306\n re = {};\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n re.flags = '';\n re[SYMBOL] = /./[SYMBOL];\n }\n\n re.exec = function () { execCalled = true; return null; };\n\n re[SYMBOL]('');\n return !execCalled;\n });\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n FORCED\n ) {\n var uncurriedNativeRegExpMethod = uncurryThis(/./[SYMBOL]);\n var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {\n var uncurriedNativeMethod = uncurryThis(nativeMethod);\n var $exec = regexp.exec;\n if ($exec === regexpExec || $exec === RegExpPrototype.exec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: uncurriedNativeRegExpMethod(regexp, str, arg2) };\n }\n return { done: true, value: uncurriedNativeMethod(str, regexp, arg2) };\n }\n return { done: false };\n });\n\n redefine(String.prototype, KEY, methods[0]);\n redefine(RegExpPrototype, SYMBOL, methods[1]);\n }\n\n if (SHAM) createNonEnumerableProperty(RegExpPrototype[SYMBOL], 'sham', true);\n};\n","var fails = require('../internals/fails');\n\nmodule.exports = !fails(function () {\n // eslint-disable-next-line es/no-object-isextensible, es/no-object-preventextensions -- required for testing\n return Object.isExtensible(Object.preventExtensions({}));\n});\n","var FunctionPrototype = Function.prototype;\nvar apply = FunctionPrototype.apply;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\n\n// eslint-disable-next-line es/no-reflect -- safe\nmodule.exports = typeof Reflect == 'object' && Reflect.apply || (bind ? call.bind(apply) : function () {\n return call.apply(apply, arguments);\n});\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\n\nvar bind = uncurryThis(uncurryThis.bind);\n\n// optional / simple context binding\nmodule.exports = function (fn, that) {\n aCallable(fn);\n return that === undefined ? fn : bind ? bind(fn, that) : function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar arraySlice = require('../internals/array-slice');\n\nvar Function = global.Function;\nvar concat = uncurryThis([].concat);\nvar join = uncurryThis([].join);\nvar factories = {};\n\nvar construct = function (C, argsLength, args) {\n if (!hasOwn(factories, argsLength)) {\n for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';\n factories[argsLength] = Function('C,a', 'return new C(' + join(list, ',') + ')');\n } return factories[argsLength](C, args);\n};\n\n// `Function.prototype.bind` method implementation\n// https://tc39.es/ecma262/#sec-function.prototype.bind\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var F = aCallable(this);\n var Prototype = F.prototype;\n var partArgs = arraySlice(arguments, 1);\n var boundFunction = function bound(/* args... */) {\n var args = concat(partArgs, arraySlice(arguments));\n return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args);\n };\n if (isObject(Prototype)) boundFunction.prototype = Prototype;\n return boundFunction;\n};\n","var call = Function.prototype.call;\n\nmodule.exports = call.bind ? call.bind(call) : function () {\n return call.apply(call, arguments);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar hasOwn = require('../internals/has-own-property');\n\nvar FunctionPrototype = Function.prototype;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor;\n\nvar EXISTS = hasOwn(FunctionPrototype, 'name');\n// additional protection from minified / mangled / dropped function names\nvar PROPER = EXISTS && (function something() { /* empty */ }).name === 'something';\nvar CONFIGURABLE = EXISTS && (!DESCRIPTORS || (DESCRIPTORS && getDescriptor(FunctionPrototype, 'name').configurable));\n\nmodule.exports = {\n EXISTS: EXISTS,\n PROPER: PROPER,\n CONFIGURABLE: CONFIGURABLE\n};\n","var FunctionPrototype = Function.prototype;\nvar bind = FunctionPrototype.bind;\nvar call = FunctionPrototype.call;\nvar callBind = bind && bind.bind(call);\n\nmodule.exports = bind ? function (fn) {\n return fn && callBind(call, fn);\n} : function (fn) {\n return fn && function () {\n return call.apply(fn, arguments);\n };\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\n\nvar aFunction = function (argument) {\n return isCallable(argument) ? argument : undefined;\n};\n\nmodule.exports = function (namespace, method) {\n return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method];\n};\n","var classof = require('../internals/classof');\nvar getMethod = require('../internals/get-method');\nvar Iterators = require('../internals/iterators');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return getMethod(it, ITERATOR)\n || getMethod(it, '@@iterator')\n || Iterators[classof(it)];\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar getIteratorMethod = require('../internals/get-iterator-method');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (argument, usingIterator) {\n var iteratorMethod = arguments.length < 2 ? getIteratorMethod(argument) : usingIterator;\n if (aCallable(iteratorMethod)) return anObject(call(iteratorMethod, argument));\n throw TypeError(tryToString(argument) + ' is not iterable');\n};\n","var aCallable = require('../internals/a-callable');\n\n// `GetMethod` abstract operation\n// https://tc39.es/ecma262/#sec-getmethod\nmodule.exports = function (V, P) {\n var func = V[P];\n return func == null ? undefined : aCallable(func);\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar floor = Math.floor;\nvar charAt = uncurryThis(''.charAt);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\nvar SUBSTITUTION_SYMBOLS = /\\$([$&'`]|\\d{1,2}|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&'`]|\\d{1,2})/g;\n\n// `GetSubstitution` abstract operation\n// https://tc39.es/ecma262/#sec-getsubstitution\nmodule.exports = function (matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return replace(replacement, symbols, function (match, ch) {\n var capture;\n switch (charAt(ch, 0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return stringSlice(str, 0, position);\n case \"'\": return stringSlice(str, tailPos);\n case '<':\n capture = namedCaptures[stringSlice(ch, 1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? charAt(ch, 1) : captures[f - 1] + charAt(ch, 1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n};\n","var check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line es/no-global-this -- safe\n check(typeof globalThis == 'object' && globalThis) ||\n check(typeof window == 'object' && window) ||\n // eslint-disable-next-line no-restricted-globals -- safe\n check(typeof self == 'object' && self) ||\n check(typeof global == 'object' && global) ||\n // eslint-disable-next-line no-new-func -- fallback\n (function () { return this; })() || Function('return this')();\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toObject = require('../internals/to-object');\n\nvar hasOwnProperty = uncurryThis({}.hasOwnProperty);\n\n// `HasOwnProperty` abstract operation\n// https://tc39.es/ecma262/#sec-hasownproperty\nmodule.exports = Object.hasOwn || function hasOwn(it, key) {\n return hasOwnProperty(toObject(it), key);\n};\n","module.exports = {};\n","var global = require('../internals/global');\n\nmodule.exports = function (a, b) {\n var console = global.console;\n if (console && console.error) {\n arguments.length == 1 ? console.error(a) : console.error(a, b);\n }\n};\n","var getBuiltIn = require('../internals/get-built-in');\n\nmodule.exports = getBuiltIn('document', 'documentElement');\n","var DESCRIPTORS = require('../internals/descriptors');\nvar fails = require('../internals/fails');\nvar createElement = require('../internals/document-create-element');\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n // eslint-disable-next-line es/no-object-defineproperty -- requied for testing\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n","// IEEE754 conversions based on https://github.com/feross/ieee754\nvar global = require('../internals/global');\n\nvar Array = global.Array;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\n\nvar pack = function (number, mantissaLength, bytes) {\n var buffer = Array(bytes);\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;\n var index = 0;\n var exponent, mantissa, c;\n number = abs(number);\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number || number === Infinity) {\n // eslint-disable-next-line no-self-compare -- NaN check\n mantissa = number != number ? 1 : 0;\n exponent = eMax;\n } else {\n exponent = floor(log(number) / LN2);\n if (number * (c = pow(2, -exponent)) < 1) {\n exponent--;\n c *= 2;\n }\n if (exponent + eBias >= 1) {\n number += rt / c;\n } else {\n number += rt * pow(2, 1 - eBias);\n }\n if (number * c >= 2) {\n exponent++;\n c /= 2;\n }\n if (exponent + eBias >= eMax) {\n mantissa = 0;\n exponent = eMax;\n } else if (exponent + eBias >= 1) {\n mantissa = (number * c - 1) * pow(2, mantissaLength);\n exponent = exponent + eBias;\n } else {\n mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);\n exponent = 0;\n }\n }\n for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);\n exponent = exponent << mantissaLength | mantissa;\n exponentLength += mantissaLength;\n for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);\n buffer[--index] |= sign * 128;\n return buffer;\n};\n\nvar unpack = function (buffer, mantissaLength) {\n var bytes = buffer.length;\n var exponentLength = bytes * 8 - mantissaLength - 1;\n var eMax = (1 << exponentLength) - 1;\n var eBias = eMax >> 1;\n var nBits = exponentLength - 7;\n var index = bytes - 1;\n var sign = buffer[index--];\n var exponent = sign & 127;\n var mantissa;\n sign >>= 7;\n for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);\n mantissa = exponent & (1 << -nBits) - 1;\n exponent >>= -nBits;\n nBits += mantissaLength;\n for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);\n if (exponent === 0) {\n exponent = 1 - eBias;\n } else if (exponent === eMax) {\n return mantissa ? NaN : sign ? -Infinity : Infinity;\n } else {\n mantissa = mantissa + pow(2, mantissaLength);\n exponent = exponent - eBias;\n } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);\n};\n\nmodule.exports = {\n pack: pack,\n unpack: unpack\n};\n","var global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar classof = require('../internals/classof-raw');\n\nvar Object = global.Object;\nvar split = uncurryThis(''.split);\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins -- safe\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split(it, '') : Object(it);\n} : Object;\n","var isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\n\n// makes subclassing work correct for wrapped built-ins\nmodule.exports = function ($this, dummy, Wrapper) {\n var NewTarget, NewTargetPrototype;\n if (\n // it can work only with native `setPrototypeOf`\n setPrototypeOf &&\n // we haven't completely correct pre-ES6 way for getting `new.target`, so use this\n isCallable(NewTarget = dummy.constructor) &&\n NewTarget !== Wrapper &&\n isObject(NewTargetPrototype = NewTarget.prototype) &&\n NewTargetPrototype !== Wrapper.prototype\n ) setPrototypeOf($this, NewTargetPrototype);\n return $this;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar isCallable = require('../internals/is-callable');\nvar store = require('../internals/shared-store');\n\nvar functionToString = uncurryThis(Function.toString);\n\n// this helper broken in `core-js@3.4.1-3.4.4`, so we can't use `shared` helper\nif (!isCallable(store.inspectSource)) {\n store.inspectSource = function (it) {\n return functionToString(it);\n };\n}\n\nmodule.exports = store.inspectSource;\n","var isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\n// `InstallErrorCause` abstract operation\n// https://tc39.es/proposal-error-cause/#sec-errorobjects-install-error-cause\nmodule.exports = function (O, options) {\n if (isObject(options) && 'cause' in options) {\n createNonEnumerableProperty(O, 'cause', options.cause);\n }\n};\n","var $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar isObject = require('../internals/is-object');\nvar hasOwn = require('../internals/has-own-property');\nvar defineProperty = require('../internals/object-define-property').f;\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternalModule = require('../internals/object-get-own-property-names-external');\nvar uid = require('../internals/uid');\nvar FREEZING = require('../internals/freezing');\n\nvar REQUIRED = false;\nvar METADATA = uid('meta');\nvar id = 0;\n\n// eslint-disable-next-line es/no-object-isextensible -- safe\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\n\nvar setMetadata = function (it) {\n defineProperty(it, METADATA, { value: {\n objectID: 'O' + id++, // object ID\n weakData: {} // weak collections IDs\n } });\n};\n\nvar fastKey = function (it, create) {\n // return a primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMetadata(it);\n // return object ID\n } return it[METADATA].objectID;\n};\n\nvar getWeakData = function (it, create) {\n if (!hasOwn(it, METADATA)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMetadata(it);\n // return the store of weak collections IDs\n } return it[METADATA].weakData;\n};\n\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZING && REQUIRED && isExtensible(it) && !hasOwn(it, METADATA)) setMetadata(it);\n return it;\n};\n\nvar enable = function () {\n meta.enable = function () { /* empty */ };\n REQUIRED = true;\n var getOwnPropertyNames = getOwnPropertyNamesModule.f;\n var splice = uncurryThis([].splice);\n var test = {};\n test[METADATA] = 1;\n\n // prevent exposing of metadata key\n if (getOwnPropertyNames(test).length) {\n getOwnPropertyNamesModule.f = function (it) {\n var result = getOwnPropertyNames(it);\n for (var i = 0, length = result.length; i < length; i++) {\n if (result[i] === METADATA) {\n splice(result, i, 1);\n break;\n }\n } return result;\n };\n\n $({ target: 'Object', stat: true, forced: true }, {\n getOwnPropertyNames: getOwnPropertyNamesExternalModule.f\n });\n }\n};\n\nvar meta = module.exports = {\n enable: enable,\n fastKey: fastKey,\n getWeakData: getWeakData,\n onFreeze: onFreeze\n};\n\nhiddenKeys[METADATA] = true;\n","var NATIVE_WEAK_MAP = require('../internals/native-weak-map');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isObject = require('../internals/is-object');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar hasOwn = require('../internals/has-own-property');\nvar shared = require('../internals/shared-store');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar OBJECT_ALREADY_INITIALIZED = 'Object already initialized';\nvar TypeError = global.TypeError;\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP || shared.state) {\n var store = shared.state || (shared.state = new WeakMap());\n var wmget = uncurryThis(store.get);\n var wmhas = uncurryThis(store.has);\n var wmset = uncurryThis(store.set);\n set = function (it, metadata) {\n if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n wmset(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget(store, it) || {};\n };\n has = function (it) {\n return wmhas(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED);\n metadata.facade = it;\n createNonEnumerableProperty(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return hasOwn(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return hasOwn(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\nvar Iterators = require('../internals/iterators');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n","var classof = require('../internals/classof-raw');\n\n// `IsArray` abstract operation\n// https://tc39.es/ecma262/#sec-isarray\n// eslint-disable-next-line es/no-array-isarray -- safe\nmodule.exports = Array.isArray || function isArray(argument) {\n return classof(argument) == 'Array';\n};\n","// `IsCallable` abstract operation\n// https://tc39.es/ecma262/#sec-iscallable\nmodule.exports = function (argument) {\n return typeof argument == 'function';\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof');\nvar getBuiltIn = require('../internals/get-built-in');\nvar inspectSource = require('../internals/inspect-source');\n\nvar noop = function () { /* empty */ };\nvar empty = [];\nvar construct = getBuiltIn('Reflect', 'construct');\nvar constructorRegExp = /^\\s*(?:class|function)\\b/;\nvar exec = uncurryThis(constructorRegExp.exec);\nvar INCORRECT_TO_STRING = !constructorRegExp.exec(noop);\n\nvar isConstructorModern = function (argument) {\n if (!isCallable(argument)) return false;\n try {\n construct(noop, empty, argument);\n return true;\n } catch (error) {\n return false;\n }\n};\n\nvar isConstructorLegacy = function (argument) {\n if (!isCallable(argument)) return false;\n switch (classof(argument)) {\n case 'AsyncFunction':\n case 'GeneratorFunction':\n case 'AsyncGeneratorFunction': return false;\n // we can't check .prototype since constructors produced by .bind haven't it\n } return INCORRECT_TO_STRING || !!exec(constructorRegExp, inspectSource(argument));\n};\n\n// `IsConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-isconstructor\nmodule.exports = !construct || fails(function () {\n var called;\n return isConstructorModern(isConstructorModern.call)\n || !isConstructorModern(Object)\n || !isConstructorModern(function () { called = true; })\n || called;\n}) ? isConstructorLegacy : isConstructorModern;\n","var fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : isCallable(detection) ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n","var isObject = require('../internals/is-object');\n\nvar floor = Math.floor;\n\n// `IsIntegralNumber` abstract operation\n// https://tc39.es/ecma262/#sec-isintegralnumber\n// eslint-disable-next-line es/no-number-isinteger -- safe\nmodule.exports = Number.isInteger || function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","var isCallable = require('../internals/is-callable');\n\nmodule.exports = function (it) {\n return typeof it == 'object' ? it !== null : isCallable(it);\n};\n","module.exports = false;\n","var isObject = require('../internals/is-object');\nvar classof = require('../internals/classof-raw');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar MATCH = wellKnownSymbol('match');\n\n// `IsRegExp` abstract operation\n// https://tc39.es/ecma262/#sec-isregexp\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classof(it) == 'RegExp');\n};\n","var global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar Object = global.Object;\n\nmodule.exports = USE_SYMBOL_AS_UID ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n var $Symbol = getBuiltIn('Symbol');\n return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, Object(it));\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar tryToString = require('../internals/try-to-string');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar iteratorClose = require('../internals/iterator-close');\n\nvar TypeError = global.TypeError;\n\nvar Result = function (stopped, result) {\n this.stopped = stopped;\n this.result = result;\n};\n\nvar ResultPrototype = Result.prototype;\n\nmodule.exports = function (iterable, unboundFunction, options) {\n var that = options && options.that;\n var AS_ENTRIES = !!(options && options.AS_ENTRIES);\n var IS_ITERATOR = !!(options && options.IS_ITERATOR);\n var INTERRUPTED = !!(options && options.INTERRUPTED);\n var fn = bind(unboundFunction, that);\n var iterator, iterFn, index, length, result, next, step;\n\n var stop = function (condition) {\n if (iterator) iteratorClose(iterator, 'normal', condition);\n return new Result(true, condition);\n };\n\n var callFn = function (value) {\n if (AS_ENTRIES) {\n anObject(value);\n return INTERRUPTED ? fn(value[0], value[1], stop) : fn(value[0], value[1]);\n } return INTERRUPTED ? fn(value, stop) : fn(value);\n };\n\n if (IS_ITERATOR) {\n iterator = iterable;\n } else {\n iterFn = getIteratorMethod(iterable);\n if (!iterFn) throw TypeError(tryToString(iterable) + ' is not iterable');\n // optimisation for array iterators\n if (isArrayIteratorMethod(iterFn)) {\n for (index = 0, length = lengthOfArrayLike(iterable); length > index; index++) {\n result = callFn(iterable[index]);\n if (result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n }\n iterator = getIterator(iterable, iterFn);\n }\n\n next = iterator.next;\n while (!(step = call(next, iterator)).done) {\n try {\n result = callFn(step.value);\n } catch (error) {\n iteratorClose(iterator, 'throw', error);\n }\n if (typeof result == 'object' && result && isPrototypeOf(ResultPrototype, result)) return result;\n } return new Result(false);\n};\n","var call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar getMethod = require('../internals/get-method');\n\nmodule.exports = function (iterator, kind, value) {\n var innerResult, innerError;\n anObject(iterator);\n try {\n innerResult = getMethod(iterator, 'return');\n if (!innerResult) {\n if (kind === 'throw') throw value;\n return value;\n }\n innerResult = call(innerResult, iterator);\n } catch (error) {\n innerError = true;\n innerResult = error;\n }\n if (kind === 'throw') throw value;\n if (innerError) throw innerResult;\n anObject(innerResult);\n return value;\n};\n","'use strict';\nvar fails = require('../internals/fails');\nvar isCallable = require('../internals/is-callable');\nvar create = require('../internals/object-create');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar redefine = require('../internals/redefine');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_PURE = require('../internals/is-pure');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\n// `%IteratorPrototype%` object\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\n/* eslint-disable es/no-array-prototype-keys -- safe */\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nvar NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {\n var test = {};\n // FF44- legacy iterators case\n return IteratorPrototype[ITERATOR].call(test) !== test;\n});\n\nif (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};\nelse if (IS_PURE) IteratorPrototype = create(IteratorPrototype);\n\n// `%IteratorPrototype%[@@iterator]()` method\n// https://tc39.es/ecma262/#sec-%iteratorprototype%-@@iterator\nif (!isCallable(IteratorPrototype[ITERATOR])) {\n redefine(IteratorPrototype, ITERATOR, function () {\n return this;\n });\n}\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n","module.exports = {};\n","var toLength = require('../internals/to-length');\n\n// `LengthOfArrayLike` abstract operation\n// https://tc39.es/ecma262/#sec-lengthofarraylike\nmodule.exports = function (obj) {\n return toLength(obj.length);\n};\n","var global = require('../internals/global');\nvar bind = require('../internals/function-bind-context');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar macrotask = require('../internals/task').set;\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_IOS_PEBBLE = require('../internals/engine-is-ios-pebble');\nvar IS_WEBOS_WEBKIT = require('../internals/engine-is-webos-webkit');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar MutationObserver = global.MutationObserver || global.WebKitMutationObserver;\nvar document = global.document;\nvar process = global.process;\nvar Promise = global.Promise;\n// Node.js 11 shows ExperimentalWarning on getting `queueMicrotask`\nvar queueMicrotaskDescriptor = getOwnPropertyDescriptor(global, 'queueMicrotask');\nvar queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value;\n\nvar flush, head, last, notify, toggle, node, promise, then;\n\n// modern engines have queueMicrotask method\nif (!queueMicrotask) {\n flush = function () {\n var parent, fn;\n if (IS_NODE && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (error) {\n if (head) notify();\n else last = undefined;\n throw error;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339\n // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898\n if (!IS_IOS && !IS_NODE && !IS_WEBOS_WEBKIT && MutationObserver && document) {\n toggle = true;\n node = document.createTextNode('');\n new MutationObserver(flush).observe(node, { characterData: true });\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (!IS_IOS_PEBBLE && Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n promise = Promise.resolve(undefined);\n // workaround of WebKit ~ iOS Safari 10.1 bug\n promise.constructor = Promise;\n then = bind(promise.then, promise);\n notify = function () {\n then(flush);\n };\n // Node.js without promises\n } else if (IS_NODE) {\n notify = function () {\n process.nextTick(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n // strange IE + webpack dev server bug - use .bind(global)\n macrotask = bind(macrotask, global);\n notify = function () {\n macrotask(flush);\n };\n }\n}\n\nmodule.exports = queueMicrotask || function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global.Promise;\n","/* eslint-disable es/no-symbol -- required for testing */\nvar V8_VERSION = require('../internals/engine-v8-version');\nvar fails = require('../internals/fails');\n\n// eslint-disable-next-line es/no-object-getownpropertysymbols -- required for testing\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n var symbol = Symbol();\n // Chrome 38 Symbol has incorrect toString conversion\n // `get-own-property-symbols` polyfill symbols converted to object are not Symbol instances\n return !String(symbol) || !(Object(symbol) instanceof Symbol) ||\n // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances\n !Symbol.sham && V8_VERSION && V8_VERSION < 41;\n});\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar inspectSource = require('../internals/inspect-source');\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap));\n","'use strict';\nvar aCallable = require('../internals/a-callable');\n\nvar PromiseCapability = function (C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aCallable(resolve);\n this.reject = aCallable(reject);\n};\n\n// `NewPromiseCapability` abstract operation\n// https://tc39.es/ecma262/#sec-newpromisecapability\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var toString = require('../internals/to-string');\n\nmodule.exports = function (argument, $default) {\n return argument === undefined ? arguments.length < 2 ? '' : $default : toString(argument);\n};\n","var global = require('../internals/global');\nvar isRegExp = require('../internals/is-regexp');\n\nvar TypeError = global.TypeError;\n\nmodule.exports = function (it) {\n if (isRegExp(it)) {\n throw TypeError(\"The method doesn't accept regular expressions\");\n } return it;\n};\n","var global = require('../internals/global');\n\nvar globalIsFinite = global.isFinite;\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n// eslint-disable-next-line es/no-number-isfinite -- safe\nmodule.exports = Number.isFinite || function isFinite(it) {\n return typeof it == 'number' && globalIsFinite(it);\n};\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar call = require('../internals/function-call');\nvar fails = require('../internals/fails');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar toObject = require('../internals/to-object');\nvar IndexedObject = require('../internals/indexed-object');\n\n// eslint-disable-next-line es/no-object-assign -- safe\nvar $assign = Object.assign;\n// eslint-disable-next-line es/no-object-defineproperty -- required for testing\nvar defineProperty = Object.defineProperty;\nvar concat = uncurryThis([].concat);\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\nmodule.exports = !$assign || fails(function () {\n // should have correct order of operations (Edge bug)\n if (DESCRIPTORS && $assign({ b: 1 }, $assign(defineProperty({}, 'a', {\n enumerable: true,\n get: function () {\n defineProperty(this, 'b', {\n value: 3,\n enumerable: false\n });\n }\n }), { b: 2 })).b !== 1) return true;\n // should work with symbols and should have deterministic property order (V8 bug)\n var A = {};\n var B = {};\n // eslint-disable-next-line es/no-symbol -- safe\n var symbol = Symbol();\n var alphabet = 'abcdefghijklmnopqrst';\n A[symbol] = 7;\n alphabet.split('').forEach(function (chr) { B[chr] = chr; });\n return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join('') != alphabet;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`\n var T = toObject(target);\n var argumentsLength = arguments.length;\n var index = 1;\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n var propertyIsEnumerable = propertyIsEnumerableModule.f;\n while (argumentsLength > index) {\n var S = IndexedObject(arguments[index++]);\n var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","/* global ActiveXObject -- old IE, WSH */\nvar anObject = require('../internals/an-object');\nvar defineProperties = require('../internals/object-define-properties');\nvar enumBugKeys = require('../internals/enum-bug-keys');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar html = require('../internals/html');\nvar documentCreateElement = require('../internals/document-create-element');\nvar sharedKey = require('../internals/shared-key');\n\nvar GT = '>';\nvar LT = '<';\nvar PROTOTYPE = 'prototype';\nvar SCRIPT = 'script';\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar EmptyConstructor = function () { /* empty */ };\n\nvar scriptTag = function (content) {\n return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT;\n};\n\n// Create object with fake `null` prototype: use ActiveX Object with cleared prototype\nvar NullProtoObjectViaActiveX = function (activeXDocument) {\n activeXDocument.write(scriptTag(''));\n activeXDocument.close();\n var temp = activeXDocument.parentWindow.Object;\n activeXDocument = null; // avoid memory leak\n return temp;\n};\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar NullProtoObjectViaIFrame = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var JS = 'java' + SCRIPT + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n // https://github.com/zloirock/core-js/issues/475\n iframe.src = String(JS);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(scriptTag('document.F=Object'));\n iframeDocument.close();\n return iframeDocument.F;\n};\n\n// Check for document.domain and active x support\n// No need to use active x approach when document.domain is not set\n// see https://github.com/es-shims/es5-shim/issues/150\n// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346\n// avoid IE GC bug\nvar activeXDocument;\nvar NullProtoObject = function () {\n try {\n activeXDocument = new ActiveXObject('htmlfile');\n } catch (error) { /* ignore */ }\n NullProtoObject = typeof document != 'undefined'\n ? document.domain && activeXDocument\n ? NullProtoObjectViaActiveX(activeXDocument) // old IE\n : NullProtoObjectViaIFrame()\n : NullProtoObjectViaActiveX(activeXDocument); // WSH\n var length = enumBugKeys.length;\n while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];\n return NullProtoObject();\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n// `Object.create` method\n// https://tc39.es/ecma262/#sec-object.create\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n EmptyConstructor[PROTOTYPE] = anObject(O);\n result = new EmptyConstructor();\n EmptyConstructor[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = NullProtoObject();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar definePropertyModule = require('../internals/object-define-property');\nvar anObject = require('../internals/an-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar objectKeys = require('../internals/object-keys');\n\n// `Object.defineProperties` method\n// https://tc39.es/ecma262/#sec-object.defineproperties\n// eslint-disable-next-line es/no-object-defineproperties -- safe\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var props = toIndexedObject(Properties);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var index = 0;\n var key;\n while (length > index) definePropertyModule.f(O, key = keys[index++], props[key]);\n return O;\n};\n","var global = require('../internals/global');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\nvar anObject = require('../internals/an-object');\nvar toPropertyKey = require('../internals/to-property-key');\n\nvar TypeError = global.TypeError;\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar $defineProperty = Object.defineProperty;\n\n// `Object.defineProperty` method\n// https://tc39.es/ecma262/#sec-object.defineproperty\nexports.f = DESCRIPTORS ? $defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPropertyKey(P);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return $defineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var DESCRIPTORS = require('../internals/descriptors');\nvar call = require('../internals/function-call');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar IE8_DOM_DEFINE = require('../internals/ie8-dom-define');\n\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\nexports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPropertyKey(P);\n if (IE8_DOM_DEFINE) try {\n return $getOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]);\n};\n","/* eslint-disable es/no-object-getownpropertynames -- safe */\nvar classof = require('../internals/classof-raw');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar arraySlice = require('../internals/array-slice');\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return $getOwnPropertyNames(it);\n } catch (error) {\n return arraySlice(windowNames);\n }\n};\n\n// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && classof(it) == 'Window'\n ? getWindowNames(it)\n : $getOwnPropertyNames(toIndexedObject(it));\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\n// `Object.getOwnPropertyNames` method\n// https://tc39.es/ecma262/#sec-object.getownpropertynames\n// eslint-disable-next-line es/no-object-getownpropertynames -- safe\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n","// eslint-disable-next-line es/no-object-getownpropertysymbols -- safe\nexports.f = Object.getOwnPropertySymbols;\n","var global = require('../internals/global');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar toObject = require('../internals/to-object');\nvar sharedKey = require('../internals/shared-key');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar Object = global.Object;\nvar ObjectPrototype = Object.prototype;\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n var object = toObject(O);\n if (hasOwn(object, IE_PROTO)) return object[IE_PROTO];\n var constructor = object.constructor;\n if (isCallable(constructor) && object instanceof constructor) {\n return constructor.prototype;\n } return object instanceof Object ? ObjectPrototype : null;\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nmodule.exports = uncurryThis({}.isPrototypeOf);\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar indexOf = require('../internals/array-includes').indexOf;\nvar hiddenKeys = require('../internals/hidden-keys');\n\nvar push = uncurryThis([].push);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (hasOwn(O, key = names[i++])) {\n ~indexOf(result, key) || push(result, key);\n }\n return result;\n};\n","var internalObjectKeys = require('../internals/object-keys-internal');\nvar enumBugKeys = require('../internals/enum-bug-keys');\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n// eslint-disable-next-line es/no-object-keys -- safe\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n","'use strict';\nvar $propertyIsEnumerable = {}.propertyIsEnumerable;\n// eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ 1: 2 }, 1);\n\n// `Object.prototype.propertyIsEnumerable` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : $propertyIsEnumerable;\n","/* eslint-disable no-proto -- safe */\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar anObject = require('../internals/an-object');\nvar aPossiblePrototype = require('../internals/a-possible-prototype');\n\n// `Object.setPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.setprototypeof\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n// eslint-disable-next-line es/no-object-setprototypeof -- safe\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var CORRECT_SETTER = false;\n var test = {};\n var setter;\n try {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n setter = uncurryThis(Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set);\n setter(test, []);\n CORRECT_SETTER = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n anObject(O);\n aPossiblePrototype(proto);\n if (CORRECT_SETTER) setter(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n","var DESCRIPTORS = require('../internals/descriptors');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar objectKeys = require('../internals/object-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar $propertyIsEnumerable = require('../internals/object-property-is-enumerable').f;\n\nvar propertyIsEnumerable = uncurryThis($propertyIsEnumerable);\nvar push = uncurryThis([].push);\n\n// `Object.{ entries, values }` methods implementation\nvar createMethod = function (TO_ENTRIES) {\n return function (it) {\n var O = toIndexedObject(it);\n var keys = objectKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || propertyIsEnumerable(O, key)) {\n push(result, TO_ENTRIES ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n\nmodule.exports = {\n // `Object.entries` method\n // https://tc39.es/ecma262/#sec-object.entries\n entries: createMethod(true),\n // `Object.values` method\n // https://tc39.es/ecma262/#sec-object.values\n values: createMethod(false)\n};\n","'use strict';\nvar TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar classof = require('../internals/classof');\n\n// `Object.prototype.toString` method implementation\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nmodule.exports = TO_STRING_TAG_SUPPORT ? {}.toString : function toString() {\n return '[object ' + classof(this) + ']';\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\n\nvar TypeError = global.TypeError;\n\n// `OrdinaryToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-ordinarytoprimitive\nmodule.exports = function (input, pref) {\n var fn, val;\n if (pref === 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val;\n if (pref !== 'string' && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var getBuiltIn = require('../internals/get-built-in');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar anObject = require('../internals/an-object');\n\nvar concat = uncurryThis([].concat);\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys;\n};\n","var global = require('../internals/global');\n\nmodule.exports = global;\n","module.exports = function (exec) {\n try {\n return { error: false, value: exec() };\n } catch (error) {\n return { error: true, value: error };\n }\n};\n","var anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar newPromiseCapability = require('../internals/new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","var redefine = require('../internals/redefine');\n\nmodule.exports = function (target, src, options) {\n for (var key in src) redefine(target, key, src[key], options);\n return target;\n};\n","var global = require('../internals/global');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar setGlobal = require('../internals/set-global');\nvar inspectSource = require('../internals/inspect-source');\nvar InternalStateModule = require('../internals/internal-state');\nvar CONFIGURABLE_FUNCTION_NAME = require('../internals/function-name').CONFIGURABLE;\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(String).split('String');\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n var name = options && options.name !== undefined ? options.name : key;\n var state;\n if (isCallable(value)) {\n if (String(name).slice(0, 7) === 'Symbol(') {\n name = '[' + String(name).replace(/^Symbol\\(([^)]*)\\)/, '$1') + ']';\n }\n if (!hasOwn(value, 'name') || (CONFIGURABLE_FUNCTION_NAME && value.name !== name)) {\n createNonEnumerableProperty(value, 'name', name);\n }\n state = enforceInternalState(value);\n if (!state.source) {\n state.source = TEMPLATE.join(typeof name == 'string' ? name : '');\n }\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else createNonEnumerableProperty(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return isCallable(this) && getInternalState(this).source || inspectSource(this);\n});\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar classof = require('../internals/classof-raw');\nvar regexpExec = require('../internals/regexp-exec');\n\nvar TypeError = global.TypeError;\n\n// `RegExpExec` abstract operation\n// https://tc39.es/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (isCallable(exec)) {\n var result = call(exec, R, S);\n if (result !== null) anObject(result);\n return result;\n }\n if (classof(R) === 'RegExp') return call(regexpExec, R, S);\n throw TypeError('RegExp#exec called on incompatible receiver');\n};\n","'use strict';\n/* eslint-disable regexp/no-empty-capturing-group, regexp/no-empty-group, regexp/no-lazy-ends -- testing */\n/* eslint-disable regexp/no-useless-quantifier -- testing */\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toString = require('../internals/to-string');\nvar regexpFlags = require('../internals/regexp-flags');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar shared = require('../internals/shared');\nvar create = require('../internals/object-create');\nvar getInternalState = require('../internals/internal-state').get;\nvar UNSUPPORTED_DOT_ALL = require('../internals/regexp-unsupported-dot-all');\nvar UNSUPPORTED_NCG = require('../internals/regexp-unsupported-ncg');\n\nvar nativeReplace = shared('native-string-replace', String.prototype.replace);\nvar nativeExec = RegExp.prototype.exec;\nvar patchedExec = nativeExec;\nvar charAt = uncurryThis(''.charAt);\nvar indexOf = uncurryThis(''.indexOf);\nvar replace = uncurryThis(''.replace);\nvar stringSlice = uncurryThis(''.slice);\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/;\n var re2 = /b*/g;\n call(nativeExec, re1, 'a');\n call(nativeExec, re2, 'a');\n return re1.lastIndex !== 0 || re2.lastIndex !== 0;\n})();\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y || stickyHelpers.BROKEN_CARET;\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y || UNSUPPORTED_DOT_ALL || UNSUPPORTED_NCG;\n\nif (PATCH) {\n // eslint-disable-next-line max-statements -- TODO\n patchedExec = function exec(string) {\n var re = this;\n var state = getInternalState(re);\n var str = toString(string);\n var raw = state.raw;\n var result, reCopy, lastIndex, match, i, object, group;\n\n if (raw) {\n raw.lastIndex = re.lastIndex;\n result = call(patchedExec, raw, str);\n re.lastIndex = raw.lastIndex;\n return result;\n }\n\n var groups = state.groups;\n var sticky = UNSUPPORTED_Y && re.sticky;\n var flags = call(regexpFlags, re);\n var source = re.source;\n var charsAdded = 0;\n var strCopy = str;\n\n if (sticky) {\n flags = replace(flags, 'y', '');\n if (indexOf(flags, 'g') === -1) {\n flags += 'g';\n }\n\n strCopy = stringSlice(str, re.lastIndex);\n // Support anchored sticky behavior.\n if (re.lastIndex > 0 && (!re.multiline || re.multiline && charAt(str, re.lastIndex - 1) !== '\\n')) {\n source = '(?: ' + source + ')';\n strCopy = ' ' + strCopy;\n charsAdded++;\n }\n // ^(? + rx + ) is needed, in combination with some str slicing, to\n // simulate the 'y' flag.\n reCopy = new RegExp('^(?:' + source + ')', flags);\n }\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + source + '$(?!\\\\s)', flags);\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;\n\n match = call(nativeExec, sticky ? reCopy : re, strCopy);\n\n if (sticky) {\n if (match) {\n match.input = stringSlice(match.input, charsAdded);\n match[0] = stringSlice(match[0], charsAdded);\n match.index = re.lastIndex;\n re.lastIndex += match[0].length;\n } else re.lastIndex = 0;\n } else if (UPDATES_LAST_INDEX_WRONG && match) {\n re.lastIndex = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n call(nativeReplace, match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n if (match && groups) {\n match.groups = object = create(null);\n for (i = 0; i < groups.length; i++) {\n group = groups[i];\n object[group[0]] = match[group[1]];\n }\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar anObject = require('../internals/an-object');\n\n// `RegExp.prototype.flags` getter implementation\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.dotAll) result += 's';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nexports.UNSUPPORTED_Y = fails(function () {\n var re = $RegExp('a', 'y');\n re.lastIndex = 2;\n return re.exec('abcd') != null;\n});\n\nexports.BROKEN_CARET = fails(function () {\n // https://bugzilla.mozilla.org/show_bug.cgi?id=773687\n var re = $RegExp('^r', 'gy');\n re.lastIndex = 2;\n return re.exec('str') != null;\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('.', 's') -> /./s and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('.', 's');\n return !(re.dotAll && re.exec('\\n') && re.flags === 's');\n});\n","var fails = require('../internals/fails');\nvar global = require('../internals/global');\n\n// babel-minify and Closure Compiler transpiles RegExp('(?b)', 'g') -> /(?b)/g and it causes SyntaxError\nvar $RegExp = global.RegExp;\n\nmodule.exports = fails(function () {\n var re = $RegExp('(?b)', 'g');\n return re.exec('b').groups.a !== 'b' ||\n 'b'.replace(re, '$c') !== 'bc';\n});\n","var global = require('../internals/global');\n\nvar TypeError = global.TypeError;\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.es/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","var global = require('../internals/global');\n\n// eslint-disable-next-line es/no-object-defineproperty -- safe\nvar defineProperty = Object.defineProperty;\n\nmodule.exports = function (key, value) {\n try {\n defineProperty(global, key, { value: value, configurable: true, writable: true });\n } catch (error) {\n global[key] = value;\n } return value;\n};\n","'use strict';\nvar getBuiltIn = require('../internals/get-built-in');\nvar definePropertyModule = require('../internals/object-define-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar SPECIES = wellKnownSymbol('species');\n\nmodule.exports = function (CONSTRUCTOR_NAME) {\n var Constructor = getBuiltIn(CONSTRUCTOR_NAME);\n var defineProperty = definePropertyModule.f;\n\n if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) {\n defineProperty(Constructor, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n }\n};\n","var defineProperty = require('../internals/object-define-property').f;\nvar hasOwn = require('../internals/has-own-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !hasOwn(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n","var shared = require('../internals/shared');\nvar uid = require('../internals/uid');\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n","var global = require('../internals/global');\nvar setGlobal = require('../internals/set-global');\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\nmodule.exports = store;\n","var IS_PURE = require('../internals/is-pure');\nvar store = require('../internals/shared-store');\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.19.0',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2021 Denis Pushkarev (zloirock.ru)'\n});\n","var anObject = require('../internals/an-object');\nvar aConstructor = require('../internals/a-constructor');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar SPECIES = wellKnownSymbol('species');\n\n// `SpeciesConstructor` abstract operation\n// https://tc39.es/ecma262/#sec-speciesconstructor\nmodule.exports = function (O, defaultConstructor) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? defaultConstructor : aConstructor(S);\n};\n","var fails = require('../internals/fails');\n\n// check the existence of a method, lowercase\n// of a tag and escaping quotes in arguments\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n var test = ''[METHOD_NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n });\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar charAt = uncurryThis(''.charAt);\nvar charCodeAt = uncurryThis(''.charCodeAt);\nvar stringSlice = uncurryThis(''.slice);\n\nvar createMethod = function (CONVERT_TO_STRING) {\n return function ($this, pos) {\n var S = toString(requireObjectCoercible($this));\n var position = toIntegerOrInfinity(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = charCodeAt(S, position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = charCodeAt(S, position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING\n ? charAt(S, position)\n : first\n : CONVERT_TO_STRING\n ? stringSlice(S, position, position + 2)\n : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n };\n};\n\nmodule.exports = {\n // `String.prototype.codePointAt` method\n // https://tc39.es/ecma262/#sec-string.prototype.codepointat\n codeAt: createMethod(false),\n // `String.prototype.at` method\n // https://github.com/mathiasbynens/String.prototype.at\n charAt: createMethod(true)\n};\n","'use strict';\nvar global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar RangeError = global.RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n var str = toString(requireObjectCoercible(this));\n var result = '';\n var n = toIntegerOrInfinity(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","var PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]()\n || non[METHOD_NAME]() !== non\n || (PROPER_FUNCTION_NAME && whitespaces[METHOD_NAME].name !== METHOD_NAME);\n });\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar whitespaces = require('../internals/whitespaces');\n\nvar replace = uncurryThis(''.replace);\nvar whitespace = '[' + whitespaces + ']';\nvar ltrim = RegExp('^' + whitespace + whitespace + '*');\nvar rtrim = RegExp(whitespace + whitespace + '*$');\n\n// `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation\nvar createMethod = function (TYPE) {\n return function ($this) {\n var string = toString(requireObjectCoercible($this));\n if (TYPE & 1) string = replace(string, ltrim, '');\n if (TYPE & 2) string = replace(string, rtrim, '');\n return string;\n };\n};\n\nmodule.exports = {\n // `String.prototype.{ trimLeft, trimStart }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimstart\n start: createMethod(1),\n // `String.prototype.{ trimRight, trimEnd }` methods\n // https://tc39.es/ecma262/#sec-string.prototype.trimend\n end: createMethod(2),\n // `String.prototype.trim` method\n // https://tc39.es/ecma262/#sec-string.prototype.trim\n trim: createMethod(3)\n};\n","var global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind-context');\nvar isCallable = require('../internals/is-callable');\nvar hasOwn = require('../internals/has-own-property');\nvar fails = require('../internals/fails');\nvar html = require('../internals/html');\nvar arraySlice = require('../internals/array-slice');\nvar createElement = require('../internals/document-create-element');\nvar IS_IOS = require('../internals/engine-is-ios');\nvar IS_NODE = require('../internals/engine-is-node');\n\nvar set = global.setImmediate;\nvar clear = global.clearImmediate;\nvar process = global.process;\nvar Dispatch = global.Dispatch;\nvar Function = global.Function;\nvar MessageChannel = global.MessageChannel;\nvar String = global.String;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar location, defer, channel, port;\n\ntry {\n // Deno throws a ReferenceError on `location` access without `--location` flag\n location = global.location;\n} catch (error) { /* empty */ }\n\nvar run = function (id) {\n if (hasOwn(queue, id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\n\nvar runner = function (id) {\n return function () {\n run(id);\n };\n};\n\nvar listener = function (event) {\n run(event.data);\n};\n\nvar post = function (id) {\n // old engines have not location.origin\n global.postMessage(String(id), location.protocol + '//' + location.host);\n};\n\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!set || !clear) {\n set = function setImmediate(fn) {\n var args = arraySlice(arguments, 1);\n queue[++counter] = function () {\n apply(isCallable(fn) ? fn : Function(fn), undefined, args);\n };\n defer(counter);\n return counter;\n };\n clear = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (IS_NODE) {\n defer = function (id) {\n process.nextTick(runner(id));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(runner(id));\n };\n // Browsers with MessageChannel, includes WebWorkers\n // except iOS - https://github.com/zloirock/core-js/issues/624\n } else if (MessageChannel && !IS_IOS) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = bind(port.postMessage, port);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (\n global.addEventListener &&\n isCallable(global.postMessage) &&\n !global.importScripts &&\n location && location.protocol !== 'file:' &&\n !fails(post)\n ) {\n defer = post;\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in createElement('script')) {\n defer = function (id) {\n html.appendChild(createElement('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(runner(id), 0);\n };\n }\n}\n\nmodule.exports = {\n set: set,\n clear: clear\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length).\nmodule.exports = function (index, length) {\n var integer = toIntegerOrInfinity(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n","var global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\n\nvar RangeError = global.RangeError;\n\n// `ToIndex` abstract operation\n// https://tc39.es/ecma262/#sec-toindex\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toIntegerOrInfinity(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length or index');\n return length;\n};\n","// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = require('../internals/indexed-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n","var ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToIntegerOrInfinity` abstract operation\n// https://tc39.es/ecma262/#sec-tointegerorinfinity\nmodule.exports = function (argument) {\n var number = +argument;\n // eslint-disable-next-line no-self-compare -- safe\n return number !== number || number === 0 ? 0 : (number > 0 ? floor : ceil)(number);\n};\n","var toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.es/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toIntegerOrInfinity(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n","var global = require('../internals/global');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar Object = global.Object;\n\n// `ToObject` abstract operation\n// https://tc39.es/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n","var global = require('../internals/global');\nvar toPositiveInteger = require('../internals/to-positive-integer');\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it, BYTES) {\n var offset = toPositiveInteger(it);\n if (offset % BYTES) throw RangeError('Wrong offset');\n return offset;\n};\n","var global = require('../internals/global');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\n\nvar RangeError = global.RangeError;\n\nmodule.exports = function (it) {\n var result = toIntegerOrInfinity(it);\n if (result < 0) throw RangeError(\"The argument can't be less than 0\");\n return result;\n};\n","var global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar getMethod = require('../internals/get-method');\nvar ordinaryToPrimitive = require('../internals/ordinary-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TypeError = global.TypeError;\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\n// `ToPrimitive` abstract operation\n// https://tc39.es/ecma262/#sec-toprimitive\nmodule.exports = function (input, pref) {\n if (!isObject(input) || isSymbol(input)) return input;\n var exoticToPrim = getMethod(input, TO_PRIMITIVE);\n var result;\n if (exoticToPrim) {\n if (pref === undefined) pref = 'default';\n result = call(exoticToPrim, input, pref);\n if (!isObject(result) || isSymbol(result)) return result;\n throw TypeError(\"Can't convert object to primitive value\");\n }\n if (pref === undefined) pref = 'number';\n return ordinaryToPrimitive(input, pref);\n};\n","var toPrimitive = require('../internals/to-primitive');\nvar isSymbol = require('../internals/is-symbol');\n\n// `ToPropertyKey` abstract operation\n// https://tc39.es/ecma262/#sec-topropertykey\nmodule.exports = function (argument) {\n var key = toPrimitive(argument, 'string');\n return isSymbol(key) ? key : key + '';\n};\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar test = {};\n\ntest[TO_STRING_TAG] = 'z';\n\nmodule.exports = String(test) === '[object z]';\n","var global = require('../internals/global');\nvar classof = require('../internals/classof');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n if (classof(argument) === 'Symbol') throw TypeError('Cannot convert a Symbol value to a string');\n return String(argument);\n};\n","var global = require('../internals/global');\n\nvar String = global.String;\n\nmodule.exports = function (argument) {\n try {\n return String(argument);\n } catch (error) {\n return 'Object';\n }\n};\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayBufferModule = require('../internals/array-buffer');\nvar anInstance = require('../internals/an-instance');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar isIntegralNumber = require('../internals/is-integral-number');\nvar toLength = require('../internals/to-length');\nvar toIndex = require('../internals/to-index');\nvar toOffset = require('../internals/to-offset');\nvar toPropertyKey = require('../internals/to-property-key');\nvar hasOwn = require('../internals/has-own-property');\nvar classof = require('../internals/classof');\nvar isObject = require('../internals/is-object');\nvar isSymbol = require('../internals/is-symbol');\nvar create = require('../internals/object-create');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar typedArrayFrom = require('../internals/typed-array-from');\nvar forEach = require('../internals/array-iteration').forEach;\nvar setSpecies = require('../internals/set-species');\nvar definePropertyModule = require('../internals/object-define-property');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar InternalStateModule = require('../internals/internal-state');\nvar inheritIfRequired = require('../internals/inherit-if-required');\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar round = Math.round;\nvar RangeError = global.RangeError;\nvar ArrayBuffer = ArrayBufferModule.ArrayBuffer;\nvar ArrayBufferPrototype = ArrayBuffer.prototype;\nvar DataView = ArrayBufferModule.DataView;\nvar NATIVE_ARRAY_BUFFER_VIEWS = ArrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar TYPED_ARRAY_TAG = ArrayBufferViewCore.TYPED_ARRAY_TAG;\nvar TypedArray = ArrayBufferViewCore.TypedArray;\nvar TypedArrayPrototype = ArrayBufferViewCore.TypedArrayPrototype;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\nvar isTypedArray = ArrayBufferViewCore.isTypedArray;\nvar BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\nvar WRONG_LENGTH = 'Wrong length';\n\nvar fromList = function (C, list) {\n aTypedArrayConstructor(C);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n};\n\nvar addGetter = function (it, key) {\n nativeDefineProperty(it, key, { get: function () {\n return getInternalState(this)[key];\n } });\n};\n\nvar isArrayBuffer = function (it) {\n var klass;\n return isPrototypeOf(ArrayBufferPrototype, it) || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';\n};\n\nvar isTypedArrayIndex = function (target, key) {\n return isTypedArray(target)\n && !isSymbol(key)\n && key in target\n && isIntegralNumber(+key)\n && key >= 0;\n};\n\nvar wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {\n key = toPropertyKey(key);\n return isTypedArrayIndex(target, key)\n ? createPropertyDescriptor(2, target[key])\n : nativeGetOwnPropertyDescriptor(target, key);\n};\n\nvar wrappedDefineProperty = function defineProperty(target, key, descriptor) {\n key = toPropertyKey(key);\n if (isTypedArrayIndex(target, key)\n && isObject(descriptor)\n && hasOwn(descriptor, 'value')\n && !hasOwn(descriptor, 'get')\n && !hasOwn(descriptor, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !descriptor.configurable\n && (!hasOwn(descriptor, 'writable') || descriptor.writable)\n && (!hasOwn(descriptor, 'enumerable') || descriptor.enumerable)\n ) {\n target[key] = descriptor.value;\n return target;\n } return nativeDefineProperty(target, key, descriptor);\n};\n\nif (DESCRIPTORS) {\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n getOwnPropertyDescriptorModule.f = wrappedGetOwnPropertyDescriptor;\n definePropertyModule.f = wrappedDefineProperty;\n addGetter(TypedArrayPrototype, 'buffer');\n addGetter(TypedArrayPrototype, 'byteOffset');\n addGetter(TypedArrayPrototype, 'byteLength');\n addGetter(TypedArrayPrototype, 'length');\n }\n\n $({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {\n getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,\n defineProperty: wrappedDefineProperty\n });\n\n module.exports = function (TYPE, wrapper, CLAMPED) {\n var BYTES = TYPE.match(/\\d+$/)[0] / 8;\n var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + TYPE;\n var SETTER = 'set' + TYPE;\n var NativeTypedArrayConstructor = global[CONSTRUCTOR_NAME];\n var TypedArrayConstructor = NativeTypedArrayConstructor;\n var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;\n var exported = {};\n\n var getter = function (that, index) {\n var data = getInternalState(that);\n return data.view[GETTER](index * BYTES + data.byteOffset, true);\n };\n\n var setter = function (that, index, value) {\n var data = getInternalState(that);\n if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;\n data.view[SETTER](index * BYTES + data.byteOffset, value, true);\n };\n\n var addElement = function (that, index) {\n nativeDefineProperty(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n\n if (!NATIVE_ARRAY_BUFFER_VIEWS) {\n TypedArrayConstructor = wrapper(function (that, data, offset, $length) {\n anInstance(that, TypedArrayConstructorPrototype);\n var index = 0;\n var byteOffset = 0;\n var buffer, byteLength, length;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new ArrayBuffer(byteLength);\n } else if (isArrayBuffer(data)) {\n buffer = data;\n byteOffset = toOffset(offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - byteOffset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (isTypedArray(data)) {\n return fromList(TypedArrayConstructor, data);\n } else {\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }\n setInternalState(that, {\n buffer: buffer,\n byteOffset: byteOffset,\n byteLength: byteLength,\n length: length,\n view: new DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = create(TypedArrayPrototype);\n } else if (TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS) {\n TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {\n anInstance(dummy, TypedArrayConstructorPrototype);\n return inheritIfRequired(function () {\n if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));\n if (isArrayBuffer(data)) return $length !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)\n : typedArrayOffset !== undefined\n ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))\n : new NativeTypedArrayConstructor(data);\n if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);\n return call(typedArrayFrom, TypedArrayConstructor, data);\n }(), dummy, TypedArrayConstructor);\n });\n\n if (setPrototypeOf) setPrototypeOf(TypedArrayConstructor, TypedArray);\n forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {\n if (!(key in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);\n }\n });\n TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;\n }\n\n if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);\n }\n\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_CONSTRUCTOR, TypedArrayConstructor);\n\n if (TYPED_ARRAY_TAG) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);\n }\n\n exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;\n\n $({\n global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS\n }, exported);\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {\n createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);\n }\n\n if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {\n createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);\n }\n\n setSpecies(CONSTRUCTOR_NAME);\n };\n} else module.exports = function () { /* empty */ };\n","/* eslint-disable no-new -- required for testing */\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar NATIVE_ARRAY_BUFFER_VIEWS = require('../internals/array-buffer-view-core').NATIVE_ARRAY_BUFFER_VIEWS;\n\nvar ArrayBuffer = global.ArrayBuffer;\nvar Int8Array = global.Int8Array;\n\nmodule.exports = !NATIVE_ARRAY_BUFFER_VIEWS || !fails(function () {\n Int8Array(1);\n}) || !fails(function () {\n new Int8Array(-1);\n}) || !checkCorrectnessOfIteration(function (iterable) {\n new Int8Array();\n new Int8Array(null);\n new Int8Array(1.5);\n new Int8Array(iterable);\n}, true) || fails(function () {\n // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill\n return new Int8Array(new ArrayBuffer(2), 1, undefined).length !== 1;\n});\n","var arrayFromConstructorAndList = require('../internals/array-from-constructor-and-list');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nmodule.exports = function (instance, list) {\n return arrayFromConstructorAndList(typedArraySpeciesConstructor(instance), list);\n};\n","var bind = require('../internals/function-bind-context');\nvar call = require('../internals/function-call');\nvar aConstructor = require('../internals/a-constructor');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar getIterator = require('../internals/get-iterator');\nvar getIteratorMethod = require('../internals/get-iterator-method');\nvar isArrayIteratorMethod = require('../internals/is-array-iterator-method');\nvar aTypedArrayConstructor = require('../internals/array-buffer-view-core').aTypedArrayConstructor;\n\nmodule.exports = function from(source /* , mapfn, thisArg */) {\n var C = aConstructor(this);\n var O = toObject(source);\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iteratorMethod = getIteratorMethod(O);\n var i, length, result, step, iterator, next;\n if (iteratorMethod && !isArrayIteratorMethod(iteratorMethod)) {\n iterator = getIterator(O, iteratorMethod);\n next = iterator.next;\n O = [];\n while (!(step = call(next, iterator)).done) {\n O.push(step.value);\n }\n }\n if (mapping && argumentsLength > 2) {\n mapfn = bind(mapfn, arguments[2]);\n }\n length = lengthOfArrayLike(O);\n result = new (aTypedArrayConstructor(C))(length);\n for (i = 0; length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n};\n","var ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar speciesConstructor = require('../internals/species-constructor');\n\nvar TYPED_ARRAY_CONSTRUCTOR = ArrayBufferViewCore.TYPED_ARRAY_CONSTRUCTOR;\nvar aTypedArrayConstructor = ArrayBufferViewCore.aTypedArrayConstructor;\n\n// a part of `TypedArraySpeciesCreate` abstract operation\n// https://tc39.es/ecma262/#typedarray-species-create\nmodule.exports = function (originalArray) {\n return aTypedArrayConstructor(speciesConstructor(originalArray, originalArray[TYPED_ARRAY_CONSTRUCTOR]));\n};\n","var uncurryThis = require('../internals/function-uncurry-this');\n\nvar id = 0;\nvar postfix = Math.random();\nvar toString = uncurryThis(1.0.toString);\n\nmodule.exports = function (key) {\n return 'Symbol(' + (key === undefined ? '' : key) + ')_' + toString(++id + postfix, 36);\n};\n","/* eslint-disable es/no-symbol -- required for testing */\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\n\nmodule.exports = NATIVE_SYMBOL\n && !Symbol.sham\n && typeof Symbol.iterator == 'symbol';\n","var wellKnownSymbol = require('../internals/well-known-symbol');\n\nexports.f = wellKnownSymbol;\n","var global = require('../internals/global');\nvar shared = require('../internals/shared');\nvar hasOwn = require('../internals/has-own-property');\nvar uid = require('../internals/uid');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar USE_SYMBOL_AS_UID = require('../internals/use-symbol-as-uid');\n\nvar WellKnownSymbolsStore = shared('wks');\nvar Symbol = global.Symbol;\nvar symbolFor = Symbol && Symbol['for'];\nvar createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid;\n\nmodule.exports = function (name) {\n if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == 'string')) {\n var description = 'Symbol.' + name;\n if (NATIVE_SYMBOL && hasOwn(Symbol, name)) {\n WellKnownSymbolsStore[name] = Symbol[name];\n } else if (USE_SYMBOL_AS_UID && symbolFor) {\n WellKnownSymbolsStore[name] = symbolFor(description);\n } else {\n WellKnownSymbolsStore[name] = createWellKnownSymbol(description);\n }\n } return WellKnownSymbolsStore[name];\n};\n","// a string of all valid unicode whitespaces\nmodule.exports = '\\u0009\\u000A\\u000B\\u000C\\u000D\\u0020\\u00A0\\u1680\\u2000\\u2001\\u2002' +\n '\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar getPrototypeOf = require('../internals/object-get-prototype-of');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\nvar create = require('../internals/object-create');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar clearErrorStack = require('../internals/clear-error-stack');\nvar installErrorCause = require('../internals/install-error-cause');\nvar iterate = require('../internals/iterate');\nvar normalizeStringArgument = require('../internals/normalize-string-argument');\nvar ERROR_STACK_INSTALLABLE = require('../internals/error-stack-installable');\n\nvar Error = global.Error;\nvar push = [].push;\n\nvar $AggregateError = function AggregateError(errors, message /* , options */) {\n var that = isPrototypeOf(AggregateErrorPrototype, this) ? this : create(AggregateErrorPrototype);\n var options = arguments.length > 2 ? arguments[2] : undefined;\n if (setPrototypeOf) {\n that = setPrototypeOf(new Error(undefined), getPrototypeOf(that));\n }\n createNonEnumerableProperty(that, 'message', normalizeStringArgument(message, ''));\n if (ERROR_STACK_INSTALLABLE) createNonEnumerableProperty(that, 'stack', clearErrorStack(that.stack, 1));\n installErrorCause(that, options);\n var errorsArray = [];\n iterate(errors, push, { that: errorsArray });\n createNonEnumerableProperty(that, 'errors', errorsArray);\n return that;\n};\n\nif (setPrototypeOf) setPrototypeOf($AggregateError, Error);\nelse copyConstructorProperties($AggregateError, Error);\n\nvar AggregateErrorPrototype = $AggregateError.prototype = create(Error.prototype, {\n constructor: createPropertyDescriptor(1, $AggregateError),\n message: createPropertyDescriptor(1, ''),\n name: createPropertyDescriptor(1, 'AggregateError')\n});\n\n// `AggregateError` constructor\n// https://tc39.es/ecma262/#sec-aggregate-error-constructor\n$({ global: true }, {\n AggregateError: $AggregateError\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar fails = require('../internals/fails');\nvar isArray = require('../internals/is-array');\nvar isObject = require('../internals/is-object');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar createProperty = require('../internals/create-property');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable');\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded';\nvar TypeError = global.TypeError;\n\n// We can't use this feature detection in V8 since it causes\n// deoptimization and serious performance degradation\n// https://github.com/zloirock/core-js/issues/679\nvar IS_CONCAT_SPREADABLE_SUPPORT = V8_VERSION >= 51 || !fails(function () {\n var array = [];\n array[IS_CONCAT_SPREADABLE] = false;\n return array.concat()[0] !== array;\n});\n\nvar SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat');\n\nvar isConcatSpreadable = function (O) {\n if (!isObject(O)) return false;\n var spreadable = O[IS_CONCAT_SPREADABLE];\n return spreadable !== undefined ? !!spreadable : isArray(O);\n};\n\nvar FORCED = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;\n\n// `Array.prototype.concat` method\n// https://tc39.es/ecma262/#sec-array.prototype.concat\n// with adding support of @@isConcatSpreadable and @@species\n$({ target: 'Array', proto: true, forced: FORCED }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n concat: function concat(arg) {\n var O = toObject(this);\n var A = arraySpeciesCreate(O, 0);\n var n = 0;\n var i, k, length, len, E;\n for (i = -1, length = arguments.length; i < length; i++) {\n E = i === -1 ? O : arguments[i];\n if (isConcatSpreadable(E)) {\n len = lengthOfArrayLike(E);\n if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]);\n } else {\n if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED);\n createProperty(A, n++, E);\n }\n }\n A.length = n;\n return A;\n }\n});\n","var $ = require('../internals/export');\nvar copyWithin = require('../internals/array-copy-within');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-array.prototype.copywithin\n$({ target: 'Array', proto: true }, {\n copyWithin: copyWithin\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('copyWithin');\n","var $ = require('../internals/export');\nvar fill = require('../internals/array-fill');\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.fill` method\n// https://tc39.es/ecma262/#sec-array.prototype.fill\n$({ target: 'Array', proto: true }, {\n fill: fill\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('fill');\n","'use strict';\nvar $ = require('../internals/export');\nvar $filter = require('../internals/array-iteration').filter;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('filter');\n\n// `Array.prototype.filter` method\n// https://tc39.es/ecma262/#sec-array.prototype.filter\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $ = require('../internals/export');\nvar from = require('../internals/array-from');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n // eslint-disable-next-line es/no-array-from -- required for testing\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.es/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $includes = require('../internals/array-includes').includes;\nvar addToUnscopables = require('../internals/add-to-unscopables');\n\n// `Array.prototype.includes` method\n// https://tc39.es/ecma262/#sec-array.prototype.includes\n$({ target: 'Array', proto: true }, {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('includes');\n","'use strict';\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar addToUnscopables = require('../internals/add-to-unscopables');\nvar Iterators = require('../internals/iterators');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar ARRAY_ITERATOR = 'Array Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(ARRAY_ITERATOR);\n\n// `Array.prototype.entries` method\n// https://tc39.es/ecma262/#sec-array.prototype.entries\n// `Array.prototype.keys` method\n// https://tc39.es/ecma262/#sec-array.prototype.keys\n// `Array.prototype.values` method\n// https://tc39.es/ecma262/#sec-array.prototype.values\n// `Array.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-array.prototype-@@iterator\n// `CreateArrayIterator` internal method\n// https://tc39.es/ecma262/#sec-createarrayiterator\nmodule.exports = defineIterator(Array, 'Array', function (iterated, kind) {\n setInternalState(this, {\n type: ARRAY_ITERATOR,\n target: toIndexedObject(iterated), // target\n index: 0, // next index\n kind: kind // kind\n });\n// `%ArrayIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next\n}, function () {\n var state = getInternalState(this);\n var target = state.target;\n var kind = state.kind;\n var index = state.index++;\n if (!target || index >= target.length) {\n state.target = undefined;\n return { value: undefined, done: true };\n }\n if (kind == 'keys') return { value: index, done: false };\n if (kind == 'values') return { value: target[index], done: false };\n return { value: [index, target[index]], done: false };\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values%\n// https://tc39.es/ecma262/#sec-createunmappedargumentsobject\n// https://tc39.es/ecma262/#sec-createmappedargumentsobject\nIterators.Arguments = Iterators.Array;\n\n// https://tc39.es/ecma262/#sec-array.prototype-@@unscopables\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IndexedObject = require('../internals/indexed-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\n\nvar un$Join = uncurryThis([].join);\n\nvar ES3_STRINGS = IndexedObject != Object;\nvar STRICT_METHOD = arrayMethodIsStrict('join', ',');\n\n// `Array.prototype.join` method\n// https://tc39.es/ecma262/#sec-array.prototype.join\n$({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD }, {\n join: function join(separator) {\n return un$Join(toIndexedObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $map = require('../internals/array-iteration').map;\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');\n\n// `Array.prototype.map` method\n// https://tc39.es/ecma262/#sec-array.prototype.map\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar isArray = require('../internals/is-array');\nvar isConstructor = require('../internals/is-constructor');\nvar isObject = require('../internals/is-object');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar createProperty = require('../internals/create-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\nvar un$Slice = require('../internals/array-slice');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice');\n\nvar SPECIES = wellKnownSymbol('species');\nvar Array = global.Array;\nvar max = Math.max;\n\n// `Array.prototype.slice` method\n// https://tc39.es/ecma262/#sec-array.prototype.slice\n// fallback for not array-like ES3 strings and DOM objects\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n slice: function slice(start, end) {\n var O = toIndexedObject(this);\n var length = lengthOfArrayLike(O);\n var k = toAbsoluteIndex(start, length);\n var fin = toAbsoluteIndex(end === undefined ? length : end, length);\n // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible\n var Constructor, result, n;\n if (isArray(O)) {\n Constructor = O.constructor;\n // cross-realm fallback\n if (isConstructor(Constructor) && (Constructor === Array || isArray(Constructor.prototype))) {\n Constructor = undefined;\n } else if (isObject(Constructor)) {\n Constructor = Constructor[SPECIES];\n if (Constructor === null) Constructor = undefined;\n }\n if (Constructor === Array || Constructor === undefined) {\n return un$Slice(O, k, fin);\n }\n }\n result = new (Constructor === undefined ? Array : Constructor)(max(fin - k, 0));\n for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);\n result.length = n;\n return result;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar aCallable = require('../internals/a-callable');\nvar toObject = require('../internals/to-object');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar internalSort = require('../internals/array-sort');\nvar arrayMethodIsStrict = require('../internals/array-method-is-strict');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar test = [];\nvar un$Sort = uncurryThis(test.sort);\nvar push = uncurryThis(test.push);\n\n// IE8-\nvar FAILS_ON_UNDEFINED = fails(function () {\n test.sort(undefined);\n});\n// V8 bug\nvar FAILS_ON_NULL = fails(function () {\n test.sort(null);\n});\n// Old WebKit\nvar STRICT_METHOD = arrayMethodIsStrict('sort');\n\nvar STABLE_SORT = !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 70;\n if (FF && FF > 3) return;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 603;\n\n var result = '';\n var code, chr, value, index;\n\n // generate an array with more 512 elements (Chakra and old V8 fails only in this case)\n for (code = 65; code < 76; code++) {\n chr = String.fromCharCode(code);\n\n switch (code) {\n case 66: case 69: case 70: case 72: value = 3; break;\n case 68: case 71: value = 4; break;\n default: value = 2;\n }\n\n for (index = 0; index < 47; index++) {\n test.push({ k: chr + index, v: value });\n }\n }\n\n test.sort(function (a, b) { return b.v - a.v; });\n\n for (index = 0; index < test.length; index++) {\n chr = test[index].k.charAt(0);\n if (result.charAt(result.length - 1) !== chr) result += chr;\n }\n\n return result !== 'DGBEFHACIJK';\n});\n\nvar FORCED = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD || !STABLE_SORT;\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (y === undefined) return -1;\n if (x === undefined) return 1;\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n return toString(x) > toString(y) ? 1 : -1;\n };\n};\n\n// `Array.prototype.sort` method\n// https://tc39.es/ecma262/#sec-array.prototype.sort\n$({ target: 'Array', proto: true, forced: FORCED }, {\n sort: function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n\n var array = toObject(this);\n\n if (STABLE_SORT) return comparefn === undefined ? un$Sort(array) : un$Sort(array, comparefn);\n\n var items = [];\n var arrayLength = lengthOfArrayLike(array);\n var itemsLength, index;\n\n for (index = 0; index < arrayLength; index++) {\n if (index in array) push(items, array[index]);\n }\n\n internalSort(items, getSortCompare(comparefn));\n\n itemsLength = items.length;\n index = 0;\n\n while (index < itemsLength) array[index] = items[index++];\n while (index < arrayLength) delete array[index++];\n\n return array;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toObject = require('../internals/to-object');\nvar arraySpeciesCreate = require('../internals/array-species-create');\nvar createProperty = require('../internals/create-property');\nvar arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support');\n\nvar HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('splice');\n\nvar TypeError = global.TypeError;\nvar max = Math.max;\nvar min = Math.min;\nvar MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;\nvar MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';\n\n// `Array.prototype.splice` method\n// https://tc39.es/ecma262/#sec-array.prototype.splice\n// with adding support of @@species\n$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {\n splice: function splice(start, deleteCount /* , ...items */) {\n var O = toObject(this);\n var len = lengthOfArrayLike(O);\n var actualStart = toAbsoluteIndex(start, len);\n var argumentsLength = arguments.length;\n var insertCount, actualDeleteCount, A, k, from, to;\n if (argumentsLength === 0) {\n insertCount = actualDeleteCount = 0;\n } else if (argumentsLength === 1) {\n insertCount = 0;\n actualDeleteCount = len - actualStart;\n } else {\n insertCount = argumentsLength - 2;\n actualDeleteCount = min(max(toIntegerOrInfinity(deleteCount), 0), len - actualStart);\n }\n if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {\n throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);\n }\n A = arraySpeciesCreate(O, actualDeleteCount);\n for (k = 0; k < actualDeleteCount; k++) {\n from = actualStart + k;\n if (from in O) createProperty(A, k, O[from]);\n }\n A.length = actualDeleteCount;\n if (insertCount < actualDeleteCount) {\n for (k = actualStart; k < len - actualDeleteCount; k++) {\n from = k + actualDeleteCount;\n to = k + insertCount;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];\n } else if (insertCount > actualDeleteCount) {\n for (k = len - actualDeleteCount; k > actualStart; k--) {\n from = k + actualDeleteCount - 1;\n to = k + insertCount - 1;\n if (from in O) O[to] = O[from];\n else delete O[to];\n }\n }\n for (k = 0; k < insertCount; k++) {\n O[k + actualStart] = arguments[k + 2];\n }\n O.length = len - actualDeleteCount + insertCount;\n return A;\n }\n});\n","var hasOwn = require('../internals/has-own-property');\nvar redefine = require('../internals/redefine');\nvar dateToPrimitive = require('../internals/date-to-primitive');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\nvar DatePrototype = Date.prototype;\n\n// `Date.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-date.prototype-@@toprimitive\nif (!hasOwn(DatePrototype, TO_PRIMITIVE)) {\n redefine(DatePrototype, TO_PRIMITIVE, dateToPrimitive);\n}\n","var DESCRIPTORS = require('../internals/descriptors');\nvar FUNCTION_NAME_EXISTS = require('../internals/function-name').EXISTS;\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar defineProperty = require('../internals/object-define-property').f;\n\nvar FunctionPrototype = Function.prototype;\nvar functionToString = uncurryThis(FunctionPrototype.toString);\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar regExpExec = uncurryThis(nameRE.exec);\nvar NAME = 'name';\n\n// Function instances `.name` property\n// https://tc39.es/ecma262/#sec-function-instances-name\nif (DESCRIPTORS && !FUNCTION_NAME_EXISTS) {\n defineProperty(FunctionPrototype, NAME, {\n configurable: true,\n get: function () {\n try {\n return regExpExec(nameRE, functionToString(this))[1];\n } catch (error) {\n return '';\n }\n }\n });\n}\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\n\n// `globalThis` object\n// https://tc39.es/ecma262/#sec-globalthis\n$({ global: true }, {\n globalThis: global\n});\n","var global = require('../internals/global');\nvar setToStringTag = require('../internals/set-to-string-tag');\n\n// JSON[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-json-@@tostringtag\nsetToStringTag(global.JSON, 'JSON', true);\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Map` constructor\n// https://tc39.es/ecma262/#sec-map-objects\ncollection('Map', function (init) {\n return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","var setToStringTag = require('../internals/set-to-string-tag');\n\n// Math[@@toStringTag] property\n// https://tc39.es/ecma262/#sec-math-@@tostringtag\nsetToStringTag(Math, 'Math', true);\n","'use strict';\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar isForced = require('../internals/is-forced');\nvar redefine = require('../internals/redefine');\nvar hasOwn = require('../internals/has-own-property');\nvar inheritIfRequired = require('../internals/inherit-if-required');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar toPrimitive = require('../internals/to-primitive');\nvar fails = require('../internals/fails');\nvar getOwnPropertyNames = require('../internals/object-get-own-property-names').f;\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar defineProperty = require('../internals/object-define-property').f;\nvar thisNumberValue = require('../internals/this-number-value');\nvar trim = require('../internals/string-trim').trim;\n\nvar NUMBER = 'Number';\nvar NativeNumber = global[NUMBER];\nvar NumberPrototype = NativeNumber.prototype;\nvar TypeError = global.TypeError;\nvar arraySlice = uncurryThis(''.slice);\nvar charCodeAt = uncurryThis(''.charCodeAt);\n\n// `ToNumeric` abstract operation\n// https://tc39.es/ecma262/#sec-tonumeric\nvar toNumeric = function (value) {\n var primValue = toPrimitive(value, 'number');\n return typeof primValue == 'bigint' ? primValue : toNumber(primValue);\n};\n\n// `ToNumber` abstract operation\n// https://tc39.es/ecma262/#sec-tonumber\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, 'number');\n var first, third, radix, maxCode, digits, length, index, code;\n if (isSymbol(it)) throw TypeError('Cannot convert a Symbol value to a number');\n if (typeof it == 'string' && it.length > 2) {\n it = trim(it);\n first = charCodeAt(it, 0);\n if (first === 43 || first === 45) {\n third = charCodeAt(it, 2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (charCodeAt(it, 1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i\n default: return +it;\n }\n digits = arraySlice(it, 2);\n length = digits.length;\n for (index = 0; index < length; index++) {\n code = charCodeAt(digits, index);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\n// `Number` constructor\n// https://tc39.es/ecma262/#sec-number-constructor\nif (isForced(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {\n var NumberWrapper = function Number(value) {\n var n = arguments.length < 1 ? 0 : NativeNumber(toNumeric(value));\n var dummy = this;\n // check on 1..constructor(foo) case\n return isPrototypeOf(NumberPrototype, dummy) && fails(function () { thisNumberValue(dummy); })\n ? inheritIfRequired(Object(n), dummy, NumberWrapper) : n;\n };\n for (var keys = DESCRIPTORS ? getOwnPropertyNames(NativeNumber) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES2015 (in case, if modules with ES2015 Number statics required before):\n 'EPSILON,MAX_SAFE_INTEGER,MIN_SAFE_INTEGER,isFinite,isInteger,isNaN,isSafeInteger,parseFloat,parseInt,' +\n // ESNext\n 'fromString,range'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (hasOwn(NativeNumber, key = keys[j]) && !hasOwn(NumberWrapper, key)) {\n defineProperty(NumberWrapper, key, getOwnPropertyDescriptor(NativeNumber, key));\n }\n }\n NumberWrapper.prototype = NumberPrototype;\n NumberPrototype.constructor = NumberWrapper;\n redefine(global, NUMBER, NumberWrapper);\n}\n","var $ = require('../internals/export');\n\n// `Number.EPSILON` constant\n// https://tc39.es/ecma262/#sec-number.epsilon\n$({ target: 'Number', stat: true }, {\n EPSILON: Math.pow(2, -52)\n});\n","var $ = require('../internals/export');\nvar numberIsFinite = require('../internals/number-is-finite');\n\n// `Number.isFinite` method\n// https://tc39.es/ecma262/#sec-number.isfinite\n$({ target: 'Number', stat: true }, { isFinite: numberIsFinite });\n","var $ = require('../internals/export');\nvar isIntegralNumber = require('../internals/is-integral-number');\n\n// `Number.isInteger` method\n// https://tc39.es/ecma262/#sec-number.isinteger\n$({ target: 'Number', stat: true }, {\n isInteger: isIntegralNumber\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar String = global.String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar un$ToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar multiply = function (data, n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\n\nvar divide = function (data, n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\n\nvar dataToString = function (data) {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n }\n } return s;\n};\n\nvar FORCED = fails(function () {\n return un$ToFixed(0.00008, 3) !== '0.000' ||\n un$ToFixed(0.9, 0) !== '1' ||\n un$ToFixed(1.255, 2) !== '1.25' ||\n un$ToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n // V8 ~ Android 4.3-\n un$ToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toIntegerOrInfinity(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare -- NaN check\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(data, 0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(data, 1e7, 0);\n j -= 7;\n }\n multiply(data, pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(data, 1 << 23);\n j -= 23;\n }\n divide(data, 1 << j);\n multiply(data, 1, 1);\n divide(data, 2);\n result = dataToString(data);\n } else {\n multiply(data, 0, z);\n multiply(data, 1 << -e, 0);\n result = dataToString(data) + repeat('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat('0', fractDigits - k) + result\n : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","var $ = require('../internals/export');\nvar assign = require('../internals/object-assign');\n\n// `Object.assign` method\n// https://tc39.es/ecma262/#sec-object.assign\n// eslint-disable-next-line es/no-object-assign -- required for testing\n$({ target: 'Object', stat: true, forced: Object.assign !== assign }, {\n assign: assign\n});\n","var $ = require('../internals/export');\nvar FREEZING = require('../internals/freezing');\nvar fails = require('../internals/fails');\nvar isObject = require('../internals/is-object');\nvar onFreeze = require('../internals/internal-metadata').onFreeze;\n\n// eslint-disable-next-line es/no-object-freeze -- safe\nvar $freeze = Object.freeze;\nvar FAILS_ON_PRIMITIVES = fails(function () { $freeze(1); });\n\n// `Object.freeze` method\n// https://tc39.es/ecma262/#sec-object.freeze\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !FREEZING }, {\n freeze: function freeze(it) {\n return $freeze && isObject(it) ? $freeze(onFreeze(it)) : it;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar nativeGetOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar DESCRIPTORS = require('../internals/descriptors');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetOwnPropertyDescriptor(1); });\nvar FORCED = !DESCRIPTORS || FAILS_ON_PRIMITIVES;\n\n// `Object.getOwnPropertyDescriptor` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptor\n$({ target: 'Object', stat: true, forced: FORCED, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {\n return nativeGetOwnPropertyDescriptor(toIndexedObject(it), key);\n }\n});\n","var $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar ownKeys = require('../internals/own-keys');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar createProperty = require('../internals/create-property');\n\n// `Object.getOwnPropertyDescriptors` method\n// https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n$({ target: 'Object', stat: true, sham: !DESCRIPTORS }, {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIndexedObject(object);\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n var keys = ownKeys(O);\n var result = {};\n var index = 0;\n var key, descriptor;\n while (keys.length > index) {\n descriptor = getOwnPropertyDescriptor(O, key = keys[index++]);\n if (descriptor !== undefined) createProperty(result, key, descriptor);\n }\n return result;\n }\n});\n","var $ = require('../internals/export');\nvar fails = require('../internals/fails');\nvar toObject = require('../internals/to-object');\nvar nativeGetPrototypeOf = require('../internals/object-get-prototype-of');\nvar CORRECT_PROTOTYPE_GETTER = require('../internals/correct-prototype-getter');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeGetPrototypeOf(1); });\n\n// `Object.getPrototypeOf` method\n// https://tc39.es/ecma262/#sec-object.getprototypeof\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES, sham: !CORRECT_PROTOTYPE_GETTER }, {\n getPrototypeOf: function getPrototypeOf(it) {\n return nativeGetPrototypeOf(toObject(it));\n }\n});\n\n","var $ = require('../internals/export');\nvar toObject = require('../internals/to-object');\nvar nativeKeys = require('../internals/object-keys');\nvar fails = require('../internals/fails');\n\nvar FAILS_ON_PRIMITIVES = fails(function () { nativeKeys(1); });\n\n// `Object.keys` method\n// https://tc39.es/ecma262/#sec-object.keys\n$({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {\n keys: function keys(it) {\n return nativeKeys(toObject(it));\n }\n});\n","var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support');\nvar redefine = require('../internals/redefine');\nvar toString = require('../internals/object-to-string');\n\n// `Object.prototype.toString` method\n// https://tc39.es/ecma262/#sec-object.prototype.tostring\nif (!TO_STRING_TAG_SUPPORT) {\n redefine(Object.prototype, 'toString', toString, { unsafe: true });\n}\n","var $ = require('../internals/export');\nvar $values = require('../internals/object-to-array').values;\n\n// `Object.values` method\n// https://tc39.es/ecma262/#sec-object.values\n$({ target: 'Object', stat: true }, {\n values: function values(O) {\n return $values(O);\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\nvar aCallable = require('../internals/a-callable');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\n// `Promise.allSettled` method\n// https://tc39.es/ecma262/#sec-promise.allsettled\n$({ target: 'Promise', stat: true }, {\n allSettled: function allSettled(iterable) {\n var C = this;\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'fulfilled', value: value };\n --remaining || resolve(values);\n }, function (error) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = { status: 'rejected', reason: error };\n --remaining || resolve(values);\n });\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar aCallable = require('../internals/a-callable');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar iterate = require('../internals/iterate');\n\nvar PROMISE_ANY_ERROR = 'No one promise resolved';\n\n// `Promise.any` method\n// https://tc39.es/ecma262/#sec-promise.any\n$({ target: 'Promise', stat: true }, {\n any: function any(iterable) {\n var C = this;\n var AggregateError = getBuiltIn('AggregateError');\n var capability = newPromiseCapabilityModule.f(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var promiseResolve = aCallable(C.resolve);\n var errors = [];\n var counter = 0;\n var remaining = 1;\n var alreadyResolved = false;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyRejected = false;\n remaining++;\n call(promiseResolve, C, promise).then(function (value) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyResolved = true;\n resolve(value);\n }, function (error) {\n if (alreadyRejected || alreadyResolved) return;\n alreadyRejected = true;\n errors[index] = error;\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n });\n --remaining || reject(new AggregateError(errors, PROMISE_ANY_ERROR));\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar fails = require('../internals/fails');\nvar getBuiltIn = require('../internals/get-built-in');\nvar isCallable = require('../internals/is-callable');\nvar speciesConstructor = require('../internals/species-constructor');\nvar promiseResolve = require('../internals/promise-resolve');\nvar redefine = require('../internals/redefine');\n\n// Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829\nvar NON_GENERIC = !!NativePromise && fails(function () {\n NativePromise.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });\n});\n\n// `Promise.prototype.finally` method\n// https://tc39.es/ecma262/#sec-promise.prototype.finally\n$({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {\n 'finally': function (onFinally) {\n var C = speciesConstructor(this, getBuiltIn('Promise'));\n var isFunction = isCallable(onFinally);\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n }\n});\n\n// makes sure that native promise-based APIs `Promise#finally` properly works with patched `Promise#then`\nif (!IS_PURE && isCallable(NativePromise)) {\n var method = getBuiltIn('Promise').prototype['finally'];\n if (NativePromise.prototype['finally'] !== method) {\n redefine(NativePromise.prototype, 'finally', method, { unsafe: true });\n }\n}\n","'use strict';\nvar $ = require('../internals/export');\nvar IS_PURE = require('../internals/is-pure');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar call = require('../internals/function-call');\nvar NativePromise = require('../internals/native-promise-constructor');\nvar redefine = require('../internals/redefine');\nvar redefineAll = require('../internals/redefine-all');\nvar setPrototypeOf = require('../internals/object-set-prototype-of');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar setSpecies = require('../internals/set-species');\nvar aCallable = require('../internals/a-callable');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar anInstance = require('../internals/an-instance');\nvar inspectSource = require('../internals/inspect-source');\nvar iterate = require('../internals/iterate');\nvar checkCorrectnessOfIteration = require('../internals/check-correctness-of-iteration');\nvar speciesConstructor = require('../internals/species-constructor');\nvar task = require('../internals/task').set;\nvar microtask = require('../internals/microtask');\nvar promiseResolve = require('../internals/promise-resolve');\nvar hostReportErrors = require('../internals/host-report-errors');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\nvar InternalStateModule = require('../internals/internal-state');\nvar isForced = require('../internals/is-forced');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar IS_BROWSER = require('../internals/engine-is-browser');\nvar IS_NODE = require('../internals/engine-is-node');\nvar V8_VERSION = require('../internals/engine-v8-version');\n\nvar SPECIES = wellKnownSymbol('species');\nvar PROMISE = 'Promise';\n\nvar getInternalState = InternalStateModule.get;\nvar setInternalState = InternalStateModule.set;\nvar getInternalPromiseState = InternalStateModule.getterFor(PROMISE);\nvar NativePromisePrototype = NativePromise && NativePromise.prototype;\nvar PromiseConstructor = NativePromise;\nvar PromisePrototype = NativePromisePrototype;\nvar TypeError = global.TypeError;\nvar document = global.document;\nvar process = global.process;\nvar newPromiseCapability = newPromiseCapabilityModule.f;\nvar newGenericPromiseCapability = newPromiseCapability;\n\nvar DISPATCH_EVENT = !!(document && document.createEvent && global.dispatchEvent);\nvar NATIVE_REJECTION_EVENT = isCallable(global.PromiseRejectionEvent);\nvar UNHANDLED_REJECTION = 'unhandledrejection';\nvar REJECTION_HANDLED = 'rejectionhandled';\nvar PENDING = 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\nvar HANDLED = 1;\nvar UNHANDLED = 2;\nvar SUBCLASSING = false;\n\nvar Internal, OwnPromiseCapability, PromiseWrapper, nativeThen;\n\nvar FORCED = isForced(PROMISE, function () {\n var PROMISE_CONSTRUCTOR_SOURCE = inspectSource(PromiseConstructor);\n var GLOBAL_CORE_JS_PROMISE = PROMISE_CONSTRUCTOR_SOURCE !== String(PromiseConstructor);\n // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // We can't detect it synchronously, so just check versions\n if (!GLOBAL_CORE_JS_PROMISE && V8_VERSION === 66) return true;\n // We need Promise#finally in the pure version for preventing prototype pollution\n if (IS_PURE && !PromisePrototype['finally']) return true;\n // We can't use @@species feature detection in V8 since it causes\n // deoptimization and performance degradation\n // https://github.com/zloirock/core-js/issues/679\n if (V8_VERSION >= 51 && /native code/.test(PROMISE_CONSTRUCTOR_SOURCE)) return false;\n // Detect correctness of subclassing with @@species support\n var promise = new PromiseConstructor(function (resolve) { resolve(1); });\n var FakePromise = function (exec) {\n exec(function () { /* empty */ }, function () { /* empty */ });\n };\n var constructor = promise.constructor = {};\n constructor[SPECIES] = FakePromise;\n SUBCLASSING = promise.then(function () { /* empty */ }) instanceof FakePromise;\n if (!SUBCLASSING) return true;\n // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return !GLOBAL_CORE_JS_PROMISE && IS_BROWSER && !NATIVE_REJECTION_EVENT;\n});\n\nvar INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) {\n PromiseConstructor.all(iterable)['catch'](function () { /* empty */ });\n});\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && isCallable(then = it.then) ? then : false;\n};\n\nvar notify = function (state, isReject) {\n if (state.notified) return;\n state.notified = true;\n var chain = state.reactions;\n microtask(function () {\n var value = state.value;\n var ok = state.state == FULFILLED;\n var index = 0;\n // variable length - can't use forEach\n while (chain.length > index) {\n var reaction = chain[index++];\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (state.rejection === UNHANDLED) onHandleUnhandled(state);\n state.rejection = HANDLED;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // can throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n call(then, result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (error) {\n if (domain && !exited) domain.exit();\n reject(error);\n }\n }\n state.reactions = [];\n state.notified = false;\n if (isReject && !state.rejection) onUnhandled(state);\n });\n};\n\nvar dispatchEvent = function (name, promise, reason) {\n var event, handler;\n if (DISPATCH_EVENT) {\n event = document.createEvent('Event');\n event.promise = promise;\n event.reason = reason;\n event.initEvent(name, false, true);\n global.dispatchEvent(event);\n } else event = { promise: promise, reason: reason };\n if (!NATIVE_REJECTION_EVENT && (handler = global['on' + name])) handler(event);\n else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason);\n};\n\nvar onUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n var value = state.value;\n var IS_UNHANDLED = isUnhandled(state);\n var result;\n if (IS_UNHANDLED) {\n result = perform(function () {\n if (IS_NODE) {\n process.emit('unhandledRejection', value, promise);\n } else dispatchEvent(UNHANDLED_REJECTION, promise, value);\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n state.rejection = IS_NODE || isUnhandled(state) ? UNHANDLED : HANDLED;\n if (result.error) throw result.value;\n }\n });\n};\n\nvar isUnhandled = function (state) {\n return state.rejection !== HANDLED && !state.parent;\n};\n\nvar onHandleUnhandled = function (state) {\n call(task, global, function () {\n var promise = state.facade;\n if (IS_NODE) {\n process.emit('rejectionHandled', promise);\n } else dispatchEvent(REJECTION_HANDLED, promise, state.value);\n });\n};\n\nvar bind = function (fn, state, unwrap) {\n return function (value) {\n fn(state, value, unwrap);\n };\n};\n\nvar internalReject = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n state.value = value;\n state.state = REJECTED;\n notify(state, true);\n};\n\nvar internalResolve = function (state, value, unwrap) {\n if (state.done) return;\n state.done = true;\n if (unwrap) state = unwrap;\n try {\n if (state.facade === value) throw TypeError(\"Promise can't be resolved itself\");\n var then = isThenable(value);\n if (then) {\n microtask(function () {\n var wrapper = { done: false };\n try {\n call(then, value,\n bind(internalResolve, wrapper, state),\n bind(internalReject, wrapper, state)\n );\n } catch (error) {\n internalReject(wrapper, error, state);\n }\n });\n } else {\n state.value = value;\n state.state = FULFILLED;\n notify(state, false);\n }\n } catch (error) {\n internalReject({ done: false }, error, state);\n }\n};\n\n// constructor polyfill\nif (FORCED) {\n // 25.4.3.1 Promise(executor)\n PromiseConstructor = function Promise(executor) {\n anInstance(this, PromisePrototype);\n aCallable(executor);\n call(Internal, this);\n var state = getInternalState(this);\n try {\n executor(bind(internalResolve, state), bind(internalReject, state));\n } catch (error) {\n internalReject(state, error);\n }\n };\n PromisePrototype = PromiseConstructor.prototype;\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n Internal = function Promise(executor) {\n setInternalState(this, {\n type: PROMISE,\n done: false,\n notified: false,\n parent: false,\n reactions: [],\n rejection: false,\n state: PENDING,\n value: undefined\n });\n };\n Internal.prototype = redefineAll(PromisePrototype, {\n // `Promise.prototype.then` method\n // https://tc39.es/ecma262/#sec-promise.prototype.then\n then: function then(onFulfilled, onRejected) {\n var state = getInternalPromiseState(this);\n var reactions = state.reactions;\n var reaction = newPromiseCapability(speciesConstructor(this, PromiseConstructor));\n reaction.ok = isCallable(onFulfilled) ? onFulfilled : true;\n reaction.fail = isCallable(onRejected) && onRejected;\n reaction.domain = IS_NODE ? process.domain : undefined;\n state.parent = true;\n reactions[reactions.length] = reaction;\n if (state.state != PENDING) notify(state, false);\n return reaction.promise;\n },\n // `Promise.prototype.catch` method\n // https://tc39.es/ecma262/#sec-promise.prototype.catch\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n var state = getInternalState(promise);\n this.promise = promise;\n this.resolve = bind(internalResolve, state);\n this.reject = bind(internalReject, state);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === PromiseConstructor || C === PromiseWrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n\n if (!IS_PURE && isCallable(NativePromise) && NativePromisePrototype !== Object.prototype) {\n nativeThen = NativePromisePrototype.then;\n\n if (!SUBCLASSING) {\n // make `Promise#then` return a polyfilled `Promise` for native promise-based APIs\n redefine(NativePromisePrototype, 'then', function then(onFulfilled, onRejected) {\n var that = this;\n return new PromiseConstructor(function (resolve, reject) {\n call(nativeThen, that, resolve, reject);\n }).then(onFulfilled, onRejected);\n // https://github.com/zloirock/core-js/issues/640\n }, { unsafe: true });\n\n // makes sure that native promise-based APIs `Promise#catch` properly works with patched `Promise#then`\n redefine(NativePromisePrototype, 'catch', PromisePrototype['catch'], { unsafe: true });\n }\n\n // make `.constructor === Promise` work for native promise-based APIs\n try {\n delete NativePromisePrototype.constructor;\n } catch (error) { /* empty */ }\n\n // make `instanceof Promise` work for native promise-based APIs\n if (setPrototypeOf) {\n setPrototypeOf(NativePromisePrototype, PromisePrototype);\n }\n }\n}\n\n$({ global: true, wrap: true, forced: FORCED }, {\n Promise: PromiseConstructor\n});\n\nsetToStringTag(PromiseConstructor, PROMISE, false, true);\nsetSpecies(PROMISE);\n\nPromiseWrapper = getBuiltIn(PROMISE);\n\n// statics\n$({ target: PROMISE, stat: true, forced: FORCED }, {\n // `Promise.reject` method\n // https://tc39.es/ecma262/#sec-promise.reject\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n call(capability.reject, undefined, r);\n return capability.promise;\n }\n});\n\n$({ target: PROMISE, stat: true, forced: IS_PURE || FORCED }, {\n // `Promise.resolve` method\n // https://tc39.es/ecma262/#sec-promise.resolve\n resolve: function resolve(x) {\n return promiseResolve(IS_PURE && this === PromiseWrapper ? PromiseConstructor : this, x);\n }\n});\n\n$({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {\n // `Promise.all` method\n // https://tc39.es/ecma262/#sec-promise.all\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n var values = [];\n var counter = 0;\n var remaining = 1;\n iterate(iterable, function (promise) {\n var index = counter++;\n var alreadyCalled = false;\n remaining++;\n call($promiseResolve, C, promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.error) reject(result.value);\n return capability.promise;\n },\n // `Promise.race` method\n // https://tc39.es/ecma262/#sec-promise.race\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n var $promiseResolve = aCallable(C.resolve);\n iterate(iterable, function (promise) {\n call($promiseResolve, C, promise).then(capability.resolve, reject);\n });\n });\n if (result.error) reject(result.value);\n return capability.promise;\n }\n});\n","var $ = require('../internals/export');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar bind = require('../internals/function-bind');\nvar aConstructor = require('../internals/a-constructor');\nvar anObject = require('../internals/an-object');\nvar isObject = require('../internals/is-object');\nvar create = require('../internals/object-create');\nvar fails = require('../internals/fails');\n\nvar nativeConstruct = getBuiltIn('Reflect', 'construct');\nvar ObjectPrototype = Object.prototype;\nvar push = [].push;\n\n// `Reflect.construct` method\n// https://tc39.es/ecma262/#sec-reflect.construct\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(nativeConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\n\nvar ARGS_BUG = !fails(function () {\n nativeConstruct(function () { /* empty */ });\n});\n\nvar FORCED = NEW_TARGET_BUG || ARGS_BUG;\n\n$({ target: 'Reflect', stat: true, forced: FORCED, sham: FORCED }, {\n construct: function construct(Target, args /* , newTarget */) {\n aConstructor(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aConstructor(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return nativeConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n apply(push, $args, args);\n return new (apply(bind, Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : ObjectPrototype);\n var result = apply(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar exec = require('../internals/regexp-exec');\n\n// `RegExp.prototype.exec` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.exec\n$({ target: 'RegExp', proto: true, forced: /./.exec !== exec }, {\n exec: exec\n});\n","var DESCRIPTORS = require('../internals/descriptors');\nvar objectDefinePropertyModule = require('../internals/object-define-property');\nvar regExpFlags = require('../internals/regexp-flags');\nvar fails = require('../internals/fails');\n\nvar RegExpPrototype = RegExp.prototype;\n\nvar FORCED = DESCRIPTORS && fails(function () {\n // eslint-disable-next-line es/no-object-getownpropertydescriptor -- safe\n return Object.getOwnPropertyDescriptor(RegExpPrototype, 'flags').get.call({ dotAll: true, sticky: true }) !== 'sy';\n});\n\n// `RegExp.prototype.flags` getter\n// https://tc39.es/ecma262/#sec-get-regexp.prototype.flags\nif (FORCED) objectDefinePropertyModule.f(RegExpPrototype, 'flags', {\n configurable: true,\n get: regExpFlags\n});\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar redefine = require('../internals/redefine');\nvar anObject = require('../internals/an-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar $toString = require('../internals/to-string');\nvar fails = require('../internals/fails');\nvar regExpFlags = require('../internals/regexp-flags');\n\nvar TO_STRING = 'toString';\nvar RegExpPrototype = RegExp.prototype;\nvar n$ToString = RegExpPrototype[TO_STRING];\nvar getFlags = uncurryThis(regExpFlags);\n\nvar NOT_GENERIC = fails(function () { return n$ToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });\n// FF44- RegExp#toString has a wrong name\nvar INCORRECT_NAME = PROPER_FUNCTION_NAME && n$ToString.name != TO_STRING;\n\n// `RegExp.prototype.toString` method\n// https://tc39.es/ecma262/#sec-regexp.prototype.tostring\nif (NOT_GENERIC || INCORRECT_NAME) {\n redefine(RegExp.prototype, TO_STRING, function toString() {\n var R = anObject(this);\n var p = $toString(R.source);\n var rf = R.flags;\n var f = $toString(rf === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype) ? getFlags(R) : rf);\n return '/' + p + '/' + f;\n }, { unsafe: true });\n}\n","'use strict';\nvar collection = require('../internals/collection');\nvar collectionStrong = require('../internals/collection-strong');\n\n// `Set` constructor\n// https://tc39.es/ecma262/#sec-set-objects\ncollection('Set', function (init) {\n return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };\n}, collectionStrong);\n","'use strict';\nvar $ = require('../internals/export');\nvar codeAt = require('../internals/string-multibyte').codeAt;\n\n// `String.prototype.codePointAt` method\n// https://tc39.es/ecma262/#sec-string.prototype.codepointat\n$({ target: 'String', proto: true }, {\n codePointAt: function codePointAt(pos) {\n return codeAt(this, pos);\n }\n});\n","var $ = require('../internals/export');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\n\nvar RangeError = global.RangeError;\nvar fromCharCode = String.fromCharCode;\n// eslint-disable-next-line es/no-string-fromcodepoint -- required for testing\nvar $fromCodePoint = String.fromCodePoint;\nvar join = uncurryThis([].join);\n\n// length should be 1, old FF problem\nvar INCORRECT_LENGTH = !!$fromCodePoint && $fromCodePoint.length != 1;\n\n// `String.fromCodePoint` method\n// https://tc39.es/ecma262/#sec-string.fromcodepoint\n$({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n fromCodePoint: function fromCodePoint(x) {\n var elements = [];\n var length = arguments.length;\n var i = 0;\n var code;\n while (length > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10FFFF) !== code) throw RangeError(code + ' is not a valid code point');\n elements[i] = code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xD800, code % 0x400 + 0xDC00);\n } return join(elements, '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toString = require('../internals/to-string');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\n\nvar stringIndexOf = uncurryThis(''.indexOf);\n\n// `String.prototype.includes` method\n// https://tc39.es/ecma262/#sec-string.prototype.includes\n$({ target: 'String', proto: true, forced: !correctIsRegExpLogic('includes') }, {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~stringIndexOf(\n toString(requireObjectCoercible(this)),\n toString(notARegExp(searchString)),\n arguments.length > 1 ? arguments[1] : undefined\n );\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.italics` method\n// https://tc39.es/ecma262/#sec-string.prototype.italics\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('italics') }, {\n italics: function italics() {\n return createHTML(this, 'i', '', '');\n }\n});\n","'use strict';\nvar charAt = require('../internals/string-multibyte').charAt;\nvar toString = require('../internals/to-string');\nvar InternalStateModule = require('../internals/internal-state');\nvar defineIterator = require('../internals/define-iterator');\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: toString(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = charAt(string, index);\n state.index += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n link: function link(url) {\n return createHTML(this, 'a', 'href', url);\n }\n});\n","'use strict';\n/* eslint-disable es/no-string-prototype-matchall -- safe */\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar createIteratorConstructor = require('../internals/create-iterator-constructor');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar anObject = require('../internals/an-object');\nvar classof = require('../internals/classof-raw');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isRegExp = require('../internals/is-regexp');\nvar regExpFlags = require('../internals/regexp-flags');\nvar getMethod = require('../internals/get-method');\nvar redefine = require('../internals/redefine');\nvar fails = require('../internals/fails');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar InternalStateModule = require('../internals/internal-state');\nvar IS_PURE = require('../internals/is-pure');\n\nvar MATCH_ALL = wellKnownSymbol('matchAll');\nvar REGEXP_STRING = 'RegExp String';\nvar REGEXP_STRING_ITERATOR = REGEXP_STRING + ' Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(REGEXP_STRING_ITERATOR);\nvar RegExpPrototype = RegExp.prototype;\nvar TypeError = global.TypeError;\nvar getFlags = uncurryThis(regExpFlags);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar un$MatchAll = uncurryThis(''.matchAll);\n\nvar WORKS_WITH_NON_GLOBAL_REGEX = !!un$MatchAll && !fails(function () {\n un$MatchAll('a', /./);\n});\n\nvar $RegExpStringIterator = createIteratorConstructor(function RegExpStringIterator(regexp, string, $global, fullUnicode) {\n setInternalState(this, {\n type: REGEXP_STRING_ITERATOR,\n regexp: regexp,\n string: string,\n global: $global,\n unicode: fullUnicode,\n done: false\n });\n}, REGEXP_STRING, function next() {\n var state = getInternalState(this);\n if (state.done) return { value: undefined, done: true };\n var R = state.regexp;\n var S = state.string;\n var match = regExpExec(R, S);\n if (match === null) return { value: undefined, done: state.done = true };\n if (state.global) {\n if (toString(match[0]) === '') R.lastIndex = advanceStringIndex(S, toLength(R.lastIndex), state.unicode);\n return { value: match, done: false };\n }\n state.done = true;\n return { value: match, done: false };\n});\n\nvar $matchAll = function (string) {\n var R = anObject(this);\n var S = toString(string);\n var C, flagsValue, flags, matcher, $global, fullUnicode;\n C = speciesConstructor(R, RegExp);\n flagsValue = R.flags;\n if (flagsValue === undefined && isPrototypeOf(RegExpPrototype, R) && !('flags' in RegExpPrototype)) {\n flagsValue = getFlags(R);\n }\n flags = flagsValue === undefined ? '' : toString(flagsValue);\n matcher = new C(C === RegExp ? R.source : R, flags);\n $global = !!~stringIndexOf(flags, 'g');\n fullUnicode = !!~stringIndexOf(flags, 'u');\n matcher.lastIndex = toLength(R.lastIndex);\n return new $RegExpStringIterator(matcher, S, $global, fullUnicode);\n};\n\n// `String.prototype.matchAll` method\n// https://tc39.es/ecma262/#sec-string.prototype.matchall\n$({ target: 'String', proto: true, forced: WORKS_WITH_NON_GLOBAL_REGEX }, {\n matchAll: function matchAll(regexp) {\n var O = requireObjectCoercible(this);\n var flags, S, matcher, rx;\n if (regexp != null) {\n if (isRegExp(regexp)) {\n flags = toString(requireObjectCoercible('flags' in RegExpPrototype\n ? regexp.flags\n : getFlags(regexp)\n ));\n if (!~stringIndexOf(flags, 'g')) throw TypeError('`.matchAll` does not allow non-global regexes');\n }\n if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n matcher = getMethod(regexp, MATCH_ALL);\n if (matcher === undefined && IS_PURE && classof(regexp) == 'RegExp') matcher = $matchAll;\n if (matcher) return call(matcher, regexp, O);\n } else if (WORKS_WITH_NON_GLOBAL_REGEX) return un$MatchAll(O, regexp);\n S = toString(O);\n rx = new RegExp(regexp, 'g');\n return IS_PURE ? call($matchAll, rx, S) : rx[MATCH_ALL](S);\n }\n});\n\nIS_PURE || MATCH_ALL in RegExpPrototype || redefine(RegExpPrototype, MATCH_ALL, $matchAll);\n","'use strict';\nvar call = require('../internals/function-call');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar anObject = require('../internals/an-object');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar getMethod = require('../internals/get-method');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar regExpExec = require('../internals/regexp-exec-abstract');\n\n// @@match logic\nfixRegExpWellKnownSymbolLogic('match', function (MATCH, nativeMatch, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.es/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = requireObjectCoercible(this);\n var matcher = regexp == undefined ? undefined : getMethod(regexp, MATCH);\n return matcher ? call(matcher, regexp, O) : new RegExp(regexp)[MATCH](toString(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@match\n function (string) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(nativeMatch, rx, S);\n\n if (res.done) return res.value;\n\n if (!rx.global) return regExpExec(rx, S);\n\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = toString(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","var $ = require('../internals/export');\nvar repeat = require('../internals/string-repeat');\n\n// `String.prototype.repeat` method\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\n$({ target: 'String', proto: true }, {\n repeat: repeat\n});\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar fails = require('../internals/fails');\nvar anObject = require('../internals/an-object');\nvar isCallable = require('../internals/is-callable');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar getMethod = require('../internals/get-method');\nvar getSubstitution = require('../internals/get-substitution');\nvar regExpExec = require('../internals/regexp-exec-abstract');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar REPLACE = wellKnownSymbol('replace');\nvar max = Math.max;\nvar min = Math.min;\nvar concat = uncurryThis([].concat);\nvar push = uncurryThis([].push);\nvar stringIndexOf = uncurryThis(''.indexOf);\nvar stringSlice = uncurryThis(''.slice);\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// IE <= 11 replaces $0 with the whole match, as if it was $&\n// https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0\nvar REPLACE_KEEPS_$0 = (function () {\n // eslint-disable-next-line regexp/prefer-escape-replacement-dollar-char -- required for testing\n return 'a'.replace(/./, '$0') === '$0';\n})();\n\n// Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string\nvar REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {\n if (/./[REPLACE]) {\n return /./[REPLACE]('a', '$0') === '';\n }\n return false;\n})();\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n // eslint-disable-next-line regexp/no-useless-dollar-replacements -- false positive\n return ''.replace(re, '$') !== '7';\n});\n\n// @@replace logic\nfixRegExpWellKnownSymbolLogic('replace', function (_, nativeReplace, maybeCallNative) {\n var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';\n\n return [\n // `String.prototype.replace` method\n // https://tc39.es/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = requireObjectCoercible(this);\n var replacer = searchValue == undefined ? undefined : getMethod(searchValue, REPLACE);\n return replacer\n ? call(replacer, searchValue, O, replaceValue)\n : call(nativeReplace, toString(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace\n function (string, replaceValue) {\n var rx = anObject(this);\n var S = toString(string);\n\n if (\n typeof replaceValue == 'string' &&\n stringIndexOf(replaceValue, UNSAFE_SUBSTITUTE) === -1 &&\n stringIndexOf(replaceValue, '$<') === -1\n ) {\n var res = maybeCallNative(nativeReplace, rx, S, replaceValue);\n if (res.done) return res.value;\n }\n\n var functionalReplace = isCallable(replaceValue);\n if (!functionalReplace) replaceValue = toString(replaceValue);\n\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n\n push(results, result);\n if (!global) break;\n\n var matchStr = toString(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n\n var matched = toString(result[0]);\n var position = max(min(toIntegerOrInfinity(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) push(captures, maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = concat([matched], captures, position, S);\n if (namedCaptures !== undefined) push(replacerArgs, namedCaptures);\n var replacement = toString(apply(replaceValue, undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += stringSlice(S, nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + stringSlice(S, nextSourcePosition);\n }\n ];\n}, !REPLACE_SUPPORTS_NAMED_GROUPS || !REPLACE_KEEPS_$0 || REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE);\n","'use strict';\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fixRegExpWellKnownSymbolLogic = require('../internals/fix-regexp-well-known-symbol-logic');\nvar isRegExp = require('../internals/is-regexp');\nvar anObject = require('../internals/an-object');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar speciesConstructor = require('../internals/species-constructor');\nvar advanceStringIndex = require('../internals/advance-string-index');\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar getMethod = require('../internals/get-method');\nvar arraySlice = require('../internals/array-slice');\nvar callRegExpExec = require('../internals/regexp-exec-abstract');\nvar regexpExec = require('../internals/regexp-exec');\nvar stickyHelpers = require('../internals/regexp-sticky-helpers');\nvar fails = require('../internals/fails');\n\nvar UNSUPPORTED_Y = stickyHelpers.UNSUPPORTED_Y;\nvar MAX_UINT32 = 0xFFFFFFFF;\nvar min = Math.min;\nvar $push = [].push;\nvar exec = uncurryThis(/./.exec);\nvar push = uncurryThis($push);\nvar stringSlice = uncurryThis(''.slice);\n\n// Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n// Weex JS has frozen built-in prototypes, so use try / catch wrapper\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';\n});\n\n// @@split logic\nfixRegExpWellKnownSymbolLogic('split', function (SPLIT, nativeSplit, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'.split(/(b)*/)[1] == 'c' ||\n // eslint-disable-next-line regexp/no-empty-group -- required for testing\n 'test'.split(/(?:)/, -1).length != 4 ||\n 'ab'.split(/(?:ab)*/).length != 2 ||\n '.'.split(/(.?)(.?)/).length != 4 ||\n // eslint-disable-next-line regexp/no-empty-capturing-group, regexp/no-empty-group -- required for testing\n '.'.split(/()()/).length > 1 ||\n ''.split(/.?/).length\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = toString(requireObjectCoercible(this));\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (separator === undefined) return [string];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) {\n return call(nativeSplit, string, separator, lim);\n }\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = call(regexpExec, separatorCopy, string)) {\n lastIndex = separatorCopy.lastIndex;\n if (lastIndex > lastLastIndex) {\n push(output, stringSlice(string, lastLastIndex, match.index));\n if (match.length > 1 && match.index < string.length) apply($push, output, arraySlice(match, 1));\n lastLength = match[0].length;\n lastLastIndex = lastIndex;\n if (output.length >= lim) break;\n }\n if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop\n }\n if (lastLastIndex === string.length) {\n if (lastLength || !exec(separatorCopy, '')) push(output, '');\n } else push(output, stringSlice(string, lastLastIndex));\n return output.length > lim ? arraySlice(output, 0, lim) : output;\n };\n // Chakra, V8\n } else if ('0'.split(undefined, 0).length) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : call(nativeSplit, this, separator, limit);\n };\n } else internalSplit = nativeSplit;\n\n return [\n // `String.prototype.split` method\n // https://tc39.es/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = requireObjectCoercible(this);\n var splitter = separator == undefined ? undefined : getMethod(separator, SPLIT);\n return splitter\n ? call(splitter, separator, O, limit)\n : call(internalSplit, toString(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.es/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (string, limit) {\n var rx = anObject(this);\n var S = toString(string);\n var res = maybeCallNative(internalSplit, rx, S, limit, internalSplit !== nativeSplit);\n\n if (res.done) return res.value;\n\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (UNSUPPORTED_Y ? 'g' : 'y');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(UNSUPPORTED_Y ? '^(?:' + rx.source + ')' : rx, flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = UNSUPPORTED_Y ? 0 : q;\n var z = callRegExpExec(splitter, UNSUPPORTED_Y ? stringSlice(S, q) : S);\n var e;\n if (\n z === null ||\n (e = min(toLength(splitter.lastIndex + (UNSUPPORTED_Y ? q : 0)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n push(A, stringSlice(S, p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n push(A, z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n push(A, stringSlice(S, p));\n return A;\n }\n ];\n}, !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC, UNSUPPORTED_Y);\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.strike` method\n// https://tc39.es/ecma262/#sec-string.prototype.strike\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('strike') }, {\n strike: function strike() {\n return createHTML(this, 'strike', '', '');\n }\n});\n","'use strict';\nvar $ = require('../internals/export');\nvar $trim = require('../internals/string-trim').trim;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\n// `String.prototype.trim` method\n// https://tc39.es/ecma262/#sec-string.prototype.trim\n$({ target: 'String', proto: true, forced: forcedStringTrimMethod('trim') }, {\n trim: function trim() {\n return $trim(this);\n }\n});\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.asyncIterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.asynciterator\ndefineWellKnownSymbol('asyncIterator');\n","// `Symbol.prototype.description` getter\n// https://tc39.es/ecma262/#sec-symbol.prototype.description\n'use strict';\nvar $ = require('../internals/export');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar hasOwn = require('../internals/has-own-property');\nvar isCallable = require('../internals/is-callable');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar toString = require('../internals/to-string');\nvar defineProperty = require('../internals/object-define-property').f;\nvar copyConstructorProperties = require('../internals/copy-constructor-properties');\n\nvar NativeSymbol = global.Symbol;\nvar SymbolPrototype = NativeSymbol && NativeSymbol.prototype;\n\nif (DESCRIPTORS && isCallable(NativeSymbol) && (!('description' in SymbolPrototype) ||\n // Safari 12 bug\n NativeSymbol().description !== undefined\n)) {\n var EmptyStringDescriptionStore = {};\n // wrap Symbol constructor for correct work with undefined description\n var SymbolWrapper = function Symbol() {\n var description = arguments.length < 1 || arguments[0] === undefined ? undefined : toString(arguments[0]);\n var result = isPrototypeOf(SymbolPrototype, this)\n ? new NativeSymbol(description)\n // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)'\n : description === undefined ? NativeSymbol() : NativeSymbol(description);\n if (description === '') EmptyStringDescriptionStore[result] = true;\n return result;\n };\n\n copyConstructorProperties(SymbolWrapper, NativeSymbol);\n SymbolWrapper.prototype = SymbolPrototype;\n SymbolPrototype.constructor = SymbolWrapper;\n\n var NATIVE_SYMBOL = String(NativeSymbol('test')) == 'Symbol(test)';\n var symbolToString = uncurryThis(SymbolPrototype.toString);\n var symbolValueOf = uncurryThis(SymbolPrototype.valueOf);\n var regexp = /^Symbol\\((.*)\\)[^)]+$/;\n var replace = uncurryThis(''.replace);\n var stringSlice = uncurryThis(''.slice);\n\n defineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n var symbol = symbolValueOf(this);\n var string = symbolToString(symbol);\n if (hasOwn(EmptyStringDescriptionStore, symbol)) return '';\n var desc = NATIVE_SYMBOL ? stringSlice(string, 7, -1) : replace(string, regexp, '$1');\n return desc === '' ? undefined : desc;\n }\n });\n\n $({ global: true, forced: true }, {\n Symbol: SymbolWrapper\n });\n}\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.iterator` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.iterator\ndefineWellKnownSymbol('iterator');\n","'use strict';\nvar $ = require('../internals/export');\nvar global = require('../internals/global');\nvar getBuiltIn = require('../internals/get-built-in');\nvar apply = require('../internals/function-apply');\nvar call = require('../internals/function-call');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar IS_PURE = require('../internals/is-pure');\nvar DESCRIPTORS = require('../internals/descriptors');\nvar NATIVE_SYMBOL = require('../internals/native-symbol');\nvar fails = require('../internals/fails');\nvar hasOwn = require('../internals/has-own-property');\nvar isArray = require('../internals/is-array');\nvar isCallable = require('../internals/is-callable');\nvar isObject = require('../internals/is-object');\nvar isPrototypeOf = require('../internals/object-is-prototype-of');\nvar isSymbol = require('../internals/is-symbol');\nvar anObject = require('../internals/an-object');\nvar toObject = require('../internals/to-object');\nvar toIndexedObject = require('../internals/to-indexed-object');\nvar toPropertyKey = require('../internals/to-property-key');\nvar $toString = require('../internals/to-string');\nvar createPropertyDescriptor = require('../internals/create-property-descriptor');\nvar nativeObjectCreate = require('../internals/object-create');\nvar objectKeys = require('../internals/object-keys');\nvar getOwnPropertyNamesModule = require('../internals/object-get-own-property-names');\nvar getOwnPropertyNamesExternal = require('../internals/object-get-own-property-names-external');\nvar getOwnPropertySymbolsModule = require('../internals/object-get-own-property-symbols');\nvar getOwnPropertyDescriptorModule = require('../internals/object-get-own-property-descriptor');\nvar definePropertyModule = require('../internals/object-define-property');\nvar propertyIsEnumerableModule = require('../internals/object-property-is-enumerable');\nvar arraySlice = require('../internals/array-slice');\nvar redefine = require('../internals/redefine');\nvar shared = require('../internals/shared');\nvar sharedKey = require('../internals/shared-key');\nvar hiddenKeys = require('../internals/hidden-keys');\nvar uid = require('../internals/uid');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\nvar wrappedWellKnownSymbolModule = require('../internals/well-known-symbol-wrapped');\nvar defineWellKnownSymbol = require('../internals/define-well-known-symbol');\nvar setToStringTag = require('../internals/set-to-string-tag');\nvar InternalStateModule = require('../internals/internal-state');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar HIDDEN = sharedKey('hidden');\nvar SYMBOL = 'Symbol';\nvar PROTOTYPE = 'prototype';\nvar TO_PRIMITIVE = wellKnownSymbol('toPrimitive');\n\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(SYMBOL);\n\nvar ObjectPrototype = Object[PROTOTYPE];\nvar $Symbol = global.Symbol;\nvar SymbolPrototype = $Symbol && $Symbol[PROTOTYPE];\nvar TypeError = global.TypeError;\nvar QObject = global.QObject;\nvar $stringify = getBuiltIn('JSON', 'stringify');\nvar nativeGetOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\nvar nativeDefineProperty = definePropertyModule.f;\nvar nativeGetOwnPropertyNames = getOwnPropertyNamesExternal.f;\nvar nativePropertyIsEnumerable = propertyIsEnumerableModule.f;\nvar push = uncurryThis([].push);\n\nvar AllSymbols = shared('symbols');\nvar ObjectPrototypeSymbols = shared('op-symbols');\nvar StringToSymbolRegistry = shared('string-to-symbol-registry');\nvar SymbolToStringRegistry = shared('symbol-to-string-registry');\nvar WellKnownSymbolsStore = shared('wks');\n\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar USE_SETTER = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDescriptor = DESCRIPTORS && fails(function () {\n return nativeObjectCreate(nativeDefineProperty({}, 'a', {\n get: function () { return nativeDefineProperty(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (O, P, Attributes) {\n var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor(ObjectPrototype, P);\n if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];\n nativeDefineProperty(O, P, Attributes);\n if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {\n nativeDefineProperty(ObjectPrototype, P, ObjectPrototypeDescriptor);\n }\n} : nativeDefineProperty;\n\nvar wrap = function (tag, description) {\n var symbol = AllSymbols[tag] = nativeObjectCreate(SymbolPrototype);\n setInternalState(symbol, {\n type: SYMBOL,\n tag: tag,\n description: description\n });\n if (!DESCRIPTORS) symbol.description = description;\n return symbol;\n};\n\nvar $defineProperty = function defineProperty(O, P, Attributes) {\n if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);\n anObject(O);\n var key = toPropertyKey(P);\n anObject(Attributes);\n if (hasOwn(AllSymbols, key)) {\n if (!Attributes.enumerable) {\n if (!hasOwn(O, HIDDEN)) nativeDefineProperty(O, HIDDEN, createPropertyDescriptor(1, {}));\n O[HIDDEN][key] = true;\n } else {\n if (hasOwn(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false;\n Attributes = nativeObjectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) });\n } return setSymbolDescriptor(O, key, Attributes);\n } return nativeDefineProperty(O, key, Attributes);\n};\n\nvar $defineProperties = function defineProperties(O, Properties) {\n anObject(O);\n var properties = toIndexedObject(Properties);\n var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties));\n $forEach(keys, function (key) {\n if (!DESCRIPTORS || call($propertyIsEnumerable, properties, key)) $defineProperty(O, key, properties[key]);\n });\n return O;\n};\n\nvar $create = function create(O, Properties) {\n return Properties === undefined ? nativeObjectCreate(O) : $defineProperties(nativeObjectCreate(O), Properties);\n};\n\nvar $propertyIsEnumerable = function propertyIsEnumerable(V) {\n var P = toPropertyKey(V);\n var enumerable = call(nativePropertyIsEnumerable, this, P);\n if (this === ObjectPrototype && hasOwn(AllSymbols, P) && !hasOwn(ObjectPrototypeSymbols, P)) return false;\n return enumerable || !hasOwn(this, P) || !hasOwn(AllSymbols, P) || hasOwn(this, HIDDEN) && this[HIDDEN][P]\n ? enumerable : true;\n};\n\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {\n var it = toIndexedObject(O);\n var key = toPropertyKey(P);\n if (it === ObjectPrototype && hasOwn(AllSymbols, key) && !hasOwn(ObjectPrototypeSymbols, key)) return;\n var descriptor = nativeGetOwnPropertyDescriptor(it, key);\n if (descriptor && hasOwn(AllSymbols, key) && !(hasOwn(it, HIDDEN) && it[HIDDEN][key])) {\n descriptor.enumerable = true;\n }\n return descriptor;\n};\n\nvar $getOwnPropertyNames = function getOwnPropertyNames(O) {\n var names = nativeGetOwnPropertyNames(toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (!hasOwn(AllSymbols, key) && !hasOwn(hiddenKeys, key)) push(result, key);\n });\n return result;\n};\n\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(O) {\n var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;\n var names = nativeGetOwnPropertyNames(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));\n var result = [];\n $forEach(names, function (key) {\n if (hasOwn(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || hasOwn(ObjectPrototype, key))) {\n push(result, AllSymbols[key]);\n }\n });\n return result;\n};\n\n// `Symbol` constructor\n// https://tc39.es/ecma262/#sec-symbol-constructor\nif (!NATIVE_SYMBOL) {\n $Symbol = function Symbol() {\n if (isPrototypeOf(SymbolPrototype, this)) throw TypeError('Symbol is not a constructor');\n var description = !arguments.length || arguments[0] === undefined ? undefined : $toString(arguments[0]);\n var tag = uid(description);\n var setter = function (value) {\n if (this === ObjectPrototype) call(setter, ObjectPrototypeSymbols, value);\n if (hasOwn(this, HIDDEN) && hasOwn(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));\n };\n if (DESCRIPTORS && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });\n return wrap(tag, description);\n };\n\n SymbolPrototype = $Symbol[PROTOTYPE];\n\n redefine(SymbolPrototype, 'toString', function toString() {\n return getInternalState(this).tag;\n });\n\n redefine($Symbol, 'withoutSetter', function (description) {\n return wrap(uid(description), description);\n });\n\n propertyIsEnumerableModule.f = $propertyIsEnumerable;\n definePropertyModule.f = $defineProperty;\n getOwnPropertyDescriptorModule.f = $getOwnPropertyDescriptor;\n getOwnPropertyNamesModule.f = getOwnPropertyNamesExternal.f = $getOwnPropertyNames;\n getOwnPropertySymbolsModule.f = $getOwnPropertySymbols;\n\n wrappedWellKnownSymbolModule.f = function (name) {\n return wrap(wellKnownSymbol(name), name);\n };\n\n if (DESCRIPTORS) {\n // https://github.com/tc39/proposal-Symbol-description\n nativeDefineProperty(SymbolPrototype, 'description', {\n configurable: true,\n get: function description() {\n return getInternalState(this).description;\n }\n });\n if (!IS_PURE) {\n redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });\n }\n }\n}\n\n$({ global: true, wrap: true, forced: !NATIVE_SYMBOL, sham: !NATIVE_SYMBOL }, {\n Symbol: $Symbol\n});\n\n$forEach(objectKeys(WellKnownSymbolsStore), function (name) {\n defineWellKnownSymbol(name);\n});\n\n$({ target: SYMBOL, stat: true, forced: !NATIVE_SYMBOL }, {\n // `Symbol.for` method\n // https://tc39.es/ecma262/#sec-symbol.for\n 'for': function (key) {\n var string = $toString(key);\n if (hasOwn(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];\n var symbol = $Symbol(string);\n StringToSymbolRegistry[string] = symbol;\n SymbolToStringRegistry[symbol] = string;\n return symbol;\n },\n // `Symbol.keyFor` method\n // https://tc39.es/ecma262/#sec-symbol.keyfor\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');\n if (hasOwn(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];\n },\n useSetter: function () { USE_SETTER = true; },\n useSimple: function () { USE_SETTER = false; }\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL, sham: !DESCRIPTORS }, {\n // `Object.create` method\n // https://tc39.es/ecma262/#sec-object.create\n create: $create,\n // `Object.defineProperty` method\n // https://tc39.es/ecma262/#sec-object.defineproperty\n defineProperty: $defineProperty,\n // `Object.defineProperties` method\n // https://tc39.es/ecma262/#sec-object.defineproperties\n defineProperties: $defineProperties,\n // `Object.getOwnPropertyDescriptor` method\n // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor\n});\n\n$({ target: 'Object', stat: true, forced: !NATIVE_SYMBOL }, {\n // `Object.getOwnPropertyNames` method\n // https://tc39.es/ecma262/#sec-object.getownpropertynames\n getOwnPropertyNames: $getOwnPropertyNames,\n // `Object.getOwnPropertySymbols` method\n // https://tc39.es/ecma262/#sec-object.getownpropertysymbols\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\n$({ target: 'Object', stat: true, forced: fails(function () { getOwnPropertySymbolsModule.f(1); }) }, {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return getOwnPropertySymbolsModule.f(toObject(it));\n }\n});\n\n// `JSON.stringify` method behavior with symbols\n// https://tc39.es/ecma262/#sec-json.stringify\nif ($stringify) {\n var FORCED_JSON_STRINGIFY = !NATIVE_SYMBOL || fails(function () {\n var symbol = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n return $stringify([symbol]) != '[null]'\n // WebKit converts symbol values to JSON as null\n || $stringify({ a: symbol }) != '{}'\n // V8 throws on boxed symbols\n || $stringify(Object(symbol)) != '{}';\n });\n\n $({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {\n // eslint-disable-next-line no-unused-vars -- required for `.length`\n stringify: function stringify(it, replacer, space) {\n var args = arraySlice(arguments);\n var $replacer = replacer;\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (isCallable($replacer)) value = call($replacer, this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return apply($stringify, null, args);\n }\n });\n}\n\n// `Symbol.prototype[@@toPrimitive]` method\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive\nif (!SymbolPrototype[TO_PRIMITIVE]) {\n var valueOf = SymbolPrototype.valueOf;\n // eslint-disable-next-line no-unused-vars -- required for .length\n redefine(SymbolPrototype, TO_PRIMITIVE, function (hint) {\n // TODO: improve hint logic\n return call(valueOf, this);\n });\n}\n// `Symbol.prototype[@@toStringTag]` property\n// https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag\nsetToStringTag($Symbol, SYMBOL);\n\nhiddenKeys[HIDDEN] = true;\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toPrimitive` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.toprimitive\ndefineWellKnownSymbol('toPrimitive');\n","var defineWellKnownSymbol = require('../internals/define-well-known-symbol');\n\n// `Symbol.toStringTag` well-known symbol\n// https://tc39.es/ecma262/#sec-symbol.tostringtag\ndefineWellKnownSymbol('toStringTag');\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $ArrayCopyWithin = require('../internals/array-copy-within');\n\nvar u$ArrayCopyWithin = uncurryThis($ArrayCopyWithin);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.copyWithin` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin\nexportTypedArrayMethod('copyWithin', function copyWithin(target, start /* , end */) {\n return u$ArrayCopyWithin(aTypedArray(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $every = require('../internals/array-iteration').every;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.every` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.every\nexportTypedArrayMethod('every', function every(callbackfn /* , thisArg */) {\n return $every(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar call = require('../internals/function-call');\nvar $fill = require('../internals/array-fill');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.fill` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill\nexportTypedArrayMethod('fill', function fill(value /* , start, end */) {\n var length = arguments.length;\n return call(\n $fill,\n aTypedArray(this),\n value,\n length > 1 ? arguments[1] : undefined,\n length > 2 ? arguments[2] : undefined\n );\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $filter = require('../internals/array-iteration').filter;\nvar fromSpeciesAndList = require('../internals/typed-array-from-species-and-list');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.filter` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter\nexportTypedArrayMethod('filter', function filter(callbackfn /* , thisArg */) {\n var list = $filter(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n return fromSpeciesAndList(this, list);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $findIndex = require('../internals/array-iteration').findIndex;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.findIndex` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex\nexportTypedArrayMethod('findIndex', function findIndex(predicate /* , thisArg */) {\n return $findIndex(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $find = require('../internals/array-iteration').find;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.find` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.find\nexportTypedArrayMethod('find', function find(predicate /* , thisArg */) {\n return $find(aTypedArray(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Float32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float32', function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Float64Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Float64', function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $forEach = require('../internals/array-iteration').forEach;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.forEach` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach\nexportTypedArrayMethod('forEach', function forEach(callbackfn /* , thisArg */) {\n $forEach(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS = require('../internals/typed-array-constructors-require-wrappers');\nvar exportTypedArrayStaticMethod = require('../internals/array-buffer-view-core').exportTypedArrayStaticMethod;\nvar typedArrayFrom = require('../internals/typed-array-from');\n\n// `%TypedArray%.from` method\n// https://tc39.es/ecma262/#sec-%typedarray%.from\nexportTypedArrayStaticMethod('from', typedArrayFrom, TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $includes = require('../internals/array-includes').includes;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.includes` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes\nexportTypedArrayMethod('includes', function includes(searchElement /* , fromIndex */) {\n return $includes(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $indexOf = require('../internals/array-includes').indexOf;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.indexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof\nexportTypedArrayMethod('indexOf', function indexOf(searchElement /* , fromIndex */) {\n return $indexOf(aTypedArray(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int16', function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int32', function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Int8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Int8', function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar PROPER_FUNCTION_NAME = require('../internals/function-name').PROPER;\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar ArrayIterators = require('../modules/es.array.iterator');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar Uint8Array = global.Uint8Array;\nvar arrayValues = uncurryThis(ArrayIterators.values);\nvar arrayKeys = uncurryThis(ArrayIterators.keys);\nvar arrayEntries = uncurryThis(ArrayIterators.entries);\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar nativeTypedArrayIterator = Uint8Array && Uint8Array.prototype[ITERATOR];\n\nvar PROPER_ARRAY_VALUES_NAME = !!nativeTypedArrayIterator && nativeTypedArrayIterator.name === 'values';\n\nvar typedArrayValues = function values() {\n return arrayValues(aTypedArray(this));\n};\n\n// `%TypedArray%.prototype.entries` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries\nexportTypedArrayMethod('entries', function entries() {\n return arrayEntries(aTypedArray(this));\n});\n// `%TypedArray%.prototype.keys` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys\nexportTypedArrayMethod('keys', function keys() {\n return arrayKeys(aTypedArray(this));\n});\n// `%TypedArray%.prototype.values` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.values\nexportTypedArrayMethod('values', typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n// `%TypedArray%.prototype[@@iterator]` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator\nexportTypedArrayMethod(ITERATOR, typedArrayValues, PROPER_FUNCTION_NAME && !PROPER_ARRAY_VALUES_NAME);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $join = uncurryThis([].join);\n\n// `%TypedArray%.prototype.join` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.join\nexportTypedArrayMethod('join', function join(separator) {\n return $join(aTypedArray(this), separator);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar apply = require('../internals/function-apply');\nvar $lastIndexOf = require('../internals/array-last-index-of');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.lastIndexOf` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof\nexportTypedArrayMethod('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {\n var length = arguments.length;\n return apply($lastIndexOf, aTypedArray(this), length > 1 ? [searchElement, arguments[1]] : [searchElement]);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $map = require('../internals/array-iteration').map;\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.map` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.map\nexportTypedArrayMethod('map', function map(mapfn /* , thisArg */) {\n return $map(aTypedArray(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {\n return new (typedArraySpeciesConstructor(O))(length);\n });\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduceRight = require('../internals/array-reduce').right;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduceRicht` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright\nexportTypedArrayMethod('reduceRight', function reduceRight(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduceRight(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $reduce = require('../internals/array-reduce').left;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.reduce` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce\nexportTypedArrayMethod('reduce', function reduce(callbackfn /* , initialValue */) {\n var length = arguments.length;\n return $reduce(aTypedArray(this), callbackfn, length, length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar floor = Math.floor;\n\n// `%TypedArray%.prototype.reverse` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse\nexportTypedArrayMethod('reverse', function reverse() {\n var that = this;\n var length = aTypedArray(that).length;\n var middle = floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n});\n","'use strict';\nvar global = require('../internals/global');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar lengthOfArrayLike = require('../internals/length-of-array-like');\nvar toOffset = require('../internals/to-offset');\nvar toObject = require('../internals/to-object');\nvar fails = require('../internals/fails');\n\nvar RangeError = global.RangeError;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n new Int8Array(1).set({});\n});\n\n// `%TypedArray%.prototype.set` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.set\nexportTypedArrayMethod('set', function set(arrayLike /* , offset */) {\n aTypedArray(this);\n var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = lengthOfArrayLike(src);\n var index = 0;\n if (len + offset > length) throw RangeError('Wrong length');\n while (index < len) this[offset + index] = src[index++];\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\nvar FORCED = fails(function () {\n // eslint-disable-next-line es/no-typed-arrays -- required for testing\n new Int8Array(1).slice();\n});\n\n// `%TypedArray%.prototype.slice` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice\nexportTypedArrayMethod('slice', function slice(start, end) {\n var list = arraySlice(aTypedArray(this), start, end);\n var C = typedArraySpeciesConstructor(this);\n var index = 0;\n var length = list.length;\n var result = new C(length);\n while (length > index) result[index] = list[index++];\n return result;\n}, FORCED);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar $some = require('../internals/array-iteration').some;\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.some` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.some\nexportTypedArrayMethod('some', function some(callbackfn /* , thisArg */) {\n return $some(aTypedArray(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n});\n","'use strict';\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar fails = require('../internals/fails');\nvar aCallable = require('../internals/a-callable');\nvar internalSort = require('../internals/array-sort');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar FF = require('../internals/engine-ff-version');\nvar IE_OR_EDGE = require('../internals/engine-is-ie-or-edge');\nvar V8 = require('../internals/engine-v8-version');\nvar WEBKIT = require('../internals/engine-webkit-version');\n\nvar Array = global.Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar Uint16Array = global.Uint16Array;\nvar un$Sort = Uint16Array && uncurryThis(Uint16Array.prototype.sort);\n\n// WebKit\nvar ACCEPT_INCORRECT_ARGUMENTS = !!un$Sort && !(fails(function () {\n un$Sort(new Uint16Array(2), null);\n}) && fails(function () {\n un$Sort(new Uint16Array(2), {});\n}));\n\nvar STABLE_SORT = !!un$Sort && !fails(function () {\n // feature detection can be too slow, so check engines versions\n if (V8) return V8 < 74;\n if (FF) return FF < 67;\n if (IE_OR_EDGE) return true;\n if (WEBKIT) return WEBKIT < 602;\n\n var array = new Uint16Array(516);\n var expected = Array(516);\n var index, mod;\n\n for (index = 0; index < 516; index++) {\n mod = index % 4;\n array[index] = 515 - index;\n expected[index] = index - 2 * mod + 3;\n }\n\n un$Sort(array, function (a, b) {\n return (a / 4 | 0) - (b / 4 | 0);\n });\n\n for (index = 0; index < 516; index++) {\n if (array[index] !== expected[index]) return true;\n }\n});\n\nvar getSortCompare = function (comparefn) {\n return function (x, y) {\n if (comparefn !== undefined) return +comparefn(x, y) || 0;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (y !== y) return -1;\n // eslint-disable-next-line no-self-compare -- NaN check\n if (x !== x) return 1;\n if (x === 0 && y === 0) return 1 / x > 0 && 1 / y < 0 ? 1 : -1;\n return x > y;\n };\n};\n\n// `%TypedArray%.prototype.sort` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort\nexportTypedArrayMethod('sort', function sort(comparefn) {\n if (comparefn !== undefined) aCallable(comparefn);\n if (STABLE_SORT) return un$Sort(this, comparefn);\n\n return internalSort(aTypedArray(this), getSortCompare(comparefn));\n}, !STABLE_SORT || ACCEPT_INCORRECT_ARGUMENTS);\n","'use strict';\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar toLength = require('../internals/to-length');\nvar toAbsoluteIndex = require('../internals/to-absolute-index');\nvar typedArraySpeciesConstructor = require('../internals/typed-array-species-constructor');\n\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\n\n// `%TypedArray%.prototype.subarray` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray\nexportTypedArrayMethod('subarray', function subarray(begin, end) {\n var O = aTypedArray(this);\n var length = O.length;\n var beginIndex = toAbsoluteIndex(begin, length);\n var C = typedArraySpeciesConstructor(O);\n return new C(\n O.buffer,\n O.byteOffset + beginIndex * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - beginIndex)\n );\n});\n","'use strict';\nvar global = require('../internals/global');\nvar apply = require('../internals/function-apply');\nvar ArrayBufferViewCore = require('../internals/array-buffer-view-core');\nvar fails = require('../internals/fails');\nvar arraySlice = require('../internals/array-slice');\n\nvar Int8Array = global.Int8Array;\nvar aTypedArray = ArrayBufferViewCore.aTypedArray;\nvar exportTypedArrayMethod = ArrayBufferViewCore.exportTypedArrayMethod;\nvar $toLocaleString = [].toLocaleString;\n\n// iOS Safari 6.x fails here\nvar TO_LOCALE_STRING_BUG = !!Int8Array && fails(function () {\n $toLocaleString.call(new Int8Array(1));\n});\n\nvar FORCED = fails(function () {\n return [1, 2].toLocaleString() != new Int8Array([1, 2]).toLocaleString();\n}) || !fails(function () {\n Int8Array.prototype.toLocaleString.call([1, 2]);\n});\n\n// `%TypedArray%.prototype.toLocaleString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring\nexportTypedArrayMethod('toLocaleString', function toLocaleString() {\n return apply(\n $toLocaleString,\n TO_LOCALE_STRING_BUG ? arraySlice(aTypedArray(this)) : aTypedArray(this),\n arraySlice(arguments)\n );\n}, FORCED);\n","'use strict';\nvar exportTypedArrayMethod = require('../internals/array-buffer-view-core').exportTypedArrayMethod;\nvar fails = require('../internals/fails');\nvar global = require('../internals/global');\nvar uncurryThis = require('../internals/function-uncurry-this');\n\nvar Uint8Array = global.Uint8Array;\nvar Uint8ArrayPrototype = Uint8Array && Uint8Array.prototype || {};\nvar arrayToString = [].toString;\nvar join = uncurryThis([].join);\n\nif (fails(function () { arrayToString.call({}); })) {\n arrayToString = function toString() {\n return join(this);\n };\n}\n\nvar IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;\n\n// `%TypedArray%.prototype.toString` method\n// https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring\nexportTypedArrayMethod('toString', arrayToString, IS_NOT_ARRAY_METHOD);\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint16Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint16', function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint32Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint32', function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8Array` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","var createTypedArrayConstructor = require('../internals/typed-array-constructor');\n\n// `Uint8ClampedArray` constructor\n// https://tc39.es/ecma262/#sec-typedarray-objects\ncreateTypedArrayConstructor('Uint8', function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.aggregate-error');\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.global-this');\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.promise.all-settled.js');\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.promise.any');\n","'use strict';\nvar $ = require('../internals/export');\nvar newPromiseCapabilityModule = require('../internals/new-promise-capability');\nvar perform = require('../internals/perform');\n\n// `Promise.try` method\n// https://github.com/tc39/proposal-promise-try\n$({ target: 'Promise', stat: true }, {\n 'try': function (callbackfn) {\n var promiseCapability = newPromiseCapabilityModule.f(this);\n var result = perform(callbackfn);\n (result.error ? promiseCapability.reject : promiseCapability.resolve)(result.value);\n return promiseCapability.promise;\n }\n});\n","// TODO: Remove from `core-js@4`\nrequire('../modules/es.string.match-all');\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar forEach = require('../internals/array-for-each');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\n\nvar handlePrototype = function (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype && CollectionPrototype.forEach !== forEach) try {\n createNonEnumerableProperty(CollectionPrototype, 'forEach', forEach);\n } catch (error) {\n CollectionPrototype.forEach = forEach;\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n if (DOMIterables[COLLECTION_NAME]) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype);\n }\n}\n\nhandlePrototype(DOMTokenListPrototype);\n","var global = require('../internals/global');\nvar DOMIterables = require('../internals/dom-iterables');\nvar DOMTokenListPrototype = require('../internals/dom-token-list-prototype');\nvar ArrayIteratorMethods = require('../modules/es.array.iterator');\nvar createNonEnumerableProperty = require('../internals/create-non-enumerable-property');\nvar wellKnownSymbol = require('../internals/well-known-symbol');\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\nvar ArrayValues = ArrayIteratorMethods.values;\n\nvar handlePrototype = function (CollectionPrototype, COLLECTION_NAME) {\n if (CollectionPrototype) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[ITERATOR] !== ArrayValues) try {\n createNonEnumerableProperty(CollectionPrototype, ITERATOR, ArrayValues);\n } catch (error) {\n CollectionPrototype[ITERATOR] = ArrayValues;\n }\n if (!CollectionPrototype[TO_STRING_TAG]) {\n createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG, COLLECTION_NAME);\n }\n if (DOMIterables[COLLECTION_NAME]) for (var METHOD_NAME in ArrayIteratorMethods) {\n // some Chrome versions have non-configurable methods on DOMTokenList\n if (CollectionPrototype[METHOD_NAME] !== ArrayIteratorMethods[METHOD_NAME]) try {\n createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, ArrayIteratorMethods[METHOD_NAME]);\n } catch (error) {\n CollectionPrototype[METHOD_NAME] = ArrayIteratorMethods[METHOD_NAME];\n }\n }\n }\n};\n\nfor (var COLLECTION_NAME in DOMIterables) {\n handlePrototype(global[COLLECTION_NAME] && global[COLLECTION_NAME].prototype, COLLECTION_NAME);\n}\n\nhandlePrototype(DOMTokenListPrototype, 'DOMTokenList');\n","'use strict';\nvar $ = require('../internals/export');\nvar call = require('../internals/function-call');\n\n// `URL.prototype.toJSON` method\n// https://url.spec.whatwg.org/#dom-url-tojson\n$({ target: 'URL', proto: true, enumerable: true }, {\n toJSON: function toJSON() {\n return call(URL.prototype.toString, this);\n }\n});\n","var parent = require('../../es/promise');\nrequire('../../modules/web.dom-collections.iterator');\n\nmodule.exports = parent;\n","var objectKeys = require('object-keys');\nvar isArguments = require('is-arguments');\nvar is = require('object-is');\nvar isRegex = require('is-regex');\nvar flags = require('regexp.prototype.flags');\nvar isDate = require('is-date-object');\n\nvar getTime = Date.prototype.getTime;\n\nfunction deepEqual(actual, expected, options) {\n var opts = options || {};\n\n // 7.1. All identical values are equivalent, as determined by ===.\n if (opts.strict ? is(actual, expected) : actual === expected) {\n return true;\n }\n\n // 7.3. Other pairs that do not both pass typeof value == 'object', equivalence is determined by ==.\n if (!actual || !expected || (typeof actual !== 'object' && typeof expected !== 'object')) {\n return opts.strict ? is(actual, expected) : actual == expected;\n }\n\n /*\n * 7.4. For all other Object pairs, including Array objects, equivalence is\n * determined by having the same number of owned properties (as verified\n * with Object.prototype.hasOwnProperty.call), the same set of keys\n * (although not necessarily the same order), equivalent values for every\n * corresponding key, and an identical 'prototype' property. Note: this\n * accounts for both named and indexed properties on Arrays.\n */\n // eslint-disable-next-line no-use-before-define\n return objEquiv(actual, expected, opts);\n}\n\nfunction isUndefinedOrNull(value) {\n return value === null || value === undefined;\n}\n\nfunction isBuffer(x) {\n if (!x || typeof x !== 'object' || typeof x.length !== 'number') {\n return false;\n }\n if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n return false;\n }\n if (x.length > 0 && typeof x[0] !== 'number') {\n return false;\n }\n return true;\n}\n\nfunction objEquiv(a, b, opts) {\n /* eslint max-statements: [2, 50] */\n var i, key;\n if (typeof a !== typeof b) { return false; }\n if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) { return false; }\n\n // an identical 'prototype' property.\n if (a.prototype !== b.prototype) { return false; }\n\n if (isArguments(a) !== isArguments(b)) { return false; }\n\n var aIsRegex = isRegex(a);\n var bIsRegex = isRegex(b);\n if (aIsRegex !== bIsRegex) { return false; }\n if (aIsRegex || bIsRegex) {\n return a.source === b.source && flags(a) === flags(b);\n }\n\n if (isDate(a) && isDate(b)) {\n return getTime.call(a) === getTime.call(b);\n }\n\n var aIsBuffer = isBuffer(a);\n var bIsBuffer = isBuffer(b);\n if (aIsBuffer !== bIsBuffer) { return false; }\n if (aIsBuffer || bIsBuffer) { // && would work too, because both are true or both false here\n if (a.length !== b.length) { return false; }\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) { return false; }\n }\n return true;\n }\n\n if (typeof a !== typeof b) { return false; }\n\n try {\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n } catch (e) { // happens when one is a string literal and the other isn't\n return false;\n }\n // having the same number of owned properties (keys incorporates hasOwnProperty)\n if (ka.length !== kb.length) { return false; }\n\n // the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n // ~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] != kb[i]) { return false; }\n }\n // equivalent values for every corresponding key, and ~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!deepEqual(a[key], b[key], opts)) { return false; }\n }\n\n return true;\n}\n\nmodule.exports = deepEqual;\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\n\nvar gopd = require('gopd');\n\n/** @type {import('.')} */\nmodule.exports = function defineDataProperty(\n\tobj,\n\tproperty,\n\tvalue\n) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\tthrow new $TypeError('`obj` must be an object or a function`');\n\t}\n\tif (typeof property !== 'string' && typeof property !== 'symbol') {\n\t\tthrow new $TypeError('`property` must be a string or a symbol`');\n\t}\n\tif (arguments.length > 3 && typeof arguments[3] !== 'boolean' && arguments[3] !== null) {\n\t\tthrow new $TypeError('`nonEnumerable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 4 && typeof arguments[4] !== 'boolean' && arguments[4] !== null) {\n\t\tthrow new $TypeError('`nonWritable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 5 && typeof arguments[5] !== 'boolean' && arguments[5] !== null) {\n\t\tthrow new $TypeError('`nonConfigurable`, if provided, must be a boolean or null');\n\t}\n\tif (arguments.length > 6 && typeof arguments[6] !== 'boolean') {\n\t\tthrow new $TypeError('`loose`, if provided, must be a boolean');\n\t}\n\n\tvar nonEnumerable = arguments.length > 3 ? arguments[3] : null;\n\tvar nonWritable = arguments.length > 4 ? arguments[4] : null;\n\tvar nonConfigurable = arguments.length > 5 ? arguments[5] : null;\n\tvar loose = arguments.length > 6 ? arguments[6] : false;\n\n\t/* @type {false | TypedPropertyDescriptor} */\n\tvar desc = !!gopd && gopd(obj, property);\n\n\tif ($defineProperty) {\n\t\t$defineProperty(obj, property, {\n\t\t\tconfigurable: nonConfigurable === null && desc ? desc.configurable : !nonConfigurable,\n\t\t\tenumerable: nonEnumerable === null && desc ? desc.enumerable : !nonEnumerable,\n\t\t\tvalue: value,\n\t\t\twritable: nonWritable === null && desc ? desc.writable : !nonWritable\n\t\t});\n\t} else if (loose || (!nonEnumerable && !nonWritable && !nonConfigurable)) {\n\t\t// must fall back to [[Set]], and was not explicitly asked to make non-enumerable, non-writable, or non-configurable\n\t\tobj[property] = value; // eslint-disable-line no-param-reassign\n\t} else {\n\t\tthrow new $SyntaxError('This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.');\n\t}\n};\n","'use strict';\n\nvar keys = require('object-keys');\nvar hasSymbols = typeof Symbol === 'function' && typeof Symbol('foo') === 'symbol';\n\nvar toStr = Object.prototype.toString;\nvar concat = Array.prototype.concat;\nvar defineDataProperty = require('define-data-property');\n\nvar isFunction = function (fn) {\n\treturn typeof fn === 'function' && toStr.call(fn) === '[object Function]';\n};\n\nvar supportsDescriptors = require('has-property-descriptors')();\n\nvar defineProperty = function (object, name, value, predicate) {\n\tif (name in object) {\n\t\tif (predicate === true) {\n\t\t\tif (object[name] === value) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else if (!isFunction(predicate) || !predicate()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\tif (supportsDescriptors) {\n\t\tdefineDataProperty(object, name, value, true);\n\t} else {\n\t\tdefineDataProperty(object, name, value);\n\t}\n};\n\nvar defineProperties = function (object, map) {\n\tvar predicates = arguments.length > 2 ? arguments[2] : {};\n\tvar props = keys(map);\n\tif (hasSymbols) {\n\t\tprops = concat.call(props, Object.getOwnPropertySymbols(map));\n\t}\n\tfor (var i = 0; i < props.length; i += 1) {\n\t\tdefineProperty(object, props[i], map[props[i]], predicates[props[i]]);\n\t}\n};\n\ndefineProperties.supportsDescriptors = !!supportsDescriptors;\n\nmodule.exports = defineProperties;\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\n/** @type {import('.')} */\nvar $defineProperty = GetIntrinsic('%Object.defineProperty%', true) || false;\nif ($defineProperty) {\n\ttry {\n\t\t$defineProperty({}, 'a', { value: 1 });\n\t} catch (e) {\n\t\t// IE 8 has a broken defineProperty\n\t\t$defineProperty = false;\n\t}\n}\n\nmodule.exports = $defineProperty;\n","'use strict';\n\n/** @type {import('./eval')} */\nmodule.exports = EvalError;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = Error;\n","'use strict';\n\n/** @type {import('./range')} */\nmodule.exports = RangeError;\n","'use strict';\n\n/** @type {import('./ref')} */\nmodule.exports = ReferenceError;\n","'use strict';\n\n/** @type {import('./syntax')} */\nmodule.exports = SyntaxError;\n","'use strict';\n\n/** @type {import('./type')} */\nmodule.exports = TypeError;\n","'use strict';\n\n/** @type {import('./uri')} */\nmodule.exports = URIError;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\nmodule.exports.once = once;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n checkListener(listener);\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = _getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0)\n return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n checkListener(listener);\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function errorListener(err) {\n emitter.removeListener(name, resolver);\n reject(err);\n }\n\n function resolver() {\n if (typeof emitter.removeListener === 'function') {\n emitter.removeListener('error', errorListener);\n }\n resolve([].slice.call(arguments));\n };\n\n eventTargetAgnosticAddListener(emitter, name, resolver, { once: true });\n if (name !== 'error') {\n addErrorHandlerIfEventEmitter(emitter, errorListener, { once: true });\n }\n });\n}\n\nfunction addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n if (typeof emitter.on === 'function') {\n eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n }\n}\n\nfunction eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n if (typeof emitter.on === 'function') {\n if (flags.once) {\n emitter.once(name, listener);\n } else {\n emitter.on(name, listener);\n }\n } else if (typeof emitter.addEventListener === 'function') {\n // EventTarget does not have `error` event semantics like Node\n // EventEmitters, we do not listen for `error` events here.\n emitter.addEventListener(name, function wrapListener(arg) {\n // IE does not have builtin `{ once: true }` support so we\n // have to do it manually.\n if (flags.once) {\n emitter.removeEventListener(name, wrapListener);\n }\n listener(arg);\n });\n } else {\n throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n }\n}\n","\"use strict\";\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n if (typeof globalThis === \"object\") {\n return globalThis;\n }\n\n var g;\n\n try {\n // This works if eval is allowed (see CSP)\n // eslint-disable-next-line no-new-func\n g = this || new Function(\"return this\")();\n } catch (e) {\n // This works if the window reference is available\n if (typeof window === \"object\") {\n return window;\n } // This works if the self reference is available\n\n\n if (typeof self === \"object\") {\n return self;\n } // This works if the global reference is available\n\n\n if (typeof global !== \"undefined\") {\n return global;\n }\n }\n\n return g;\n}();","'use strict';\n\nvar isCallable = require('is-callable');\n\nvar toStr = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar forEachArray = function forEachArray(array, iterator, receiver) {\n for (var i = 0, len = array.length; i < len; i++) {\n if (hasOwnProperty.call(array, i)) {\n if (receiver == null) {\n iterator(array[i], i, array);\n } else {\n iterator.call(receiver, array[i], i, array);\n }\n }\n }\n};\n\nvar forEachString = function forEachString(string, iterator, receiver) {\n for (var i = 0, len = string.length; i < len; i++) {\n // no such thing as a sparse string.\n if (receiver == null) {\n iterator(string.charAt(i), i, string);\n } else {\n iterator.call(receiver, string.charAt(i), i, string);\n }\n }\n};\n\nvar forEachObject = function forEachObject(object, iterator, receiver) {\n for (var k in object) {\n if (hasOwnProperty.call(object, k)) {\n if (receiver == null) {\n iterator(object[k], k, object);\n } else {\n iterator.call(receiver, object[k], k, object);\n }\n }\n }\n};\n\nvar forEach = function forEach(list, iterator, thisArg) {\n if (!isCallable(iterator)) {\n throw new TypeError('iterator must be a function');\n }\n\n var receiver;\n if (arguments.length >= 3) {\n receiver = thisArg;\n }\n\n if (toStr.call(list) === '[object Array]') {\n forEachArray(list, iterator, receiver);\n } else if (typeof list === 'string') {\n forEachString(list, iterator, receiver);\n } else {\n forEachObject(list, iterator, receiver);\n }\n};\n\nmodule.exports = forEach;\n","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar functionsHaveNames = function functionsHaveNames() {\n\treturn typeof function f() {}.name === 'string';\n};\n\nvar gOPD = Object.getOwnPropertyDescriptor;\nif (gOPD) {\n\ttry {\n\t\tgOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\tgOPD = null;\n\t}\n}\n\nfunctionsHaveNames.functionsHaveConfigurableNames = function functionsHaveConfigurableNames() {\n\tif (!functionsHaveNames() || !gOPD) {\n\t\treturn false;\n\t}\n\tvar desc = gOPD(function () {}, 'name');\n\treturn !!desc && !!desc.configurable;\n};\n\nvar $bind = Function.prototype.bind;\n\nfunctionsHaveNames.boundFunctionsHaveNames = function boundFunctionsHaveNames() {\n\treturn functionsHaveNames() && typeof $bind === 'function' && function f() {}.bind().name !== '';\n};\n\nmodule.exports = functionsHaveNames;\n","'use strict';\n\nvar undefined;\n\nvar $Error = require('es-errors');\nvar $EvalError = require('es-errors/eval');\nvar $RangeError = require('es-errors/range');\nvar $ReferenceError = require('es-errors/ref');\nvar $SyntaxError = require('es-errors/syntax');\nvar $TypeError = require('es-errors/type');\nvar $URIError = require('es-errors/uri');\n\nvar $Function = Function;\n\n// eslint-disable-next-line consistent-return\nvar getEvalledConstructor = function (expressionSyntax) {\n\ttry {\n\t\treturn $Function('\"use strict\"; return (' + expressionSyntax + ').constructor;')();\n\t} catch (e) {}\n};\n\nvar $gOPD = Object.getOwnPropertyDescriptor;\nif ($gOPD) {\n\ttry {\n\t\t$gOPD({}, '');\n\t} catch (e) {\n\t\t$gOPD = null; // this is IE 8, which has a broken gOPD\n\t}\n}\n\nvar throwTypeError = function () {\n\tthrow new $TypeError();\n};\nvar ThrowTypeError = $gOPD\n\t? (function () {\n\t\ttry {\n\t\t\t// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties\n\t\t\targuments.callee; // IE 8 does not throw here\n\t\t\treturn throwTypeError;\n\t\t} catch (calleeThrows) {\n\t\t\ttry {\n\t\t\t\t// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '')\n\t\t\t\treturn $gOPD(arguments, 'callee').get;\n\t\t\t} catch (gOPDthrows) {\n\t\t\t\treturn throwTypeError;\n\t\t\t}\n\t\t}\n\t}())\n\t: throwTypeError;\n\nvar hasSymbols = require('has-symbols')();\nvar hasProto = require('has-proto')();\n\nvar getProto = Object.getPrototypeOf || (\n\thasProto\n\t\t? function (x) { return x.__proto__; } // eslint-disable-line no-proto\n\t\t: null\n);\n\nvar needsEval = {};\n\nvar TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array);\n\nvar INTRINSICS = {\n\t__proto__: null,\n\t'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError,\n\t'%Array%': Array,\n\t'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer,\n\t'%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined,\n\t'%AsyncFromSyncIteratorPrototype%': undefined,\n\t'%AsyncFunction%': needsEval,\n\t'%AsyncGenerator%': needsEval,\n\t'%AsyncGeneratorFunction%': needsEval,\n\t'%AsyncIteratorPrototype%': needsEval,\n\t'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics,\n\t'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt,\n\t'%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array,\n\t'%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array,\n\t'%Boolean%': Boolean,\n\t'%DataView%': typeof DataView === 'undefined' ? undefined : DataView,\n\t'%Date%': Date,\n\t'%decodeURI%': decodeURI,\n\t'%decodeURIComponent%': decodeURIComponent,\n\t'%encodeURI%': encodeURI,\n\t'%encodeURIComponent%': encodeURIComponent,\n\t'%Error%': $Error,\n\t'%eval%': eval, // eslint-disable-line no-eval\n\t'%EvalError%': $EvalError,\n\t'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array,\n\t'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array,\n\t'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry,\n\t'%Function%': $Function,\n\t'%GeneratorFunction%': needsEval,\n\t'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array,\n\t'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array,\n\t'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array,\n\t'%isFinite%': isFinite,\n\t'%isNaN%': isNaN,\n\t'%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined,\n\t'%JSON%': typeof JSON === 'object' ? JSON : undefined,\n\t'%Map%': typeof Map === 'undefined' ? undefined : Map,\n\t'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()),\n\t'%Math%': Math,\n\t'%Number%': Number,\n\t'%Object%': Object,\n\t'%parseFloat%': parseFloat,\n\t'%parseInt%': parseInt,\n\t'%Promise%': typeof Promise === 'undefined' ? undefined : Promise,\n\t'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy,\n\t'%RangeError%': $RangeError,\n\t'%ReferenceError%': $ReferenceError,\n\t'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect,\n\t'%RegExp%': RegExp,\n\t'%Set%': typeof Set === 'undefined' ? undefined : Set,\n\t'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()),\n\t'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer,\n\t'%String%': String,\n\t'%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined,\n\t'%Symbol%': hasSymbols ? Symbol : undefined,\n\t'%SyntaxError%': $SyntaxError,\n\t'%ThrowTypeError%': ThrowTypeError,\n\t'%TypedArray%': TypedArray,\n\t'%TypeError%': $TypeError,\n\t'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array,\n\t'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray,\n\t'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array,\n\t'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array,\n\t'%URIError%': $URIError,\n\t'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap,\n\t'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef,\n\t'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet\n};\n\nif (getProto) {\n\ttry {\n\t\tnull.error; // eslint-disable-line no-unused-expressions\n\t} catch (e) {\n\t\t// https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229\n\t\tvar errorProto = getProto(getProto(e));\n\t\tINTRINSICS['%Error.prototype%'] = errorProto;\n\t}\n}\n\nvar doEval = function doEval(name) {\n\tvar value;\n\tif (name === '%AsyncFunction%') {\n\t\tvalue = getEvalledConstructor('async function () {}');\n\t} else if (name === '%GeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('function* () {}');\n\t} else if (name === '%AsyncGeneratorFunction%') {\n\t\tvalue = getEvalledConstructor('async function* () {}');\n\t} else if (name === '%AsyncGenerator%') {\n\t\tvar fn = doEval('%AsyncGeneratorFunction%');\n\t\tif (fn) {\n\t\t\tvalue = fn.prototype;\n\t\t}\n\t} else if (name === '%AsyncIteratorPrototype%') {\n\t\tvar gen = doEval('%AsyncGenerator%');\n\t\tif (gen && getProto) {\n\t\t\tvalue = getProto(gen.prototype);\n\t\t}\n\t}\n\n\tINTRINSICS[name] = value;\n\n\treturn value;\n};\n\nvar LEGACY_ALIASES = {\n\t__proto__: null,\n\t'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'],\n\t'%ArrayPrototype%': ['Array', 'prototype'],\n\t'%ArrayProto_entries%': ['Array', 'prototype', 'entries'],\n\t'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'],\n\t'%ArrayProto_keys%': ['Array', 'prototype', 'keys'],\n\t'%ArrayProto_values%': ['Array', 'prototype', 'values'],\n\t'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'],\n\t'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'],\n\t'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'],\n\t'%BooleanPrototype%': ['Boolean', 'prototype'],\n\t'%DataViewPrototype%': ['DataView', 'prototype'],\n\t'%DatePrototype%': ['Date', 'prototype'],\n\t'%ErrorPrototype%': ['Error', 'prototype'],\n\t'%EvalErrorPrototype%': ['EvalError', 'prototype'],\n\t'%Float32ArrayPrototype%': ['Float32Array', 'prototype'],\n\t'%Float64ArrayPrototype%': ['Float64Array', 'prototype'],\n\t'%FunctionPrototype%': ['Function', 'prototype'],\n\t'%Generator%': ['GeneratorFunction', 'prototype'],\n\t'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'],\n\t'%Int8ArrayPrototype%': ['Int8Array', 'prototype'],\n\t'%Int16ArrayPrototype%': ['Int16Array', 'prototype'],\n\t'%Int32ArrayPrototype%': ['Int32Array', 'prototype'],\n\t'%JSONParse%': ['JSON', 'parse'],\n\t'%JSONStringify%': ['JSON', 'stringify'],\n\t'%MapPrototype%': ['Map', 'prototype'],\n\t'%NumberPrototype%': ['Number', 'prototype'],\n\t'%ObjectPrototype%': ['Object', 'prototype'],\n\t'%ObjProto_toString%': ['Object', 'prototype', 'toString'],\n\t'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'],\n\t'%PromisePrototype%': ['Promise', 'prototype'],\n\t'%PromiseProto_then%': ['Promise', 'prototype', 'then'],\n\t'%Promise_all%': ['Promise', 'all'],\n\t'%Promise_reject%': ['Promise', 'reject'],\n\t'%Promise_resolve%': ['Promise', 'resolve'],\n\t'%RangeErrorPrototype%': ['RangeError', 'prototype'],\n\t'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'],\n\t'%RegExpPrototype%': ['RegExp', 'prototype'],\n\t'%SetPrototype%': ['Set', 'prototype'],\n\t'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'],\n\t'%StringPrototype%': ['String', 'prototype'],\n\t'%SymbolPrototype%': ['Symbol', 'prototype'],\n\t'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'],\n\t'%TypedArrayPrototype%': ['TypedArray', 'prototype'],\n\t'%TypeErrorPrototype%': ['TypeError', 'prototype'],\n\t'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'],\n\t'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'],\n\t'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'],\n\t'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'],\n\t'%URIErrorPrototype%': ['URIError', 'prototype'],\n\t'%WeakMapPrototype%': ['WeakMap', 'prototype'],\n\t'%WeakSetPrototype%': ['WeakSet', 'prototype']\n};\n\nvar bind = require('function-bind');\nvar hasOwn = require('hasown');\nvar $concat = bind.call(Function.call, Array.prototype.concat);\nvar $spliceApply = bind.call(Function.apply, Array.prototype.splice);\nvar $replace = bind.call(Function.call, String.prototype.replace);\nvar $strSlice = bind.call(Function.call, String.prototype.slice);\nvar $exec = bind.call(Function.call, RegExp.prototype.exec);\n\n/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */\nvar rePropName = /[^%.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|%$))/g;\nvar reEscapeChar = /\\\\(\\\\)?/g; /** Used to match backslashes in property paths. */\nvar stringToPath = function stringToPath(string) {\n\tvar first = $strSlice(string, 0, 1);\n\tvar last = $strSlice(string, -1);\n\tif (first === '%' && last !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected closing `%`');\n\t} else if (last === '%' && first !== '%') {\n\t\tthrow new $SyntaxError('invalid intrinsic syntax, expected opening `%`');\n\t}\n\tvar result = [];\n\t$replace(string, rePropName, function (match, number, quote, subString) {\n\t\tresult[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match;\n\t});\n\treturn result;\n};\n/* end adaptation */\n\nvar getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) {\n\tvar intrinsicName = name;\n\tvar alias;\n\tif (hasOwn(LEGACY_ALIASES, intrinsicName)) {\n\t\talias = LEGACY_ALIASES[intrinsicName];\n\t\tintrinsicName = '%' + alias[0] + '%';\n\t}\n\n\tif (hasOwn(INTRINSICS, intrinsicName)) {\n\t\tvar value = INTRINSICS[intrinsicName];\n\t\tif (value === needsEval) {\n\t\t\tvalue = doEval(intrinsicName);\n\t\t}\n\t\tif (typeof value === 'undefined' && !allowMissing) {\n\t\t\tthrow new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!');\n\t\t}\n\n\t\treturn {\n\t\t\talias: alias,\n\t\t\tname: intrinsicName,\n\t\t\tvalue: value\n\t\t};\n\t}\n\n\tthrow new $SyntaxError('intrinsic ' + name + ' does not exist!');\n};\n\nmodule.exports = function GetIntrinsic(name, allowMissing) {\n\tif (typeof name !== 'string' || name.length === 0) {\n\t\tthrow new $TypeError('intrinsic name must be a non-empty string');\n\t}\n\tif (arguments.length > 1 && typeof allowMissing !== 'boolean') {\n\t\tthrow new $TypeError('\"allowMissing\" argument must be a boolean');\n\t}\n\n\tif ($exec(/^%?[^%]*%?$/, name) === null) {\n\t\tthrow new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name');\n\t}\n\tvar parts = stringToPath(name);\n\tvar intrinsicBaseName = parts.length > 0 ? parts[0] : '';\n\n\tvar intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing);\n\tvar intrinsicRealName = intrinsic.name;\n\tvar value = intrinsic.value;\n\tvar skipFurtherCaching = false;\n\n\tvar alias = intrinsic.alias;\n\tif (alias) {\n\t\tintrinsicBaseName = alias[0];\n\t\t$spliceApply(parts, $concat([0, 1], alias));\n\t}\n\n\tfor (var i = 1, isOwn = true; i < parts.length; i += 1) {\n\t\tvar part = parts[i];\n\t\tvar first = $strSlice(part, 0, 1);\n\t\tvar last = $strSlice(part, -1);\n\t\tif (\n\t\t\t(\n\t\t\t\t(first === '\"' || first === \"'\" || first === '`')\n\t\t\t\t|| (last === '\"' || last === \"'\" || last === '`')\n\t\t\t)\n\t\t\t&& first !== last\n\t\t) {\n\t\t\tthrow new $SyntaxError('property names with quotes must have matching quotes');\n\t\t}\n\t\tif (part === 'constructor' || !isOwn) {\n\t\t\tskipFurtherCaching = true;\n\t\t}\n\n\t\tintrinsicBaseName += '.' + part;\n\t\tintrinsicRealName = '%' + intrinsicBaseName + '%';\n\n\t\tif (hasOwn(INTRINSICS, intrinsicRealName)) {\n\t\t\tvalue = INTRINSICS[intrinsicRealName];\n\t\t} else if (value != null) {\n\t\t\tif (!(part in value)) {\n\t\t\t\tif (!allowMissing) {\n\t\t\t\t\tthrow new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.');\n\t\t\t\t}\n\t\t\t\treturn void undefined;\n\t\t\t}\n\t\t\tif ($gOPD && (i + 1) >= parts.length) {\n\t\t\t\tvar desc = $gOPD(value, part);\n\t\t\t\tisOwn = !!desc;\n\n\t\t\t\t// By convention, when a data property is converted to an accessor\n\t\t\t\t// property to emulate a data property that does not suffer from\n\t\t\t\t// the override mistake, that accessor's getter is marked with\n\t\t\t\t// an `originalValue` property. Here, when we detect this, we\n\t\t\t\t// uphold the illusion by pretending to see that original data\n\t\t\t\t// property, i.e., returning the value rather than the getter\n\t\t\t\t// itself.\n\t\t\t\tif (isOwn && 'get' in desc && !('originalValue' in desc.get)) {\n\t\t\t\t\tvalue = desc.get;\n\t\t\t\t} else {\n\t\t\t\t\tvalue = value[part];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tisOwn = hasOwn(value, part);\n\t\t\t\tvalue = value[part];\n\t\t\t}\n\n\t\t\tif (isOwn && !skipFurtherCaching) {\n\t\t\t\tINTRINSICS[intrinsicRealName] = value;\n\t\t\t}\n\t\t}\n\t}\n\treturn value;\n};\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\n\nvar $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true);\n\nif ($gOPD) {\n\ttry {\n\t\t$gOPD([], 'length');\n\t} catch (e) {\n\t\t// IE 8 has a broken gOPD\n\t\t$gOPD = null;\n\t}\n}\n\nmodule.exports = $gOPD;\n","'use strict';\n\nvar $defineProperty = require('es-define-property');\n\nvar hasPropertyDescriptors = function hasPropertyDescriptors() {\n\treturn !!$defineProperty;\n};\n\nhasPropertyDescriptors.hasArrayLengthDefineBug = function hasArrayLengthDefineBug() {\n\t// node v0.6 has a bug where array lengths can be Set but not Defined\n\tif (!$defineProperty) {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn $defineProperty([], 'length', { value: 1 }).length !== 1;\n\t} catch (e) {\n\t\t// In Firefox 4-22, defining length on an array throws an exception.\n\t\treturn true;\n\t}\n};\n\nmodule.exports = hasPropertyDescriptors;\n","'use strict';\n\nvar test = {\n\t__proto__: null,\n\tfoo: {}\n};\n\nvar $Object = Object;\n\n/** @type {import('.')} */\nmodule.exports = function hasProto() {\n\t// @ts-expect-error: TS errors on an inherited property for some reason\n\treturn { __proto__: test }.foo === test.foo\n\t\t&& !(test instanceof $Object);\n};\n","'use strict';\n\nvar origSymbol = typeof Symbol !== 'undefined' && Symbol;\nvar hasSymbolSham = require('./shams');\n\nmodule.exports = function hasNativeSymbols() {\n\tif (typeof origSymbol !== 'function') { return false; }\n\tif (typeof Symbol !== 'function') { return false; }\n\tif (typeof origSymbol('foo') !== 'symbol') { return false; }\n\tif (typeof Symbol('bar') !== 'symbol') { return false; }\n\n\treturn hasSymbolSham();\n};\n","'use strict';\n\n/* eslint complexity: [2, 18], max-statements: [2, 33] */\nmodule.exports = function hasSymbols() {\n\tif (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; }\n\tif (typeof Symbol.iterator === 'symbol') { return true; }\n\n\tvar obj = {};\n\tvar sym = Symbol('test');\n\tvar symObj = Object(sym);\n\tif (typeof sym === 'string') { return false; }\n\n\tif (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; }\n\tif (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; }\n\n\t// temp disabled per https://github.com/ljharb/object.assign/issues/17\n\t// if (sym instanceof Symbol) { return false; }\n\t// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4\n\t// if (!(symObj instanceof Symbol)) { return false; }\n\n\t// if (typeof Symbol.prototype.toString !== 'function') { return false; }\n\t// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; }\n\n\tvar symVal = 42;\n\tobj[sym] = symVal;\n\tfor (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop\n\tif (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; }\n\n\tif (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; }\n\n\tvar syms = Object.getOwnPropertySymbols(obj);\n\tif (syms.length !== 1 || syms[0] !== sym) { return false; }\n\n\tif (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; }\n\n\tif (typeof Object.getOwnPropertyDescriptor === 'function') {\n\t\tvar descriptor = Object.getOwnPropertyDescriptor(obj, sym);\n\t\tif (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; }\n\t}\n\n\treturn true;\n};\n","'use strict';\n\nvar hasSymbols = require('has-symbols/shams');\n\n/** @type {import('.')} */\nmodule.exports = function hasToStringTagShams() {\n\treturn hasSymbols() && !!Symbol.toStringTag;\n};\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Multibyte codec. In this scheme, a character is represented by 1 or more bytes.\n// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences.\n// To save memory and loading time, we read table files only when requested.\n\nexports._dbcs = DBCSCodec;\n\nvar UNASSIGNED = -1,\n GB18030_CODE = -2,\n SEQ_START = -10,\n NODE_START = -1000,\n UNASSIGNED_NODE = new Array(0x100),\n DEF_CHAR = -1;\n\nfor (var i = 0; i < 0x100; i++)\n UNASSIGNED_NODE[i] = UNASSIGNED;\n\n\n// Class DBCSCodec reads and initializes mapping tables.\nfunction DBCSCodec(codecOptions, iconv) {\n this.encodingName = codecOptions.encodingName;\n if (!codecOptions)\n throw new Error(\"DBCS codec is called without the data.\")\n if (!codecOptions.table)\n throw new Error(\"Encoding '\" + this.encodingName + \"' has no data.\");\n\n // Load tables.\n var mappingTable = codecOptions.table();\n\n\n // Decode tables: MBCS -> Unicode.\n\n // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256.\n // Trie root is decodeTables[0].\n // Values: >= 0 -> unicode character code. can be > 0xFFFF\n // == UNASSIGNED -> unknown/unassigned sequence.\n // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence.\n // <= NODE_START -> index of the next node in our trie to process next byte.\n // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq.\n this.decodeTables = [];\n this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node.\n\n // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. \n this.decodeTableSeq = [];\n\n // Actual mapping tables consist of chunks. Use them to fill up decode tables.\n for (var i = 0; i < mappingTable.length; i++)\n this._addDecodeChunk(mappingTable[i]);\n\n // Load & create GB18030 tables when needed.\n if (typeof codecOptions.gb18030 === 'function') {\n this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges.\n\n // Add GB18030 common decode nodes.\n var commonThirdByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n var commonFourthByteNodeIdx = this.decodeTables.length;\n this.decodeTables.push(UNASSIGNED_NODE.slice(0));\n\n // Fill out the tree\n var firstByteNode = this.decodeTables[0];\n for (var i = 0x81; i <= 0xFE; i++) {\n var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]];\n for (var j = 0x30; j <= 0x39; j++) {\n if (secondByteNode[j] === UNASSIGNED) {\n secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;\n } else if (secondByteNode[j] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 2\");\n }\n\n var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];\n for (var k = 0x81; k <= 0xFE; k++) {\n if (thirdByteNode[k] === UNASSIGNED) {\n thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;\n } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {\n continue;\n } else if (thirdByteNode[k] > NODE_START) {\n throw new Error(\"gb18030 decode tables conflict at byte 3\");\n }\n\n var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];\n for (var l = 0x30; l <= 0x39; l++) {\n if (fourthByteNode[l] === UNASSIGNED)\n fourthByteNode[l] = GB18030_CODE;\n }\n }\n }\n }\n }\n\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n\n \n // Encode tables: Unicode -> DBCS.\n\n // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance.\n // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null.\n // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.).\n // == UNASSIGNED -> no conversion found. Output a default char.\n // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence.\n this.encodeTable = [];\n \n // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of\n // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key\n // means end of sequence (needed when one sequence is a strict subsequence of another).\n // Objects are kept separately from encodeTable to increase performance.\n this.encodeTableSeq = [];\n\n // Some chars can be decoded, but need not be encoded.\n var skipEncodeChars = {};\n if (codecOptions.encodeSkipVals)\n for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) {\n var val = codecOptions.encodeSkipVals[i];\n if (typeof val === 'number')\n skipEncodeChars[val] = true;\n else\n for (var j = val.from; j <= val.to; j++)\n skipEncodeChars[j] = true;\n }\n \n // Use decode trie to recursively fill out encode tables.\n this._fillEncodeTable(0, 0, skipEncodeChars);\n\n // Add more encoding pairs when needed.\n if (codecOptions.encodeAdd) {\n for (var uChar in codecOptions.encodeAdd)\n if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))\n this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);\n }\n\n this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?'];\n if (this.defCharSB === UNASSIGNED) this.defCharSB = \"?\".charCodeAt(0);\n}\n\nDBCSCodec.prototype.encoder = DBCSEncoder;\nDBCSCodec.prototype.decoder = DBCSDecoder;\n\n// Decoder helpers\nDBCSCodec.prototype._getDecodeTrieNode = function(addr) {\n var bytes = [];\n for (; addr > 0; addr >>>= 8)\n bytes.push(addr & 0xFF);\n if (bytes.length == 0)\n bytes.push(0);\n\n var node = this.decodeTables[0];\n for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie.\n var val = node[bytes[i]];\n\n if (val == UNASSIGNED) { // Create new node.\n node[bytes[i]] = NODE_START - this.decodeTables.length;\n this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));\n }\n else if (val <= NODE_START) { // Existing node.\n node = this.decodeTables[NODE_START - val];\n }\n else\n throw new Error(\"Overwrite byte in \" + this.encodingName + \", addr: \" + addr.toString(16));\n }\n return node;\n}\n\n\nDBCSCodec.prototype._addDecodeChunk = function(chunk) {\n // First element of chunk is the hex mbcs code where we start.\n var curAddr = parseInt(chunk[0], 16);\n\n // Choose the decoding node where we'll write our chars.\n var writeTable = this._getDecodeTrieNode(curAddr);\n curAddr = curAddr & 0xFF;\n\n // Write all other elements of the chunk to the table.\n for (var k = 1; k < chunk.length; k++) {\n var part = chunk[k];\n if (typeof part === \"string\") { // String, write as-is.\n for (var l = 0; l < part.length;) {\n var code = part.charCodeAt(l++);\n if (0xD800 <= code && code < 0xDC00) { // Decode surrogate\n var codeTrail = part.charCodeAt(l++);\n if (0xDC00 <= codeTrail && codeTrail < 0xE000)\n writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00);\n else\n throw new Error(\"Incorrect surrogate pair in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used)\n var len = 0xFFF - code + 2;\n var seq = [];\n for (var m = 0; m < len; m++)\n seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq.\n\n writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;\n this.decodeTableSeq.push(seq);\n }\n else\n writeTable[curAddr++] = code; // Basic char\n }\n } \n else if (typeof part === \"number\") { // Integer, meaning increasing sequence starting with prev character.\n var charCode = writeTable[curAddr - 1] + 1;\n for (var l = 0; l < part; l++)\n writeTable[curAddr++] = charCode++;\n }\n else\n throw new Error(\"Incorrect type '\" + typeof part + \"' given in \" + this.encodingName + \" at chunk \" + chunk[0]);\n }\n if (curAddr > 0xFF)\n throw new Error(\"Incorrect chunk in \" + this.encodingName + \" at addr \" + chunk[0] + \": too long\" + curAddr);\n}\n\n// Encoder helpers\nDBCSCodec.prototype._getEncodeBucket = function(uCode) {\n var high = uCode >> 8; // This could be > 0xFF because of astral characters.\n if (this.encodeTable[high] === undefined)\n this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand.\n return this.encodeTable[high];\n}\n\nDBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n if (bucket[low] <= SEQ_START)\n this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it.\n else if (bucket[low] == UNASSIGNED)\n bucket[low] = dbcsCode;\n}\n\nDBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {\n \n // Get the root of character tree according to first character of the sequence.\n var uCode = seq[0];\n var bucket = this._getEncodeBucket(uCode);\n var low = uCode & 0xFF;\n\n var node;\n if (bucket[low] <= SEQ_START) {\n // There's already a sequence with - use it.\n node = this.encodeTableSeq[SEQ_START-bucket[low]];\n }\n else {\n // There was no sequence object - allocate a new one.\n node = {};\n if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence.\n bucket[low] = SEQ_START - this.encodeTableSeq.length;\n this.encodeTableSeq.push(node);\n }\n\n // Traverse the character tree, allocating new nodes as needed.\n for (var j = 1; j < seq.length-1; j++) {\n var oldVal = node[uCode];\n if (typeof oldVal === 'object')\n node = oldVal;\n else {\n node = node[uCode] = {}\n if (oldVal !== undefined)\n node[DEF_CHAR] = oldVal\n }\n }\n\n // Set the leaf to given dbcsCode.\n uCode = seq[seq.length-1];\n node[uCode] = dbcsCode;\n}\n\nDBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {\n var node = this.decodeTables[nodeIdx];\n var hasValues = false;\n var subNodeEmpty = {};\n for (var i = 0; i < 0x100; i++) {\n var uCode = node[i];\n var mbCode = prefix + i;\n if (skipEncodeChars[mbCode])\n continue;\n\n if (uCode >= 0) {\n this._setEncodeChar(uCode, mbCode);\n hasValues = true;\n } else if (uCode <= NODE_START) {\n var subNodeIdx = NODE_START - uCode;\n if (!subNodeEmpty[subNodeIdx]) { // Skip empty subtrees (they are too large in gb18030).\n var newPrefix = (mbCode << 8) >>> 0; // NOTE: '>>> 0' keeps 32-bit num positive.\n if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))\n hasValues = true;\n else\n subNodeEmpty[subNodeIdx] = true;\n }\n } else if (uCode <= SEQ_START) {\n this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);\n hasValues = true;\n }\n }\n return hasValues;\n}\n\n\n\n// == Encoder ==================================================================\n\nfunction DBCSEncoder(options, codec) {\n // Encoder state\n this.leadSurrogate = -1;\n this.seqObj = undefined;\n \n // Static data\n this.encodeTable = codec.encodeTable;\n this.encodeTableSeq = codec.encodeTableSeq;\n this.defaultCharSingleByte = codec.defCharSB;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSEncoder.prototype.write = function(str) {\n var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)),\n leadSurrogate = this.leadSurrogate,\n seqObj = this.seqObj, nextChar = -1,\n i = 0, j = 0;\n\n while (true) {\n // 0. Get next character.\n if (nextChar === -1) {\n if (i == str.length) break;\n var uCode = str.charCodeAt(i++);\n }\n else {\n var uCode = nextChar;\n nextChar = -1; \n }\n\n // 1. Handle surrogates.\n if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates.\n if (uCode < 0xDC00) { // We've got lead surrogate.\n if (leadSurrogate === -1) {\n leadSurrogate = uCode;\n continue;\n } else {\n leadSurrogate = uCode;\n // Double lead surrogate found.\n uCode = UNASSIGNED;\n }\n } else { // We've got trail surrogate.\n if (leadSurrogate !== -1) {\n uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00);\n leadSurrogate = -1;\n } else {\n // Incomplete surrogate pair - only trail surrogate found.\n uCode = UNASSIGNED;\n }\n \n }\n }\n else if (leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char.\n leadSurrogate = -1;\n }\n\n // 2. Convert uCode character.\n var dbcsCode = UNASSIGNED;\n if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence\n var resCode = seqObj[uCode];\n if (typeof resCode === 'object') { // Sequence continues.\n seqObj = resCode;\n continue;\n\n } else if (typeof resCode == 'number') { // Sequence finished. Write it.\n dbcsCode = resCode;\n\n } else if (resCode == undefined) { // Current character is not part of the sequence.\n\n // Try default character for this sequence\n resCode = seqObj[DEF_CHAR];\n if (resCode !== undefined) {\n dbcsCode = resCode; // Found. Write it.\n nextChar = uCode; // Current character will be written too in the next iteration.\n\n } else {\n // TODO: What if we have no default? (resCode == undefined)\n // Then, we should write first char of the sequence as-is and try the rest recursively.\n // Didn't do it for now because no encoding has this situation yet.\n // Currently, just skip the sequence and write current char.\n }\n }\n seqObj = undefined;\n }\n else if (uCode >= 0) { // Regular character\n var subtable = this.encodeTable[uCode >> 8];\n if (subtable !== undefined)\n dbcsCode = subtable[uCode & 0xFF];\n \n if (dbcsCode <= SEQ_START) { // Sequence start\n seqObj = this.encodeTableSeq[SEQ_START-dbcsCode];\n continue;\n }\n\n if (dbcsCode == UNASSIGNED && this.gb18030) {\n // Use GB18030 algorithm to find character(s) to write.\n var idx = findIdx(this.gb18030.uChars, uCode);\n if (idx != -1) {\n var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600;\n newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260;\n newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10;\n newBuf[j++] = 0x30 + dbcsCode;\n continue;\n }\n }\n }\n\n // 3. Write dbcsCode character.\n if (dbcsCode === UNASSIGNED)\n dbcsCode = this.defaultCharSingleByte;\n \n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else if (dbcsCode < 0x10000) {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n else if (dbcsCode < 0x1000000) {\n newBuf[j++] = dbcsCode >> 16;\n newBuf[j++] = (dbcsCode >> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n } else {\n newBuf[j++] = dbcsCode >>> 24;\n newBuf[j++] = (dbcsCode >>> 16) & 0xFF;\n newBuf[j++] = (dbcsCode >>> 8) & 0xFF;\n newBuf[j++] = dbcsCode & 0xFF;\n }\n }\n\n this.seqObj = seqObj;\n this.leadSurrogate = leadSurrogate;\n return newBuf.slice(0, j);\n}\n\nDBCSEncoder.prototype.end = function() {\n if (this.leadSurrogate === -1 && this.seqObj === undefined)\n return; // All clean. Most often case.\n\n var newBuf = Buffer.alloc(10), j = 0;\n\n if (this.seqObj) { // We're in the sequence.\n var dbcsCode = this.seqObj[DEF_CHAR];\n if (dbcsCode !== undefined) { // Write beginning of the sequence.\n if (dbcsCode < 0x100) {\n newBuf[j++] = dbcsCode;\n }\n else {\n newBuf[j++] = dbcsCode >> 8; // high byte\n newBuf[j++] = dbcsCode & 0xFF; // low byte\n }\n } else {\n // See todo above.\n }\n this.seqObj = undefined;\n }\n\n if (this.leadSurrogate !== -1) {\n // Incomplete surrogate pair - only lead surrogate found.\n newBuf[j++] = this.defaultCharSingleByte;\n this.leadSurrogate = -1;\n }\n \n return newBuf.slice(0, j);\n}\n\n// Export for testing\nDBCSEncoder.prototype.findIdx = findIdx;\n\n\n// == Decoder ==================================================================\n\nfunction DBCSDecoder(options, codec) {\n // Decoder state\n this.nodeIdx = 0;\n this.prevBytes = [];\n\n // Static data\n this.decodeTables = codec.decodeTables;\n this.decodeTableSeq = codec.decodeTableSeq;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n this.gb18030 = codec.gb18030;\n}\n\nDBCSDecoder.prototype.write = function(buf) {\n var newBuf = Buffer.alloc(buf.length*2),\n nodeIdx = this.nodeIdx, \n prevBytes = this.prevBytes, prevOffset = this.prevBytes.length,\n seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence.\n uCode;\n\n for (var i = 0, j = 0; i < buf.length; i++) {\n var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset];\n\n // Lookup in current trie node.\n var uCode = this.decodeTables[nodeIdx][curByte];\n\n if (uCode >= 0) { \n // Normal character, just use it.\n }\n else if (uCode === UNASSIGNED) { // Unknown char.\n // TODO: Callback with seq.\n uCode = this.defaultCharUnicode.charCodeAt(0);\n i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again.\n }\n else if (uCode === GB18030_CODE) {\n if (i >= 3) {\n var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30);\n } else {\n var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + \n (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + \n (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + \n (curByte-0x30);\n }\n var idx = findIdx(this.gb18030.gbChars, ptr);\n uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];\n }\n else if (uCode <= NODE_START) { // Go to next trie node.\n nodeIdx = NODE_START - uCode;\n continue;\n }\n else if (uCode <= SEQ_START) { // Output a sequence of chars.\n var seq = this.decodeTableSeq[SEQ_START - uCode];\n for (var k = 0; k < seq.length - 1; k++) {\n uCode = seq[k];\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n }\n uCode = seq[seq.length-1];\n }\n else\n throw new Error(\"iconv-lite internal error: invalid decoding table value \" + uCode + \" at \" + nodeIdx + \"/\" + curByte);\n\n // Write the character to buffer, handling higher planes using surrogate pair.\n if (uCode >= 0x10000) { \n uCode -= 0x10000;\n var uCodeLead = 0xD800 | (uCode >> 10);\n newBuf[j++] = uCodeLead & 0xFF;\n newBuf[j++] = uCodeLead >> 8;\n\n uCode = 0xDC00 | (uCode & 0x3FF);\n }\n newBuf[j++] = uCode & 0xFF;\n newBuf[j++] = uCode >> 8;\n\n // Reset trie node.\n nodeIdx = 0; seqStart = i+1;\n }\n\n this.nodeIdx = nodeIdx;\n this.prevBytes = (seqStart >= 0)\n ? Array.prototype.slice.call(buf, seqStart)\n : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));\n\n return newBuf.slice(0, j).toString('ucs2');\n}\n\nDBCSDecoder.prototype.end = function() {\n var ret = '';\n\n // Try to parse all remaining chars.\n while (this.prevBytes.length > 0) {\n // Skip 1 character in the buffer.\n ret += this.defaultCharUnicode;\n var bytesArr = this.prevBytes.slice(1);\n\n // Parse remaining as usual.\n this.prevBytes = [];\n this.nodeIdx = 0;\n if (bytesArr.length > 0)\n ret += this.write(bytesArr);\n }\n\n this.prevBytes = [];\n this.nodeIdx = 0;\n return ret;\n}\n\n// Binary search for GB18030. Returns largest i such that table[i] <= val.\nfunction findIdx(table, val) {\n if (table[0] > val)\n return -1;\n\n var l = 0, r = table.length;\n while (l < r-1) { // always table[l] <= val < table[r]\n var mid = l + ((r-l+1) >> 1);\n if (table[mid] <= val)\n l = mid;\n else\n r = mid;\n }\n return l;\n}\n\n","\"use strict\";\n\n// Description of supported double byte encodings and aliases.\n// Tables are not require()-d until they are needed to speed up library load.\n// require()-s are direct to support Browserify.\n\nmodule.exports = {\n \n // == Japanese/ShiftJIS ====================================================\n // All japanese encodings are based on JIS X set of standards:\n // JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.\n // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. \n // Has several variations in 1978, 1983, 1990 and 1997.\n // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.\n // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.\n // 2 planes, first is superset of 0208, second - revised 0212.\n // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)\n\n // Byte encodings are:\n // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte\n // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.\n // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.\n // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.\n // 0x00-0x7F - lower part of 0201\n // 0x8E, 0xA1-0xDF - upper part of 0201\n // (0xA1-0xFE)x2 - 0208 plane (94x94).\n // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).\n // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.\n // Used as-is in ISO2022 family.\n // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, \n // 0201-1976 Roman, 0208-1978, 0208-1983.\n // * ISO2022-JP-1: Adds esc seq for 0212-1990.\n // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.\n // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.\n // * ISO2022-JP-2004: Adds 0213-2004 Plane 1.\n //\n // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.\n //\n // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html\n\n 'shiftjis': {\n type: '_dbcs',\n table: function() { return require('./tables/shiftjis.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n encodeSkipVals: [{from: 0xED40, to: 0xF940}],\n },\n 'csshiftjis': 'shiftjis',\n 'mskanji': 'shiftjis',\n 'sjis': 'shiftjis',\n 'windows31j': 'shiftjis',\n 'ms31j': 'shiftjis',\n 'xsjis': 'shiftjis',\n 'windows932': 'shiftjis',\n 'ms932': 'shiftjis',\n '932': 'shiftjis',\n 'cp932': 'shiftjis',\n\n 'eucjp': {\n type: '_dbcs',\n table: function() { return require('./tables/eucjp.json') },\n encodeAdd: {'\\u00a5': 0x5C, '\\u203E': 0x7E},\n },\n\n // TODO: KDDI extension to Shift_JIS\n // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.\n // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.\n\n\n // == Chinese/GBK ==========================================================\n // http://en.wikipedia.org/wiki/GBK\n // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder\n\n // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936\n 'gb2312': 'cp936',\n 'gb231280': 'cp936',\n 'gb23121980': 'cp936',\n 'csgb2312': 'cp936',\n 'csiso58gb231280': 'cp936',\n 'euccn': 'cp936',\n\n // Microsoft's CP936 is a subset and approximation of GBK.\n 'windows936': 'cp936',\n 'ms936': 'cp936',\n '936': 'cp936',\n 'cp936': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json') },\n },\n\n // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.\n 'gbk': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n },\n 'xgbk': 'gbk',\n 'isoir58': 'gbk',\n\n // GB18030 is an algorithmic extension of GBK.\n // Main source: https://www.w3.org/TR/encoding/#gbk-encoder\n // http://icu-project.org/docs/papers/gb18030.html\n // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml\n // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0\n 'gb18030': {\n type: '_dbcs',\n table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) },\n gb18030: function() { return require('./tables/gb18030-ranges.json') },\n encodeSkipVals: [0x80],\n encodeAdd: {'€': 0xA2E3},\n },\n\n 'chinese': 'gb18030',\n\n\n // == Korean ===============================================================\n // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.\n 'windows949': 'cp949',\n 'ms949': 'cp949',\n '949': 'cp949',\n 'cp949': {\n type: '_dbcs',\n table: function() { return require('./tables/cp949.json') },\n },\n\n 'cseuckr': 'cp949',\n 'csksc56011987': 'cp949',\n 'euckr': 'cp949',\n 'isoir149': 'cp949',\n 'korean': 'cp949',\n 'ksc56011987': 'cp949',\n 'ksc56011989': 'cp949',\n 'ksc5601': 'cp949',\n\n\n // == Big5/Taiwan/Hong Kong ================================================\n // There are lots of tables for Big5 and cp950. Please see the following links for history:\n // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html\n // Variations, in roughly number of defined chars:\n // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT\n // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/\n // * Big5-2003 (Taiwan standard) almost superset of cp950.\n // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.\n // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. \n // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.\n // Plus, it has 4 combining sequences.\n // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299\n // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.\n // Implementations are not consistent within browsers; sometimes labeled as just big5.\n // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.\n // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31\n // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.\n // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt\n // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt\n // \n // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder\n // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.\n\n 'windows950': 'cp950',\n 'ms950': 'cp950',\n '950': 'cp950',\n 'cp950': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json') },\n },\n\n // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.\n 'big5': 'big5hkscs',\n 'big5hkscs': {\n type: '_dbcs',\n table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) },\n encodeSkipVals: [\n // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of\n // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.\n // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.\n 0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe,\n 0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca,\n 0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62,\n 0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef,\n 0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed,\n\n // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345\n 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce,\n ],\n },\n\n 'cnbig5': 'big5hkscs',\n 'csbig5': 'big5hkscs',\n 'xxbig5': 'big5hkscs',\n};\n","\"use strict\";\n\n// Update this array if you add/rename/remove files in this directory.\n// We support Browserify by skipping automatic module discovery and requiring modules directly.\nvar modules = [\n require(\"./internal\"),\n require(\"./utf32\"),\n require(\"./utf16\"),\n require(\"./utf7\"),\n require(\"./sbcs-codec\"),\n require(\"./sbcs-data\"),\n require(\"./sbcs-data-generated\"),\n require(\"./dbcs-codec\"),\n require(\"./dbcs-data\"),\n];\n\n// Put all encoding/alias/codec definitions to single object and export it.\nfor (var i = 0; i < modules.length; i++) {\n var module = modules[i];\n for (var enc in module)\n if (Object.prototype.hasOwnProperty.call(module, enc))\n exports[enc] = module[enc];\n}\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Export Node.js internal encodings.\n\nmodule.exports = {\n // Encodings\n utf8: { type: \"_internal\", bomAware: true},\n cesu8: { type: \"_internal\", bomAware: true},\n unicode11utf8: \"utf8\",\n\n ucs2: { type: \"_internal\", bomAware: true},\n utf16le: \"ucs2\",\n\n binary: { type: \"_internal\" },\n base64: { type: \"_internal\" },\n hex: { type: \"_internal\" },\n\n // Codec.\n _internal: InternalCodec,\n};\n\n//------------------------------------------------------------------------------\n\nfunction InternalCodec(codecOptions, iconv) {\n this.enc = codecOptions.encodingName;\n this.bomAware = codecOptions.bomAware;\n\n if (this.enc === \"base64\")\n this.encoder = InternalEncoderBase64;\n else if (this.enc === \"cesu8\") {\n this.enc = \"utf8\"; // Use utf8 for decoding.\n this.encoder = InternalEncoderCesu8;\n\n // Add decoder for versions of Node not supporting CESU-8\n if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '💩') {\n this.decoder = InternalDecoderCesu8;\n this.defaultCharUnicode = iconv.defaultCharUnicode;\n }\n }\n}\n\nInternalCodec.prototype.encoder = InternalEncoder;\nInternalCodec.prototype.decoder = InternalDecoder;\n\n//------------------------------------------------------------------------------\n\n// We use node.js internal decoder. Its signature is the same as ours.\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nif (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method.\n StringDecoder.prototype.end = function() {};\n\n\nfunction InternalDecoder(options, codec) {\n this.decoder = new StringDecoder(codec.enc);\n}\n\nInternalDecoder.prototype.write = function(buf) {\n if (!Buffer.isBuffer(buf)) {\n buf = Buffer.from(buf);\n }\n\n return this.decoder.write(buf);\n}\n\nInternalDecoder.prototype.end = function() {\n return this.decoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n// Encoder is mostly trivial\n\nfunction InternalEncoder(options, codec) {\n this.enc = codec.enc;\n}\n\nInternalEncoder.prototype.write = function(str) {\n return Buffer.from(str, this.enc);\n}\n\nInternalEncoder.prototype.end = function() {\n}\n\n\n//------------------------------------------------------------------------------\n// Except base64 encoder, which must keep its state.\n\nfunction InternalEncoderBase64(options, codec) {\n this.prevStr = '';\n}\n\nInternalEncoderBase64.prototype.write = function(str) {\n str = this.prevStr + str;\n var completeQuads = str.length - (str.length % 4);\n this.prevStr = str.slice(completeQuads);\n str = str.slice(0, completeQuads);\n\n return Buffer.from(str, \"base64\");\n}\n\nInternalEncoderBase64.prototype.end = function() {\n return Buffer.from(this.prevStr, \"base64\");\n}\n\n\n//------------------------------------------------------------------------------\n// CESU-8 encoder is also special.\n\nfunction InternalEncoderCesu8(options, codec) {\n}\n\nInternalEncoderCesu8.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length * 3), bufIdx = 0;\n for (var i = 0; i < str.length; i++) {\n var charCode = str.charCodeAt(i);\n // Naive implementation, but it works because CESU-8 is especially easy\n // to convert from UTF-16 (which all JS strings are encoded in).\n if (charCode < 0x80)\n buf[bufIdx++] = charCode;\n else if (charCode < 0x800) {\n buf[bufIdx++] = 0xC0 + (charCode >>> 6);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n else { // charCode will always be < 0x10000 in javascript.\n buf[bufIdx++] = 0xE0 + (charCode >>> 12);\n buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f);\n buf[bufIdx++] = 0x80 + (charCode & 0x3f);\n }\n }\n return buf.slice(0, bufIdx);\n}\n\nInternalEncoderCesu8.prototype.end = function() {\n}\n\n//------------------------------------------------------------------------------\n// CESU-8 decoder is not implemented in Node v4.0+\n\nfunction InternalDecoderCesu8(options, codec) {\n this.acc = 0;\n this.contBytes = 0;\n this.accBytes = 0;\n this.defaultCharUnicode = codec.defaultCharUnicode;\n}\n\nInternalDecoderCesu8.prototype.write = function(buf) {\n var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, \n res = '';\n for (var i = 0; i < buf.length; i++) {\n var curByte = buf[i];\n if ((curByte & 0xC0) !== 0x80) { // Leading byte\n if (contBytes > 0) { // Previous code is invalid\n res += this.defaultCharUnicode;\n contBytes = 0;\n }\n\n if (curByte < 0x80) { // Single-byte code\n res += String.fromCharCode(curByte);\n } else if (curByte < 0xE0) { // Two-byte code\n acc = curByte & 0x1F;\n contBytes = 1; accBytes = 1;\n } else if (curByte < 0xF0) { // Three-byte code\n acc = curByte & 0x0F;\n contBytes = 2; accBytes = 1;\n } else { // Four or more are not supported for CESU-8.\n res += this.defaultCharUnicode;\n }\n } else { // Continuation byte\n if (contBytes > 0) { // We're waiting for it.\n acc = (acc << 6) | (curByte & 0x3f);\n contBytes--; accBytes++;\n if (contBytes === 0) {\n // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80)\n if (accBytes === 2 && acc < 0x80 && acc > 0)\n res += this.defaultCharUnicode;\n else if (accBytes === 3 && acc < 0x800)\n res += this.defaultCharUnicode;\n else\n // Actually add character.\n res += String.fromCharCode(acc);\n }\n } else { // Unexpected continuation byte\n res += this.defaultCharUnicode;\n }\n }\n }\n this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes;\n return res;\n}\n\nInternalDecoderCesu8.prototype.end = function() {\n var res = 0;\n if (this.contBytes > 0)\n res += this.defaultCharUnicode;\n return res;\n}\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that\n// correspond to encoded bytes (if 128 - then lower half is ASCII). \n\nexports._sbcs = SBCSCodec;\nfunction SBCSCodec(codecOptions, iconv) {\n if (!codecOptions)\n throw new Error(\"SBCS codec is called without the data.\")\n \n // Prepare char buffer for decoding.\n if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256))\n throw new Error(\"Encoding '\"+codecOptions.type+\"' has incorrect 'chars' (must be of len 128 or 256)\");\n \n if (codecOptions.chars.length === 128) {\n var asciiString = \"\";\n for (var i = 0; i < 128; i++)\n asciiString += String.fromCharCode(i);\n codecOptions.chars = asciiString + codecOptions.chars;\n }\n\n this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2');\n \n // Encoding buffer.\n var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0));\n\n for (var i = 0; i < codecOptions.chars.length; i++)\n encodeBuf[codecOptions.chars.charCodeAt(i)] = i;\n\n this.encodeBuf = encodeBuf;\n}\n\nSBCSCodec.prototype.encoder = SBCSEncoder;\nSBCSCodec.prototype.decoder = SBCSDecoder;\n\n\nfunction SBCSEncoder(options, codec) {\n this.encodeBuf = codec.encodeBuf;\n}\n\nSBCSEncoder.prototype.write = function(str) {\n var buf = Buffer.alloc(str.length);\n for (var i = 0; i < str.length; i++)\n buf[i] = this.encodeBuf[str.charCodeAt(i)];\n \n return buf;\n}\n\nSBCSEncoder.prototype.end = function() {\n}\n\n\nfunction SBCSDecoder(options, codec) {\n this.decodeBuf = codec.decodeBuf;\n}\n\nSBCSDecoder.prototype.write = function(buf) {\n // Strings are immutable in JS -> we use ucs2 buffer to speed up computations.\n var decodeBuf = this.decodeBuf;\n var newBuf = Buffer.alloc(buf.length*2);\n var idx1 = 0, idx2 = 0;\n for (var i = 0; i < buf.length; i++) {\n idx1 = buf[i]*2; idx2 = i*2;\n newBuf[idx2] = decodeBuf[idx1];\n newBuf[idx2+1] = decodeBuf[idx1+1];\n }\n return newBuf.toString('ucs2');\n}\n\nSBCSDecoder.prototype.end = function() {\n}\n","\"use strict\";\n\n// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script.\nmodule.exports = {\n \"437\": \"cp437\",\n \"737\": \"cp737\",\n \"775\": \"cp775\",\n \"850\": \"cp850\",\n \"852\": \"cp852\",\n \"855\": \"cp855\",\n \"856\": \"cp856\",\n \"857\": \"cp857\",\n \"858\": \"cp858\",\n \"860\": \"cp860\",\n \"861\": \"cp861\",\n \"862\": \"cp862\",\n \"863\": \"cp863\",\n \"864\": \"cp864\",\n \"865\": \"cp865\",\n \"866\": \"cp866\",\n \"869\": \"cp869\",\n \"874\": \"windows874\",\n \"922\": \"cp922\",\n \"1046\": \"cp1046\",\n \"1124\": \"cp1124\",\n \"1125\": \"cp1125\",\n \"1129\": \"cp1129\",\n \"1133\": \"cp1133\",\n \"1161\": \"cp1161\",\n \"1162\": \"cp1162\",\n \"1163\": \"cp1163\",\n \"1250\": \"windows1250\",\n \"1251\": \"windows1251\",\n \"1252\": \"windows1252\",\n \"1253\": \"windows1253\",\n \"1254\": \"windows1254\",\n \"1255\": \"windows1255\",\n \"1256\": \"windows1256\",\n \"1257\": \"windows1257\",\n \"1258\": \"windows1258\",\n \"28591\": \"iso88591\",\n \"28592\": \"iso88592\",\n \"28593\": \"iso88593\",\n \"28594\": \"iso88594\",\n \"28595\": \"iso88595\",\n \"28596\": \"iso88596\",\n \"28597\": \"iso88597\",\n \"28598\": \"iso88598\",\n \"28599\": \"iso88599\",\n \"28600\": \"iso885910\",\n \"28601\": \"iso885911\",\n \"28603\": \"iso885913\",\n \"28604\": \"iso885914\",\n \"28605\": \"iso885915\",\n \"28606\": \"iso885916\",\n \"windows874\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€����…�����������‘’“”•–—�������� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"win874\": \"windows874\",\n \"cp874\": \"windows874\",\n \"windows1250\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰Š‹ŚŤŽŹ�‘’“”•–—�™š›śťžź ˇ˘Ł¤Ą¦§¨©Ş«¬­®Ż°±˛ł´µ¶·¸ąş»Ľ˝ľżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"win1250\": \"windows1250\",\n \"cp1250\": \"windows1250\",\n \"windows1251\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—�™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"win1251\": \"windows1251\",\n \"cp1251\": \"windows1251\",\n \"windows1252\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’“”•–—˜™š›œ�žŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"win1252\": \"windows1252\",\n \"cp1252\": \"windows1252\",\n \"windows1253\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡�‰�‹�����‘’“”•–—�™�›���� ΅Ά£¤¥¦§¨©�«¬­®―°±²³΄µ¶·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"win1253\": \"windows1253\",\n \"cp1253\": \"windows1253\",\n \"windows1254\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰Š‹Œ����‘’“”•–—˜™š›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"win1254\": \"windows1254\",\n \"cp1254\": \"windows1254\",\n \"windows1255\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹�����‘’“”•–—˜™�›���� ¡¢£₪¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾¿ְֱֲֳִֵֶַָֹֺֻּֽ־ֿ׀ׁׂ׃װױײ׳״�������אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n },\n \"win1255\": \"windows1255\",\n \"cp1255\": \"windows1255\",\n \"windows1256\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€پ‚ƒ„…†‡ˆ‰ٹ‹Œچژڈگ‘’“”•–—ک™ڑ›œ‌‍ں ،¢£¤¥¦§¨©ھ«¬­®¯°±²³´µ¶·¸¹؛»¼½¾؟ہءآأؤإئابةتثجحخدذرزسشصض×طظعغـفقكàلâمنهوçèéêëىيîïًٌٍَôُِ÷ّùْûü‎‏ے\"\n },\n \"win1256\": \"windows1256\",\n \"cp1256\": \"windows1256\",\n \"windows1257\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚�„…†‡�‰�‹�¨ˇ¸�‘’“”•–—�™�›�¯˛� �¢£¤�¦§Ø©Ŗ«¬­®Æ°±²³´µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž˙\"\n },\n \"win1257\": \"windows1257\",\n \"cp1257\": \"windows1257\",\n \"windows1258\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€�‚ƒ„…†‡ˆ‰�‹Œ����‘’“”•–—˜™�›œ��Ÿ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"win1258\": \"windows1258\",\n \"cp1258\": \"windows1258\",\n \"iso88591\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28591\": \"iso88591\",\n \"iso88592\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ą˘Ł¤ĽŚ§¨ŠŞŤŹ­ŽŻ°ą˛ł´ľśˇ¸šşťź˝žżŔÁÂĂÄĹĆÇČÉĘËĚÍÎĎĐŃŇÓÔŐÖ×ŘŮÚŰÜÝŢßŕáâăäĺćçčéęëěíîďđńňóôőö÷řůúűüýţ˙\"\n },\n \"cp28592\": \"iso88592\",\n \"iso88593\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ħ˘£¤�Ĥ§¨İŞĞĴ­�ݰħ²³´µĥ·¸ışğĵ½�żÀÁÂ�ÄĊĈÇÈÉÊËÌÍÎÏ�ÑÒÓÔĠÖ×ĜÙÚÛÜŬŜßàáâ�äċĉçèéêëìíîï�ñòóôġö÷ĝùúûüŭŝ˙\"\n },\n \"cp28593\": \"iso88593\",\n \"iso88594\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙\"\n },\n \"cp28594\": \"iso88594\",\n \"iso88595\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂЃЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђѓєѕіїјљњћќ§ўџ\"\n },\n \"cp28595\": \"iso88595\",\n \"iso88596\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ���¤�������،­�������������؛���؟�ءآأؤإئابةتثجحخدذرزسشصضطظعغ�����ـفقكلمنهوىيًٌٍَُِّْ�������������\"\n },\n \"cp28596\": \"iso88596\",\n \"iso88597\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ‘’£€₯¦§¨©ͺ«¬­�―°±²³΄΅Ά·ΈΉΊ»Ό½ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ�ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ�\"\n },\n \"cp28597\": \"iso88597\",\n \"iso88598\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �¢£¤¥¦§¨©×«¬­®¯°±²³´µ¶·¸¹÷»¼½¾��������������������������������‗אבגדהוזחטיךכלםמןנסעףפץצקרשת��‎‏�\"\n },\n \"cp28598\": \"iso88598\",\n \"iso88599\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏĞÑÒÓÔÕÖרÙÚÛÜİŞßàáâãäåæçèéêëìíîïğñòóôõö÷øùúûüışÿ\"\n },\n \"cp28599\": \"iso88599\",\n \"iso885910\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĒĢĪĨͧĻĐŠŦŽ­ŪŊ°ąēģīĩķ·ļđšŧž―ūŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎÏÐŅŌÓÔÕÖŨØŲÚÛÜÝÞßāáâãäåæįčéęëėíîïðņōóôõöũøųúûüýþĸ\"\n },\n \"cp28600\": \"iso885910\",\n \"iso885911\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"cp28601\": \"iso885911\",\n \"iso885913\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ”¢£¤„¦§Ø©Ŗ«¬­®Æ°±²³“µ¶·ø¹ŗ»¼½¾æĄĮĀĆÄÅĘĒČÉŹĖĢĶĪĻŠŃŅÓŌÕÖ×ŲŁŚŪÜŻŽßąįāćäåęēčéźėģķīļšńņóōõö÷ųłśūüżž’\"\n },\n \"cp28603\": \"iso885913\",\n \"iso885914\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ Ḃḃ£ĊċḊ§Ẁ©ẂḋỲ­®ŸḞḟĠġṀṁ¶ṖẁṗẃṠỳẄẅṡÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŴÑÒÓÔÕÖṪØÙÚÛÜÝŶßàáâãäåæçèéêëìíîïŵñòóôõöṫøùúûüýŷÿ\"\n },\n \"cp28604\": \"iso885914\",\n \"iso885915\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"cp28605\": \"iso885915\",\n \"iso885916\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄąŁ€„Чš©Ș«Ź­źŻ°±ČłŽ”¶·žčș»ŒœŸżÀÁÂĂÄĆÆÇÈÉÊËÌÍÎÏĐŃÒÓÔŐÖŚŰÙÚÛÜĘȚßàáâăäćæçèéêëìíîïđńòóôőöśűùúûüęțÿ\"\n },\n \"cp28606\": \"iso885916\",\n \"cp437\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm437\": \"cp437\",\n \"csibm437\": \"cp437\",\n \"cp737\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩαβγδεζηθικλμνξοπρσςτυφχψ░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ωάέήϊίόύϋώΆΈΉΊΌΎΏ±≥≤ΪΫ÷≈°∙·√ⁿ²■ \"\n },\n \"ibm737\": \"cp737\",\n \"csibm737\": \"cp737\",\n \"cp775\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ĆüéāäģåćłēŖŗīŹÄÅÉæÆōöĢ¢ŚśÖÜø£Ø×¤ĀĪóŻżź”¦©®¬½¼Ł«»░▒▓│┤ĄČĘĖ╣║╗╝ĮŠ┐└┴┬├─┼ŲŪ╚╔╩╦╠═╬Žąčęėįšųūž┘┌█▄▌▐▀ÓßŌŃõÕµńĶķĻļņĒŅ’­±“¾¶§÷„°∙·¹³²■ \"\n },\n \"ibm775\": \"cp775\",\n \"csibm775\": \"cp775\",\n \"cp850\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈıÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm850\": \"cp850\",\n \"csibm850\": \"cp850\",\n \"cp852\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäůćçłëŐőîŹÄĆÉĹĺôöĽľŚśÖÜŤťŁ×čáíóúĄąŽžĘ꬟Ⱥ«»░▒▓│┤ÁÂĚŞ╣║╗╝Żż┐└┴┬├─┼Ăă╚╔╩╦╠═╬¤đĐĎËďŇÍÎě┘┌█▄ŢŮ▀ÓßÔŃńňŠšŔÚŕŰýÝţ´­˝˛ˇ˘§÷¸°¨˙űŘř■ \"\n },\n \"ibm852\": \"cp852\",\n \"csibm852\": \"cp852\",\n \"cp855\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ђЂѓЃёЁєЄѕЅіІїЇјЈљЉњЊћЋќЌўЎџЏюЮъЪаАбБцЦдДеЕфФгГ«»░▒▓│┤хХиИ╣║╗╝йЙ┐└┴┬├─┼кК╚╔╩╦╠═╬¤лЛмМнНоОп┘┌█▄Пя▀ЯрРсСтТуУжЖвВьЬ№­ыЫзЗшШэЭщЩчЧ§■ \"\n },\n \"ibm855\": \"cp855\",\n \"csibm855\": \"cp855\",\n \"cp856\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת�£�×����������®¬½¼�«»░▒▓│┤���©╣║╗╝¢¥┐└┴┬├─┼��╚╔╩╦╠═╬¤���������┘┌█▄¦�▀������µ�������¯´­±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm856\": \"cp856\",\n \"csibm856\": \"cp856\",\n \"cp857\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîıÄÅÉæÆôöòûùİÖÜø£ØŞşáíóúñÑĞ𿮬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ºªÊËÈ�ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµ�×ÚÛÙìÿ¯´­±�¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm857\": \"cp857\",\n \"csibm857\": \"cp857\",\n \"cp858\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø×ƒáíóúñѪº¿®¬½¼¡«»░▒▓│┤ÁÂÀ©╣║╗╝¢¥┐└┴┬├─┼ãÃ╚╔╩╦╠═╬¤ðÐÊËÈ€ÍÎÏ┘┌█▄¦Ì▀ÓßÔÒõÕµþÞÚÛÙýݯ´­±‗¾¶§÷¸°¨·¹³²■ \"\n },\n \"ibm858\": \"cp858\",\n \"csibm858\": \"cp858\",\n \"cp860\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâãàÁçêÊèÍÔìÃÂÉÀÈôõòÚùÌÕÜ¢£Ù₧ÓáíóúñѪº¿Ò¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm860\": \"cp860\",\n \"csibm860\": \"cp860\",\n \"cp861\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèÐðÞÄÅÉæÆôöþûÝýÖÜø£Ø₧ƒáíóúÁÍÓÚ¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm861\": \"cp861\",\n \"csibm861\": \"cp861\",\n \"cp862\": {\n \"type\": \"_sbcs\",\n \"chars\": \"אבגדהוזחטיךכלםמןנסעףפץצקרשת¢£¥₧ƒáíóúñѪº¿⌐¬½¼¡«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm862\": \"cp862\",\n \"csibm862\": \"cp862\",\n \"cp863\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâÂà¶çêëèïî‗À§ÉÈÊôËÏûù¤ÔÜ¢£ÙÛƒ¦´óú¨¸³¯Î⌐¬½¼¾«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm863\": \"cp863\",\n \"csibm863\": \"cp863\",\n \"cp864\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\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 },\n \"ibm864\": \"cp864\",\n \"csibm864\": \"cp864\",\n \"cp865\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜø£Ø₧ƒáíóúñѪº¿⌐¬½¼¡«¤░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n \"ibm865\": \"cp865\",\n \"csibm865\": \"cp865\",\n \"cp866\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№¤■ \"\n },\n \"ibm866\": \"cp866\",\n \"csibm866\": \"cp866\",\n \"cp869\": {\n \"type\": \"_sbcs\",\n \"chars\": \"������Ά�·¬¦‘’Έ―ΉΊΪΌ��ΎΫ©Ώ²³ά£έήίϊΐόύΑΒΓΔΕΖΗ½ΘΙ«»░▒▓│┤ΚΛΜΝ╣║╗╝ΞΟ┐└┴┬├─┼ΠΡ╚╔╩╦╠═╬ΣΤΥΦΧΨΩαβγ┘┌█▄δε▀ζηθικλμνξοπρσςτ΄­±υφχ§ψ΅°¨ωϋΰώ■ \"\n },\n \"ibm869\": \"cp869\",\n \"csibm869\": \"cp869\",\n \"cp922\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®‾°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏŠÑÒÓÔÕÖרÙÚÛÜÝŽßàáâãäåæçèéêëìíîïšñòóôõö÷øùúûüýžÿ\"\n },\n \"ibm922\": \"cp922\",\n \"csibm922\": \"cp922\",\n \"cp1046\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ﺈ×÷ﹱˆ■│─┐┌└┘ﹹﹻﹽﹿﹷﺊﻰﻳﻲﻎﻏﻐﻶﻸﻺﻼ ¤ﺋﺑﺗﺛﺟﺣ،­ﺧﺳ٠١٢٣٤٥٦٧٨٩ﺷ؛ﺻﺿﻊ؟ﻋءآأؤإئابةتثجحخدذرزسشصضطﻇعغﻌﺂﺄﺎﻓـفقكلمنهوىيًٌٍَُِّْﻗﻛﻟﻵﻷﻹﻻﻣﻧﻬﻩ�\"\n },\n \"ibm1046\": \"cp1046\",\n \"csibm1046\": \"cp1046\",\n \"cp1124\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ЁЂҐЄЅІЇЈЉЊЋЌ­ЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя№ёђґєѕіїјљњћќ§ўџ\"\n },\n \"ibm1124\": \"cp1124\",\n \"csibm1124\": \"cp1124\",\n \"cp1125\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёҐґЄєІіЇї·√№¤■ \"\n },\n \"ibm1125\": \"cp1125\",\n \"csibm1125\": \"cp1125\",\n \"cp1129\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1129\": \"cp1129\",\n \"csibm1129\": \"cp1129\",\n \"cp1133\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ກຂຄງຈສຊຍດຕຖທນບປຜຝພຟມຢຣລວຫອຮ���ຯະາຳິີຶືຸູຼັົຽ���ເແໂໃໄ່້໊໋໌ໍໆ�ໜໝ₭����������������໐໑໒໓໔໕໖໗໘໙��¢¬¦�\"\n },\n \"ibm1133\": \"cp1133\",\n \"csibm1133\": \"cp1133\",\n \"cp1161\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������่กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู้๊๋€฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛¢¬¦ \"\n },\n \"ibm1161\": \"cp1161\",\n \"csibm1161\": \"cp1161\",\n \"cp1162\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n },\n \"ibm1162\": \"cp1162\",\n \"csibm1162\": \"cp1162\",\n \"cp1163\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£€¥¦§œ©ª«¬­®¯°±²³Ÿµ¶·Œ¹º»¼½¾¿ÀÁÂĂÄÅÆÇÈÉÊË̀ÍÎÏĐÑ̉ÓÔƠÖרÙÚÛÜỮßàáâăäåæçèéêë́íîïđṇ̃óôơö÷øùúûüư₫ÿ\"\n },\n \"ibm1163\": \"cp1163\",\n \"csibm1163\": \"cp1163\",\n \"maccroatian\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊�©⁄¤‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\"\n },\n \"maccyrillic\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°¢£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµ∂ЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"macgreek\": {\n \"type\": \"_sbcs\",\n \"chars\": \"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦­ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ�\"\n },\n \"maciceland\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macroman\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macromania\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂŞ∞±≤≥¥µ∂∑∏π∫ªºΩăş¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›Ţţ‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macthai\": {\n \"type\": \"_sbcs\",\n \"chars\": \"«»…“”�•‘’� กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู​–—฿เแโใไๅๆ็่้๊๋์ํ™๏๐๑๒๓๔๕๖๗๘๙®©����\"\n },\n \"macturkish\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙ�ˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"macukraine\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю¤\"\n },\n \"koi8r\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ё╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡Ё╢╣╤╥╦╧╨╩╪╫╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8u\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґ╝╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪Ґ╬©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8ru\": {\n \"type\": \"_sbcs\",\n \"chars\": \"─│┌┐└┘├┤┬┴┼▀▄█▌▐░▒▓⌠■∙√≈≤≥ ⌡°²·÷═║╒ёє╔ії╗╘╙╚╛ґў╞╟╠╡ЁЄ╣ІЇ╦╧╨╩╪ҐЎ©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"koi8t\": {\n \"type\": \"_sbcs\",\n \"chars\": \"қғ‚Ғ„…†‡�‰ҳ‹ҲҷҶ�Қ‘’“”•–—�™�›�����ӯӮё¤ӣ¦§���«¬­®�°±²Ё�Ӣ¶·�№�»���©юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ\"\n },\n \"armscii8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ �և։)(»«—.՝,-֊…՜՛՞ԱաԲբԳգԴդԵեԶզԷէԸըԹթԺժԻիԼլԽխԾծԿկՀհՁձՂղՃճՄմՅյՆնՇշՈոՉչՊպՋջՌռՍսՎվՏտՐրՑցՒւՓփՔքՕօՖֆ՚�\"\n },\n \"rk1048\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ЂЃ‚ѓ„…†‡€‰Љ‹ЊҚҺЏђ‘’“”•–—�™љ›њқһџ ҰұӘ¤Ө¦§Ё©Ғ«¬­®Ү°±Ііөµ¶·ё№ғ»әҢңүАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"tcvn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000ÚỤ\\u0003ỪỬỮ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010ỨỰỲỶỸÝỴ\\u0018\\u0019\\u001a\\u001b\\u001c\\u001d\\u001e\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ÀẢÃÁẠẶẬÈẺẼÉẸỆÌỈĨÍỊÒỎÕÓỌỘỜỞỠỚỢÙỦŨ ĂÂÊÔƠƯĐăâêôơưđẶ̀̀̉̃́àảãáạẲằẳẵắẴẮẦẨẪẤỀặầẩẫấậèỂẻẽéẹềểễếệìỉỄẾỒĩíịòỔỏõóọồổỗốộờởỡớợùỖủũúụừửữứựỳỷỹýỵỐ\"\n },\n \"georgianacademy\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"georgianps\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿აბგდევზჱთიკლმნჲოპჟრსტჳუფქღყშჩცძწჭხჴჯჰჵæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\"\n },\n \"pt154\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ҖҒӮғ„…ҶҮҲүҠӢҢҚҺҸҗ‘’“”•–—ҳҷҡӣңқһҹ ЎўЈӨҘҰ§Ё©Ә«¬ӯ®Ҝ°ұІіҙө¶·ё№ә»јҪҫҝАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя\"\n },\n \"viscii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\u0000\\u0001Ẳ\\u0003\\u0004ẴẪ\\u0007\\b\\t\\n\\u000b\\f\\r\\u000e\\u000f\\u0010\\u0011\\u0012\\u0013Ỷ\\u0015\\u0016\\u0017\\u0018Ỹ\\u001a\\u001b\\u001c\\u001dỴ\\u001f !\\\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ẠẮẰẶẤẦẨẬẼẸẾỀỂỄỆỐỒỔỖỘỢỚỜỞỊỎỌỈỦŨỤỲÕắằặấầẩậẽẹếềểễệốồổỗỠƠộờởịỰỨỪỬơớƯÀÁÂÃẢĂẳẵÈÉÊẺÌÍĨỳĐứÒÓÔạỷừửÙÚỹỵÝỡưàáâãảăữẫèéêẻìíĩỉđựòóôõỏọụùúũủýợỮ\"\n },\n \"iso646cn\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\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 },\n \"iso646jp\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\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 },\n \"hproman8\": {\n \"type\": \"_sbcs\",\n \"chars\": \"€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ÀÂÈÊËÎÏ´ˋˆ¨˜ÙÛ₤¯Ýý°ÇçÑñ¡¿¤£¥§ƒ¢âêôûáéóúàèòùäëöüÅîØÆåíøæÄìÖÜÉïßÔÁÃãÐðÍÌÓÒÕõŠšÚŸÿÞþ·µ¶¾—¼½ªº«■»±�\"\n },\n \"macintosh\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄¤‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔ�ÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\"\n },\n \"ascii\": {\n \"type\": \"_sbcs\",\n \"chars\": \"��������������������������������������������������������������������������������������������������������������������������������\"\n },\n \"tis620\": {\n \"type\": \"_sbcs\",\n \"chars\": \"���������������������������������กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู����฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛����\"\n }\n}","\"use strict\";\n\n// Manually added data to be used by sbcs codec in addition to generated one.\n\nmodule.exports = {\n // Not supported by iconv, not sure why.\n \"10029\": \"maccenteuro\",\n \"maccenteuro\": {\n \"type\": \"_sbcs\",\n \"chars\": \"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\"\n },\n\n \"808\": \"cp808\",\n \"ibm808\": \"cp808\",\n \"cp808\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмноп░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀рстуфхцчшщъыьэюяЁёЄєЇїЎў°∙·√№€■ \"\n },\n\n \"mik\": {\n \"type\": \"_sbcs\",\n \"chars\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя└┴┬├─┼╣║╚╔╩╦╠═╬┐░▒▓│┤№§╗╝┘┌█▄▌▐▀αßΓπΣσµτΦΘΩδ∞φε∩≡±≥≤⌠⌡÷≈°∙·√ⁿ²■ \"\n },\n\n \"cp720\": {\n \"type\": \"_sbcs\",\n \"chars\": \"\\x80\\x81éâ\\x84à\\x86çêëèïî\\x8d\\x8e\\x8f\\x90\\u0651\\u0652ô¤ـûùءآأؤ£إئابةتثجحخدذرزسشص«»░▒▓│┤╡╢╖╕╣║╗╝╜╛┐└┴┬├─┼╞╟╚╔╩╦╠═╬╧╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀ضطظعغفµقكلمنهوىي≡\\u064b\\u064c\\u064d\\u064e\\u064f\\u0650≈°∙·√ⁿ²■\\u00a0\"\n },\n\n // Aliases of generated encodings.\n \"ascii8bit\": \"ascii\",\n \"usascii\": \"ascii\",\n \"ansix34\": \"ascii\",\n \"ansix341968\": \"ascii\",\n \"ansix341986\": \"ascii\",\n \"csascii\": \"ascii\",\n \"cp367\": \"ascii\",\n \"ibm367\": \"ascii\",\n \"isoir6\": \"ascii\",\n \"iso646us\": \"ascii\",\n \"iso646irv\": \"ascii\",\n \"us\": \"ascii\",\n\n \"latin1\": \"iso88591\",\n \"latin2\": \"iso88592\",\n \"latin3\": \"iso88593\",\n \"latin4\": \"iso88594\",\n \"latin5\": \"iso88599\",\n \"latin6\": \"iso885910\",\n \"latin7\": \"iso885913\",\n \"latin8\": \"iso885914\",\n \"latin9\": \"iso885915\",\n \"latin10\": \"iso885916\",\n\n \"csisolatin1\": \"iso88591\",\n \"csisolatin2\": \"iso88592\",\n \"csisolatin3\": \"iso88593\",\n \"csisolatin4\": \"iso88594\",\n \"csisolatincyrillic\": \"iso88595\",\n \"csisolatinarabic\": \"iso88596\",\n \"csisolatingreek\" : \"iso88597\",\n \"csisolatinhebrew\": \"iso88598\",\n \"csisolatin5\": \"iso88599\",\n \"csisolatin6\": \"iso885910\",\n\n \"l1\": \"iso88591\",\n \"l2\": \"iso88592\",\n \"l3\": \"iso88593\",\n \"l4\": \"iso88594\",\n \"l5\": \"iso88599\",\n \"l6\": \"iso885910\",\n \"l7\": \"iso885913\",\n \"l8\": \"iso885914\",\n \"l9\": \"iso885915\",\n \"l10\": \"iso885916\",\n\n \"isoir14\": \"iso646jp\",\n \"isoir57\": \"iso646cn\",\n \"isoir100\": \"iso88591\",\n \"isoir101\": \"iso88592\",\n \"isoir109\": \"iso88593\",\n \"isoir110\": \"iso88594\",\n \"isoir144\": \"iso88595\",\n \"isoir127\": \"iso88596\",\n \"isoir126\": \"iso88597\",\n \"isoir138\": \"iso88598\",\n \"isoir148\": \"iso88599\",\n \"isoir157\": \"iso885910\",\n \"isoir166\": \"tis620\",\n \"isoir179\": \"iso885913\",\n \"isoir199\": \"iso885914\",\n \"isoir203\": \"iso885915\",\n \"isoir226\": \"iso885916\",\n\n \"cp819\": \"iso88591\",\n \"ibm819\": \"iso88591\",\n\n \"cyrillic\": \"iso88595\",\n\n \"arabic\": \"iso88596\",\n \"arabic8\": \"iso88596\",\n \"ecma114\": \"iso88596\",\n \"asmo708\": \"iso88596\",\n\n \"greek\" : \"iso88597\",\n \"greek8\" : \"iso88597\",\n \"ecma118\" : \"iso88597\",\n \"elot928\" : \"iso88597\",\n\n \"hebrew\": \"iso88598\",\n \"hebrew8\": \"iso88598\",\n\n \"turkish\": \"iso88599\",\n \"turkish8\": \"iso88599\",\n\n \"thai\": \"iso885911\",\n \"thai8\": \"iso885911\",\n\n \"celtic\": \"iso885914\",\n \"celtic8\": \"iso885914\",\n \"isoceltic\": \"iso885914\",\n\n \"tis6200\": \"tis620\",\n \"tis62025291\": \"tis620\",\n \"tis62025330\": \"tis620\",\n\n \"10000\": \"macroman\",\n \"10006\": \"macgreek\",\n \"10007\": \"maccyrillic\",\n \"10079\": \"maciceland\",\n \"10081\": \"macturkish\",\n\n \"cspc8codepage437\": \"cp437\",\n \"cspc775baltic\": \"cp775\",\n \"cspc850multilingual\": \"cp850\",\n \"cspcp852\": \"cp852\",\n \"cspc862latinhebrew\": \"cp862\",\n \"cpgr\": \"cp869\",\n\n \"msee\": \"cp1250\",\n \"mscyrl\": \"cp1251\",\n \"msansi\": \"cp1252\",\n \"msgreek\": \"cp1253\",\n \"msturk\": \"cp1254\",\n \"mshebr\": \"cp1255\",\n \"msarab\": \"cp1256\",\n \"winbaltrim\": \"cp1257\",\n\n \"cp20866\": \"koi8r\",\n \"20866\": \"koi8r\",\n \"ibm878\": \"koi8r\",\n \"cskoi8r\": \"koi8r\",\n\n \"cp21866\": \"koi8u\",\n \"21866\": \"koi8u\",\n \"ibm1168\": \"koi8u\",\n\n \"strk10482002\": \"rk1048\",\n\n \"tcvn5712\": \"tcvn\",\n \"tcvn57121\": \"tcvn\",\n\n \"gb198880\": \"iso646cn\",\n \"cn\": \"iso646cn\",\n\n \"csiso14jisc6220ro\": \"iso646jp\",\n \"jisc62201969ro\": \"iso646jp\",\n \"jp\": \"iso646jp\",\n\n \"cshproman8\": \"hproman8\",\n \"r8\": \"hproman8\",\n \"roman8\": \"hproman8\",\n \"xroman8\": \"hproman8\",\n \"ibm1051\": \"hproman8\",\n\n \"mac\": \"macintosh\",\n \"csmacintosh\": \"macintosh\",\n};\n\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js\n\n// == UTF16-BE codec. ==========================================================\n\nexports.utf16be = Utf16BECodec;\nfunction Utf16BECodec() {\n}\n\nUtf16BECodec.prototype.encoder = Utf16BEEncoder;\nUtf16BECodec.prototype.decoder = Utf16BEDecoder;\nUtf16BECodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf16BEEncoder() {\n}\n\nUtf16BEEncoder.prototype.write = function(str) {\n var buf = Buffer.from(str, 'ucs2');\n for (var i = 0; i < buf.length; i += 2) {\n var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp;\n }\n return buf;\n}\n\nUtf16BEEncoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf16BEDecoder() {\n this.overflowByte = -1;\n}\n\nUtf16BEDecoder.prototype.write = function(buf) {\n if (buf.length == 0)\n return '';\n\n var buf2 = Buffer.alloc(buf.length + 1),\n i = 0, j = 0;\n\n if (this.overflowByte !== -1) {\n buf2[0] = buf[0];\n buf2[1] = this.overflowByte;\n i = 1; j = 2;\n }\n\n for (; i < buf.length-1; i += 2, j+= 2) {\n buf2[j] = buf[i+1];\n buf2[j+1] = buf[i];\n }\n\n this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1;\n\n return buf2.slice(0, j).toString('ucs2');\n}\n\nUtf16BEDecoder.prototype.end = function() {\n this.overflowByte = -1;\n}\n\n\n// == UTF-16 codec =============================================================\n// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic.\n// Defaults to UTF-16LE, as it's prevalent and default in Node.\n// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le\n// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'});\n\n// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false).\n\nexports.utf16 = Utf16Codec;\nfunction Utf16Codec(codecOptions, iconv) {\n this.iconv = iconv;\n}\n\nUtf16Codec.prototype.encoder = Utf16Encoder;\nUtf16Codec.prototype.decoder = Utf16Decoder;\n\n\n// -- Encoding (pass-through)\n\nfunction Utf16Encoder(options, codec) {\n options = options || {};\n if (options.addBOM === undefined)\n options.addBOM = true;\n this.encoder = codec.iconv.getEncoder('utf-16le', options);\n}\n\nUtf16Encoder.prototype.write = function(str) {\n return this.encoder.write(str);\n}\n\nUtf16Encoder.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n// -- Decoding\n\nfunction Utf16Decoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf16Decoder.prototype.write = function(buf) {\n if (!this.decoder) {\n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n \n if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n}\n\nUtf16Decoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n return this.decoder.end();\n}\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 2) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le';\n if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be';\n }\n\n if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;\n if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon.\n // So, we count ASCII as if it was LE or BE, and decide from that.\n if (asciiCharsBE > asciiCharsLE) return 'utf-16be';\n if (asciiCharsBE < asciiCharsLE) return 'utf-16le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-16le';\n}\n\n\n","'use strict';\n\nvar Buffer = require('safer-buffer').Buffer;\n\n// == UTF32-LE/BE codec. ==========================================================\n\nexports._utf32 = Utf32Codec;\n\nfunction Utf32Codec(codecOptions, iconv) {\n this.iconv = iconv;\n this.bomAware = true;\n this.isLE = codecOptions.isLE;\n}\n\nexports.utf32le = { type: '_utf32', isLE: true };\nexports.utf32be = { type: '_utf32', isLE: false };\n\n// Aliases\nexports.ucs4le = 'utf32le';\nexports.ucs4be = 'utf32be';\n\nUtf32Codec.prototype.encoder = Utf32Encoder;\nUtf32Codec.prototype.decoder = Utf32Decoder;\n\n// -- Encoding\n\nfunction Utf32Encoder(options, codec) {\n this.isLE = codec.isLE;\n this.highSurrogate = 0;\n}\n\nUtf32Encoder.prototype.write = function(str) {\n var src = Buffer.from(str, 'ucs2');\n var dst = Buffer.alloc(src.length * 2);\n var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;\n var offset = 0;\n\n for (var i = 0; i < src.length; i += 2) {\n var code = src.readUInt16LE(i);\n var isHighSurrogate = (0xD800 <= code && code < 0xDC00);\n var isLowSurrogate = (0xDC00 <= code && code < 0xE000);\n\n if (this.highSurrogate) {\n if (isHighSurrogate || !isLowSurrogate) {\n // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low\n // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character\n // (technically wrong, but expected by some applications, like Windows file names).\n write32.call(dst, this.highSurrogate, offset);\n offset += 4;\n }\n else {\n // Create 32-bit value from high and low surrogates;\n var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000;\n\n write32.call(dst, codepoint, offset);\n offset += 4;\n this.highSurrogate = 0;\n\n continue;\n }\n }\n\n if (isHighSurrogate)\n this.highSurrogate = code;\n else {\n // Even if the current character is a low surrogate, with no previous high surrogate, we'll\n // encode it as a semi-invalid stand-alone character for the same reasons expressed above for\n // unpaired high surrogates.\n write32.call(dst, code, offset);\n offset += 4;\n this.highSurrogate = 0;\n }\n }\n\n if (offset < dst.length)\n dst = dst.slice(0, offset);\n\n return dst;\n};\n\nUtf32Encoder.prototype.end = function() {\n // Treat any leftover high surrogate as a semi-valid independent character.\n if (!this.highSurrogate)\n return;\n\n var buf = Buffer.alloc(4);\n\n if (this.isLE)\n buf.writeUInt32LE(this.highSurrogate, 0);\n else\n buf.writeUInt32BE(this.highSurrogate, 0);\n\n this.highSurrogate = 0;\n\n return buf;\n};\n\n// -- Decoding\n\nfunction Utf32Decoder(options, codec) {\n this.isLE = codec.isLE;\n this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);\n this.overflow = [];\n}\n\nUtf32Decoder.prototype.write = function(src) {\n if (src.length === 0)\n return '';\n\n var i = 0;\n var codepoint = 0;\n var dst = Buffer.alloc(src.length + 4);\n var offset = 0;\n var isLE = this.isLE;\n var overflow = this.overflow;\n var badChar = this.badChar;\n\n if (overflow.length > 0) {\n for (; i < src.length && overflow.length < 4; i++)\n overflow.push(src[i]);\n \n if (overflow.length === 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer).\n if (isLE) {\n codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24);\n } else {\n codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24);\n }\n overflow.length = 0;\n\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n }\n\n // Main loop. Should be as optimized as possible.\n for (; i < src.length - 3; i += 4) {\n // NOTE: codepoint is a signed int32 and can be negative.\n if (isLE) {\n codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24);\n } else {\n codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24);\n }\n offset = _writeCodepoint(dst, offset, codepoint, badChar);\n }\n\n // Keep overflowing bytes.\n for (; i < src.length; i++) {\n overflow.push(src[i]);\n }\n\n return dst.slice(0, offset).toString('ucs2');\n};\n\nfunction _writeCodepoint(dst, offset, codepoint, badChar) {\n // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations.\n if (codepoint < 0 || codepoint > 0x10FFFF) {\n // Not a valid Unicode codepoint\n codepoint = badChar;\n } \n\n // Ephemeral Planes: Write high surrogate.\n if (codepoint >= 0x10000) {\n codepoint -= 0x10000;\n\n var high = 0xD800 | (codepoint >> 10);\n dst[offset++] = high & 0xff;\n dst[offset++] = high >> 8;\n\n // Low surrogate is written below.\n var codepoint = 0xDC00 | (codepoint & 0x3FF);\n }\n\n // Write BMP char or low surrogate.\n dst[offset++] = codepoint & 0xff;\n dst[offset++] = codepoint >> 8;\n\n return offset;\n};\n\nUtf32Decoder.prototype.end = function() {\n this.overflow.length = 0;\n};\n\n// == UTF-32 Auto codec =============================================================\n// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic.\n// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32\n// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'});\n\n// Encoder prepends BOM (which can be overridden with (addBOM: false}).\n\nexports.utf32 = Utf32AutoCodec;\nexports.ucs4 = 'utf32';\n\nfunction Utf32AutoCodec(options, iconv) {\n this.iconv = iconv;\n}\n\nUtf32AutoCodec.prototype.encoder = Utf32AutoEncoder;\nUtf32AutoCodec.prototype.decoder = Utf32AutoDecoder;\n\n// -- Encoding\n\nfunction Utf32AutoEncoder(options, codec) {\n options = options || {};\n\n if (options.addBOM === undefined)\n options.addBOM = true;\n\n this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options);\n}\n\nUtf32AutoEncoder.prototype.write = function(str) {\n return this.encoder.write(str);\n};\n\nUtf32AutoEncoder.prototype.end = function() {\n return this.encoder.end();\n};\n\n// -- Decoding\n\nfunction Utf32AutoDecoder(options, codec) {\n this.decoder = null;\n this.initialBufs = [];\n this.initialBufsLen = 0;\n this.options = options || {};\n this.iconv = codec.iconv;\n}\n\nUtf32AutoDecoder.prototype.write = function(buf) {\n if (!this.decoder) { \n // Codec is not chosen yet. Accumulate initial bytes.\n this.initialBufs.push(buf);\n this.initialBufsLen += buf.length;\n\n if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below)\n return '';\n\n // We have enough bytes -> detect endianness.\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.write(buf);\n};\n\nUtf32AutoDecoder.prototype.end = function() {\n if (!this.decoder) {\n var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);\n this.decoder = this.iconv.getDecoder(encoding, this.options);\n\n var resStr = '';\n for (var i = 0; i < this.initialBufs.length; i++)\n resStr += this.decoder.write(this.initialBufs[i]);\n\n var trail = this.decoder.end();\n if (trail)\n resStr += trail;\n\n this.initialBufs.length = this.initialBufsLen = 0;\n return resStr;\n }\n\n return this.decoder.end();\n};\n\nfunction detectEncoding(bufs, defaultEncoding) {\n var b = [];\n var charsProcessed = 0;\n var invalidLE = 0, invalidBE = 0; // Number of invalid chars when decoded as LE or BE.\n var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE.\n\n outer_loop:\n for (var i = 0; i < bufs.length; i++) {\n var buf = bufs[i];\n for (var j = 0; j < buf.length; j++) {\n b.push(buf[j]);\n if (b.length === 4) {\n if (charsProcessed === 0) {\n // Check BOM first.\n if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) {\n return 'utf-32le';\n }\n if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) {\n return 'utf-32be';\n }\n }\n\n if (b[0] !== 0 || b[1] > 0x10) invalidBE++;\n if (b[3] !== 0 || b[2] > 0x10) invalidLE++;\n\n if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;\n if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;\n\n b.length = 0;\n charsProcessed++;\n\n if (charsProcessed >= 100) {\n break outer_loop;\n }\n }\n }\n }\n\n // Make decisions.\n if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return 'utf-32be';\n if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return 'utf-32le';\n\n // Couldn't decide (likely all zeros or not enough data).\n return defaultEncoding || 'utf-32le';\n}\n","\"use strict\";\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152\n// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3\n\nexports.utf7 = Utf7Codec;\nexports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7\nfunction Utf7Codec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7Codec.prototype.encoder = Utf7Encoder;\nUtf7Codec.prototype.decoder = Utf7Decoder;\nUtf7Codec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nvar nonDirectChars = /[^A-Za-z0-9'\\(\\),-\\.\\/:\\? \\n\\r\\t]+/g;\n\nfunction Utf7Encoder(options, codec) {\n this.iconv = codec.iconv;\n}\n\nUtf7Encoder.prototype.write = function(str) {\n // Naive implementation.\n // Non-direct chars are encoded as \"+-\"; single \"+\" char is encoded as \"+-\".\n return Buffer.from(str.replace(nonDirectChars, function(chunk) {\n return \"+\" + (chunk === '+' ? '' : \n this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) \n + \"-\";\n }.bind(this)));\n}\n\nUtf7Encoder.prototype.end = function() {\n}\n\n\n// -- Decoding\n\nfunction Utf7Decoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64Regex = /[A-Za-z0-9\\/+]/;\nvar base64Chars = [];\nfor (var i = 0; i < 256; i++)\n base64Chars[i] = base64Regex.test(String.fromCharCode(i));\n\nvar plusChar = '+'.charCodeAt(0), \n minusChar = '-'.charCodeAt(0),\n andChar = '&'.charCodeAt(0);\n\nUtf7Decoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '+'\n if (buf[i] == plusChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64Chars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) {// \"+-\" -> \"+\"\n res += \"+\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\");\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus is absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\");\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7Decoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n// UTF-7-IMAP codec.\n// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3)\n// Differences:\n// * Base64 part is started by \"&\" instead of \"+\"\n// * Direct characters are 0x20-0x7E, except \"&\" (0x26)\n// * In Base64, \",\" is used instead of \"/\"\n// * Base64 must not be used to represent direct characters.\n// * No implicit shift back from Base64 (should always end with '-')\n// * String must end in non-shifted position.\n// * \"-&\" while in base64 is not allowed.\n\n\nexports.utf7imap = Utf7IMAPCodec;\nfunction Utf7IMAPCodec(codecOptions, iconv) {\n this.iconv = iconv;\n};\n\nUtf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;\nUtf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;\nUtf7IMAPCodec.prototype.bomAware = true;\n\n\n// -- Encoding\n\nfunction Utf7IMAPEncoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = Buffer.alloc(6);\n this.base64AccumIdx = 0;\n}\n\nUtf7IMAPEncoder.prototype.write = function(str) {\n var inBase64 = this.inBase64,\n base64Accum = this.base64Accum,\n base64AccumIdx = this.base64AccumIdx,\n buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0;\n\n for (var i = 0; i < str.length; i++) {\n var uChar = str.charCodeAt(i);\n if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'.\n if (inBase64) {\n if (base64AccumIdx > 0) {\n bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n inBase64 = false;\n }\n\n if (!inBase64) {\n buf[bufIdx++] = uChar; // Write direct character\n\n if (uChar === andChar) // Ampersand -> '&-'\n buf[bufIdx++] = minusChar;\n }\n\n } else { // Non-direct character\n if (!inBase64) {\n buf[bufIdx++] = andChar; // Write '&', then go to base64 mode.\n inBase64 = true;\n }\n if (inBase64) {\n base64Accum[base64AccumIdx++] = uChar >> 8;\n base64Accum[base64AccumIdx++] = uChar & 0xFF;\n\n if (base64AccumIdx == base64Accum.length) {\n bufIdx += buf.write(base64Accum.toString('base64').replace(/\\//g, ','), bufIdx);\n base64AccumIdx = 0;\n }\n }\n }\n }\n\n this.inBase64 = inBase64;\n this.base64AccumIdx = base64AccumIdx;\n\n return buf.slice(0, bufIdx);\n}\n\nUtf7IMAPEncoder.prototype.end = function() {\n var buf = Buffer.alloc(10), bufIdx = 0;\n if (this.inBase64) {\n if (this.base64AccumIdx > 0) {\n bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\\//g, ',').replace(/=+$/, ''), bufIdx);\n this.base64AccumIdx = 0;\n }\n\n buf[bufIdx++] = minusChar; // Write '-', then go to direct mode.\n this.inBase64 = false;\n }\n\n return buf.slice(0, bufIdx);\n}\n\n\n// -- Decoding\n\nfunction Utf7IMAPDecoder(options, codec) {\n this.iconv = codec.iconv;\n this.inBase64 = false;\n this.base64Accum = '';\n}\n\nvar base64IMAPChars = base64Chars.slice();\nbase64IMAPChars[','.charCodeAt(0)] = true;\n\nUtf7IMAPDecoder.prototype.write = function(buf) {\n var res = \"\", lastI = 0,\n inBase64 = this.inBase64,\n base64Accum = this.base64Accum;\n\n // The decoder is more involved as we must handle chunks in stream.\n // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end).\n\n for (var i = 0; i < buf.length; i++) {\n if (!inBase64) { // We're in direct mode.\n // Write direct chars until '&'\n if (buf[i] == andChar) {\n res += this.iconv.decode(buf.slice(lastI, i), \"ascii\"); // Write direct chars.\n lastI = i+1;\n inBase64 = true;\n }\n } else { // We decode base64.\n if (!base64IMAPChars[buf[i]]) { // Base64 ended.\n if (i == lastI && buf[i] == minusChar) { // \"&-\" -> \"&\"\n res += \"&\";\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), \"ascii\").replace(/,/g, '/');\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n if (buf[i] != minusChar) // Minus may be absorbed after base64.\n i--;\n\n lastI = i+1;\n inBase64 = false;\n base64Accum = '';\n }\n }\n }\n\n if (!inBase64) {\n res += this.iconv.decode(buf.slice(lastI), \"ascii\"); // Write direct chars.\n } else {\n var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), \"ascii\").replace(/,/g, '/');\n\n var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars.\n base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future.\n b64str = b64str.slice(0, canBeDecoded);\n\n res += this.iconv.decode(Buffer.from(b64str, 'base64'), \"utf16-be\");\n }\n\n this.inBase64 = inBase64;\n this.base64Accum = base64Accum;\n\n return res;\n}\n\nUtf7IMAPDecoder.prototype.end = function() {\n var res = \"\";\n if (this.inBase64 && this.base64Accum.length > 0)\n res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), \"utf16-be\");\n\n this.inBase64 = false;\n this.base64Accum = '';\n return res;\n}\n\n\n","\"use strict\";\n\nvar BOMChar = '\\uFEFF';\n\nexports.PrependBOM = PrependBOMWrapper\nfunction PrependBOMWrapper(encoder, options) {\n this.encoder = encoder;\n this.addBOM = true;\n}\n\nPrependBOMWrapper.prototype.write = function(str) {\n if (this.addBOM) {\n str = BOMChar + str;\n this.addBOM = false;\n }\n\n return this.encoder.write(str);\n}\n\nPrependBOMWrapper.prototype.end = function() {\n return this.encoder.end();\n}\n\n\n//------------------------------------------------------------------------------\n\nexports.StripBOM = StripBOMWrapper;\nfunction StripBOMWrapper(decoder, options) {\n this.decoder = decoder;\n this.pass = false;\n this.options = options || {};\n}\n\nStripBOMWrapper.prototype.write = function(buf) {\n var res = this.decoder.write(buf);\n if (this.pass || !res)\n return res;\n\n if (res[0] === BOMChar) {\n res = res.slice(1);\n if (typeof this.options.stripBOM === 'function')\n this.options.stripBOM();\n }\n\n this.pass = true;\n return res;\n}\n\nStripBOMWrapper.prototype.end = function() {\n return this.decoder.end();\n}\n\n","\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\nvar bomHandling = require(\"./bom-handling\"),\n iconv = module.exports;\n\n// All codecs and aliases are kept here, keyed by encoding name/alias.\n// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`.\niconv.encodings = null;\n\n// Characters emitted in case of error.\niconv.defaultCharUnicode = '�';\niconv.defaultCharSingleByte = '?';\n\n// Public API.\niconv.encode = function encode(str, encoding, options) {\n str = \"\" + (str || \"\"); // Ensure string.\n\n var encoder = iconv.getEncoder(encoding, options);\n\n var res = encoder.write(str);\n var trail = encoder.end();\n \n return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res;\n}\n\niconv.decode = function decode(buf, encoding, options) {\n if (typeof buf === 'string') {\n if (!iconv.skipDecodeWarning) {\n console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding');\n iconv.skipDecodeWarning = true;\n }\n\n buf = Buffer.from(\"\" + (buf || \"\"), \"binary\"); // Ensure buffer.\n }\n\n var decoder = iconv.getDecoder(encoding, options);\n\n var res = decoder.write(buf);\n var trail = decoder.end();\n\n return trail ? (res + trail) : res;\n}\n\niconv.encodingExists = function encodingExists(enc) {\n try {\n iconv.getCodec(enc);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// Legacy aliases to convert functions\niconv.toEncoding = iconv.encode;\niconv.fromEncoding = iconv.decode;\n\n// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache.\niconv._codecDataCache = {};\niconv.getCodec = function getCodec(encoding) {\n if (!iconv.encodings)\n iconv.encodings = require(\"../encodings\"); // Lazy load all encoding definitions.\n \n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n var enc = iconv._canonicalizeEncoding(encoding);\n\n // Traverse iconv.encodings to find actual codec.\n var codecOptions = {};\n while (true) {\n var codec = iconv._codecDataCache[enc];\n if (codec)\n return codec;\n\n var codecDef = iconv.encodings[enc];\n\n switch (typeof codecDef) {\n case \"string\": // Direct alias to other encoding.\n enc = codecDef;\n break;\n\n case \"object\": // Alias with options. Can be layered.\n for (var key in codecDef)\n codecOptions[key] = codecDef[key];\n\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n \n enc = codecDef.type;\n break;\n\n case \"function\": // Codec itself.\n if (!codecOptions.encodingName)\n codecOptions.encodingName = enc;\n\n // The codec function must load all tables and return object with .encoder and .decoder methods.\n // It'll be called only once (for each different options object).\n codec = new codecDef(codecOptions, iconv);\n\n iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later.\n return codec;\n\n default:\n throw new Error(\"Encoding not recognized: '\" + encoding + \"' (searched as: '\"+enc+\"')\");\n }\n }\n}\n\niconv._canonicalizeEncoding = function(encoding) {\n // Canonicalize encoding name: strip all non-alphanumeric chars and appended year.\n return (''+encoding).toLowerCase().replace(/:\\d{4}$|[^0-9a-z]/g, \"\");\n}\n\niconv.getEncoder = function getEncoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n encoder = new codec.encoder(options, codec);\n\n if (codec.bomAware && options && options.addBOM)\n encoder = new bomHandling.PrependBOM(encoder, options);\n\n return encoder;\n}\n\niconv.getDecoder = function getDecoder(encoding, options) {\n var codec = iconv.getCodec(encoding),\n decoder = new codec.decoder(options, codec);\n\n if (codec.bomAware && !(options && options.stripBOM === false))\n decoder = new bomHandling.StripBOM(decoder, options);\n\n return decoder;\n}\n\n// Streaming API\n// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add\n// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default.\n// If you would like to enable it explicitly, please add the following code to your app:\n// > iconv.enableStreamingAPI(require('stream'));\niconv.enableStreamingAPI = function enableStreamingAPI(stream_module) {\n if (iconv.supportsStreams)\n return;\n\n // Dependency-inject stream module to create IconvLite stream classes.\n var streams = require(\"./streams\")(stream_module);\n\n // Not public API yet, but expose the stream classes.\n iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;\n iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;\n\n // Streaming API.\n iconv.encodeStream = function encodeStream(encoding, options) {\n return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options);\n }\n\n iconv.decodeStream = function decodeStream(encoding, options) {\n return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options);\n }\n\n iconv.supportsStreams = true;\n}\n\n// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments).\nvar stream_module;\ntry {\n stream_module = require(\"stream\");\n} catch (e) {}\n\nif (stream_module && stream_module.Transform) {\n iconv.enableStreamingAPI(stream_module);\n\n} else {\n // In rare cases where 'stream' module is not available by default, throw a helpful exception.\n iconv.encodeStream = iconv.decodeStream = function() {\n throw new Error(\"iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.\");\n };\n}\n\nif (\"Ā\" != \"\\u0100\") {\n console.error(\"iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.\");\n}\n","\"use strict\";\n\nvar Buffer = require(\"safer-buffer\").Buffer;\n\n// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), \n// we opt to dependency-inject it instead of creating a hard dependency.\nmodule.exports = function(stream_module) {\n var Transform = stream_module.Transform;\n\n // == Encoder stream =======================================================\n\n function IconvLiteEncoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.decodeStrings = false; // We accept only strings, so we don't need to decode them.\n Transform.call(this, options);\n }\n\n IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteEncoderStream }\n });\n\n IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {\n if (typeof chunk != 'string')\n return done(new Error(\"Iconv encoding stream needs strings as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteEncoderStream.prototype.collect = function(cb) {\n var chunks = [];\n this.on('error', cb);\n this.on('data', function(chunk) { chunks.push(chunk); });\n this.on('end', function() {\n cb(null, Buffer.concat(chunks));\n });\n return this;\n }\n\n\n // == Decoder stream =======================================================\n\n function IconvLiteDecoderStream(conv, options) {\n this.conv = conv;\n options = options || {};\n options.encoding = this.encoding = 'utf8'; // We output strings.\n Transform.call(this, options);\n }\n\n IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, {\n constructor: { value: IconvLiteDecoderStream }\n });\n\n IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {\n if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array))\n return done(new Error(\"Iconv decoding stream needs buffers as its input.\"));\n try {\n var res = this.conv.write(chunk);\n if (res && res.length) this.push(res, this.encoding);\n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype._flush = function(done) {\n try {\n var res = this.conv.end();\n if (res && res.length) this.push(res, this.encoding); \n done();\n }\n catch (e) {\n done(e);\n }\n }\n\n IconvLiteDecoderStream.prototype.collect = function(cb) {\n var res = '';\n this.on('error', cb);\n this.on('data', function(chunk) { res += chunk; });\n this.on('end', function() {\n cb(null, res);\n });\n return this;\n }\n\n return {\n IconvLiteEncoderStream: IconvLiteEncoderStream,\n IconvLiteDecoderStream: IconvLiteDecoderStream,\n };\n};\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar callBound = require('call-bind/callBound');\n\nvar $toString = callBound('Object.prototype.toString');\n\nvar isStandardArguments = function isArguments(value) {\n\tif (hasToStringTag && value && typeof value === 'object' && Symbol.toStringTag in value) {\n\t\treturn false;\n\t}\n\treturn $toString(value) === '[object Arguments]';\n};\n\nvar isLegacyArguments = function isArguments(value) {\n\tif (isStandardArguments(value)) {\n\t\treturn true;\n\t}\n\treturn value !== null &&\n\t\ttypeof value === 'object' &&\n\t\ttypeof value.length === 'number' &&\n\t\tvalue.length >= 0 &&\n\t\t$toString(value) !== '[object Array]' &&\n\t\t$toString(value.callee) === '[object Function]';\n};\n\nvar supportsStandardArguments = (function () {\n\treturn isStandardArguments(arguments);\n}());\n\nisStandardArguments.isLegacyArguments = isLegacyArguments; // for tests\n\nmodule.exports = supportsStandardArguments ? isStandardArguments : isLegacyArguments;\n","'use strict';\n\nvar fnToStr = Function.prototype.toString;\nvar reflectApply = typeof Reflect === 'object' && Reflect !== null && Reflect.apply;\nvar badArrayLike;\nvar isCallableMarker;\nif (typeof reflectApply === 'function' && typeof Object.defineProperty === 'function') {\n\ttry {\n\t\tbadArrayLike = Object.defineProperty({}, 'length', {\n\t\t\tget: function () {\n\t\t\t\tthrow isCallableMarker;\n\t\t\t}\n\t\t});\n\t\tisCallableMarker = {};\n\t\t// eslint-disable-next-line no-throw-literal\n\t\treflectApply(function () { throw 42; }, null, badArrayLike);\n\t} catch (_) {\n\t\tif (_ !== isCallableMarker) {\n\t\t\treflectApply = null;\n\t\t}\n\t}\n} else {\n\treflectApply = null;\n}\n\nvar constructorRegex = /^\\s*class\\b/;\nvar isES6ClassFn = function isES6ClassFunction(value) {\n\ttry {\n\t\tvar fnStr = fnToStr.call(value);\n\t\treturn constructorRegex.test(fnStr);\n\t} catch (e) {\n\t\treturn false; // not a function\n\t}\n};\n\nvar tryFunctionObject = function tryFunctionToStr(value) {\n\ttry {\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tfnToStr.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\nvar toStr = Object.prototype.toString;\nvar objectClass = '[object Object]';\nvar fnClass = '[object Function]';\nvar genClass = '[object GeneratorFunction]';\nvar ddaClass = '[object HTMLAllCollection]'; // IE 11\nvar ddaClass2 = '[object HTML document.all class]';\nvar ddaClass3 = '[object HTMLCollection]'; // IE 9-10\nvar hasToStringTag = typeof Symbol === 'function' && !!Symbol.toStringTag; // better: use `has-tostringtag`\n\nvar isIE68 = !(0 in [,]); // eslint-disable-line no-sparse-arrays, comma-spacing\n\nvar isDDA = function isDocumentDotAll() { return false; };\nif (typeof document === 'object') {\n\t// Firefox 3 canonicalizes DDA to undefined when it's not accessed directly\n\tvar all = document.all;\n\tif (toStr.call(all) === toStr.call(document.all)) {\n\t\tisDDA = function isDocumentDotAll(value) {\n\t\t\t/* globals document: false */\n\t\t\t// in IE 6-8, typeof document.all is \"object\" and it's truthy\n\t\t\tif ((isIE68 || !value) && (typeof value === 'undefined' || typeof value === 'object')) {\n\t\t\t\ttry {\n\t\t\t\t\tvar str = toStr.call(value);\n\t\t\t\t\treturn (\n\t\t\t\t\t\tstr === ddaClass\n\t\t\t\t\t\t|| str === ddaClass2\n\t\t\t\t\t\t|| str === ddaClass3 // opera 12.16\n\t\t\t\t\t\t|| str === objectClass // IE 6-8\n\t\t\t\t\t) && value('') == null; // eslint-disable-line eqeqeq\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\t}\n}\n\nmodule.exports = reflectApply\n\t? function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\ttry {\n\t\t\treflectApply(value, null, badArrayLike);\n\t\t} catch (e) {\n\t\t\tif (e !== isCallableMarker) { return false; }\n\t\t}\n\t\treturn !isES6ClassFn(value) && tryFunctionObject(value);\n\t}\n\t: function isCallable(value) {\n\t\tif (isDDA(value)) { return true; }\n\t\tif (!value) { return false; }\n\t\tif (typeof value !== 'function' && typeof value !== 'object') { return false; }\n\t\tif (hasToStringTag) { return tryFunctionObject(value); }\n\t\tif (isES6ClassFn(value)) { return false; }\n\t\tvar strClass = toStr.call(value);\n\t\tif (strClass !== fnClass && strClass !== genClass && !(/^\\[object HTML/).test(strClass)) { return false; }\n\t\treturn tryFunctionObject(value);\n\t};\n","'use strict';\n\nvar getDay = Date.prototype.getDay;\nvar tryDateObject = function tryDateGetDayCall(value) {\n\ttry {\n\t\tgetDay.call(value);\n\t\treturn true;\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar toStr = Object.prototype.toString;\nvar dateClass = '[object Date]';\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nmodule.exports = function isDateObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn hasToStringTag ? tryDateObject(value) : toStr.call(value) === dateClass;\n};\n","'use strict';\n\nvar toStr = Object.prototype.toString;\nvar fnToStr = Function.prototype.toString;\nvar isFnRegex = /^\\s*(?:function)?\\*/;\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar getProto = Object.getPrototypeOf;\nvar getGeneratorFunc = function () { // eslint-disable-line consistent-return\n\tif (!hasToStringTag) {\n\t\treturn false;\n\t}\n\ttry {\n\t\treturn Function('return function*() {}')();\n\t} catch (e) {\n\t}\n};\nvar GeneratorFunction;\n\nmodule.exports = function isGeneratorFunction(fn) {\n\tif (typeof fn !== 'function') {\n\t\treturn false;\n\t}\n\tif (isFnRegex.test(fnToStr.call(fn))) {\n\t\treturn true;\n\t}\n\tif (!hasToStringTag) {\n\t\tvar str = toStr.call(fn);\n\t\treturn str === '[object GeneratorFunction]';\n\t}\n\tif (!getProto) {\n\t\treturn false;\n\t}\n\tif (typeof GeneratorFunction === 'undefined') {\n\t\tvar generatorFunc = getGeneratorFunc();\n\t\tGeneratorFunction = generatorFunc ? getProto(generatorFunc) : false;\n\t}\n\treturn getProto(fn) === GeneratorFunction;\n};\n","'use strict';\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function isNaN(value) {\n\treturn value !== value;\n};\n","'use strict';\n\nvar callBind = require('call-bind');\nvar define = require('define-properties');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Number);\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\tif (Number.isNaN && Number.isNaN(NaN) && !Number.isNaN('a')) {\n\t\treturn Number.isNaN;\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar define = require('define-properties');\nvar getPolyfill = require('./polyfill');\n\n/* http://www.ecma-international.org/ecma-262/6.0/#sec-number.isnan */\n\nmodule.exports = function shimNumberIsNaN() {\n\tvar polyfill = getPolyfill();\n\tdefine(Number, { isNaN: polyfill }, {\n\t\tisNaN: function testIsNaN() {\n\t\t\treturn Number.isNaN !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar callBound = require('call-bind/callBound');\nvar hasToStringTag = require('has-tostringtag/shams')();\nvar has;\nvar $exec;\nvar isRegexMarker;\nvar badStringifier;\n\nif (hasToStringTag) {\n\thas = callBound('Object.prototype.hasOwnProperty');\n\t$exec = callBound('RegExp.prototype.exec');\n\tisRegexMarker = {};\n\n\tvar throwRegexMarker = function () {\n\t\tthrow isRegexMarker;\n\t};\n\tbadStringifier = {\n\t\ttoString: throwRegexMarker,\n\t\tvalueOf: throwRegexMarker\n\t};\n\n\tif (typeof Symbol.toPrimitive === 'symbol') {\n\t\tbadStringifier[Symbol.toPrimitive] = throwRegexMarker;\n\t}\n}\n\nvar $toString = callBound('Object.prototype.toString');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar regexClass = '[object RegExp]';\n\nmodule.exports = hasToStringTag\n\t// eslint-disable-next-line consistent-return\n\t? function isRegex(value) {\n\t\tif (!value || typeof value !== 'object') {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar descriptor = gOPD(value, 'lastIndex');\n\t\tvar hasLastIndexDataProperty = descriptor && has(descriptor, 'value');\n\t\tif (!hasLastIndexDataProperty) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t$exec(value, badStringifier);\n\t\t} catch (e) {\n\t\t\treturn e === isRegexMarker;\n\t\t}\n\t}\n\t: function isRegex(value) {\n\t\t// In older browsers, typeof regex incorrectly returns 'function'\n\t\tif (!value || (typeof value !== 'object' && typeof value !== 'function')) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn $toString(value) === regexClass;\n\t};\n","'use strict';\n\nvar whichTypedArray = require('which-typed-array');\n\n/** @type {import('.')} */\nmodule.exports = function isTypedArray(value) {\n\treturn !!whichTypedArray(value);\n};\n","'use strict';\n\nvar numberIsNaN = function (value) {\n\treturn value !== value;\n};\n\nmodule.exports = function is(a, b) {\n\tif (a === 0 && b === 0) {\n\t\treturn 1 / a === 1 / b;\n\t}\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (numberIsNaN(a) && numberIsNaN(b)) {\n\t\treturn true;\n\t}\n\treturn false;\n};\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar polyfill = callBind(getPolyfill(), Object);\n\ndefine(polyfill, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = polyfill;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = function getPolyfill() {\n\treturn typeof Object.is === 'function' ? Object.is : implementation;\n};\n","'use strict';\n\nvar getPolyfill = require('./polyfill');\nvar define = require('define-properties');\n\nmodule.exports = function shimObjectIs() {\n\tvar polyfill = getPolyfill();\n\tdefine(Object, { is: polyfill }, {\n\t\tis: function testObjectIs() {\n\t\t\treturn Object.is !== polyfill;\n\t\t}\n\t});\n\treturn polyfill;\n};\n","'use strict';\n\nvar keysShim;\nif (!Object.keys) {\n\t// modified from https://github.com/es-shims/es5-shim\n\tvar has = Object.prototype.hasOwnProperty;\n\tvar toStr = Object.prototype.toString;\n\tvar isArgs = require('./isArguments'); // eslint-disable-line global-require\n\tvar isEnumerable = Object.prototype.propertyIsEnumerable;\n\tvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\n\tvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\n\tvar dontEnums = [\n\t\t'toString',\n\t\t'toLocaleString',\n\t\t'valueOf',\n\t\t'hasOwnProperty',\n\t\t'isPrototypeOf',\n\t\t'propertyIsEnumerable',\n\t\t'constructor'\n\t];\n\tvar equalsConstructorPrototype = function (o) {\n\t\tvar ctor = o.constructor;\n\t\treturn ctor && ctor.prototype === o;\n\t};\n\tvar excludedKeys = {\n\t\t$applicationCache: true,\n\t\t$console: true,\n\t\t$external: true,\n\t\t$frame: true,\n\t\t$frameElement: true,\n\t\t$frames: true,\n\t\t$innerHeight: true,\n\t\t$innerWidth: true,\n\t\t$onmozfullscreenchange: true,\n\t\t$onmozfullscreenerror: true,\n\t\t$outerHeight: true,\n\t\t$outerWidth: true,\n\t\t$pageXOffset: true,\n\t\t$pageYOffset: true,\n\t\t$parent: true,\n\t\t$scrollLeft: true,\n\t\t$scrollTop: true,\n\t\t$scrollX: true,\n\t\t$scrollY: true,\n\t\t$self: true,\n\t\t$webkitIndexedDB: true,\n\t\t$webkitStorageInfo: true,\n\t\t$window: true\n\t};\n\tvar hasAutomationEqualityBug = (function () {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined') { return false; }\n\t\tfor (var k in window) {\n\t\t\ttry {\n\t\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}());\n\tvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t\t/* global window */\n\t\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t}\n\t\ttry {\n\t\t\treturn equalsConstructorPrototype(o);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t};\n\n\tkeysShim = function keys(object) {\n\t\tvar isObject = object !== null && typeof object === 'object';\n\t\tvar isFunction = toStr.call(object) === '[object Function]';\n\t\tvar isArguments = isArgs(object);\n\t\tvar isString = isObject && toStr.call(object) === '[object String]';\n\t\tvar theKeys = [];\n\n\t\tif (!isObject && !isFunction && !isArguments) {\n\t\t\tthrow new TypeError('Object.keys called on a non-object');\n\t\t}\n\n\t\tvar skipProto = hasProtoEnumBug && isFunction;\n\t\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\t\ttheKeys.push(String(i));\n\t\t\t}\n\t\t}\n\n\t\tif (isArguments && object.length > 0) {\n\t\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\t\ttheKeys.push(String(j));\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var name in object) {\n\t\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\t\ttheKeys.push(String(name));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (hasDontEnumBug) {\n\t\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn theKeys;\n\t};\n}\nmodule.exports = keysShim;\n","'use strict';\n\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\n\nvar origKeys = Object.keys;\nvar keysShim = origKeys ? function keys(o) { return origKeys(o); } : require('./implementation');\n\nvar originalKeys = Object.keys;\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\tvar args = Object.keys(arguments);\n\t\t\treturn args && args.length === arguments.length;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tObject.keys = function keys(object) { // eslint-disable-line func-name-matching\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t}\n\t\t\t\treturn originalKeys(object);\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es6-shim\nvar objectKeys = require('object-keys');\nvar hasSymbols = require('has-symbols/shams')();\nvar callBound = require('call-bind/callBound');\nvar toObject = Object;\nvar $push = callBound('Array.prototype.push');\nvar $propIsEnumerable = callBound('Object.prototype.propertyIsEnumerable');\nvar originalGetSymbols = hasSymbols ? Object.getOwnPropertySymbols : null;\n\n// eslint-disable-next-line no-unused-vars\nmodule.exports = function assign(target, source1) {\n\tif (target == null) { throw new TypeError('target must be an object'); }\n\tvar to = toObject(target); // step 1\n\tif (arguments.length === 1) {\n\t\treturn to; // step 2\n\t}\n\tfor (var s = 1; s < arguments.length; ++s) {\n\t\tvar from = toObject(arguments[s]); // step 3.a.i\n\n\t\t// step 3.a.ii:\n\t\tvar keys = objectKeys(from);\n\t\tvar getSymbols = hasSymbols && (Object.getOwnPropertySymbols || originalGetSymbols);\n\t\tif (getSymbols) {\n\t\t\tvar syms = getSymbols(from);\n\t\t\tfor (var j = 0; j < syms.length; ++j) {\n\t\t\t\tvar key = syms[j];\n\t\t\t\tif ($propIsEnumerable(from, key)) {\n\t\t\t\t\t$push(keys, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// step 3.a.iii:\n\t\tfor (var i = 0; i < keys.length; ++i) {\n\t\t\tvar nextKey = keys[i];\n\t\t\tif ($propIsEnumerable(from, nextKey)) { // step 3.a.iii.2\n\t\t\t\tvar propValue = from[nextKey]; // step 3.a.iii.2.a\n\t\t\t\tto[nextKey] = propValue; // step 3.a.iii.2.b\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to; // step 4\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar lacksProperEnumerationOrder = function () {\n\tif (!Object.assign) {\n\t\treturn false;\n\t}\n\t/*\n\t * v8, specifically in node 4.x, has a bug with incorrect property enumeration order\n\t * note: this does not detect the bug unless there's 20 characters\n\t */\n\tvar str = 'abcdefghijklmnopqrst';\n\tvar letters = str.split('');\n\tvar map = {};\n\tfor (var i = 0; i < letters.length; ++i) {\n\t\tmap[letters[i]] = letters[i];\n\t}\n\tvar obj = Object.assign({}, map);\n\tvar actual = '';\n\tfor (var k in obj) {\n\t\tactual += k;\n\t}\n\treturn str !== actual;\n};\n\nvar assignHasPendingExceptions = function () {\n\tif (!Object.assign || !Object.preventExtensions) {\n\t\treturn false;\n\t}\n\t/*\n\t * Firefox 37 still has \"pending exception\" logic in its Object.assign implementation,\n\t * which is 72% slower than our shim, and Firefox 40's native implementation.\n\t */\n\tvar thrower = Object.preventExtensions({ 1: 2 });\n\ttry {\n\t\tObject.assign(thrower, 'xy');\n\t} catch (e) {\n\t\treturn thrower[1] === 'y';\n\t}\n\treturn false;\n};\n\nmodule.exports = function getPolyfill() {\n\tif (!Object.assign) {\n\t\treturn implementation;\n\t}\n\tif (lacksProperEnumerationOrder()) {\n\t\treturn implementation;\n\t}\n\tif (assignHasPendingExceptions()) {\n\t\treturn implementation;\n\t}\n\treturn Object.assign;\n};\n","'use strict';\n\n\nvar TYPED_OK = (typeof Uint8Array !== 'undefined') &&\n (typeof Uint16Array !== 'undefined') &&\n (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n var sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n var source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (var p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n if (buf.length === size) { return buf; }\n if (buf.subarray) { return buf.subarray(0, size); }\n buf.length = size;\n return buf;\n};\n\n\nvar fnTyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n if (src.subarray && dest.subarray) {\n dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n return;\n }\n // Fallback to ordinary array\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n var i, l, len, pos, chunk, result;\n\n // calculate data length\n len = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n result = new Uint8Array(len);\n pos = 0;\n for (i = 0, l = chunks.length; i < l; i++) {\n chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n }\n};\n\nvar fnUntyped = {\n arraySet: function (dest, src, src_offs, len, dest_offs) {\n for (var i = 0; i < len; i++) {\n dest[dest_offs + i] = src[src_offs + i];\n }\n },\n // Join array of chunks to single array.\n flattenChunks: function (chunks) {\n return [].concat.apply([], chunks);\n }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n if (on) {\n exports.Buf8 = Uint8Array;\n exports.Buf16 = Uint16Array;\n exports.Buf32 = Int32Array;\n exports.assign(exports, fnTyped);\n } else {\n exports.Buf8 = Array;\n exports.Buf16 = Array;\n exports.Buf32 = Array;\n exports.assign(exports, fnUntyped);\n }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n var s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n //Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n var c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n var t = crcTable,\n end = pos + len;\n\n crc ^= -1;\n\n for (var i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar trees = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar msg = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\n//var Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\n//var Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\n//var Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION = 0;\n//var Z_BEST_SPEED = 1;\n//var Z_BEST_COMPRESSION = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY = 0;\n//var Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES = 30;\n/* number of distance codes */\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n strm.msg = msg[errorCode];\n return errorCode;\n}\n\nfunction rank(f) {\n return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n var s = strm.state;\n\n //_tr_flush_bits(s);\n var len = s.pending;\n if (len > strm.avail_out) {\n len = strm.avail_out;\n }\n if (len === 0) { return; }\n\n utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n strm.next_out += len;\n s.pending_out += len;\n strm.total_out += len;\n strm.avail_out -= len;\n s.pending -= len;\n if (s.pending === 0) {\n s.pending_out = 0;\n }\n}\n\n\nfunction flush_block_only(s, last) {\n trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n s.block_start = s.strstart;\n flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n// put_byte(s, (Byte)(b >> 8));\n// put_byte(s, (Byte)(b & 0xff));\n s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read. All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n var len = strm.avail_in;\n\n if (len > size) { len = size; }\n if (len === 0) { return 0; }\n\n strm.avail_in -= len;\n\n // zmemcpy(buf, strm->next_in, len);\n utils.arraySet(buf, strm.input, strm.next_in, len, start);\n if (strm.state.wrap === 1) {\n strm.adler = adler32(strm.adler, buf, len, start);\n }\n\n else if (strm.state.wrap === 2) {\n strm.adler = crc32(strm.adler, buf, len, start);\n }\n\n strm.next_in += len;\n strm.total_in += len;\n\n return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n var chain_length = s.max_chain_length; /* max hash chain length */\n var scan = s.strstart; /* current string */\n var match; /* matched string */\n var len; /* length of current match */\n var best_len = s.prev_length; /* best match length so far */\n var nice_match = s.nice_match; /* stop if match long enough */\n var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n var _win = s.window; // shortcut\n\n var wmask = s.w_mask;\n var prev = s.prev;\n\n /* Stop when cur_match becomes <= limit. To simplify the code,\n * we prevent matches with the string of window index 0.\n */\n\n var strend = s.strstart + MAX_MATCH;\n var scan_end1 = _win[scan + best_len - 1];\n var scan_end = _win[scan + best_len];\n\n /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n * It is easy to get rid of this optimization if necessary.\n */\n // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n /* Do not waste too much time if we already have a good match: */\n if (s.prev_length >= s.good_match) {\n chain_length >>= 2;\n }\n /* Do not look for matches beyond the end of the input. This is necessary\n * to make deflate deterministic.\n */\n if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n do {\n // Assert(cur_match < s->strstart, \"no future\");\n match = cur_match;\n\n /* Skip to next match if the match length cannot increase\n * or if the match length is less than 2. Note that the checks below\n * for insufficient lookahead only occur occasionally for performance\n * reasons. Therefore uninitialized memory will be accessed, and\n * conditional jumps will be made that depend on those values.\n * However the length of the match is limited to the lookahead, so\n * the output of deflate is not affected by the uninitialized values.\n */\n\n if (_win[match + best_len] !== scan_end ||\n _win[match + best_len - 1] !== scan_end1 ||\n _win[match] !== _win[scan] ||\n _win[++match] !== _win[scan + 1]) {\n continue;\n }\n\n /* The check at best_len-1 can be removed because it will be made\n * again later. (This heuristic is not always a win.)\n * It is not necessary to compare scan[2] and match[2] since they\n * are always equal when the other bytes match, given that\n * the hash keys are equal and that HASH_BITS >= 8.\n */\n scan += 2;\n match++;\n // Assert(*scan == *match, \"match[2]?\");\n\n /* We check for insufficient lookahead only every 8th comparison;\n * the 256th check will be made at strstart+258.\n */\n do {\n /*jshint noempty:false*/\n } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n scan < strend);\n\n // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n len = MAX_MATCH - (strend - scan);\n scan = strend - MAX_MATCH;\n\n if (len > best_len) {\n s.match_start = cur_match;\n best_len = len;\n if (len >= nice_match) {\n break;\n }\n scan_end1 = _win[scan + best_len - 1];\n scan_end = _win[scan + best_len];\n }\n } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n if (best_len <= s.lookahead) {\n return best_len;\n }\n return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n * At least one byte has been read, or avail_in == 0; reads are\n * performed for at least two bytes (required for the zip translate_eol\n * option -- not supported here).\n */\nfunction fill_window(s) {\n var _w_size = s.w_size;\n var p, n, m, more, str;\n\n //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n do {\n more = s.window_size - s.lookahead - s.strstart;\n\n // JS ints have 32 bit, block below not needed\n /* Deal with !@#$% 64K limit: */\n //if (sizeof(int) <= 2) {\n // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n // more = wsize;\n //\n // } else if (more == (unsigned)(-1)) {\n // /* Very unlikely, but possible on 16 bit machine if\n // * strstart == 0 && lookahead == 1 (input done a byte at time)\n // */\n // more--;\n // }\n //}\n\n\n /* If the window is almost full and there is insufficient lookahead,\n * move the upper half to the lower one to make room in the upper half.\n */\n if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n s.match_start -= _w_size;\n s.strstart -= _w_size;\n /* we now have strstart >= MAX_DIST */\n s.block_start -= _w_size;\n\n /* Slide the hash table (could be avoided with 32 bit values\n at the expense of memory usage). We slide even when level == 0\n to keep the hash table consistent if we switch back to level > 0\n later. (Using level 0 permanently is not an optimal usage of\n zlib, so we don't care about this pathological case.)\n */\n\n n = s.hash_size;\n p = n;\n do {\n m = s.head[--p];\n s.head[p] = (m >= _w_size ? m - _w_size : 0);\n } while (--n);\n\n n = _w_size;\n p = n;\n do {\n m = s.prev[--p];\n s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n /* If n is not on any hash chain, prev[n] is garbage but\n * its value will never be used.\n */\n } while (--n);\n\n more += _w_size;\n }\n if (s.strm.avail_in === 0) {\n break;\n }\n\n /* If there was no sliding:\n * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n * more == window_size - lookahead - strstart\n * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n * => more >= window_size - 2*WSIZE + 2\n * In the BIG_MEM or MMAP case (not yet supported),\n * window_size == input_size + MIN_LOOKAHEAD &&\n * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n * Otherwise, window_size == 2*WSIZE so more >= 2.\n * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n */\n //Assert(more >= 2, \"more < 2\");\n n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n s.lookahead += n;\n\n /* Initialize the hash value now that we have some input: */\n if (s.lookahead + s.insert >= MIN_MATCH) {\n str = s.strstart - s.insert;\n s.ins_h = s.window[str];\n\n /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n// Call update_hash() MIN_MATCH-3 more times\n//#endif\n while (s.insert) {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = str;\n str++;\n s.insert--;\n if (s.lookahead + s.insert < MIN_MATCH) {\n break;\n }\n }\n }\n /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n * but this is not important since only literal bytes will be emitted.\n */\n\n } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n /* If the WIN_INIT bytes after the end of the current data have never been\n * written, then zero those bytes in order to avoid memory check reports of\n * the use of uninitialized (or uninitialised as Julian writes) bytes by\n * the longest match routines. Update the high water mark for the next\n * time through here. WIN_INIT is set to MAX_MATCH since the longest match\n * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n */\n// if (s.high_water < s.window_size) {\n// var curr = s.strstart + s.lookahead;\n// var init = 0;\n//\n// if (s.high_water < curr) {\n// /* Previous high water mark below current data -- zero WIN_INIT\n// * bytes or up to end of window, whichever is less.\n// */\n// init = s.window_size - curr;\n// if (init > WIN_INIT)\n// init = WIN_INIT;\n// zmemzero(s->window + curr, (unsigned)init);\n// s->high_water = curr + init;\n// }\n// else if (s->high_water < (ulg)curr + WIN_INIT) {\n// /* High water mark at or above current data, but below current data\n// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n// * to end of window, whichever is less.\n// */\n// init = (ulg)curr + WIN_INIT - s->high_water;\n// if (init > s->window_size - s->high_water)\n// init = s->window_size - s->high_water;\n// zmemzero(s->window + s->high_water, (unsigned)init);\n// s->high_water += init;\n// }\n// }\n//\n// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n// \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n * to pending_buf_size, and each stored block has a 5 byte header:\n */\n var max_block_size = 0xffff;\n\n if (max_block_size > s.pending_buf_size - 5) {\n max_block_size = s.pending_buf_size - 5;\n }\n\n /* Copy as much as possible from input to output: */\n for (;;) {\n /* Fill the window as much as possible: */\n if (s.lookahead <= 1) {\n\n //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n // s->block_start >= (long)s->w_size, \"slide too late\");\n// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n// s.block_start >= s.w_size)) {\n// throw new Error(\"slide too late\");\n// }\n\n fill_window(s);\n if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n\n if (s.lookahead === 0) {\n break;\n }\n /* flush the current block */\n }\n //Assert(s->block_start >= 0L, \"block gone\");\n// if (s.block_start < 0) throw new Error(\"block gone\");\n\n s.strstart += s.lookahead;\n s.lookahead = 0;\n\n /* Emit a stored block if pending_buf will be full: */\n var max_start = s.block_start + max_block_size;\n\n if (s.strstart === 0 || s.strstart >= max_start) {\n /* strstart == 0 is possible when wraparound on 16-bit machine */\n s.lookahead = s.strstart - max_start;\n s.strstart = max_start;\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n\n\n }\n /* Flush if we may have to slide, otherwise block_start may become\n * negative and the data will be gone:\n */\n if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n\n s.insert = 0;\n\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n\n if (s.strstart > s.block_start) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n var hash_head; /* head of the hash chain */\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) {\n break; /* flush the current block */\n }\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n * At this point we have always match_length < MIN_MATCH\n */\n if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n }\n if (s.match_length >= MIN_MATCH) {\n // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n /*** _tr_tally_dist(s, s.strstart - s.match_start,\n s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n\n /* Insert new strings in the hash table only if the match length\n * is not too large. This saves time but degrades compression.\n */\n if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n s.match_length--; /* string at strstart already in table */\n do {\n s.strstart++;\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n * always MIN_MATCH bytes ahead.\n */\n } while (--s.match_length !== 0);\n s.strstart++;\n } else\n {\n s.strstart += s.match_length;\n s.match_length = 0;\n s.ins_h = s.window[s.strstart];\n /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n// Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n * matter since it will be recomputed at next deflate call.\n */\n }\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n var hash_head; /* head of hash chain */\n var bflush; /* set if current block must be flushed */\n\n var max_insert;\n\n /* Process the input block. */\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the next match, plus MIN_MATCH bytes to insert the\n * string following the next match.\n */\n if (s.lookahead < MIN_LOOKAHEAD) {\n fill_window(s);\n if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* Insert the string window[strstart .. strstart+2] in the\n * dictionary, and set hash_head to the head of the hash chain:\n */\n hash_head = 0/*NIL*/;\n if (s.lookahead >= MIN_MATCH) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n\n /* Find the longest match, discarding those <= prev_length.\n */\n s.prev_length = s.match_length;\n s.prev_match = s.match_start;\n s.match_length = MIN_MATCH - 1;\n\n if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n /* To simplify the code, we prevent matches with the string\n * of window index 0 (in particular we have to avoid a match\n * of the string with itself at the start of the input file).\n */\n s.match_length = longest_match(s, hash_head);\n /* longest_match() sets match_start */\n\n if (s.match_length <= 5 &&\n (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n /* If prev_match is also MIN_MATCH, match_start is garbage\n * but we will ignore the current match anyway.\n */\n s.match_length = MIN_MATCH - 1;\n }\n }\n /* If there was a match at the previous step and the current\n * match is not better, output the previous match:\n */\n if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n max_insert = s.strstart + s.lookahead - MIN_MATCH;\n /* Do not insert strings in hash table beyond this. */\n\n //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n s.prev_length - MIN_MATCH, bflush);***/\n bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n /* Insert in hash table all strings up to the end of the match.\n * strstart-1 and strstart are already inserted. If there is not\n * enough lookahead, the last two strings are not inserted in\n * the hash table.\n */\n s.lookahead -= s.prev_length - 1;\n s.prev_length -= 2;\n do {\n if (++s.strstart <= max_insert) {\n /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n s.head[s.ins_h] = s.strstart;\n /***/\n }\n } while (--s.prev_length !== 0);\n s.match_available = 0;\n s.match_length = MIN_MATCH - 1;\n s.strstart++;\n\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n } else if (s.match_available) {\n /* If there was no match at the previous position, output a\n * single literal. If there was a match but the current match\n * is longer, truncate the previous match to a single literal.\n */\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n if (bflush) {\n /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n flush_block_only(s, false);\n /***/\n }\n s.strstart++;\n s.lookahead--;\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n } else {\n /* There is no previous match to compare with, wait for\n * the next step to decide.\n */\n s.match_available = 1;\n s.strstart++;\n s.lookahead--;\n }\n }\n //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n if (s.match_available) {\n //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n s.match_available = 0;\n }\n s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n\n return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one. Do not maintain a hash table. (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n var bflush; /* set if current block must be flushed */\n var prev; /* byte at distance one to match */\n var scan, strend; /* scan goes up to strend for length of run */\n\n var _win = s.window;\n\n for (;;) {\n /* Make sure that we always have enough lookahead, except\n * at the end of the input file. We need MAX_MATCH bytes\n * for the longest run, plus one for the unrolled loop.\n */\n if (s.lookahead <= MAX_MATCH) {\n fill_window(s);\n if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n if (s.lookahead === 0) { break; } /* flush the current block */\n }\n\n /* See how many times the previous byte repeats */\n s.match_length = 0;\n if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n scan = s.strstart - 1;\n prev = _win[scan];\n if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n strend = s.strstart + MAX_MATCH;\n do {\n /*jshint noempty:false*/\n } while (prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n prev === _win[++scan] && prev === _win[++scan] &&\n scan < strend);\n s.match_length = MAX_MATCH - (strend - scan);\n if (s.match_length > s.lookahead) {\n s.match_length = s.lookahead;\n }\n }\n //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n }\n\n /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n if (s.match_length >= MIN_MATCH) {\n //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n s.lookahead -= s.match_length;\n s.strstart += s.match_length;\n s.match_length = 0;\n } else {\n /* No match, output a literal byte */\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n s.lookahead--;\n s.strstart++;\n }\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n var bflush; /* set if current block must be flushed */\n\n for (;;) {\n /* Make sure that we have a literal to write. */\n if (s.lookahead === 0) {\n fill_window(s);\n if (s.lookahead === 0) {\n if (flush === Z_NO_FLUSH) {\n return BS_NEED_MORE;\n }\n break; /* flush the current block */\n }\n }\n\n /* Output a literal byte */\n s.match_length = 0;\n //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n s.lookahead--;\n s.strstart++;\n if (bflush) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n }\n s.insert = 0;\n if (flush === Z_FINISH) {\n /*** FLUSH_BLOCK(s, 1); ***/\n flush_block_only(s, true);\n if (s.strm.avail_out === 0) {\n return BS_FINISH_STARTED;\n }\n /***/\n return BS_FINISH_DONE;\n }\n if (s.last_lit) {\n /*** FLUSH_BLOCK(s, 0); ***/\n flush_block_only(s, false);\n if (s.strm.avail_out === 0) {\n return BS_NEED_MORE;\n }\n /***/\n }\n return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n this.good_length = good_length;\n this.max_lazy = max_lazy;\n this.nice_length = nice_length;\n this.max_chain = max_chain;\n this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n /* good lazy nice chain */\n new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */\n new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */\n new Config(4, 5, 16, 8, deflate_fast), /* 2 */\n new Config(4, 6, 32, 32, deflate_fast), /* 3 */\n\n new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */\n new Config(8, 16, 32, 32, deflate_slow), /* 5 */\n new Config(8, 16, 128, 128, deflate_slow), /* 6 */\n new Config(8, 32, 128, 256, deflate_slow), /* 7 */\n new Config(32, 128, 258, 1024, deflate_slow), /* 8 */\n new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n s.window_size = 2 * s.w_size;\n\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n\n /* Set the default configuration parameters:\n */\n s.max_lazy_match = configuration_table[s.level].max_lazy;\n s.good_match = configuration_table[s.level].good_length;\n s.nice_match = configuration_table[s.level].nice_length;\n s.max_chain_length = configuration_table[s.level].max_chain;\n\n s.strstart = 0;\n s.block_start = 0;\n s.lookahead = 0;\n s.insert = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.status = 0; /* as the name implies */\n this.pending_buf = null; /* output still pending */\n this.pending_buf_size = 0; /* size of pending_buf */\n this.pending_out = 0; /* next pending byte to output to the stream */\n this.pending = 0; /* nb of bytes in the pending buffer */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.gzhead = null; /* gzip header information to write */\n this.gzindex = 0; /* where in extra, name, or comment */\n this.method = Z_DEFLATED; /* can only be DEFLATED */\n this.last_flush = -1; /* value of flush param for previous deflate call */\n\n this.w_size = 0; /* LZ77 window size (32K by default) */\n this.w_bits = 0; /* log2(w_size) (8..16) */\n this.w_mask = 0; /* w_size - 1 */\n\n this.window = null;\n /* Sliding window. Input bytes are read into the second half of the window,\n * and move to the first half later to keep a dictionary of at least wSize\n * bytes. With this organization, matches are limited to a distance of\n * wSize-MAX_MATCH bytes, but this ensures that IO is always\n * performed with a length multiple of the block size.\n */\n\n this.window_size = 0;\n /* Actual size of window: 2*wSize, except when the user input buffer\n * is directly used as sliding window.\n */\n\n this.prev = null;\n /* Link to older string with same hash index. To limit the size of this\n * array to 64K, this link is maintained only for the last 32K strings.\n * An index in this array is thus a window index modulo 32K.\n */\n\n this.head = null; /* Heads of the hash chains or NIL. */\n\n this.ins_h = 0; /* hash index of string to be inserted */\n this.hash_size = 0; /* number of elements in hash table */\n this.hash_bits = 0; /* log2(hash_size) */\n this.hash_mask = 0; /* hash_size-1 */\n\n this.hash_shift = 0;\n /* Number of bits by which ins_h must be shifted at each input\n * step. It must be such that after MIN_MATCH steps, the oldest\n * byte no longer takes part in the hash key, that is:\n * hash_shift * MIN_MATCH >= hash_bits\n */\n\n this.block_start = 0;\n /* Window position at the beginning of the current output block. Gets\n * negative when the window is moved backwards.\n */\n\n this.match_length = 0; /* length of best match */\n this.prev_match = 0; /* previous match */\n this.match_available = 0; /* set if previous match exists */\n this.strstart = 0; /* start of string to insert */\n this.match_start = 0; /* start of matching string */\n this.lookahead = 0; /* number of valid bytes ahead in window */\n\n this.prev_length = 0;\n /* Length of the best match at previous step. Matches not greater than this\n * are discarded. This is used in the lazy match evaluation.\n */\n\n this.max_chain_length = 0;\n /* To speed up deflation, hash chains are never searched beyond this\n * length. A higher limit improves compression ratio but degrades the\n * speed.\n */\n\n this.max_lazy_match = 0;\n /* Attempt to find a better match only when the current match is strictly\n * smaller than this value. This mechanism is used only for compression\n * levels >= 4.\n */\n // That's alias to max_lazy_match, don't use directly\n //this.max_insert_length = 0;\n /* Insert new strings in the hash table only if the match length is not\n * greater than this length. This saves time but degrades compression.\n * max_insert_length is used only for compression levels <= 3.\n */\n\n this.level = 0; /* compression level (1..9) */\n this.strategy = 0; /* favor or force Huffman coding*/\n\n this.good_match = 0;\n /* Use a faster search when the previous match is longer than this */\n\n this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n /* used by trees.c: */\n\n /* Didn't use ct_data typedef below to suppress compiler warning */\n\n // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */\n // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */\n\n // Use flat array of DOUBLE size, with interleaved fata,\n // because JS does not support effective\n this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n zero(this.dyn_ltree);\n zero(this.dyn_dtree);\n zero(this.bl_tree);\n\n this.l_desc = null; /* desc. for literal tree */\n this.d_desc = null; /* desc. for distance tree */\n this.bl_desc = null; /* desc. for bit length tree */\n\n //ush bl_count[MAX_BITS+1];\n this.bl_count = new utils.Buf16(MAX_BITS + 1);\n /* number of codes at each bit length for an optimal tree */\n\n //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */\n this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */\n zero(this.heap);\n\n this.heap_len = 0; /* number of elements in the heap */\n this.heap_max = 0; /* element of largest frequency */\n /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n * The same heap array is used to build all trees.\n */\n\n this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n zero(this.depth);\n /* Depth of each subtree used as tie breaker for trees of equal frequency\n */\n\n this.l_buf = 0; /* buffer index for literals or lengths */\n\n this.lit_bufsize = 0;\n /* Size of match buffer for literals/lengths. There are 4 reasons for\n * limiting lit_bufsize to 64K:\n * - frequencies can be kept in 16 bit counters\n * - if compression is not successful for the first block, all input\n * data is still in the window so we can still emit a stored block even\n * when input comes from standard input. (This can also be done for\n * all blocks if lit_bufsize is not greater than 32K.)\n * - if compression is not successful for a file smaller than 64K, we can\n * even emit a stored file instead of a stored block (saving 5 bytes).\n * This is applicable only for zip (not gzip or zlib).\n * - creating new Huffman trees less frequently may not provide fast\n * adaptation to changes in the input data statistics. (Take for\n * example a binary file with poorly compressible code followed by\n * a highly compressible string table.) Smaller buffer sizes give\n * fast adaptation but have of course the overhead of transmitting\n * trees more frequently.\n * - I can't count above 4\n */\n\n this.last_lit = 0; /* running index in l_buf */\n\n this.d_buf = 0;\n /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n * the same number of elements. To use different lengths, an extra flag\n * array would be necessary.\n */\n\n this.opt_len = 0; /* bit length of current block with optimal trees */\n this.static_len = 0; /* bit length of current block with static trees */\n this.matches = 0; /* number of string matches in current block */\n this.insert = 0; /* bytes at end of window left to insert */\n\n\n this.bi_buf = 0;\n /* Output buffer. bits are inserted starting at the bottom (least\n * significant bits).\n */\n this.bi_valid = 0;\n /* Number of valid bits in bi_buf. All bits above the last valid bit\n * are always zero.\n */\n\n // Used for window memory init. We safely ignore it for JS. That makes\n // sense only for pointers and memory check tools.\n //this.high_water = 0;\n /* High water mark offset in window for initialized bytes -- bytes above\n * this are set to zero in order to avoid memory check warnings when\n * longest match routines access bytes past the input. This is then\n * updated to the new high water mark.\n */\n}\n\n\nfunction deflateResetKeep(strm) {\n var s;\n\n if (!strm || !strm.state) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.total_in = strm.total_out = 0;\n strm.data_type = Z_UNKNOWN;\n\n s = strm.state;\n s.pending = 0;\n s.pending_out = 0;\n\n if (s.wrap < 0) {\n s.wrap = -s.wrap;\n /* was made negative by deflate(..., Z_FINISH); */\n }\n s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n strm.adler = (s.wrap === 2) ?\n 0 // crc32(0, Z_NULL, 0)\n :\n 1; // adler32(0, Z_NULL, 0)\n s.last_flush = Z_NO_FLUSH;\n trees._tr_init(s);\n return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n var ret = deflateResetKeep(strm);\n if (ret === Z_OK) {\n lm_init(strm.state);\n }\n return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n strm.state.gzhead = head;\n return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n if (!strm) { // === Z_NULL\n return Z_STREAM_ERROR;\n }\n var wrap = 1;\n\n if (level === Z_DEFAULT_COMPRESSION) {\n level = 6;\n }\n\n if (windowBits < 0) { /* suppress zlib wrapper */\n wrap = 0;\n windowBits = -windowBits;\n }\n\n else if (windowBits > 15) {\n wrap = 2; /* write gzip wrapper instead */\n windowBits -= 16;\n }\n\n\n if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n strategy < 0 || strategy > Z_FIXED) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n\n if (windowBits === 8) {\n windowBits = 9;\n }\n /* until 256-byte window bug fixed */\n\n var s = new DeflateState();\n\n strm.state = s;\n s.strm = strm;\n\n s.wrap = wrap;\n s.gzhead = null;\n s.w_bits = windowBits;\n s.w_size = 1 << s.w_bits;\n s.w_mask = s.w_size - 1;\n\n s.hash_bits = memLevel + 7;\n s.hash_size = 1 << s.hash_bits;\n s.hash_mask = s.hash_size - 1;\n s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n s.window = new utils.Buf8(s.w_size * 2);\n s.head = new utils.Buf16(s.hash_size);\n s.prev = new utils.Buf16(s.w_size);\n\n // Don't need mem init magic for JS.\n //s.high_water = 0; /* nothing written to s->window yet */\n\n s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n s.pending_buf_size = s.lit_bufsize * 4;\n\n //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n //s->pending_buf = (uchf *) overlay;\n s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n s.d_buf = 1 * s.lit_bufsize;\n\n //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n s.l_buf = (1 + 2) * s.lit_bufsize;\n\n s.level = level;\n s.strategy = strategy;\n s.method = method;\n\n return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n var old_flush, s;\n var beg, val; // for gzip header write only\n\n if (!strm || !strm.state ||\n flush > Z_BLOCK || flush < 0) {\n return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n }\n\n s = strm.state;\n\n if (!strm.output ||\n (!strm.input && strm.avail_in !== 0) ||\n (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n }\n\n s.strm = strm; /* just in case */\n old_flush = s.last_flush;\n s.last_flush = flush;\n\n /* Write the header */\n if (s.status === INIT_STATE) {\n\n if (s.wrap === 2) { // GZIP header\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n put_byte(s, 31);\n put_byte(s, 139);\n put_byte(s, 8);\n if (!s.gzhead) { // s->gzhead == Z_NULL\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, 0);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, OS_CODE);\n s.status = BUSY_STATE;\n }\n else {\n put_byte(s, (s.gzhead.text ? 1 : 0) +\n (s.gzhead.hcrc ? 2 : 0) +\n (!s.gzhead.extra ? 0 : 4) +\n (!s.gzhead.name ? 0 : 8) +\n (!s.gzhead.comment ? 0 : 16)\n );\n put_byte(s, s.gzhead.time & 0xff);\n put_byte(s, (s.gzhead.time >> 8) & 0xff);\n put_byte(s, (s.gzhead.time >> 16) & 0xff);\n put_byte(s, (s.gzhead.time >> 24) & 0xff);\n put_byte(s, s.level === 9 ? 2 :\n (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n 4 : 0));\n put_byte(s, s.gzhead.os & 0xff);\n if (s.gzhead.extra && s.gzhead.extra.length) {\n put_byte(s, s.gzhead.extra.length & 0xff);\n put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n }\n if (s.gzhead.hcrc) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n }\n s.gzindex = 0;\n s.status = EXTRA_STATE;\n }\n }\n else // DEFLATE header\n {\n var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n var level_flags = -1;\n\n if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n level_flags = 0;\n } else if (s.level < 6) {\n level_flags = 1;\n } else if (s.level === 6) {\n level_flags = 2;\n } else {\n level_flags = 3;\n }\n header |= (level_flags << 6);\n if (s.strstart !== 0) { header |= PRESET_DICT; }\n header += 31 - (header % 31);\n\n s.status = BUSY_STATE;\n putShortMSB(s, header);\n\n /* Save the adler32 of the preset dictionary: */\n if (s.strstart !== 0) {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n strm.adler = 1; // adler32(0L, Z_NULL, 0);\n }\n }\n\n//#ifdef GZIP\n if (s.status === EXTRA_STATE) {\n if (s.gzhead.extra/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n\n while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n break;\n }\n }\n put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n s.gzindex++;\n }\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (s.gzindex === s.gzhead.extra.length) {\n s.gzindex = 0;\n s.status = NAME_STATE;\n }\n }\n else {\n s.status = NAME_STATE;\n }\n }\n if (s.status === NAME_STATE) {\n if (s.gzhead.name/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.name.length) {\n val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.gzindex = 0;\n s.status = COMMENT_STATE;\n }\n }\n else {\n s.status = COMMENT_STATE;\n }\n }\n if (s.status === COMMENT_STATE) {\n if (s.gzhead.comment/* != Z_NULL*/) {\n beg = s.pending; /* start of bytes to update crc */\n //int val;\n\n do {\n if (s.pending === s.pending_buf_size) {\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n flush_pending(strm);\n beg = s.pending;\n if (s.pending === s.pending_buf_size) {\n val = 1;\n break;\n }\n }\n // JS specific: little magic to add zero terminator to end of string\n if (s.gzindex < s.gzhead.comment.length) {\n val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n } else {\n val = 0;\n }\n put_byte(s, val);\n } while (val !== 0);\n\n if (s.gzhead.hcrc && s.pending > beg) {\n strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n }\n if (val === 0) {\n s.status = HCRC_STATE;\n }\n }\n else {\n s.status = HCRC_STATE;\n }\n }\n if (s.status === HCRC_STATE) {\n if (s.gzhead.hcrc) {\n if (s.pending + 2 > s.pending_buf_size) {\n flush_pending(strm);\n }\n if (s.pending + 2 <= s.pending_buf_size) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n strm.adler = 0; //crc32(0L, Z_NULL, 0);\n s.status = BUSY_STATE;\n }\n }\n else {\n s.status = BUSY_STATE;\n }\n }\n//#endif\n\n /* Flush as much pending output as possible */\n if (s.pending !== 0) {\n flush_pending(strm);\n if (strm.avail_out === 0) {\n /* Since avail_out is 0, deflate will be called again with\n * more output space, but possibly with both pending and\n * avail_in equal to zero. There won't be anything to do,\n * but this is not an error situation so make sure we\n * return OK instead of BUF_ERROR at next call of deflate:\n */\n s.last_flush = -1;\n return Z_OK;\n }\n\n /* Make sure there is something to do and avoid duplicate consecutive\n * flushes. For repeated and useless calls with Z_FINISH, we keep\n * returning Z_STREAM_END instead of Z_BUF_ERROR.\n */\n } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n flush !== Z_FINISH) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* User must not provide more input after the first FINISH: */\n if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n return err(strm, Z_BUF_ERROR);\n }\n\n /* Start a new block or continue the current one.\n */\n if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n configuration_table[s.level].func(s, flush));\n\n if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n s.status = FINISH_STATE;\n }\n if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n if (strm.avail_out === 0) {\n s.last_flush = -1;\n /* avoid BUF_ERROR next call, see above */\n }\n return Z_OK;\n /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n * of deflate should use the same flush parameter to make sure\n * that the flush is complete. So we don't have to output an\n * empty block here, this will be done at next call. This also\n * ensures that for a very small output buffer, we emit at most\n * one empty block.\n */\n }\n if (bstate === BS_BLOCK_DONE) {\n if (flush === Z_PARTIAL_FLUSH) {\n trees._tr_align(s);\n }\n else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n trees._tr_stored_block(s, 0, 0, false);\n /* For a full flush, this empty block will be recognized\n * as a special marker by inflate_sync().\n */\n if (flush === Z_FULL_FLUSH) {\n /*** CLEAR_HASH(s); ***/ /* forget history */\n zero(s.head); // Fill with NIL (= 0);\n\n if (s.lookahead === 0) {\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n }\n }\n flush_pending(strm);\n if (strm.avail_out === 0) {\n s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n return Z_OK;\n }\n }\n }\n //Assert(strm->avail_out > 0, \"bug2\");\n //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n if (flush !== Z_FINISH) { return Z_OK; }\n if (s.wrap <= 0) { return Z_STREAM_END; }\n\n /* Write the trailer */\n if (s.wrap === 2) {\n put_byte(s, strm.adler & 0xff);\n put_byte(s, (strm.adler >> 8) & 0xff);\n put_byte(s, (strm.adler >> 16) & 0xff);\n put_byte(s, (strm.adler >> 24) & 0xff);\n put_byte(s, strm.total_in & 0xff);\n put_byte(s, (strm.total_in >> 8) & 0xff);\n put_byte(s, (strm.total_in >> 16) & 0xff);\n put_byte(s, (strm.total_in >> 24) & 0xff);\n }\n else\n {\n putShortMSB(s, strm.adler >>> 16);\n putShortMSB(s, strm.adler & 0xffff);\n }\n\n flush_pending(strm);\n /* If avail_out is zero, the application will call deflate again\n * to flush the rest.\n */\n if (s.wrap > 0) { s.wrap = -s.wrap; }\n /* write the trailer only once! */\n return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n var status;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n status = strm.state.status;\n if (status !== INIT_STATE &&\n status !== EXTRA_STATE &&\n status !== NAME_STATE &&\n status !== COMMENT_STATE &&\n status !== HCRC_STATE &&\n status !== BUSY_STATE &&\n status !== FINISH_STATE\n ) {\n return err(strm, Z_STREAM_ERROR);\n }\n\n strm.state = null;\n\n return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var s;\n var str, n;\n var wrap;\n var avail;\n var next;\n var input;\n var tmpDict;\n\n if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n return Z_STREAM_ERROR;\n }\n\n s = strm.state;\n wrap = s.wrap;\n\n if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n return Z_STREAM_ERROR;\n }\n\n /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n if (wrap === 1) {\n /* adler32(strm->adler, dictionary, dictLength); */\n strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n }\n\n s.wrap = 0; /* avoid computing Adler-32 in read_buf */\n\n /* if dictionary would fill window, just replace the history */\n if (dictLength >= s.w_size) {\n if (wrap === 0) { /* already empty otherwise */\n /*** CLEAR_HASH(s); ***/\n zero(s.head); // Fill with NIL (= 0);\n s.strstart = 0;\n s.block_start = 0;\n s.insert = 0;\n }\n /* use the tail */\n // dictionary = dictionary.slice(dictLength - s.w_size);\n tmpDict = new utils.Buf8(s.w_size);\n utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n dictionary = tmpDict;\n dictLength = s.w_size;\n }\n /* insert dictionary into window and hash */\n avail = strm.avail_in;\n next = strm.next_in;\n input = strm.input;\n strm.avail_in = dictLength;\n strm.next_in = 0;\n strm.input = dictionary;\n fill_window(s);\n while (s.lookahead >= MIN_MATCH) {\n str = s.strstart;\n n = s.lookahead - (MIN_MATCH - 1);\n do {\n /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n s.head[s.ins_h] = str;\n str++;\n } while (--n);\n s.strstart = str;\n s.lookahead = MIN_MATCH - 1;\n fill_window(s);\n }\n s.strstart += s.lookahead;\n s.block_start = s.strstart;\n s.insert = s.lookahead;\n s.lookahead = 0;\n s.match_length = s.prev_length = MIN_MATCH - 1;\n s.match_available = 0;\n strm.next_in = next;\n strm.input = input;\n strm.avail_in = avail;\n s.wrap = wrap;\n return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n var state;\n var _in; /* local strm.input */\n var last; /* have enough input while in < last */\n var _out; /* local strm.output */\n var beg; /* inflate()'s initial strm.output */\n var end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n var dmax; /* maximum distance from zlib header */\n//#endif\n var wsize; /* window size or zero if not using window */\n var whave; /* valid bytes in the window */\n var wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n var s_window; /* allocated sliding window, if wsize != 0 */\n var hold; /* local strm.hold */\n var bits; /* local strm.bits */\n var lcode; /* local strm.lencode */\n var dcode; /* local strm.distcode */\n var lmask; /* mask for first level of length codes */\n var dmask; /* mask for first level of distance codes */\n var here; /* retrieved table entry */\n var op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n var len; /* match length, unused bytes */\n var dist; /* match distance */\n var from; /* where to copy match from */\n var from_source;\n\n\n var input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\nvar adler32 = require('./adler32');\nvar crc32 = require('./crc32');\nvar inflate_fast = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH = 2;\n//var Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2;\n//var Z_ERRNO = -1;\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar HEAD = 1; /* i: waiting for magic header */\nvar FLAGS = 2; /* i: waiting for method and flags (gzip) */\nvar TIME = 3; /* i: waiting for modification time (gzip) */\nvar OS = 4; /* i: waiting for extra flags and operating system (gzip) */\nvar EXLEN = 5; /* i: waiting for extra length (gzip) */\nvar EXTRA = 6; /* i: waiting for extra bytes (gzip) */\nvar NAME = 7; /* i: waiting for end of file name (gzip) */\nvar COMMENT = 8; /* i: waiting for end of comment (gzip) */\nvar HCRC = 9; /* i: waiting for header crc (gzip) */\nvar DICTID = 10; /* i: waiting for dictionary check value */\nvar DICT = 11; /* waiting for inflateSetDictionary() call */\nvar TYPE = 12; /* i: waiting for type bits, including last-flag bit */\nvar TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */\nvar STORED = 14; /* i: waiting for stored size (length and complement) */\nvar COPY_ = 15; /* i/o: same as COPY below, but only first time in */\nvar COPY = 16; /* i/o: waiting for input or output to copy stored block */\nvar TABLE = 17; /* i: waiting for dynamic block table lengths */\nvar LENLENS = 18; /* i: waiting for code length code lengths */\nvar CODELENS = 19; /* i: waiting for length/lit and distance code lengths */\nvar LEN_ = 20; /* i: same as LEN below, but only first time in */\nvar LEN = 21; /* i: waiting for length/lit/eob code */\nvar LENEXT = 22; /* i: waiting for length extra bits */\nvar DIST = 23; /* i: waiting for distance code */\nvar DISTEXT = 24; /* i: waiting for distance extra bits */\nvar MATCH = 25; /* o: waiting for output space to copy string */\nvar LIT = 26; /* o: waiting for output space to write literal */\nvar CHECK = 27; /* i: waiting for 32-bit check value */\nvar LENGTH = 28; /* i: waiting for 32-bit length (gzip) */\nvar DONE = 29; /* finished check, done -- remain here until reset */\nvar BAD = 30; /* got a data error -- remain here until reset */\nvar MEM = 31; /* got an inflate() memory error -- remain here until reset */\nvar SYNC = 32; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib) */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n this.work = new utils.Buf16(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n}\n\nfunction inflateReset(strm) {\n var state;\n\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n var wrap;\n var state;\n\n /* get the state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 1;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n var ret;\n var state;\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.window = null/*Z_NULL*/;\n ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n}\n\nfunction inflateInit(strm) {\n return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n var sym;\n\n lenfix = new utils.Buf32(512);\n distfix = new utils.Buf32(32);\n\n /* literal/length table */\n sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n var dist;\n var state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new utils.Buf8(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n utils.arraySet(state.window, src, end - copy, copy, 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n}\n\nfunction inflate(strm, flush) {\n var state;\n var input, output; // input/output buffers\n var next; /* next input INDEX */\n var put; /* next output INDEX */\n var have, left; /* available input and output */\n var hold; /* bit buffer */\n var bits; /* bits in bit buffer */\n var _in, _out; /* save starting available input and output */\n var copy; /* number of stored or match bytes to copy */\n var from; /* where to copy match bytes from */\n var from_source;\n var here = 0; /* current decoding table entry */\n var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //var last; /* parent table entry */\n var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n var len; /* length to copy for repeats, bits to drop */\n var ret; /* return code */\n var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */\n var opts;\n\n var n; // temporary var for NEED_BITS\n\n var order = /* permutation of code lengths */\n [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n if (!strm || !strm.state || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n state.flags = 0; /* expect zlib header */\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n else if (len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n state.dmax = 1 << len;\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if (state.flags & 0x0200) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Array(state.head.extra_len);\n }\n utils.arraySet(\n state.head.extra,\n input,\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n copy,\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if (state.flags & 0x0200) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n utils.arraySet(output, input, next, copy, put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if (_out) {\n strm.adler = state.check =\n /*UPDATE(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if (state.wrap && _out) {\n strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n}\n\nfunction inflateEnd(strm) {\n\n if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n return Z_STREAM_ERROR;\n }\n\n var state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n var state;\n\n /* check state */\n if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n var dictLength = dictionary.length;\n\n var state;\n var dictid;\n var ret;\n\n /* check state */\n if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n var bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n var len = 0; /* a code's length in bits */\n var sym = 0; /* index of code symbols */\n var min = 0, max = 0; /* minimum and maximum code lengths */\n var root = 0; /* number of index bits for root table */\n var curr = 0; /* number of index bits for current table */\n var drop = 0; /* code bits to drop for sub-table */\n var left = 0; /* number of prefix codes available */\n var used = 0; /* code entries in table used */\n var huff = 0; /* Huffman code */\n var incr; /* for incrementing code, index */\n var fill; /* index for replicating entries */\n var low; /* low bits for current root entry */\n var mask; /* mask for low root bits */\n var next; /* next available space in table */\n var base = null; /* base value table to use */\n var base_index = 0;\n// var shoextra; /* extra bits table to use */\n var end; /* use base and extra for symbol > end */\n var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n var extra = null;\n var extra_index = 0;\n\n var here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n end = 19;\n\n } else if (type === LENS) {\n base = lbase;\n base_index -= 257;\n extra = lext;\n extra_index -= 257;\n end = 256;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n end = -1;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] < end) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] > end) {\n here_op = extra[extra_index + work[sym]];\n here_val = base[base_index + work[sym]];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED = 1;\n//var Z_HUFFMAN_ONLY = 2;\n//var Z_RLE = 3;\nvar Z_FIXED = 4;\n//var Z_DEFAULT_STRATEGY = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY = 0;\nvar Z_TEXT = 1;\n//var Z_ASCII = 1; // = Z_TEXT\nvar Z_UNKNOWN = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits = /* extra bits for each length code */\n [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];\n\nvar extra_dbits = /* extra bits for each distance code */\n [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];\n\nvar extra_blbits = /* extra bits for each bit length code */\n [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n this.static_tree = static_tree; /* static tree or NULL */\n this.extra_bits = extra_bits; /* extra bits for each code or NULL */\n this.extra_base = extra_base; /* base index for extra_bits */\n this.elems = elems; /* max number of elements in the tree */\n this.max_length = max_length; /* max bit length for the codes */\n\n // show if `static_tree` has data or dummy - needed for monomorphic objects\n this.has_stree = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n this.dyn_tree = dyn_tree; /* the dynamic tree */\n this.max_code = 0; /* largest code with non zero frequency */\n this.stat_desc = stat_desc; /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n// put_byte(s, (uch)((w) & 0xff));\n// put_byte(s, (uch)((ush)(w) >> 8));\n s.pending_buf[s.pending++] = (w) & 0xff;\n s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n if (s.bi_valid > (Buf_size - length)) {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n put_short(s, s.bi_buf);\n s.bi_buf = value >> (Buf_size - s.bi_valid);\n s.bi_valid += length - Buf_size;\n } else {\n s.bi_buf |= (value << s.bi_valid) & 0xffff;\n s.bi_valid += length;\n }\n}\n\n\nfunction send_code(s, c, tree) {\n send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n var res = 0;\n do {\n res |= code & 1;\n code >>>= 1;\n res <<= 1;\n } while (--len > 0);\n return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n if (s.bi_valid === 16) {\n put_short(s, s.bi_buf);\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n } else if (s.bi_valid >= 8) {\n s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n s.bi_buf >>= 8;\n s.bi_valid -= 8;\n }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n * above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n * array bl_count contains the frequencies for each bit length.\n * The length opt_len is updated; static_len is also updated if stree is\n * not null.\n */\nfunction gen_bitlen(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var max_code = desc.max_code;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var extra = desc.stat_desc.extra_bits;\n var base = desc.stat_desc.extra_base;\n var max_length = desc.stat_desc.max_length;\n var h; /* heap index */\n var n, m; /* iterate over the tree elements */\n var bits; /* bit length */\n var xbits; /* extra bits */\n var f; /* frequency */\n var overflow = 0; /* number of elements with bit length too large */\n\n for (bits = 0; bits <= MAX_BITS; bits++) {\n s.bl_count[bits] = 0;\n }\n\n /* In a first pass, compute the optimal bit lengths (which may\n * overflow in the case of the bit length tree).\n */\n tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n n = s.heap[h];\n bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n if (bits > max_length) {\n bits = max_length;\n overflow++;\n }\n tree[n * 2 + 1]/*.Len*/ = bits;\n /* We overwrite tree[n].Dad which is no longer needed */\n\n if (n > max_code) { continue; } /* not a leaf node */\n\n s.bl_count[bits]++;\n xbits = 0;\n if (n >= base) {\n xbits = extra[n - base];\n }\n f = tree[n * 2]/*.Freq*/;\n s.opt_len += f * (bits + xbits);\n if (has_stree) {\n s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n }\n }\n if (overflow === 0) { return; }\n\n // Trace((stderr,\"\\nbit length overflow\\n\"));\n /* This happens for example on obj2 and pic of the Calgary corpus */\n\n /* Find the first bit length which could increase: */\n do {\n bits = max_length - 1;\n while (s.bl_count[bits] === 0) { bits--; }\n s.bl_count[bits]--; /* move one leaf down the tree */\n s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n s.bl_count[max_length]--;\n /* The brother of the overflow item also moves one step up,\n * but this does not affect bl_count[max_length]\n */\n overflow -= 2;\n } while (overflow > 0);\n\n /* Now recompute all bit lengths, scanning in increasing frequency.\n * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n * lengths instead of fixing only the wrong ones. This idea is taken\n * from 'ar' written by Haruhiko Okumura.)\n */\n for (bits = max_length; bits !== 0; bits--) {\n n = s.bl_count[bits];\n while (n !== 0) {\n m = s.heap[--h];\n if (m > max_code) { continue; }\n if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n tree[m * 2 + 1]/*.Len*/ = bits;\n }\n n--;\n }\n }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n * zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n// ct_data *tree; /* the tree to decorate */\n// int max_code; /* largest code with non zero frequency */\n// ushf *bl_count; /* number of codes at each bit length */\n{\n var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n var code = 0; /* running code value */\n var bits; /* bit index */\n var n; /* code index */\n\n /* The distribution counts are first used to generate the code values\n * without bit reversal.\n */\n for (bits = 1; bits <= MAX_BITS; bits++) {\n next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n }\n /* Check that the bit counts in bl_count are consistent. The last code\n * must be all ones.\n */\n //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */\n length = 0;\n for (code = 0; code < LENGTH_CODES - 1; code++) {\n base_length[code] = length;\n for (n = 0; n < (1 << extra_lbits[code]); n++) {\n _length_code[length++] = code;\n }\n }\n //Assert (length == 256, \"tr_static_init: length != 256\");\n /* Note that the length 255 (match length 258) can be represented\n * in two different ways: code 284 + 5 bits or code 285, so we\n * overwrite length_code[255] to use the best encoding:\n */\n _length_code[length - 1] = code;\n\n /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n dist = 0;\n for (code = 0; code < 16; code++) {\n base_dist[code] = dist;\n for (n = 0; n < (1 << extra_dbits[code]); n++) {\n _dist_code[dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: dist != 256\");\n dist >>= 7; /* from now on, all distances are divided by 128 */\n for (; code < D_CODES; code++) {\n base_dist[code] = dist << 7;\n for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n _dist_code[256 + dist++] = code;\n }\n }\n //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n /* Construct the codes of the static literal tree */\n for (bits = 0; bits <= MAX_BITS; bits++) {\n bl_count[bits] = 0;\n }\n\n n = 0;\n while (n <= 143) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n while (n <= 255) {\n static_ltree[n * 2 + 1]/*.Len*/ = 9;\n n++;\n bl_count[9]++;\n }\n while (n <= 279) {\n static_ltree[n * 2 + 1]/*.Len*/ = 7;\n n++;\n bl_count[7]++;\n }\n while (n <= 287) {\n static_ltree[n * 2 + 1]/*.Len*/ = 8;\n n++;\n bl_count[8]++;\n }\n /* Codes 286 and 287 do not exist, but we must include them in the\n * tree construction to get a canonical Huffman tree (longest code\n * all ones)\n */\n gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n /* The static distance tree is trivial: */\n for (n = 0; n < D_CODES; n++) {\n static_dtree[n * 2 + 1]/*.Len*/ = 5;\n static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n }\n\n // Now data ready and we can init static trees\n static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS);\n\n //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n var n; /* iterates over tree elements */\n\n /* Initialize the trees. */\n for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n s.opt_len = s.static_len = 0;\n s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n if (s.bi_valid > 8) {\n put_short(s, s.bi_buf);\n } else if (s.bi_valid > 0) {\n //put_byte(s, (Byte)s->bi_buf);\n s.pending_buf[s.pending++] = s.bi_buf;\n }\n s.bi_buf = 0;\n s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf *buf; /* the input data */\n//unsigned len; /* its length */\n//int header; /* true if block header must be written */\n{\n bi_windup(s); /* align on byte boundary */\n\n if (header) {\n put_short(s, len);\n put_short(s, ~len);\n }\n// while (len--) {\n// put_byte(s, *buf++);\n// }\n utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n var _n2 = n * 2;\n var _m2 = m * 2;\n return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n// deflate_state *s;\n// ct_data *tree; /* the tree to restore */\n// int k; /* node to move down */\n{\n var v = s.heap[k];\n var j = k << 1; /* left son of k */\n while (j <= s.heap_len) {\n /* Set j to the smallest of the two sons: */\n if (j < s.heap_len &&\n smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n j++;\n }\n /* Exit if v is smaller than both sons */\n if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n /* Exchange v with the smallest son */\n s.heap[k] = s.heap[j];\n k = j;\n\n /* And continue down the tree, setting j to the left son of k */\n j <<= 1;\n }\n s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n// deflate_state *s;\n// const ct_data *ltree; /* literal tree */\n// const ct_data *dtree; /* distance tree */\n{\n var dist; /* distance of matched string */\n var lc; /* match length or unmatched char (if dist == 0) */\n var lx = 0; /* running index in l_buf */\n var code; /* the code to send */\n var extra; /* number of extra bits to send */\n\n if (s.last_lit !== 0) {\n do {\n dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n lc = s.pending_buf[s.l_buf + lx];\n lx++;\n\n if (dist === 0) {\n send_code(s, lc, ltree); /* send a literal byte */\n //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n } else {\n /* Here, lc is the match length - MIN_MATCH */\n code = _length_code[lc];\n send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n extra = extra_lbits[code];\n if (extra !== 0) {\n lc -= base_length[code];\n send_bits(s, lc, extra); /* send the extra length bits */\n }\n dist--; /* dist is now the match distance - 1 */\n code = d_code(dist);\n //Assert (code < D_CODES, \"bad d_code\");\n\n send_code(s, code, dtree); /* send the distance code */\n extra = extra_dbits[code];\n if (extra !== 0) {\n dist -= base_dist[code];\n send_bits(s, dist, extra); /* send the extra distance bits */\n }\n } /* literal or match pair ? */\n\n /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n // \"pendingBuf overflow\");\n\n } while (lx < s.last_lit);\n }\n\n send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n * and corresponding code. The length opt_len is updated; static_len is\n * also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n// deflate_state *s;\n// tree_desc *desc; /* the tree descriptor */\n{\n var tree = desc.dyn_tree;\n var stree = desc.stat_desc.static_tree;\n var has_stree = desc.stat_desc.has_stree;\n var elems = desc.stat_desc.elems;\n var n, m; /* iterate over heap elements */\n var max_code = -1; /* largest code with non zero frequency */\n var node; /* new node being created */\n\n /* Construct the initial heap, with least frequent element in\n * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n * heap[0] is not used.\n */\n s.heap_len = 0;\n s.heap_max = HEAP_SIZE;\n\n for (n = 0; n < elems; n++) {\n if (tree[n * 2]/*.Freq*/ !== 0) {\n s.heap[++s.heap_len] = max_code = n;\n s.depth[n] = 0;\n\n } else {\n tree[n * 2 + 1]/*.Len*/ = 0;\n }\n }\n\n /* The pkzip format requires that at least one distance code exists,\n * and that at least one bit should be sent even if there is only one\n * possible code. So to avoid special checks later on we force at least\n * two codes of non zero frequency.\n */\n while (s.heap_len < 2) {\n node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n tree[node * 2]/*.Freq*/ = 1;\n s.depth[node] = 0;\n s.opt_len--;\n\n if (has_stree) {\n s.static_len -= stree[node * 2 + 1]/*.Len*/;\n }\n /* node is 0 or 1 so it does not have extra bits */\n }\n desc.max_code = max_code;\n\n /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n * establish sub-heaps of increasing lengths:\n */\n for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n /* Construct the Huffman tree by repeatedly combining the least two\n * frequent nodes.\n */\n node = elems; /* next internal node of the tree */\n do {\n //pqremove(s, tree, n); /* n = node of least frequency */\n /*** pqremove ***/\n n = s.heap[1/*SMALLEST*/];\n s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n pqdownheap(s, tree, 1/*SMALLEST*/);\n /***/\n\n m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n s.heap[--s.heap_max] = m;\n\n /* Create a new node father of n and m */\n tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n /* and insert the new node in the heap */\n s.heap[1/*SMALLEST*/] = node++;\n pqdownheap(s, tree, 1/*SMALLEST*/);\n\n } while (s.heap_len >= 2);\n\n s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n /* At this point, the fields freq and dad are set. We can now\n * generate the bit lengths.\n */\n gen_bitlen(s, desc);\n\n /* The field len is now set, we can generate the bit codes */\n gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n } else if (curlen !== 0) {\n\n if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n } else if (count <= 10) {\n s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n } else {\n s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n }\n\n count = 0;\n prevlen = curlen;\n\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n// deflate_state *s;\n// ct_data *tree; /* the tree to be scanned */\n// int max_code; /* and its largest code of non zero frequency */\n{\n var n; /* iterates over all tree elements */\n var prevlen = -1; /* last emitted length */\n var curlen; /* length of current code */\n\n var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n var count = 0; /* repeat count of the current code */\n var max_count = 7; /* max repeat count */\n var min_count = 4; /* min repeat count */\n\n /* tree[max_code+1].Len = -1; */ /* guard already set */\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n }\n\n for (n = 0; n <= max_code; n++) {\n curlen = nextlen;\n nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n if (++count < max_count && curlen === nextlen) {\n continue;\n\n } else if (count < min_count) {\n do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n } else if (curlen !== 0) {\n if (curlen !== prevlen) {\n send_code(s, curlen, s.bl_tree);\n count--;\n }\n //Assert(count >= 3 && count <= 6, \" 3_6?\");\n send_code(s, REP_3_6, s.bl_tree);\n send_bits(s, count - 3, 2);\n\n } else if (count <= 10) {\n send_code(s, REPZ_3_10, s.bl_tree);\n send_bits(s, count - 3, 3);\n\n } else {\n send_code(s, REPZ_11_138, s.bl_tree);\n send_bits(s, count - 11, 7);\n }\n\n count = 0;\n prevlen = curlen;\n if (nextlen === 0) {\n max_count = 138;\n min_count = 3;\n\n } else if (curlen === nextlen) {\n max_count = 6;\n min_count = 3;\n\n } else {\n max_count = 7;\n min_count = 4;\n }\n }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n var max_blindex; /* index of last bit length code of non zero freq */\n\n /* Determine the bit length frequencies for literal and distance trees */\n scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n /* Build the bit length tree: */\n build_tree(s, s.bl_desc);\n /* opt_len now includes the length of the tree representations, except\n * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n */\n\n /* Determine the number of bit length codes to send. The pkzip format\n * requires that at least 4 bit length codes be sent. (appnote.txt says\n * 3 but the actual value used is 4.)\n */\n for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n break;\n }\n }\n /* Update opt_len to include the bit length tree and counts */\n s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n // s->opt_len, s->static_len));\n\n return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n// deflate_state *s;\n// int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n var rank; /* index in bl_order */\n\n //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n // \"too many codes\");\n //Tracev((stderr, \"\\nbl counts: \"));\n send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n send_bits(s, dcodes - 1, 5);\n send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */\n for (rank = 0; rank < blcodes; rank++) {\n //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n }\n //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n * a) There are no non-portable control characters belonging to the\n * \"black list\" (0..6, 14..25, 28..31).\n * b) There is at least one printable character belonging to the\n * \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n * \"gray list\" that is ignored in this detection algorithm:\n * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n /* black_mask is the bit mask of black-listed bytes\n * set bits 0..6, 14..25, and 28..31\n * 0xf3ffc07f = binary 11110011111111111100000001111111\n */\n var black_mask = 0xf3ffc07f;\n var n;\n\n /* Check for non-textual (\"black-listed\") bytes. */\n for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n return Z_BINARY;\n }\n }\n\n /* Check for textual (\"white-listed\") bytes. */\n if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n for (n = 32; n < LITERALS; n++) {\n if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n return Z_TEXT;\n }\n }\n\n /* There are no \"black-listed\" or \"white-listed\" bytes:\n * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n */\n return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n if (!static_init_done) {\n tr_static_init();\n static_init_done = true;\n }\n\n s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n s.bi_buf = 0;\n s.bi_valid = 0;\n\n /* Initialize the first block of the first file: */\n init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */\n copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n send_bits(s, STATIC_TREES << 1, 3);\n send_code(s, END_BLOCK, static_ltree);\n bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf; /* input block, or NULL if too old */\n//ulg stored_len; /* length of input block */\n//int last; /* one if this is the last block for a file */\n{\n var opt_lenb, static_lenb; /* opt_len and static_len in bytes */\n var max_blindex = 0; /* index of last bit length code of non zero freq */\n\n /* Build the Huffman trees unless a stored block is forced */\n if (s.level > 0) {\n\n /* Check if the file is binary or text */\n if (s.strm.data_type === Z_UNKNOWN) {\n s.strm.data_type = detect_data_type(s);\n }\n\n /* Construct the literal and distance trees */\n build_tree(s, s.l_desc);\n // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n\n build_tree(s, s.d_desc);\n // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n // s->static_len));\n /* At this point, opt_len and static_len are the total bit lengths of\n * the compressed block data, excluding the tree representations.\n */\n\n /* Build the bit length tree for the above two trees, and get the index\n * in bl_order of the last bit length code to send.\n */\n max_blindex = build_bl_tree(s);\n\n /* Determine the best encoding. Compute the block lengths in bytes. */\n opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n // s->last_lit));\n\n if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n } else {\n // Assert(buf != (char*)0, \"lost buf\");\n opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n }\n\n if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n /* 4: two words for the lengths */\n\n /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n * Otherwise we can't have processed more than WSIZE input bytes since\n * the last block flush, because compression would have been\n * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n * transform a block into a stored block.\n */\n _tr_stored_block(s, buf, stored_len, last);\n\n } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n compress_block(s, static_ltree, static_dtree);\n\n } else {\n send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n compress_block(s, s.dyn_ltree, s.dyn_dtree);\n }\n // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n /* The above check is made mod 2^32, for files larger than 512 MB\n * and uLong implemented on 32 bits.\n */\n init_block(s);\n\n if (last) {\n bi_windup(s);\n }\n // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n // s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n// deflate_state *s;\n// unsigned dist; /* distance of matched string */\n// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n //var out_length, in_length, dcode;\n\n s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;\n s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n s.last_lit++;\n\n if (dist === 0) {\n /* lc is the unmatched char */\n s.dyn_ltree[lc * 2]/*.Freq*/++;\n } else {\n s.matches++;\n /* Here, lc is the match length - MIN_MATCH */\n dist--; /* dist = match distance - 1 */\n //Assert((ush)dist < (ush)MAX_DIST(s) &&\n // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n // (ush)d_code(dist) < (ush)D_CODES, \"_tr_tally: bad match\");\n\n s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n// /* Try to guess if it is profitable to stop the current block here */\n// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n// /* Compute an upper bound for the compressed length */\n// out_length = s.last_lit*8;\n// in_length = s.strstart - s.block_start;\n//\n// for (dcode = 0; dcode < D_CODES; dcode++) {\n// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n// }\n// out_length >>>= 3;\n// //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n// // s->last_lit, in_length, out_length,\n// // 100L - out_length*100L/in_length));\n// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n// return true;\n// }\n// }\n//#endif\n\n return (s.last_lit === s.lit_bufsize - 1);\n /* We avoid equality with lit_bufsize because of wraparound at 64K\n * on 16 bit machines and because stored blocks are restricted to\n * 64K-1 bytes.\n */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n/** @type {import('.')} */\nmodule.exports = [\n\t'Float32Array',\n\t'Float64Array',\n\t'Int8Array',\n\t'Int16Array',\n\t'Int32Array',\n\t'Uint8Array',\n\t'Uint8ClampedArray',\n\t'Uint16Array',\n\t'Uint32Array',\n\t'BigInt64Array',\n\t'BigUint64Array'\n];\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nvar setFunctionName = require('set-function-name');\nvar $TypeError = require('es-errors/type');\n\nvar $Object = Object;\n\nmodule.exports = setFunctionName(function flags() {\n\tif (this == null || this !== $Object(this)) {\n\t\tthrow new $TypeError('RegExp.prototype.flags getter called on non-object');\n\t}\n\tvar result = '';\n\tif (this.hasIndices) {\n\t\tresult += 'd';\n\t}\n\tif (this.global) {\n\t\tresult += 'g';\n\t}\n\tif (this.ignoreCase) {\n\t\tresult += 'i';\n\t}\n\tif (this.multiline) {\n\t\tresult += 'm';\n\t}\n\tif (this.dotAll) {\n\t\tresult += 's';\n\t}\n\tif (this.unicode) {\n\t\tresult += 'u';\n\t}\n\tif (this.unicodeSets) {\n\t\tresult += 'v';\n\t}\n\tif (this.sticky) {\n\t\tresult += 'y';\n\t}\n\treturn result;\n}, 'get flags', true);\n\n","'use strict';\n\nvar define = require('define-properties');\nvar callBind = require('call-bind');\n\nvar implementation = require('./implementation');\nvar getPolyfill = require('./polyfill');\nvar shim = require('./shim');\n\nvar flagsBound = callBind(getPolyfill());\n\ndefine(flagsBound, {\n\tgetPolyfill: getPolyfill,\n\timplementation: implementation,\n\tshim: shim\n});\n\nmodule.exports = flagsBound;\n","'use strict';\n\nvar implementation = require('./implementation');\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar $gOPD = Object.getOwnPropertyDescriptor;\n\nmodule.exports = function getPolyfill() {\n\tif (supportsDescriptors && (/a/mig).flags === 'gim') {\n\t\tvar descriptor = $gOPD(RegExp.prototype, 'flags');\n\t\tif (\n\t\t\tdescriptor\n\t\t\t&& typeof descriptor.get === 'function'\n\t\t\t&& typeof RegExp.prototype.dotAll === 'boolean'\n\t\t\t&& typeof RegExp.prototype.hasIndices === 'boolean'\n\t\t) {\n\t\t\t/* eslint getter-return: 0 */\n\t\t\tvar calls = '';\n\t\t\tvar o = {};\n\t\t\tObject.defineProperty(o, 'hasIndices', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'd';\n\t\t\t\t}\n\t\t\t});\n\t\t\tObject.defineProperty(o, 'sticky', {\n\t\t\t\tget: function () {\n\t\t\t\t\tcalls += 'y';\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (calls === 'dy') {\n\t\t\t\treturn descriptor.get;\n\t\t\t}\n\t\t}\n\t}\n\treturn implementation;\n};\n","'use strict';\n\nvar supportsDescriptors = require('define-properties').supportsDescriptors;\nvar getPolyfill = require('./polyfill');\nvar gOPD = Object.getOwnPropertyDescriptor;\nvar defineProperty = Object.defineProperty;\nvar TypeErr = TypeError;\nvar getProto = Object.getPrototypeOf;\nvar regex = /a/;\n\nmodule.exports = function shimFlags() {\n\tif (!supportsDescriptors || !getProto) {\n\t\tthrow new TypeErr('RegExp.prototype.flags requires a true ES5 environment that supports property descriptors');\n\t}\n\tvar polyfill = getPolyfill();\n\tvar proto = getProto(regex);\n\tvar descriptor = gOPD(proto, 'flags');\n\tif (!descriptor || descriptor.get !== polyfill) {\n\t\tdefineProperty(proto, 'flags', {\n\t\t\tconfigurable: true,\n\t\t\tenumerable: false,\n\t\t\tget: polyfill\n\t\t});\n\t}\n\treturn polyfill;\n};\n",";(function (sax) { // wrapper for non-node envs\n sax.parser = function (strict, opt) { return new SAXParser(strict, opt) }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype',\n 'procInstName', 'procInstBody', 'entity', 'attribName',\n 'attribValue', 'cdata', 'script'\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace'\n ]\n\n function SAXParser (strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F () {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength (parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers (parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers (parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () { end(this) },\n write: write,\n resume: function () { this.error = null; return this },\n close: function () { return this.write(null) },\n flush: function () { flushBuffers(this) }\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n if (!Stream) Stream = function () {}\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream (strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream (strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream\n }\n })\n\n SAXStream.prototype.write = function (data) {\n if (typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)) {\n if (!this._decoder) {\n var SD = require('string_decoder').StringDecoder\n this._decoder = new SD('utf8')\n }\n data = this._decoder.write(data)\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace (c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote (c) {\n return c === '\"' || c === '\\''\n }\n\n function isAttribEnd (c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch (regex, c) {\n return regex.test(c)\n }\n\n function notMatch (regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // \n SCRIPT: S++, // will close everything, otherwise.\n var t = parser.tags.length\n var tagName = parser.tagName\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]()\n }\n var closeTo = tagName\n while (t--) {\n var close = parser.tags[t]\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, 'Unexpected close tag')\n } else {\n break\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n parser.textNode += ''\n parser.state = S.TEXT\n return\n }\n parser.tagName = tagName\n var s = parser.tags.length\n while (s-- > t) {\n var tag = parser.tag = parser.tags.pop()\n parser.tagName = parser.tag.name\n emitNode(parser, 'onclosetag', parser.tagName)\n\n var x = {}\n for (var i in tag.ns) {\n x[i] = tag.ns[i]\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p]\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n })\n }\n }\n if (t === 0) parser.closedRoot = true\n parser.tagName = parser.attribValue = parser.attribName = ''\n parser.attribList.length = 0\n parser.state = S.TEXT\n }\n\n function parseEntity (parser) {\n var entity = parser.entity\n var entityLC = entity.toLowerCase()\n var num\n var numStr = ''\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity]\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC]\n }\n entity = entityLC\n if (entity.charAt(0) === '#') {\n if (entity.charAt(1) === 'x') {\n entity = entity.slice(2)\n num = parseInt(entity, 16)\n numStr = num.toString(16)\n } else {\n entity = entity.slice(1)\n num = parseInt(entity, 10)\n numStr = num.toString(10)\n }\n }\n entity = entity.replace(/^0+/, '')\n if (isNaN(num) || numStr.toLowerCase() !== entity) {\n strictFail(parser, 'Invalid character entity')\n return '&' + parser.entity + ';'\n }\n\n return String.fromCodePoint(num)\n }\n\n function beginWhiteSpace (parser, c) {\n if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, 'Non-whitespace before first tag.')\n parser.textNode = c\n parser.state = S.TEXT\n }\n }\n\n function charAt (chunk, i) {\n var result = ''\n if (i < chunk.length) {\n result = chunk.charAt(i)\n }\n return result\n }\n\n function write (chunk) {\n var parser = this\n if (this.error) {\n throw this.error\n }\n if (parser.closed) {\n return error(parser,\n 'Cannot write after close. Assign an onready handler.')\n }\n if (chunk === null) {\n return end(parser)\n }\n if (typeof chunk === 'object') {\n chunk = chunk.toString()\n }\n var i = 0\n var c = ''\n while (true) {\n c = charAt(chunk, i++)\n parser.c = c\n\n if (!c) {\n break\n }\n\n if (parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE\n if (c === '\\uFEFF') {\n continue\n }\n beginWhiteSpace(parser, c)\n continue\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c)\n continue\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1\n while (c && c !== '<' && c !== '&') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1)\n }\n if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else {\n if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\n strictFail(parser, 'Text data outside of root node.')\n }\n if (c === '&') {\n parser.state = S.TEXT_ENTITY\n } else {\n parser.textNode += c\n }\n }\n continue\n\n case S.SCRIPT:\n // only non-strict\n if (c === '<') {\n parser.state = S.SCRIPT_ENDING\n } else {\n parser.script += c\n }\n continue\n\n case S.SCRIPT_ENDING:\n if (c === '/') {\n parser.state = S.CLOSE_TAG\n } else {\n parser.script += '<' + c\n parser.state = S.SCRIPT\n }\n continue\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === '!') {\n parser.state = S.SGML_DECL\n parser.sgmlDecl = ''\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG\n parser.tagName = c\n } else if (c === '/') {\n parser.state = S.CLOSE_TAG\n parser.tagName = ''\n } else if (c === '?') {\n parser.state = S.PROC_INST\n parser.procInstName = parser.procInstBody = ''\n } else {\n strictFail(parser, 'Unencoded <')\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition\n c = new Array(pad).join(' ') + c\n }\n parser.textNode += '<' + c\n parser.state = S.TEXT\n }\n continue\n\n case S.SGML_DECL:\n if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE\n if (parser.doctype || parser.sawRoot) {\n strictFail(parser,\n 'Inappropriately located doctype declaration')\n }\n parser.doctype = ''\n parser.sgmlDecl = ''\n } else if (c === '>') {\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n parser.sgmlDecl = ''\n parser.state = S.TEXT\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED\n parser.sgmlDecl += c\n } else {\n parser.sgmlDecl += c\n }\n continue\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL\n parser.q = ''\n }\n parser.sgmlDecl += c\n continue\n\n case S.DOCTYPE:\n if (c === '>') {\n parser.state = S.TEXT\n emitNode(parser, 'ondoctype', parser.doctype)\n parser.doctype = true // just remember that we saw it.\n } else {\n parser.doctype += c\n if (c === '[') {\n parser.state = S.DOCTYPE_DTD\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED\n parser.q = c\n }\n }\n continue\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.q = ''\n parser.state = S.DOCTYPE\n }\n continue\n\n case S.DOCTYPE_DTD:\n parser.doctype += c\n if (c === ']') {\n parser.state = S.DOCTYPE\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = c\n }\n continue\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD\n parser.q = ''\n }\n continue\n\n case S.COMMENT:\n if (c === '-') {\n parser.state = S.COMMENT_ENDING\n } else {\n parser.comment += c\n }\n continue\n\n case S.COMMENT_ENDING:\n if (c === '-') {\n parser.state = S.COMMENT_ENDED\n parser.comment = textopts(parser.opt, parser.comment)\n if (parser.comment) {\n emitNode(parser, 'oncomment', parser.comment)\n }\n parser.comment = ''\n } else {\n parser.comment += '-' + c\n parser.state = S.COMMENT\n }\n continue\n\n case S.COMMENT_ENDED:\n if (c !== '>') {\n strictFail(parser, 'Malformed comment')\n // allow in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += '--' + c\n parser.state = S.COMMENT\n } else {\n parser.state = S.TEXT\n }\n continue\n\n case S.CDATA:\n if (c === ']') {\n parser.state = S.CDATA_ENDING\n } else {\n parser.cdata += c\n }\n continue\n\n case S.CDATA_ENDING:\n if (c === ']') {\n parser.state = S.CDATA_ENDING_2\n } else {\n parser.cdata += ']' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.CDATA_ENDING_2:\n if (c === '>') {\n if (parser.cdata) {\n emitNode(parser, 'oncdata', parser.cdata)\n }\n emitNode(parser, 'onclosecdata')\n parser.cdata = ''\n parser.state = S.TEXT\n } else if (c === ']') {\n parser.cdata += ']'\n } else {\n parser.cdata += ']]' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.PROC_INST:\n if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY\n } else {\n parser.procInstName += c\n }\n continue\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue\n } else if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else {\n parser.procInstBody += c\n }\n continue\n\n case S.PROC_INST_ENDING:\n if (c === '>') {\n emitNode(parser, 'onprocessinginstruction', {\n name: parser.procInstName,\n body: parser.procInstBody\n })\n parser.procInstName = parser.procInstBody = ''\n parser.state = S.TEXT\n } else {\n parser.procInstBody += '?' + c\n parser.state = S.PROC_INST_BODY\n }\n continue\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else {\n newTag(parser)\n if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid character in tag name')\n }\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.OPEN_TAG_SLASH:\n if (c === '>') {\n openTag(parser, true)\n closeTag(parser)\n } else {\n strictFail(parser, 'Forward-slash in opening tag not followed by >')\n parser.state = S.ATTRIB\n }\n continue\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (c === '>') {\n strictFail(parser, 'Attribute without value')\n parser.attribValue = parser.attribName\n attrib(parser)\n openTag(parser)\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (isWhitespace(c)) {\n continue\n } else {\n strictFail(parser, 'Attribute without value')\n parser.tag.attributes[parser.attribName] = ''\n parser.attribValue = ''\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: ''\n })\n parser.attribName = ''\n if (c === '>') {\n openTag(parser)\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue\n } else if (isQuote(c)) {\n parser.q = c\n parser.state = S.ATTRIB_VALUE_QUOTED\n } else {\n strictFail(parser, 'Unquoted attribute value')\n parser.state = S.ATTRIB_VALUE_UNQUOTED\n parser.attribValue = c\n }\n continue\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n parser.q = ''\n parser.state = S.ATTRIB_VALUE_CLOSED\n continue\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, 'No whitespace between attributes')\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_U\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n if (c === '>') {\n openTag(parser)\n } else {\n parser.state = S.ATTRIB\n }\n continue\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += '') {\n closeTag(parser)\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else if (parser.script) {\n parser.script += '') {\n closeTag(parser)\n } else {\n strictFail(parser, 'Invalid characters in closing tag')\n }\n continue\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState\n var buffer\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT\n buffer = 'textNode'\n break\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED\n buffer = 'attribValue'\n break\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED\n buffer = 'attribValue'\n break\n }\n\n if (c === ';') {\n if (parser.opt.unparsedEntities) {\n var parsedEntity = parseEntity(parser)\n parser.entity = ''\n parser.state = returnState\n parser.write(parsedEntity)\n } else {\n parser[buffer] += parseEntity(parser)\n parser.entity = ''\n parser.state = returnState\n }\n } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {\n parser.entity += c\n } else {\n strictFail(parser, 'Invalid character in entity name')\n parser[buffer] += '&' + parser.entity + c\n parser.entity = ''\n parser.state = returnState\n }\n\n continue\n\n default: /* istanbul ignore next */ {\n throw new Error(parser, 'Unknown state: ' + parser.state)\n }\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser)\n }\n return parser\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n (function () {\n var stringFromCharCode = String.fromCharCode\n var floor = Math.floor\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000\n var codeUnits = []\n var highSurrogate\n var lowSurrogate\n var index = -1\n var length = arguments.length\n if (!length) {\n return ''\n }\n var result = ''\n while (++index < length) {\n var codePoint = Number(arguments[index])\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10FFFF || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError('Invalid code point: ' + codePoint)\n }\n if (codePoint <= 0xFFFF) { // BMP code point\n codeUnits.push(codePoint)\n } else { // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000\n highSurrogate = (codePoint >> 10) + 0xD800\n lowSurrogate = (codePoint % 0x400) + 0xDC00\n codeUnits.push(highSurrogate, lowSurrogate)\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits)\n codeUnits.length = 0\n }\n }\n return result\n }\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, 'fromCodePoint', {\n value: fromCodePoint,\n configurable: true,\n writable: true\n })\n } else {\n String.fromCodePoint = fromCodePoint\n }\n }())\n }\n})(typeof exports === 'undefined' ? this.sax = {} : exports)\n","'use strict';\n\nvar GetIntrinsic = require('get-intrinsic');\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar gOPD = require('gopd');\n\nvar $TypeError = require('es-errors/type');\nvar $floor = GetIntrinsic('%Math.floor%');\n\n/** @typedef {(...args: unknown[]) => unknown} Func */\n\n/** @type {(fn: T, length: number, loose?: boolean) => T} */\nmodule.exports = function setFunctionLength(fn, length) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tif (typeof length !== 'number' || length < 0 || length > 0xFFFFFFFF || $floor(length) !== length) {\n\t\tthrow new $TypeError('`length` must be a positive 32-bit integer');\n\t}\n\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\n\tvar functionLengthIsConfigurable = true;\n\tvar functionLengthIsWritable = true;\n\tif ('length' in fn && gOPD) {\n\t\tvar desc = gOPD(fn, 'length');\n\t\tif (desc && !desc.configurable) {\n\t\t\tfunctionLengthIsConfigurable = false;\n\t\t}\n\t\tif (desc && !desc.writable) {\n\t\t\tfunctionLengthIsWritable = false;\n\t\t}\n\t}\n\n\tif (functionLengthIsConfigurable || functionLengthIsWritable || !loose) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'length', length, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'length', length);\n\t\t}\n\t}\n\treturn fn;\n};\n","'use strict';\n\nvar define = require('define-data-property');\nvar hasDescriptors = require('has-property-descriptors')();\nvar functionsHaveConfigurableNames = require('functions-have-names').functionsHaveConfigurableNames();\n\nvar $TypeError = require('es-errors/type');\n\n/** @type {import('.')} */\nmodule.exports = function setFunctionName(fn, name) {\n\tif (typeof fn !== 'function') {\n\t\tthrow new $TypeError('`fn` is not a function');\n\t}\n\tvar loose = arguments.length > 2 && !!arguments[2];\n\tif (!loose || functionsHaveConfigurableNames) {\n\t\tif (hasDescriptors) {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'name', name, true, true);\n\t\t} else {\n\t\t\tdefine(/** @type {Parameters[0]} */ (fn), 'name', name);\n\t\t}\n\t}\n\treturn fn;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/lib/_stream_readable.js');\nStream.Writable = require('readable-stream/lib/_stream_writable.js');\nStream.Duplex = require('readable-stream/lib/_stream_duplex.js');\nStream.Transform = require('readable-stream/lib/_stream_transform.js');\nStream.PassThrough = require('readable-stream/lib/_stream_passthrough.js');\nStream.finished = require('readable-stream/lib/internal/streams/end-of-stream.js')\nStream.pipeline = require('readable-stream/lib/internal/streams/pipeline.js')\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","'use strict';\n\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }\n\nvar codes = {};\n\nfunction createErrorType(code, message, Base) {\n if (!Base) {\n Base = Error;\n }\n\n function getMessage(arg1, arg2, arg3) {\n if (typeof message === 'string') {\n return message;\n } else {\n return message(arg1, arg2, arg3);\n }\n }\n\n var NodeError =\n /*#__PURE__*/\n function (_Base) {\n _inheritsLoose(NodeError, _Base);\n\n function NodeError(arg1, arg2, arg3) {\n return _Base.call(this, getMessage(arg1, arg2, arg3)) || this;\n }\n\n return NodeError;\n }(Base);\n\n NodeError.prototype.name = Base.name;\n NodeError.prototype.code = code;\n codes[code] = NodeError;\n} // https://github.com/nodejs/node/blob/v10.8.0/lib/internal/errors.js\n\n\nfunction oneOf(expected, thing) {\n if (Array.isArray(expected)) {\n var len = expected.length;\n expected = expected.map(function (i) {\n return String(i);\n });\n\n if (len > 2) {\n return \"one of \".concat(thing, \" \").concat(expected.slice(0, len - 1).join(', '), \", or \") + expected[len - 1];\n } else if (len === 2) {\n return \"one of \".concat(thing, \" \").concat(expected[0], \" or \").concat(expected[1]);\n } else {\n return \"of \".concat(thing, \" \").concat(expected[0]);\n }\n } else {\n return \"of \".concat(thing, \" \").concat(String(expected));\n }\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/startsWith\n\n\nfunction startsWith(str, search, pos) {\n return str.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/endsWith\n\n\nfunction endsWith(str, search, this_len) {\n if (this_len === undefined || this_len > str.length) {\n this_len = str.length;\n }\n\n return str.substring(this_len - search.length, this_len) === search;\n} // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes\n\n\nfunction includes(str, search, start) {\n if (typeof start !== 'number') {\n start = 0;\n }\n\n if (start + search.length > str.length) {\n return false;\n } else {\n return str.indexOf(search, start) !== -1;\n }\n}\n\ncreateErrorType('ERR_INVALID_OPT_VALUE', function (name, value) {\n return 'The value \"' + value + '\" is invalid for option \"' + name + '\"';\n}, TypeError);\ncreateErrorType('ERR_INVALID_ARG_TYPE', function (name, expected, actual) {\n // determiner: 'must be' or 'must not be'\n var determiner;\n\n if (typeof expected === 'string' && startsWith(expected, 'not ')) {\n determiner = 'must not be';\n expected = expected.replace(/^not /, '');\n } else {\n determiner = 'must be';\n }\n\n var msg;\n\n if (endsWith(name, ' argument')) {\n // For cases like 'first argument'\n msg = \"The \".concat(name, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n } else {\n var type = includes(name, '.') ? 'property' : 'argument';\n msg = \"The \\\"\".concat(name, \"\\\" \").concat(type, \" \").concat(determiner, \" \").concat(oneOf(expected, 'type'));\n }\n\n msg += \". Received type \".concat(typeof actual);\n return msg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_PUSH_AFTER_EOF', 'stream.push() after EOF');\ncreateErrorType('ERR_METHOD_NOT_IMPLEMENTED', function (name) {\n return 'The ' + name + ' method is not implemented';\n});\ncreateErrorType('ERR_STREAM_PREMATURE_CLOSE', 'Premature close');\ncreateErrorType('ERR_STREAM_DESTROYED', function (name) {\n return 'Cannot call ' + name + ' after a stream was destroyed';\n});\ncreateErrorType('ERR_MULTIPLE_CALLBACK', 'Callback called multiple times');\ncreateErrorType('ERR_STREAM_CANNOT_PIPE', 'Cannot pipe, not readable');\ncreateErrorType('ERR_STREAM_WRITE_AFTER_END', 'write after end');\ncreateErrorType('ERR_STREAM_NULL_VALUES', 'May not write null values to stream', TypeError);\ncreateErrorType('ERR_UNKNOWN_ENCODING', function (arg) {\n return 'Unknown encoding: ' + arg;\n}, TypeError);\ncreateErrorType('ERR_STREAM_UNSHIFT_AFTER_END_EVENT', 'stream.unshift() after end event');\nmodule.exports.codes = codes;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/**/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) keys.push(key);\n return keys;\n};\n/**/\n\nmodule.exports = Duplex;\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\nrequire('inherits')(Duplex, Readable);\n{\n // Allow the keys array to be GC'ed.\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n Readable.call(this, options);\n Writable.call(this, options);\n this.allowHalfOpen = true;\n if (options) {\n if (options.readable === false) this.readable = false;\n if (options.writable === false) this.writable = false;\n if (options.allowHalfOpen === false) {\n this.allowHalfOpen = false;\n this.once('end', onend);\n }\n }\n}\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nObject.defineProperty(Duplex.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // If the writable side ended, then we're ok.\n if (this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n process.nextTick(onEndNT, this);\n}\nfunction onEndNT(self) {\n self.end();\n}\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\nvar Transform = require('./_stream_transform');\nrequire('inherits')(PassThrough, Transform);\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n Transform.call(this, options);\n}\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nmodule.exports = Readable;\n\n/**/\nvar Duplex;\n/**/\n\nReadable.ReadableState = ReadableState;\n\n/**/\nvar EE = require('events').EventEmitter;\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n return emitter.listeners(type).length;\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/**/\nvar debugUtil = require('util');\nvar debug;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function debug() {};\n}\n/**/\n\nvar BufferList = require('./internal/streams/buffer_list');\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_STREAM_PUSH_AFTER_EOF = _require$codes.ERR_STREAM_PUSH_AFTER_EOF,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_STREAM_UNSHIFT_AFTER_END_EVENT = _require$codes.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;\n\n// Lazy loaded to improve the startup performance.\nvar StringDecoder;\nvar createReadableStreamAsyncIterator;\nvar from;\nrequire('inherits')(Readable, Stream);\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (Array.isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\nfunction ReadableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n this.highWaterMark = getHighWaterMark(this, options, 'readableHighWaterMark', isDuplex);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n this.paused = true;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'end' (and potentially 'finish')\n this.autoDestroy = !!options.autoDestroy;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n if (!(this instanceof Readable)) return new Readable(options);\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the ReadableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n this._readableState = new ReadableState(options, this, isDuplex);\n\n // legacy\n this.readable = true;\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n Stream.call(this);\n}\nObject.defineProperty(Readable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n debug('readableAddChunk', chunk);\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n errorOrDestroy(stream, er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (addToFront) {\n if (state.endEmitted) errorOrDestroy(stream, new ERR_STREAM_UNSHIFT_AFTER_END_EVENT());else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n errorOrDestroy(stream, new ERR_STREAM_PUSH_AFTER_EOF());\n } else if (state.destroyed) {\n return false;\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n maybeReadMore(stream, state);\n }\n }\n\n // We can push more data if we are below the highWaterMark.\n // Also, if we have no data yet, we can stand some more bytes.\n // This is to work around cases where hwm=0, such as the repl.\n return !state.ended && (state.length < state.highWaterMark || state.length === 0);\n}\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n state.awaitDrain = 0;\n stream.emit('data', chunk);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer', 'Uint8Array'], chunk);\n }\n return er;\n}\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n var decoder = new StringDecoder(enc);\n this._readableState.decoder = decoder;\n // If setEncoding(null), decoder.encoding equals utf8\n this._readableState.encoding = this._readableState.decoder.encoding;\n\n // Iterate over current buffer to convert already stored Buffers:\n var p = this._readableState.buffer.head;\n var content = '';\n while (p !== null) {\n content += decoder.write(p.data);\n p = p.next;\n }\n this._readableState.buffer.clear();\n if (content !== '') this._readableState.buffer.push(content);\n this._readableState.length = content.length;\n return this;\n};\n\n// Don't raise the hwm > 1GB\nvar MAX_HWM = 0x40000000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n // TODO(ronag): Throw ERR_VALUE_OUT_OF_RANGE.\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && ((state.highWaterMark !== 0 ? state.length >= state.highWaterMark : state.length > 0) || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n if (ret === null) {\n state.needReadable = state.length <= state.highWaterMark;\n n = 0;\n } else {\n state.length -= n;\n state.awaitDrain = 0;\n }\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n if (ret !== null) this.emit('data', ret);\n return ret;\n};\nfunction onEofChunk(stream, state) {\n debug('onEofChunk');\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n if (state.sync) {\n // if we are sync, wait until next tick to emit the data.\n // Otherwise we risk emitting data in the flow()\n // the readable code triggers during a read() call\n emitReadable(stream);\n } else {\n // emit 'readable' now to make sure it gets picked up.\n state.needReadable = false;\n if (!state.emittedReadable) {\n state.emittedReadable = true;\n emitReadable_(stream);\n }\n }\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n debug('emitReadable', state.needReadable, state.emittedReadable);\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n process.nextTick(emitReadable_, stream);\n }\n}\nfunction emitReadable_(stream) {\n var state = stream._readableState;\n debug('emitReadable_', state.destroyed, state.length, state.ended);\n if (!state.destroyed && (state.length || state.ended)) {\n stream.emit('readable');\n state.emittedReadable = false;\n }\n\n // The stream needs another readable event if\n // 1. It is not flowing, as the flow mechanism will take\n // care of it.\n // 2. It is not ended.\n // 3. It is below the highWaterMark, so we can schedule\n // another readable later.\n state.needReadable = !state.flowing && !state.ended && state.length <= state.highWaterMark;\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n process.nextTick(maybeReadMore_, stream, state);\n }\n}\nfunction maybeReadMore_(stream, state) {\n // Attempt to read more data if we should.\n //\n // The conditions for reading more data are (one of):\n // - Not enough data buffered (state.length < state.highWaterMark). The loop\n // is responsible for filling the buffer with enough data if such data\n // is available. If highWaterMark is 0 and we are not in the flowing mode\n // we should _not_ attempt to buffer any extra data. We'll get more data\n // when the stream consumer calls read() instead.\n // - No data in the buffer, and the stream is in flowing mode. In this mode\n // the loop below is responsible for ensuring read() is called. Failing to\n // call read here would abort the flow and there's no other mechanism for\n // continuing the flow if the stream consumer has just subscribed to the\n // 'data' event.\n //\n // In addition to the above conditions to keep reading data, the following\n // conditions prevent the data from being read:\n // - The stream has ended (state.ended).\n // - There is already a pending 'read' operation (state.reading). This is a\n // case where the the stream has called the implementation defined _read()\n // method, but they are processing the call asynchronously and have _not_\n // called push() with new data. In this case we skip performing more\n // read()s. The execution ends in this method again after the _read() ends\n // up calling push() with more data.\n while (!state.reading && !state.ended && (state.length < state.highWaterMark || state.flowing && state.length === 0)) {\n var len = state.length;\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n errorOrDestroy(this, new ERR_METHOD_NOT_IMPLEMENTED('_read()'));\n};\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) process.nextTick(endFn);else src.once('end', endFn);\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n var ret = dest.write(chunk);\n debug('dest.write', ret);\n if (ret === false) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', state.awaitDrain);\n state.awaitDrain++;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) errorOrDestroy(dest, er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n return dest;\n};\nfunction pipeOnDrain(src) {\n return function pipeOnDrainFunctionResult() {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = {\n hasUnpiped: false\n };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n for (var i = 0; i < len; i++) dests[i].emit('unpipe', this, {\n hasUnpiped: false\n });\n return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n dest.emit('unpipe', this, unpipeInfo);\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n var state = this._readableState;\n if (ev === 'data') {\n // update readableListening so that resume() may be a no-op\n // a few lines down. This is needed to support once('readable').\n state.readableListening = this.listenerCount('readable') > 0;\n\n // Try start flowing on next tick if stream isn't explicitly paused\n if (state.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.flowing = false;\n state.emittedReadable = false;\n debug('on readable', state.length, state.reading);\n if (state.length) {\n emitReadable(this);\n } else if (!state.reading) {\n process.nextTick(nReadingNextTick, this);\n }\n }\n }\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\nReadable.prototype.removeListener = function (ev, fn) {\n var res = Stream.prototype.removeListener.call(this, ev, fn);\n if (ev === 'readable') {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nReadable.prototype.removeAllListeners = function (ev) {\n var res = Stream.prototype.removeAllListeners.apply(this, arguments);\n if (ev === 'readable' || ev === undefined) {\n // We need to check if there is someone still listening to\n // readable and reset the state. However this needs to happen\n // after readable has been emitted but before I/O (nextTick) to\n // support once('readable', fn) cycles. This means that calling\n // resume within the same tick will have no\n // effect.\n process.nextTick(updateReadableListening, this);\n }\n return res;\n};\nfunction updateReadableListening(self) {\n var state = self._readableState;\n state.readableListening = self.listenerCount('readable') > 0;\n if (state.resumeScheduled && !state.paused) {\n // flowing needs to be set to true now, otherwise\n // the upcoming resume will not flow.\n state.flowing = true;\n\n // crude way to check if we should resume\n } else if (self.listenerCount('data') > 0) {\n self.resume();\n }\n}\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n // we flow only if there is no one listening\n // for readable, but we still have to call\n // resume()\n state.flowing = !state.readableListening;\n resume(this, state);\n }\n state.paused = false;\n return this;\n};\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n process.nextTick(resume_, stream, state);\n }\n}\nfunction resume_(stream, state) {\n debug('resume', state.reading);\n if (!state.reading) {\n stream.read(0);\n }\n state.resumeScheduled = false;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (this._readableState.flowing !== false) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n this._readableState.paused = true;\n return this;\n};\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null);\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n var state = this._readableState;\n var paused = false;\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n _this.push(null);\n });\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function methodWrap(method) {\n return function methodWrapReturnFunction() {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n return this;\n};\nif (typeof Symbol === 'function') {\n Readable.prototype[Symbol.asyncIterator] = function () {\n if (createReadableStreamAsyncIterator === undefined) {\n createReadableStreamAsyncIterator = require('./internal/streams/async_iterator');\n }\n return createReadableStreamAsyncIterator(this);\n };\n}\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.highWaterMark;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState && this._readableState.buffer;\n }\n});\nObject.defineProperty(Readable.prototype, 'readableFlowing', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.flowing;\n },\n set: function set(state) {\n if (this._readableState) {\n this._readableState.flowing = state;\n }\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\nObject.defineProperty(Readable.prototype, 'readableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._readableState.length;\n }\n});\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.first();else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = state.buffer.consume(n, state.decoder);\n }\n return ret;\n}\nfunction endReadable(stream) {\n var state = stream._readableState;\n debug('endReadable', state.endEmitted);\n if (!state.endEmitted) {\n state.ended = true;\n process.nextTick(endReadableNT, state, stream);\n }\n}\nfunction endReadableNT(state, stream) {\n debug('endReadableNT', state.endEmitted, state.length);\n\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the writable side is ready for autoDestroy as well\n var wState = stream._writableState;\n if (!wState || wState.autoDestroy && wState.finished) {\n stream.destroy();\n }\n }\n }\n}\nif (typeof Symbol === 'function') {\n Readable.from = function (iterable, opts) {\n if (from === undefined) {\n from = require('./internal/streams/from');\n }\n return from(Readable, iterable, opts);\n };\n}\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\nvar _require$codes = require('../errors').codes,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_TRANSFORM_ALREADY_TRANSFORMING = _require$codes.ERR_TRANSFORM_ALREADY_TRANSFORMING,\n ERR_TRANSFORM_WITH_LENGTH_0 = _require$codes.ERR_TRANSFORM_WITH_LENGTH_0;\nvar Duplex = require('./_stream_duplex');\nrequire('inherits')(Transform, Duplex);\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n var cb = ts.writecb;\n if (cb === null) {\n return this.emit('error', new ERR_MULTIPLE_CALLBACK());\n }\n ts.writechunk = null;\n ts.writecb = null;\n if (data != null)\n // single equals check for both `null` and `undefined`\n this.push(data);\n cb(er);\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n Duplex.call(this, options);\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\nfunction prefinish() {\n var _this = this;\n if (typeof this._flush === 'function' && !this._readableState.destroyed) {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_transform()'));\n};\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n if (ts.writechunk !== null && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\nTransform.prototype._destroy = function (err, cb) {\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n });\n};\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n if (data != null)\n // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // TODO(BridgeAR): Write a test for these two error cases\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new ERR_TRANSFORM_WITH_LENGTH_0();\n if (stream._transformState.transforming) throw new ERR_TRANSFORM_ALREADY_TRANSFORMING();\n return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\nmodule.exports = Writable;\n\n/* */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* */\n\n/**/\nvar Duplex;\n/**/\n\nWritable.WritableState = WritableState;\n\n/**/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/**/\n\n/**/\nvar Stream = require('./internal/streams/stream');\n/**/\n\nvar Buffer = require('buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\nvar destroyImpl = require('./internal/streams/destroy');\nvar _require = require('./internal/streams/state'),\n getHighWaterMark = _require.getHighWaterMark;\nvar _require$codes = require('../errors').codes,\n ERR_INVALID_ARG_TYPE = _require$codes.ERR_INVALID_ARG_TYPE,\n ERR_METHOD_NOT_IMPLEMENTED = _require$codes.ERR_METHOD_NOT_IMPLEMENTED,\n ERR_MULTIPLE_CALLBACK = _require$codes.ERR_MULTIPLE_CALLBACK,\n ERR_STREAM_CANNOT_PIPE = _require$codes.ERR_STREAM_CANNOT_PIPE,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED,\n ERR_STREAM_NULL_VALUES = _require$codes.ERR_STREAM_NULL_VALUES,\n ERR_STREAM_WRITE_AFTER_END = _require$codes.ERR_STREAM_WRITE_AFTER_END,\n ERR_UNKNOWN_ENCODING = _require$codes.ERR_UNKNOWN_ENCODING;\nvar errorOrDestroy = destroyImpl.errorOrDestroy;\nrequire('inherits')(Writable, Stream);\nfunction nop() {}\nfunction WritableState(options, stream, isDuplex) {\n Duplex = Duplex || require('./_stream_duplex');\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream,\n // e.g. options.readableObjectMode vs. options.writableObjectMode, etc.\n if (typeof isDuplex !== 'boolean') isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n this.highWaterMark = getHighWaterMark(this, options, 'writableHighWaterMark', isDuplex);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // Should close be emitted on destroy. Defaults to true.\n this.emitClose = options.emitClose !== false;\n\n // Should .destroy() be called after 'finish' (and potentially 'end')\n this.autoDestroy = !!options.autoDestroy;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function writableStateBufferGetter() {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function value(object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function realHasInstance(object) {\n return object instanceof this;\n };\n}\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n\n // Checking for a Stream.Duplex instance is faster here instead of inside\n // the WritableState constructor, at least with V8 6.5\n var isDuplex = this instanceof Duplex;\n if (!isDuplex && !realHasInstance.call(Writable, this)) return new Writable(options);\n this._writableState = new WritableState(options, this, isDuplex);\n\n // legacy.\n this.writable = true;\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n if (typeof options.writev === 'function') this._writev = options.writev;\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n if (typeof options.final === 'function') this._final = options.final;\n }\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n errorOrDestroy(this, new ERR_STREAM_CANNOT_PIPE());\n};\nfunction writeAfterEnd(stream, cb) {\n var er = new ERR_STREAM_WRITE_AFTER_END();\n // TODO: defer error events consistently everywhere, not just the cb\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var er;\n if (chunk === null) {\n er = new ERR_STREAM_NULL_VALUES();\n } else if (typeof chunk !== 'string' && !state.objectMode) {\n er = new ERR_INVALID_ARG_TYPE('chunk', ['string', 'Buffer'], chunk);\n }\n if (er) {\n errorOrDestroy(stream, er);\n process.nextTick(cb, er);\n return false;\n }\n return true;\n}\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n if (typeof cb !== 'function') cb = nop;\n if (state.ending) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n return ret;\n};\nWritable.prototype.cork = function () {\n this._writableState.corked++;\n};\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n if (state.corked) {\n state.corked--;\n if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new ERR_UNKNOWN_ENCODING(encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableBuffer', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState && this._writableState.getBuffer();\n }\n});\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n state.length += len;\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n return ret;\n}\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (state.destroyed) state.onwrite(new ERR_STREAM_DESTROYED('write'));else if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n process.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n process.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n errorOrDestroy(stream, er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n if (typeof cb !== 'function') throw new ERR_MULTIPLE_CALLBACK();\n onwriteStateUpdate(state);\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state) || stream.destroyed;\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n if (sync) {\n process.nextTick(afterWrite, stream, state, finished, cb);\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n if (entry === null) state.lastBufferedRequest = null;\n }\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new ERR_METHOD_NOT_IMPLEMENTED('_write()'));\n};\nWritable.prototype._writev = null;\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending) endWritable(this, state, cb);\n return this;\n};\nObject.defineProperty(Writable.prototype, 'writableLength', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n return this._writableState.length;\n }\n});\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n errorOrDestroy(stream, err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function' && !state.destroyed) {\n state.pendingcb++;\n state.finalCalled = true;\n process.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n if (state.autoDestroy) {\n // In case of duplex streams we need a way to detect\n // if the readable side is ready for autoDestroy as well\n var rState = stream._readableState;\n if (!rState || rState.autoDestroy && rState.endEmitted) {\n stream.destroy();\n }\n }\n }\n }\n return need;\n}\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) process.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n\n // reuse the free corkReq.\n state.corkedRequestsFree.next = corkReq;\n}\nObject.defineProperty(Writable.prototype, 'destroyed', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function get() {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function set(value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n cb(err);\n};","'use strict';\n\nvar _Object$setPrototypeO;\nfunction _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\nfunction _toPropertyKey(arg) { var key = _toPrimitive(arg, \"string\"); return typeof key === \"symbol\" ? key : String(key); }\nfunction _toPrimitive(input, hint) { if (typeof input !== \"object\" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || \"default\"); if (typeof res !== \"object\") return res; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (hint === \"string\" ? String : Number)(input); }\nvar finished = require('./end-of-stream');\nvar kLastResolve = Symbol('lastResolve');\nvar kLastReject = Symbol('lastReject');\nvar kError = Symbol('error');\nvar kEnded = Symbol('ended');\nvar kLastPromise = Symbol('lastPromise');\nvar kHandlePromise = Symbol('handlePromise');\nvar kStream = Symbol('stream');\nfunction createIterResult(value, done) {\n return {\n value: value,\n done: done\n };\n}\nfunction readAndResolve(iter) {\n var resolve = iter[kLastResolve];\n if (resolve !== null) {\n var data = iter[kStream].read();\n // we defer if data is null\n // we can be expecting either 'end' or\n // 'error'\n if (data !== null) {\n iter[kLastPromise] = null;\n iter[kLastResolve] = null;\n iter[kLastReject] = null;\n resolve(createIterResult(data, false));\n }\n }\n}\nfunction onReadable(iter) {\n // we wait for the next tick, because it might\n // emit an error with process.nextTick\n process.nextTick(readAndResolve, iter);\n}\nfunction wrapForNext(lastPromise, iter) {\n return function (resolve, reject) {\n lastPromise.then(function () {\n if (iter[kEnded]) {\n resolve(createIterResult(undefined, true));\n return;\n }\n iter[kHandlePromise](resolve, reject);\n }, reject);\n };\n}\nvar AsyncIteratorPrototype = Object.getPrototypeOf(function () {});\nvar ReadableStreamAsyncIteratorPrototype = Object.setPrototypeOf((_Object$setPrototypeO = {\n get stream() {\n return this[kStream];\n },\n next: function next() {\n var _this = this;\n // if we have detected an error in the meanwhile\n // reject straight away\n var error = this[kError];\n if (error !== null) {\n return Promise.reject(error);\n }\n if (this[kEnded]) {\n return Promise.resolve(createIterResult(undefined, true));\n }\n if (this[kStream].destroyed) {\n // We need to defer via nextTick because if .destroy(err) is\n // called, the error will be emitted via nextTick, and\n // we cannot guarantee that there is no error lingering around\n // waiting to be emitted.\n return new Promise(function (resolve, reject) {\n process.nextTick(function () {\n if (_this[kError]) {\n reject(_this[kError]);\n } else {\n resolve(createIterResult(undefined, true));\n }\n });\n });\n }\n\n // if we have multiple next() calls\n // we will wait for the previous Promise to finish\n // this logic is optimized to support for await loops,\n // where next() is only called once at a time\n var lastPromise = this[kLastPromise];\n var promise;\n if (lastPromise) {\n promise = new Promise(wrapForNext(lastPromise, this));\n } else {\n // fast path needed to support multiple this.push()\n // without triggering the next() queue\n var data = this[kStream].read();\n if (data !== null) {\n return Promise.resolve(createIterResult(data, false));\n }\n promise = new Promise(this[kHandlePromise]);\n }\n this[kLastPromise] = promise;\n return promise;\n }\n}, _defineProperty(_Object$setPrototypeO, Symbol.asyncIterator, function () {\n return this;\n}), _defineProperty(_Object$setPrototypeO, \"return\", function _return() {\n var _this2 = this;\n // destroy(err, cb) is a private API\n // we can guarantee we have that here, because we control the\n // Readable class this is attached to\n return new Promise(function (resolve, reject) {\n _this2[kStream].destroy(null, function (err) {\n if (err) {\n reject(err);\n return;\n }\n resolve(createIterResult(undefined, true));\n });\n });\n}), _Object$setPrototypeO), AsyncIteratorPrototype);\nvar createReadableStreamAsyncIterator = function createReadableStreamAsyncIterator(stream) {\n var _Object$create;\n var iterator = Object.create(ReadableStreamAsyncIteratorPrototype, (_Object$create = {}, _defineProperty(_Object$create, kStream, {\n value: stream,\n writable: true\n }), _defineProperty(_Object$create, kLastResolve, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kLastReject, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kError, {\n value: null,\n writable: true\n }), _defineProperty(_Object$create, kEnded, {\n value: stream._readableState.endEmitted,\n writable: true\n }), _defineProperty(_Object$create, kHandlePromise, {\n value: function value(resolve, reject) {\n var data = iterator[kStream].read();\n if (data) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(data, false));\n } else {\n iterator[kLastResolve] = resolve;\n iterator[kLastReject] = reject;\n }\n },\n writable: true\n }), _Object$create));\n iterator[kLastPromise] = null;\n finished(stream, function (err) {\n if (err && err.code !== 'ERR_STREAM_PREMATURE_CLOSE') {\n var reject = iterator[kLastReject];\n // reject if we are waiting for data in the Promise\n // returned by next() and store the error\n if (reject !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n reject(err);\n }\n iterator[kError] = err;\n return;\n }\n var resolve = iterator[kLastResolve];\n if (resolve !== null) {\n iterator[kLastPromise] = null;\n iterator[kLastResolve] = null;\n iterator[kLastReject] = null;\n resolve(createIterResult(undefined, true));\n }\n iterator[kEnded] = true;\n });\n stream.on('readable', onReadable.bind(null, iterator));\n return iterator;\n};\nmodule.exports = createReadableStreamAsyncIterator;","'use strict';\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err) {\n if (!this._writableState) {\n process.nextTick(emitErrorNT, this, err);\n } else if (!this._writableState.errorEmitted) {\n this._writableState.errorEmitted = true;\n process.nextTick(emitErrorNT, this, err);\n }\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n if (!_this._writableState) {\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else if (!_this._writableState.errorEmitted) {\n _this._writableState.errorEmitted = true;\n process.nextTick(emitErrorAndCloseNT, _this, err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n } else if (cb) {\n process.nextTick(emitCloseNT, _this);\n cb(err);\n } else {\n process.nextTick(emitCloseNT, _this);\n }\n });\n return this;\n}\nfunction emitErrorAndCloseNT(self, err) {\n emitErrorNT(self, err);\n emitCloseNT(self);\n}\nfunction emitCloseNT(self) {\n if (self._writableState && !self._writableState.emitClose) return;\n if (self._readableState && !self._readableState.emitClose) return;\n self.emit('close');\n}\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finalCalled = false;\n this._writableState.prefinished = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\nfunction errorOrDestroy(stream, err) {\n // We have tests that rely on errors being emitted\n // in the same tick, so changing this is semver major.\n // For now when you opt-in to autoDestroy we allow\n // the error to be emitted nextTick. In a future\n // semver major update we should change the default to this.\n\n var rState = stream._readableState;\n var wState = stream._writableState;\n if (rState && rState.autoDestroy || wState && wState.autoDestroy) stream.destroy(err);else stream.emit('error', err);\n}\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy,\n errorOrDestroy: errorOrDestroy\n};","// Ported from https://github.com/mafintosh/end-of-stream with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar ERR_STREAM_PREMATURE_CLOSE = require('../../../errors').codes.ERR_STREAM_PREMATURE_CLOSE;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n callback.apply(this, args);\n };\n}\nfunction noop() {}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction eos(stream, opts, callback) {\n if (typeof opts === 'function') return eos(stream, null, opts);\n if (!opts) opts = {};\n callback = once(callback || noop);\n var readable = opts.readable || opts.readable !== false && stream.readable;\n var writable = opts.writable || opts.writable !== false && stream.writable;\n var onlegacyfinish = function onlegacyfinish() {\n if (!stream.writable) onfinish();\n };\n var writableEnded = stream._writableState && stream._writableState.finished;\n var onfinish = function onfinish() {\n writable = false;\n writableEnded = true;\n if (!readable) callback.call(stream);\n };\n var readableEnded = stream._readableState && stream._readableState.endEmitted;\n var onend = function onend() {\n readable = false;\n readableEnded = true;\n if (!writable) callback.call(stream);\n };\n var onerror = function onerror(err) {\n callback.call(stream, err);\n };\n var onclose = function onclose() {\n var err;\n if (readable && !readableEnded) {\n if (!stream._readableState || !stream._readableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n if (writable && !writableEnded) {\n if (!stream._writableState || !stream._writableState.ended) err = new ERR_STREAM_PREMATURE_CLOSE();\n return callback.call(stream, err);\n }\n };\n var onrequest = function onrequest() {\n stream.req.on('finish', onfinish);\n };\n if (isRequest(stream)) {\n stream.on('complete', onfinish);\n stream.on('abort', onclose);\n if (stream.req) onrequest();else stream.on('request', onrequest);\n } else if (writable && !stream._writableState) {\n // legacy streams\n stream.on('end', onlegacyfinish);\n stream.on('close', onlegacyfinish);\n }\n stream.on('end', onend);\n stream.on('finish', onfinish);\n if (opts.error !== false) stream.on('error', onerror);\n stream.on('close', onclose);\n return function () {\n stream.removeListener('complete', onfinish);\n stream.removeListener('abort', onclose);\n stream.removeListener('request', onrequest);\n if (stream.req) stream.req.removeListener('finish', onfinish);\n stream.removeListener('end', onlegacyfinish);\n stream.removeListener('close', onlegacyfinish);\n stream.removeListener('finish', onfinish);\n stream.removeListener('end', onend);\n stream.removeListener('error', onerror);\n stream.removeListener('close', onclose);\n };\n}\nmodule.exports = eos;","module.exports = function () {\n throw new Error('Readable.from is not available in the browser')\n};\n","// Ported from https://github.com/mafintosh/pump with\n// permission from the author, Mathias Buus (@mafintosh).\n\n'use strict';\n\nvar eos;\nfunction once(callback) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n callback.apply(void 0, arguments);\n };\n}\nvar _require$codes = require('../../../errors').codes,\n ERR_MISSING_ARGS = _require$codes.ERR_MISSING_ARGS,\n ERR_STREAM_DESTROYED = _require$codes.ERR_STREAM_DESTROYED;\nfunction noop(err) {\n // Rethrow the error if it exists to avoid swallowing it\n if (err) throw err;\n}\nfunction isRequest(stream) {\n return stream.setHeader && typeof stream.abort === 'function';\n}\nfunction destroyer(stream, reading, writing, callback) {\n callback = once(callback);\n var closed = false;\n stream.on('close', function () {\n closed = true;\n });\n if (eos === undefined) eos = require('./end-of-stream');\n eos(stream, {\n readable: reading,\n writable: writing\n }, function (err) {\n if (err) return callback(err);\n closed = true;\n callback();\n });\n var destroyed = false;\n return function (err) {\n if (closed) return;\n if (destroyed) return;\n destroyed = true;\n\n // request.destroy just do .end - .abort is what we want\n if (isRequest(stream)) return stream.abort();\n if (typeof stream.destroy === 'function') return stream.destroy();\n callback(err || new ERR_STREAM_DESTROYED('pipe'));\n };\n}\nfunction call(fn) {\n fn();\n}\nfunction pipe(from, to) {\n return from.pipe(to);\n}\nfunction popCallback(streams) {\n if (!streams.length) return noop;\n if (typeof streams[streams.length - 1] !== 'function') return noop;\n return streams.pop();\n}\nfunction pipeline() {\n for (var _len = arguments.length, streams = new Array(_len), _key = 0; _key < _len; _key++) {\n streams[_key] = arguments[_key];\n }\n var callback = popCallback(streams);\n if (Array.isArray(streams[0])) streams = streams[0];\n if (streams.length < 2) {\n throw new ERR_MISSING_ARGS('streams');\n }\n var error;\n var destroys = streams.map(function (stream, i) {\n var reading = i < streams.length - 1;\n var writing = i > 0;\n return destroyer(stream, reading, writing, function (err) {\n if (!error) error = err;\n if (err) destroys.forEach(call);\n if (reading) return;\n destroys.forEach(call);\n callback(error);\n });\n });\n return streams.reduce(pipe);\n}\nmodule.exports = pipeline;","'use strict';\n\nvar ERR_INVALID_OPT_VALUE = require('../../../errors').codes.ERR_INVALID_OPT_VALUE;\nfunction highWaterMarkFrom(options, isDuplex, duplexKey) {\n return options.highWaterMark != null ? options.highWaterMark : isDuplex ? options[duplexKey] : null;\n}\nfunction getHighWaterMark(state, options, duplexKey, isDuplex) {\n var hwm = highWaterMarkFrom(options, isDuplex, duplexKey);\n if (hwm != null) {\n if (!(isFinite(hwm) && Math.floor(hwm) === hwm) || hwm < 0) {\n var name = isDuplex ? duplexKey : 'highWaterMark';\n throw new ERR_INVALID_OPT_VALUE(name, hwm);\n }\n return Math.floor(hwm);\n }\n\n // Default value\n return state.objectMode ? 16 : 16 * 1024;\n}\nmodule.exports = {\n getHighWaterMark: getHighWaterMark\n};","module.exports = require('events').EventEmitter;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/**/\n\nvar Buffer = require('safe-buffer').Buffer;\n/**/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","var TINF_OK = 0;\nvar TINF_DATA_ERROR = -3;\n\nfunction Tree() {\n this.table = new Uint16Array(16); /* table of code length counts */\n this.trans = new Uint16Array(288); /* code -> symbol translation table */\n}\n\nfunction Data(source, dest) {\n this.source = source;\n this.sourceIndex = 0;\n this.tag = 0;\n this.bitcount = 0;\n \n this.dest = dest;\n this.destLen = 0;\n \n this.ltree = new Tree(); /* dynamic length/symbol tree */\n this.dtree = new Tree(); /* dynamic distance tree */\n}\n\n/* --------------------------------------------------- *\n * -- uninitialized global data (static structures) -- *\n * --------------------------------------------------- */\n\nvar sltree = new Tree();\nvar sdtree = new Tree();\n\n/* extra bits and base tables for length codes */\nvar length_bits = new Uint8Array(30);\nvar length_base = new Uint16Array(30);\n\n/* extra bits and base tables for distance codes */\nvar dist_bits = new Uint8Array(30);\nvar dist_base = new Uint16Array(30);\n\n/* special ordering of code length codes */\nvar clcidx = new Uint8Array([\n 16, 17, 18, 0, 8, 7, 9, 6,\n 10, 5, 11, 4, 12, 3, 13, 2,\n 14, 1, 15\n]);\n\n/* used by tinf_decode_trees, avoids allocations every call */\nvar code_tree = new Tree();\nvar lengths = new Uint8Array(288 + 32);\n\n/* ----------------------- *\n * -- utility functions -- *\n * ----------------------- */\n\n/* build extra bits and base tables */\nfunction tinf_build_bits_base(bits, base, delta, first) {\n var i, sum;\n\n /* build bits table */\n for (i = 0; i < delta; ++i) bits[i] = 0;\n for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0;\n\n /* build base table */\n for (sum = first, i = 0; i < 30; ++i) {\n base[i] = sum;\n sum += 1 << bits[i];\n }\n}\n\n/* build the fixed huffman trees */\nfunction tinf_build_fixed_trees(lt, dt) {\n var i;\n\n /* build fixed length tree */\n for (i = 0; i < 7; ++i) lt.table[i] = 0;\n\n lt.table[7] = 24;\n lt.table[8] = 152;\n lt.table[9] = 112;\n\n for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i;\n for (i = 0; i < 144; ++i) lt.trans[24 + i] = i;\n for (i = 0; i < 8; ++i) lt.trans[24 + 144 + i] = 280 + i;\n for (i = 0; i < 112; ++i) lt.trans[24 + 144 + 8 + i] = 144 + i;\n\n /* build fixed distance tree */\n for (i = 0; i < 5; ++i) dt.table[i] = 0;\n\n dt.table[5] = 32;\n\n for (i = 0; i < 32; ++i) dt.trans[i] = i;\n}\n\n/* given an array of code lengths, build a tree */\nvar offs = new Uint16Array(16);\n\nfunction tinf_build_tree(t, lengths, off, num) {\n var i, sum;\n\n /* clear code length count table */\n for (i = 0; i < 16; ++i) t.table[i] = 0;\n\n /* scan symbol lengths, and sum code length counts */\n for (i = 0; i < num; ++i) t.table[lengths[off + i]]++;\n\n t.table[0] = 0;\n\n /* compute offset table for distribution sort */\n for (sum = 0, i = 0; i < 16; ++i) {\n offs[i] = sum;\n sum += t.table[i];\n }\n\n /* create code->symbol translation table (symbols sorted by code) */\n for (i = 0; i < num; ++i) {\n if (lengths[off + i]) t.trans[offs[lengths[off + i]]++] = i;\n }\n}\n\n/* ---------------------- *\n * -- decode functions -- *\n * ---------------------- */\n\n/* get one bit from source stream */\nfunction tinf_getbit(d) {\n /* check if tag is empty */\n if (!d.bitcount--) {\n /* load next tag */\n d.tag = d.source[d.sourceIndex++];\n d.bitcount = 7;\n }\n\n /* shift bit out of tag */\n var bit = d.tag & 1;\n d.tag >>>= 1;\n\n return bit;\n}\n\n/* read a num bit value from a stream and add base */\nfunction tinf_read_bits(d, num, base) {\n if (!num)\n return base;\n\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n\n var val = d.tag & (0xffff >>> (16 - num));\n d.tag >>>= num;\n d.bitcount -= num;\n return val + base;\n}\n\n/* given a data stream and a tree, decode a symbol */\nfunction tinf_decode_symbol(d, t) {\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n \n var sum = 0, cur = 0, len = 0;\n var tag = d.tag;\n\n /* get more bits while code value is above sum */\n do {\n cur = 2 * cur + (tag & 1);\n tag >>>= 1;\n ++len;\n\n sum += t.table[len];\n cur -= t.table[len];\n } while (cur >= 0);\n \n d.tag = tag;\n d.bitcount -= len;\n\n return t.trans[sum + cur];\n}\n\n/* given a data stream, decode dynamic trees from it */\nfunction tinf_decode_trees(d, lt, dt) {\n var hlit, hdist, hclen;\n var i, num, length;\n\n /* get 5 bits HLIT (257-286) */\n hlit = tinf_read_bits(d, 5, 257);\n\n /* get 5 bits HDIST (1-32) */\n hdist = tinf_read_bits(d, 5, 1);\n\n /* get 4 bits HCLEN (4-19) */\n hclen = tinf_read_bits(d, 4, 4);\n\n for (i = 0; i < 19; ++i) lengths[i] = 0;\n\n /* read code lengths for code length alphabet */\n for (i = 0; i < hclen; ++i) {\n /* get 3 bits code length (0-7) */\n var clen = tinf_read_bits(d, 3, 0);\n lengths[clcidx[i]] = clen;\n }\n\n /* build code length tree */\n tinf_build_tree(code_tree, lengths, 0, 19);\n\n /* decode code lengths for the dynamic trees */\n for (num = 0; num < hlit + hdist;) {\n var sym = tinf_decode_symbol(d, code_tree);\n\n switch (sym) {\n case 16:\n /* copy previous code length 3-6 times (read 2 bits) */\n var prev = lengths[num - 1];\n for (length = tinf_read_bits(d, 2, 3); length; --length) {\n lengths[num++] = prev;\n }\n break;\n case 17:\n /* repeat code length 0 for 3-10 times (read 3 bits) */\n for (length = tinf_read_bits(d, 3, 3); length; --length) {\n lengths[num++] = 0;\n }\n break;\n case 18:\n /* repeat code length 0 for 11-138 times (read 7 bits) */\n for (length = tinf_read_bits(d, 7, 11); length; --length) {\n lengths[num++] = 0;\n }\n break;\n default:\n /* values 0-15 represent the actual code lengths */\n lengths[num++] = sym;\n break;\n }\n }\n\n /* build dynamic trees */\n tinf_build_tree(lt, lengths, 0, hlit);\n tinf_build_tree(dt, lengths, hlit, hdist);\n}\n\n/* ----------------------------- *\n * -- block inflate functions -- *\n * ----------------------------- */\n\n/* given a stream and two trees, inflate a block of data */\nfunction tinf_inflate_block_data(d, lt, dt) {\n while (1) {\n var sym = tinf_decode_symbol(d, lt);\n\n /* check for end of block */\n if (sym === 256) {\n return TINF_OK;\n }\n\n if (sym < 256) {\n d.dest[d.destLen++] = sym;\n } else {\n var length, dist, offs;\n var i;\n\n sym -= 257;\n\n /* possibly get more bits from length code */\n length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n\n dist = tinf_decode_symbol(d, dt);\n\n /* possibly get more bits from distance code */\n offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n\n /* copy match */\n for (i = offs; i < offs + length; ++i) {\n d.dest[d.destLen++] = d.dest[i];\n }\n }\n }\n}\n\n/* inflate an uncompressed block of data */\nfunction tinf_inflate_uncompressed_block(d) {\n var length, invlength;\n var i;\n \n /* unread from bitbuffer */\n while (d.bitcount > 8) {\n d.sourceIndex--;\n d.bitcount -= 8;\n }\n\n /* get length */\n length = d.source[d.sourceIndex + 1];\n length = 256 * length + d.source[d.sourceIndex];\n\n /* get one's complement of length */\n invlength = d.source[d.sourceIndex + 3];\n invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n\n /* check length */\n if (length !== (~invlength & 0x0000ffff))\n return TINF_DATA_ERROR;\n\n d.sourceIndex += 4;\n\n /* copy block */\n for (i = length; i; --i)\n d.dest[d.destLen++] = d.source[d.sourceIndex++];\n\n /* make sure we start next block on a byte boundary */\n d.bitcount = 0;\n\n return TINF_OK;\n}\n\n/* inflate stream from source to dest */\nfunction tinf_uncompress(source, dest) {\n var d = new Data(source, dest);\n var bfinal, btype, res;\n\n do {\n /* read final block flag */\n bfinal = tinf_getbit(d);\n\n /* read block type (2 bits) */\n btype = tinf_read_bits(d, 2, 0);\n\n /* decompress block */\n switch (btype) {\n case 0:\n /* decompress uncompressed block */\n res = tinf_inflate_uncompressed_block(d);\n break;\n case 1:\n /* decompress block with fixed huffman trees */\n res = tinf_inflate_block_data(d, sltree, sdtree);\n break;\n case 2:\n /* decompress block with dynamic huffman trees */\n tinf_decode_trees(d, d.ltree, d.dtree);\n res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n break;\n default:\n res = TINF_DATA_ERROR;\n }\n\n if (res !== TINF_OK)\n throw new Error('Data error');\n\n } while (!bfinal);\n\n if (d.destLen < d.dest.length) {\n if (typeof d.dest.slice === 'function')\n return d.dest.slice(0, d.destLen);\n else\n return d.dest.subarray(0, d.destLen);\n }\n \n return d.dest;\n}\n\n/* -------------------- *\n * -- initialization -- *\n * -------------------- */\n\n/* build fixed huffman trees */\ntinf_build_fixed_trees(sltree, sdtree);\n\n/* build extra bits and base tables */\ntinf_build_bits_base(length_bits, length_base, 4, 3);\ntinf_build_bits_base(dist_bits, dist_base, 2, 1);\n\n/* fix a special case */\nlength_bits[28] = 0;\nlength_base[28] = 258;\n\nmodule.exports = tinf_uncompress;\n","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","// Currently in sync with Node.js lib/internal/util/types.js\n// https://github.com/nodejs/node/commit/112cc7c27551254aa2b17098fb774867f05ed0d9\n\n'use strict';\n\nvar isArgumentsObject = require('is-arguments');\nvar isGeneratorFunction = require('is-generator-function');\nvar whichTypedArray = require('which-typed-array');\nvar isTypedArray = require('is-typed-array');\n\nfunction uncurryThis(f) {\n return f.call.bind(f);\n}\n\nvar BigIntSupported = typeof BigInt !== 'undefined';\nvar SymbolSupported = typeof Symbol !== 'undefined';\n\nvar ObjectToString = uncurryThis(Object.prototype.toString);\n\nvar numberValue = uncurryThis(Number.prototype.valueOf);\nvar stringValue = uncurryThis(String.prototype.valueOf);\nvar booleanValue = uncurryThis(Boolean.prototype.valueOf);\n\nif (BigIntSupported) {\n var bigIntValue = uncurryThis(BigInt.prototype.valueOf);\n}\n\nif (SymbolSupported) {\n var symbolValue = uncurryThis(Symbol.prototype.valueOf);\n}\n\nfunction checkBoxedPrimitive(value, prototypeValueOf) {\n if (typeof value !== 'object') {\n return false;\n }\n try {\n prototypeValueOf(value);\n return true;\n } catch(e) {\n return false;\n }\n}\n\nexports.isArgumentsObject = isArgumentsObject;\nexports.isGeneratorFunction = isGeneratorFunction;\nexports.isTypedArray = isTypedArray;\n\n// Taken from here and modified for better browser support\n// https://github.com/sindresorhus/p-is-promise/blob/cda35a513bda03f977ad5cde3a079d237e82d7ef/index.js\nfunction isPromise(input) {\n\treturn (\n\t\t(\n\t\t\ttypeof Promise !== 'undefined' &&\n\t\t\tinput instanceof Promise\n\t\t) ||\n\t\t(\n\t\t\tinput !== null &&\n\t\t\ttypeof input === 'object' &&\n\t\t\ttypeof input.then === 'function' &&\n\t\t\ttypeof input.catch === 'function'\n\t\t)\n\t);\n}\nexports.isPromise = isPromise;\n\nfunction isArrayBufferView(value) {\n if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) {\n return ArrayBuffer.isView(value);\n }\n\n return (\n isTypedArray(value) ||\n isDataView(value)\n );\n}\nexports.isArrayBufferView = isArrayBufferView;\n\n\nfunction isUint8Array(value) {\n return whichTypedArray(value) === 'Uint8Array';\n}\nexports.isUint8Array = isUint8Array;\n\nfunction isUint8ClampedArray(value) {\n return whichTypedArray(value) === 'Uint8ClampedArray';\n}\nexports.isUint8ClampedArray = isUint8ClampedArray;\n\nfunction isUint16Array(value) {\n return whichTypedArray(value) === 'Uint16Array';\n}\nexports.isUint16Array = isUint16Array;\n\nfunction isUint32Array(value) {\n return whichTypedArray(value) === 'Uint32Array';\n}\nexports.isUint32Array = isUint32Array;\n\nfunction isInt8Array(value) {\n return whichTypedArray(value) === 'Int8Array';\n}\nexports.isInt8Array = isInt8Array;\n\nfunction isInt16Array(value) {\n return whichTypedArray(value) === 'Int16Array';\n}\nexports.isInt16Array = isInt16Array;\n\nfunction isInt32Array(value) {\n return whichTypedArray(value) === 'Int32Array';\n}\nexports.isInt32Array = isInt32Array;\n\nfunction isFloat32Array(value) {\n return whichTypedArray(value) === 'Float32Array';\n}\nexports.isFloat32Array = isFloat32Array;\n\nfunction isFloat64Array(value) {\n return whichTypedArray(value) === 'Float64Array';\n}\nexports.isFloat64Array = isFloat64Array;\n\nfunction isBigInt64Array(value) {\n return whichTypedArray(value) === 'BigInt64Array';\n}\nexports.isBigInt64Array = isBigInt64Array;\n\nfunction isBigUint64Array(value) {\n return whichTypedArray(value) === 'BigUint64Array';\n}\nexports.isBigUint64Array = isBigUint64Array;\n\nfunction isMapToString(value) {\n return ObjectToString(value) === '[object Map]';\n}\nisMapToString.working = (\n typeof Map !== 'undefined' &&\n isMapToString(new Map())\n);\n\nfunction isMap(value) {\n if (typeof Map === 'undefined') {\n return false;\n }\n\n return isMapToString.working\n ? isMapToString(value)\n : value instanceof Map;\n}\nexports.isMap = isMap;\n\nfunction isSetToString(value) {\n return ObjectToString(value) === '[object Set]';\n}\nisSetToString.working = (\n typeof Set !== 'undefined' &&\n isSetToString(new Set())\n);\nfunction isSet(value) {\n if (typeof Set === 'undefined') {\n return false;\n }\n\n return isSetToString.working\n ? isSetToString(value)\n : value instanceof Set;\n}\nexports.isSet = isSet;\n\nfunction isWeakMapToString(value) {\n return ObjectToString(value) === '[object WeakMap]';\n}\nisWeakMapToString.working = (\n typeof WeakMap !== 'undefined' &&\n isWeakMapToString(new WeakMap())\n);\nfunction isWeakMap(value) {\n if (typeof WeakMap === 'undefined') {\n return false;\n }\n\n return isWeakMapToString.working\n ? isWeakMapToString(value)\n : value instanceof WeakMap;\n}\nexports.isWeakMap = isWeakMap;\n\nfunction isWeakSetToString(value) {\n return ObjectToString(value) === '[object WeakSet]';\n}\nisWeakSetToString.working = (\n typeof WeakSet !== 'undefined' &&\n isWeakSetToString(new WeakSet())\n);\nfunction isWeakSet(value) {\n return isWeakSetToString(value);\n}\nexports.isWeakSet = isWeakSet;\n\nfunction isArrayBufferToString(value) {\n return ObjectToString(value) === '[object ArrayBuffer]';\n}\nisArrayBufferToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n isArrayBufferToString(new ArrayBuffer())\n);\nfunction isArrayBuffer(value) {\n if (typeof ArrayBuffer === 'undefined') {\n return false;\n }\n\n return isArrayBufferToString.working\n ? isArrayBufferToString(value)\n : value instanceof ArrayBuffer;\n}\nexports.isArrayBuffer = isArrayBuffer;\n\nfunction isDataViewToString(value) {\n return ObjectToString(value) === '[object DataView]';\n}\nisDataViewToString.working = (\n typeof ArrayBuffer !== 'undefined' &&\n typeof DataView !== 'undefined' &&\n isDataViewToString(new DataView(new ArrayBuffer(1), 0, 1))\n);\nfunction isDataView(value) {\n if (typeof DataView === 'undefined') {\n return false;\n }\n\n return isDataViewToString.working\n ? isDataViewToString(value)\n : value instanceof DataView;\n}\nexports.isDataView = isDataView;\n\n// Store a copy of SharedArrayBuffer in case it's deleted elsewhere\nvar SharedArrayBufferCopy = typeof SharedArrayBuffer !== 'undefined' ? SharedArrayBuffer : undefined;\nfunction isSharedArrayBufferToString(value) {\n return ObjectToString(value) === '[object SharedArrayBuffer]';\n}\nfunction isSharedArrayBuffer(value) {\n if (typeof SharedArrayBufferCopy === 'undefined') {\n return false;\n }\n\n if (typeof isSharedArrayBufferToString.working === 'undefined') {\n isSharedArrayBufferToString.working = isSharedArrayBufferToString(new SharedArrayBufferCopy());\n }\n\n return isSharedArrayBufferToString.working\n ? isSharedArrayBufferToString(value)\n : value instanceof SharedArrayBufferCopy;\n}\nexports.isSharedArrayBuffer = isSharedArrayBuffer;\n\nfunction isAsyncFunction(value) {\n return ObjectToString(value) === '[object AsyncFunction]';\n}\nexports.isAsyncFunction = isAsyncFunction;\n\nfunction isMapIterator(value) {\n return ObjectToString(value) === '[object Map Iterator]';\n}\nexports.isMapIterator = isMapIterator;\n\nfunction isSetIterator(value) {\n return ObjectToString(value) === '[object Set Iterator]';\n}\nexports.isSetIterator = isSetIterator;\n\nfunction isGeneratorObject(value) {\n return ObjectToString(value) === '[object Generator]';\n}\nexports.isGeneratorObject = isGeneratorObject;\n\nfunction isWebAssemblyCompiledModule(value) {\n return ObjectToString(value) === '[object WebAssembly.Module]';\n}\nexports.isWebAssemblyCompiledModule = isWebAssemblyCompiledModule;\n\nfunction isNumberObject(value) {\n return checkBoxedPrimitive(value, numberValue);\n}\nexports.isNumberObject = isNumberObject;\n\nfunction isStringObject(value) {\n return checkBoxedPrimitive(value, stringValue);\n}\nexports.isStringObject = isStringObject;\n\nfunction isBooleanObject(value) {\n return checkBoxedPrimitive(value, booleanValue);\n}\nexports.isBooleanObject = isBooleanObject;\n\nfunction isBigIntObject(value) {\n return BigIntSupported && checkBoxedPrimitive(value, bigIntValue);\n}\nexports.isBigIntObject = isBigIntObject;\n\nfunction isSymbolObject(value) {\n return SymbolSupported && checkBoxedPrimitive(value, symbolValue);\n}\nexports.isSymbolObject = isSymbolObject;\n\nfunction isBoxedPrimitive(value) {\n return (\n isNumberObject(value) ||\n isStringObject(value) ||\n isBooleanObject(value) ||\n isBigIntObject(value) ||\n isSymbolObject(value)\n );\n}\nexports.isBoxedPrimitive = isBoxedPrimitive;\n\nfunction isAnyArrayBuffer(value) {\n return typeof Uint8Array !== 'undefined' && (\n isArrayBuffer(value) ||\n isSharedArrayBuffer(value)\n );\n}\nexports.isAnyArrayBuffer = isAnyArrayBuffer;\n\n['isProxy', 'isExternal', 'isModuleNamespaceObject'].forEach(function(method) {\n Object.defineProperty(exports, method, {\n enumerable: false,\n value: function() {\n throw new Error(method + ' is not supported in userland');\n }\n });\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnvRegex = /^$/;\n\nif (process.env.NODE_DEBUG) {\n var debugEnv = process.env.NODE_DEBUG;\n debugEnv = debugEnv.replace(/[|\\\\{}()[\\]^$+?.]/g, '\\\\$&')\n .replace(/\\*/g, '.*')\n .replace(/,/g, '$|^')\n .toUpperCase();\n debugEnvRegex = new RegExp('^' + debugEnv + '$', 'i');\n}\nexports.debuglog = function(set) {\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (debugEnvRegex.test(set)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').slice(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.slice(1, -1);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nexports.types = require('./support/types');\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\nexports.types.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\nexports.types.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\nexports.types.isNativeError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb.bind(null, null, ret)) },\n function(rej) { process.nextTick(callbackifyOnRejected.bind(null, rej, cb)) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","'use strict';\n\nvar forEach = require('for-each');\nvar availableTypedArrays = require('available-typed-arrays');\nvar callBind = require('call-bind');\nvar callBound = require('call-bind/callBound');\nvar gOPD = require('gopd');\n\nvar $toString = callBound('Object.prototype.toString');\nvar hasToStringTag = require('has-tostringtag/shams')();\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\nvar typedArrays = availableTypedArrays();\n\nvar $slice = callBound('String.prototype.slice');\nvar getPrototypeOf = Object.getPrototypeOf; // require('getprototypeof');\n\nvar $indexOf = callBound('Array.prototype.indexOf', true) || /** @type {(array: readonly unknown[], value: unknown) => keyof array} */ function indexOf(array, value) {\n\tfor (var i = 0; i < array.length; i += 1) {\n\t\tif (array[i] === value) {\n\t\t\treturn i;\n\t\t}\n\t}\n\treturn -1;\n};\n\n/** @typedef {Int8Array | Uint8Array | Uint8ClampedArray | Int16Array | Uint16Array | Int32Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array} TypedArray */\n/** @typedef {'Int8Array' | 'Uint8Array' | 'Uint8ClampedArray' | 'Int16Array' | 'Uint16Array' | 'Int32Array' | 'Uint32Array' | 'Float32Array' | 'Float64Array' | 'BigInt64Array' | 'BigUint64Array'} TypedArrayName */\n/** @type {{ [k in `\\$${TypedArrayName}`]?: (receiver: TypedArray) => string | typeof Uint8Array.prototype.slice.call | typeof Uint8Array.prototype.set.call } & { __proto__: null }} */\nvar cache = { __proto__: null };\nif (hasToStringTag && gOPD && getPrototypeOf) {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tif (Symbol.toStringTag in arr) {\n\t\t\tvar proto = getPrototypeOf(arr);\n\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\tvar descriptor = gOPD(proto, Symbol.toStringTag);\n\t\t\tif (!descriptor) {\n\t\t\t\tvar superProto = getPrototypeOf(proto);\n\t\t\t\t// @ts-expect-error TS won't narrow inside a closure\n\t\t\t\tdescriptor = gOPD(superProto, Symbol.toStringTag);\n\t\t\t}\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(descriptor.get);\n\t\t}\n\t});\n} else {\n\tforEach(typedArrays, function (typedArray) {\n\t\tvar arr = new g[typedArray]();\n\t\tvar fn = arr.slice || arr.set;\n\t\tif (fn) {\n\t\t\t// @ts-expect-error TODO: fix\n\t\t\tcache['$' + typedArray] = callBind(fn);\n\t\t}\n\t});\n}\n\n/** @type {import('.')} */\nvar tryTypedArrays = function tryAllTypedArrays(value) {\n\t/** @type {ReturnType} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {Record<`\\$${TypedArrayName}`, typeof cache>} */ /** @type {any} */ (cache),\n\t\t/** @type {(getter: typeof cache, name: `\\$${TypedArrayName}`) => void} */ function (getter, typedArray) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tif ('$' + getter(value) === typedArray) {\n\t\t\t\t\t\tfound = $slice(typedArray, 1);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nvar trySlices = function tryAllSlices(value) {\n\t/** @type {ReturnType} */ var found = false;\n\tforEach(\n\t\t// eslint-disable-next-line no-extra-parens\n\t\t/** @type {any} */ (cache),\n\t\t/** @type {(getter: typeof cache, name: `\\$${TypedArrayName}`) => void} */ function (getter, name) {\n\t\t\tif (!found) {\n\t\t\t\ttry {\n\t\t\t\t// @ts-expect-error TODO: fix\n\t\t\t\t\tgetter(value);\n\t\t\t\t\tfound = $slice(name, 1);\n\t\t\t\t} catch (e) { /**/ }\n\t\t\t}\n\t\t}\n\t);\n\treturn found;\n};\n\n/** @type {import('.')} */\nmodule.exports = function whichTypedArray(value) {\n\tif (!value || typeof value !== 'object') { return false; }\n\tif (!hasToStringTag) {\n\t\tvar tag = $slice($toString(value), 8, -1);\n\t\tif ($indexOf(typedArrays, tag) > -1) {\n\t\t\treturn tag;\n\t\t}\n\t\tif (tag !== 'Object') {\n\t\t\treturn false;\n\t\t}\n\t\t// node < 0.6 hits here on real Typed Arrays\n\t\treturn trySlices(value);\n\t}\n\tif (!gOPD) { return null; } // unknown engine\n\treturn tryTypedArrays(value);\n};\n","// This file is just added for convenience so this repository can be\n// directly checked out into a project's deps folder\nmodule.exports = require('./lib/xmldoc');\n","(function () {\n var sax;\n\n if (\n typeof module !== \"undefined\" &&\n module.exports &&\n !global.xmldocAssumeBrowser\n ) {\n // We're being used in a Node-like environment\n sax = require(\"sax\");\n } else {\n // assume it's attached to the Window object in a browser\n sax = this.sax;\n\n if (!sax) {\n // no sax for you!\n throw new Error(\n \"Expected sax to be defined. Make sure you're including sax.js before this file.\",\n );\n }\n }\n\n /**\n * XmlElement is our basic building block. Everything is an XmlElement; even XmlDocument\n * behaves like an XmlElement by inheriting its attributes and functions.\n */\n function XmlElement(tag, parser) {\n // If you didn't hand us a parser (common case) see if we can grab one\n // from the current execution stack.\n if (!parser) {\n var delegate = delegates[delegates.length - 1];\n\n if (delegate.parser) {\n parser = delegate.parser;\n }\n }\n\n this.name = tag.name;\n this.attr = tag.attributes;\n this.val = \"\";\n this.children = [];\n this.firstChild = null;\n this.lastChild = null;\n\n // Assign parse information\n this.line = parser ? parser.line : null;\n this.column = parser ? parser.column : null;\n this.position = parser ? parser.position : null;\n this.startTagPosition = parser ? parser.startTagPosition : null;\n }\n\n // Private methods\n\n XmlElement.prototype._addChild = function (child) {\n // add to our children array\n this.children.push(child);\n\n // update first/last pointers\n if (!this.firstChild) this.firstChild = child;\n this.lastChild = child;\n };\n\n // SaxParser handlers\n\n XmlElement.prototype._opentag = function (tag) {\n var child = new XmlElement(tag);\n\n this._addChild(child);\n\n delegates.unshift(child);\n };\n\n XmlElement.prototype._closetag = function () {\n delegates.shift();\n };\n\n XmlElement.prototype._text = function (text) {\n if (typeof this.children === \"undefined\") return;\n\n this.val += text;\n\n this._addChild(new XmlTextNode(text));\n };\n\n XmlElement.prototype._cdata = function (cdata) {\n this.val += cdata;\n\n this._addChild(new XmlCDataNode(cdata));\n };\n\n XmlElement.prototype._comment = function (comment) {\n if (typeof this.children === \"undefined\") return;\n\n this._addChild(new XmlCommentNode(comment));\n };\n\n XmlElement.prototype._error = function (err) {\n throw err;\n };\n\n // Useful functions\n\n XmlElement.prototype.eachChild = function (iterator, context) {\n for (var i = 0, l = this.children.length; i < l; i++)\n if (this.children[i].type === \"element\")\n if (\n iterator.call(context, this.children[i], i, this.children) === false\n )\n return;\n };\n\n XmlElement.prototype.childNamed = function (name) {\n for (var i = 0, l = this.children.length; i < l; i++) {\n var child = this.children[i];\n if (child.name === name) return child;\n }\n return undefined;\n };\n\n XmlElement.prototype.childrenNamed = function (name) {\n var matches = [];\n\n for (var i = 0, l = this.children.length; i < l; i++)\n if (this.children[i].name === name) matches.push(this.children[i]);\n\n return matches;\n };\n\n XmlElement.prototype.childWithAttribute = function (name, value) {\n for (var i = 0, l = this.children.length; i < l; i++) {\n var child = this.children[i];\n if (\n child.type === \"element\" &&\n ((value && child.attr[name] === value) || (!value && child.attr[name]))\n )\n return child;\n }\n return undefined;\n };\n\n XmlElement.prototype.descendantsNamed = function (name) {\n var matches = [];\n\n for (var i = 0, l = this.children.length; i < l; i++) {\n var child = this.children[i];\n if (child.type === \"element\") {\n if (child.name === name) matches.push(child);\n matches = matches.concat(child.descendantsNamed(name));\n }\n }\n\n return matches;\n };\n\n XmlElement.prototype.descendantWithPath = function (path) {\n var descendant = this;\n var components = path.split(\".\");\n\n for (var i = 0, l = components.length; i < l; i++)\n if (descendant && descendant.type === \"element\")\n descendant = descendant.childNamed(components[i]);\n else return undefined;\n\n return descendant;\n };\n\n XmlElement.prototype.valueWithPath = function (path) {\n var components = path.split(\"@\");\n var descendant = this.descendantWithPath(components[0]);\n if (descendant)\n return components.length > 1\n ? descendant.attr[components[1]]\n : descendant.val;\n else return undefined;\n };\n\n // String formatting (for debugging)\n\n XmlElement.prototype.toString = function (options) {\n return this.toStringWithIndent(\"\", options);\n };\n\n XmlElement.prototype.toStringWithIndent = function (indent, options) {\n var s = indent + \"<\" + this.name;\n var linebreak = options && options.compressed ? \"\" : \"\\n\";\n var preserveWhitespace = options && options.preserveWhitespace;\n\n for (var name in this.attr)\n if (Object.prototype.hasOwnProperty.call(this.attr, name))\n s += \" \" + name + '=\"' + escapeXML(this.attr[name]) + '\"';\n\n if (this.children.length === 1 && this.children[0].type !== \"element\") {\n s += \">\" + this.children[0].toString(options) + \"\";\n } else if (this.children.length) {\n s += \">\" + linebreak;\n\n var childIndent = indent + (options && options.compressed ? \"\" : \" \");\n\n for (var i = 0, l = this.children.length; i < l; i++) {\n s +=\n this.children[i].toStringWithIndent(childIndent, options) + linebreak;\n }\n\n s += indent + \"\";\n } else if (options && options.html) {\n var whiteList = [\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"keygen\",\n \"link\",\n \"menuitem\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n ];\n if (whiteList.indexOf(this.name) !== -1) s += \"/>\";\n else s += \">\";\n } else {\n s += \"/>\";\n }\n\n return s;\n };\n\n // Alternative XML nodes\n\n function XmlTextNode(text) {\n this.text = text;\n }\n\n XmlTextNode.prototype.toString = function (options) {\n return formatText(escapeXML(this.text), options);\n };\n\n XmlTextNode.prototype.toStringWithIndent = function (indent, options) {\n return indent + this.toString(options);\n };\n\n function XmlCDataNode(cdata) {\n this.cdata = cdata;\n }\n\n XmlCDataNode.prototype.toString = function (options) {\n return \"\";\n };\n\n XmlCDataNode.prototype.toStringWithIndent = function (indent, options) {\n return indent + this.toString(options);\n };\n\n function XmlCommentNode(comment) {\n this.comment = comment;\n }\n\n XmlCommentNode.prototype.toString = function (options) {\n return \"\";\n };\n\n XmlCommentNode.prototype.toStringWithIndent = function (indent, options) {\n return indent + this.toString(options);\n };\n\n // Node type tag\n\n XmlElement.prototype.type = \"element\";\n XmlTextNode.prototype.type = \"text\";\n XmlCDataNode.prototype.type = \"cdata\";\n XmlCommentNode.prototype.type = \"comment\";\n\n /**\n * XmlDocument is the class we expose to the user; it uses the sax parser to create a hierarchy\n * of XmlElements.\n */\n function XmlDocument(xml) {\n xml && (xml = xml.toString().trim());\n\n if (!xml) throw new Error(\"No XML to parse!\");\n\n // Stores doctype (if defined)\n this.doctype = \"\";\n\n // Expose the parser to the other delegates while the parser is running\n this.parser = sax.parser(true); // strict\n addParserEvents(this.parser);\n\n // We'll use the file-scoped \"delegates\" var to remember what elements we're currently\n // parsing; they will push and pop off the stack as we get deeper into the XML hierarchy.\n // It's safe to use a global because JS is single-threaded.\n delegates = [this];\n\n try {\n this.parser.write(xml);\n } finally {\n // Remove the parser as it is no longer needed and should not be exposed to clients\n delete this.parser;\n }\n }\n\n // make XmlDocument inherit XmlElement's methods\n extend(XmlDocument.prototype, XmlElement.prototype);\n\n XmlDocument.prototype._opentag = function (tag) {\n if (typeof this.children === \"undefined\")\n // the first tag we encounter should be the root - we'll \"become\" the root XmlElement\n XmlElement.call(this, tag);\n // all other tags will be the root element's children\n else XmlElement.prototype._opentag.apply(this, arguments);\n };\n\n XmlDocument.prototype._doctype = function (doctype) {\n this.doctype += doctype;\n };\n\n // file-scoped global stack of delegates\n var delegates = null;\n\n /*\n * Helper functions\n */\n\n function addParserEvents(parser) {\n parser.onopentag = parser_opentag;\n parser.onclosetag = parser_closetag;\n parser.ontext = parser_text;\n parser.oncdata = parser_cdata;\n parser.oncomment = parser_comment;\n parser.ondoctype = parser_doctype;\n parser.onerror = parser_error;\n }\n\n // create these closures and cache them by keeping them file-scoped\n function parser_opentag() {\n delegates[0] && delegates[0]._opentag.apply(delegates[0], arguments);\n }\n function parser_closetag() {\n delegates[0] && delegates[0]._closetag.apply(delegates[0], arguments);\n }\n function parser_text() {\n delegates[0] && delegates[0]._text.apply(delegates[0], arguments);\n }\n function parser_cdata() {\n delegates[0] && delegates[0]._cdata.apply(delegates[0], arguments);\n }\n function parser_comment() {\n delegates[0] && delegates[0]._comment.apply(delegates[0], arguments);\n }\n function parser_doctype() {\n delegates[0] && delegates[0]._doctype.apply(delegates[0], arguments);\n }\n function parser_error() {\n delegates[0] && delegates[0]._error.apply(delegates[0], arguments);\n }\n\n // a relatively standard extend method\n function extend(destination, source) {\n for (var prop in source)\n if (source.hasOwnProperty(prop)) destination[prop] = source[prop];\n }\n\n // escapes XML entities like \"<\", \"&\", etc.\n function escapeXML(value) {\n return value\n .toString()\n .replace(/&/g, \"&\")\n .replace(//g, \">\")\n .replace(/'/g, \"'\")\n .replace(/\"/g, \""\");\n }\n\n // formats some text for debugging given a few options\n function formatText(text, options) {\n var finalText = text;\n\n if (options && options.trimmed && text.length > 25) {\n finalText = finalText.substring(0, 25).trim() + \"…\";\n }\n\n if (!(options && options.preserveWhitespace)) {\n finalText = finalText.trim();\n }\n\n return finalText;\n }\n\n // Are we being used in a Node-like environment?\n if (\n typeof module !== \"undefined\" &&\n module.exports &&\n !global.xmldocAssumeBrowser\n ) {\n module.exports.XmlDocument = XmlDocument;\n module.exports.XmlElement = XmlElement;\n module.exports.XmlTextNode = XmlTextNode;\n module.exports.XmlCDataNode = XmlCDataNode;\n module.exports.XmlCommentNode = XmlCommentNode;\n } else {\n this.XmlDocument = XmlDocument;\n this.XmlElement = XmlElement;\n this.XmlTextNode = XmlTextNode;\n this.XmlCDataNode = XmlCDataNode;\n this.XmlCommentNode = XmlCommentNode;\n }\n})();\n","'use strict';\r\n\r\n// Internet Explorer polyfills\r\nif (typeof window !== 'undefined' && !window.Promise) {\r\n\trequire('core-js/features/promise');\r\n}\r\nrequire('core-js/es/object/values');\r\n\r\nvar fetchUrl = function (url, headers) {\r\n\treturn new Promise(function (resolve, reject) {\r\n\t\tvar xhr = new XMLHttpRequest();\r\n\t\txhr.open('GET', url, true);\r\n\t\tfor (var headerName in headers) {\r\n\t\t\txhr.setRequestHeader(headerName, headers[headerName]);\r\n\t\t}\r\n\t\txhr.responseType = 'arraybuffer';\r\n\r\n\t\txhr.onreadystatechange = function () {\r\n\t\t\tif (xhr.readyState !== 4) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\r\n\t\t\tif (!ok) {\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\treject(new TypeError('Failed to fetch (url: \"' + url + '\")'));\r\n\t\t\t\t}, 0);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\txhr.onload = function () {\r\n\t\t\tvar ok = xhr.status >= 200 && xhr.status < 300;\r\n\t\t\tif (ok) {\r\n\t\t\t\tresolve(xhr.response);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\txhr.onerror = function () {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\r\n\t\t\t}, 0);\r\n\t\t};\r\n\r\n\t\txhr.ontimeout = function () {\r\n\t\t\tsetTimeout(function () {\r\n\t\t\t\treject(new TypeError('Network request failed (url: \"' + url + '\")'));\r\n\t\t\t}, 0);\r\n\t\t};\r\n\r\n\t\txhr.send();\r\n\t});\r\n};\r\n\r\nfunction URLBrowserResolver(fs) {\r\n\tthis.fs = fs;\r\n\tthis.resolving = {};\r\n}\r\n\r\nURLBrowserResolver.prototype.resolve = function (url, headers) {\r\n\tif (!this.resolving[url]) {\r\n\t\tvar _this = this;\r\n\t\tthis.resolving[url] = new Promise(function (resolve, reject) {\r\n\t\t\tif (url.toLowerCase().indexOf('https://') === 0 || url.toLowerCase().indexOf('http://') === 0) {\r\n\t\t\t\tif (_this.fs.existsSync(url)) {\r\n\t\t\t\t\t// url was downloaded earlier\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfetchUrl(url, headers).then(function (buffer) {\r\n\t\t\t\t\t\t_this.fs.writeFileSync(url, buffer);\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}, function (result) {\r\n\t\t\t\t\t\treject(result);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// cannot be resolved\r\n\t\t\t\tresolve();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\treturn this.resolving[url];\r\n}\r\n\r\nURLBrowserResolver.prototype.resolved = function () {\r\n\tvar _this = this;\r\n\treturn new Promise(function (resolve, reject) {\r\n\t\tPromise.all(Object.values(_this.resolving)).then(function () {\r\n\t\t\tresolve();\r\n\t\t}, function (result) {\r\n\t\t\treject(result);\r\n\t\t});\r\n\t});\r\n}\r\n\r\nmodule.exports = URLBrowserResolver;\r\n","'use strict';\r\n\r\nvar isFunction = require('../helpers').isFunction;\r\nvar isUndefined = require('../helpers').isUndefined;\r\nvar isNull = require('../helpers').isNull;\r\nvar FileSaver = require('file-saver');\r\nvar saveAs = FileSaver.saveAs;\r\n\r\nvar defaultClientFonts = {\r\n\tRoboto: {\r\n\t\tnormal: 'Roboto-Regular.ttf',\r\n\t\tbold: 'Roboto-Medium.ttf',\r\n\t\titalics: 'Roboto-Italic.ttf',\r\n\t\tbolditalics: 'Roboto-MediumItalic.ttf'\r\n\t}\r\n};\r\n\r\nfunction Document(docDefinition, tableLayouts, fonts, vfs) {\r\n\tthis.docDefinition = docDefinition;\r\n\tthis.tableLayouts = tableLayouts || null;\r\n\tthis.fonts = fonts || defaultClientFonts;\r\n\tthis.vfs = vfs;\r\n}\r\n\r\nfunction canCreatePdf() {\r\n\t// Ensure the browser provides the level of support needed\r\n\ttry {\r\n\t\tvar arr = new Uint8Array(1)\r\n\t\tvar proto = { foo: function () { return 42 } }\r\n\t\tObject.setPrototypeOf(proto, Uint8Array.prototype)\r\n\t\tObject.setPrototypeOf(arr, proto)\r\n\t\treturn arr.foo() === 42\r\n\t} catch (e) {\r\n\t\treturn false\r\n\t}\r\n}\r\n\r\nDocument.prototype._createDoc = function (options, cb) {\r\n\tvar getExtendedUrl = function (url) {\r\n\t\tif (typeof url === 'object') {\r\n\t\t\treturn { url: url.url, headers: url.headers };\r\n\t\t}\r\n\r\n\t\treturn { url: url, headers: {} };\r\n\t};\r\n\r\n\toptions = options || {};\r\n\tif (this.tableLayouts) {\r\n\t\toptions.tableLayouts = this.tableLayouts;\r\n\t}\r\n\r\n\tvar PdfPrinter = require('../printer');\r\n\r\n\tvar printer = new PdfPrinter(this.fonts);\r\n\trequire('fs').bindFS(this.vfs); // bind virtual file system to file system\r\n\r\n\tif (!isFunction(cb)) {\r\n\t\tvar doc = printer.createPdfKitDocument(this.docDefinition, options);\r\n\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tvar URLBrowserResolver = require('./URLBrowserResolver');\r\n\tvar urlResolver = new URLBrowserResolver(require('fs'));\r\n\r\n\tfor (var font in this.fonts) {\r\n\t\tif (this.fonts.hasOwnProperty(font)) {\r\n\t\t\tif (this.fonts[font].normal) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].normal)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].normal[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].normal);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].normal = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.fonts[font].bold) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].bold)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bold[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bold);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bold = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.fonts[font].italics) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].italics)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].italics[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].italics);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].italics = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (this.fonts[font].bolditalics) {\r\n\t\t\t\tif (Array.isArray(this.fonts[font].bolditalics)) { // TrueType Collection\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics[0]);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bolditalics[0] = url.url;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvar url = getExtendedUrl(this.fonts[font].bolditalics);\r\n\t\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\t\tthis.fonts[font].bolditalics = url.url;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (this.docDefinition.images) {\r\n\t\tfor (var image in this.docDefinition.images) {\r\n\t\t\tif (this.docDefinition.images.hasOwnProperty(image)) {\r\n\t\t\t\tvar url = getExtendedUrl(this.docDefinition.images[image]);\r\n\t\t\t\turlResolver.resolve(url.url, url.headers);\r\n\t\t\t\tthis.docDefinition.images[image] = url.url;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tvar _this = this;\r\n\r\n\turlResolver.resolved().then(function () {\r\n\t\tvar doc = printer.createPdfKitDocument(_this.docDefinition, options);\r\n\r\n\t\tcb(doc);\r\n\t}, function (result) {\r\n\t\tthrow result;\r\n\t});\r\n};\r\n\r\nDocument.prototype._flushDoc = function (doc, callback) {\r\n\tvar chunks = [];\r\n\tvar result;\r\n\r\n\tdoc.on('readable', function () {\r\n\t\tvar chunk;\r\n\t\twhile ((chunk = doc.read(9007199254740991)) !== null) {\r\n\t\t\tchunks.push(chunk);\r\n\t\t}\r\n\t});\r\n\tdoc.on('end', function () {\r\n\t\tresult = Buffer.concat(chunks);\r\n\t\tcallback(result, doc._pdfMakePages);\r\n\t});\r\n\tdoc.end();\r\n};\r\n\r\nDocument.prototype._getPages = function (options, cb) {\r\n\tif (!cb) {\r\n\t\tthrow '_getPages is an async method and needs a callback argument';\r\n\t}\r\n\tvar _this = this;\r\n\r\n\tthis._createDoc(options, function (doc) {\r\n\t\t_this._flushDoc(doc, function (ignoreBuffer, pages) {\r\n\t\t\tcb(pages);\r\n\t\t});\r\n\t});\r\n};\r\n\r\nDocument.prototype._bufferToBlob = function (buffer) {\r\n\tvar blob;\r\n\ttry {\r\n\t\tblob = new Blob([buffer], { type: 'application/pdf' });\r\n\t} catch (e) {\r\n\t\t// Old browser which can't handle it without making it an byte array (ie10)\r\n\t\tif (e.name === 'InvalidStateError') {\r\n\t\t\tvar byteArray = new Uint8Array(buffer);\r\n\t\t\tblob = new Blob([byteArray.buffer], { type: 'application/pdf' });\r\n\t\t}\r\n\t}\r\n\r\n\tif (!blob) {\r\n\t\tthrow 'Could not generate blob';\r\n\t}\r\n\r\n\treturn blob;\r\n};\r\n\r\nDocument.prototype._openWindow = function () {\r\n\t// we have to open the window immediately and store the reference\r\n\t// otherwise popup blockers will stop us\r\n\tvar win = window.open('', '_blank');\r\n\tif (win === null) {\r\n\t\tthrow 'Open PDF in new window blocked by browser';\r\n\t}\r\n\r\n\treturn win;\r\n};\r\n\r\nDocument.prototype._openPdf = function (options, win) {\r\n\tif (!win) {\r\n\t\twin = this._openWindow();\r\n\t}\r\n\ttry {\r\n\t\tthis.getBlob(function (result) {\r\n\t\t\tvar urlCreator = window.URL || window.webkitURL;\r\n\t\t\tvar pdfUrl = urlCreator.createObjectURL(result);\r\n\t\t\twin.location.href = pdfUrl;\r\n\r\n\t\t\t/* temporarily disabled\r\n\t\t\tif (win !== window) {\r\n\t\t\t\tsetTimeout(function () {\r\n\t\t\t\t\tif (isNull(win.window)) { // is closed by AdBlock\r\n\t\t\t\t\t\twindow.location.href = pdfUrl; // open in actual window\r\n\t\t\t\t\t}\r\n\t\t\t\t}, 500);\r\n\t\t\t}\r\n\t\t\t*/\r\n\t\t}, options);\r\n\t} catch (e) {\r\n\t\twin.close();\r\n\t\tthrow e;\r\n\t}\r\n};\r\n\r\nDocument.prototype.open = function (options, win) {\r\n\toptions = options || {};\r\n\toptions.autoPrint = false;\r\n\twin = win || null;\r\n\r\n\tthis._openPdf(options, win);\r\n};\r\n\r\n\r\nDocument.prototype.print = function (options, win) {\r\n\toptions = options || {};\r\n\toptions.autoPrint = true;\r\n\twin = win || null;\r\n\r\n\tthis._openPdf(options, win);\r\n};\r\n\r\n/**\r\n * download(defaultFileName = 'file.pdf', cb = null, options = {})\r\n * or\r\n * download(cb, options = {})\r\n */\r\nDocument.prototype.download = function (defaultFileName, cb, options) {\r\n\tif (isFunction(defaultFileName)) {\r\n\t\tif (!isUndefined(cb)) {\r\n\t\t\toptions = cb;\r\n\t\t}\r\n\t\tcb = defaultFileName;\r\n\t\tdefaultFileName = null;\r\n\t}\r\n\r\n\tdefaultFileName = defaultFileName || 'file.pdf';\r\n\tthis.getBlob(function (result) {\r\n\t\tsaveAs(result, defaultFileName);\r\n\r\n\t\tif (isFunction(cb)) {\r\n\t\t\tcb();\r\n\t\t}\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getBase64 = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getBase64 is an async method and needs a callback argument';\r\n\t}\r\n\tthis.getBuffer(function (buffer) {\r\n\t\tcb(buffer.toString('base64'));\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getDataUrl = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getDataUrl is an async method and needs a callback argument';\r\n\t}\r\n\tthis.getBuffer(function (buffer) {\r\n\t\tcb('data:application/pdf;base64,' + buffer.toString('base64'));\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getBlob = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getBlob is an async method and needs a callback argument';\r\n\t}\r\n\tvar that = this;\r\n\tthis.getBuffer(function (result) {\r\n\t\tvar blob = that._bufferToBlob(result);\r\n\t\tcb(blob);\r\n\t}, options);\r\n};\r\n\r\nDocument.prototype.getBuffer = function (cb, options) {\r\n\tif (!cb) {\r\n\t\tthrow 'getBuffer is an async method and needs a callback argument';\r\n\t}\r\n\r\n\tvar _this = this;\r\n\r\n\tthis._createDoc(options, function (doc) {\r\n\t\t_this._flushDoc(doc, function (buffer) {\r\n\t\t\tcb(buffer);\r\n\t\t});\r\n\t});\r\n};\r\n\r\nDocument.prototype.getStream = function (options, cb) {\r\n\tif (!isFunction(cb)) {\r\n\t\tvar doc = this._createDoc(options);\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tthis._createDoc(options, function (doc) {\r\n\t\tcb(doc);\r\n\t});\r\n};\r\n\r\nmodule.exports = {\r\n\tcreatePdf: function (docDefinition, tableLayouts, fonts, vfs) {\r\n\t\tif (!canCreatePdf()) {\r\n\t\t\tthrow 'Your browser does not provide the level of support needed';\r\n\t\t}\r\n\t\treturn new Document(\r\n\t\t\tdocDefinition,\r\n\t\t\ttableLayouts || global.pdfMake.tableLayouts,\r\n\t\t\tfonts || global.pdfMake.fonts,\r\n\t\t\tvfs || global.pdfMake.vfs\r\n\t\t);\r\n\t}\r\n};\r\n","'use strict';\r\n\r\nfunction VirtualFileSystem() {\r\n\tthis.fileSystem = {};\r\n\tthis.dataSystem = {};\r\n}\r\n\r\nVirtualFileSystem.prototype.existsSync = function (filename) {\r\n\tfilename = fixFilename(filename);\r\n\treturn typeof this.fileSystem[filename] !== 'undefined'\r\n\t\t|| typeof this.dataSystem[filename] !== 'undefined';\r\n}\r\n\r\nVirtualFileSystem.prototype.readFileSync = function (filename, options) {\r\n\tfilename = fixFilename(filename);\r\n\r\n\tvar dataContent = this.dataSystem[filename];\r\n\tif (typeof dataContent === 'string' && options === 'utf8') {\r\n\t\treturn dataContent;\r\n\t}\r\n\r\n\tif (dataContent) {\r\n\t\treturn new Buffer(dataContent, typeof dataContent === 'string' ? 'base64' : undefined);\r\n\t}\r\n\r\n\tvar content = this.fileSystem[filename];\r\n\tif (content) {\r\n\t\treturn content;\r\n\t}\r\n\r\n\tthrow 'File \\'' + filename + '\\' not found in virtual file system';\r\n};\r\n\r\nVirtualFileSystem.prototype.writeFileSync = function (filename, content) {\r\n\tthis.fileSystem[fixFilename(filename)] = content;\r\n};\r\n\r\nVirtualFileSystem.prototype.bindFS = function (data) {\r\n\tthis.dataSystem = data || {};\r\n};\r\n\r\n\r\nfunction fixFilename(filename) {\r\n\tif (filename.indexOf(__dirname) === 0) {\r\n\t\tfilename = filename.substring(__dirname.length);\r\n\t}\r\n\r\n\tif (filename.indexOf('/') === 0) {\r\n\t\tfilename = filename.substring(1);\r\n\t}\r\n\r\n\treturn filename;\r\n}\r\n\r\nmodule.exports = new VirtualFileSystem();\r\n","'use strict';\r\n\r\nvar isString = require('./helpers').isString;\r\n\r\nfunction buildColumnWidths(columns, availableWidth) {\r\n\tvar autoColumns = [],\r\n\t\tautoMin = 0, autoMax = 0,\r\n\t\tstarColumns = [],\r\n\t\tstarMaxMin = 0,\r\n\t\tstarMaxMax = 0,\r\n\t\tfixedColumns = [],\r\n\t\tinitial_availableWidth = availableWidth;\r\n\r\n\tcolumns.forEach(function (column) {\r\n\t\tif (isAutoColumn(column)) {\r\n\t\t\tautoColumns.push(column);\r\n\t\t\tautoMin += column._minWidth;\r\n\t\t\tautoMax += column._maxWidth;\r\n\t\t} else if (isStarColumn(column)) {\r\n\t\t\tstarColumns.push(column);\r\n\t\t\tstarMaxMin = Math.max(starMaxMin, column._minWidth);\r\n\t\t\tstarMaxMax = Math.max(starMaxMax, column._maxWidth);\r\n\t\t} else {\r\n\t\t\tfixedColumns.push(column);\r\n\t\t}\r\n\t});\r\n\r\n\tfixedColumns.forEach(function (col) {\r\n\t\t// width specified as %\r\n\t\tif (isString(col.width) && /\\d+%/.test(col.width)) {\r\n\t\t\tcol.width = parseFloat(col.width) * initial_availableWidth / 100;\r\n\t\t}\r\n\t\tif (col.width < (col._minWidth) && col.elasticWidth) {\r\n\t\t\tcol._calcWidth = col._minWidth;\r\n\t\t} else {\r\n\t\t\tcol._calcWidth = col.width;\r\n\t\t}\r\n\r\n\t\tavailableWidth -= col._calcWidth;\r\n\t});\r\n\r\n\t// http://www.freesoft.org/CIE/RFC/1942/18.htm\r\n\t// http://www.w3.org/TR/CSS2/tables.html#width-layout\r\n\t// http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm\r\n\tvar minW = autoMin + starMaxMin * starColumns.length;\r\n\tvar maxW = autoMax + starMaxMax * starColumns.length;\r\n\tif (minW >= availableWidth) {\r\n\t\t// case 1 - there's no way to fit all columns within available width\r\n\t\t// that's actually pretty bad situation with PDF as we have no horizontal scroll\r\n\t\t// no easy workaround (unless we decide, in the future, to split single words)\r\n\t\t// currently we simply use minWidths for all columns\r\n\t\tautoColumns.forEach(function (col) {\r\n\t\t\tcol._calcWidth = col._minWidth;\r\n\t\t});\r\n\r\n\t\tstarColumns.forEach(function (col) {\r\n\t\t\tcol._calcWidth = starMaxMin; // starMaxMin already contains padding\r\n\t\t});\r\n\t} else {\r\n\t\tif (maxW < availableWidth) {\r\n\t\t\t// case 2 - we can fit rest of the table within available space\r\n\t\t\tautoColumns.forEach(function (col) {\r\n\t\t\t\tcol._calcWidth = col._maxWidth;\r\n\t\t\t\tavailableWidth -= col._calcWidth;\r\n\t\t\t});\r\n\t\t} else {\r\n\t\t\t// maxW is too large, but minW fits within available width\r\n\t\t\tvar W = availableWidth - minW;\r\n\t\t\tvar D = maxW - minW;\r\n\r\n\t\t\tautoColumns.forEach(function (col) {\r\n\t\t\t\tvar d = col._maxWidth - col._minWidth;\r\n\t\t\t\tcol._calcWidth = col._minWidth + d * W / D;\r\n\t\t\t\tavailableWidth -= col._calcWidth;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (starColumns.length > 0) {\r\n\t\t\tvar starSize = availableWidth / starColumns.length;\r\n\r\n\t\t\tstarColumns.forEach(function (col) {\r\n\t\t\t\tcol._calcWidth = starSize;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nfunction isAutoColumn(column) {\r\n\treturn column.width === 'auto';\r\n}\r\n\r\nfunction isStarColumn(column) {\r\n\treturn column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';\r\n}\r\n\r\n//TODO: refactor and reuse in measureTable\r\nfunction measureMinMax(columns) {\r\n\tvar result = { min: 0, max: 0 };\r\n\r\n\tvar maxStar = { min: 0, max: 0 };\r\n\tvar starCount = 0;\r\n\r\n\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\tvar c = columns[i];\r\n\r\n\t\tif (isStarColumn(c)) {\r\n\t\t\tmaxStar.min = Math.max(maxStar.min, c._minWidth);\r\n\t\t\tmaxStar.max = Math.max(maxStar.max, c._maxWidth);\r\n\t\t\tstarCount++;\r\n\t\t} else if (isAutoColumn(c)) {\r\n\t\t\tresult.min += c._minWidth;\r\n\t\t\tresult.max += c._maxWidth;\r\n\t\t} else {\r\n\t\t\tresult.min += ((c.width !== undefined && c.width) || c._minWidth);\r\n\t\t\tresult.max += ((c.width !== undefined && c.width) || c._maxWidth);\r\n\t\t}\r\n\t}\r\n\r\n\tif (starCount) {\r\n\t\tresult.min += starCount * maxStar.min;\r\n\t\tresult.max += starCount * maxStar.max;\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\n/**\r\n * Calculates column widths\r\n * @private\r\n */\r\nmodule.exports = {\r\n\tbuildColumnWidths: buildColumnWidths,\r\n\tmeasureMinMax: measureMinMax,\r\n\tisAutoColumn: isAutoColumn,\r\n\tisStarColumn: isStarColumn\r\n};\r\n","/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\r\n\r\n'use strict';\r\n\r\nvar TextTools = require('./textTools');\r\nvar StyleContextStack = require('./styleContextStack');\r\nvar ColumnCalculator = require('./columnCalculator');\r\nvar isString = require('./helpers').isString;\r\nvar isNumber = require('./helpers').isNumber;\r\nvar isObject = require('./helpers').isObject;\r\nvar isArray = require('./helpers').isArray;\r\nvar fontStringify = require('./helpers').fontStringify;\r\nvar getNodeId = require('./helpers').getNodeId;\r\nvar pack = require('./helpers').pack;\r\nvar qrEncoder = require('./qrEnc.js');\r\n\r\n/**\r\n * @private\r\n */\r\nfunction DocMeasure(fontProvider, styleDictionary, defaultStyle, imageMeasure, svgMeasure, tableLayouts, images) {\r\n\tthis.textTools = new TextTools(fontProvider);\r\n\tthis.styleStack = new StyleContextStack(styleDictionary, defaultStyle);\r\n\tthis.imageMeasure = imageMeasure;\r\n\tthis.svgMeasure = svgMeasure;\r\n\tthis.tableLayouts = tableLayouts;\r\n\tthis.images = images;\r\n\tthis.autoImageIndex = 1;\r\n}\r\n\r\n/**\r\n * Measures all nodes and sets min/max-width properties required for the second\r\n * layout-pass.\r\n * @param {Object} docStructure document-definition-object\r\n * @return {Object} document-measurement-object\r\n */\r\nDocMeasure.prototype.measureDocument = function (docStructure) {\r\n\treturn this.measureNode(docStructure);\r\n};\r\n\r\nDocMeasure.prototype.measureNode = function (node) {\r\n\r\n\tvar self = this;\r\n\r\n\treturn this.styleStack.auto(node, function () {\r\n\t\t// TODO: refactor + rethink whether this is the proper way to handle margins\r\n\t\tnode._margin = getNodeMargin(node);\r\n\r\n\t\tif (node.columns) {\r\n\t\t\treturn extendMargins(self.measureColumns(node));\r\n\t\t} else if (node.stack) {\r\n\t\t\treturn extendMargins(self.measureVerticalContainer(node));\r\n\t\t} else if (node.ul) {\r\n\t\t\treturn extendMargins(self.measureUnorderedList(node));\r\n\t\t} else if (node.ol) {\r\n\t\t\treturn extendMargins(self.measureOrderedList(node));\r\n\t\t} else if (node.table) {\r\n\t\t\treturn extendMargins(self.measureTable(node));\r\n\t\t} else if (node.text !== undefined) {\r\n\t\t\treturn extendMargins(self.measureLeaf(node));\r\n\t\t} else if (node.toc) {\r\n\t\t\treturn extendMargins(self.measureToc(node));\r\n\t\t} else if (node.image) {\r\n\t\t\treturn extendMargins(self.measureImage(node));\r\n\t\t} else if (node.svg) {\r\n\t\t\treturn extendMargins(self.measureSVG(node));\r\n\t\t} else if (node.canvas) {\r\n\t\t\treturn extendMargins(self.measureCanvas(node));\r\n\t\t} else if (node.qr) {\r\n\t\t\treturn extendMargins(self.measureQr(node));\r\n\t\t} else {\r\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\r\n\t\t}\r\n\t});\r\n\r\n\tfunction extendMargins(node) {\r\n\t\tvar margin = node._margin;\r\n\r\n\t\tif (margin) {\r\n\t\t\tnode._minWidth += margin[0] + margin[2];\r\n\t\t\tnode._maxWidth += margin[0] + margin[2];\r\n\t\t}\r\n\r\n\t\treturn node;\r\n\t}\r\n\r\n\tfunction getNodeMargin() {\r\n\r\n\t\tfunction processSingleMargins(node, currentMargin) {\r\n\t\t\tif (node.marginLeft || node.marginTop || node.marginRight || node.marginBottom) {\r\n\t\t\t\treturn [\r\n\t\t\t\t\tnode.marginLeft || currentMargin[0] || 0,\r\n\t\t\t\t\tnode.marginTop || currentMargin[1] || 0,\r\n\t\t\t\t\tnode.marginRight || currentMargin[2] || 0,\r\n\t\t\t\t\tnode.marginBottom || currentMargin[3] || 0\r\n\t\t\t\t];\r\n\t\t\t}\r\n\t\t\treturn currentMargin;\r\n\t\t}\r\n\r\n\t\tfunction flattenStyleArray(styleArray) {\r\n\t\t\tvar flattenedStyles = {};\r\n\t\t\tfor (var i = styleArray.length - 1; i >= 0; i--) {\r\n\t\t\t\tvar styleName = styleArray[i];\r\n\t\t\t\tvar style = self.styleStack.styleDictionary[styleName];\r\n\t\t\t\tfor (var key in style) {\r\n\t\t\t\t\tif (style.hasOwnProperty(key)) {\r\n\t\t\t\t\t\tflattenedStyles[key] = style[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn flattenedStyles;\r\n\t\t}\r\n\r\n\t\tfunction convertMargin(margin) {\r\n\t\t\tif (isNumber(margin)) {\r\n\t\t\t\tmargin = [margin, margin, margin, margin];\r\n\t\t\t} else if (isArray(margin)) {\r\n\t\t\t\tif (margin.length === 2) {\r\n\t\t\t\t\tmargin = [margin[0], margin[1], margin[0], margin[1]];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\treturn margin;\r\n\t\t}\r\n\r\n\t\tvar margin = [undefined, undefined, undefined, undefined];\r\n\r\n\t\tif (node.style) {\r\n\t\t\tvar styleArray = isArray(node.style) ? node.style : [node.style];\r\n\t\t\tvar flattenedStyleArray = flattenStyleArray(styleArray);\r\n\r\n\t\t\tif (flattenedStyleArray) {\r\n\t\t\t\tmargin = processSingleMargins(flattenedStyleArray, margin);\r\n\t\t\t}\r\n\r\n\t\t\tif (flattenedStyleArray.margin) {\r\n\t\t\t\tmargin = convertMargin(flattenedStyleArray.margin);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tmargin = processSingleMargins(node, margin);\r\n\r\n\t\tif (node.margin) {\r\n\t\t\tmargin = convertMargin(node.margin);\r\n\t\t}\r\n\r\n\t\tif (margin[0] === undefined && margin[1] === undefined && margin[2] === undefined && margin[3] === undefined) {\r\n\t\t\treturn null;\r\n\t\t} else {\r\n\t\t\treturn margin;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nDocMeasure.prototype.convertIfBase64Image = function (node) {\r\n\tif (/^data:image\\/(jpeg|jpg|png);base64,/.test(node.image)) {\r\n\t\tvar label = '$$pdfmake$$' + this.autoImageIndex++;\r\n\t\tthis.images[label] = node.image;\r\n\t\tnode.image = label;\r\n\t}\r\n};\r\n\r\nDocMeasure.prototype.measureImageWithDimensions = function (node, dimensions) {\r\n\tif (node.fit) {\r\n\t\tvar factor = (dimensions.width / dimensions.height > node.fit[0] / node.fit[1]) ? node.fit[0] / dimensions.width : node.fit[1] / dimensions.height;\r\n\t\tnode._width = node._minWidth = node._maxWidth = dimensions.width * factor;\r\n\t\tnode._height = dimensions.height * factor;\r\n\t} else if (node.cover) {\r\n\t\tnode._width = node._minWidth = node._maxWidth = node.cover.width;\r\n\t\tnode._height = node._minHeight = node._maxHeight = node.cover.height;\r\n\t} else {\r\n\t\tnode._width = node._minWidth = node._maxWidth = node.width || dimensions.width;\r\n\t\tnode._height = node.height || (dimensions.height * node._width / dimensions.width);\r\n\r\n\t\tif (isNumber(node.maxWidth) && node.maxWidth < node._width) {\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.maxWidth;\r\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\r\n\t\t}\r\n\r\n\t\tif (isNumber(node.maxHeight) && node.maxHeight < node._height) {\r\n\t\t\tnode._height = node.maxHeight;\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\r\n\t\t}\r\n\r\n\t\tif (isNumber(node.minWidth) && node.minWidth > node._width) {\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node.minWidth;\r\n\t\t\tnode._height = node._width * dimensions.height / dimensions.width;\r\n\t\t}\r\n\r\n\t\tif (isNumber(node.minHeight) && node.minHeight > node._height) {\r\n\t\t\tnode._height = node.minHeight;\r\n\t\t\tnode._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;\r\n\t\t}\r\n\t}\r\n\r\n\tnode._alignment = this.styleStack.getProperty('alignment');\r\n};\r\n\r\nDocMeasure.prototype.measureImage = function (node) {\r\n\tif (this.images) {\r\n\t\tthis.convertIfBase64Image(node);\r\n\t}\r\n\r\n\tvar dimensions = this.imageMeasure.measureImage(node.image);\r\n\r\n\tthis.measureImageWithDimensions(node, dimensions);\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureSVG = function (node) {\r\n\r\n\tvar dimensions = this.svgMeasure.measureSVG(node.svg);\r\n\r\n\tthis.measureImageWithDimensions(node, dimensions);\r\n\r\n\tnode.font = this.styleStack.getProperty('font');\r\n\r\n\t// scale SVG based on final dimension\r\n\tnode.svg = this.svgMeasure.writeDimensions(node.svg, {\r\n\t\twidth: node._width,\r\n\t\theight: node._height\r\n\t});\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureLeaf = function (node) {\r\n\r\n\tif (node._textRef && node._textRef._textNodeRef.text) {\r\n\t\tnode.text = node._textRef._textNodeRef.text;\r\n\t}\r\n\r\n\t// Make sure style properties of the node itself are considered when building inlines.\r\n\t// We could also just pass [node] to buildInlines, but that fails for bullet points.\r\n\tvar styleStack = this.styleStack.clone();\r\n\tstyleStack.push(node);\r\n\r\n\tvar data = this.textTools.buildInlines(node.text, styleStack);\r\n\r\n\tnode._inlines = data.items;\r\n\tnode._minWidth = data.minWidth;\r\n\tnode._maxWidth = data.maxWidth;\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureToc = function (node) {\r\n\tif (node.toc.title) {\r\n\t\tnode.toc.title = this.measureNode(node.toc.title);\r\n\t}\r\n\r\n\tif (node.toc._items.length > 0) {\r\n\t\tvar body = [];\r\n\t\tvar textStyle = node.toc.textStyle || {};\r\n\t\tvar numberStyle = node.toc.numberStyle || textStyle;\r\n\t\tvar textMargin = node.toc.textMargin || [0, 0, 0, 0];\r\n\t\tfor (var i = 0, l = node.toc._items.length; i < l; i++) {\r\n\t\t\tvar item = node.toc._items[i];\r\n\t\t\tvar lineStyle = item._textNodeRef.tocStyle || textStyle;\r\n\t\t\tvar lineMargin = item._textNodeRef.tocMargin || textMargin;\r\n\t\t\tvar lineNumberStyle = item._textNodeRef.tocNumberStyle || numberStyle;\r\n\t\t\tvar destination = getNodeId(item._nodeRef);\r\n\t\t\tbody.push([\r\n\t\t\t\t{ text: item._textNodeRef.text, linkToDestination: destination, alignment: 'left', style: lineStyle, margin: lineMargin },\r\n\t\t\t\t{ text: '00000', linkToDestination: destination, alignment: 'right', _tocItemRef: item._nodeRef, style: lineNumberStyle, margin: [0, lineMargin[1], 0, lineMargin[3]] }\r\n\t\t\t]);\r\n\t\t}\r\n\r\n\r\n\t\tnode.toc._table = {\r\n\t\t\ttable: {\r\n\t\t\t\tdontBreakRows: true,\r\n\t\t\t\twidths: ['*', 'auto'],\r\n\t\t\t\tbody: body\r\n\t\t\t},\r\n\t\t\tlayout: 'noBorders'\r\n\t\t};\r\n\r\n\t\tnode.toc._table = this.measureNode(node.toc._table);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureVerticalContainer = function (node) {\r\n\tvar items = node.stack;\r\n\r\n\tnode._minWidth = 0;\r\n\tnode._maxWidth = 0;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\titems[i] = this.measureNode(items[i]);\r\n\r\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\r\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.gapSizeForList = function () {\r\n\treturn this.textTools.sizeOfString('9. ', this.styleStack);\r\n};\r\n\r\nDocMeasure.prototype.buildUnorderedMarker = function (styleStack, gapSize, type) {\r\n\tfunction buildDisc(gapSize, color) {\r\n\t\t// TODO: ascender-based calculations\r\n\t\tvar radius = gapSize.fontSize / 6;\r\n\t\treturn {\r\n\t\t\tcanvas: [{\r\n\t\t\t\tx: radius,\r\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\r\n\t\t\t\tr1: radius,\r\n\t\t\t\tr2: radius,\r\n\t\t\t\ttype: 'ellipse',\r\n\t\t\t\tcolor: color\r\n\t\t\t}]\r\n\t\t};\r\n\t}\r\n\r\n\tfunction buildSquare(gapSize, color) {\r\n\t\t// TODO: ascender-based calculations\r\n\t\tvar size = gapSize.fontSize / 3;\r\n\t\treturn {\r\n\t\t\tcanvas: [{\r\n\t\t\t\tx: 0,\r\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - (gapSize.fontSize / 3) - (size / 2),\r\n\t\t\t\th: size,\r\n\t\t\t\tw: size,\r\n\t\t\t\ttype: 'rect',\r\n\t\t\t\tcolor: color\r\n\t\t\t}]\r\n\t\t};\r\n\t}\r\n\r\n\tfunction buildCircle(gapSize, color) {\r\n\t\t// TODO: ascender-based calculations\r\n\t\tvar radius = gapSize.fontSize / 6;\r\n\t\treturn {\r\n\t\t\tcanvas: [{\r\n\t\t\t\tx: radius,\r\n\t\t\t\ty: (gapSize.height / gapSize.lineHeight) + gapSize.descender - gapSize.fontSize / 3,\r\n\t\t\t\tr1: radius,\r\n\t\t\t\tr2: radius,\r\n\t\t\t\ttype: 'ellipse',\r\n\t\t\t\tlineColor: color\r\n\t\t\t}]\r\n\t\t};\r\n\t}\r\n\r\n\tvar marker;\r\n\tvar color = styleStack.getProperty('markerColor') || styleStack.getProperty('color') || 'black';\r\n\r\n\tswitch (type) {\r\n\t\tcase 'circle':\r\n\t\t\tmarker = buildCircle(gapSize, color);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'square':\r\n\t\t\tmarker = buildSquare(gapSize, color);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'none':\r\n\t\t\tmarker = {};\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'disc':\r\n\t\tdefault:\r\n\t\t\tmarker = buildDisc(gapSize, color);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tmarker._minWidth = marker._maxWidth = gapSize.width;\r\n\tmarker._minHeight = marker._maxHeight = gapSize.height;\r\n\r\n\treturn marker;\r\n};\r\n\r\nDocMeasure.prototype.buildOrderedMarker = function (counter, styleStack, type, separator) {\r\n\tfunction prepareAlpha(counter) {\r\n\t\tfunction toAlpha(num) {\r\n\t\t\treturn (num >= 26 ? toAlpha((num / 26 >> 0) - 1) : '') + 'abcdefghijklmnopqrstuvwxyz'[num % 26 >> 0];\r\n\t\t}\r\n\r\n\t\tif (counter < 1) {\r\n\t\t\treturn counter.toString();\r\n\t\t}\r\n\r\n\t\treturn toAlpha(counter - 1);\r\n\t}\r\n\r\n\tfunction prepareRoman(counter) {\r\n\t\tif (counter < 1 || counter > 4999) {\r\n\t\t\treturn counter.toString();\r\n\t\t}\r\n\t\tvar num = counter;\r\n\t\tvar lookup = { M: 1000, CM: 900, D: 500, CD: 400, C: 100, XC: 90, L: 50, XL: 40, X: 10, IX: 9, V: 5, IV: 4, I: 1 }, roman = '', i;\r\n\t\tfor (i in lookup) {\r\n\t\t\twhile (num >= lookup[i]) {\r\n\t\t\t\troman += i;\r\n\t\t\t\tnum -= lookup[i];\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn roman;\r\n\t}\r\n\r\n\tfunction prepareDecimal(counter) {\r\n\t\treturn counter.toString();\r\n\t}\r\n\r\n\tvar counterText;\r\n\tswitch (type) {\r\n\t\tcase 'none':\r\n\t\t\tcounterText = null;\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'upper-alpha':\r\n\t\t\tcounterText = prepareAlpha(counter).toUpperCase();\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'lower-alpha':\r\n\t\t\tcounterText = prepareAlpha(counter);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'upper-roman':\r\n\t\t\tcounterText = prepareRoman(counter);\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'lower-roman':\r\n\t\t\tcounterText = prepareRoman(counter).toLowerCase();\r\n\t\t\tbreak;\r\n\r\n\t\tcase 'decimal':\r\n\t\tdefault:\r\n\t\t\tcounterText = prepareDecimal(counter);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (counterText === null) {\r\n\t\treturn {};\r\n\t}\r\n\r\n\tif (separator) {\r\n\t\tif (isArray(separator)) {\r\n\t\t\tif (separator[0]) {\r\n\t\t\t\tcounterText = separator[0] + counterText;\r\n\t\t\t}\r\n\r\n\t\t\tif (separator[1]) {\r\n\t\t\t\tcounterText += separator[1];\r\n\t\t\t}\r\n\t\t\tcounterText += ' ';\r\n\t\t} else {\r\n\t\t\tcounterText += separator + ' ';\r\n\t\t}\r\n\t}\r\n\r\n\tvar textArray = { text: counterText };\r\n\tvar markerColor = styleStack.getProperty('markerColor');\r\n\tif (markerColor) {\r\n\t\ttextArray.color = markerColor;\r\n\t}\r\n\r\n\treturn { _inlines: this.textTools.buildInlines(textArray, styleStack).items };\r\n};\r\n\r\nDocMeasure.prototype.measureUnorderedList = function (node) {\r\n\tvar style = this.styleStack.clone();\r\n\tvar items = node.ul;\r\n\tnode.type = node.type || 'disc';\r\n\tnode._gapSize = this.gapSizeForList();\r\n\tnode._minWidth = 0;\r\n\tnode._maxWidth = 0;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\tvar item = items[i] = this.measureNode(items[i]);\r\n\r\n\t\tif (!item.ol && !item.ul) {\r\n\t\t\titem.listMarker = this.buildUnorderedMarker(style, node._gapSize, item.listType || node.type);\r\n\t\t}\r\n\r\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);\r\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureOrderedList = function (node) {\r\n\tvar style = this.styleStack.clone();\r\n\tvar items = node.ol;\r\n\tnode.type = node.type || 'decimal';\r\n\tnode.separator = node.separator || '.';\r\n\tnode.reversed = node.reversed || false;\r\n\tif (!isNumber(node.start)) {\r\n\t\tnode.start = node.reversed ? items.length : 1;\r\n\t}\r\n\tnode._gapSize = this.gapSizeForList();\r\n\tnode._minWidth = 0;\r\n\tnode._maxWidth = 0;\r\n\r\n\tvar counter = node.start;\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\tvar item = items[i] = this.measureNode(items[i]);\r\n\r\n\t\tif (!item.ol && !item.ul) {\r\n\t\t\tvar counterValue = isNumber(item.counter) ? item.counter : counter;\r\n\t\t\titem.listMarker = this.buildOrderedMarker(counterValue, style, item.listType || node.type, node.separator);\r\n\t\t\tif (item.listMarker._inlines) {\r\n\t\t\t\tnode._gapSize.width = Math.max(node._gapSize.width, item.listMarker._inlines[0].width);\r\n\t\t\t}\r\n\t\t} // TODO: else - nested lists numbering\r\n\r\n\t\tnode._minWidth = Math.max(node._minWidth, items[i]._minWidth);\r\n\t\tnode._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);\r\n\r\n\t\tif (node.reversed) {\r\n\t\t\tcounter--;\r\n\t\t} else {\r\n\t\t\tcounter++;\r\n\t\t}\r\n\t}\r\n\r\n\tnode._minWidth += node._gapSize.width;\r\n\tnode._maxWidth += node._gapSize.width;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\tvar item = items[i];\r\n\t\tif (!item.ol && !item.ul) {\r\n\t\t\titem.listMarker._minWidth = item.listMarker._maxWidth = node._gapSize.width;\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureColumns = function (node) {\r\n\tvar columns = node.columns;\r\n\tnode._gap = this.styleStack.getProperty('columnGap') || 0;\r\n\r\n\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\tcolumns[i] = this.measureNode(columns[i]);\r\n\t}\r\n\r\n\tvar measures = ColumnCalculator.measureMinMax(columns);\r\n\r\n\tvar numGaps = (columns.length > 0) ? (columns.length - 1) : 0;\r\n\tnode._minWidth = measures.min + node._gap * numGaps;\r\n\tnode._maxWidth = measures.max + node._gap * numGaps;\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureTable = function (node) {\r\n\textendTableWidths(node);\r\n\tnode._layout = getLayout(this.tableLayouts);\r\n\tnode._offsets = getOffsets(node._layout);\r\n\r\n\tvar colSpans = [];\r\n\tvar col, row, cols, rows;\r\n\r\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\r\n\t\tvar c = node.table.widths[col];\r\n\t\tc._minWidth = 0;\r\n\t\tc._maxWidth = 0;\r\n\r\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\r\n\t\t\tvar rowData = node.table.body[row];\r\n\t\t\tvar data = rowData[col];\r\n\t\t\tif (data === undefined) {\r\n\t\t\t\tconsole.error('Malformed table row ', rowData, 'in node ', node);\r\n\t\t\t\tthrow 'Malformed table row, a cell is undefined.';\r\n\t\t\t}\r\n\t\t\tif (data === null) { // transform to object\r\n\t\t\t\tdata = '';\r\n\t\t\t}\r\n\r\n\t\t\tif (!data._span) {\r\n\t\t\t\tdata = rowData[col] = this.styleStack.auto(data, measureCb(this, data));\r\n\r\n\t\t\t\tif (data.colSpan && data.colSpan > 1) {\r\n\t\t\t\t\tmarkSpans(rowData, col, data.colSpan);\r\n\t\t\t\t\tcolSpans.push({ col: col, span: data.colSpan, minWidth: data._minWidth, maxWidth: data._maxWidth });\r\n\t\t\t\t} else {\r\n\t\t\t\t\tc._minWidth = Math.max(c._minWidth, data._minWidth);\r\n\t\t\t\t\tc._maxWidth = Math.max(c._maxWidth, data._maxWidth);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (data.rowSpan && data.rowSpan > 1) {\r\n\t\t\t\tmarkVSpans(node.table, row, col, data.rowSpan);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\textendWidthsForColSpans();\r\n\r\n\tvar measures = ColumnCalculator.measureMinMax(node.table.widths);\r\n\r\n\tnode._minWidth = measures.min + node._offsets.total;\r\n\tnode._maxWidth = measures.max + node._offsets.total;\r\n\r\n\treturn node;\r\n\r\n\tfunction measureCb(_this, data) {\r\n\t\treturn function () {\r\n\t\t\tif (isObject(data)) {\r\n\t\t\t\tdata.fillColor = _this.styleStack.getProperty('fillColor');\r\n\t\t\t\tdata.fillOpacity = _this.styleStack.getProperty('fillOpacity');\r\n\t\t\t}\r\n\t\t\treturn _this.measureNode(data);\r\n\t\t};\r\n\t}\r\n\r\n\tfunction getLayout(tableLayouts) {\r\n\t\tvar layout = node.layout;\r\n\r\n\t\tif (isString(layout)) {\r\n\t\t\tlayout = tableLayouts[layout];\r\n\t\t}\r\n\r\n\t\tvar defaultLayout = {\r\n\t\t\thLineWidth: function (i, node) {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i, node) {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\thLineColor: function (i, node) {\r\n\t\t\t\treturn 'black';\r\n\t\t\t},\r\n\t\t\tvLineColor: function (i, node) {\r\n\t\t\t\treturn 'black';\r\n\t\t\t},\r\n\t\t\thLineStyle: function (i, node) {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\t\t\tvLineStyle: function (i, node) {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i, node) {\r\n\t\t\t\treturn 4;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn 4;\r\n\t\t\t},\r\n\t\t\tpaddingTop: function (i, node) {\r\n\t\t\t\treturn 2;\r\n\t\t\t},\r\n\t\t\tpaddingBottom: function (i, node) {\r\n\t\t\t\treturn 2;\r\n\t\t\t},\r\n\t\t\tfillColor: function (i, node) {\r\n\t\t\t\treturn null;\r\n\t\t\t},\r\n\t\t\tfillOpacity: function (i, node) {\r\n\t\t\t\treturn 1;\r\n\t\t\t},\r\n\t\t\tdefaultBorder: true\r\n\t\t};\r\n\r\n\t\treturn pack(defaultLayout, layout);\r\n\t}\r\n\r\n\tfunction getOffsets(layout) {\r\n\t\tvar offsets = [];\r\n\t\tvar totalOffset = 0;\r\n\t\tvar prevRightPadding = 0;\r\n\r\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\r\n\t\t\tvar lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);\r\n\t\t\toffsets.push(lOffset);\r\n\t\t\ttotalOffset += lOffset;\r\n\t\t\tprevRightPadding = layout.paddingRight(i, node);\r\n\t\t}\r\n\r\n\t\ttotalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);\r\n\r\n\t\treturn {\r\n\t\t\ttotal: totalOffset,\r\n\t\t\toffsets: offsets\r\n\t\t};\r\n\t}\r\n\r\n\tfunction extendWidthsForColSpans() {\r\n\t\tvar q, j;\r\n\r\n\t\tfor (var i = 0, l = colSpans.length; i < l; i++) {\r\n\t\t\tvar span = colSpans[i];\r\n\r\n\t\t\tvar currentMinMax = getMinMax(span.col, span.span, node._offsets);\r\n\t\t\tvar minDifference = span.minWidth - currentMinMax.minWidth;\r\n\t\t\tvar maxDifference = span.maxWidth - currentMinMax.maxWidth;\r\n\r\n\t\t\tif (minDifference > 0) {\r\n\t\t\t\tq = minDifference / span.span;\r\n\r\n\t\t\t\tfor (j = 0; j < span.span; j++) {\r\n\t\t\t\t\tnode.table.widths[span.col + j]._minWidth += q;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (maxDifference > 0) {\r\n\t\t\t\tq = maxDifference / span.span;\r\n\r\n\t\t\t\tfor (j = 0; j < span.span; j++) {\r\n\t\t\t\t\tnode.table.widths[span.col + j]._maxWidth += q;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getMinMax(col, span, offsets) {\r\n\t\tvar result = { minWidth: 0, maxWidth: 0 };\r\n\r\n\t\tfor (var i = 0; i < span; i++) {\r\n\t\t\tresult.minWidth += node.table.widths[col + i]._minWidth + (i ? offsets.offsets[col + i] : 0);\r\n\t\t\tresult.maxWidth += node.table.widths[col + i]._maxWidth + (i ? offsets.offsets[col + i] : 0);\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tfunction markSpans(rowData, col, span) {\r\n\t\tfor (var i = 1; i < span; i++) {\r\n\t\t\trowData[col + i] = {\r\n\t\t\t\t_span: true,\r\n\t\t\t\t_minWidth: 0,\r\n\t\t\t\t_maxWidth: 0,\r\n\t\t\t\trowSpan: rowData[col].rowSpan\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction markVSpans(table, row, col, span) {\r\n\t\tfor (var i = 1; i < span; i++) {\r\n\t\t\ttable.body[row + i][col] = {\r\n\t\t\t\t_span: true,\r\n\t\t\t\t_minWidth: 0,\r\n\t\t\t\t_maxWidth: 0,\r\n\t\t\t\tfillColor: table.body[row][col].fillColor,\r\n\t\t\t\tfillOpacity: table.body[row][col].fillOpacity\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tfunction extendTableWidths(node) {\r\n\t\tif (!node.table.widths) {\r\n\t\t\tnode.table.widths = 'auto';\r\n\t\t}\r\n\r\n\t\tif (isString(node.table.widths)) {\r\n\t\t\tnode.table.widths = [node.table.widths];\r\n\r\n\t\t\twhile (node.table.widths.length < node.table.body[0].length) {\r\n\t\t\t\tnode.table.widths.push(node.table.widths[node.table.widths.length - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, l = node.table.widths.length; i < l; i++) {\r\n\t\t\tvar w = node.table.widths[i];\r\n\t\t\tif (isNumber(w) || isString(w)) {\r\n\t\t\t\tnode.table.widths[i] = { width: w };\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nDocMeasure.prototype.measureCanvas = function (node) {\r\n\tvar w = 0, h = 0;\r\n\r\n\tfor (var i = 0, l = node.canvas.length; i < l; i++) {\r\n\t\tvar vector = node.canvas[i];\r\n\r\n\t\tswitch (vector.type) {\r\n\t\t\tcase 'ellipse':\r\n\t\t\t\tw = Math.max(w, vector.x + vector.r1);\r\n\t\t\t\th = Math.max(h, vector.y + vector.r2);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'rect':\r\n\t\t\t\tw = Math.max(w, vector.x + vector.w);\r\n\t\t\t\th = Math.max(h, vector.y + vector.h);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'line':\r\n\t\t\t\tw = Math.max(w, vector.x1, vector.x2);\r\n\t\t\t\th = Math.max(h, vector.y1, vector.y2);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'polyline':\r\n\t\t\t\tfor (var i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {\r\n\t\t\t\t\tw = Math.max(w, vector.points[i2].x);\r\n\t\t\t\t\th = Math.max(h, vector.points[i2].y);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tnode._minWidth = node._maxWidth = w;\r\n\tnode._minHeight = node._maxHeight = h;\r\n\tnode._alignment = this.styleStack.getProperty('alignment');\r\n\r\n\treturn node;\r\n};\r\n\r\nDocMeasure.prototype.measureQr = function (node) {\r\n\tnode = qrEncoder.measure(node);\r\n\tnode._alignment = this.styleStack.getProperty('alignment');\r\n\treturn node;\r\n};\r\n\r\nmodule.exports = DocMeasure;\r\n","'use strict';\r\n\r\nvar isString = require('./helpers').isString;\r\nvar isNumber = require('./helpers').isNumber;\r\nvar isBoolean = require('./helpers').isBoolean;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar fontStringify = require('./helpers').fontStringify;\r\n\r\nfunction DocPreprocessor() {\r\n\r\n}\r\n\r\nDocPreprocessor.prototype.preprocessDocument = function (docStructure) {\r\n\tthis.parentNode = null;\r\n\tthis.tocs = [];\r\n\tthis.nodeReferences = [];\r\n\treturn this.preprocessNode(docStructure);\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessNode = function (node) {\r\n\t// expand shortcuts and casting values\r\n\tif (isArray(node)) {\r\n\t\tnode = { stack: node };\r\n\t} else if (isString(node)) {\r\n\t\tnode = { text: node };\r\n\t} else if (isNumber(node) || isBoolean(node)) {\r\n\t\tnode = { text: node.toString() };\r\n\t} else if (node === undefined || node === null) {\r\n\t\tnode = { text: '' };\r\n\t} else if (Object.keys(node).length === 0) { // empty object\r\n\t\tnode = { text: '' };\r\n\t} else if ('text' in node && (node.text === undefined || node.text === null)) {\r\n\t\tnode.text = '';\r\n\t}\r\n\r\n\tif (node.columns) {\r\n\t\treturn this.preprocessColumns(node);\r\n\t} else if (node.stack) {\r\n\t\treturn this.preprocessVerticalContainer(node);\r\n\t} else if (node.ul) {\r\n\t\treturn this.preprocessList(node);\r\n\t} else if (node.ol) {\r\n\t\treturn this.preprocessList(node);\r\n\t} else if (node.table) {\r\n\t\treturn this.preprocessTable(node);\r\n\t} else if (node.text !== undefined) {\r\n\t\treturn this.preprocessText(node);\r\n\t} else if (node.toc) {\r\n\t\treturn this.preprocessToc(node);\r\n\t} else if (node.image) {\r\n\t\treturn this.preprocessImage(node);\r\n\t} else if (node.svg) {\r\n\t\treturn this.preprocessSVG(node);\r\n\t} else if (node.canvas) {\r\n\t\treturn this.preprocessCanvas(node);\r\n\t} else if (node.qr) {\r\n\t\treturn this.preprocessQr(node);\r\n\t} else if (node.pageReference || node.textReference) {\r\n\t\treturn this.preprocessText(node);\r\n\t} else {\r\n\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\r\n\t}\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessColumns = function (node) {\r\n\tvar columns = node.columns;\r\n\r\n\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\tcolumns[i] = this.preprocessNode(columns[i]);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessVerticalContainer = function (node) {\r\n\tvar items = node.stack;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\titems[i] = this.preprocessNode(items[i]);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessList = function (node) {\r\n\tvar items = node.ul || node.ol;\r\n\r\n\tfor (var i = 0, l = items.length; i < l; i++) {\r\n\t\titems[i] = this.preprocessNode(items[i]);\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessTable = function (node) {\r\n\tvar col, row, cols, rows;\r\n\r\n\tfor (col = 0, cols = node.table.body[0].length; col < cols; col++) {\r\n\t\tfor (row = 0, rows = node.table.body.length; row < rows; row++) {\r\n\t\t\tvar rowData = node.table.body[row];\r\n\t\t\tvar data = rowData[col];\r\n\t\t\tif (data !== undefined) {\r\n\t\t\t\tif (data === null) { // transform to object\r\n\t\t\t\t\tdata = '';\r\n\t\t\t\t}\r\n\t\t\t\tif (!data._span) {\r\n\t\t\t\t\trowData[col] = this.preprocessNode(data);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessText = function (node) {\r\n\tif (node.tocItem) {\r\n\t\tif (!isArray(node.tocItem)) {\r\n\t\t\tnode.tocItem = [node.tocItem];\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, l = node.tocItem.length; i < l; i++) {\r\n\t\t\tif (!isString(node.tocItem[i])) {\r\n\t\t\t\tnode.tocItem[i] = '_default_';\r\n\t\t\t}\r\n\r\n\t\t\tvar tocItemId = node.tocItem[i];\r\n\r\n\t\t\tif (!this.tocs[tocItemId]) {\r\n\t\t\t\tthis.tocs[tocItemId] = { toc: { _items: [], _pseudo: true } };\r\n\t\t\t}\r\n\r\n\t\t\tif (!node.id) {\r\n\t\t\t\tnode.id = 'toc-' + tocItemId + '-' + this.tocs[tocItemId].toc._items.length;\r\n\t\t\t}\r\n\r\n\t\t\tvar tocItemRef = {\r\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\r\n\t\t\t\t_textNodeRef: node\r\n\t\t\t};\r\n\t\t\tthis.tocs[tocItemId].toc._items.push(tocItemRef);\r\n\t\t}\r\n\t}\r\n\r\n\tif (node.id) {\r\n\t\tif (this.nodeReferences[node.id]) {\r\n\t\t\tif (!this.nodeReferences[node.id]._pseudo) {\r\n\t\t\t\tthrow \"Node id '\" + node.id + \"' already exists\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.nodeReferences[node.id]._nodeRef = this._getNodeForNodeRef(node);\r\n\t\t\tthis.nodeReferences[node.id]._textNodeRef = node;\r\n\t\t\tthis.nodeReferences[node.id]._pseudo = false;\r\n\t\t} else {\r\n\t\t\tthis.nodeReferences[node.id] = {\r\n\t\t\t\t_nodeRef: this._getNodeForNodeRef(node),\r\n\t\t\t\t_textNodeRef: node\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tif (node.pageReference) {\r\n\t\tif (!this.nodeReferences[node.pageReference]) {\r\n\t\t\tthis.nodeReferences[node.pageReference] = {\r\n\t\t\t\t_nodeRef: {},\r\n\t\t\t\t_textNodeRef: {},\r\n\t\t\t\t_pseudo: true\r\n\t\t\t};\r\n\t\t}\r\n\t\tnode.text = '00000';\r\n\t\tnode.linkToDestination = node.pageReference;\r\n\t\tnode._pageRef = this.nodeReferences[node.pageReference];\r\n\t}\r\n\r\n\tif (node.textReference) {\r\n\t\tif (!this.nodeReferences[node.textReference]) {\r\n\t\t\tthis.nodeReferences[node.textReference] = { _nodeRef: {}, _pseudo: true };\r\n\t\t}\r\n\r\n\t\tnode.text = '';\r\n\t\tnode.linkToDestination = node.textReference;\r\n\t\tnode._textRef = this.nodeReferences[node.textReference];\r\n\t}\r\n\r\n\tif (node.text && node.text.text) {\r\n\t\tnode.text = [this.preprocessNode(node.text)];\r\n\t} else if (isArray(node.text)) {\r\n\t\tvar isSetParentNode = false;\r\n\t\tif (this.parentNode === null) {\r\n\t\t\tthis.parentNode = node;\r\n\t\t\tisSetParentNode = true;\r\n\t\t}\r\n\r\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\r\n\t\t\tnode.text[i] = this.preprocessNode(node.text[i]);\r\n\t\t}\r\n\r\n\t\tif (isSetParentNode) {\r\n\t\t\tthis.parentNode = null;\r\n\t\t}\r\n\t}\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessToc = function (node) {\r\n\tif (!node.toc.id) {\r\n\t\tnode.toc.id = '_default_';\r\n\t}\r\n\r\n\tnode.toc.title = node.toc.title ? this.preprocessNode(node.toc.title) : null;\r\n\tnode.toc._items = [];\r\n\r\n\tif (this.tocs[node.toc.id]) {\r\n\t\tif (!this.tocs[node.toc.id].toc._pseudo) {\r\n\t\t\tthrow \"TOC '\" + node.toc.id + \"' already exists\";\r\n\t\t}\r\n\r\n\t\tnode.toc._items = this.tocs[node.toc.id].toc._items;\r\n\t}\r\n\r\n\tthis.tocs[node.toc.id] = node;\r\n\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessImage = function (node) {\r\n\tif (!isUndefined(node.image.type) && !isUndefined(node.image.data) && (node.image.type === 'Buffer') && isArray(node.image.data)) {\r\n\t\tnode.image = Buffer.from(node.image.data);\r\n\t}\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessSVG = function (node) {\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessCanvas = function (node) {\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype.preprocessQr = function (node) {\r\n\treturn node;\r\n};\r\n\r\nDocPreprocessor.prototype._getNodeForNodeRef = function (node) {\r\n\tif (this.parentNode) {\r\n\t\treturn this.parentNode;\r\n\t}\r\n\r\n\treturn node;\r\n}\r\n\r\nmodule.exports = DocPreprocessor;\r\n","'use strict';\r\n\r\nvar TraversalTracker = require('./traversalTracker');\r\nvar isString = require('./helpers').isString;\r\n\r\n/**\r\n * Creates an instance of DocumentContext - a store for current x, y positions and available width/height.\r\n * It facilitates column divisions and vertical sync\r\n */\r\nfunction DocumentContext(pageSize, pageMargins) {\r\n\tthis.pages = [];\r\n\r\n\tthis.pageMargins = pageMargins;\r\n\r\n\tthis.x = pageMargins.left;\r\n\tthis.availableWidth = pageSize.width - pageMargins.left - pageMargins.right;\r\n\tthis.availableHeight = 0;\r\n\tthis.page = -1;\r\n\r\n\tthis.snapshots = [];\r\n\r\n\tthis.endingCell = null;\r\n\r\n\tthis.tracker = new TraversalTracker();\r\n\r\n\tthis.backgroundLength = [];\r\n\r\n\tthis.addPage(pageSize);\r\n}\r\n\r\nDocumentContext.prototype.beginColumnGroup = function () {\r\n\tthis.snapshots.push({\r\n\t\tx: this.x,\r\n\t\ty: this.y,\r\n\t\tavailableHeight: this.availableHeight,\r\n\t\tavailableWidth: this.availableWidth,\r\n\t\tpage: this.page,\r\n\t\tbottomMost: {\r\n\t\t\tx: this.x,\r\n\t\t\ty: this.y,\r\n\t\t\tavailableHeight: this.availableHeight,\r\n\t\t\tavailableWidth: this.availableWidth,\r\n\t\t\tpage: this.page\r\n\t\t},\r\n\t\tendingCell: this.endingCell,\r\n\t\tlastColumnWidth: this.lastColumnWidth\r\n\t});\r\n\r\n\tthis.lastColumnWidth = 0;\r\n};\r\n\r\nDocumentContext.prototype.beginColumn = function (width, offset, endingCell) {\r\n\tvar saved = this.snapshots[this.snapshots.length - 1];\r\n\r\n\tthis.calculateBottomMost(saved);\r\n\r\n\tthis.endingCell = endingCell;\r\n\tthis.page = saved.page;\r\n\tthis.x = this.x + this.lastColumnWidth + (offset || 0);\r\n\tthis.y = saved.y;\r\n\tthis.availableWidth = width;\t//saved.availableWidth - offset;\r\n\tthis.availableHeight = saved.availableHeight;\r\n\r\n\tthis.lastColumnWidth = width;\r\n};\r\n\r\nDocumentContext.prototype.calculateBottomMost = function (destContext) {\r\n\tif (this.endingCell) {\r\n\t\tthis.saveContextInEndingCell(this.endingCell);\r\n\t\tthis.endingCell = null;\r\n\t} else {\r\n\t\tdestContext.bottomMost = bottomMostContext(this, destContext.bottomMost);\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.markEnding = function (endingCell) {\r\n\tthis.page = endingCell._columnEndingContext.page;\r\n\tthis.x = endingCell._columnEndingContext.x;\r\n\tthis.y = endingCell._columnEndingContext.y;\r\n\tthis.availableWidth = endingCell._columnEndingContext.availableWidth;\r\n\tthis.availableHeight = endingCell._columnEndingContext.availableHeight;\r\n\tthis.lastColumnWidth = endingCell._columnEndingContext.lastColumnWidth;\r\n};\r\n\r\nDocumentContext.prototype.saveContextInEndingCell = function (endingCell) {\r\n\tendingCell._columnEndingContext = {\r\n\t\tpage: this.page,\r\n\t\tx: this.x,\r\n\t\ty: this.y,\r\n\t\tavailableHeight: this.availableHeight,\r\n\t\tavailableWidth: this.availableWidth,\r\n\t\tlastColumnWidth: this.lastColumnWidth\r\n\t};\r\n};\r\n\r\nDocumentContext.prototype.completeColumnGroup = function (height) {\r\n\tvar saved = this.snapshots.pop();\r\n\r\n\tthis.calculateBottomMost(saved);\r\n\r\n\tthis.endingCell = null;\r\n\tthis.x = saved.x;\r\n\r\n\tvar y = saved.bottomMost.y;\r\n\tif (height) {\r\n\t\tif (saved.page === saved.bottomMost.page) {\r\n\t\t\tif ((saved.y + height) > y) {\r\n\t\t\t\ty = saved.y + height;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\ty += height;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.y = y;\r\n\tthis.page = saved.bottomMost.page;\r\n\tthis.availableWidth = saved.availableWidth;\r\n\tthis.availableHeight = saved.bottomMost.availableHeight;\r\n\tif (height) {\r\n\t\tthis.availableHeight -= (y - saved.bottomMost.y);\r\n\t}\r\n\tthis.lastColumnWidth = saved.lastColumnWidth;\r\n};\r\n\r\nDocumentContext.prototype.addMargin = function (left, right) {\r\n\tthis.x += left;\r\n\tthis.availableWidth -= left + (right || 0);\r\n};\r\n\r\nDocumentContext.prototype.moveDown = function (offset) {\r\n\tthis.y += offset;\r\n\tthis.availableHeight -= offset;\r\n\r\n\treturn this.availableHeight > 0;\r\n};\r\n\r\nDocumentContext.prototype.initializePage = function () {\r\n\tthis.y = this.pageMargins.top;\r\n\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\r\n\tthis.pageSnapshot().availableWidth = this.getCurrentPage().pageSize.width - this.pageMargins.left - this.pageMargins.right;\r\n};\r\n\r\nDocumentContext.prototype.pageSnapshot = function () {\r\n\tif (this.snapshots[0]) {\r\n\t\treturn this.snapshots[0];\r\n\t} else {\r\n\t\treturn this;\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.moveTo = function (x, y) {\r\n\tif (x !== undefined && x !== null) {\r\n\t\tthis.x = x;\r\n\t\tthis.availableWidth = this.getCurrentPage().pageSize.width - this.x - this.pageMargins.right;\r\n\t}\r\n\tif (y !== undefined && y !== null) {\r\n\t\tthis.y = y;\r\n\t\tthis.availableHeight = this.getCurrentPage().pageSize.height - this.y - this.pageMargins.bottom;\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.moveToRelative = function (x, y) {\r\n\tif (x !== undefined && x !== null) {\r\n\t\tthis.x = this.x + x;\r\n\t}\r\n\tif (y !== undefined && y !== null) {\r\n\t\tthis.y = this.y + y;\r\n\t}\r\n};\r\n\r\nDocumentContext.prototype.beginDetachedBlock = function () {\r\n\tthis.snapshots.push({\r\n\t\tx: this.x,\r\n\t\ty: this.y,\r\n\t\tavailableHeight: this.availableHeight,\r\n\t\tavailableWidth: this.availableWidth,\r\n\t\tpage: this.page,\r\n\t\tendingCell: this.endingCell,\r\n\t\tlastColumnWidth: this.lastColumnWidth\r\n\t});\r\n};\r\n\r\nDocumentContext.prototype.endDetachedBlock = function () {\r\n\tvar saved = this.snapshots.pop();\r\n\r\n\tthis.x = saved.x;\r\n\tthis.y = saved.y;\r\n\tthis.availableWidth = saved.availableWidth;\r\n\tthis.availableHeight = saved.availableHeight;\r\n\tthis.page = saved.page;\r\n\tthis.endingCell = saved.endingCell;\r\n\tthis.lastColumnWidth = saved.lastColumnWidth;\r\n};\r\n\r\nfunction pageOrientation(pageOrientationString, currentPageOrientation) {\r\n\tif (pageOrientationString === undefined) {\r\n\t\treturn currentPageOrientation;\r\n\t} else if (isString(pageOrientationString) && (pageOrientationString.toLowerCase() === 'landscape')) {\r\n\t\treturn 'landscape';\r\n\t} else {\r\n\t\treturn 'portrait';\r\n\t}\r\n}\r\n\r\nvar getPageSize = function (currentPage, newPageOrientation) {\r\n\r\n\tnewPageOrientation = pageOrientation(newPageOrientation, currentPage.pageSize.orientation);\r\n\r\n\tif (newPageOrientation !== currentPage.pageSize.orientation) {\r\n\t\treturn {\r\n\t\t\torientation: newPageOrientation,\r\n\t\t\twidth: currentPage.pageSize.height,\r\n\t\t\theight: currentPage.pageSize.width\r\n\t\t};\r\n\t} else {\r\n\t\treturn {\r\n\t\t\torientation: currentPage.pageSize.orientation,\r\n\t\t\twidth: currentPage.pageSize.width,\r\n\t\t\theight: currentPage.pageSize.height\r\n\t\t};\r\n\t}\r\n\r\n};\r\n\r\n\r\nDocumentContext.prototype.moveToNextPage = function (pageOrientation) {\r\n\tvar nextPageIndex = this.page + 1;\r\n\r\n\tvar prevPage = this.page;\r\n\tvar prevY = this.y;\r\n\r\n\tvar createNewPage = nextPageIndex >= this.pages.length;\r\n\tif (createNewPage) {\r\n\t\tvar currentAvailableWidth = this.availableWidth;\r\n\t\tvar currentPageOrientation = this.getCurrentPage().pageSize.orientation;\r\n\r\n\t\tvar pageSize = getPageSize(this.getCurrentPage(), pageOrientation);\r\n\t\tthis.addPage(pageSize);\r\n\r\n\t\tif (currentPageOrientation === pageSize.orientation) {\r\n\t\t\tthis.availableWidth = currentAvailableWidth;\r\n\t\t}\r\n\t} else {\r\n\t\tthis.page = nextPageIndex;\r\n\t\tthis.initializePage();\r\n\t}\r\n\r\n\treturn {\r\n\t\tnewPageCreated: createNewPage,\r\n\t\tprevPage: prevPage,\r\n\t\tprevY: prevY,\r\n\t\ty: this.y\r\n\t};\r\n};\r\n\r\n\r\nDocumentContext.prototype.addPage = function (pageSize) {\r\n\tvar page = { items: [], pageSize: pageSize };\r\n\tthis.pages.push(page);\r\n\tthis.backgroundLength.push(0);\r\n\tthis.page = this.pages.length - 1;\r\n\tthis.initializePage();\r\n\r\n\tthis.tracker.emit('pageAdded');\r\n\r\n\treturn page;\r\n};\r\n\r\nDocumentContext.prototype.getCurrentPage = function () {\r\n\tif (this.page < 0 || this.page >= this.pages.length) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn this.pages[this.page];\r\n};\r\n\r\nDocumentContext.prototype.getCurrentPosition = function () {\r\n\tvar pageSize = this.getCurrentPage().pageSize;\r\n\tvar innerHeight = pageSize.height - this.pageMargins.top - this.pageMargins.bottom;\r\n\tvar innerWidth = pageSize.width - this.pageMargins.left - this.pageMargins.right;\r\n\r\n\treturn {\r\n\t\tpageNumber: this.page + 1,\r\n\t\tpageOrientation: pageSize.orientation,\r\n\t\tpageInnerHeight: innerHeight,\r\n\t\tpageInnerWidth: innerWidth,\r\n\t\tleft: this.x,\r\n\t\ttop: this.y,\r\n\t\tverticalRatio: ((this.y - this.pageMargins.top) / innerHeight),\r\n\t\thorizontalRatio: ((this.x - this.pageMargins.left) / innerWidth)\r\n\t};\r\n};\r\n\r\nfunction bottomMostContext(c1, c2) {\r\n\tvar r;\r\n\r\n\tif (c1.page > c2.page) {\r\n\t\tr = c1;\r\n\t} else if (c2.page > c1.page) {\r\n\t\tr = c2;\r\n\t} else {\r\n\t\tr = (c1.y > c2.y) ? c1 : c2;\r\n\t}\r\n\r\n\treturn {\r\n\t\tpage: r.page,\r\n\t\tx: r.x,\r\n\t\ty: r.y,\r\n\t\tavailableHeight: r.availableHeight,\r\n\t\tavailableWidth: r.availableWidth\r\n\t};\r\n}\r\n\r\nmodule.exports = DocumentContext;\r\n","'use strict';\r\n\r\nvar Line = require('./line');\r\nvar isNumber = require('./helpers').isNumber;\r\nvar pack = require('./helpers').pack;\r\nvar offsetVector = require('./helpers').offsetVector;\r\nvar DocumentContext = require('./documentContext');\r\n\r\n/**\r\n * Creates an instance of ElementWriter - a line/vector writer, which adds\r\n * elements to current page and sets their positions based on the context\r\n */\r\nfunction ElementWriter(context, tracker) {\r\n\tthis.context = context;\r\n\tthis.contextStack = [];\r\n\tthis.tracker = tracker;\r\n}\r\n\r\nfunction addPageItem(page, item, index) {\r\n\tif (index === null || index === undefined || index < 0 || index > page.items.length) {\r\n\t\tpage.items.push(item);\r\n\t} else {\r\n\t\tpage.items.splice(index, 0, item);\r\n\t}\r\n}\r\n\r\nElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\r\n\tvar height = line.getHeight();\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (context.availableHeight < height || !page) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tline.x = context.x + (line.x || 0);\r\n\tline.y = context.y + (line.y || 0);\r\n\r\n\tthis.alignLine(line);\r\n\r\n\taddPageItem(page, {\r\n\t\ttype: 'line',\r\n\t\titem: line\r\n\t}, index);\r\n\tthis.tracker.emit('lineAdded', line);\r\n\r\n\tif (!dontUpdateContextPosition) {\r\n\t\tcontext.moveDown(height);\r\n\t}\r\n\r\n\treturn position;\r\n};\r\n\r\nElementWriter.prototype.alignLine = function (line) {\r\n\tvar width = this.context.availableWidth;\r\n\tvar lineWidth = line.getWidth();\r\n\r\n\tvar alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;\r\n\r\n\tvar offset = 0;\r\n\tswitch (alignment) {\r\n\t\tcase 'right':\r\n\t\t\toffset = width - lineWidth;\r\n\t\t\tbreak;\r\n\t\tcase 'center':\r\n\t\t\toffset = (width - lineWidth) / 2;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (offset) {\r\n\t\tline.x = (line.x || 0) + offset;\r\n\t}\r\n\r\n\tif (alignment === 'justify' &&\r\n\t\t!line.newLineForced &&\r\n\t\t!line.lastLineInParagraph &&\r\n\t\tline.inlines.length > 1) {\r\n\t\tvar additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);\r\n\r\n\t\tfor (var i = 1, l = line.inlines.length; i < l; i++) {\r\n\t\t\toffset = i * additionalSpacing;\r\n\r\n\t\t\tline.inlines[i].x += offset;\r\n\t\t\tline.inlines[i].justifyShift = additionalSpacing;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.addImage = function (image, index, type) {\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (!page || (image.absolutePosition === undefined && context.availableHeight < image._height && page.items.length > 0)) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (image._x === undefined) {\r\n\t\timage._x = image.x || 0;\r\n\t}\r\n\r\n\timage.x = context.x + image._x;\r\n\timage.y = context.y;\r\n\r\n\tthis.alignImage(image);\r\n\r\n\taddPageItem(page, {\r\n\t\ttype: type || 'image',\r\n\t\titem: image\r\n\t}, index);\r\n\r\n\tcontext.moveDown(image._height);\r\n\r\n\treturn position;\r\n};\r\n\r\nElementWriter.prototype.addSVG = function (image, index) {\r\n\treturn this.addImage(image, index, 'svg')\r\n};\r\n\r\nElementWriter.prototype.addQr = function (qr, index) {\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (!page || (qr.absolutePosition === undefined && context.availableHeight < qr._height)) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tif (qr._x === undefined) {\r\n\t\tqr._x = qr.x || 0;\r\n\t}\r\n\r\n\tqr.x = context.x + qr._x;\r\n\tqr.y = context.y;\r\n\r\n\tthis.alignImage(qr);\r\n\r\n\tfor (var i = 0, l = qr._canvas.length; i < l; i++) {\r\n\t\tvar vector = qr._canvas[i];\r\n\t\tvector.x += qr.x;\r\n\t\tvector.y += qr.y;\r\n\t\tthis.addVector(vector, true, true, index);\r\n\t}\r\n\r\n\tcontext.moveDown(qr._height);\r\n\r\n\treturn position;\r\n};\r\n\r\nElementWriter.prototype.alignImage = function (image) {\r\n\tvar width = this.context.availableWidth;\r\n\tvar imageWidth = image._minWidth;\r\n\tvar offset = 0;\r\n\tswitch (image._alignment) {\r\n\t\tcase 'right':\r\n\t\t\toffset = width - imageWidth;\r\n\t\t\tbreak;\r\n\t\tcase 'center':\r\n\t\t\toffset = (width - imageWidth) / 2;\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (offset) {\r\n\t\timage.x = (image.x || 0) + offset;\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.alignCanvas = function (node) {\r\n\tvar width = this.context.availableWidth;\r\n\tvar canvasWidth = node._minWidth;\r\n\tvar offset = 0;\r\n\tswitch (node._alignment) {\r\n\t\tcase 'right':\r\n\t\t\toffset = width - canvasWidth;\r\n\t\t\tbreak;\r\n\t\tcase 'center':\r\n\t\t\toffset = (width - canvasWidth) / 2;\r\n\t\t\tbreak;\r\n\t}\r\n\tif (offset) {\r\n\t\tnode.canvas.forEach(function (vector) {\r\n\t\t\toffsetVector(vector, offset, 0);\r\n\t\t});\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\r\n\tvar context = this.context;\r\n\tvar page = context.getCurrentPage(),\r\n\t\tposition = this.getCurrentPositionOnPage();\r\n\r\n\tif (page) {\r\n\t\toffsetVector(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);\r\n\t\taddPageItem(page, {\r\n\t\t\ttype: 'vector',\r\n\t\t\titem: vector\r\n\t\t}, index);\r\n\t\treturn position;\r\n\t}\r\n};\r\n\r\nElementWriter.prototype.beginClip = function (width, height) {\r\n\tvar ctx = this.context;\r\n\tvar page = ctx.getCurrentPage();\r\n\tpage.items.push({\r\n\t\ttype: 'beginClip',\r\n\t\titem: { x: ctx.x, y: ctx.y, width: width, height: height }\r\n\t});\r\n\treturn true;\r\n};\r\n\r\nElementWriter.prototype.endClip = function () {\r\n\tvar ctx = this.context;\r\n\tvar page = ctx.getCurrentPage();\r\n\tpage.items.push({\r\n\t\ttype: 'endClip'\r\n\t});\r\n\treturn true;\r\n};\r\n\r\nfunction cloneLine(line) {\r\n\tvar result = new Line(line.maxWidth);\r\n\r\n\tfor (var key in line) {\r\n\t\tif (line.hasOwnProperty(key)) {\r\n\t\t\tresult[key] = line[key];\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nElementWriter.prototype.addFragment = function (block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\r\n\tvar ctx = this.context;\r\n\tvar page = ctx.getCurrentPage();\r\n\r\n\tif (!useBlockXOffset && block.height > ctx.availableHeight) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tblock.items.forEach(function (item) {\r\n\t\tswitch (item.type) {\r\n\t\t\tcase 'line':\r\n\t\t\t\tvar l = cloneLine(item.item);\r\n\r\n\t\t\t\tif (l._node) {\r\n\t\t\t\t\tl._node.positions[0].pageNumber = ctx.page + 1;\r\n\t\t\t\t}\r\n\t\t\t\tl.x = (l.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\r\n\t\t\t\tl.y = (l.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\r\n\r\n\t\t\t\tpage.items.push({\r\n\t\t\t\t\ttype: 'line',\r\n\t\t\t\t\titem: l\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'vector':\r\n\t\t\t\tvar v = pack(item.item);\r\n\r\n\t\t\t\toffsetVector(v, useBlockXOffset ? (block.xOffset || 0) : ctx.x, useBlockYOffset ? (block.yOffset || 0) : ctx.y);\r\n\t\t\t\tpage.items.push({\r\n\t\t\t\t\ttype: 'vector',\r\n\t\t\t\t\titem: v\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'image':\r\n\t\t\tcase 'svg':\r\n\t\t\t\tvar img = pack(item.item);\r\n\r\n\t\t\t\timg.x = (img.x || 0) + (useBlockXOffset ? (block.xOffset || 0) : ctx.x);\r\n\t\t\t\timg.y = (img.y || 0) + (useBlockYOffset ? (block.yOffset || 0) : ctx.y);\r\n\r\n\t\t\t\tpage.items.push({\r\n\t\t\t\t\ttype: item.type,\r\n\t\t\t\t\titem: img\r\n\t\t\t\t});\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif (!dontUpdateContextPosition) {\r\n\t\tctx.moveDown(block.height);\r\n\t}\r\n\r\n\treturn true;\r\n};\r\n\r\n/**\r\n * Pushes the provided context onto the stack or creates a new one\r\n *\r\n * pushContext(context) - pushes the provided context and makes it current\r\n * pushContext(width, height) - creates and pushes a new context with the specified width and height\r\n * pushContext() - creates a new context for unbreakable blocks (with current availableWidth and full-page-height)\r\n */\r\nElementWriter.prototype.pushContext = function (contextOrWidth, height) {\r\n\tif (contextOrWidth === undefined) {\r\n\t\theight = this.context.getCurrentPage().height - this.context.pageMargins.top - this.context.pageMargins.bottom;\r\n\t\tcontextOrWidth = this.context.availableWidth;\r\n\t}\r\n\r\n\tif (isNumber(contextOrWidth)) {\r\n\t\tcontextOrWidth = new DocumentContext({ width: contextOrWidth, height: height }, { left: 0, right: 0, top: 0, bottom: 0 });\r\n\t}\r\n\r\n\tthis.contextStack.push(this.context);\r\n\tthis.context = contextOrWidth;\r\n};\r\n\r\nElementWriter.prototype.popContext = function () {\r\n\tthis.context = this.contextStack.pop();\r\n};\r\n\r\nElementWriter.prototype.getCurrentPositionOnPage = function () {\r\n\treturn (this.contextStack[0] || this.context).getCurrentPosition();\r\n};\r\n\r\n\r\nmodule.exports = ElementWriter;\r\n","'use strict';\r\n\r\nvar isArray = require('./helpers').isArray;\r\n\r\nfunction typeName(bold, italics) {\r\n\tvar type = 'normal';\r\n\tif (bold && italics) {\r\n\t\ttype = 'bolditalics';\r\n\t} else if (bold) {\r\n\t\ttype = 'bold';\r\n\t} else if (italics) {\r\n\t\ttype = 'italics';\r\n\t}\r\n\treturn type;\r\n}\r\n\r\nfunction FontProvider(fontDescriptors, pdfKitDoc) {\r\n\tthis.fonts = {};\r\n\tthis.pdfKitDoc = pdfKitDoc;\r\n\tthis.fontCache = {};\r\n\r\n\tfor (var font in fontDescriptors) {\r\n\t\tif (fontDescriptors.hasOwnProperty(font)) {\r\n\t\t\tvar fontDef = fontDescriptors[font];\r\n\r\n\t\t\tthis.fonts[font] = {\r\n\t\t\t\tnormal: fontDef.normal,\r\n\t\t\t\tbold: fontDef.bold,\r\n\t\t\t\titalics: fontDef.italics,\r\n\t\t\t\tbolditalics: fontDef.bolditalics\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n}\r\n\r\nFontProvider.prototype.getFontType = function (bold, italics) {\r\n\treturn typeName(bold, italics);\r\n}\r\n\r\nFontProvider.prototype.getFontFile = function (familyName, bold, italics) {\r\n\tvar type = this.getFontType(bold, italics);\r\n\tif (!this.fonts[familyName] || !this.fonts[familyName][type]) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\treturn this.fonts[familyName][type];\r\n}\r\n\r\nFontProvider.prototype.provideFont = function (familyName, bold, italics) {\r\n\tvar type = this.getFontType(bold, italics);\r\n\tif (this.getFontFile(familyName, bold, italics) === null) {\r\n\t\tthrow new Error('Font \\'' + familyName + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\r\n\t}\r\n\r\n\tthis.fontCache[familyName] = this.fontCache[familyName] || {};\r\n\r\n\tif (!this.fontCache[familyName][type]) {\r\n\t\tvar def = this.fonts[familyName][type];\r\n\t\tif (!isArray(def)) {\r\n\t\t\tdef = [def];\r\n\t\t}\r\n\t\tthis.fontCache[familyName][type] = this.pdfKitDoc.font.apply(this.pdfKitDoc, def)._font;\r\n\t}\r\n\r\n\treturn this.fontCache[familyName][type];\r\n};\r\n\r\nmodule.exports = FontProvider;\r\n","'use strict';\r\n\r\nfunction isString(variable) {\r\n\treturn typeof variable === 'string' || variable instanceof String;\r\n}\r\n\r\nfunction isNumber(variable) {\r\n\treturn typeof variable === 'number' || variable instanceof Number;\r\n}\r\n\r\nfunction isBoolean(variable) {\r\n\treturn typeof variable === 'boolean';\r\n}\r\n\r\nfunction isArray(variable) {\r\n\treturn Array.isArray(variable);\r\n}\r\n\r\nfunction isFunction(variable) {\r\n\treturn typeof variable === 'function';\r\n}\r\n\r\nfunction isObject(variable) {\r\n\treturn variable !== null && typeof variable === 'object';\r\n}\r\n\r\nfunction isNull(variable) {\r\n\treturn variable === null;\r\n}\r\n\r\nfunction isUndefined(variable) {\r\n\treturn variable === undefined;\r\n}\r\n\r\nfunction pack() {\r\n\tvar result = {};\r\n\r\n\tfor (var i = 0, l = arguments.length; i < l; i++) {\r\n\t\tvar obj = arguments[i];\r\n\r\n\t\tif (obj) {\r\n\t\t\tfor (var key in obj) {\r\n\t\t\t\tif (obj.hasOwnProperty(key)) {\r\n\t\t\t\t\tresult[key] = obj[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nfunction offsetVector(vector, x, y) {\r\n\tswitch (vector.type) {\r\n\t\tcase 'ellipse':\r\n\t\tcase 'rect':\r\n\t\t\tvector.x += x;\r\n\t\t\tvector.y += y;\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\tvector.x1 += x;\r\n\t\t\tvector.x2 += x;\r\n\t\t\tvector.y1 += y;\r\n\t\t\tvector.y2 += y;\r\n\t\t\tbreak;\r\n\t\tcase 'polyline':\r\n\t\t\tfor (var i = 0, l = vector.points.length; i < l; i++) {\r\n\t\t\t\tvector.points[i].x += x;\r\n\t\t\t\tvector.points[i].y += y;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n}\r\n\r\nfunction fontStringify(key, val) {\r\n\tif (key === 'font') {\r\n\t\treturn 'font';\r\n\t}\r\n\treturn val;\r\n}\r\n\r\nfunction getNodeId(node) {\r\n\tif (node.id) {\r\n\t\treturn node.id;\r\n\t}\r\n\r\n\tif (isArray(node.text)) {\r\n\t\tfor (var i = 0, l = node.text.length; i < l; i++) {\r\n\t\t\tvar n = node.text[i];\r\n\t\t\tvar nodeId = getNodeId(n);\r\n\t\t\tif (nodeId) {\r\n\t\t\t\treturn nodeId;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n\r\nfunction isPattern(color) {\r\n\treturn isArray(color) && color.length === 2;\r\n}\r\n\r\n// converts from a [, ] as used by pdfmake\r\n// into [, ] as used by pdfkit\r\n// (the pattern has to be registered in the doc definition of course)\r\nfunction getPattern(color, patterns) {\r\n\treturn [patterns[color[0]], color[1]];\r\n}\r\n\r\nmodule.exports = {\r\n\tisString: isString,\r\n\tisNumber: isNumber,\r\n\tisBoolean: isBoolean,\r\n\tisArray: isArray,\r\n\tisFunction: isFunction,\r\n\tisObject: isObject,\r\n\tisNull: isNull,\r\n\tisUndefined: isUndefined,\r\n\tpack: pack,\r\n\tfontStringify: fontStringify,\r\n\toffsetVector: offsetVector,\r\n\tgetNodeId: getNodeId,\r\n\tisPattern: isPattern,\r\n\tgetPattern: getPattern\r\n};\r\n","'use strict';\r\n\r\nvar fs = require('fs');\r\n\r\nfunction ImageMeasure(pdfKitDoc, imageDictionary) {\r\n\tthis.pdfKitDoc = pdfKitDoc;\r\n\tthis.imageDictionary = imageDictionary || {};\r\n}\r\n\r\nImageMeasure.prototype.measureImage = function (src) {\r\n\tvar image;\r\n\tvar that = this;\r\n\r\n\tif (!this.pdfKitDoc._imageRegistry[src]) {\r\n\t\ttry {\r\n\t\t\timage = this.pdfKitDoc.openImage(realImageSrc(src));\r\n\t\t\tif (!image) {\r\n\t\t\t\tthrow 'No image';\r\n\t\t\t}\r\n\t\t} catch (error) {\r\n\t\t\tthrow 'Invalid image: ' + error.toString() + '\\nImages dictionary should contain dataURL entries (or local file paths in node.js)';\r\n\t\t}\r\n\t\timage.embed(this.pdfKitDoc);\r\n\t\tthis.pdfKitDoc._imageRegistry[src] = image;\r\n\t} else {\r\n\t\timage = this.pdfKitDoc._imageRegistry[src];\r\n\t}\r\n\r\n\treturn { width: image.width, height: image.height };\r\n\r\n\tfunction realImageSrc(src) {\r\n\t\tvar img = that.imageDictionary[src];\r\n\r\n\t\tif (!img) {\r\n\t\t\treturn src;\r\n\t\t}\r\n\r\n\t\tif (fs.existsSync(img)) {\r\n\t\t\treturn fs.readFileSync(img);\r\n\t\t}\r\n\r\n\t\tvar index = img.indexOf('base64,');\r\n\t\tif (index < 0) {\r\n\t\t\treturn that.imageDictionary[src];\r\n\t\t}\r\n\r\n\t\treturn Buffer.from(img.substring(index + 7), 'base64');\r\n\t}\r\n};\r\n\r\nmodule.exports = ImageMeasure;\r\n","'use strict';\r\n\r\nvar TraversalTracker = require('./traversalTracker');\r\nvar DocPreprocessor = require('./docPreprocessor');\r\nvar DocMeasure = require('./docMeasure');\r\nvar DocumentContext = require('./documentContext');\r\nvar PageElementWriter = require('./pageElementWriter');\r\nvar ColumnCalculator = require('./columnCalculator');\r\nvar TableProcessor = require('./tableProcessor');\r\nvar Line = require('./line');\r\nvar isString = require('./helpers').isString;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar isNull = require('./helpers').isNull;\r\nvar pack = require('./helpers').pack;\r\nvar offsetVector = require('./helpers').offsetVector;\r\nvar fontStringify = require('./helpers').fontStringify;\r\nvar getNodeId = require('./helpers').getNodeId;\r\nvar isFunction = require('./helpers').isFunction;\r\nvar TextTools = require('./textTools');\r\nvar StyleContextStack = require('./styleContextStack');\r\nvar isNumber = require('./helpers').isNumber;\r\n\r\nfunction addAll(target, otherArray) {\r\n\totherArray.forEach(function (item) {\r\n\t\ttarget.push(item);\r\n\t});\r\n}\r\n\r\n/**\r\n * Creates an instance of LayoutBuilder - layout engine which turns document-definition-object\r\n * into a set of pages, lines, inlines and vectors ready to be rendered into a PDF\r\n *\r\n * @param {Object} pageSize - an object defining page width and height\r\n * @param {Object} pageMargins - an object defining top, left, right and bottom margins\r\n */\r\nfunction LayoutBuilder(pageSize, pageMargins, imageMeasure, svgMeasure) {\r\n\tthis.pageSize = pageSize;\r\n\tthis.pageMargins = pageMargins;\r\n\tthis.tracker = new TraversalTracker();\r\n\tthis.imageMeasure = imageMeasure;\r\n\tthis.svgMeasure = svgMeasure;\r\n\tthis.tableLayouts = {};\r\n}\r\n\r\nLayoutBuilder.prototype.registerTableLayouts = function (tableLayouts) {\r\n\tthis.tableLayouts = pack(this.tableLayouts, tableLayouts);\r\n};\r\n\r\n/**\r\n * Executes layout engine on document-definition-object and creates an array of pages\r\n * containing positioned Blocks, Lines and inlines\r\n *\r\n * @param {Object} docStructure document-definition-object\r\n * @param {Object} fontProvider font provider\r\n * @param {Object} styleDictionary dictionary with style definitions\r\n * @param {Object} defaultStyle default style definition\r\n * @return {Array} an array of pages\r\n */\r\nLayoutBuilder.prototype.layoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\r\n\r\n\tfunction addPageBreaksIfNecessary(linearNodeList, pages) {\r\n\r\n\t\tif (!isFunction(pageBreakBeforeFct)) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tlinearNodeList = linearNodeList.filter(function (node) {\r\n\t\t\treturn node.positions.length > 0;\r\n\t\t});\r\n\r\n\t\tlinearNodeList.forEach(function (node) {\r\n\t\t\tvar nodeInfo = {};\r\n\t\t\t[\r\n\t\t\t\t'id', 'text', 'ul', 'ol', 'table', 'image', 'qr', 'canvas', 'svg', 'columns',\r\n\t\t\t\t'headlineLevel', 'style', 'pageBreak', 'pageOrientation',\r\n\t\t\t\t'width', 'height'\r\n\t\t\t].forEach(function (key) {\r\n\t\t\t\tif (node[key] !== undefined) {\r\n\t\t\t\t\tnodeInfo[key] = node[key];\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tnodeInfo.startPosition = node.positions[0];\r\n\t\t\tnodeInfo.pageNumbers = Array.from(new Set(node.positions.map(function (node) { return node.pageNumber; })));\r\n\t\t\tnodeInfo.pages = pages.length;\r\n\t\t\tnodeInfo.stack = isArray(node.stack);\r\n\r\n\t\t\tnode.nodeInfo = nodeInfo;\r\n\t\t});\r\n\r\n\t\tfor (var index = 0; index < linearNodeList.length; index++) {\r\n\t\t\tvar node = linearNodeList[index];\r\n\t\t\tif (node.pageBreak !== 'before' && !node.pageBreakCalculated) {\r\n\t\t\t\tnode.pageBreakCalculated = true;\r\n\t\t\t\tvar pageNumber = node.nodeInfo.pageNumbers[0];\r\n\t\t\t\tvar followingNodesOnPage = [];\r\n\t\t\t\tvar nodesOnNextPage = [];\r\n\t\t\t\tvar previousNodesOnPage = [];\r\n\t\t\t\tif (pageBreakBeforeFct.length > 1) {\r\n\t\t\t\t\tfor (var ii = index + 1, l = linearNodeList.length; ii < l; ii++) {\r\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\r\n\t\t\t\t\t\t\tfollowingNodesOnPage.push(linearNodeList[ii].nodeInfo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif (pageBreakBeforeFct.length > 2 && linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber + 1) > -1) {\r\n\t\t\t\t\t\t\tnodesOnNextPage.push(linearNodeList[ii].nodeInfo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (pageBreakBeforeFct.length > 3) {\r\n\t\t\t\t\tfor (var ii = 0; ii < index; ii++) {\r\n\t\t\t\t\t\tif (linearNodeList[ii].nodeInfo.pageNumbers.indexOf(pageNumber) > -1) {\r\n\t\t\t\t\t\t\tpreviousNodesOnPage.push(linearNodeList[ii].nodeInfo);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (pageBreakBeforeFct(node.nodeInfo, followingNodesOnPage, nodesOnNextPage, previousNodesOnPage)) {\r\n\t\t\t\t\tnode.pageBreak = 'before';\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tthis.docPreprocessor = new DocPreprocessor();\r\n\tthis.docMeasure = new DocMeasure(fontProvider, styleDictionary, defaultStyle, this.imageMeasure, this.svgMeasure, this.tableLayouts, images);\r\n\r\n\r\n\tfunction resetXYs(result) {\r\n\t\tresult.linearNodeList.forEach(function (node) {\r\n\t\t\tnode.resetXY();\r\n\t\t});\r\n\t}\r\n\r\n\tvar result = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\r\n\twhile (addPageBreaksIfNecessary(result.linearNodeList, result.pages)) {\r\n\t\tresetXYs(result);\r\n\t\tresult = this.tryLayoutDocument(docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark);\r\n\t}\r\n\r\n\treturn result.pages;\r\n};\r\n\r\nLayoutBuilder.prototype.tryLayoutDocument = function (docStructure, fontProvider, styleDictionary, defaultStyle, background, header, footer, images, watermark, pageBreakBeforeFct) {\r\n\r\n\tthis.linearNodeList = [];\r\n\tdocStructure = this.docPreprocessor.preprocessDocument(docStructure);\r\n\tdocStructure = this.docMeasure.measureDocument(docStructure);\r\n\r\n\tthis.writer = new PageElementWriter(\r\n\t\tnew DocumentContext(this.pageSize, this.pageMargins), this.tracker);\r\n\r\n\tvar _this = this;\r\n\tthis.writer.context().tracker.startTracking('pageAdded', function () {\r\n\t\t_this.addBackground(background);\r\n\t});\r\n\r\n\tthis.addBackground(background);\r\n\tthis.processNode(docStructure);\r\n\tthis.addHeadersAndFooters(header, footer);\r\n\tif (watermark != null) {\r\n\t\tthis.addWatermark(watermark, fontProvider, defaultStyle);\r\n\t}\r\n\r\n\treturn { pages: this.writer.context().pages, linearNodeList: this.linearNodeList };\r\n};\r\n\r\n\r\nLayoutBuilder.prototype.addBackground = function (background) {\r\n\tvar backgroundGetter = isFunction(background) ? background : function () {\r\n\t\treturn background;\r\n\t};\r\n\r\n\tvar context = this.writer.context();\r\n\tvar pageSize = context.getCurrentPage().pageSize;\r\n\r\n\tvar pageBackground = backgroundGetter(context.page + 1, pageSize);\r\n\r\n\tif (pageBackground) {\r\n\t\tthis.writer.beginUnbreakableBlock(pageSize.width, pageSize.height);\r\n\t\tpageBackground = this.docPreprocessor.preprocessDocument(pageBackground);\r\n\t\tthis.processNode(this.docMeasure.measureDocument(pageBackground));\r\n\t\tthis.writer.commitUnbreakableBlock(0, 0);\r\n\t\tcontext.backgroundLength[context.page] += pageBackground.positions.length;\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.addStaticRepeatable = function (headerOrFooter, sizeFunction) {\r\n\tthis.addDynamicRepeatable(function () {\r\n\t\treturn JSON.parse(JSON.stringify(headerOrFooter)); // copy to new object\r\n\t}, sizeFunction);\r\n};\r\n\r\nLayoutBuilder.prototype.addDynamicRepeatable = function (nodeGetter, sizeFunction) {\r\n\tvar pages = this.writer.context().pages;\r\n\r\n\tfor (var pageIndex = 0, l = pages.length; pageIndex < l; pageIndex++) {\r\n\t\tthis.writer.context().page = pageIndex;\r\n\r\n\t\tvar node = nodeGetter(pageIndex + 1, l, this.writer.context().pages[pageIndex].pageSize);\r\n\r\n\t\tif (node) {\r\n\t\t\tvar sizes = sizeFunction(this.writer.context().getCurrentPage().pageSize, this.pageMargins);\r\n\t\t\tthis.writer.beginUnbreakableBlock(sizes.width, sizes.height);\r\n\t\t\tnode = this.docPreprocessor.preprocessDocument(node);\r\n\t\t\tthis.processNode(this.docMeasure.measureDocument(node));\r\n\t\t\tthis.writer.commitUnbreakableBlock(sizes.x, sizes.y);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.addHeadersAndFooters = function (header, footer) {\r\n\tvar headerSizeFct = function (pageSize, pageMargins) {\r\n\t\treturn {\r\n\t\t\tx: 0,\r\n\t\t\ty: 0,\r\n\t\t\twidth: pageSize.width,\r\n\t\t\theight: pageMargins.top\r\n\t\t};\r\n\t};\r\n\r\n\tvar footerSizeFct = function (pageSize, pageMargins) {\r\n\t\treturn {\r\n\t\t\tx: 0,\r\n\t\t\ty: pageSize.height - pageMargins.bottom,\r\n\t\t\twidth: pageSize.width,\r\n\t\t\theight: pageMargins.bottom\r\n\t\t};\r\n\t};\r\n\r\n\tif (isFunction(header)) {\r\n\t\tthis.addDynamicRepeatable(header, headerSizeFct);\r\n\t} else if (header) {\r\n\t\tthis.addStaticRepeatable(header, headerSizeFct);\r\n\t}\r\n\r\n\tif (isFunction(footer)) {\r\n\t\tthis.addDynamicRepeatable(footer, footerSizeFct);\r\n\t} else if (footer) {\r\n\t\tthis.addStaticRepeatable(footer, footerSizeFct);\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.addWatermark = function (watermark, fontProvider, defaultStyle) {\r\n\tif (isString(watermark)) {\r\n\t\twatermark = { 'text': watermark };\r\n\t}\r\n\r\n\tif (!watermark.text) { // empty watermark text\r\n\t\treturn;\r\n\t}\r\n\r\n\twatermark.font = watermark.font || defaultStyle.font || 'Roboto';\r\n\twatermark.fontSize = watermark.fontSize || 'auto';\r\n\twatermark.color = watermark.color || 'black';\r\n\twatermark.opacity = isNumber(watermark.opacity) ? watermark.opacity : 0.6;\r\n\twatermark.bold = watermark.bold || false;\r\n\twatermark.italics = watermark.italics || false;\r\n\twatermark.angle = !isUndefined(watermark.angle) && !isNull(watermark.angle) ? watermark.angle : null;\r\n\r\n\tif (watermark.angle === null) {\r\n\t\twatermark.angle = Math.atan2(this.pageSize.height, this.pageSize.width) * -180 / Math.PI;\r\n\t}\r\n\r\n\tif (watermark.fontSize === 'auto') {\r\n\t\twatermark.fontSize = getWatermarkFontSize(this.pageSize, watermark, fontProvider);\r\n\t}\r\n\r\n\tvar watermarkObject = {\r\n\t\ttext: watermark.text,\r\n\t\tfont: fontProvider.provideFont(watermark.font, watermark.bold, watermark.italics),\r\n\t\tfontSize: watermark.fontSize,\r\n\t\tcolor: watermark.color,\r\n\t\topacity: watermark.opacity,\r\n\t\tangle: watermark.angle\r\n\t};\r\n\r\n\twatermarkObject._size = getWatermarkSize(watermark, fontProvider);\r\n\r\n\tvar pages = this.writer.context().pages;\r\n\tfor (var i = 0, l = pages.length; i < l; i++) {\r\n\t\tpages[i].watermark = watermarkObject;\r\n\t}\r\n\r\n\tfunction getWatermarkSize(watermark, fontProvider) {\r\n\t\tvar textTools = new TextTools(fontProvider);\r\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\r\n\r\n\t\tstyleContextStack.push({\r\n\t\t\tfontSize: watermark.fontSize\r\n\t\t});\r\n\r\n\t\tvar size = textTools.sizeOfString(watermark.text, styleContextStack);\r\n\t\tvar rotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\r\n\r\n\t\treturn { size: size, rotatedSize: rotatedSize };\r\n\t}\r\n\r\n\tfunction getWatermarkFontSize(pageSize, watermark, fontProvider) {\r\n\t\tvar textTools = new TextTools(fontProvider);\r\n\t\tvar styleContextStack = new StyleContextStack(null, { font: watermark.font, bold: watermark.bold, italics: watermark.italics });\r\n\t\tvar rotatedSize;\r\n\r\n\t\t/**\r\n\t\t * Binary search the best font size.\r\n\t\t * Initial bounds [0, 1000]\r\n\t\t * Break when range < 1\r\n\t\t */\r\n\t\tvar a = 0;\r\n\t\tvar b = 1000;\r\n\t\tvar c = (a + b) / 2;\r\n\t\twhile (Math.abs(a - b) > 1) {\r\n\t\t\tstyleContextStack.push({\r\n\t\t\t\tfontSize: c\r\n\t\t\t});\r\n\t\t\trotatedSize = textTools.sizeOfRotatedText(watermark.text, watermark.angle, styleContextStack);\r\n\t\t\tif (rotatedSize.width > pageSize.width) {\r\n\t\t\t\tb = c;\r\n\t\t\t\tc = (a + b) / 2;\r\n\t\t\t} else if (rotatedSize.width < pageSize.width) {\r\n\t\t\t\tif (rotatedSize.height > pageSize.height) {\r\n\t\t\t\t\tb = c;\r\n\t\t\t\t\tc = (a + b) / 2;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ta = c;\r\n\t\t\t\t\tc = (a + b) / 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tstyleContextStack.pop();\r\n\t\t}\r\n\t\t/*\r\n\t\t End binary search\r\n\t\t */\r\n\t\treturn c;\r\n\t}\r\n};\r\n\r\nfunction decorateNode(node) {\r\n\tvar x = node.x, y = node.y;\r\n\tnode.positions = [];\r\n\r\n\tif (isArray(node.canvas)) {\r\n\t\tnode.canvas.forEach(function (vector) {\r\n\t\t\tvar x = vector.x, y = vector.y, x1 = vector.x1, y1 = vector.y1, x2 = vector.x2, y2 = vector.y2;\r\n\t\t\tvector.resetXY = function () {\r\n\t\t\t\tvector.x = x;\r\n\t\t\t\tvector.y = y;\r\n\t\t\t\tvector.x1 = x1;\r\n\t\t\t\tvector.y1 = y1;\r\n\t\t\t\tvector.x2 = x2;\r\n\t\t\t\tvector.y2 = y2;\r\n\t\t\t};\r\n\t\t});\r\n\t}\r\n\r\n\tnode.resetXY = function () {\r\n\t\tnode.x = x;\r\n\t\tnode.y = y;\r\n\t\tif (isArray(node.canvas)) {\r\n\t\t\tnode.canvas.forEach(function (vector) {\r\n\t\t\t\tvector.resetXY();\r\n\t\t\t});\r\n\t\t}\r\n\t};\r\n}\r\n\r\nLayoutBuilder.prototype.processNode = function (node) {\r\n\tvar self = this;\r\n\r\n\tthis.linearNodeList.push(node);\r\n\tdecorateNode(node);\r\n\r\n\tapplyMargins(function () {\r\n\t\tvar unbreakable = node.unbreakable;\r\n\t\tif (unbreakable) {\r\n\t\t\tself.writer.beginUnbreakableBlock();\r\n\t\t}\r\n\r\n\t\tvar absPosition = node.absolutePosition;\r\n\t\tif (absPosition) {\r\n\t\t\tself.writer.context().beginDetachedBlock();\r\n\t\t\tself.writer.context().moveTo(absPosition.x || 0, absPosition.y || 0);\r\n\t\t}\r\n\r\n\t\tvar relPosition = node.relativePosition;\r\n\t\tif (relPosition) {\r\n\t\t\tself.writer.context().beginDetachedBlock();\r\n\t\t\tself.writer.context().moveToRelative(relPosition.x || 0, relPosition.y || 0);\r\n\t\t}\r\n\r\n\t\tif (node.stack) {\r\n\t\t\tself.processVerticalContainer(node);\r\n\t\t} else if (node.columns) {\r\n\t\t\tself.processColumns(node);\r\n\t\t} else if (node.ul) {\r\n\t\t\tself.processList(false, node);\r\n\t\t} else if (node.ol) {\r\n\t\t\tself.processList(true, node);\r\n\t\t} else if (node.table) {\r\n\t\t\tself.processTable(node);\r\n\t\t} else if (node.text !== undefined) {\r\n\t\t\tself.processLeaf(node);\r\n\t\t} else if (node.toc) {\r\n\t\t\tself.processToc(node);\r\n\t\t} else if (node.image) {\r\n\t\t\tself.processImage(node);\r\n\t\t} else if (node.svg) {\r\n\t\t\tself.processSVG(node);\r\n\t\t} else if (node.canvas) {\r\n\t\t\tself.processCanvas(node);\r\n\t\t} else if (node.qr) {\r\n\t\t\tself.processQr(node);\r\n\t\t} else if (!node._span) {\r\n\t\t\tthrow 'Unrecognized document structure: ' + JSON.stringify(node, fontStringify);\r\n\t\t}\r\n\r\n\t\tif (absPosition || relPosition) {\r\n\t\t\tself.writer.context().endDetachedBlock();\r\n\t\t}\r\n\r\n\t\tif (unbreakable) {\r\n\t\t\tself.writer.commitUnbreakableBlock();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction applyMargins(callback) {\r\n\t\tvar margin = node._margin;\r\n\r\n\t\tif (node.pageBreak === 'before') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t} else if (node.pageBreak === 'beforeOdd') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t} else if (node.pageBreak === 'beforeEven') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (margin) {\r\n\t\t\tself.writer.context().moveDown(margin[1]);\r\n\t\t\tself.writer.context().addMargin(margin[0], margin[2]);\r\n\t\t}\r\n\r\n\t\tcallback();\r\n\r\n\t\tif (margin) {\r\n\t\t\tself.writer.context().addMargin(-margin[0], -margin[2]);\r\n\t\t\tself.writer.context().moveDown(margin[3]);\r\n\t\t}\r\n\r\n\t\tif (node.pageBreak === 'after') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t} else if (node.pageBreak === 'afterOdd') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 1) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t} else if (node.pageBreak === 'afterEven') {\r\n\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\tif ((self.writer.context().page + 1) % 2 === 0) {\r\n\t\t\t\tself.writer.moveToNextPage(node.pageOrientation);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// vertical container\r\nLayoutBuilder.prototype.processVerticalContainer = function (node) {\r\n\tvar self = this;\r\n\tnode.stack.forEach(function (item) {\r\n\t\tself.processNode(item);\r\n\t\taddAll(node.positions, item.positions);\r\n\r\n\t\t//TODO: paragraph gap\r\n\t});\r\n};\r\n\r\n// columns\r\nLayoutBuilder.prototype.processColumns = function (columnNode) {\r\n\tvar columns = columnNode.columns;\r\n\tvar availableWidth = this.writer.context().availableWidth;\r\n\tvar gaps = gapArray(columnNode._gap);\r\n\r\n\tif (gaps) {\r\n\t\tavailableWidth -= (gaps.length - 1) * columnNode._gap;\r\n\t}\r\n\r\n\tColumnCalculator.buildColumnWidths(columns, availableWidth);\r\n\tvar result = this.processRow(columns, columns, gaps);\r\n\taddAll(columnNode.positions, result.positions);\r\n\r\n\r\n\tfunction gapArray(gap) {\r\n\t\tif (!gap) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar gaps = [];\r\n\t\tgaps.push(0);\r\n\r\n\t\tfor (var i = columns.length - 1; i > 0; i--) {\r\n\t\t\tgaps.push(gap);\r\n\t\t}\r\n\r\n\t\treturn gaps;\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.processRow = function (columns, widths, gaps, tableBody, tableRow, height) {\r\n\tvar self = this;\r\n\tvar pageBreaks = [], positions = [];\r\n\r\n\tthis.tracker.auto('pageChanged', storePageBreakData, function () {\r\n\t\twidths = widths || columns;\r\n\r\n\t\tself.writer.context().beginColumnGroup();\r\n\r\n\t\tfor (var i = 0, l = columns.length; i < l; i++) {\r\n\t\t\tvar column = columns[i];\r\n\t\t\tvar width = widths[i]._calcWidth;\r\n\t\t\tvar leftOffset = colLeftOffset(i);\r\n\r\n\t\t\tif (column.colSpan && column.colSpan > 1) {\r\n\t\t\t\tfor (var j = 1; j < column.colSpan; j++) {\r\n\t\t\t\t\twidth += widths[++i]._calcWidth + gaps[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tself.writer.context().beginColumn(width, leftOffset, getEndingCell(column, i));\r\n\t\t\tif (!column._span) {\r\n\t\t\t\tself.processNode(column);\r\n\t\t\t\taddAll(positions, column.positions);\r\n\t\t\t} else if (column._columnEndingContext) {\r\n\t\t\t\t// row-span ending\r\n\t\t\t\tself.writer.context().markEnding(column);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tself.writer.context().completeColumnGroup(height);\r\n\t});\r\n\r\n\treturn { pageBreaks: pageBreaks, positions: positions };\r\n\r\n\tfunction storePageBreakData(data) {\r\n\t\tvar pageDesc;\r\n\r\n\t\tfor (var i = 0, l = pageBreaks.length; i < l; i++) {\r\n\t\t\tvar desc = pageBreaks[i];\r\n\t\t\tif (desc.prevPage === data.prevPage) {\r\n\t\t\t\tpageDesc = desc;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (!pageDesc) {\r\n\t\t\tpageDesc = data;\r\n\t\t\tpageBreaks.push(pageDesc);\r\n\t\t}\r\n\t\tpageDesc.prevY = Math.max(pageDesc.prevY, data.prevY);\r\n\t\tpageDesc.y = Math.min(pageDesc.y, data.y);\r\n\t}\r\n\r\n\tfunction colLeftOffset(i) {\r\n\t\tif (gaps && gaps.length > i) {\r\n\t\t\treturn gaps[i];\r\n\t\t}\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tfunction getEndingCell(column, columnIndex) {\r\n\t\tif (column.rowSpan && column.rowSpan > 1) {\r\n\t\t\tvar endingRow = tableRow + column.rowSpan - 1;\r\n\t\t\tif (endingRow >= tableBody.length) {\r\n\t\t\t\tthrow 'Row span for column ' + columnIndex + ' (with indexes starting from 0) exceeded row count';\r\n\t\t\t}\r\n\t\t\treturn tableBody[endingRow][columnIndex];\r\n\t\t}\r\n\r\n\t\treturn null;\r\n\t}\r\n};\r\n\r\n// lists\r\nLayoutBuilder.prototype.processList = function (orderedList, node) {\r\n\tvar self = this,\r\n\t\titems = orderedList ? node.ol : node.ul,\r\n\t\tgapSize = node._gapSize;\r\n\r\n\tthis.writer.context().addMargin(gapSize.width);\r\n\r\n\tvar nextMarker;\r\n\tthis.tracker.auto('lineAdded', addMarkerToFirstLeaf, function () {\r\n\t\titems.forEach(function (item) {\r\n\t\t\tnextMarker = item.listMarker;\r\n\t\t\tself.processNode(item);\r\n\t\t\taddAll(node.positions, item.positions);\r\n\t\t});\r\n\t});\r\n\r\n\tthis.writer.context().addMargin(-gapSize.width);\r\n\r\n\tfunction addMarkerToFirstLeaf(line) {\r\n\t\t// I'm not very happy with the way list processing is implemented\r\n\t\t// (both code and algorithm should be rethinked)\r\n\t\tif (nextMarker) {\r\n\t\t\tvar marker = nextMarker;\r\n\t\t\tnextMarker = null;\r\n\r\n\t\t\tif (marker.canvas) {\r\n\t\t\t\tvar vector = marker.canvas[0];\r\n\r\n\t\t\t\toffsetVector(vector, -marker._minWidth, 0);\r\n\t\t\t\tself.writer.addVector(vector);\r\n\t\t\t} else if (marker._inlines) {\r\n\t\t\t\tvar markerLine = new Line(self.pageSize.width);\r\n\t\t\t\tmarkerLine.addInline(marker._inlines[0]);\r\n\t\t\t\tmarkerLine.x = -marker._minWidth;\r\n\t\t\t\tmarkerLine.y = line.getAscenderHeight() - markerLine.getAscenderHeight();\r\n\t\t\t\tself.writer.addLine(markerLine, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// tables\r\nLayoutBuilder.prototype.processTable = function (tableNode) {\r\n\tvar processor = new TableProcessor(tableNode);\r\n\r\n\tprocessor.beginTable(this.writer);\r\n\r\n\tvar rowHeights = tableNode.table.heights;\r\n\tfor (var i = 0, l = tableNode.table.body.length; i < l; i++) {\r\n\t\tprocessor.beginRow(i, this.writer);\r\n\r\n\t\tvar height;\r\n\t\tif (isFunction(rowHeights)) {\r\n\t\t\theight = rowHeights(i);\r\n\t\t} else if (isArray(rowHeights)) {\r\n\t\t\theight = rowHeights[i];\r\n\t\t} else {\r\n\t\t\theight = rowHeights;\r\n\t\t}\r\n\r\n\t\tif (height === 'auto') {\r\n\t\t\theight = undefined;\r\n\t\t}\r\n\r\n\t\tvar result = this.processRow(tableNode.table.body[i], tableNode.table.widths, tableNode._offsets.offsets, tableNode.table.body, i, height);\r\n\t\taddAll(tableNode.positions, result.positions);\r\n\r\n\t\tprocessor.endRow(i, this.writer, result.pageBreaks);\r\n\t}\r\n\r\n\tprocessor.endTable(this.writer);\r\n};\r\n\r\n// leafs (texts)\r\nLayoutBuilder.prototype.processLeaf = function (node) {\r\n\tvar line = this.buildNextLine(node);\r\n\tif (line && (node.tocItem || node.id)) {\r\n\t\tline._node = node;\r\n\t}\r\n\tvar currentHeight = (line) ? line.getHeight() : 0;\r\n\tvar maxHeight = node.maxHeight || -1;\r\n\r\n\tif (line) {\r\n\t\tvar nodeId = getNodeId(node);\r\n\t\tif (nodeId) {\r\n\t\t\tline.id = nodeId;\r\n\t\t}\r\n\t}\r\n\r\n\tif (node._tocItemRef) {\r\n\t\tline._pageNodeRef = node._tocItemRef;\r\n\t}\r\n\r\n\tif (node._pageRef) {\r\n\t\tline._pageNodeRef = node._pageRef._nodeRef;\r\n\t}\r\n\r\n\tif (line && line.inlines && isArray(line.inlines)) {\r\n\t\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\t\tif (line.inlines[i]._tocItemRef) {\r\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._tocItemRef;\r\n\t\t\t}\r\n\r\n\t\t\tif (line.inlines[i]._pageRef) {\r\n\t\t\t\tline.inlines[i]._pageNodeRef = line.inlines[i]._pageRef._nodeRef;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twhile (line && (maxHeight === -1 || currentHeight < maxHeight)) {\r\n\t\tvar positions = this.writer.addLine(line);\r\n\t\tnode.positions.push(positions);\r\n\t\tline = this.buildNextLine(node);\r\n\t\tif (line) {\r\n\t\t\tcurrentHeight += line.getHeight();\r\n\t\t}\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.processToc = function (node) {\r\n\tif (node.toc.title) {\r\n\t\tthis.processNode(node.toc.title);\r\n\t}\r\n\tif (node.toc._table) {\r\n\t\tthis.processNode(node.toc._table);\r\n\t}\r\n};\r\n\r\nLayoutBuilder.prototype.buildNextLine = function (textNode) {\r\n\r\n\tfunction cloneInline(inline) {\r\n\t\tvar newInline = inline.constructor();\r\n\t\tfor (var key in inline) {\r\n\t\t\tnewInline[key] = inline[key];\r\n\t\t}\r\n\t\treturn newInline;\r\n\t}\r\n\r\n\tif (!textNode._inlines || textNode._inlines.length === 0) {\r\n\t\treturn null;\r\n\t}\r\n\r\n\tvar line = new Line(this.writer.context().availableWidth);\r\n\tvar textTools = new TextTools(null);\r\n\r\n\tvar isForceContinue = false;\r\n\twhile (textNode._inlines && textNode._inlines.length > 0 &&\r\n\t\t(line.hasEnoughSpaceForInline(textNode._inlines[0], textNode._inlines.slice(1)) || isForceContinue)) {\r\n\t\tvar isHardWrap = false;\r\n\t\tvar inline = textNode._inlines.shift();\r\n\t\tisForceContinue = false;\r\n\r\n\t\tif (!inline.noWrap && inline.text.length > 1 && inline.width > line.getAvailableWidth()) {\r\n\t\t\tvar widthPerChar = inline.width / inline.text.length;\r\n\t\t\tvar maxChars = Math.floor(line.getAvailableWidth() / widthPerChar);\r\n\t\t\tif (maxChars < 1) {\r\n\t\t\t\tmaxChars = 1;\r\n\t\t\t}\r\n\t\t\tif (maxChars < inline.text.length) {\r\n\t\t\t\tvar newInline = cloneInline(inline);\r\n\r\n\t\t\t\tnewInline.text = inline.text.substr(maxChars);\r\n\t\t\t\tinline.text = inline.text.substr(0, maxChars);\r\n\r\n\t\t\t\tnewInline.width = textTools.widthOfString(newInline.text, newInline.font, newInline.fontSize, newInline.characterSpacing, newInline.fontFeatures);\r\n\t\t\t\tinline.width = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\r\n\r\n\t\t\t\ttextNode._inlines.unshift(newInline);\r\n\t\t\t\tisHardWrap = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tline.addInline(inline);\r\n\r\n\t\tisForceContinue = inline.noNewLine && !isHardWrap;\r\n\t}\r\n\r\n\tline.lastLineInParagraph = textNode._inlines.length === 0;\r\n\r\n\treturn line;\r\n};\r\n\r\n// images\r\nLayoutBuilder.prototype.processImage = function (node) {\r\n\tvar position = this.writer.addImage(node);\r\n\tnode.positions.push(position);\r\n};\r\n\r\nLayoutBuilder.prototype.processSVG = function (node) {\r\n\tvar position = this.writer.addSVG(node);\r\n\tnode.positions.push(position);\r\n};\r\n\r\nLayoutBuilder.prototype.processCanvas = function (node) {\r\n\tvar height = node._minHeight;\r\n\r\n\tif (node.absolutePosition === undefined && this.writer.context().availableHeight < height) {\r\n\t\t// TODO: support for canvas larger than a page\r\n\t\t// TODO: support for other overflow methods\r\n\r\n\t\tthis.writer.moveToNextPage();\r\n\t}\r\n\r\n\tthis.writer.alignCanvas(node);\r\n\r\n\tnode.canvas.forEach(function (vector) {\r\n\t\tvar position = this.writer.addVector(vector);\r\n\t\tnode.positions.push(position);\r\n\t}, this);\r\n\r\n\tthis.writer.context().moveDown(height);\r\n};\r\n\r\nLayoutBuilder.prototype.processQr = function (node) {\r\n\tvar position = this.writer.addQr(node);\r\n\tnode.positions.push(position);\r\n};\r\n\r\nmodule.exports = LayoutBuilder;\r\n","'use strict';\r\n\r\n/**\r\n * Creates an instance of Line\r\n *\r\n * @constructor\r\n * @this {Line}\r\n * @param {Number} Maximum width this line can have\r\n */\r\nfunction Line(maxWidth) {\r\n\tthis.maxWidth = maxWidth;\r\n\tthis.leadingCut = 0;\r\n\tthis.trailingCut = 0;\r\n\tthis.inlineWidths = 0;\r\n\tthis.inlines = [];\r\n}\r\n\r\nLine.prototype.getAscenderHeight = function () {\r\n\tvar y = 0;\r\n\r\n\tthis.inlines.forEach(function (inline) {\r\n\t\ty = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);\r\n\t});\r\n\treturn y;\r\n};\r\n\r\nLine.prototype.hasEnoughSpaceForInline = function (inline, nextInlines) {\r\n\tnextInlines = nextInlines || [];\r\n\r\n\tif (this.inlines.length === 0) {\r\n\t\treturn true;\r\n\t}\r\n\tif (this.newLineForced) {\r\n\t\treturn false;\r\n\t}\r\n\r\n\tvar inlineWidth = inline.width;\r\n\tvar inlineTrailingCut = inline.trailingCut || 0;\r\n\tif (inline.noNewLine) {\r\n\t\tfor (var i = 0, l = nextInlines.length; i < l; i++) {\r\n\t\t\tvar nextInline = nextInlines[i];\r\n\t\t\tinlineWidth += nextInline.width;\r\n\t\t\tinlineTrailingCut += nextInline.trailingCut || 0;\r\n\t\t\tif (!nextInline.noNewLine) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn (this.inlineWidths + inlineWidth - this.leadingCut - inlineTrailingCut) <= this.maxWidth;\r\n};\r\n\r\nLine.prototype.addInline = function (inline) {\r\n\tif (this.inlines.length === 0) {\r\n\t\tthis.leadingCut = inline.leadingCut || 0;\r\n\t}\r\n\tthis.trailingCut = inline.trailingCut || 0;\r\n\r\n\tinline.x = this.inlineWidths - this.leadingCut;\r\n\r\n\tthis.inlines.push(inline);\r\n\tthis.inlineWidths += inline.width;\r\n\r\n\tif (inline.lineEnd) {\r\n\t\tthis.newLineForced = true;\r\n\t}\r\n};\r\n\r\nLine.prototype.getWidth = function () {\r\n\treturn this.inlineWidths - this.leadingCut - this.trailingCut;\r\n};\r\n\r\nLine.prototype.getAvailableWidth = function () {\r\n\treturn this.maxWidth - this.getWidth();\r\n};\r\n\r\n/**\r\n * Returns line height\r\n * @return {Number}\r\n */\r\nLine.prototype.getHeight = function () {\r\n\tvar max = 0;\r\n\r\n\tthis.inlines.forEach(function (item) {\r\n\t\tmax = Math.max(max, item.height || 0);\r\n\t});\r\n\r\n\treturn max;\r\n};\r\n\r\nmodule.exports = Line;\r\n","'use strict';\r\n\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar ElementWriter = require('./elementWriter');\r\n\r\n/**\r\n * Creates an instance of PageElementWriter - an extended ElementWriter\r\n * which can handle:\r\n * - page-breaks (it adds new pages when there's not enough space left),\r\n * - repeatable fragments (like table-headers, which are repeated everytime\r\n * a page-break occurs)\r\n * - transactions (used for unbreakable-blocks when we want to make sure\r\n * whole block will be rendered on the same page)\r\n */\r\nfunction PageElementWriter(context, tracker) {\r\n\tthis.transactionLevel = 0;\r\n\tthis.repeatables = [];\r\n\tthis.tracker = tracker;\r\n\tthis.writer = new ElementWriter(context, tracker);\r\n}\r\n\r\nfunction fitOnPage(self, addFct) {\r\n\tvar position = addFct(self);\r\n\tif (!position) {\r\n\t\tself.moveToNextPage();\r\n\t\tposition = addFct(self);\r\n\t}\r\n\treturn position;\r\n}\r\n\r\nPageElementWriter.prototype.addLine = function (line, dontUpdateContextPosition, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addLine(line, dontUpdateContextPosition, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addImage = function (image, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addImage(image, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addSVG = function (image, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addSVG(image, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addQr = function (qr, index) {\r\n\treturn fitOnPage(this, function (self) {\r\n\t\treturn self.writer.addQr(qr, index);\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.addVector = function (vector, ignoreContextX, ignoreContextY, index) {\r\n\treturn this.writer.addVector(vector, ignoreContextX, ignoreContextY, index);\r\n};\r\n\r\nPageElementWriter.prototype.beginClip = function (width, height) {\r\n\treturn this.writer.beginClip(width, height);\r\n};\r\n\r\nPageElementWriter.prototype.endClip = function () {\r\n\treturn this.writer.endClip();\r\n};\r\n\r\nPageElementWriter.prototype.alignCanvas = function (node) {\r\n\tthis.writer.alignCanvas(node);\r\n};\r\n\r\nPageElementWriter.prototype.addFragment = function (fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {\r\n\tif (!this.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition)) {\r\n\t\tthis.moveToNextPage();\r\n\t\tthis.writer.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition);\r\n\t}\r\n};\r\n\r\nPageElementWriter.prototype.moveToNextPage = function (pageOrientation) {\r\n\r\n\tvar nextPage = this.writer.context.moveToNextPage(pageOrientation);\r\n\r\n\t// moveToNextPage is called multiple times for table, because is called for each column\r\n\t// and repeatables are inserted only in the first time. If columns are used, is needed\r\n\t// call for table in first column and then for table in the second column (is other repeatables).\r\n\tthis.repeatables.forEach(function (rep) {\r\n\t\tif (isUndefined(rep.insertedOnPages[this.writer.context.page])) {\r\n\t\t\trep.insertedOnPages[this.writer.context.page] = true;\r\n\t\t\tthis.writer.addFragment(rep, true);\r\n\t\t} else {\r\n\t\t\tthis.writer.context.moveDown(rep.height);\r\n\t\t}\r\n\t}, this);\r\n\r\n\tthis.writer.tracker.emit('pageChanged', {\r\n\t\tprevPage: nextPage.prevPage,\r\n\t\tprevY: nextPage.prevY,\r\n\t\ty: this.writer.context.y\r\n\t});\r\n};\r\n\r\nPageElementWriter.prototype.beginUnbreakableBlock = function (width, height) {\r\n\tif (this.transactionLevel++ === 0) {\r\n\t\tthis.originalX = this.writer.context.x;\r\n\t\tthis.writer.pushContext(width, height);\r\n\t}\r\n};\r\n\r\nPageElementWriter.prototype.commitUnbreakableBlock = function (forcedX, forcedY) {\r\n\tif (--this.transactionLevel === 0) {\r\n\t\tvar unbreakableContext = this.writer.context;\r\n\t\tthis.writer.popContext();\r\n\r\n\t\tvar nbPages = unbreakableContext.pages.length;\r\n\t\tif (nbPages > 0) {\r\n\t\t\t// no support for multi-page unbreakableBlocks\r\n\t\t\tvar fragment = unbreakableContext.pages[0];\r\n\t\t\tfragment.xOffset = forcedX;\r\n\t\t\tfragment.yOffset = forcedY;\r\n\r\n\t\t\t//TODO: vectors can influence height in some situations\r\n\t\t\tif (nbPages > 1) {\r\n\t\t\t\t// on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height\r\n\t\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\r\n\t\t\t\t\tfragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tfragment.height = this.writer.context.getCurrentPage().pageSize.height - this.writer.context.pageMargins.top - this.writer.context.pageMargins.bottom;\r\n\t\t\t\t\tfor (var i = 0, l = this.repeatables.length; i < l; i++) {\r\n\t\t\t\t\t\tfragment.height -= this.repeatables[i].height;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tfragment.height = unbreakableContext.y;\r\n\t\t\t}\r\n\r\n\t\t\tif (forcedX !== undefined || forcedY !== undefined) {\r\n\t\t\t\tthis.writer.addFragment(fragment, true, true, true);\r\n\t\t\t} else {\r\n\t\t\t\tthis.addFragment(fragment);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n};\r\n\r\nPageElementWriter.prototype.currentBlockToRepeatable = function () {\r\n\tvar unbreakableContext = this.writer.context;\r\n\tvar rep = { items: [] };\r\n\r\n\tunbreakableContext.pages[0].items.forEach(function (item) {\r\n\t\trep.items.push(item);\r\n\t});\r\n\r\n\trep.xOffset = this.originalX;\r\n\r\n\t//TODO: vectors can influence height in some situations\r\n\trep.height = unbreakableContext.y;\r\n\r\n\trep.insertedOnPages = [];\r\n\r\n\treturn rep;\r\n};\r\n\r\nPageElementWriter.prototype.pushToRepeatables = function (rep) {\r\n\tthis.repeatables.push(rep);\r\n};\r\n\r\nPageElementWriter.prototype.popFromRepeatables = function () {\r\n\tthis.repeatables.pop();\r\n};\r\n\r\nPageElementWriter.prototype.context = function () {\r\n\treturn this.writer.context;\r\n};\r\n\r\nmodule.exports = PageElementWriter;\r\n","'use strict';\r\n\r\nfunction _interopDefault(ex) {\r\n\treturn (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex;\r\n}\r\n\r\nvar PdfKit = _interopDefault(require('@foliojs-fork/pdfkit'));\r\n\r\nfunction getEngineInstance() {\r\n\treturn PdfKit;\r\n}\r\n\r\nfunction createPdfDocument(options) {\r\n\toptions = options || {};\r\n\treturn new PdfKit(options);\r\n}\r\n\r\nmodule.exports = {\r\n\tgetEngineInstance: getEngineInstance,\r\n\tcreatePdfDocument: createPdfDocument\r\n};\r\n","/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\r\n'use strict';\r\n\r\nvar PdfKitEngine = require('./pdfKitEngine');\r\nvar FontProvider = require('./fontProvider');\r\nvar LayoutBuilder = require('./layoutBuilder');\r\nvar sizes = require('./standardPageSizes');\r\nvar ImageMeasure = require('./imageMeasure');\r\nvar SVGMeasure = require('./svgMeasure');\r\nvar textDecorator = require('./textDecorator');\r\nvar TextTools = require('./textTools');\r\nvar isFunction = require('./helpers').isFunction;\r\nvar isString = require('./helpers').isString;\r\nvar isNumber = require('./helpers').isNumber;\r\nvar isBoolean = require('./helpers').isBoolean;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar isPattern = require('./helpers').isPattern;\r\nvar getPattern = require('./helpers').getPattern;\r\nvar SVGtoPDF = require('./3rd-party/svg-to-pdfkit');\r\n\r\nvar findFont = function (fonts, requiredFonts, defaultFont) {\r\n\tfor (var i = 0; i < requiredFonts.length; i++) {\r\n\t\tvar requiredFont = requiredFonts[i].toLowerCase();\r\n\r\n\t\tfor (var font in fonts) {\r\n\t\t\tif (font.toLowerCase() === requiredFont) {\r\n\t\t\t\treturn font;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn defaultFont;\r\n};\r\n\r\n////////////////////////////////////////\r\n// PdfPrinter\r\n\r\n/**\r\n * @class Creates an instance of a PdfPrinter which turns document definition into a pdf\r\n *\r\n * @param {Object} fontDescriptors font definition dictionary\r\n *\r\n * @example\r\n * var fontDescriptors = {\r\n *\tRoboto: {\r\n *\t\tnormal: 'fonts/Roboto-Regular.ttf',\r\n *\t\tbold: 'fonts/Roboto-Medium.ttf',\r\n *\t\titalics: 'fonts/Roboto-Italic.ttf',\r\n *\t\tbolditalics: 'fonts/Roboto-MediumItalic.ttf'\r\n *\t}\r\n * };\r\n *\r\n * var printer = new PdfPrinter(fontDescriptors);\r\n */\r\nfunction PdfPrinter(fontDescriptors) {\r\n\tthis.fontDescriptors = fontDescriptors;\r\n}\r\n\r\n/**\r\n * Executes layout engine for the specified document and renders it into a pdfkit document\r\n * ready to be saved.\r\n *\r\n * @param {Object} docDefinition document definition\r\n * @param {Object} docDefinition.content an array describing the pdf structure (for more information take a look at the examples in the /examples folder)\r\n * @param {Object} [docDefinition.defaultStyle] default (implicit) style definition\r\n * @param {Object} [docDefinition.styles] dictionary defining all styles which can be used in the document\r\n * @param {Object} [docDefinition.pageSize] page size (pdfkit units, A4 dimensions by default)\r\n * @param {Number} docDefinition.pageSize.width width\r\n * @param {Number} docDefinition.pageSize.height height\r\n * @param {Object} [docDefinition.pageMargins] page margins (pdfkit units)\r\n * @param {Number} docDefinition.maxPagesNumber maximum number of pages to render\r\n *\r\n * @example\r\n *\r\n * var docDefinition = {\r\n * \tinfo: {\r\n *\t\ttitle: 'awesome Document',\r\n *\t\tauthor: 'john doe',\r\n *\t\tsubject: 'subject of document',\r\n *\t\tkeywords: 'keywords for document',\r\n * \t},\r\n *\tcontent: [\r\n *\t\t'First paragraph',\r\n *\t\t'Second paragraph, this time a little bit longer',\r\n *\t\t{ text: 'Third paragraph, slightly bigger font size', fontSize: 20 },\r\n *\t\t{ text: 'Another paragraph using a named style', style: 'header' },\r\n *\t\t{ text: ['playing with ', 'inlines' ] },\r\n *\t\t{ text: ['and ', { text: 'restyling ', bold: true }, 'them'] },\r\n *\t],\r\n *\tstyles: {\r\n *\t\theader: { fontSize: 30, bold: true }\r\n *\t},\r\n *\tpatterns: {\r\n *\t\tstripe45d: {\r\n *\t\t\tboundingBox: [1, 1, 4, 4],\r\n *\t\t\txStep: 3,\r\n *\t\t\tyStep: 3,\r\n *\t\t\tpattern: '1 w 0 1 m 4 5 l s 2 0 m 5 3 l s'\r\n *\t\t}\r\n *\t}\r\n * };\r\n *\r\n * var pdfKitDoc = printer.createPdfKitDocument(docDefinition);\r\n *\r\n * pdfKitDoc.pipe(fs.createWriteStream('sample.pdf'));\r\n * pdfKitDoc.end();\r\n *\r\n * @return {Object} a pdfKit document object which can be saved or encode to data-url\r\n */\r\nPdfPrinter.prototype.createPdfKitDocument = function (docDefinition, options) {\r\n\toptions = options || {};\r\n\r\n\tdocDefinition.version = docDefinition.version || '1.3';\r\n\tdocDefinition.compress = isBoolean(docDefinition.compress) ? docDefinition.compress : true;\r\n\tdocDefinition.images = docDefinition.images || {};\r\n\tdocDefinition.pageMargins = ((docDefinition.pageMargins !== undefined) && (docDefinition.pageMargins !== null)) ? docDefinition.pageMargins : 40;\r\n\r\n\tvar pageSize = fixPageSize(docDefinition.pageSize, docDefinition.pageOrientation);\r\n\r\n\tvar pdfOptions = {\r\n\t\tsize: [pageSize.width, pageSize.height],\r\n\t\tpdfVersion: docDefinition.version,\r\n\t\tcompress: docDefinition.compress,\r\n\t\tuserPassword: docDefinition.userPassword,\r\n\t\townerPassword: docDefinition.ownerPassword,\r\n\t\tpermissions: docDefinition.permissions,\r\n lang: docDefinition.language,\r\n\t\tfontLayoutCache: isBoolean(options.fontLayoutCache) ? options.fontLayoutCache : true,\r\n\t\tbufferPages: options.bufferPages || false,\r\n\t\tautoFirstPage: false,\r\n\t\tinfo: createMetadata(docDefinition),\r\n\t\tfont: null\r\n\t};\r\n\r\n\tthis.pdfKitDoc = PdfKitEngine.createPdfDocument(pdfOptions);\r\n\r\n\tthis.fontProvider = new FontProvider(this.fontDescriptors, this.pdfKitDoc);\r\n\r\n\tvar builder = new LayoutBuilder(pageSize, fixPageMargins(docDefinition.pageMargins), new ImageMeasure(this.pdfKitDoc, docDefinition.images), new SVGMeasure());\r\n\r\n\tregisterDefaultTableLayouts(builder);\r\n\tif (options.tableLayouts) {\r\n\t\tbuilder.registerTableLayouts(options.tableLayouts);\r\n\t}\r\n\r\n\tvar pages = builder.layoutDocument(docDefinition.content, this.fontProvider, docDefinition.styles || {}, docDefinition.defaultStyle || {\r\n\t\tfontSize: 12,\r\n\t\tfont: 'Roboto'\r\n\t}, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.images, docDefinition.watermark, docDefinition.pageBreakBefore);\r\n\tvar maxNumberPages = docDefinition.maxPagesNumber || -1;\r\n\tif (isNumber(maxNumberPages) && maxNumberPages > -1) {\r\n\t\tpages = pages.slice(0, maxNumberPages);\r\n\t}\r\n\r\n\t// if pageSize.height is set to Infinity, calculate the actual height of the page that\r\n\t// was laid out using the height of each of the items in the page.\r\n\tif (pageSize.height === Infinity) {\r\n\t\tvar pageHeight = calculatePageHeight(pages, docDefinition.pageMargins);\r\n\t\tthis.pdfKitDoc.options.size = [pageSize.width, pageHeight];\r\n\t}\r\n\r\n\tvar patterns = createPatterns(docDefinition.patterns || {}, this.pdfKitDoc);\r\n\r\n\trenderPages(pages, this.fontProvider, this.pdfKitDoc, patterns, options.progressCallback);\r\n\r\n\tif (options.autoPrint) {\r\n\t\tvar printActionRef = this.pdfKitDoc.ref({\r\n\t\t\tType: 'Action',\r\n\t\t\tS: 'Named',\r\n\t\t\tN: 'Print'\r\n\t\t});\r\n\t\tthis.pdfKitDoc._root.data.OpenAction = printActionRef;\r\n\t\tprintActionRef.end();\r\n\t}\r\n\treturn this.pdfKitDoc;\r\n};\r\n\r\nfunction createMetadata(docDefinition) {\r\n\t// PDF standard has these properties reserved: Title, Author, Subject, Keywords,\r\n\t// Creator, Producer, CreationDate, ModDate, Trapped.\r\n\t// To keep the pdfmake api consistent, the info field are defined lowercase.\r\n\t// Custom properties don't contain a space.\r\n\tfunction standardizePropertyKey(key) {\r\n\t\tvar standardProperties = ['Title', 'Author', 'Subject', 'Keywords',\r\n\t\t\t'Creator', 'Producer', 'CreationDate', 'ModDate', 'Trapped'];\r\n\t\tvar standardizedKey = key.charAt(0).toUpperCase() + key.slice(1);\r\n\t\tif (standardProperties.indexOf(standardizedKey) !== -1) {\r\n\t\t\treturn standardizedKey;\r\n\t\t}\r\n\r\n\t\treturn key.replace(/\\s+/g, '');\r\n\t}\r\n\r\n\tvar info = {\r\n\t\tProducer: 'pdfmake',\r\n\t\tCreator: 'pdfmake'\r\n\t};\r\n\r\n\tif (docDefinition.info) {\r\n\t\tfor (var key in docDefinition.info) {\r\n\t\t\tvar value = docDefinition.info[key];\r\n\t\t\tif (value) {\r\n\t\t\t\tkey = standardizePropertyKey(key);\r\n\t\t\t\tinfo[key] = value;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn info;\r\n}\r\n\r\nfunction calculatePageHeight(pages, margins) {\r\n\tfunction getItemHeight(item) {\r\n\t\tif (isFunction(item.item.getHeight)) {\r\n\t\t\treturn item.item.getHeight();\r\n\t\t} else if (item.item._height) {\r\n\t\t\treturn item.item._height;\r\n\t\t} else if (item.type === 'vector') {\r\n\t\t\tif (typeof item.item.y1 !== 'undefined') {\r\n\t\t\t\treturn item.item.y1 > item.item.y2 ? item.item.y1 : item.item.y2;\r\n\t\t\t} else {\r\n\t\t\t\treturn item.item.h;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\t// TODO: add support for next item types\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getBottomPosition(item) {\r\n\t\tvar top = item.item.y || 0;\r\n\t\tvar height = getItemHeight(item);\r\n\t\treturn top + height;\r\n\t}\r\n\r\n\tvar fixedMargins = fixPageMargins(margins || 40);\r\n\tvar height = fixedMargins.top;\r\n\r\n\tpages.forEach(function (page) {\r\n\t\tpage.items.forEach(function (item) {\r\n\t\t\tvar bottomPosition = getBottomPosition(item);\r\n\t\t\tif (bottomPosition > height) {\r\n\t\t\t\theight = bottomPosition;\r\n\t\t\t}\r\n\t\t});\r\n\t});\r\n\r\n\theight += fixedMargins.bottom;\r\n\r\n\treturn height;\r\n}\r\n\r\nfunction fixPageSize(pageSize, pageOrientation) {\r\n\tfunction isNeedSwapPageSizes(pageOrientation) {\r\n\t\tif (isString(pageOrientation)) {\r\n\t\t\tpageOrientation = pageOrientation.toLowerCase();\r\n\t\t\treturn ((pageOrientation === 'portrait') && (size.width > size.height)) ||\r\n\t\t\t\t((pageOrientation === 'landscape') && (size.width < size.height));\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\r\n\t// if pageSize.height is set to auto, set the height to infinity so there are no page breaks.\r\n\tif (pageSize && pageSize.height === 'auto') {\r\n\t\tpageSize.height = Infinity;\r\n\t}\r\n\r\n\tvar size = pageSize2widthAndHeight(pageSize || 'A4');\r\n\tif (isNeedSwapPageSizes(pageOrientation)) { // swap page sizes\r\n\t\tsize = { width: size.height, height: size.width };\r\n\t}\r\n\tsize.orientation = size.width > size.height ? 'landscape' : 'portrait';\r\n\treturn size;\r\n}\r\n\r\nfunction fixPageMargins(margin) {\r\n\tif (isNumber(margin)) {\r\n\t\tmargin = { left: margin, right: margin, top: margin, bottom: margin };\r\n\t} else if (isArray(margin)) {\r\n\t\tif (margin.length === 2) {\r\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[0], bottom: margin[1] };\r\n\t\t} else if (margin.length === 4) {\r\n\t\t\tmargin = { left: margin[0], top: margin[1], right: margin[2], bottom: margin[3] };\r\n\t\t} else {\r\n\t\t\tthrow 'Invalid pageMargins definition';\r\n\t\t}\r\n\t}\r\n\r\n\treturn margin;\r\n}\r\n\r\nfunction registerDefaultTableLayouts(layoutBuilder) {\r\n\tlayoutBuilder.registerTableLayouts({\r\n\t\tnoBorders: {\r\n\t\t\thLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i) {\r\n\t\t\t\treturn i && 4 || 0;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn (i < node.table.widths.length - 1) ? 4 : 0;\r\n\t\t\t}\r\n\t\t},\r\n\t\theaderLineOnly: {\r\n\t\t\thLineWidth: function (i, node) {\r\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 0;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i) {\r\n\t\t\t\treturn i === 0 ? 0 : 8;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\r\n\t\t\t}\r\n\t\t},\r\n\t\tlightHorizontalLines: {\r\n\t\t\thLineWidth: function (i, node) {\r\n\t\t\t\tif (i === 0 || i === node.table.body.length) {\r\n\t\t\t\t\treturn 0;\r\n\t\t\t\t}\r\n\t\t\t\treturn (i === node.table.headerRows) ? 2 : 1;\r\n\t\t\t},\r\n\t\t\tvLineWidth: function (i) {\r\n\t\t\t\treturn 0;\r\n\t\t\t},\r\n\t\t\thLineColor: function (i) {\r\n\t\t\t\treturn i === 1 ? 'black' : '#aaa';\r\n\t\t\t},\r\n\t\t\tpaddingLeft: function (i) {\r\n\t\t\t\treturn i === 0 ? 0 : 8;\r\n\t\t\t},\r\n\t\t\tpaddingRight: function (i, node) {\r\n\t\t\t\treturn (i === node.table.widths.length - 1) ? 0 : 8;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n}\r\n\r\nfunction pageSize2widthAndHeight(pageSize) {\r\n\tif (isString(pageSize)) {\r\n\t\tvar size = sizes[pageSize.toUpperCase()];\r\n\t\tif (!size) {\r\n\t\t\tthrow 'Page size ' + pageSize + ' not recognized';\r\n\t\t}\r\n\t\treturn { width: size[0], height: size[1] };\r\n\t}\r\n\r\n\treturn pageSize;\r\n}\r\n\r\nfunction updatePageOrientationInOptions(currentPage, pdfKitDoc) {\r\n\tvar previousPageOrientation = pdfKitDoc.options.size[0] > pdfKitDoc.options.size[1] ? 'landscape' : 'portrait';\r\n\r\n\tif (currentPage.pageSize.orientation !== previousPageOrientation) {\r\n\t\tvar width = pdfKitDoc.options.size[0];\r\n\t\tvar height = pdfKitDoc.options.size[1];\r\n\t\tpdfKitDoc.options.size = [height, width];\r\n\t}\r\n}\r\n\r\nfunction renderPages(pages, fontProvider, pdfKitDoc, patterns, progressCallback) {\r\n\tpdfKitDoc._pdfMakePages = pages;\r\n\tpdfKitDoc.addPage();\r\n\r\n\tvar totalItems = 0;\r\n\tif (progressCallback) {\r\n\t\tpages.forEach(function (page) {\r\n\t\t\ttotalItems += page.items.length;\r\n\t\t});\r\n\t}\r\n\r\n\tvar renderedItems = 0;\r\n\tprogressCallback = progressCallback || function () {\r\n\t};\r\n\r\n\tfor (var i = 0; i < pages.length; i++) {\r\n\t\tif (i > 0) {\r\n\t\t\tupdatePageOrientationInOptions(pages[i], pdfKitDoc);\r\n\t\t\tpdfKitDoc.addPage(pdfKitDoc.options);\r\n\t\t}\r\n\r\n\t\tvar page = pages[i];\r\n\t\tfor (var ii = 0, il = page.items.length; ii < il; ii++) {\r\n\t\t\tvar item = page.items[ii];\r\n\t\t\tswitch (item.type) {\r\n\t\t\t\tcase 'vector':\r\n\t\t\t\t\trenderVector(item.item, patterns, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'line':\r\n\t\t\t\t\trenderLine(item.item, item.item.x, item.item.y, patterns, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'image':\r\n\t\t\t\t\trenderImage(item.item, item.item.x, item.item.y, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'svg':\r\n\t\t\t\t\trenderSVG(item.item, item.item.x, item.item.y, pdfKitDoc, fontProvider);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'beginClip':\r\n\t\t\t\t\tbeginClip(item.item, pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'endClip':\r\n\t\t\t\t\tendClip(pdfKitDoc);\r\n\t\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\trenderedItems++;\r\n\t\t\tprogressCallback(renderedItems / totalItems);\r\n\t\t}\r\n\t\tif (page.watermark) {\r\n\t\t\trenderWatermark(page, pdfKitDoc);\r\n\t\t}\r\n\t}\r\n}\r\n\r\n/**\r\n * Shift the \"y\" height of the text baseline up or down (superscript or subscript,\r\n * respectively). The exact shift can / should be changed according to standard\r\n * conventions.\r\n *\r\n * @param {number} y\r\n * @param {any} inline\r\n */\r\nfunction offsetText(y, inline) {\r\n\tvar newY = y;\r\n\tif (inline.sup) {\r\n\t\tnewY -= inline.fontSize * 0.75;\r\n\t}\r\n\tif (inline.sub) {\r\n\t\tnewY += inline.fontSize * 0.35;\r\n\t}\r\n\treturn newY;\r\n}\r\n\r\nfunction renderLine(line, x, y, patterns, pdfKitDoc) {\r\n\tfunction preparePageNodeRefLine(_pageNodeRef, inline) {\r\n\t\tvar newWidth;\r\n\t\tvar diffWidth;\r\n\t\tvar textTools = new TextTools(null);\r\n\r\n\t\tif (isUndefined(_pageNodeRef.positions)) {\r\n\t\t\tthrow 'Page reference id not found';\r\n\t\t}\r\n\r\n\t\tvar pageNumber = _pageNodeRef.positions[0].pageNumber.toString();\r\n\r\n\t\tinline.text = pageNumber;\r\n\t\tnewWidth = textTools.widthOfString(inline.text, inline.font, inline.fontSize, inline.characterSpacing, inline.fontFeatures);\r\n\t\tdiffWidth = inline.width - newWidth;\r\n\t\tinline.width = newWidth;\r\n\r\n\t\tswitch (inline.alignment) {\r\n\t\t\tcase 'right':\r\n\t\t\t\tinline.x += diffWidth;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'center':\r\n\t\t\t\tinline.x += diffWidth / 2;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif (line._pageNodeRef) {\r\n\t\tpreparePageNodeRefLine(line._pageNodeRef, line.inlines[0]);\r\n\t}\r\n\r\n\tx = x || 0;\r\n\ty = y || 0;\r\n\r\n\tvar lineHeight = line.getHeight();\r\n\tvar ascenderHeight = line.getAscenderHeight();\r\n\tvar descent = lineHeight - ascenderHeight;\r\n\r\n\ttextDecorator.drawBackground(line, x, y, patterns, pdfKitDoc);\r\n\r\n\t//TODO: line.optimizeInlines();\r\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\tvar inline = line.inlines[i];\r\n\t\tvar shiftToBaseline = lineHeight - ((inline.font.ascender / 1000) * inline.fontSize) - descent;\r\n\r\n\t\tif (inline._pageNodeRef) {\r\n\t\t\tpreparePageNodeRefLine(inline._pageNodeRef, inline);\r\n\t\t}\r\n\r\n\t\tvar options = {\r\n\t\t\tlineBreak: false,\r\n\t\t\ttextWidth: inline.width,\r\n\t\t\tcharacterSpacing: inline.characterSpacing,\r\n\t\t\twordCount: 1,\r\n\t\t\tlink: inline.link\r\n\t\t};\r\n\r\n\t\tif (inline.linkToDestination) {\r\n\t\t\toptions.goTo = inline.linkToDestination;\r\n\t\t}\r\n\r\n\t\tif (line.id && i === 0) {\r\n\t\t\toptions.destination = line.id;\r\n\t\t}\r\n\r\n\t\tif (inline.fontFeatures) {\r\n\t\t\toptions.features = inline.fontFeatures;\r\n\t\t}\r\n\r\n\t\tvar opacity = isNumber(inline.opacity) ? inline.opacity : 1;\r\n\t\tpdfKitDoc.opacity(opacity);\r\n\t\tpdfKitDoc.fill(inline.color || 'black');\r\n\r\n\t\tpdfKitDoc._font = inline.font;\r\n\t\tpdfKitDoc.fontSize(inline.fontSize);\r\n\r\n\t\tvar shiftedY = offsetText(y + shiftToBaseline, inline);\r\n\t\tpdfKitDoc.text(inline.text, x + inline.x, shiftedY, options);\r\n\r\n\t\tif (inline.linkToPage) {\r\n\t\t\tvar _ref = pdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [inline.linkToPage, 0, 0] }).end();\r\n\t\t\tpdfKitDoc.annotate(x + inline.x, shiftedY, inline.width, inline.height, {\r\n\t\t\t\tSubtype: 'Link',\r\n\t\t\t\tDest: [inline.linkToPage - 1, 'XYZ', null, null, null]\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t}\r\n\t// Decorations won't draw correctly for superscript\r\n\ttextDecorator.drawDecorations(line, x, y, pdfKitDoc);\r\n}\r\n\r\nfunction renderWatermark(page, pdfKitDoc) {\r\n\tvar watermark = page.watermark;\r\n\r\n\tpdfKitDoc.fill(watermark.color);\r\n\tpdfKitDoc.opacity(watermark.opacity);\r\n\r\n\tpdfKitDoc.save();\r\n\r\n\tpdfKitDoc.rotate(watermark.angle, { origin: [pdfKitDoc.page.width / 2, pdfKitDoc.page.height / 2] });\r\n\r\n\tvar x = pdfKitDoc.page.width / 2 - watermark._size.size.width / 2;\r\n\tvar y = pdfKitDoc.page.height / 2 - watermark._size.size.height / 2;\r\n\r\n\tpdfKitDoc._font = watermark.font;\r\n\tpdfKitDoc.fontSize(watermark.fontSize);\r\n\tpdfKitDoc.text(watermark.text, x, y, { lineBreak: false });\r\n\r\n\tpdfKitDoc.restore();\r\n}\r\n\r\nfunction renderVector(vector, patterns, pdfKitDoc) {\r\n\t//TODO: pdf optimization (there's no need to write all properties everytime)\r\n\tpdfKitDoc.lineWidth(vector.lineWidth || 1);\r\n\tif (vector.dash) {\r\n\t\tpdfKitDoc.dash(vector.dash.length, { space: vector.dash.space || vector.dash.length, phase: vector.dash.phase || 0 });\r\n\t} else {\r\n\t\tpdfKitDoc.undash();\r\n\t}\r\n\tpdfKitDoc.lineJoin(vector.lineJoin || 'miter');\r\n\tpdfKitDoc.lineCap(vector.lineCap || 'butt');\r\n\r\n\t//TODO: clipping\r\n\r\n\tvar gradient = null;\r\n\r\n\tswitch (vector.type) {\r\n\t\tcase 'ellipse':\r\n\t\t\tpdfKitDoc.ellipse(vector.x, vector.y, vector.r1, vector.r2);\r\n\r\n\t\t\tif (vector.linearGradient) {\r\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x - vector.r1, vector.y, vector.x + vector.r1, vector.y);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'rect':\r\n\t\t\tif (vector.r) {\r\n\t\t\t\tpdfKitDoc.roundedRect(vector.x, vector.y, vector.w, vector.h, vector.r);\r\n\t\t\t} else {\r\n\t\t\t\tpdfKitDoc.rect(vector.x, vector.y, vector.w, vector.h);\r\n\t\t\t}\r\n\r\n\t\t\tif (vector.linearGradient) {\r\n\t\t\t\tgradient = pdfKitDoc.linearGradient(vector.x, vector.y, vector.x + vector.w, vector.y);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'line':\r\n\t\t\tpdfKitDoc.moveTo(vector.x1, vector.y1);\r\n\t\t\tpdfKitDoc.lineTo(vector.x2, vector.y2);\r\n\t\t\tbreak;\r\n\t\tcase 'polyline':\r\n\t\t\tif (vector.points.length === 0) {\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tpdfKitDoc.moveTo(vector.points[0].x, vector.points[0].y);\r\n\t\t\tfor (var i = 1, l = vector.points.length; i < l; i++) {\r\n\t\t\t\tpdfKitDoc.lineTo(vector.points[i].x, vector.points[i].y);\r\n\t\t\t}\r\n\r\n\t\t\tif (vector.points.length > 1) {\r\n\t\t\t\tvar p1 = vector.points[0];\r\n\t\t\t\tvar pn = vector.points[vector.points.length - 1];\r\n\r\n\t\t\t\tif (vector.closePath || p1.x === pn.x && p1.y === pn.y) {\r\n\t\t\t\t\tpdfKitDoc.closePath();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\tcase 'path':\r\n\t\t\tpdfKitDoc.path(vector.d);\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\tif (vector.linearGradient && gradient) {\r\n\t\tvar step = 1 / (vector.linearGradient.length - 1);\r\n\r\n\t\tfor (var i = 0; i < vector.linearGradient.length; i++) {\r\n\t\t\tgradient.stop(i * step, vector.linearGradient[i]);\r\n\t\t}\r\n\r\n\t\tvector.color = gradient;\r\n\t}\r\n\r\n\tif (isPattern(vector.color)) {\r\n\t\tvector.color = getPattern(vector.color, patterns);\r\n\t}\r\n\r\n\tvar fillOpacity = isNumber(vector.fillOpacity) ? vector.fillOpacity : 1;\r\n\tvar strokeOpacity = isNumber(vector.strokeOpacity) ? vector.strokeOpacity : 1;\r\n\r\n\tif (vector.color && vector.lineColor) {\r\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\r\n\t\tpdfKitDoc.strokeColor(vector.lineColor, strokeOpacity);\r\n\t\tpdfKitDoc.fillAndStroke();\r\n\t} else if (vector.color) {\r\n\t\tpdfKitDoc.fillColor(vector.color, fillOpacity);\r\n\t\tpdfKitDoc.fill();\r\n\t} else {\r\n\t\tpdfKitDoc.strokeColor(vector.lineColor || 'black', strokeOpacity);\r\n\t\tpdfKitDoc.stroke();\r\n\t}\r\n}\r\n\r\nfunction renderImage(image, x, y, pdfKitDoc) {\r\n\tvar opacity = isNumber(image.opacity) ? image.opacity : 1;\r\n\tpdfKitDoc.opacity(opacity);\r\n\tif (image.cover) {\r\n\t\tvar align = image.cover.align || 'center';\r\n\t\tvar valign = image.cover.valign || 'center';\r\n\t\tvar width = image.cover.width ? image.cover.width : image.width;\r\n\t\tvar height = image.cover.height ? image.cover.height : image.height;\r\n\t\tpdfKitDoc.save();\r\n\t\tpdfKitDoc.rect(image.x, image.y, width, height).clip();\r\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { cover: [width, height], align: align, valign: valign });\r\n\t\tpdfKitDoc.restore();\r\n\t} else {\r\n\t\tpdfKitDoc.image(image.image, image.x, image.y, { width: image._width, height: image._height });\r\n\t}\r\n\tif (image.link) {\r\n\t\tpdfKitDoc.link(image.x, image.y, image._width, image._height, image.link);\r\n\t}\r\n\tif (image.linkToPage) {\r\n\t\tpdfKitDoc.ref({ Type: 'Action', S: 'GoTo', D: [image.linkToPage, 0, 0] }).end();\r\n\t\tpdfKitDoc.annotate(image.x, image.y, image._width, image._height, { Subtype: 'Link', Dest: [image.linkToPage - 1, 'XYZ', null, null, null] });\r\n\t}\r\n\tif (image.linkToDestination) {\r\n\t\tpdfKitDoc.goTo(image.x, image.y, image._width, image._height, image.linkToDestination);\r\n\t}\r\n}\r\n\r\nfunction renderSVG(svg, x, y, pdfKitDoc, fontProvider) {\r\n\tvar options = Object.assign({ width: svg._width, height: svg._height, assumePt: true }, svg.options);\r\n\toptions.fontCallback = function (family, bold, italic) {\r\n\t\tvar fontsFamily = family.split(',').map(function (f) { return f.trim().replace(/('|\")/g, ''); });\r\n\t\tvar font = findFont(fontProvider.fonts, fontsFamily, svg.font || 'Roboto');\r\n\r\n\t\tvar fontFile = fontProvider.getFontFile(font, bold, italic);\r\n\t\tif (fontFile === null) {\r\n\t\t\tvar type = fontProvider.getFontType(bold, italic);\r\n\t\t\tthrow new Error('Font \\'' + font + '\\' in style \\'' + type + '\\' is not defined in the font section of the document definition.');\r\n\t\t}\r\n\r\n\t\treturn fontFile;\r\n\t};\r\n\r\n\tSVGtoPDF(pdfKitDoc, svg.svg, svg.x, svg.y, options);\r\n}\r\n\r\nfunction beginClip(rect, pdfKitDoc) {\r\n\tpdfKitDoc.save();\r\n\tpdfKitDoc.addContent('' + rect.x + ' ' + rect.y + ' ' + rect.width + ' ' + rect.height + ' re');\r\n\tpdfKitDoc.clip();\r\n}\r\n\r\nfunction endClip(pdfKitDoc) {\r\n\tpdfKitDoc.restore();\r\n}\r\n\r\nfunction createPatterns(patternDefinitions, pdfKitDoc) {\r\n\tvar patterns = {};\r\n\tObject.keys(patternDefinitions).forEach(function (p) {\r\n\t\tvar pattern = patternDefinitions[p];\r\n\t\tpatterns[p] = pdfKitDoc.pattern(pattern.boundingBox, pattern.xStep, pattern.yStep, pattern.pattern, pattern.colored);\r\n\t});\r\n\treturn patterns;\r\n}\r\n\r\nmodule.exports = PdfPrinter;\r\n","/*eslint no-unused-vars: [\"error\", {\"args\": \"none\"}]*/\r\n/*eslint no-redeclare: \"off\"*/\r\n\r\n'use strict';\r\n/* qr.js -- QR code generator in Javascript (revision 2011-01-19)\r\n * Written by Kang Seonghoon .\r\n *\r\n * This source code is in the public domain; if your jurisdiction does not\r\n * recognize the public domain the terms of Creative Commons CC0 license\r\n * apply. In the other words, you can always do what you want.\r\n */\r\n\r\n\r\n// per-version information (cf. JIS X 0510:2004 pp. 30--36, 71)\r\n//\r\n// [0]: the degree of generator polynomial by ECC levels\r\n// [1]: # of code blocks by ECC levels\r\n// [2]: left-top positions of alignment patterns\r\n//\r\n// the number in this table (in particular, [0]) does not exactly match with\r\n// the numbers in the specficiation. see augumenteccs below for the reason.\r\nvar VERSIONS = [\r\n\tnull,\r\n\t[[10, 7, 17, 13], [1, 1, 1, 1], []],\r\n\t[[16, 10, 28, 22], [1, 1, 1, 1], [4, 16]],\r\n\t[[26, 15, 22, 18], [1, 1, 2, 2], [4, 20]],\r\n\t[[18, 20, 16, 26], [2, 1, 4, 2], [4, 24]],\r\n\t[[24, 26, 22, 18], [2, 1, 4, 4], [4, 28]],\r\n\t[[16, 18, 28, 24], [4, 2, 4, 4], [4, 32]],\r\n\t[[18, 20, 26, 18], [4, 2, 5, 6], [4, 20, 36]],\r\n\t[[22, 24, 26, 22], [4, 2, 6, 6], [4, 22, 40]],\r\n\t[[22, 30, 24, 20], [5, 2, 8, 8], [4, 24, 44]],\r\n\t[[26, 18, 28, 24], [5, 4, 8, 8], [4, 26, 48]],\r\n\t[[30, 20, 24, 28], [5, 4, 11, 8], [4, 28, 52]],\r\n\t[[22, 24, 28, 26], [8, 4, 11, 10], [4, 30, 56]],\r\n\t[[22, 26, 22, 24], [9, 4, 16, 12], [4, 32, 60]],\r\n\t[[24, 30, 24, 20], [9, 4, 16, 16], [4, 24, 44, 64]],\r\n\t[[24, 22, 24, 30], [10, 6, 18, 12], [4, 24, 46, 68]],\r\n\t[[28, 24, 30, 24], [10, 6, 16, 17], [4, 24, 48, 72]],\r\n\t[[28, 28, 28, 28], [11, 6, 19, 16], [4, 28, 52, 76]],\r\n\t[[26, 30, 28, 28], [13, 6, 21, 18], [4, 28, 54, 80]],\r\n\t[[26, 28, 26, 26], [14, 7, 25, 21], [4, 28, 56, 84]],\r\n\t[[26, 28, 28, 30], [16, 8, 25, 20], [4, 32, 60, 88]],\r\n\t[[26, 28, 30, 28], [17, 8, 25, 23], [4, 26, 48, 70, 92]],\r\n\t[[28, 28, 24, 30], [17, 9, 34, 23], [4, 24, 48, 72, 96]],\r\n\t[[28, 30, 30, 30], [18, 9, 30, 25], [4, 28, 52, 76, 100]],\r\n\t[[28, 30, 30, 30], [20, 10, 32, 27], [4, 26, 52, 78, 104]],\r\n\t[[28, 26, 30, 30], [21, 12, 35, 29], [4, 30, 56, 82, 108]],\r\n\t[[28, 28, 30, 28], [23, 12, 37, 34], [4, 28, 56, 84, 112]],\r\n\t[[28, 30, 30, 30], [25, 12, 40, 34], [4, 32, 60, 88, 116]],\r\n\t[[28, 30, 30, 30], [26, 13, 42, 35], [4, 24, 48, 72, 96, 120]],\r\n\t[[28, 30, 30, 30], [28, 14, 45, 38], [4, 28, 52, 76, 100, 124]],\r\n\t[[28, 30, 30, 30], [29, 15, 48, 40], [4, 24, 50, 76, 102, 128]],\r\n\t[[28, 30, 30, 30], [31, 16, 51, 43], [4, 28, 54, 80, 106, 132]],\r\n\t[[28, 30, 30, 30], [33, 17, 54, 45], [4, 32, 58, 84, 110, 136]],\r\n\t[[28, 30, 30, 30], [35, 18, 57, 48], [4, 28, 56, 84, 112, 140]],\r\n\t[[28, 30, 30, 30], [37, 19, 60, 51], [4, 32, 60, 88, 116, 144]],\r\n\t[[28, 30, 30, 30], [38, 19, 63, 53], [4, 28, 52, 76, 100, 124, 148]],\r\n\t[[28, 30, 30, 30], [40, 20, 66, 56], [4, 22, 48, 74, 100, 126, 152]],\r\n\t[[28, 30, 30, 30], [43, 21, 70, 59], [4, 26, 52, 78, 104, 130, 156]],\r\n\t[[28, 30, 30, 30], [45, 22, 74, 62], [4, 30, 56, 82, 108, 134, 160]],\r\n\t[[28, 30, 30, 30], [47, 24, 77, 65], [4, 24, 52, 80, 108, 136, 164]],\r\n\t[[28, 30, 30, 30], [49, 25, 81, 68], [4, 28, 56, 84, 112, 140, 168]]];\r\n\r\n// mode constants (cf. Table 2 in JIS X 0510:2004 p. 16)\r\nvar MODE_TERMINATOR = 0;\r\nvar MODE_NUMERIC = 1, MODE_ALPHANUMERIC = 2, MODE_OCTET = 4, MODE_KANJI = 8;\r\n\r\n// validation regexps\r\nvar NUMERIC_REGEXP = /^\\d*$/;\r\nvar ALPHANUMERIC_REGEXP = /^[A-Za-z0-9 $%*+\\-./:]*$/;\r\nvar ALPHANUMERIC_OUT_REGEXP = /^[A-Z0-9 $%*+\\-./:]*$/;\r\n\r\n// ECC levels (cf. Table 22 in JIS X 0510:2004 p. 45)\r\nvar ECCLEVEL_L = 1, ECCLEVEL_M = 0, ECCLEVEL_Q = 3, ECCLEVEL_H = 2;\r\n\r\n// GF(2^8)-to-integer mapping with a reducing polynomial x^8+x^4+x^3+x^2+1\r\n// invariant: GF256_MAP[GF256_INVMAP[i]] == i for all i in [1,256)\r\nvar GF256_MAP = [], GF256_INVMAP = [-1];\r\nfor (var i = 0, v = 1; i < 255; ++i) {\r\n\tGF256_MAP.push(v);\r\n\tGF256_INVMAP[v] = i;\r\n\tv = (v * 2) ^ (v >= 128 ? 0x11d : 0);\r\n}\r\n\r\n// generator polynomials up to degree 30\r\n// (should match with polynomials in JIS X 0510:2004 Appendix A)\r\n//\r\n// generator polynomial of degree K is product of (x-\\alpha^0), (x-\\alpha^1),\r\n// ..., (x-\\alpha^(K-1)). by convention, we omit the K-th coefficient (always 1)\r\n// from the result; also other coefficients are written in terms of the exponent\r\n// to \\alpha to avoid the redundant calculation. (see also calculateecc below.)\r\nvar GF256_GENPOLY = [[]];\r\nfor (var i = 0; i < 30; ++i) {\r\n\tvar prevpoly = GF256_GENPOLY[i], poly = [];\r\n\tfor (var j = 0; j <= i; ++j) {\r\n\t\tvar a = (j < i ? GF256_MAP[prevpoly[j]] : 0);\r\n\t\tvar b = GF256_MAP[(i + (prevpoly[j - 1] || 0)) % 255];\r\n\t\tpoly.push(GF256_INVMAP[a ^ b]);\r\n\t}\r\n\tGF256_GENPOLY.push(poly);\r\n}\r\n\r\n// alphanumeric character mapping (cf. Table 5 in JIS X 0510:2004 p. 19)\r\nvar ALPHANUMERIC_MAP = {};\r\nfor (var i = 0; i < 45; ++i) {\r\n\tALPHANUMERIC_MAP['0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'.charAt(i)] = i;\r\n}\r\n\r\n// mask functions in terms of row # and column #\r\n// (cf. Table 20 in JIS X 0510:2004 p. 42)\r\n/*jshint unused: false */\r\nvar MASKFUNCS = [\r\n\tfunction (i, j) {\r\n\t\treturn (i + j) % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn i % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn j % 3 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn (i + j) % 3 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn (((i / 2) | 0) + ((j / 3) | 0)) % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn (i * j) % 2 + (i * j) % 3 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn ((i * j) % 2 + (i * j) % 3) % 2 === 0;\r\n\t},\r\n\tfunction (i, j) {\r\n\t\treturn ((i + j) % 2 + (i * j) % 3) % 2 === 0;\r\n\t}];\r\n\r\n// returns true when the version information has to be embeded.\r\nvar needsverinfo = function (ver) {\r\n\treturn ver > 6;\r\n};\r\n\r\n// returns the size of entire QR code for given version.\r\nvar getsizebyver = function (ver) {\r\n\treturn 4 * ver + 17;\r\n};\r\n\r\n// returns the number of bits available for code words in this version.\r\nvar nfullbits = function (ver) {\r\n\t/*\r\n\t * |<--------------- n --------------->|\r\n\t * | |<----- n-17 ---->| |\r\n\t * +-------+ ///+-------+ ----\r\n\t * | | ///| | ^\r\n\t * | 9x9 | @@@@@ ///| 9x8 | |\r\n\t * | | # # # @5x5@ # # # | | |\r\n\t * +-------+ @@@@@ +-------+ |\r\n\t * # ---|\r\n\t * ^ |\r\n\t * # |\r\n\t * @@@@@ @@@@@ @@@@@ | n\r\n\t * @5x5@ @5x5@ @5x5@ n-17\r\n\t * @@@@@ @@@@@ @@@@@ | |\r\n\t * # | |\r\n\t * ////// v |\r\n\t * //////# ---|\r\n\t * +-------+ @@@@@ @@@@@ |\r\n\t * | | @5x5@ @5x5@ |\r\n\t * | 8x9 | @@@@@ @@@@@ |\r\n\t * | | v\r\n\t * +-------+ ----\r\n\t *\r\n\t * when the entire code has n^2 modules and there are m^2-3 alignment\r\n\t * patterns, we have:\r\n\t * - 225 (= 9x9 + 9x8 + 8x9) modules for finder patterns and\r\n\t * format information;\r\n\t * - 2n-34 (= 2(n-17)) modules for timing patterns;\r\n\t * - 36 (= 3x6 + 6x3) modules for version information, if any;\r\n\t * - 25m^2-75 (= (m^2-3)(5x5)) modules for alignment patterns\r\n\t * if any, but 10m-20 (= 2(m-2)x5) of them overlaps with\r\n\t * timing patterns.\r\n\t */\r\n\tvar v = VERSIONS[ver];\r\n\tvar nbits = 16 * ver * ver + 128 * ver + 64; // finder, timing and format info.\r\n\tif (needsverinfo(ver))\r\n\t\tnbits -= 36; // version information\r\n\tif (v[2].length) { // alignment patterns\r\n\t\tnbits -= 25 * v[2].length * v[2].length - 10 * v[2].length - 55;\r\n\t}\r\n\treturn nbits;\r\n};\r\n\r\n// returns the number of bits available for data portions (i.e. excludes ECC\r\n// bits but includes mode and length bits) in this version and ECC level.\r\nvar ndatabits = function (ver, ecclevel) {\r\n\tvar nbits = nfullbits(ver) & ~7; // no sub-octet code words\r\n\tvar v = VERSIONS[ver];\r\n\tnbits -= 8 * v[0][ecclevel] * v[1][ecclevel]; // ecc bits\r\n\treturn nbits;\r\n};\r\n\r\n// returns the number of bits required for the length of data.\r\n// (cf. Table 3 in JIS X 0510:2004 p. 16)\r\nvar ndatalenbits = function (ver, mode) {\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\treturn (ver < 10 ? 10 : ver < 27 ? 12 : 14);\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\treturn (ver < 10 ? 9 : ver < 27 ? 11 : 13);\r\n\t\tcase MODE_OCTET:\r\n\t\t\treturn (ver < 10 ? 8 : 16);\r\n\t\tcase MODE_KANJI:\r\n\t\t\treturn (ver < 10 ? 8 : ver < 27 ? 10 : 12);\r\n\t}\r\n};\r\n\r\n// returns the maximum length of data possible in given configuration.\r\nvar getmaxdatalen = function (ver, mode, ecclevel) {\r\n\tvar nbits = ndatabits(ver, ecclevel) - 4 - ndatalenbits(ver, mode); // 4 for mode bits\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\treturn ((nbits / 10) | 0) * 3 + (nbits % 10 < 4 ? 0 : nbits % 10 < 7 ? 1 : 2);\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\treturn ((nbits / 11) | 0) * 2 + (nbits % 11 < 6 ? 0 : 1);\r\n\t\tcase MODE_OCTET:\r\n\t\t\treturn (nbits / 8) | 0;\r\n\t\tcase MODE_KANJI:\r\n\t\t\treturn (nbits / 13) | 0;\r\n\t}\r\n};\r\n\r\n// checks if the given data can be encoded in given mode, and returns\r\n// the converted data for the further processing if possible. otherwise\r\n// returns null.\r\n//\r\n// this function does not check the length of data; it is a duty of\r\n// encode function below (as it depends on the version and ECC level too).\r\nvar validatedata = function (mode, data) {\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\tif (!data.match(NUMERIC_REGEXP))\r\n\t\t\t\treturn null;\r\n\t\t\treturn data;\r\n\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\tif (!data.match(ALPHANUMERIC_REGEXP))\r\n\t\t\t\treturn null;\r\n\t\t\treturn data.toUpperCase();\r\n\r\n\t\tcase MODE_OCTET:\r\n\t\t\tif (typeof data === 'string') { // encode as utf-8 string\r\n\t\t\t\tvar newdata = [];\r\n\t\t\t\tfor (var i = 0; i < data.length; ++i) {\r\n\t\t\t\t\tvar ch = data.charCodeAt(i);\r\n\t\t\t\t\tif (ch < 0x80) {\r\n\t\t\t\t\t\tnewdata.push(ch);\r\n\t\t\t\t\t} else if (ch < 0x800) {\r\n\t\t\t\t\t\tnewdata.push(0xc0 | (ch >> 6),\r\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\r\n\t\t\t\t\t} else if (ch < 0x10000) {\r\n\t\t\t\t\t\tnewdata.push(0xe0 | (ch >> 12),\r\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\r\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tnewdata.push(0xf0 | (ch >> 18),\r\n\t\t\t\t\t\t\t0x80 | ((ch >> 12) & 0x3f),\r\n\t\t\t\t\t\t\t0x80 | ((ch >> 6) & 0x3f),\r\n\t\t\t\t\t\t\t0x80 | (ch & 0x3f));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn newdata;\r\n\t\t\t} else {\r\n\t\t\t\treturn data;\r\n\t\t\t}\r\n\t}\r\n};\r\n\r\n// returns the code words (sans ECC bits) for given data and configurations.\r\n// requires data to be preprocessed by validatedata. no length check is\r\n// performed, and everything has to be checked before calling this function.\r\nvar encode = function (ver, mode, data, maxbuflen) {\r\n\tvar buf = [];\r\n\tvar bits = 0, remaining = 8;\r\n\tvar datalen = data.length;\r\n\r\n\t// this function is intentionally no-op when n=0.\r\n\tvar pack = function (x, n) {\r\n\t\tif (n >= remaining) {\r\n\t\t\tbuf.push(bits | (x >> (n -= remaining)));\r\n\t\t\twhile (n >= 8)\r\n\t\t\t\tbuf.push((x >> (n -= 8)) & 255);\r\n\t\t\tbits = 0;\r\n\t\t\tremaining = 8;\r\n\t\t}\r\n\t\tif (n > 0)\r\n\t\t\tbits |= (x & ((1 << n) - 1)) << (remaining -= n);\r\n\t};\r\n\r\n\tvar nlenbits = ndatalenbits(ver, mode);\r\n\tpack(mode, 4);\r\n\tpack(datalen, nlenbits);\r\n\r\n\tswitch (mode) {\r\n\t\tcase MODE_NUMERIC:\r\n\t\t\tfor (var i = 2; i < datalen; i += 3) {\r\n\t\t\t\tpack(parseInt(data.substring(i - 2, i + 1), 10), 10);\r\n\t\t\t}\r\n\t\t\tpack(parseInt(data.substring(i - 2), 10), [0, 4, 7][datalen % 3]);\r\n\t\t\tbreak;\r\n\r\n\t\tcase MODE_ALPHANUMERIC:\r\n\t\t\tfor (var i = 1; i < datalen; i += 2) {\r\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)] * 45 +\r\n\t\t\t\t\tALPHANUMERIC_MAP[data.charAt(i)], 11);\r\n\t\t\t}\r\n\t\t\tif (datalen % 2 == 1) {\r\n\t\t\t\tpack(ALPHANUMERIC_MAP[data.charAt(i - 1)], 6);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\tcase MODE_OCTET:\r\n\t\t\tfor (var i = 0; i < datalen; ++i) {\r\n\t\t\t\tpack(data[i], 8);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\t// final bits. it is possible that adding terminator causes the buffer\r\n\t// to overflow, but then the buffer truncated to the maximum size will\r\n\t// be valid as the truncated terminator mode bits and padding is\r\n\t// identical in appearance (cf. JIS X 0510:2004 sec 8.4.8).\r\n\tpack(MODE_TERMINATOR, 4);\r\n\tif (remaining < 8)\r\n\t\tbuf.push(bits);\r\n\r\n\t// the padding to fill up the remaining space. we should not add any\r\n\t// words when the overflow already occurred.\r\n\twhile (buf.length + 1 < maxbuflen)\r\n\t\tbuf.push(0xec, 0x11);\r\n\tif (buf.length < maxbuflen)\r\n\t\tbuf.push(0xec);\r\n\treturn buf;\r\n};\r\n\r\n// calculates ECC code words for given code words and generator polynomial.\r\n//\r\n// this is quite similar to CRC calculation as both Reed-Solomon and CRC use\r\n// the certain kind of cyclic codes, which is effectively the division of\r\n// zero-augumented polynomial by the generator polynomial. the only difference\r\n// is that Reed-Solomon uses GF(2^8), instead of CRC's GF(2), and Reed-Solomon\r\n// uses the different generator polynomial than CRC's.\r\nvar calculateecc = function (poly, genpoly) {\r\n\tvar modulus = poly.slice(0);\r\n\tvar polylen = poly.length, genpolylen = genpoly.length;\r\n\tfor (var i = 0; i < genpolylen; ++i)\r\n\t\tmodulus.push(0);\r\n\tfor (var i = 0; i < polylen; ) {\r\n\t\tvar quotient = GF256_INVMAP[modulus[i++]];\r\n\t\tif (quotient >= 0) {\r\n\t\t\tfor (var j = 0; j < genpolylen; ++j) {\r\n\t\t\t\tmodulus[i + j] ^= GF256_MAP[(quotient + genpoly[j]) % 255];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\treturn modulus.slice(polylen);\r\n};\r\n\r\n// auguments ECC code words to given code words. the resulting words are\r\n// ready to be encoded in the matrix.\r\n//\r\n// the much of actual augumenting procedure follows JIS X 0510:2004 sec 8.7.\r\n// the code is simplified using the fact that the size of each code & ECC\r\n// blocks is almost same; for example, when we have 4 blocks and 46 data words\r\n// the number of code words in those blocks are 11, 11, 12, 12 respectively.\r\nvar augumenteccs = function (poly, nblocks, genpoly) {\r\n\tvar subsizes = [];\r\n\tvar subsize = (poly.length / nblocks) | 0, subsize0 = 0;\r\n\tvar pivot = nblocks - poly.length % nblocks;\r\n\tfor (var i = 0; i < pivot; ++i) {\r\n\t\tsubsizes.push(subsize0);\r\n\t\tsubsize0 += subsize;\r\n\t}\r\n\tfor (var i = pivot; i < nblocks; ++i) {\r\n\t\tsubsizes.push(subsize0);\r\n\t\tsubsize0 += subsize + 1;\r\n\t}\r\n\tsubsizes.push(subsize0);\r\n\r\n\tvar eccs = [];\r\n\tfor (var i = 0; i < nblocks; ++i) {\r\n\t\teccs.push(calculateecc(poly.slice(subsizes[i], subsizes[i + 1]), genpoly));\r\n\t}\r\n\r\n\tvar result = [];\r\n\tvar nitemsperblock = (poly.length / nblocks) | 0;\r\n\tfor (var i = 0; i < nitemsperblock; ++i) {\r\n\t\tfor (var j = 0; j < nblocks; ++j) {\r\n\t\t\tresult.push(poly[subsizes[j] + i]);\r\n\t\t}\r\n\t}\r\n\tfor (var j = pivot; j < nblocks; ++j) {\r\n\t\tresult.push(poly[subsizes[j + 1] - 1]);\r\n\t}\r\n\tfor (var i = 0; i < genpoly.length; ++i) {\r\n\t\tfor (var j = 0; j < nblocks; ++j) {\r\n\t\t\tresult.push(eccs[j][i]);\r\n\t\t}\r\n\t}\r\n\treturn result;\r\n};\r\n\r\n// auguments BCH(p+q,q) code to the polynomial over GF(2), given the proper\r\n// genpoly. the both input and output are in binary numbers, and unlike\r\n// calculateecc genpoly should include the 1 bit for the highest degree.\r\n//\r\n// actual polynomials used for this procedure are as follows:\r\n// - p=10, q=5, genpoly=x^10+x^8+x^5+x^4+x^2+x+1 (JIS X 0510:2004 Appendix C)\r\n// - p=18, q=6, genpoly=x^12+x^11+x^10+x^9+x^8+x^5+x^2+1 (ibid. Appendix D)\r\nvar augumentbch = function (poly, p, genpoly, q) {\r\n\tvar modulus = poly << q;\r\n\tfor (var i = p - 1; i >= 0; --i) {\r\n\t\tif ((modulus >> (q + i)) & 1)\r\n\t\t\tmodulus ^= genpoly << i;\r\n\t}\r\n\treturn (poly << q) | modulus;\r\n};\r\n\r\n// creates the base matrix for given version. it returns two matrices, one of\r\n// them is the actual one and the another represents the \"reserved\" portion\r\n// (e.g. finder and timing patterns) of the matrix.\r\n//\r\n// some entries in the matrix may be undefined, rather than 0 or 1. this is\r\n// intentional (no initialization needed!), and putdata below will fill\r\n// the remaining ones.\r\nvar makebasematrix = function (ver) {\r\n\tvar v = VERSIONS[ver], n = getsizebyver(ver);\r\n\tvar matrix = [], reserved = [];\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tmatrix.push([]);\r\n\t\treserved.push([]);\r\n\t}\r\n\r\n\tvar blit = function (y, x, h, w, bits) {\r\n\t\tfor (var i = 0; i < h; ++i) {\r\n\t\t\tfor (var j = 0; j < w; ++j) {\r\n\t\t\t\tmatrix[y + i][x + j] = (bits[i] >> j) & 1;\r\n\t\t\t\treserved[y + i][x + j] = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// finder patterns and a part of timing patterns\r\n\t// will also mark the format information area (not yet written) as reserved.\r\n\tblit(0, 0, 9, 9, [0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x17f, 0x00, 0x40]);\r\n\tblit(n - 8, 0, 8, 9, [0x100, 0x7f, 0x41, 0x5d, 0x5d, 0x5d, 0x41, 0x7f]);\r\n\tblit(0, n - 8, 9, 8, [0xfe, 0x82, 0xba, 0xba, 0xba, 0x82, 0xfe, 0x00, 0x00]);\r\n\r\n\t// the rest of timing patterns\r\n\tfor (var i = 9; i < n - 8; ++i) {\r\n\t\tmatrix[6][i] = matrix[i][6] = ~i & 1;\r\n\t\treserved[6][i] = reserved[i][6] = 1;\r\n\t}\r\n\r\n\t// alignment patterns\r\n\tvar aligns = v[2], m = aligns.length;\r\n\tfor (var i = 0; i < m; ++i) {\r\n\t\tvar minj = (i === 0 || i === m - 1 ? 1 : 0), maxj = (i === 0 ? m - 1 : m);\r\n\t\tfor (var j = minj; j < maxj; ++j) {\r\n\t\t\tblit(aligns[i], aligns[j], 5, 5, [0x1f, 0x11, 0x15, 0x11, 0x1f]);\r\n\t\t}\r\n\t}\r\n\r\n\t// version information\r\n\tif (needsverinfo(ver)) {\r\n\t\tvar code = augumentbch(ver, 6, 0x1f25, 12);\r\n\t\tvar k = 0;\r\n\t\tfor (var i = 0; i < 6; ++i) {\r\n\t\t\tfor (var j = 0; j < 3; ++j) {\r\n\t\t\t\tmatrix[i][(n - 11) + j] = matrix[(n - 11) + j][i] = (code >> k++) & 1;\r\n\t\t\t\treserved[i][(n - 11) + j] = reserved[(n - 11) + j][i] = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {matrix: matrix, reserved: reserved};\r\n};\r\n\r\n// fills the data portion (i.e. unmarked in reserved) of the matrix with given\r\n// code words. the size of code words should be no more than available bits,\r\n// and remaining bits are padded to 0 (cf. JIS X 0510:2004 sec 8.7.3).\r\nvar putdata = function (matrix, reserved, buf) {\r\n\tvar n = matrix.length;\r\n\tvar k = 0, dir = -1;\r\n\tfor (var i = n - 1; i >= 0; i -= 2) {\r\n\t\tif (i == 6)\r\n\t\t\t--i; // skip the entire timing pattern column\r\n\t\tvar jj = (dir < 0 ? n - 1 : 0);\r\n\t\tfor (var j = 0; j < n; ++j) {\r\n\t\t\tfor (var ii = i; ii > i - 2; --ii) {\r\n\t\t\t\tif (!reserved[jj][ii]) {\r\n\t\t\t\t\t// may overflow, but (undefined >> x)\r\n\t\t\t\t\t// is 0 so it will auto-pad to zero.\r\n\t\t\t\t\tmatrix[jj][ii] = (buf[k >> 3] >> (~k & 7)) & 1;\r\n\t\t\t\t\t++k;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tjj += dir;\r\n\t\t}\r\n\t\tdir = -dir;\r\n\t}\r\n\treturn matrix;\r\n};\r\n\r\n// XOR-masks the data portion of the matrix. repeating the call with the same\r\n// arguments will revert the prior call (convenient in the matrix evaluation).\r\nvar maskdata = function (matrix, reserved, mask) {\r\n\tvar maskf = MASKFUNCS[mask];\r\n\tvar n = matrix.length;\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tfor (var j = 0; j < n; ++j) {\r\n\t\t\tif (!reserved[i][j])\r\n\t\t\t\tmatrix[i][j] ^= maskf(i, j);\r\n\t\t}\r\n\t}\r\n\treturn matrix;\r\n};\r\n\r\n// puts the format information.\r\nvar putformatinfo = function (matrix, reserved, ecclevel, mask) {\r\n\tvar n = matrix.length;\r\n\tvar code = augumentbch((ecclevel << 3) | mask, 5, 0x537, 10) ^ 0x5412;\r\n\tfor (var i = 0; i < 15; ++i) {\r\n\t\tvar r = [0, 1, 2, 3, 4, 5, 7, 8, n - 7, n - 6, n - 5, n - 4, n - 3, n - 2, n - 1][i];\r\n\t\tvar c = [n - 1, n - 2, n - 3, n - 4, n - 5, n - 6, n - 7, n - 8, 7, 5, 4, 3, 2, 1, 0][i];\r\n\t\tmatrix[r][8] = matrix[8][c] = (code >> i) & 1;\r\n\t\t// we don't have to mark those bits reserved; always done\r\n\t\t// in makebasematrix above.\r\n\t}\r\n\treturn matrix;\r\n};\r\n\r\n// evaluates the resulting matrix and returns the score (lower is better).\r\n// (cf. JIS X 0510:2004 sec 8.8.2)\r\n//\r\n// the evaluation procedure tries to avoid the problematic patterns naturally\r\n// occuring from the original matrix. for example, it penaltizes the patterns\r\n// which just look like the finder pattern which will confuse the decoder.\r\n// we choose the mask which results in the lowest score among 8 possible ones.\r\n//\r\n// note: zxing seems to use the same procedure and in many cases its choice\r\n// agrees to ours, but sometimes it does not. practically it doesn't matter.\r\nvar evaluatematrix = function (matrix) {\r\n\t// N1+(k-5) points for each consecutive row of k same-colored modules,\r\n\t// where k >= 5. no overlapping row counts.\r\n\tvar PENALTY_CONSECUTIVE = 3;\r\n\t// N2 points for each 2x2 block of same-colored modules.\r\n\t// overlapping block does count.\r\n\tvar PENALTY_TWOBYTWO = 3;\r\n\t// N3 points for each pattern with >4W:1B:1W:3B:1W:1B or\r\n\t// 1B:1W:3B:1W:1B:>4W, or their multiples (e.g. highly unlikely,\r\n\t// but 13W:3B:3W:9B:3W:3B counts).\r\n\tvar PENALTY_FINDERLIKE = 40;\r\n\t// N4*k points for every (5*k)% deviation from 50% black density.\r\n\t// i.e. k=1 for 55~60% and 40~45%, k=2 for 60~65% and 35~40%, etc.\r\n\tvar PENALTY_DENSITY = 10;\r\n\r\n\tvar evaluategroup = function (groups) { // assumes [W,B,W,B,W,...,B,W]\r\n\t\tvar score = 0;\r\n\t\tfor (var i = 0; i < groups.length; ++i) {\r\n\t\t\tif (groups[i] >= 5)\r\n\t\t\t\tscore += PENALTY_CONSECUTIVE + (groups[i] - 5);\r\n\t\t}\r\n\t\tfor (var i = 5; i < groups.length; i += 2) {\r\n\t\t\tvar p = groups[i];\r\n\t\t\tif (groups[i - 1] == p && groups[i - 2] == 3 * p && groups[i - 3] == p &&\r\n\t\t\t\tgroups[i - 4] == p && (groups[i - 5] >= 4 * p || groups[i + 1] >= 4 * p)) {\r\n\t\t\t\t// this part differs from zxing...\r\n\t\t\t\tscore += PENALTY_FINDERLIKE;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn score;\r\n\t};\r\n\r\n\tvar n = matrix.length;\r\n\tvar score = 0, nblacks = 0;\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tvar row = matrix[i];\r\n\t\tvar groups;\r\n\r\n\t\t// evaluate the current row\r\n\t\tgroups = [0]; // the first empty group of white\r\n\t\tfor (var j = 0; j < n; ) {\r\n\t\t\tvar k;\r\n\t\t\tfor (k = 0; j < n && row[j]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t\tfor (k = 0; j < n && !row[j]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t}\r\n\t\tscore += evaluategroup(groups);\r\n\r\n\t\t// evaluate the current column\r\n\t\tgroups = [0];\r\n\t\tfor (var j = 0; j < n; ) {\r\n\t\t\tvar k;\r\n\t\t\tfor (k = 0; j < n && matrix[j][i]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t\tfor (k = 0; j < n && !matrix[j][i]; ++k)\r\n\t\t\t\t++j;\r\n\t\t\tgroups.push(k);\r\n\t\t}\r\n\t\tscore += evaluategroup(groups);\r\n\r\n\t\t// check the 2x2 box and calculate the density\r\n\t\tvar nextrow = matrix[i + 1] || [];\r\n\t\tnblacks += row[0];\r\n\t\tfor (var j = 1; j < n; ++j) {\r\n\t\t\tvar p = row[j];\r\n\t\t\tnblacks += p;\r\n\t\t\t// at least comparison with next row should be strict...\r\n\t\t\tif (row[j - 1] == p && nextrow[j] === p && nextrow[j - 1] === p) {\r\n\t\t\t\tscore += PENALTY_TWOBYTWO;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscore += PENALTY_DENSITY * ((Math.abs(nblacks / n / n - 0.5) / 0.05) | 0);\r\n\treturn score;\r\n};\r\n\r\n// returns the fully encoded QR code matrix which contains given data.\r\n// it also chooses the best mask automatically when mask is -1.\r\nvar generate = function (data, ver, mode, ecclevel, mask) {\r\n\tvar v = VERSIONS[ver];\r\n\tvar buf = encode(ver, mode, data, ndatabits(ver, ecclevel) >> 3);\r\n\tbuf = augumenteccs(buf, v[1][ecclevel], GF256_GENPOLY[v[0][ecclevel]]);\r\n\r\n\tvar result = makebasematrix(ver);\r\n\tvar matrix = result.matrix, reserved = result.reserved;\r\n\tputdata(matrix, reserved, buf);\r\n\r\n\tif (mask < 0) {\r\n\t\t// find the best mask\r\n\t\tmaskdata(matrix, reserved, 0);\r\n\t\tputformatinfo(matrix, reserved, ecclevel, 0);\r\n\t\tvar bestmask = 0, bestscore = evaluatematrix(matrix);\r\n\t\tmaskdata(matrix, reserved, 0);\r\n\t\tfor (mask = 1; mask < 8; ++mask) {\r\n\t\t\tmaskdata(matrix, reserved, mask);\r\n\t\t\tputformatinfo(matrix, reserved, ecclevel, mask);\r\n\t\t\tvar score = evaluatematrix(matrix);\r\n\t\t\tif (bestscore > score) {\r\n\t\t\t\tbestscore = score;\r\n\t\t\t\tbestmask = mask;\r\n\t\t\t}\r\n\t\t\tmaskdata(matrix, reserved, mask);\r\n\t\t}\r\n\t\tmask = bestmask;\r\n\t}\r\n\r\n\tmaskdata(matrix, reserved, mask);\r\n\tputformatinfo(matrix, reserved, ecclevel, mask);\r\n\treturn matrix;\r\n};\r\n\r\n// the public interface is trivial; the options available are as follows:\r\n//\r\n// - version: an integer in [1,40]. when omitted (or -1) the smallest possible\r\n// version is chosen.\r\n// - mode: one of 'numeric', 'alphanumeric', 'octet'. when omitted the smallest\r\n// possible mode is chosen.\r\n// - eccLevel: one of 'L', 'M', 'Q', 'H'. defaults to 'L'.\r\n// - mask: an integer in [0,7]. when omitted (or -1) the best mask is chosen.\r\n//\r\n\r\nfunction generateFrame(data, options) {\r\n\tvar MODES = {'numeric': MODE_NUMERIC, 'alphanumeric': MODE_ALPHANUMERIC,\r\n\t\t'octet': MODE_OCTET};\r\n\tvar ECCLEVELS = {'L': ECCLEVEL_L, 'M': ECCLEVEL_M, 'Q': ECCLEVEL_Q,\r\n\t\t'H': ECCLEVEL_H};\r\n\r\n\toptions = options || {};\r\n\tvar ver = options.version || -1;\r\n\tvar ecclevel = ECCLEVELS[(options.eccLevel || 'L').toUpperCase()];\r\n\tvar mode = options.mode ? MODES[options.mode.toLowerCase()] : -1;\r\n\tvar mask = 'mask' in options ? options.mask : -1;\r\n\r\n\tif (mode < 0) {\r\n\t\tif (typeof data === 'string') {\r\n\t\t\tif (data.match(NUMERIC_REGEXP)) {\r\n\t\t\t\tmode = MODE_NUMERIC;\r\n\t\t\t} else if (data.match(ALPHANUMERIC_OUT_REGEXP)) {\r\n\t\t\t\t// while encode supports case-insensitive encoding, we restrict the data to be uppercased when auto-selecting the mode.\r\n\t\t\t\tmode = MODE_ALPHANUMERIC;\r\n\t\t\t} else {\r\n\t\t\t\tmode = MODE_OCTET;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tmode = MODE_OCTET;\r\n\t\t}\r\n\t} else if (!(mode == MODE_NUMERIC || mode == MODE_ALPHANUMERIC ||\r\n\t\tmode == MODE_OCTET)) {\r\n\t\tthrow 'invalid or unsupported mode';\r\n\t}\r\n\r\n\tdata = validatedata(mode, data);\r\n\tif (data === null)\r\n\t\tthrow 'invalid data format';\r\n\r\n\tif (ecclevel < 0 || ecclevel > 3)\r\n\t\tthrow 'invalid ECC level';\r\n\r\n\tif (ver < 0) {\r\n\t\tfor (ver = 1; ver <= 40; ++ver) {\r\n\t\t\tif (data.length <= getmaxdatalen(ver, mode, ecclevel))\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tif (ver > 40)\r\n\t\t\tthrow 'too large data for the Qr format';\r\n\t} else if (ver < 1 || ver > 40) {\r\n\t\tthrow 'invalid Qr version! should be between 1 and 40';\r\n\t}\r\n\r\n\tif (mask != -1 && (mask < 0 || mask > 8))\r\n\t\tthrow 'invalid mask';\r\n\t//console.log('version:', ver, 'mode:', mode, 'ECC:', ecclevel, 'mask:', mask )\r\n\treturn generate(data, ver, mode, ecclevel, mask);\r\n}\r\n\r\n\r\n// options\r\n// - modulesize: a number. this is a size of each modules in pixels, and\r\n// defaults to 5px.\r\n// - margin: a number. this is a size of margin in *modules*, and defaults to\r\n// 4 (white modules). the specficiation mandates the margin no less than 4\r\n// modules, so it is better not to alter this value unless you know what\r\n// you're doing.\r\nfunction buildCanvas(data, options) {\r\n\r\n\tvar canvas = [];\r\n\tvar background = options.background || '#fff';\r\n\tvar foreground = options.foreground || '#000';\r\n\tvar padding = options.padding || 0;\r\n\t//var margin = options.margin || 4;\r\n\tvar matrix = generateFrame(data, options);\r\n\tvar n = matrix.length;\r\n\tvar modSize = Math.floor(options.fit ? options.fit / n : 5);\r\n\tvar size = (n * modSize) + (modSize * padding * 2);\r\n\tvar paddingXY = modSize * padding;\r\n\r\n\tcanvas.push({\r\n\t\ttype: 'rect',\r\n\t\tx: 0, y: 0, w: size, h: size, lineWidth: 0, color: background\r\n\t});\r\n\r\n\tfor (var i = 0; i < n; ++i) {\r\n\t\tfor (var j = 0; j < n; ++j) {\r\n\t\t\tif (matrix[i][j]) {\r\n\t\t\t\tcanvas.push({\r\n\t\t\t\t\ttype: 'rect',\r\n\t\t\t\t\tx: modSize * j + paddingXY,\r\n\t\t\t\t\ty: modSize * i + paddingXY,\r\n\t\t\t\t\tw: modSize,\r\n\t\t\t\t\th: modSize,\r\n\t\t\t\t\tlineWidth: 0,\r\n\t\t\t\t\tcolor: foreground\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\tcanvas: canvas,\r\n\t\tsize: size\r\n\t};\r\n\r\n}\r\n\r\nfunction measure(node) {\r\n\tvar cd = buildCanvas(node.qr, node);\r\n\tnode._canvas = cd.canvas;\r\n\tnode._width = node._height = node._minWidth = node._maxWidth = node._minHeight = node._maxHeight = cd.size;\r\n\treturn node;\r\n}\r\n\r\nmodule.exports = {\r\n\tmeasure: measure\r\n};","'use strict';\r\n\r\nmodule.exports = {\r\n\t'4A0': [4767.87, 6740.79],\r\n\t'2A0': [3370.39, 4767.87],\r\n\tA0: [2383.94, 3370.39],\r\n\tA1: [1683.78, 2383.94],\r\n\tA2: [1190.55, 1683.78],\r\n\tA3: [841.89, 1190.55],\r\n\tA4: [595.28, 841.89],\r\n\tA5: [419.53, 595.28],\r\n\tA6: [297.64, 419.53],\r\n\tA7: [209.76, 297.64],\r\n\tA8: [147.40, 209.76],\r\n\tA9: [104.88, 147.40],\r\n\tA10: [73.70, 104.88],\r\n\tB0: [2834.65, 4008.19],\r\n\tB1: [2004.09, 2834.65],\r\n\tB2: [1417.32, 2004.09],\r\n\tB3: [1000.63, 1417.32],\r\n\tB4: [708.66, 1000.63],\r\n\tB5: [498.90, 708.66],\r\n\tB6: [354.33, 498.90],\r\n\tB7: [249.45, 354.33],\r\n\tB8: [175.75, 249.45],\r\n\tB9: [124.72, 175.75],\r\n\tB10: [87.87, 124.72],\r\n\tC0: [2599.37, 3676.54],\r\n\tC1: [1836.85, 2599.37],\r\n\tC2: [1298.27, 1836.85],\r\n\tC3: [918.43, 1298.27],\r\n\tC4: [649.13, 918.43],\r\n\tC5: [459.21, 649.13],\r\n\tC6: [323.15, 459.21],\r\n\tC7: [229.61, 323.15],\r\n\tC8: [161.57, 229.61],\r\n\tC9: [113.39, 161.57],\r\n\tC10: [79.37, 113.39],\r\n\tRA0: [2437.80, 3458.27],\r\n\tRA1: [1729.13, 2437.80],\r\n\tRA2: [1218.90, 1729.13],\r\n\tRA3: [864.57, 1218.90],\r\n\tRA4: [609.45, 864.57],\r\n\tSRA0: [2551.18, 3628.35],\r\n\tSRA1: [1814.17, 2551.18],\r\n\tSRA2: [1275.59, 1814.17],\r\n\tSRA3: [907.09, 1275.59],\r\n\tSRA4: [637.80, 907.09],\r\n\tEXECUTIVE: [521.86, 756.00],\r\n\tFOLIO: [612.00, 936.00],\r\n\tLEGAL: [612.00, 1008.00],\r\n\tLETTER: [612.00, 792.00],\r\n\tTABLOID: [792.00, 1224.00]\r\n};\r\n","'use strict';\r\n\r\nvar isString = require('./helpers').isString;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar isNull = require('./helpers').isNull;\r\n\r\n/**\r\n * Creates an instance of StyleContextStack used for style inheritance and style overrides\r\n *\r\n * @constructor\r\n * @this {StyleContextStack}\r\n * @param {Object} named styles dictionary\r\n * @param {Object} optional default style definition\r\n */\r\nfunction StyleContextStack(styleDictionary, defaultStyle) {\r\n\tthis.defaultStyle = defaultStyle || {};\r\n\tthis.styleDictionary = styleDictionary;\r\n\tthis.styleOverrides = [];\r\n}\r\n\r\n/**\r\n * Creates cloned version of current stack\r\n * @return {StyleContextStack} current stack snapshot\r\n */\r\nStyleContextStack.prototype.clone = function () {\r\n\tvar stack = new StyleContextStack(this.styleDictionary, this.defaultStyle);\r\n\r\n\tthis.styleOverrides.forEach(function (item) {\r\n\t\tstack.styleOverrides.push(item);\r\n\t});\r\n\r\n\treturn stack;\r\n};\r\n\r\n/**\r\n * Pushes style-name or style-overrides-object onto the stack for future evaluation\r\n *\r\n * @param {String|Object} styleNameOrOverride style-name (referring to styleDictionary) or\r\n * a new dictionary defining overriding properties\r\n */\r\nStyleContextStack.prototype.push = function (styleNameOrOverride) {\r\n\tthis.styleOverrides.push(styleNameOrOverride);\r\n};\r\n\r\n/**\r\n * Removes last style-name or style-overrides-object from the stack\r\n *\r\n * @param {Number} howMany - optional number of elements to be popped (if not specified,\r\n * one element will be removed from the stack)\r\n */\r\nStyleContextStack.prototype.pop = function (howMany) {\r\n\thowMany = howMany || 1;\r\n\r\n\twhile (howMany-- > 0) {\r\n\t\tthis.styleOverrides.pop();\r\n\t}\r\n};\r\n\r\n/**\r\n * Creates a set of named styles or/and a style-overrides-object based on the item,\r\n * pushes those elements onto the stack for future evaluation and returns the number\r\n * of elements pushed, so they can be easily poped then.\r\n *\r\n * @param {Object} item - an object with optional style property and/or style overrides\r\n * @return the number of items pushed onto the stack\r\n */\r\nStyleContextStack.prototype.autopush = function (item) {\r\n\tif (isString(item)) {\r\n\t\treturn 0;\r\n\t}\r\n\r\n\tvar styleNames = [];\r\n\r\n\tif (item.style) {\r\n\t\tif (isArray(item.style)) {\r\n\t\t\tstyleNames = item.style;\r\n\t\t} else {\r\n\t\t\tstyleNames = [item.style];\r\n\t\t}\r\n\t}\r\n\r\n\tfor (var i = 0, l = styleNames.length; i < l; i++) {\r\n\t\tthis.push(styleNames[i]);\r\n\t}\r\n\r\n\tvar styleProperties = [\r\n\t\t'font',\r\n\t\t'fontSize',\r\n\t\t'fontFeatures',\r\n\t\t'bold',\r\n\t\t'italics',\r\n\t\t'alignment',\r\n\t\t'color',\r\n\t\t'columnGap',\r\n\t\t'fillColor',\r\n\t\t'fillOpacity',\r\n\t\t'decoration',\r\n\t\t'decorationStyle',\r\n\t\t'decorationColor',\r\n\t\t'background',\r\n\t\t'lineHeight',\r\n\t\t'characterSpacing',\r\n\t\t'noWrap',\r\n\t\t'markerColor',\r\n\t\t'leadingIndent',\r\n\t\t'sup',\r\n\t\t'sub'\r\n\t\t//'tableCellPadding'\r\n\t\t// 'cellBorder',\r\n\t\t// 'headerCellBorder',\r\n\t\t// 'oddRowCellBorder',\r\n\t\t// 'evenRowCellBorder',\r\n\t\t// 'tableBorder'\r\n\t];\r\n\tvar styleOverrideObject = {};\r\n\tvar pushStyleOverrideObject = false;\r\n\r\n\tstyleProperties.forEach(function (key) {\r\n\t\tif (!isUndefined(item[key]) && !isNull(item[key])) {\r\n\t\t\tstyleOverrideObject[key] = item[key];\r\n\t\t\tpushStyleOverrideObject = true;\r\n\t\t}\r\n\t});\r\n\r\n\tif (pushStyleOverrideObject) {\r\n\t\tthis.push(styleOverrideObject);\r\n\t}\r\n\r\n\treturn styleNames.length + (pushStyleOverrideObject ? 1 : 0);\r\n};\r\n\r\n/**\r\n * Automatically pushes elements onto the stack, using autopush based on item,\r\n * executes callback and then pops elements back. Returns value returned by callback\r\n *\r\n * @param {Object} item - an object with optional style property and/or style overrides\r\n * @param {Function} function to be called between autopush and pop\r\n * @return {Object} value returned by callback\r\n */\r\nStyleContextStack.prototype.auto = function (item, callback) {\r\n\tvar pushedItems = this.autopush(item);\r\n\tvar result = callback();\r\n\r\n\tif (pushedItems > 0) {\r\n\t\tthis.pop(pushedItems);\r\n\t}\r\n\r\n\treturn result;\r\n};\r\n\r\n/**\r\n * Evaluates stack and returns value of a named property\r\n *\r\n * @param {String} property - property name\r\n * @return property value or null if not found\r\n */\r\nStyleContextStack.prototype.getProperty = function (property) {\r\n\tif (this.styleOverrides) {\r\n\t\tfor (var i = this.styleOverrides.length - 1; i >= 0; i--) {\r\n\t\t\tvar item = this.styleOverrides[i];\r\n\r\n\t\t\tif (isString(item)) {\r\n\t\t\t\t// named-style-override\r\n\t\t\t\tvar style = this.styleDictionary[item];\r\n\t\t\t\tif (style && !isUndefined(style[property]) && !isNull(style[property])) {\r\n\t\t\t\t\treturn style[property];\r\n\t\t\t\t}\r\n\t\t\t} else if (!isUndefined(item[property]) && !isNull(item[property])) {\r\n\t\t\t\t// style-overrides-object\r\n\t\t\t\treturn item[property];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn this.defaultStyle && this.defaultStyle[property];\r\n};\r\n\r\nmodule.exports = StyleContextStack;\r\n","'use strict';\r\n\r\nvar xmldoc = require('xmldoc');\r\n\r\n/** Strip unit postfix, parse number, but return undefined instead of NaN for bad input */\r\nfunction stripUnits(textVal) {\r\n\tvar n = parseFloat(textVal);\r\n\tif (typeof n !== 'number' || isNaN(n)) {\r\n\t\treturn undefined;\r\n\t}\r\n\treturn n;\r\n}\r\n\r\n/** Make sure it's valid XML and the root tage is , returns xmldoc DOM */\r\nfunction parseSVG(svgString) {\r\n\tvar doc;\r\n\r\n\ttry {\r\n\t\tdoc = new xmldoc.XmlDocument(svgString);\r\n\t} catch (err) {\r\n\t\tthrow new Error('SVGMeasure: ' + err);\r\n\t}\r\n\r\n\tif (doc.name !== \"svg\") {\r\n\t\tthrow new Error('SVGMeasure: expected document');\r\n\t}\r\n\r\n\treturn doc;\r\n}\r\n\r\nfunction SVGMeasure() {\r\n}\r\n\r\nSVGMeasure.prototype.measureSVG = function (svgString) {\r\n\r\n\tvar doc = parseSVG(svgString);\r\n\r\n\tvar docWidth = stripUnits(doc.attr.width);\r\n\tvar docHeight = stripUnits(doc.attr.height);\r\n\r\n\tif ((docWidth == undefined || docHeight == undefined) && typeof doc.attr.viewBox == 'string') {\r\n\t\tvar viewBoxParts = doc.attr.viewBox.split(/[,\\s]+/);\r\n\t\tif (viewBoxParts.length !== 4) {\r\n\t\t\tthrow new Error(\"Unexpected svg viewbox format, should have 4 entries but found: '\" + doc.attr.viewBox + \"'\");\r\n\t\t}\r\n\t\tif (docWidth == undefined) {\r\n\t\t\tdocWidth = stripUnits(viewBoxParts[2]);\r\n\t\t}\r\n\t\tif (docHeight == undefined) {\r\n\t\t\tdocHeight = stripUnits(viewBoxParts[3]);\r\n\t\t}\r\n\t}\r\n\r\n\treturn {\r\n\t\twidth: docWidth,\r\n\t\theight: docHeight\r\n\t};\r\n};\r\n\r\nSVGMeasure.prototype.writeDimensions = function (svgString, dimensions) {\r\n\r\n\tvar doc = parseSVG(svgString);\r\n\r\n\tdoc.attr.width = \"\" + dimensions.width;\r\n\tdoc.attr.height = \"\" + dimensions.height;\r\n\r\n\treturn doc.toString();\r\n};\r\n\r\nmodule.exports = SVGMeasure;\r\n","'use strict';\r\n\r\nvar ColumnCalculator = require('./columnCalculator');\r\nvar isFunction = require('./helpers').isFunction;\r\nvar isNumber = require('./helpers').isNumber;\r\n\r\nfunction TableProcessor(tableNode) {\r\n\tthis.tableNode = tableNode;\r\n}\r\n\r\nTableProcessor.prototype.beginTable = function (writer) {\r\n\tvar tableNode;\r\n\tvar availableWidth;\r\n\tvar self = this;\r\n\r\n\ttableNode = this.tableNode;\r\n\tthis.offsets = tableNode._offsets;\r\n\tthis.layout = tableNode._layout;\r\n\r\n\tavailableWidth = writer.context().availableWidth - this.offsets.total;\r\n\tColumnCalculator.buildColumnWidths(tableNode.table.widths, availableWidth);\r\n\r\n\tthis.tableWidth = tableNode._offsets.total + getTableInnerContentWidth();\r\n\tthis.rowSpanData = prepareRowSpanData();\r\n\tthis.cleanUpRepeatables = false;\r\n\r\n\tthis.headerRows = tableNode.table.headerRows || 0;\r\n\tif (this.headerRows > tableNode.table.body.length) {\r\n\t\tthrow new Error(`Too few rows in the table. Property headerRows requires at least ${this.headerRows}, contains only ${tableNode.table.body.length}`);\r\n\t}\r\n\r\n\tthis.rowsWithoutPageBreak = this.headerRows + (tableNode.table.keepWithHeaderRows || 0);\r\n\tthis.dontBreakRows = tableNode.table.dontBreakRows || false;\r\n\r\n\tif (this.rowsWithoutPageBreak) {\r\n\t\twriter.beginUnbreakableBlock();\r\n\t}\r\n\r\n\t// update the border properties of all cells before drawing any lines\r\n\tprepareCellBorders(this.tableNode.table.body);\r\n\r\n\tthis.drawHorizontalLine(0, writer);\r\n\r\n\tfunction getTableInnerContentWidth() {\r\n\t\tvar width = 0;\r\n\r\n\t\ttableNode.table.widths.forEach(function (w) {\r\n\t\t\twidth += w._calcWidth;\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tfunction prepareRowSpanData() {\r\n\t\tvar rsd = [];\r\n\t\tvar x = 0;\r\n\t\tvar lastWidth = 0;\r\n\r\n\t\trsd.push({ left: 0, rowSpan: 0 });\r\n\r\n\t\tfor (var i = 0, l = self.tableNode.table.body[0].length; i < l; i++) {\r\n\t\t\tvar paddings = self.layout.paddingLeft(i, self.tableNode) + self.layout.paddingRight(i, self.tableNode);\r\n\t\t\tvar lBorder = self.layout.vLineWidth(i, self.tableNode);\r\n\t\t\tlastWidth = paddings + lBorder + self.tableNode.table.widths[i]._calcWidth;\r\n\t\t\trsd[rsd.length - 1].width = lastWidth;\r\n\t\t\tx += lastWidth;\r\n\t\t\trsd.push({ left: x, rowSpan: 0, width: 0 });\r\n\t\t}\r\n\r\n\t\treturn rsd;\r\n\t}\r\n\r\n\t// Iterate through all cells. If the current cell is the start of a\r\n\t// rowSpan/colSpan, update the border property of the cells on its\r\n\t// bottom/right accordingly. This is needed since each iteration of the\r\n\t// line-drawing loops draws lines for a single cell, not for an entire\r\n\t// rowSpan/colSpan.\r\n\tfunction prepareCellBorders(body) {\r\n\t\tfor (var rowIndex = 0; rowIndex < body.length; rowIndex++) {\r\n\t\t\tvar row = body[rowIndex];\r\n\r\n\t\t\tfor (var colIndex = 0; colIndex < row.length; colIndex++) {\r\n\t\t\t\tvar cell = row[colIndex];\r\n\r\n\t\t\t\tif (cell.border) {\r\n\t\t\t\t\tvar rowSpan = cell.rowSpan || 1;\r\n\t\t\t\t\tvar colSpan = cell.colSpan || 1;\r\n\r\n\t\t\t\t\tfor (var rowOffset = 0; rowOffset < rowSpan; rowOffset++) {\r\n\t\t\t\t\t\t// set left border\r\n\t\t\t\t\t\tif (cell.border[0] !== undefined && rowOffset > 0) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex, 0, cell.border[0]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// set right border\r\n\t\t\t\t\t\tif (cell.border[2] !== undefined) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowOffset, colIndex + colSpan - 1, 2, cell.border[2]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfor (var colOffset = 0; colOffset < colSpan; colOffset++) {\r\n\t\t\t\t\t\t// set top border\r\n\t\t\t\t\t\tif (cell.border[1] !== undefined && colOffset > 0) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex, colIndex + colOffset, 1, cell.border[1]);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t// set bottom border\r\n\t\t\t\t\t\tif (cell.border[3] !== undefined) {\r\n\t\t\t\t\t\t\tsetBorder(rowIndex + rowSpan - 1, colIndex + colOffset, 3, cell.border[3]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// helper function to set the border for a given cell\r\n\t\tfunction setBorder(rowIndex, colIndex, borderIndex, borderValue) {\r\n\t\t\tvar cell = body[rowIndex][colIndex];\r\n\t\t\tcell.border = cell.border || {};\r\n\t\t\tcell.border[borderIndex] = borderValue;\r\n\t\t}\r\n\t}\r\n};\r\n\r\nTableProcessor.prototype.onRowBreak = function (rowIndex, writer) {\r\n\tvar self = this;\r\n\treturn function () {\r\n\t\tvar offset = self.rowPaddingTop + (!self.headerRows ? self.topLineWidth : 0);\r\n\t\twriter.context().availableHeight -= self.reservedAtBottom;\r\n\t\twriter.context().moveDown(offset);\r\n\t};\r\n};\r\n\r\nTableProcessor.prototype.beginRow = function (rowIndex, writer) {\r\n\tthis.topLineWidth = this.layout.hLineWidth(rowIndex, this.tableNode);\r\n\tthis.rowPaddingTop = this.layout.paddingTop(rowIndex, this.tableNode);\r\n\tthis.bottomLineWidth = this.layout.hLineWidth(rowIndex + 1, this.tableNode);\r\n\tthis.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);\r\n\r\n\tthis.rowCallback = this.onRowBreak(rowIndex, writer);\r\n\twriter.tracker.startTracking('pageChanged', this.rowCallback);\r\n\tif (this.dontBreakRows) {\r\n\t\twriter.beginUnbreakableBlock();\r\n\t}\r\n\tthis.rowTopY = writer.context().y;\r\n\tthis.reservedAtBottom = this.bottomLineWidth + this.rowPaddingBottom;\r\n\r\n\twriter.context().availableHeight -= this.reservedAtBottom;\r\n\r\n\twriter.context().moveDown(this.rowPaddingTop);\r\n};\r\n\r\nTableProcessor.prototype.drawHorizontalLine = function (lineIndex, writer, overrideY) {\r\n\tvar lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);\r\n\tif (lineWidth) {\r\n\t\tvar style = this.layout.hLineStyle(lineIndex, this.tableNode);\r\n\t\tvar dash;\r\n\t\tif (style && style.dash) {\r\n\t\t\tdash = style.dash;\r\n\t\t}\r\n\r\n\t\tvar offset = lineWidth / 2;\r\n\t\tvar currentLine = null;\r\n\t\tvar body = this.tableNode.table.body;\r\n\t\tvar cellAbove;\r\n\t\tvar currentCell;\r\n\t\tvar rowCellAbove;\r\n\r\n\t\tfor (var i = 0, l = this.rowSpanData.length; i < l; i++) {\r\n\t\t\tvar data = this.rowSpanData[i];\r\n\t\t\tvar shouldDrawLine = !data.rowSpan;\r\n\t\t\tvar borderColor = null;\r\n\r\n\t\t\t// draw only if the current cell requires a top border or the cell in the\r\n\t\t\t// row above requires a bottom border\r\n\t\t\tif (shouldDrawLine && i < l - 1) {\r\n\t\t\t\tvar topBorder = false, bottomBorder = false, rowBottomBorder = false;\r\n\r\n\t\t\t\t// the cell in the row above\r\n\t\t\t\tif (lineIndex > 0) {\r\n\t\t\t\t\tcellAbove = body[lineIndex - 1][i];\r\n\t\t\t\t\tbottomBorder = cellAbove.border ? cellAbove.border[3] : this.layout.defaultBorder;\r\n\t\t\t\t\tif (bottomBorder && cellAbove.borderColor) {\r\n\t\t\t\t\t\tborderColor = cellAbove.borderColor[3];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// the current cell\r\n\t\t\t\tif (lineIndex < body.length) {\r\n\t\t\t\t\tcurrentCell = body[lineIndex][i];\r\n\t\t\t\t\ttopBorder = currentCell.border ? currentCell.border[1] : this.layout.defaultBorder;\r\n\t\t\t\t\tif (topBorder && borderColor == null && currentCell.borderColor) {\r\n\t\t\t\t\t\tborderColor = currentCell.borderColor[1];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tshouldDrawLine = topBorder || bottomBorder;\r\n\t\t\t}\r\n\r\n\t\t\tif (cellAbove && cellAbove._rowSpanCurrentOffset) {\r\n\t\t\t\trowCellAbove = body[lineIndex - 1 - cellAbove._rowSpanCurrentOffset][i];\r\n\t\t\t\trowBottomBorder = rowCellAbove && rowCellAbove.border ? rowCellAbove.border[3] : this.layout.defaultBorder;\r\n\t\t\t\tif (rowBottomBorder && rowCellAbove && rowCellAbove.borderColor) {\r\n\t\t\t\t\tborderColor = rowCellAbove.borderColor[3];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (borderColor == null) {\r\n\t\t\t\tborderColor = isFunction(this.layout.hLineColor) ? this.layout.hLineColor(lineIndex, this.tableNode, i) : this.layout.hLineColor;\r\n\t\t\t}\r\n\r\n\t\t\tif (!currentLine && shouldDrawLine) {\r\n\t\t\t\tcurrentLine = { left: data.left, width: 0 };\r\n\t\t\t}\r\n\r\n\t\t\tif (shouldDrawLine) {\r\n\t\t\t\tvar colSpanIndex = 0;\r\n\t\t\t\tif (rowCellAbove && rowCellAbove.colSpan && rowBottomBorder) {\r\n\t\t\t\t\twhile (rowCellAbove.colSpan > colSpanIndex) {\r\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti += colSpanIndex - 1;\r\n\t\t\t\t} else if (cellAbove && cellAbove.colSpan && bottomBorder) {\r\n\t\t\t\t\twhile (cellAbove.colSpan > colSpanIndex) {\r\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti += colSpanIndex - 1;\r\n\t\t\t\t} else if (currentCell && currentCell.colSpan && topBorder) {\r\n\t\t\t\t\twhile (currentCell.colSpan > colSpanIndex) {\r\n\t\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i + colSpanIndex++].width || 0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\ti += colSpanIndex - 1;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tcurrentLine.width += (this.rowSpanData[i].width || 0);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar y = (overrideY || 0) + offset;\r\n\r\n\r\n\t\t\tif (shouldDrawLine) {\r\n\t\t\t\tif (currentLine && currentLine.width) {\r\n\t\t\t\t\twriter.addVector({\r\n\t\t\t\t\t\ttype: 'line',\r\n\t\t\t\t\t\tx1: currentLine.left,\r\n\t\t\t\t\t\tx2: currentLine.left + currentLine.width,\r\n\t\t\t\t\t\ty1: y,\r\n\t\t\t\t\t\ty2: y,\r\n\t\t\t\t\t\tlineWidth: lineWidth,\r\n\t\t\t\t\t\tdash: dash,\r\n\t\t\t\t\t\tlineColor: borderColor\r\n\t\t\t\t\t}, false, overrideY);\r\n\t\t\t\t\tcurrentLine = null;\r\n\t\t\t\t\tborderColor = null;\r\n\t\t\t\t\tcellAbove = null;\r\n\t\t\t\t\tcurrentCell = null;\r\n\t\t\t\t\trowCellAbove = null;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\twriter.context().moveDown(lineWidth);\r\n\t}\r\n};\r\n\r\nTableProcessor.prototype.drawVerticalLine = function (x, y0, y1, vLineColIndex, writer, vLineRowIndex, beforeVLineColIndex) {\r\n\tvar width = this.layout.vLineWidth(vLineColIndex, this.tableNode);\r\n\tif (width === 0) {\r\n\t\treturn;\r\n\t}\r\n\tvar style = this.layout.vLineStyle(vLineColIndex, this.tableNode);\r\n\tvar dash;\r\n\tif (style && style.dash) {\r\n\t\tdash = style.dash;\r\n\t}\r\n\r\n\tvar body = this.tableNode.table.body;\r\n\tvar cellBefore;\r\n\tvar currentCell;\r\n\tvar borderColor;\r\n\r\n\t// the cell in the col before\r\n\tif (vLineColIndex > 0) {\r\n\t\tcellBefore = body[vLineRowIndex][beforeVLineColIndex];\r\n\t\tif (cellBefore && cellBefore.borderColor) {\r\n\t\t\tif (cellBefore.border ? cellBefore.border[2] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = cellBefore.borderColor[2];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// the current cell\r\n\tif (borderColor == null && vLineColIndex < body.length) {\r\n\t\tcurrentCell = body[vLineRowIndex][vLineColIndex];\r\n\t\tif (currentCell && currentCell.borderColor) {\r\n\t\t\tif (currentCell.border ? currentCell.border[0] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = currentCell.borderColor[0];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (borderColor == null && cellBefore && cellBefore._rowSpanCurrentOffset) {\r\n\t\tvar rowCellBeforeAbove = body[vLineRowIndex - cellBefore._rowSpanCurrentOffset][beforeVLineColIndex];\r\n\t\tif (rowCellBeforeAbove.borderColor) {\r\n\t\t\tif (rowCellBeforeAbove.border ? rowCellBeforeAbove.border[2] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = rowCellBeforeAbove.borderColor[2];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (borderColor == null && currentCell && currentCell._rowSpanCurrentOffset) {\r\n\t\tvar rowCurrentCellAbove = body[vLineRowIndex - currentCell._rowSpanCurrentOffset][vLineColIndex];\r\n\t\tif (rowCurrentCellAbove.borderColor) {\r\n\t\t\tif (rowCurrentCellAbove.border ? rowCurrentCellAbove.border[2] : this.layout.defaultBorder) {\r\n\t\t\t\tborderColor = rowCurrentCellAbove.borderColor[2];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tif (borderColor == null) {\r\n\t\tborderColor = isFunction(this.layout.vLineColor) ? this.layout.vLineColor(vLineColIndex, this.tableNode, vLineRowIndex) : this.layout.vLineColor;\r\n\t}\r\n\twriter.addVector({\r\n\t\ttype: 'line',\r\n\t\tx1: x + width / 2,\r\n\t\tx2: x + width / 2,\r\n\t\ty1: y0,\r\n\t\ty2: y1,\r\n\t\tlineWidth: width,\r\n\t\tdash: dash,\r\n\t\tlineColor: borderColor\r\n\t}, false, true);\r\n\tcellBefore = null;\r\n\tcurrentCell = null;\r\n\tborderColor = null;\r\n};\r\n\r\nTableProcessor.prototype.endTable = function (writer) {\r\n\tif (this.cleanUpRepeatables) {\r\n\t\twriter.popFromRepeatables();\r\n\t}\r\n};\r\n\r\nTableProcessor.prototype.endRow = function (rowIndex, writer, pageBreaks) {\r\n\tvar l, i;\r\n\tvar self = this;\r\n\twriter.tracker.stopTracking('pageChanged', this.rowCallback);\r\n\twriter.context().moveDown(this.layout.paddingBottom(rowIndex, this.tableNode));\r\n\twriter.context().availableHeight += this.reservedAtBottom;\r\n\r\n\tvar endingPage = writer.context().page;\r\n\tvar endingY = writer.context().y;\r\n\r\n\tvar xs = getLineXs();\r\n\r\n\tvar ys = [];\r\n\r\n\tvar hasBreaks = pageBreaks && pageBreaks.length > 0;\r\n\tvar body = this.tableNode.table.body;\r\n\r\n\tys.push({\r\n\t\ty0: this.rowTopY,\r\n\t\tpage: hasBreaks ? pageBreaks[0].prevPage : endingPage\r\n\t});\r\n\r\n\tif (hasBreaks) {\r\n\t\tfor (i = 0, l = pageBreaks.length; i < l; i++) {\r\n\t\t\tvar pageBreak = pageBreaks[i];\r\n\t\t\tys[ys.length - 1].y1 = pageBreak.prevY;\r\n\r\n\t\t\tys.push({ y0: pageBreak.y, page: pageBreak.prevPage + 1 });\r\n\t\t}\r\n\t}\r\n\r\n\tys[ys.length - 1].y1 = endingY;\r\n\r\n\tvar skipOrphanePadding = (ys[0].y1 - ys[0].y0 === this.rowPaddingTop);\r\n\tfor (var yi = (skipOrphanePadding ? 1 : 0), yl = ys.length; yi < yl; yi++) {\r\n\t\tvar willBreak = yi < ys.length - 1;\r\n\t\tvar rowBreakWithoutHeader = (yi > 0 && !this.headerRows);\r\n\t\tvar hzLineOffset = rowBreakWithoutHeader ? 0 : this.topLineWidth;\r\n\t\tvar y1 = ys[yi].y0;\r\n\t\tvar y2 = ys[yi].y1;\r\n\r\n\t\tif (willBreak) {\r\n\t\t\ty2 = y2 + this.rowPaddingBottom;\r\n\t\t}\r\n\r\n\t\tif (writer.context().page != ys[yi].page) {\r\n\t\t\twriter.context().page = ys[yi].page;\r\n\r\n\t\t\t//TODO: buggy, availableHeight should be updated on every pageChanged event\r\n\t\t\t// TableProcessor should be pageChanged listener, instead of processRow\r\n\t\t\tthis.reservedAtBottom = 0;\r\n\t\t}\r\n\r\n\t\tfor (i = 0, l = xs.length; i < l; i++) {\r\n\t\t\tvar leftCellBorder = false;\r\n\t\t\tvar rightCellBorder = false;\r\n\t\t\tvar colIndex = xs[i].index;\r\n\r\n\t\t\t// current cell\r\n\t\t\tif (colIndex < body[rowIndex].length) {\r\n\t\t\t\tvar cell = body[rowIndex][colIndex];\r\n\t\t\t\tleftCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\r\n\t\t\t\trightCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\r\n\t\t\t}\r\n\r\n\t\t\t// before cell\r\n\t\t\tif (colIndex > 0 && !leftCellBorder) {\r\n\t\t\t\tvar cell = body[rowIndex][colIndex - 1];\r\n\t\t\t\tleftCellBorder = cell.border ? cell.border[2] : this.layout.defaultBorder;\r\n\t\t\t}\r\n\r\n\t\t\t// after cell\r\n\t\t\tif (colIndex + 1 < body[rowIndex].length && !rightCellBorder) {\r\n\t\t\t\tvar cell = body[rowIndex][colIndex + 1];\r\n\t\t\t\trightCellBorder = cell.border ? cell.border[0] : this.layout.defaultBorder;\r\n\t\t\t}\r\n\r\n\t\t\tif (leftCellBorder) {\r\n\t\t\t\tthis.drawVerticalLine(xs[i].x, y1 - hzLineOffset, y2 + this.bottomLineWidth, xs[i].index, writer, rowIndex, xs[i - 1] ? xs[i - 1].index : null);\r\n\t\t\t}\r\n\r\n\t\t\tif (i < l - 1) {\r\n\t\t\t\tvar fillColor = body[rowIndex][colIndex].fillColor;\r\n\t\t\t\tvar fillOpacity = body[rowIndex][colIndex].fillOpacity;\r\n\t\t\t\tif (!fillColor) {\r\n\t\t\t\t\tfillColor = isFunction(this.layout.fillColor) ? this.layout.fillColor(rowIndex, this.tableNode, colIndex) : this.layout.fillColor;\r\n\t\t\t\t}\r\n\t\t\t\tif (!isNumber(fillOpacity)) {\r\n\t\t\t\t\tfillOpacity = isFunction(this.layout.fillOpacity) ? this.layout.fillOpacity(rowIndex, this.tableNode, colIndex) : this.layout.fillOpacity;\r\n\t\t\t\t}\r\n\t\t\t\tvar overlayPattern = body[rowIndex][colIndex].overlayPattern;\r\n\t\t\t\tvar overlayOpacity = body[rowIndex][colIndex].overlayOpacity;\r\n\t\t\t\tif (fillColor || overlayPattern) {\r\n\t\t\t\t\tvar widthLeftBorder = leftCellBorder ? this.layout.vLineWidth(colIndex, this.tableNode) : 0;\r\n\t\t\t\t\tvar widthRightBorder;\r\n\t\t\t\t\tif ((colIndex === 0 || colIndex + 1 == body[rowIndex].length) && !rightCellBorder) {\r\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode);\r\n\t\t\t\t\t} else if (rightCellBorder) {\r\n\t\t\t\t\t\twidthRightBorder = this.layout.vLineWidth(colIndex + 1, this.tableNode) / 2;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\twidthRightBorder = 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tvar x1f = this.dontBreakRows ? xs[i].x + widthLeftBorder : xs[i].x + (widthLeftBorder / 2);\r\n\t\t\t\t\tvar y1f = this.dontBreakRows ? y1 : y1 - (hzLineOffset / 2);\r\n\t\t\t\t\tvar x2f = xs[i + 1].x + widthRightBorder;\r\n\t\t\t\t\tvar y2f = this.dontBreakRows ? y2 + this.bottomLineWidth : y2 + (this.bottomLineWidth / 2);\r\n\t\t\t\t\tvar bgWidth = x2f - x1f;\r\n\t\t\t\t\tvar bgHeight = y2f - y1f;\r\n\t\t\t\t\tif (fillColor) {\r\n\t\t\t\t\t\twriter.addVector({\r\n\t\t\t\t\t\t\ttype: 'rect',\r\n\t\t\t\t\t\t\tx: x1f,\r\n\t\t\t\t\t\t\ty: y1f,\r\n\t\t\t\t\t\t\tw: bgWidth,\r\n\t\t\t\t\t\t\th: bgHeight,\r\n\t\t\t\t\t\t\tlineWidth: 0,\r\n\t\t\t\t\t\t\tcolor: fillColor,\r\n\t\t\t\t\t\t\tfillOpacity: fillOpacity\r\n\t\t\t\t\t\t}, false, true, writer.context().backgroundLength[writer.context().page]);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (overlayPattern) {\r\n\t\t\t\t\t\twriter.addVector({\r\n\t\t\t\t\t\t\ttype: 'rect',\r\n\t\t\t\t\t\t\tx: x1f,\r\n\t\t\t\t\t\t\ty: y1f,\r\n\t\t\t\t\t\t\tw: bgWidth,\r\n\t\t\t\t\t\t\th: bgHeight,\r\n\t\t\t\t\t\t\tlineWidth: 0,\r\n\t\t\t\t\t\t\tcolor: overlayPattern,\r\n\t\t\t\t\t\t\tfillOpacity: overlayOpacity\r\n\t\t\t\t\t\t}, false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (willBreak && this.layout.hLineWhenBroken !== false) {\r\n\t\t\tthis.drawHorizontalLine(rowIndex + 1, writer, y2);\r\n\t\t}\r\n\t\tif (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {\r\n\t\t\tthis.drawHorizontalLine(rowIndex, writer, y1);\r\n\t\t}\r\n\t}\r\n\r\n\twriter.context().page = endingPage;\r\n\twriter.context().y = endingY;\r\n\r\n\tvar row = this.tableNode.table.body[rowIndex];\r\n\tfor (i = 0, l = row.length; i < l; i++) {\r\n\t\tif (row[i].rowSpan) {\r\n\t\t\tthis.rowSpanData[i].rowSpan = row[i].rowSpan;\r\n\r\n\t\t\t// fix colSpans\r\n\t\t\tif (row[i].colSpan && row[i].colSpan > 1) {\r\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\r\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._colSpan = row[i].colSpan;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// fix rowSpans\r\n\t\t\tif (row[i].rowSpan && row[i].rowSpan > 1) {\r\n\t\t\t\tfor (var j = 1; j < row[i].rowSpan; j++) {\r\n\t\t\t\t\tthis.tableNode.table.body[rowIndex + j][i]._rowSpanCurrentOffset = j;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.rowSpanData[i].rowSpan > 0) {\r\n\t\t\tthis.rowSpanData[i].rowSpan--;\r\n\t\t}\r\n\t}\r\n\r\n\tthis.drawHorizontalLine(rowIndex + 1, writer);\r\n\r\n\tif (this.headerRows && rowIndex === this.headerRows - 1) {\r\n\t\tthis.headerRepeatable = writer.currentBlockToRepeatable();\r\n\t}\r\n\r\n\tif (this.dontBreakRows) {\r\n\t\twriter.tracker.auto('pageChanged',\r\n\t\t\tfunction () {\r\n\t\t\t\tif (!self.headerRows && self.layout.hLineWhenBroken !== false) {\r\n\t\t\t\t\tself.drawHorizontalLine(rowIndex, writer);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tfunction () {\r\n\t\t\t\twriter.commitUnbreakableBlock();\r\n\t\t\t}\r\n\t\t);\r\n\t}\r\n\r\n\tif (this.headerRepeatable && (rowIndex === (this.rowsWithoutPageBreak - 1) || rowIndex === this.tableNode.table.body.length - 1)) {\r\n\t\twriter.commitUnbreakableBlock();\r\n\t\twriter.pushToRepeatables(this.headerRepeatable);\r\n\t\tthis.cleanUpRepeatables = true;\r\n\t\tthis.headerRepeatable = null;\r\n\t}\r\n\r\n\tfunction getLineXs() {\r\n\t\tvar result = [];\r\n\t\tvar cols = 0;\r\n\r\n\t\tfor (var i = 0, l = self.tableNode.table.body[rowIndex].length; i < l; i++) {\r\n\t\t\tif (!cols) {\r\n\t\t\t\tresult.push({ x: self.rowSpanData[i].left, index: i });\r\n\r\n\t\t\t\tvar item = self.tableNode.table.body[rowIndex][i];\r\n\t\t\t\tcols = (item._colSpan || item.colSpan || 0);\r\n\t\t\t}\r\n\t\t\tif (cols > 0) {\r\n\t\t\t\tcols--;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tresult.push({ x: self.rowSpanData[self.rowSpanData.length - 1].left, index: self.rowSpanData.length - 1 });\r\n\r\n\t\treturn result;\r\n\t}\r\n};\r\n\r\nmodule.exports = TableProcessor;\r\n","'use strict';\r\n\r\nvar isArray = require('./helpers').isArray;\r\nvar isPattern = require('./helpers').isPattern;\r\nvar getPattern = require('./helpers').getPattern;\r\n\r\nfunction groupDecorations(line) {\r\n\tvar groups = [], currentGroup = null;\r\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\tvar inline = line.inlines[i];\r\n\t\tvar decoration = inline.decoration;\r\n\t\tif (!decoration) {\r\n\t\t\tcurrentGroup = null;\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tif (!isArray(decoration)) {\r\n\t\t\tdecoration = [decoration];\r\n\t\t}\r\n\t\tvar color = inline.decorationColor || inline.color || 'black';\r\n\t\tvar style = inline.decorationStyle || 'solid';\r\n\t\tfor (var ii = 0, ll = decoration.length; ii < ll; ii++) {\r\n\t\t\tvar decorationItem = decoration[ii];\r\n\t\t\tif (!currentGroup || decorationItem !== currentGroup.decoration ||\r\n\t\t\t\tstyle !== currentGroup.decorationStyle || color !== currentGroup.decorationColor) {\r\n\r\n\t\t\t\tcurrentGroup = {\r\n\t\t\t\t\tline: line,\r\n\t\t\t\t\tdecoration: decorationItem,\r\n\t\t\t\t\tdecorationColor: color,\r\n\t\t\t\t\tdecorationStyle: style,\r\n\t\t\t\t\tinlines: [inline]\r\n\t\t\t\t};\r\n\t\t\t\tgroups.push(currentGroup);\r\n\t\t\t} else {\r\n\t\t\t\tcurrentGroup.inlines.push(inline);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn groups;\r\n}\r\n\r\nfunction drawDecoration(group, x, y, pdfKitDoc) {\r\n\tfunction maxInline() {\r\n\t\tvar max = 0;\r\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\r\n\t\t\tvar inline = group.inlines[i];\r\n\t\t\tmax = inline.fontSize > max ? i : max;\r\n\t\t}\r\n\t\treturn group.inlines[max];\r\n\t}\r\n\tfunction width() {\r\n\t\tvar sum = 0;\r\n\t\tfor (var i = 0, l = group.inlines.length; i < l; i++) {\r\n\t\t\tvar justifyShift = (group.inlines[i].justifyShift || 0);\r\n\t\t\tsum += group.inlines[i].width + justifyShift;\r\n\t\t}\r\n\t\treturn sum;\r\n\t}\r\n\tvar firstInline = group.inlines[0],\r\n\t\tbiggerInline = maxInline(),\r\n\t\ttotalWidth = width(),\r\n\t\tlineAscent = group.line.getAscenderHeight(),\r\n\t\tascent = biggerInline.font.ascender / 1000 * biggerInline.fontSize,\r\n\t\theight = biggerInline.height,\r\n\t\tdescent = height - ascent;\r\n\r\n\tvar lw = 0.5 + Math.floor(Math.max(biggerInline.fontSize - 8, 0) / 2) * 0.12;\r\n\r\n\tswitch (group.decoration) {\r\n\t\tcase 'underline':\r\n\t\t\ty += lineAscent + descent * 0.45;\r\n\t\t\tbreak;\r\n\t\tcase 'overline':\r\n\t\t\ty += lineAscent - (ascent * 0.85);\r\n\t\t\tbreak;\r\n\t\tcase 'lineThrough':\r\n\t\t\ty += lineAscent - (ascent * 0.25);\r\n\t\t\tbreak;\r\n\t\tdefault:\r\n\t\t\tthrow 'Unknown decoration : ' + group.decoration;\r\n\t}\r\n\tpdfKitDoc.save();\r\n\r\n\tif (group.decorationStyle === 'double') {\r\n\t\tvar gap = Math.max(0.5, lw * 2);\r\n\t\tpdfKitDoc.fillColor(group.decorationColor)\r\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw / 2).fill()\r\n\t\t\t.rect(x + firstInline.x, y + gap - lw / 2, totalWidth, lw / 2).fill();\r\n\t} else if (group.decorationStyle === 'dashed') {\r\n\t\tvar nbDashes = Math.ceil(totalWidth / (3.96 + 2.84));\r\n\t\tvar rdx = x + firstInline.x;\r\n\t\tpdfKitDoc.rect(rdx, y, totalWidth, lw).clip();\r\n\t\tpdfKitDoc.fillColor(group.decorationColor);\r\n\t\tfor (var i = 0; i < nbDashes; i++) {\r\n\t\t\tpdfKitDoc.rect(rdx, y - lw / 2, 3.96, lw).fill();\r\n\t\t\trdx += 3.96 + 2.84;\r\n\t\t}\r\n\t} else if (group.decorationStyle === 'dotted') {\r\n\t\tvar nbDots = Math.ceil(totalWidth / (lw * 3));\r\n\t\tvar rx = x + firstInline.x;\r\n\t\tpdfKitDoc.rect(rx, y, totalWidth, lw).clip();\r\n\t\tpdfKitDoc.fillColor(group.decorationColor);\r\n\t\tfor (var ii = 0; ii < nbDots; ii++) {\r\n\t\t\tpdfKitDoc.rect(rx, y - lw / 2, lw, lw).fill();\r\n\t\t\trx += (lw * 3);\r\n\t\t}\r\n\t} else if (group.decorationStyle === 'wavy') {\r\n\t\tvar sh = 0.7, sv = 1;\r\n\t\tvar nbWaves = Math.ceil(totalWidth / (sh * 2)) + 1;\r\n\t\tvar rwx = x + firstInline.x - 1;\r\n\t\tpdfKitDoc.rect(x + firstInline.x, y - sv, totalWidth, y + sv).clip();\r\n\t\tpdfKitDoc.lineWidth(0.24);\r\n\t\tpdfKitDoc.moveTo(rwx, y);\r\n\t\tfor (var iii = 0; iii < nbWaves; iii++) {\r\n\t\t\tpdfKitDoc.bezierCurveTo(rwx + sh, y - sv, rwx + sh * 2, y - sv, rwx + sh * 3, y)\r\n\t\t\t\t.bezierCurveTo(rwx + sh * 4, y + sv, rwx + sh * 5, y + sv, rwx + sh * 6, y);\r\n\t\t\trwx += sh * 6;\r\n\t\t}\r\n\t\tpdfKitDoc.stroke(group.decorationColor);\r\n\t} else {\r\n\t\tpdfKitDoc.fillColor(group.decorationColor)\r\n\t\t\t.rect(x + firstInline.x, y - lw / 2, totalWidth, lw)\r\n\t\t\t.fill();\r\n\t}\r\n\tpdfKitDoc.restore();\r\n}\r\n\r\nfunction drawDecorations(line, x, y, pdfKitDoc) {\r\n\tvar groups = groupDecorations(line);\r\n\tfor (var i = 0, l = groups.length; i < l; i++) {\r\n\t\tdrawDecoration(groups[i], x, y, pdfKitDoc);\r\n\t}\r\n}\r\n\r\nfunction drawBackground(line, x, y, patterns, pdfKitDoc) {\r\n\tvar height = line.getHeight();\r\n\tfor (var i = 0, l = line.inlines.length; i < l; i++) {\r\n\t\tvar inline = line.inlines[i];\r\n\t\tif (!inline.background) {\r\n\t\t\tcontinue;\r\n\t\t}\r\n\t\tvar color = inline.background;\r\n\t\tif (isPattern(inline.background)) {\r\n\t\t\tcolor = getPattern(inline.background, patterns);\r\n\t\t}\r\n\t\tvar justifyShift = (inline.justifyShift || 0);\r\n\t\tpdfKitDoc.fillColor(color)\r\n\t\t\t.rect(x + inline.x - justifyShift, y, inline.width + justifyShift, height)\r\n\t\t\t.fill();\r\n\t}\r\n}\r\n\r\nmodule.exports = {\r\n\tdrawBackground: drawBackground,\r\n\tdrawDecorations: drawDecorations\r\n};\r\n","'use strict';\r\n\r\nvar isString = require('./helpers').isString;\r\nvar isNumber = require('./helpers').isNumber;\r\nvar isObject = require('./helpers').isObject;\r\nvar isArray = require('./helpers').isArray;\r\nvar isUndefined = require('./helpers').isUndefined;\r\nvar LineBreaker = require('@foliojs-fork/linebreak');\r\n\r\nvar LEADING = /^(\\s)+/g;\r\nvar TRAILING = /(\\s)+$/g;\r\n\r\n/**\r\n * Creates an instance of TextTools - text measurement utility\r\n *\r\n * @constructor\r\n * @param {FontProvider} fontProvider\r\n */\r\nfunction TextTools(fontProvider) {\r\n\tthis.fontProvider = fontProvider;\r\n}\r\n\r\n/**\r\n * Converts an array of strings (or inline-definition-objects) into a collection\r\n * of inlines and calculated minWidth/maxWidth.\r\n * and their min/max widths\r\n * @param {Object} textArray - an array of inline-definition-objects (or strings)\r\n * @param {Object} styleContextStack current style stack\r\n * @return {Object} collection of inlines, minWidth, maxWidth\r\n */\r\nTextTools.prototype.buildInlines = function (textArray, styleContextStack) {\r\n\tvar measured = measure(this.fontProvider, textArray, styleContextStack);\r\n\r\n\tvar minWidth = 0,\r\n\t\tmaxWidth = 0,\r\n\t\tcurrentLineWidth;\r\n\r\n\tmeasured.forEach(function (inline) {\r\n\t\tminWidth = Math.max(minWidth, inline.width - inline.leadingCut - inline.trailingCut);\r\n\r\n\t\tif (!currentLineWidth) {\r\n\t\t\tcurrentLineWidth = { width: 0, leadingCut: inline.leadingCut, trailingCut: 0 };\r\n\t\t}\r\n\r\n\t\tcurrentLineWidth.width += inline.width;\r\n\t\tcurrentLineWidth.trailingCut = inline.trailingCut;\r\n\r\n\t\tmaxWidth = Math.max(maxWidth, getTrimmedWidth(currentLineWidth));\r\n\r\n\t\tif (inline.lineEnd) {\r\n\t\t\tcurrentLineWidth = null;\r\n\t\t}\r\n\t});\r\n\r\n\tif (getStyleProperty({}, styleContextStack, 'noWrap', false)) {\r\n\t\tminWidth = maxWidth;\r\n\t}\r\n\r\n\treturn {\r\n\t\titems: measured,\r\n\t\tminWidth: minWidth,\r\n\t\tmaxWidth: maxWidth\r\n\t};\r\n\r\n\tfunction getTrimmedWidth(item) {\r\n\t\treturn Math.max(0, item.width - item.leadingCut - item.trailingCut);\r\n\t}\r\n};\r\n\r\n/**\r\n * Returns size of the specified string (without breaking it) using the current style\r\n * @param {String} text text to be measured\r\n * @param {Object} styleContextStack current style stack\r\n * @return {Object} size of the specified string\r\n */\r\nTextTools.prototype.sizeOfString = function (text, styleContextStack) {\r\n\ttext = text ? text.toString().replace(/\\t/g, ' ') : '';\r\n\r\n\t//TODO: refactor - extract from measure\r\n\tvar fontName = getStyleProperty({}, styleContextStack, 'font', 'Roboto');\r\n\tvar fontSize = getStyleProperty({}, styleContextStack, 'fontSize', 12);\r\n\tvar fontFeatures = getStyleProperty({}, styleContextStack, 'fontFeatures', null);\r\n\tvar bold = getStyleProperty({}, styleContextStack, 'bold', false);\r\n\tvar italics = getStyleProperty({}, styleContextStack, 'italics', false);\r\n\tvar lineHeight = getStyleProperty({}, styleContextStack, 'lineHeight', 1);\r\n\tvar characterSpacing = getStyleProperty({}, styleContextStack, 'characterSpacing', 0);\r\n\r\n\tvar font = this.fontProvider.provideFont(fontName, bold, italics);\r\n\r\n\treturn {\r\n\t\twidth: widthOfString(text, font, fontSize, characterSpacing, fontFeatures),\r\n\t\theight: font.lineHeight(fontSize) * lineHeight,\r\n\t\tfontSize: fontSize,\r\n\t\tlineHeight: lineHeight,\r\n\t\tascender: font.ascender / 1000 * fontSize,\r\n\t\tdescender: font.descender / 1000 * fontSize\r\n\t};\r\n};\r\n\r\n/**\r\n * Returns size of the specified rotated string (without breaking it) using the current style\r\n *\r\n * @param {string} text text to be measured\r\n * @param {number} angle\r\n * @param {object} styleContextStack current style stack\r\n * @returns {object} size of the specified string\r\n */\r\nTextTools.prototype.sizeOfRotatedText = function (text, angle, styleContextStack) {\r\n\tvar angleRad = angle * Math.PI / -180;\r\n\tvar size = this.sizeOfString(text, styleContextStack);\r\n\treturn {\r\n\t\twidth: Math.abs(size.height * Math.sin(angleRad)) + Math.abs(size.width * Math.cos(angleRad)),\r\n\t\theight: Math.abs(size.width * Math.sin(angleRad)) + Math.abs(size.height * Math.cos(angleRad))\r\n\t};\r\n}\r\n\r\nTextTools.prototype.widthOfString = function (text, font, fontSize, characterSpacing, fontFeatures) {\r\n\treturn widthOfString(text, font, fontSize, characterSpacing, fontFeatures);\r\n};\r\n\r\nfunction splitWords(text, noWrap) {\r\n\tvar results = [];\r\n\ttext = text.replace(/\\t/g, ' ');\r\n\r\n\tif (noWrap) {\r\n\t\tresults.push({ text: text });\r\n\t\treturn results;\r\n\t}\r\n\r\n\tvar breaker = new LineBreaker(text);\r\n\tvar last = 0;\r\n\tvar bk;\r\n\r\n\twhile (bk = breaker.nextBreak()) {\r\n\t\tvar word = text.slice(last, bk.position);\r\n\r\n\t\tif (bk.required || word.match(/\\r?\\n$|\\r$/)) { // new line\r\n\t\t\tword = word.replace(/\\r?\\n$|\\r$/, '');\r\n\t\t\tresults.push({ text: word, lineEnd: true });\r\n\t\t} else {\r\n\t\t\tresults.push({ text: word });\r\n\t\t}\r\n\r\n\t\tlast = bk.position;\r\n\t}\r\n\r\n\treturn results;\r\n}\r\n\r\nfunction copyStyle(source, destination) {\r\n\tdestination = destination || {};\r\n\tsource = source || {}; //TODO: default style\r\n\r\n\tfor (var key in source) {\r\n\t\tif (key != 'text' && source.hasOwnProperty(key)) {\r\n\t\t\tdestination[key] = source[key];\r\n\t\t}\r\n\t}\r\n\r\n\treturn destination;\r\n}\r\n\r\nfunction normalizeTextArray(array, styleContextStack) {\r\n\tfunction flatten(array) {\r\n\t\treturn array.reduce(function (prev, cur) {\r\n\t\t\tvar current = isArray(cur.text) ? flatten(cur.text) : cur;\r\n\t\t\tvar more = [].concat(current).some(Array.isArray);\r\n\t\t\treturn prev.concat(more ? flatten(current) : current);\r\n\t\t}, []);\r\n\t}\r\n\r\n\tfunction getOneWord(index, words, noWrap) {\r\n\t\tif (isUndefined(words[index])) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tif (words[index].lineEnd) {\r\n\t\t\treturn null;\r\n\t\t}\r\n\r\n\t\tvar word = words[index].text;\r\n\r\n\t\tif (noWrap) {\r\n\t\t\tvar tmpWords = splitWords(normalizeString(word), false);\r\n\t\t\tif (isUndefined(tmpWords[tmpWords.length - 1])) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t\tword = tmpWords[tmpWords.length - 1].text;\r\n\t\t}\r\n\r\n\t\treturn word;\r\n\t}\r\n\r\n\tvar results = [];\r\n\r\n\tif (!isArray(array)) {\r\n\t\tarray = [array];\r\n\t}\r\n\r\n\tarray = flatten(array);\r\n\r\n\tvar lastWord = null;\r\n\tfor (var i = 0, l = array.length; i < l; i++) {\r\n\t\tvar item = array[i];\r\n\t\tvar style = null;\r\n\t\tvar words;\r\n\r\n\t\tvar noWrap = getStyleProperty(item || {}, styleContextStack, 'noWrap', false);\r\n\t\tif (isObject(item)) {\r\n\t\t\tif (item._textRef && item._textRef._textNodeRef.text) {\r\n\t\t\t\titem.text = item._textRef._textNodeRef.text;\r\n\t\t\t}\r\n\t\t\twords = splitWords(normalizeString(item.text), noWrap);\r\n\t\t\tstyle = copyStyle(item);\r\n\t\t} else {\r\n\t\t\twords = splitWords(normalizeString(item), noWrap);\r\n\t\t}\r\n\r\n\t\tif (lastWord && words.length) {\r\n\t\t\tvar firstWord = getOneWord(0, words, noWrap);\r\n\r\n\t\t\tvar wrapWords = splitWords(normalizeString(lastWord + firstWord), false);\r\n\t\t\tif (wrapWords.length === 1) {\r\n\t\t\t\tresults[results.length - 1].noNewLine = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var i2 = 0, l2 = words.length; i2 < l2; i2++) {\r\n\t\t\tvar result = {\r\n\t\t\t\ttext: words[i2].text\r\n\t\t\t};\r\n\r\n\t\t\tif (words[i2].lineEnd) {\r\n\t\t\t\tresult.lineEnd = true;\r\n\t\t\t}\r\n\r\n\t\t\tcopyStyle(style, result);\r\n\r\n\t\t\tresults.push(result);\r\n\t\t}\r\n\r\n\t\tlastWord = null;\r\n\t\tif (i + 1 < l) {\r\n\t\t\tlastWord = getOneWord(words.length - 1, words, noWrap);\r\n\t\t}\r\n\t}\r\n\r\n\treturn results;\r\n}\r\n\r\nfunction normalizeString(value) {\r\n\tif (value === undefined || value === null) {\r\n\t\treturn '';\r\n\t} else if (isNumber(value)) {\r\n\t\treturn value.toString();\r\n\t} else if (isString(value)) {\r\n\t\treturn value;\r\n\t} else {\r\n\t\treturn value.toString();\r\n\t}\r\n}\r\n\r\nfunction getStyleProperty(item, styleContextStack, property, defaultValue) {\r\n\tvar value;\r\n\r\n\tif (item[property] !== undefined && item[property] !== null) {\r\n\t\t// item defines this property\r\n\t\treturn item[property];\r\n\t}\r\n\r\n\tif (!styleContextStack) {\r\n\t\treturn defaultValue;\r\n\t}\r\n\r\n\tstyleContextStack.auto(item, function () {\r\n\t\tvalue = styleContextStack.getProperty(property);\r\n\t});\r\n\r\n\tif (value !== null && value !== undefined) {\r\n\t\treturn value;\r\n\t} else {\r\n\t\treturn defaultValue;\r\n\t}\r\n}\r\n\r\nfunction measure(fontProvider, textArray, styleContextStack) {\r\n\tvar normalized = normalizeTextArray(textArray, styleContextStack);\r\n\r\n\tif (normalized.length) {\r\n\t\tvar leadingIndent = getStyleProperty(normalized[0], styleContextStack, 'leadingIndent', 0);\r\n\r\n\t\tif (leadingIndent) {\r\n\t\t\tnormalized[0].leadingCut = -leadingIndent;\r\n\t\t\tnormalized[0].leadingIndent = leadingIndent;\r\n\t\t}\r\n\t}\r\n\r\n\tnormalized.forEach(function (item) {\r\n\t\tvar fontName = getStyleProperty(item, styleContextStack, 'font', 'Roboto');\r\n\t\tvar fontSize = getStyleProperty(item, styleContextStack, 'fontSize', 12);\r\n\t\tvar fontFeatures = getStyleProperty(item, styleContextStack, 'fontFeatures', null);\r\n\t\tvar bold = getStyleProperty(item, styleContextStack, 'bold', false);\r\n\t\tvar italics = getStyleProperty(item, styleContextStack, 'italics', false);\r\n\t\tvar color = getStyleProperty(item, styleContextStack, 'color', 'black');\r\n\t\tvar decoration = getStyleProperty(item, styleContextStack, 'decoration', null);\r\n\t\tvar decorationColor = getStyleProperty(item, styleContextStack, 'decorationColor', null);\r\n\t\tvar decorationStyle = getStyleProperty(item, styleContextStack, 'decorationStyle', null);\r\n\t\tvar background = getStyleProperty(item, styleContextStack, 'background', null);\r\n\t\tvar lineHeight = getStyleProperty(item, styleContextStack, 'lineHeight', 1);\r\n\t\tvar characterSpacing = getStyleProperty(item, styleContextStack, 'characterSpacing', 0);\r\n\t\tvar link = getStyleProperty(item, styleContextStack, 'link', null);\r\n\t\tvar linkToPage = getStyleProperty(item, styleContextStack, 'linkToPage', null);\r\n\t\tvar linkToDestination = getStyleProperty(item, styleContextStack, 'linkToDestination', null);\r\n\t\tvar noWrap = getStyleProperty(item, styleContextStack, 'noWrap', null);\r\n\t\tvar preserveLeadingSpaces = getStyleProperty(item, styleContextStack, 'preserveLeadingSpaces', false);\r\n\t\tvar preserveTrailingSpaces = getStyleProperty(item, styleContextStack, 'preserveTrailingSpaces', false);\r\n\t\tvar opacity = getStyleProperty(item, styleContextStack, 'opacity', 1);\r\n\t\tvar sup = getStyleProperty(item, styleContextStack, 'sup', false);\r\n\t\tvar sub = getStyleProperty(item, styleContextStack, 'sub', false);\r\n\r\n\t\tif ((sup || sub) && item.fontSize === undefined) {\r\n\t\t\t// font size reduction taken from here: https://en.wikipedia.org/wiki/Subscript_and_superscript#Desktop_publishing\r\n\t\t\tfontSize *= 0.58\r\n\t\t}\r\n\r\n\t\tvar font = fontProvider.provideFont(fontName, bold, italics);\r\n\r\n\t\titem.width = widthOfString(item.text, font, fontSize, characterSpacing, fontFeatures);\r\n\t\titem.height = font.lineHeight(fontSize) * lineHeight;\r\n\r\n\t\tif (!item.leadingCut) {\r\n\t\t\titem.leadingCut = 0;\r\n\t\t}\r\n\r\n\t\tvar leadingSpaces;\r\n\t\tif (!preserveLeadingSpaces && (leadingSpaces = item.text.match(LEADING))) {\r\n\t\t\titem.leadingCut += widthOfString(leadingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\r\n\t\t}\r\n\r\n\t\tvar trailingSpaces;\r\n\t\tif (!preserveTrailingSpaces && (trailingSpaces = item.text.match(TRAILING))) {\r\n\t\t\titem.trailingCut = widthOfString(trailingSpaces[0], font, fontSize, characterSpacing, fontFeatures);\r\n\t\t} else {\r\n\t\t\titem.trailingCut = 0;\r\n\t\t}\r\n\r\n\t\titem.alignment = getStyleProperty(item, styleContextStack, 'alignment', 'left');\r\n\t\titem.font = font;\r\n\t\titem.fontSize = fontSize;\r\n\t\titem.fontFeatures = fontFeatures;\r\n\t\titem.characterSpacing = characterSpacing;\r\n\t\titem.color = color;\r\n\t\titem.decoration = decoration;\r\n\t\titem.decorationColor = decorationColor;\r\n\t\titem.decorationStyle = decorationStyle;\r\n\t\titem.background = background;\r\n\t\titem.link = link;\r\n\t\titem.linkToPage = linkToPage;\r\n\t\titem.linkToDestination = linkToDestination;\r\n\t\titem.noWrap = noWrap;\r\n\t\titem.opacity = opacity;\r\n\t\titem.sup = sup;\r\n\t\titem.sub = sub;\r\n\t});\r\n\r\n\treturn normalized;\r\n}\r\n\r\nfunction widthOfString(text, font, fontSize, characterSpacing, fontFeatures) {\r\n\treturn font.widthOfString(text, fontSize, fontFeatures) + ((characterSpacing || 0) * (text.length - 1));\r\n}\r\n\r\nmodule.exports = TextTools;\r\n","'use strict';\r\n\r\nfunction TraversalTracker() {\r\n\tthis.events = {};\r\n}\r\n\r\nTraversalTracker.prototype.startTracking = function (event, callback) {\r\n\tvar callbacks = this.events[event] || (this.events[event] = []);\r\n\r\n\tif (callbacks.indexOf(callback) < 0) {\r\n\t\tcallbacks.push(callback);\r\n\t}\r\n};\r\n\r\nTraversalTracker.prototype.stopTracking = function (event, callback) {\r\n\tvar callbacks = this.events[event];\r\n\r\n\tif (!callbacks) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tvar index = callbacks.indexOf(callback);\r\n\tif (index >= 0) {\r\n\t\tcallbacks.splice(index, 1);\r\n\t}\r\n};\r\n\r\nTraversalTracker.prototype.emit = function (event) {\r\n\tvar args = Array.prototype.slice.call(arguments, 1);\r\n\tvar callbacks = this.events[event];\r\n\r\n\tif (!callbacks) {\r\n\t\treturn;\r\n\t}\r\n\r\n\tcallbacks.forEach(function (callback) {\r\n\t\tcallback.apply(this, args);\r\n\t});\r\n};\r\n\r\nTraversalTracker.prototype.auto = function (event, callback, innerFunction) {\r\n\tthis.startTracking(event, callback);\r\n\tinnerFunction();\r\n\tthis.stopTracking(event, callback);\r\n};\r\n\r\nmodule.exports = TraversalTracker;\r\n","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n","'use strict';\n\nrequire(\"core-js/modules/es.symbol.js\");\nrequire(\"core-js/modules/es.symbol.description.js\");\nrequire(\"core-js/modules/es.symbol.iterator.js\");\nrequire(\"core-js/modules/es.symbol.to-primitive.js\");\nrequire(\"core-js/modules/es.date.to-primitive.js\");\nrequire(\"core-js/modules/es.array.concat.js\");\nrequire(\"core-js/modules/es.array.fill.js\");\nrequire(\"core-js/modules/es.array.from.js\");\nrequire(\"core-js/modules/es.array.iterator.js\");\nrequire(\"core-js/modules/es.array.join.js\");\nrequire(\"core-js/modules/es.array.map.js\");\nrequire(\"core-js/modules/es.array.slice.js\");\nrequire(\"core-js/modules/es.array.sort.js\");\nrequire(\"core-js/modules/es.array.splice.js\");\nrequire(\"core-js/modules/es.function.name.js\");\nrequire(\"core-js/modules/es.map.js\");\nrequire(\"core-js/modules/es.number.constructor.js\");\nrequire(\"core-js/modules/es.number.epsilon.js\");\nrequire(\"core-js/modules/es.object.assign.js\");\nrequire(\"core-js/modules/es.object.freeze.js\");\nrequire(\"core-js/modules/es.object.get-own-property-descriptor.js\");\nrequire(\"core-js/modules/es.object.keys.js\");\nrequire(\"core-js/modules/es.object.to-string.js\");\nrequire(\"core-js/modules/es.promise.js\");\nrequire(\"core-js/modules/es.regexp.exec.js\");\nrequire(\"core-js/modules/es.regexp.flags.js\");\nrequire(\"core-js/modules/es.regexp.to-string.js\");\nrequire(\"core-js/modules/es.set.js\");\nrequire(\"core-js/modules/es.string.from-code-point.js\");\nrequire(\"core-js/modules/es.string.iterator.js\");\nrequire(\"core-js/modules/es.string.match.js\");\nrequire(\"core-js/modules/es.string.repeat.js\");\nrequire(\"core-js/modules/es.string.trim.js\");\nrequire(\"core-js/modules/es.typed-array.int16-array.js\");\nrequire(\"core-js/modules/es.typed-array.uint16-array.js\");\nrequire(\"core-js/modules/es.typed-array.copy-within.js\");\nrequire(\"core-js/modules/es.typed-array.every.js\");\nrequire(\"core-js/modules/es.typed-array.fill.js\");\nrequire(\"core-js/modules/es.typed-array.filter.js\");\nrequire(\"core-js/modules/es.typed-array.find.js\");\nrequire(\"core-js/modules/es.typed-array.find-index.js\");\nrequire(\"core-js/modules/es.typed-array.for-each.js\");\nrequire(\"core-js/modules/es.typed-array.includes.js\");\nrequire(\"core-js/modules/es.typed-array.index-of.js\");\nrequire(\"core-js/modules/es.typed-array.iterator.js\");\nrequire(\"core-js/modules/es.typed-array.join.js\");\nrequire(\"core-js/modules/es.typed-array.last-index-of.js\");\nrequire(\"core-js/modules/es.typed-array.map.js\");\nrequire(\"core-js/modules/es.typed-array.reduce.js\");\nrequire(\"core-js/modules/es.typed-array.reduce-right.js\");\nrequire(\"core-js/modules/es.typed-array.reverse.js\");\nrequire(\"core-js/modules/es.typed-array.set.js\");\nrequire(\"core-js/modules/es.typed-array.slice.js\");\nrequire(\"core-js/modules/es.typed-array.some.js\");\nrequire(\"core-js/modules/es.typed-array.sort.js\");\nrequire(\"core-js/modules/es.typed-array.subarray.js\");\nrequire(\"core-js/modules/es.typed-array.to-locale-string.js\");\nrequire(\"core-js/modules/es.typed-array.to-string.js\");\nrequire(\"core-js/modules/web.dom-collections.for-each.js\");\nrequire(\"core-js/modules/web.dom-collections.iterator.js\");\nvar _;\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, \"prototype\", { writable: false }); return Constructor; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == typeof i ? i : String(i); }\nfunction _toPrimitive(t, r) { if (\"object\" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != typeof i) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nfunction _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\nfunction _createForOfIteratorHelperLoose(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (it) return (it = it.call(o)).next.bind(it); if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; return function () { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\nfunction _interopDefault(ex) {\n return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex;\n}\nvar r = _interopDefault(require('@foliojs-fork/restructure'));\nvar utils = require('@foliojs-fork/restructure/src/utils');\nvar isEqual = _interopDefault(require('deep-equal'));\nvar unicode = _interopDefault(require('unicode-properties'));\nvar UnicodeTrie = _interopDefault(require('unicode-trie'));\nvar StateMachine = _interopDefault(require('dfa'));\nvar cloneDeep = _interopDefault(require('clone'));\nvar inflate = _interopDefault(require('tiny-inflate'));\nvar brotli = _interopDefault(require('brotli/decompress'));\nvar fs = require('fs');\nvar fontkit = {};\nfontkit.logErrors = false;\nvar formats = [];\nfontkit.registerFormat = function (format) {\n formats.push(format);\n};\nfontkit.openSync = function (filename, postscriptName) {\n var buffer = fs.readFileSync(filename);\n return fontkit.create(buffer, postscriptName);\n};\nfontkit.open = function (filename, postscriptName, callback) {\n if (typeof postscriptName === 'function') {\n callback = postscriptName;\n postscriptName = null;\n }\n fs.readFile(filename, function (err, buffer) {\n if (err) {\n return callback(err);\n }\n try {\n var font = fontkit.create(buffer, postscriptName);\n } catch (e) {\n return callback(e);\n }\n return callback(null, font);\n });\n return;\n};\nfontkit.create = function (buffer, postscriptName) {\n for (var i = 0; i < formats.length; i++) {\n var format = formats[i];\n if (format.probe(buffer)) {\n var font = new format(new r.DecodeStream(buffer));\n if (postscriptName) {\n return font.getFont(postscriptName);\n }\n return font;\n }\n }\n throw new Error('Unknown font format');\n};\nfontkit.defaultLanguage = 'en';\nfontkit.setDefaultLanguage = function (lang) {\n if (lang === void 0) {\n lang = 'en';\n }\n fontkit.defaultLanguage = lang;\n};\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n var desc = {};\n Object.keys(descriptor).forEach(function (key) {\n desc[key] = descriptor[key];\n });\n desc.enumerable = !!desc.enumerable;\n desc.configurable = !!desc.configurable;\n if ('value' in desc || desc.initializer) {\n desc.writable = true;\n }\n desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n return decorator(target, property, desc) || desc;\n }, desc);\n if (context && desc.initializer !== void 0) {\n desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n desc.initializer = undefined;\n }\n if (desc.initializer === void 0) {\n Object.defineProperty(target, property, desc);\n desc = null;\n }\n return desc;\n}\n\n/**\r\n * This decorator caches the results of a getter or method such that\r\n * the results are lazily computed once, and then cached.\r\n * @private\r\n */\nfunction cache(target, key, descriptor) {\n if (descriptor.get) {\n var get = descriptor.get;\n descriptor.get = function () {\n var value = get.call(this);\n Object.defineProperty(this, key, {\n value: value\n });\n return value;\n };\n } else if (typeof descriptor.value === 'function') {\n var fn = descriptor.value;\n return {\n get: function get() {\n var cache = new Map();\n function memoized() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n var key = args.length > 0 ? args[0] : 'value';\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = fn.apply(this, args);\n cache.set(key, result);\n return result;\n }\n Object.defineProperty(this, key, {\n value: memoized\n });\n return memoized;\n }\n };\n }\n}\nvar SubHeader = new r.Struct({\n firstCode: r.uint16,\n entryCount: r.uint16,\n idDelta: r.int16,\n idRangeOffset: r.uint16\n});\nvar CmapGroup = new r.Struct({\n startCharCode: r.uint32,\n endCharCode: r.uint32,\n glyphID: r.uint32\n});\nvar UnicodeValueRange = new r.Struct({\n startUnicodeValue: r.uint24,\n additionalCount: r.uint8\n});\nvar UVSMapping = new r.Struct({\n unicodeValue: r.uint24,\n glyphID: r.uint16\n});\nvar DefaultUVS = new r.Array(UnicodeValueRange, r.uint32);\nvar NonDefaultUVS = new r.Array(UVSMapping, r.uint32);\nvar VarSelectorRecord = new r.Struct({\n varSelector: r.uint24,\n defaultUVS: new r.Pointer(r.uint32, DefaultUVS, {\n type: 'parent'\n }),\n nonDefaultUVS: new r.Pointer(r.uint32, NonDefaultUVS, {\n type: 'parent'\n })\n});\nvar CmapSubtable = new r.VersionedStruct(r.uint16, {\n 0: {\n // Byte encoding\n length: r.uint16,\n // Total table length in bytes (set to 262 for format 0)\n language: r.uint16,\n // Language code for this encoding subtable, or zero if language-independent\n codeMap: new r.LazyArray(r.uint8, 256)\n },\n 2: {\n // High-byte mapping (CJK)\n length: r.uint16,\n language: r.uint16,\n subHeaderKeys: new r.Array(r.uint16, 256),\n subHeaderCount: function subHeaderCount(t) {\n return Math.max.apply(Math, t.subHeaderKeys);\n },\n subHeaders: new r.LazyArray(SubHeader, 'subHeaderCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, 'subHeaderCount')\n },\n 4: {\n // Segment mapping to delta values\n length: r.uint16,\n // Total table length in bytes\n language: r.uint16,\n // Language code\n segCountX2: r.uint16,\n segCount: function segCount(t) {\n return t.segCountX2 >> 1;\n },\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n endCode: new r.LazyArray(r.uint16, 'segCount'),\n reservedPad: new r.Reserved(r.uint16),\n // This value should be zero\n startCode: new r.LazyArray(r.uint16, 'segCount'),\n idDelta: new r.LazyArray(r.int16, 'segCount'),\n idRangeOffset: new r.LazyArray(r.uint16, 'segCount'),\n glyphIndexArray: new r.LazyArray(r.uint16, function (t) {\n return (t.length - t._currentOffset) / 2;\n })\n },\n 6: {\n // Trimmed table\n length: r.uint16,\n language: r.uint16,\n firstCode: r.uint16,\n entryCount: r.uint16,\n glyphIndices: new r.LazyArray(r.uint16, 'entryCount')\n },\n 8: {\n // mixed 16-bit and 32-bit coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint16,\n is32: new r.LazyArray(r.uint8, 8192),\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n 10: {\n // Trimmed Array\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n firstCode: r.uint32,\n entryCount: r.uint32,\n glyphIndices: new r.LazyArray(r.uint16, 'numChars')\n },\n 12: {\n // Segmented coverage\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n 13: {\n // Many-to-one range mappings (same as 12 except for group.startGlyphID)\n reserved: new r.Reserved(r.uint16),\n length: r.uint32,\n language: r.uint32,\n nGroups: r.uint32,\n groups: new r.LazyArray(CmapGroup, 'nGroups')\n },\n 14: {\n // Unicode Variation Sequences\n length: r.uint32,\n numRecords: r.uint32,\n varSelectors: new r.LazyArray(VarSelectorRecord, 'numRecords')\n }\n});\nvar CmapEntry = new r.Struct({\n platformID: r.uint16,\n // Platform identifier\n encodingID: r.uint16,\n // Platform-specific encoding identifier\n table: new r.Pointer(r.uint32, CmapSubtable, {\n type: 'parent',\n lazy: true\n })\n}); // character to glyph mapping\n\nvar cmap = new r.Struct({\n version: r.uint16,\n numSubtables: r.uint16,\n tables: new r.Array(CmapEntry, 'numSubtables')\n});\nvar head = new r.Struct({\n version: r.int32,\n // 0x00010000 (version 1.0)\n revision: r.int32,\n // set by font manufacturer\n checkSumAdjustment: r.uint32,\n magicNumber: r.uint32,\n // set to 0x5F0F3CF5\n flags: r.uint16,\n unitsPerEm: r.uint16,\n // range from 64 to 16384\n created: new r.Array(r.int32, 2),\n modified: new r.Array(r.int32, 2),\n xMin: r.int16,\n // for all glyph bounding boxes\n yMin: r.int16,\n // for all glyph bounding boxes\n xMax: r.int16,\n // for all glyph bounding boxes\n yMax: r.int16,\n // for all glyph bounding boxes\n macStyle: new r.Bitfield(r.uint16, ['bold', 'italic', 'underline', 'outline', 'shadow', 'condensed', 'extended']),\n lowestRecPPEM: r.uint16,\n // smallest readable size in pixels\n fontDirectionHint: r.int16,\n indexToLocFormat: r.int16,\n // 0 for short offsets, 1 for long\n glyphDataFormat: r.int16 // 0 for current format\n});\nvar hhea = new r.Struct({\n version: r.int32,\n ascent: r.int16,\n // Distance from baseline of highest ascender\n descent: r.int16,\n // Distance from baseline of lowest descender\n lineGap: r.int16,\n // Typographic line gap\n advanceWidthMax: r.uint16,\n // Maximum advance width value in 'hmtx' table\n minLeftSideBearing: r.int16,\n // Maximum advance width value in 'hmtx' table\n minRightSideBearing: r.int16,\n // Minimum right sidebearing value\n xMaxExtent: r.int16,\n caretSlopeRise: r.int16,\n // Used to calculate the slope of the cursor (rise/run); 1 for vertical\n caretSlopeRun: r.int16,\n // 0 for vertical\n caretOffset: r.int16,\n // Set to 0 for non-slanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16,\n // 0 for current format\n numberOfMetrics: r.uint16 // Number of advance widths in 'hmtx' table\n});\nvar HmtxEntry = new r.Struct({\n advance: r.uint16,\n bearing: r.int16\n});\nvar hmtx = new r.Struct({\n metrics: new r.LazyArray(HmtxEntry, function (t) {\n return t.parent.hhea.numberOfMetrics;\n }),\n bearings: new r.LazyArray(r.int16, function (t) {\n return t.parent.maxp.numGlyphs - t.parent.hhea.numberOfMetrics;\n })\n});\nvar maxp = new r.Struct({\n version: r.int32,\n numGlyphs: r.uint16,\n // The number of glyphs in the font\n maxPoints: r.uint16,\n // Maximum points in a non-composite glyph\n maxContours: r.uint16,\n // Maximum contours in a non-composite glyph\n maxComponentPoints: r.uint16,\n // Maximum points in a composite glyph\n maxComponentContours: r.uint16,\n // Maximum contours in a composite glyph\n maxZones: r.uint16,\n // 1 if instructions do not use the twilight zone, 2 otherwise\n maxTwilightPoints: r.uint16,\n // Maximum points used in Z0\n maxStorage: r.uint16,\n // Number of Storage Area locations\n maxFunctionDefs: r.uint16,\n // Number of FDEFs\n maxInstructionDefs: r.uint16,\n // Number of IDEFs\n maxStackElements: r.uint16,\n // Maximum stack depth\n maxSizeOfInstructions: r.uint16,\n // Maximum byte count for glyph instructions\n maxComponentElements: r.uint16,\n // Maximum number of components referenced at “top level” for any composite glyph\n maxComponentDepth: r.uint16 // Maximum levels of recursion; 1 for simple components\n});\n\n/**\r\n * Gets an encoding name from platform, encoding, and language ids.\r\n * Returned encoding names can be used in iconv-lite to decode text.\r\n */\nfunction getEncoding(platformID, encodingID, languageID) {\n if (languageID === void 0) {\n languageID = 0;\n }\n if (platformID === 1 && MAC_LANGUAGE_ENCODINGS[languageID]) {\n return MAC_LANGUAGE_ENCODINGS[languageID];\n }\n return ENCODINGS[platformID][encodingID];\n} // Map of platform ids to encoding ids.\n\nvar ENCODINGS = [\n// unicode\n['utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be', 'utf16be'],\n// macintosh\n// Mappings available at http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/\n// 0\tRoman 17\tMalayalam\n// 1\tJapanese\t 18\tSinhalese\n// 2\tTraditional Chinese\t 19\tBurmese\n// 3\tKorean\t 20\tKhmer\n// 4\tArabic\t 21\tThai\n// 5\tHebrew\t 22\tLaotian\n// 6\tGreek\t 23\tGeorgian\n// 7\tRussian\t 24\tArmenian\n// 8\tRSymbol\t 25\tSimplified Chinese\n// 9\tDevanagari\t 26\tTibetan\n// 10\tGurmukhi\t 27\tMongolian\n// 11\tGujarati\t 28\tGeez\n// 12\tOriya\t 29\tSlavic\n// 13\tBengali\t 30\tVietnamese\n// 14\tTamil\t 31\tSindhi\n// 15\tTelugu\t 32\t(Uninterpreted)\n// 16\tKannada\n['macroman', 'shift-jis', 'big5', 'euc-kr', 'iso-8859-6', 'iso-8859-8', 'macgreek', 'maccyrillic', 'symbol', 'Devanagari', 'Gurmukhi', 'Gujarati', 'Oriya', 'Bengali', 'Tamil', 'Telugu', 'Kannada', 'Malayalam', 'Sinhalese', 'Burmese', 'Khmer', 'macthai', 'Laotian', 'Georgian', 'Armenian', 'gb-2312-80', 'Tibetan', 'Mongolian', 'Geez', 'maccenteuro', 'Vietnamese', 'Sindhi'],\n// ISO (deprecated)\n['ascii'],\n// windows\n// Docs here: http://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx\n['symbol', 'utf16be', 'shift-jis', 'gb18030', 'big5', 'wansung', 'johab', null, null, null, 'utf16be']]; // Overrides for Mac scripts by language id.\n// See http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt\n\nvar MAC_LANGUAGE_ENCODINGS = {\n 15: 'maciceland',\n 17: 'macturkish',\n 18: 'maccroatian',\n 24: 'maccenteuro',\n 25: 'maccenteuro',\n 26: 'maccenteuro',\n 27: 'maccenteuro',\n 28: 'maccenteuro',\n 30: 'maciceland',\n 37: 'macromania',\n 38: 'maccenteuro',\n 39: 'maccenteuro',\n 40: 'maccenteuro',\n 143: 'macinuit',\n // Unsupported by iconv-lite\n 146: 'macgaelic' // Unsupported by iconv-lite\n}; // Map of platform ids to BCP-47 language codes.\n\nvar LANGUAGES = [\n// unicode\n[], {\n // macintosh\n 0: 'en',\n 30: 'fo',\n 60: 'ks',\n 90: 'rw',\n 1: 'fr',\n 31: 'fa',\n 61: 'ku',\n 91: 'rn',\n 2: 'de',\n 32: 'ru',\n 62: 'sd',\n 92: 'ny',\n 3: 'it',\n 33: 'zh',\n 63: 'bo',\n 93: 'mg',\n 4: 'nl',\n 34: 'nl-BE',\n 64: 'ne',\n 94: 'eo',\n 5: 'sv',\n 35: 'ga',\n 65: 'sa',\n 128: 'cy',\n 6: 'es',\n 36: 'sq',\n 66: 'mr',\n 129: 'eu',\n 7: 'da',\n 37: 'ro',\n 67: 'bn',\n 130: 'ca',\n 8: 'pt',\n 38: 'cz',\n 68: 'as',\n 131: 'la',\n 9: 'no',\n 39: 'sk',\n 69: 'gu',\n 132: 'qu',\n 10: 'he',\n 40: 'si',\n 70: 'pa',\n 133: 'gn',\n 11: 'ja',\n 41: 'yi',\n 71: 'or',\n 134: 'ay',\n 12: 'ar',\n 42: 'sr',\n 72: 'ml',\n 135: 'tt',\n 13: 'fi',\n 43: 'mk',\n 73: 'kn',\n 136: 'ug',\n 14: 'el',\n 44: 'bg',\n 74: 'ta',\n 137: 'dz',\n 15: 'is',\n 45: 'uk',\n 75: 'te',\n 138: 'jv',\n 16: 'mt',\n 46: 'be',\n 76: 'si',\n 139: 'su',\n 17: 'tr',\n 47: 'uz',\n 77: 'my',\n 140: 'gl',\n 18: 'hr',\n 48: 'kk',\n 78: 'km',\n 141: 'af',\n 19: 'zh-Hant',\n 49: 'az-Cyrl',\n 79: 'lo',\n 142: 'br',\n 20: 'ur',\n 50: 'az-Arab',\n 80: 'vi',\n 143: 'iu',\n 21: 'hi',\n 51: 'hy',\n 81: 'id',\n 144: 'gd',\n 22: 'th',\n 52: 'ka',\n 82: 'tl',\n 145: 'gv',\n 23: 'ko',\n 53: 'mo',\n 83: 'ms',\n 146: 'ga',\n 24: 'lt',\n 54: 'ky',\n 84: 'ms-Arab',\n 147: 'to',\n 25: 'pl',\n 55: 'tg',\n 85: 'am',\n 148: 'el-polyton',\n 26: 'hu',\n 56: 'tk',\n 86: 'ti',\n 149: 'kl',\n 27: 'es',\n 57: 'mn-CN',\n 87: 'om',\n 150: 'az',\n 28: 'lv',\n 58: 'mn',\n 88: 'so',\n 151: 'nn',\n 29: 'se',\n 59: 'ps',\n 89: 'sw'\n},\n// ISO (deprecated)\n[], {\n // windows \n 0x0436: 'af',\n 0x4009: 'en-IN',\n 0x0487: 'rw',\n 0x0432: 'tn',\n 0x041C: 'sq',\n 0x1809: 'en-IE',\n 0x0441: 'sw',\n 0x045B: 'si',\n 0x0484: 'gsw',\n 0x2009: 'en-JM',\n 0x0457: 'kok',\n 0x041B: 'sk',\n 0x045E: 'am',\n 0x4409: 'en-MY',\n 0x0412: 'ko',\n 0x0424: 'sl',\n 0x1401: 'ar-DZ',\n 0x1409: 'en-NZ',\n 0x0440: 'ky',\n 0x2C0A: 'es-AR',\n 0x3C01: 'ar-BH',\n 0x3409: 'en-PH',\n 0x0454: 'lo',\n 0x400A: 'es-BO',\n 0x0C01: 'ar',\n 0x4809: 'en-SG',\n 0x0426: 'lv',\n 0x340A: 'es-CL',\n 0x0801: 'ar-IQ',\n 0x1C09: 'en-ZA',\n 0x0427: 'lt',\n 0x240A: 'es-CO',\n 0x2C01: 'ar-JO',\n 0x2C09: 'en-TT',\n 0x082E: 'dsb',\n 0x140A: 'es-CR',\n 0x3401: 'ar-KW',\n 0x0809: 'en-GB',\n 0x046E: 'lb',\n 0x1C0A: 'es-DO',\n 0x3001: 'ar-LB',\n 0x0409: 'en',\n 0x042F: 'mk',\n 0x300A: 'es-EC',\n 0x1001: 'ar-LY',\n 0x3009: 'en-ZW',\n 0x083E: 'ms-BN',\n 0x440A: 'es-SV',\n 0x1801: 'ary',\n 0x0425: 'et',\n 0x043E: 'ms',\n 0x100A: 'es-GT',\n 0x2001: 'ar-OM',\n 0x0438: 'fo',\n 0x044C: 'ml',\n 0x480A: 'es-HN',\n 0x4001: 'ar-QA',\n 0x0464: 'fil',\n 0x043A: 'mt',\n 0x080A: 'es-MX',\n 0x0401: 'ar-SA',\n 0x040B: 'fi',\n 0x0481: 'mi',\n 0x4C0A: 'es-NI',\n 0x2801: 'ar-SY',\n 0x080C: 'fr-BE',\n 0x047A: 'arn',\n 0x180A: 'es-PA',\n 0x1C01: 'aeb',\n 0x0C0C: 'fr-CA',\n 0x044E: 'mr',\n 0x3C0A: 'es-PY',\n 0x3801: 'ar-AE',\n 0x040C: 'fr',\n 0x047C: 'moh',\n 0x280A: 'es-PE',\n 0x2401: 'ar-YE',\n 0x140C: 'fr-LU',\n 0x0450: 'mn',\n 0x500A: 'es-PR',\n 0x042B: 'hy',\n 0x180C: 'fr-MC',\n 0x0850: 'mn-CN',\n 0x0C0A: 'es',\n 0x044D: 'as',\n 0x100C: 'fr-CH',\n 0x0461: 'ne',\n 0x040A: 'es',\n 0x082C: 'az-Cyrl',\n 0x0462: 'fy',\n 0x0414: 'nb',\n 0x540A: 'es-US',\n 0x042C: 'az',\n 0x0456: 'gl',\n 0x0814: 'nn',\n 0x380A: 'es-UY',\n 0x046D: 'ba',\n 0x0437: 'ka',\n 0x0482: 'oc',\n 0x200A: 'es-VE',\n 0x042D: 'eu',\n 0x0C07: 'de-AT',\n 0x0448: 'or',\n 0x081D: 'sv-FI',\n 0x0423: 'be',\n 0x0407: 'de',\n 0x0463: 'ps',\n 0x041D: 'sv',\n 0x0845: 'bn',\n 0x1407: 'de-LI',\n 0x0415: 'pl',\n 0x045A: 'syr',\n 0x0445: 'bn-IN',\n 0x1007: 'de-LU',\n 0x0416: 'pt',\n 0x0428: 'tg',\n 0x201A: 'bs-Cyrl',\n 0x0807: 'de-CH',\n 0x0816: 'pt-PT',\n 0x085F: 'tzm',\n 0x141A: 'bs',\n 0x0408: 'el',\n 0x0446: 'pa',\n 0x0449: 'ta',\n 0x047E: 'br',\n 0x046F: 'kl',\n 0x046B: 'qu-BO',\n 0x0444: 'tt',\n 0x0402: 'bg',\n 0x0447: 'gu',\n 0x086B: 'qu-EC',\n 0x044A: 'te',\n 0x0403: 'ca',\n 0x0468: 'ha',\n 0x0C6B: 'qu',\n 0x041E: 'th',\n 0x0C04: 'zh-HK',\n 0x040D: 'he',\n 0x0418: 'ro',\n 0x0451: 'bo',\n 0x1404: 'zh-MO',\n 0x0439: 'hi',\n 0x0417: 'rm',\n 0x041F: 'tr',\n 0x0804: 'zh',\n 0x040E: 'hu',\n 0x0419: 'ru',\n 0x0442: 'tk',\n 0x1004: 'zh-SG',\n 0x040F: 'is',\n 0x243B: 'smn',\n 0x0480: 'ug',\n 0x0404: 'zh-TW',\n 0x0470: 'ig',\n 0x103B: 'smj-NO',\n 0x0422: 'uk',\n 0x0483: 'co',\n 0x0421: 'id',\n 0x143B: 'smj',\n 0x042E: 'hsb',\n 0x041A: 'hr',\n 0x045D: 'iu',\n 0x0C3B: 'se-FI',\n 0x0420: 'ur',\n 0x101A: 'hr-BA',\n 0x085D: 'iu-Latn',\n 0x043B: 'se',\n 0x0843: 'uz-Cyrl',\n 0x0405: 'cs',\n 0x083C: 'ga',\n 0x083B: 'se-SE',\n 0x0443: 'uz',\n 0x0406: 'da',\n 0x0434: 'xh',\n 0x203B: 'sms',\n 0x042A: 'vi',\n 0x048C: 'prs',\n 0x0435: 'zu',\n 0x183B: 'sma-NO',\n 0x0452: 'cy',\n 0x0465: 'dv',\n 0x0410: 'it',\n 0x1C3B: 'sms',\n 0x0488: 'wo',\n 0x0813: 'nl-BE',\n 0x0810: 'it-CH',\n 0x044F: 'sa',\n 0x0485: 'sah',\n 0x0413: 'nl',\n 0x0411: 'ja',\n 0x1C1A: 'sr-Cyrl-BA',\n 0x0478: 'ii',\n 0x0C09: 'en-AU',\n 0x044B: 'kn',\n 0x0C1A: 'sr',\n 0x046A: 'yo',\n 0x2809: 'en-BZ',\n 0x043F: 'kk',\n 0x181A: 'sr-Latn-BA',\n 0x1009: 'en-CA',\n 0x0453: 'km',\n 0x081A: 'sr-Latn',\n 0x2409: 'en-029',\n 0x0486: 'quc',\n 0x046C: 'nso'\n}];\nvar NameRecord = new r.Struct({\n platformID: r.uint16,\n encodingID: r.uint16,\n languageID: r.uint16,\n nameID: r.uint16,\n length: r.uint16,\n string: new r.Pointer(r.uint16, new r.String('length', function (t) {\n return getEncoding(t.platformID, t.encodingID, t.languageID);\n }), {\n type: 'parent',\n relativeTo: function relativeTo(ctx) {\n return ctx.parent.stringOffset;\n },\n allowNull: false\n })\n});\nvar LangTagRecord = new r.Struct({\n length: r.uint16,\n tag: new r.Pointer(r.uint16, new r.String('length', 'utf16be'), {\n type: 'parent',\n relativeTo: function relativeTo(ctx) {\n return ctx.stringOffset;\n }\n })\n});\nvar NameTable = new r.VersionedStruct(r.uint16, {\n 0: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count')\n },\n 1: {\n count: r.uint16,\n stringOffset: r.uint16,\n records: new r.Array(NameRecord, 'count'),\n langTagCount: r.uint16,\n langTags: new r.Array(LangTagRecord, 'langTagCount')\n }\n});\nvar NAMES = ['copyright', 'fontFamily', 'fontSubfamily', 'uniqueSubfamily', 'fullName', 'version', 'postscriptName',\n// Note: A font may have only one PostScript name and that name must be ASCII.\n'trademark', 'manufacturer', 'designer', 'description', 'vendorURL', 'designerURL', 'license', 'licenseURL', null,\n// reserved\n'preferredFamily', 'preferredSubfamily', 'compatibleFull', 'sampleText', 'postscriptCIDFontName', 'wwsFamilyName', 'wwsSubfamilyName'];\nNameTable.process = function (stream) {\n var records = {};\n for (var _iterator = _createForOfIteratorHelperLoose(this.records), _step; !(_step = _iterator()).done;) {\n var record = _step.value;\n // find out what language this is for\n var language = LANGUAGES[record.platformID][record.languageID];\n if (language == null && this.langTags != null && record.languageID >= 0x8000) {\n language = this.langTags[record.languageID - 0x8000].tag;\n }\n if (language == null) {\n language = record.platformID + '-' + record.languageID;\n } // if the nameID is >= 256, it is a font feature record (AAT)\n\n var key = record.nameID >= 256 ? 'fontFeatures' : NAMES[record.nameID] || record.nameID;\n if (records[key] == null) {\n records[key] = {};\n }\n var obj = records[key];\n if (record.nameID >= 256) {\n obj = obj[record.nameID] || (obj[record.nameID] = {});\n }\n if (typeof record.string === 'string' || typeof obj[language] !== 'string') {\n obj[language] = record.string;\n }\n }\n this.records = records;\n};\nNameTable.preEncode = function () {\n if (Array.isArray(this.records)) return;\n this.version = 0;\n var records = [];\n for (var key in this.records) {\n var val = this.records[key];\n if (key === 'fontFeatures') continue;\n records.push({\n platformID: 3,\n encodingID: 1,\n languageID: 0x409,\n nameID: NAMES.indexOf(key),\n length: Buffer.byteLength(val.en, 'utf16le'),\n string: val.en\n });\n if (key === 'postscriptName') {\n records.push({\n platformID: 1,\n encodingID: 0,\n languageID: 0,\n nameID: NAMES.indexOf(key),\n length: val.en.length,\n string: val.en\n });\n }\n }\n this.records = records;\n this.count = records.length;\n this.stringOffset = NameTable.size(this, null, false);\n};\nvar OS2 = new r.VersionedStruct(r.uint16, {\n header: {\n xAvgCharWidth: r.int16,\n // average weighted advance width of lower case letters and space\n usWeightClass: r.uint16,\n // visual weight of stroke in glyphs\n usWidthClass: r.uint16,\n // relative change from the normal aspect ratio (width to height ratio)\n fsType: new r.Bitfield(r.uint16, [\n // Indicates font embedding licensing rights\n null, 'noEmbedding', 'viewOnly', 'editable', null, null, null, null, 'noSubsetting', 'bitmapOnly']),\n ySubscriptXSize: r.int16,\n // recommended horizontal size in pixels for subscripts\n ySubscriptYSize: r.int16,\n // recommended vertical size in pixels for subscripts\n ySubscriptXOffset: r.int16,\n // recommended horizontal offset for subscripts\n ySubscriptYOffset: r.int16,\n // recommended vertical offset form the baseline for subscripts\n ySuperscriptXSize: r.int16,\n // recommended horizontal size in pixels for superscripts\n ySuperscriptYSize: r.int16,\n // recommended vertical size in pixels for superscripts\n ySuperscriptXOffset: r.int16,\n // recommended horizontal offset for superscripts\n ySuperscriptYOffset: r.int16,\n // recommended vertical offset from the baseline for superscripts\n yStrikeoutSize: r.int16,\n // width of the strikeout stroke\n yStrikeoutPosition: r.int16,\n // position of the strikeout stroke relative to the baseline\n sFamilyClass: r.int16,\n // classification of font-family design\n panose: new r.Array(r.uint8, 10),\n // describe the visual characteristics of a given typeface\n ulCharRange: new r.Array(r.uint32, 4),\n vendorID: new r.String(4),\n // four character identifier for the font vendor\n fsSelection: new r.Bitfield(r.uint16, [\n // bit field containing information about the font\n 'italic', 'underscore', 'negative', 'outlined', 'strikeout', 'bold', 'regular', 'useTypoMetrics', 'wws', 'oblique']),\n usFirstCharIndex: r.uint16,\n // The minimum Unicode index in this font\n usLastCharIndex: r.uint16 // The maximum Unicode index in this font\n },\n // The Apple version of this table ends here, but the Microsoft one continues on...\n 0: {},\n 1: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2)\n },\n 2: {\n // these should be common with version 1 somehow\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16\n },\n 5: {\n typoAscender: r.int16,\n typoDescender: r.int16,\n typoLineGap: r.int16,\n winAscent: r.uint16,\n winDescent: r.uint16,\n codePageRange: new r.Array(r.uint32, 2),\n xHeight: r.int16,\n capHeight: r.int16,\n defaultChar: r.uint16,\n breakChar: r.uint16,\n maxContent: r.uint16,\n usLowerOpticalPointSize: r.uint16,\n usUpperOpticalPointSize: r.uint16\n }\n});\nvar versions = OS2.versions;\nversions[3] = versions[4] = versions[2];\nvar post = new r.VersionedStruct(r.fixed32, {\n header: {\n // these fields exist at the top of all versions\n italicAngle: r.fixed32,\n // Italic angle in counter-clockwise degrees from the vertical.\n underlinePosition: r.int16,\n // Suggested distance of the top of the underline from the baseline\n underlineThickness: r.int16,\n // Suggested values for the underline thickness\n isFixedPitch: r.uint32,\n // Whether the font is monospaced\n minMemType42: r.uint32,\n // Minimum memory usage when a TrueType font is downloaded as a Type 42 font\n maxMemType42: r.uint32,\n // Maximum memory usage when a TrueType font is downloaded as a Type 42 font\n minMemType1: r.uint32,\n // Minimum memory usage when a TrueType font is downloaded as a Type 1 font\n maxMemType1: r.uint32 // Maximum memory usage when a TrueType font is downloaded as a Type 1 font\n },\n 1: {},\n // version 1 has no additional fields\n 2: {\n numberOfGlyphs: r.uint16,\n glyphNameIndex: new r.Array(r.uint16, 'numberOfGlyphs'),\n names: new r.Array(new r.String(r.uint8))\n },\n 2.5: {\n numberOfGlyphs: r.uint16,\n offsets: new r.Array(r.uint8, 'numberOfGlyphs')\n },\n 3: {},\n // version 3 has no additional fields\n 4: {\n map: new r.Array(r.uint32, function (t) {\n return t.parent.maxp.numGlyphs;\n })\n }\n});\nvar cvt = new r.Struct({\n controlValues: new r.Array(r.int16)\n});\n\n// These instructions are known as the font program. The main use of this table\n// is for the definition of functions that are used in many different glyph programs.\n\nvar fpgm = new r.Struct({\n instructions: new r.Array(r.uint8)\n});\nvar loca = new r.VersionedStruct('head.indexToLocFormat', {\n 0: {\n offsets: new r.Array(r.uint16)\n },\n 1: {\n offsets: new r.Array(r.uint32)\n }\n});\nloca.process = function () {\n if (this.version === 0) {\n for (var i = 0; i < this.offsets.length; i++) {\n this.offsets[i] <<= 1;\n }\n }\n};\nloca.preEncode = function () {\n if (this.version === 0) {\n for (var i = 0; i < this.offsets.length; i++) {\n this.offsets[i] >>>= 1;\n }\n }\n};\nvar prep = new r.Struct({\n controlValueProgram: new r.Array(r.uint8)\n});\nvar glyf = new r.Array(new r.Buffer());\nvar CFFIndex = /*#__PURE__*/function () {\n function CFFIndex(type) {\n this.type = type;\n }\n var _proto = CFFIndex.prototype;\n _proto.getCFFVersion = function getCFFVersion(ctx) {\n while (ctx && !ctx.hdrSize) {\n ctx = ctx.parent;\n }\n return ctx ? ctx.version : -1;\n };\n _proto.decode = function decode(stream, parent) {\n var version = this.getCFFVersion(parent);\n var count = version >= 2 ? stream.readUInt32BE() : stream.readUInt16BE();\n if (count === 0) {\n return [];\n }\n var offSize = stream.readUInt8();\n var offsetType;\n if (offSize === 1) {\n offsetType = r.uint8;\n } else if (offSize === 2) {\n offsetType = r.uint16;\n } else if (offSize === 3) {\n offsetType = r.uint24;\n } else if (offSize === 4) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset size in CFFIndex: \".concat(offSize, \" \").concat(stream.pos));\n }\n var ret = [];\n var startPos = stream.pos + (count + 1) * offSize - 1;\n var start = offsetType.decode(stream);\n for (var i = 0; i < count; i++) {\n var end = offsetType.decode(stream);\n if (this.type != null) {\n var pos = stream.pos;\n stream.pos = startPos + start;\n parent.length = end - start;\n ret.push(this.type.decode(stream, parent));\n stream.pos = pos;\n } else {\n ret.push({\n offset: startPos + start,\n length: end - start\n });\n }\n start = end;\n }\n stream.pos = startPos + start;\n return ret;\n };\n _proto.size = function size(arr, parent) {\n var size = 2;\n if (arr.length === 0) {\n return size;\n }\n var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n var offset = 1;\n for (var i = 0; i < arr.length; i++) {\n var item = arr[i];\n offset += type.size(item, parent);\n }\n var offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n }\n size += 1 + offsetType.size() * (arr.length + 1);\n size += offset - 1;\n return size;\n };\n _proto.encode = function encode(stream, arr, parent) {\n stream.writeUInt16BE(arr.length);\n if (arr.length === 0) {\n return;\n }\n var type = this.type || new r.Buffer(); // find maximum offset to detminine offset type\n\n var sizes = [];\n var offset = 1;\n for (var _iterator2 = _createForOfIteratorHelperLoose(arr), _step2; !(_step2 = _iterator2()).done;) {\n var item = _step2.value;\n var s = type.size(item, parent);\n sizes.push(s);\n offset += s;\n }\n var offsetType;\n if (offset <= 0xff) {\n offsetType = r.uint8;\n } else if (offset <= 0xffff) {\n offsetType = r.uint16;\n } else if (offset <= 0xffffff) {\n offsetType = r.uint24;\n } else if (offset <= 0xffffffff) {\n offsetType = r.uint32;\n } else {\n throw new Error(\"Bad offset in CFFIndex\");\n } // write offset size\n\n stream.writeUInt8(offsetType.size()); // write elements\n\n offset = 1;\n offsetType.encode(stream, offset);\n for (var _i22 = 0, _sizes = sizes; _i22 < _sizes.length; _i22++) {\n var size = _sizes[_i22];\n offset += size;\n offsetType.encode(stream, offset);\n }\n for (var _iterator3 = _createForOfIteratorHelperLoose(arr), _step3; !(_step3 = _iterator3()).done;) {\n var _item = _step3.value;\n type.encode(stream, _item, parent);\n }\n return;\n };\n return CFFIndex;\n}();\nvar FLOAT_EOF = 0xf;\nvar FLOAT_LOOKUP = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-'];\nvar FLOAT_ENCODE_LOOKUP = {\n '.': 10,\n 'E': 11,\n 'E-': 12,\n '-': 14\n};\nvar CFFOperand = /*#__PURE__*/function () {\n function CFFOperand() {}\n CFFOperand.decode = function decode(stream, value) {\n if (32 <= value && value <= 246) {\n return value - 139;\n }\n if (247 <= value && value <= 250) {\n return (value - 247) * 256 + stream.readUInt8() + 108;\n }\n if (251 <= value && value <= 254) {\n return -(value - 251) * 256 - stream.readUInt8() - 108;\n }\n if (value === 28) {\n return stream.readInt16BE();\n }\n if (value === 29) {\n return stream.readInt32BE();\n }\n if (value === 30) {\n var str = '';\n while (true) {\n var b = stream.readUInt8();\n var n1 = b >> 4;\n if (n1 === FLOAT_EOF) {\n break;\n }\n str += FLOAT_LOOKUP[n1];\n var n2 = b & 15;\n if (n2 === FLOAT_EOF) {\n break;\n }\n str += FLOAT_LOOKUP[n2];\n }\n return parseFloat(str);\n }\n return null;\n };\n CFFOperand.size = function size(value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, set to 32768\n if (value.forceLarge) {\n value = 32768;\n }\n if ((value | 0) !== value) {\n // floating point\n var str = '' + value;\n return 1 + Math.ceil((str.length + 1) / 2);\n } else if (-107 <= value && value <= 107) {\n return 1;\n } else if (108 <= value && value <= 1131 || -1131 <= value && value <= -108) {\n return 2;\n } else if (-32768 <= value && value <= 32767) {\n return 3;\n } else {\n return 5;\n }\n };\n CFFOperand.encode = function encode(stream, value) {\n // if the value needs to be forced to the largest size (32 bit)\n // e.g. for unknown pointers, save the old value and set to 32768\n var val = Number(value);\n if (value.forceLarge) {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n } else if ((val | 0) !== val) {\n // floating point\n stream.writeUInt8(30);\n var str = '' + val;\n for (var i = 0; i < str.length; i += 2) {\n var c1 = str[i];\n var n1 = FLOAT_ENCODE_LOOKUP[c1] || +c1;\n if (i === str.length - 1) {\n var n2 = FLOAT_EOF;\n } else {\n var c2 = str[i + 1];\n var n2 = FLOAT_ENCODE_LOOKUP[c2] || +c2;\n }\n stream.writeUInt8(n1 << 4 | n2 & 15);\n }\n if (n2 !== FLOAT_EOF) {\n return stream.writeUInt8(FLOAT_EOF << 4);\n }\n } else if (-107 <= val && val <= 107) {\n return stream.writeUInt8(val + 139);\n } else if (108 <= val && val <= 1131) {\n val -= 108;\n stream.writeUInt8((val >> 8) + 247);\n return stream.writeUInt8(val & 0xff);\n } else if (-1131 <= val && val <= -108) {\n val = -val - 108;\n stream.writeUInt8((val >> 8) + 251);\n return stream.writeUInt8(val & 0xff);\n } else if (-32768 <= val && val <= 32767) {\n stream.writeUInt8(28);\n return stream.writeInt16BE(val);\n } else {\n stream.writeUInt8(29);\n return stream.writeInt32BE(val);\n }\n };\n return CFFOperand;\n}();\nvar CFFDict = /*#__PURE__*/function () {\n function CFFDict(ops) {\n if (ops === void 0) {\n ops = [];\n }\n this.ops = ops;\n this.fields = {};\n for (var _iterator4 = _createForOfIteratorHelperLoose(ops), _step4; !(_step4 = _iterator4()).done;) {\n var field = _step4.value;\n var key = Array.isArray(field[0]) ? field[0][0] << 8 | field[0][1] : field[0];\n this.fields[key] = field;\n }\n }\n var _proto2 = CFFDict.prototype;\n _proto2.decodeOperands = function decodeOperands(type, stream, ret, operands) {\n var _this = this;\n if (Array.isArray(type)) {\n return operands.map(function (op, i) {\n return _this.decodeOperands(type[i], stream, ret, [op]);\n });\n } else if (type.decode != null) {\n return type.decode(stream, ret, operands);\n } else {\n switch (type) {\n case 'number':\n case 'offset':\n case 'sid':\n return operands[0];\n case 'boolean':\n return !!operands[0];\n default:\n return operands;\n }\n }\n };\n _proto2.encodeOperands = function encodeOperands(type, stream, ctx, operands) {\n var _this2 = this;\n if (Array.isArray(type)) {\n return operands.map(function (op, i) {\n return _this2.encodeOperands(type[i], stream, ctx, op)[0];\n });\n } else if (type.encode != null) {\n return type.encode(stream, operands, ctx);\n } else if (typeof operands === 'number') {\n return [operands];\n } else if (typeof operands === 'boolean') {\n return [+operands];\n } else if (Array.isArray(operands)) {\n return operands;\n } else {\n return [operands];\n }\n };\n _proto2.decode = function decode(stream, parent) {\n var end = stream.pos + parent.length;\n var ret = {};\n var operands = []; // define hidden properties\n\n Object.defineProperties(ret, {\n parent: {\n value: parent\n },\n _startOffset: {\n value: stream.pos\n }\n }); // fill in defaults\n\n for (var key in this.fields) {\n var field = this.fields[key];\n ret[field[1]] = field[3];\n }\n while (stream.pos < end) {\n var b = stream.readUInt8();\n if (b < 28) {\n if (b === 12) {\n b = b << 8 | stream.readUInt8();\n }\n var _field = this.fields[b];\n if (!_field) {\n throw new Error(\"Unknown operator \".concat(b));\n }\n var val = this.decodeOperands(_field[2], stream, ret, operands);\n if (val != null) {\n if (val instanceof utils.PropertyDescriptor) {\n Object.defineProperty(ret, _field[1], val);\n } else {\n ret[_field[1]] = val;\n }\n }\n operands = [];\n } else {\n operands.push(CFFOperand.decode(stream, b));\n }\n }\n return ret;\n };\n _proto2.size = function size(dict, parent, includePointers) {\n if (includePointers === void 0) {\n includePointers = true;\n }\n var ctx = {\n parent: parent,\n val: dict,\n pointerSize: 0,\n startOffset: parent.startOffset || 0\n };\n var len = 0;\n for (var k in this.fields) {\n var field = this.fields[k];\n var val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n var operands = this.encodeOperands(field[2], null, ctx, val);\n for (var _iterator5 = _createForOfIteratorHelperLoose(operands), _step5; !(_step5 = _iterator5()).done;) {\n var op = _step5.value;\n len += CFFOperand.size(op);\n }\n var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n len += key.length;\n }\n if (includePointers) {\n len += ctx.pointerSize;\n }\n return len;\n };\n _proto2.encode = function encode(stream, dict, parent) {\n var ctx = {\n pointers: [],\n startOffset: stream.pos,\n parent: parent,\n val: dict,\n pointerSize: 0\n };\n ctx.pointerOffset = stream.pos + this.size(dict, ctx, false);\n for (var _iterator6 = _createForOfIteratorHelperLoose(this.ops), _step6; !(_step6 = _iterator6()).done;) {\n var field = _step6.value;\n var val = dict[field[1]];\n if (val == null || isEqual(val, field[3])) {\n continue;\n }\n var operands = this.encodeOperands(field[2], stream, ctx, val);\n for (var _iterator7 = _createForOfIteratorHelperLoose(operands), _step7; !(_step7 = _iterator7()).done;) {\n var op = _step7.value;\n CFFOperand.encode(stream, op);\n }\n var key = Array.isArray(field[0]) ? field[0] : [field[0]];\n for (var _iterator8 = _createForOfIteratorHelperLoose(key), _step8; !(_step8 = _iterator8()).done;) {\n var _op = _step8.value;\n stream.writeUInt8(_op);\n }\n }\n var i = 0;\n while (i < ctx.pointers.length) {\n var ptr = ctx.pointers[i++];\n ptr.type.encode(stream, ptr.val, ptr.parent);\n }\n return;\n };\n return CFFDict;\n}();\nvar CFFPointer = /*#__PURE__*/function (_r$Pointer) {\n _inheritsLoose(CFFPointer, _r$Pointer);\n function CFFPointer(type, options) {\n if (options === void 0) {\n options = {};\n }\n if (options.type == null) {\n options.type = 'global';\n }\n return _r$Pointer.call(this, null, type, options) || this;\n }\n var _proto3 = CFFPointer.prototype;\n _proto3.decode = function decode(stream, parent, operands) {\n this.offsetType = {\n decode: function decode() {\n return operands[0];\n }\n };\n return _r$Pointer.prototype.decode.call(this, stream, parent, operands);\n };\n _proto3.encode = function encode(stream, value, ctx) {\n if (!stream) {\n // compute the size (so ctx.pointerSize is correct)\n this.offsetType = {\n size: function size() {\n return 0;\n }\n };\n this.size(value, ctx);\n return [new Ptr(0)];\n }\n var ptr = null;\n this.offsetType = {\n encode: function encode(stream, val) {\n return ptr = val;\n }\n };\n _r$Pointer.prototype.encode.call(this, stream, value, ctx);\n return [new Ptr(ptr)];\n };\n return CFFPointer;\n}(r.Pointer);\nvar Ptr = /*#__PURE__*/function () {\n function Ptr(val) {\n this.val = val;\n this.forceLarge = true;\n }\n var _proto4 = Ptr.prototype;\n _proto4.valueOf = function valueOf() {\n return this.val;\n };\n return Ptr;\n}();\nvar CFFBlendOp = /*#__PURE__*/function () {\n function CFFBlendOp() {}\n CFFBlendOp.decode = function decode(stream, parent, operands) {\n var numBlends = operands.pop(); // TODO: actually blend. For now just consume the deltas\n // since we don't use any of the values anyway.\n\n while (operands.length > numBlends) {\n operands.pop();\n }\n };\n return CFFBlendOp;\n}();\nvar CFFPrivateDict = new CFFDict([\n// key name type default\n[6, 'BlueValues', 'delta', null], [7, 'OtherBlues', 'delta', null], [8, 'FamilyBlues', 'delta', null], [9, 'FamilyOtherBlues', 'delta', null], [[12, 9], 'BlueScale', 'number', 0.039625], [[12, 10], 'BlueShift', 'number', 7], [[12, 11], 'BlueFuzz', 'number', 1], [10, 'StdHW', 'number', null], [11, 'StdVW', 'number', null], [[12, 12], 'StemSnapH', 'delta', null], [[12, 13], 'StemSnapV', 'delta', null], [[12, 14], 'ForceBold', 'boolean', false], [[12, 17], 'LanguageGroup', 'number', 0], [[12, 18], 'ExpansionFactor', 'number', 0.06], [[12, 19], 'initialRandomSeed', 'number', 0], [20, 'defaultWidthX', 'number', 0], [21, 'nominalWidthX', 'number', 0], [22, 'vsindex', 'number', 0], [23, 'blend', CFFBlendOp, null], [19, 'Subrs', new CFFPointer(new CFFIndex(), {\n type: 'local'\n}), null]]);\n\n// Automatically generated from Appendix A of the CFF specification; do\n// not edit. Length should be 391.\nvar standardStrings = [\".notdef\", \"space\", \"exclam\", \"quotedbl\", \"numbersign\", \"dollar\", \"percent\", \"ampersand\", \"quoteright\", \"parenleft\", \"parenright\", \"asterisk\", \"plus\", \"comma\", \"hyphen\", \"period\", \"slash\", \"zero\", \"one\", \"two\", \"three\", \"four\", \"five\", \"six\", \"seven\", \"eight\", \"nine\", \"colon\", \"semicolon\", \"less\", \"equal\", \"greater\", \"question\", \"at\", \"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\", \"bracketleft\", \"backslash\", \"bracketright\", \"asciicircum\", \"underscore\", \"quoteleft\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\", \"g\", \"h\", \"i\", \"j\", \"k\", \"l\", \"m\", \"n\", \"o\", \"p\", \"q\", \"r\", \"s\", \"t\", \"u\", \"v\", \"w\", \"x\", \"y\", \"z\", \"braceleft\", \"bar\", \"braceright\", \"asciitilde\", \"exclamdown\", \"cent\", \"sterling\", \"fraction\", \"yen\", \"florin\", \"section\", \"currency\", \"quotesingle\", \"quotedblleft\", \"guillemotleft\", \"guilsinglleft\", \"guilsinglright\", \"fi\", \"fl\", \"endash\", \"dagger\", \"daggerdbl\", \"periodcentered\", \"paragraph\", \"bullet\", \"quotesinglbase\", \"quotedblbase\", \"quotedblright\", \"guillemotright\", \"ellipsis\", \"perthousand\", \"questiondown\", \"grave\", \"acute\", \"circumflex\", \"tilde\", \"macron\", \"breve\", \"dotaccent\", \"dieresis\", \"ring\", \"cedilla\", \"hungarumlaut\", \"ogonek\", \"caron\", \"emdash\", \"AE\", \"ordfeminine\", \"Lslash\", \"Oslash\", \"OE\", \"ordmasculine\", \"ae\", \"dotlessi\", \"lslash\", \"oslash\", \"oe\", \"germandbls\", \"onesuperior\", \"logicalnot\", \"mu\", \"trademark\", \"Eth\", \"onehalf\", \"plusminus\", \"Thorn\", \"onequarter\", \"divide\", \"brokenbar\", \"degree\", \"thorn\", \"threequarters\", \"twosuperior\", \"registered\", \"minus\", \"eth\", \"multiply\", \"threesuperior\", \"copyright\", \"Aacute\", \"Acircumflex\", \"Adieresis\", \"Agrave\", \"Aring\", \"Atilde\", \"Ccedilla\", \"Eacute\", \"Ecircumflex\", \"Edieresis\", \"Egrave\", \"Iacute\", \"Icircumflex\", \"Idieresis\", \"Igrave\", \"Ntilde\", \"Oacute\", \"Ocircumflex\", \"Odieresis\", \"Ograve\", \"Otilde\", \"Scaron\", \"Uacute\", \"Ucircumflex\", \"Udieresis\", \"Ugrave\", \"Yacute\", \"Ydieresis\", \"Zcaron\", \"aacute\", \"acircumflex\", \"adieresis\", \"agrave\", \"aring\", \"atilde\", \"ccedilla\", \"eacute\", \"ecircumflex\", \"edieresis\", \"egrave\", \"iacute\", \"icircumflex\", \"idieresis\", \"igrave\", \"ntilde\", \"oacute\", \"ocircumflex\", \"odieresis\", \"ograve\", \"otilde\", \"scaron\", \"uacute\", \"ucircumflex\", \"udieresis\", \"ugrave\", \"yacute\", \"ydieresis\", \"zcaron\", \"exclamsmall\", \"Hungarumlautsmall\", \"dollaroldstyle\", \"dollarsuperior\", \"ampersandsmall\", \"Acutesmall\", \"parenleftsuperior\", \"parenrightsuperior\", \"twodotenleader\", \"onedotenleader\", \"zerooldstyle\", \"oneoldstyle\", \"twooldstyle\", \"threeoldstyle\", \"fouroldstyle\", \"fiveoldstyle\", \"sixoldstyle\", \"sevenoldstyle\", \"eightoldstyle\", \"nineoldstyle\", \"commasuperior\", \"threequartersemdash\", \"periodsuperior\", \"questionsmall\", \"asuperior\", \"bsuperior\", \"centsuperior\", \"dsuperior\", \"esuperior\", \"isuperior\", \"lsuperior\", \"msuperior\", \"nsuperior\", \"osuperior\", \"rsuperior\", \"ssuperior\", \"tsuperior\", \"ff\", \"ffi\", \"ffl\", \"parenleftinferior\", \"parenrightinferior\", \"Circumflexsmall\", \"hyphensuperior\", \"Gravesmall\", \"Asmall\", \"Bsmall\", \"Csmall\", \"Dsmall\", \"Esmall\", \"Fsmall\", \"Gsmall\", \"Hsmall\", \"Ismall\", \"Jsmall\", \"Ksmall\", \"Lsmall\", \"Msmall\", \"Nsmall\", \"Osmall\", \"Psmall\", \"Qsmall\", \"Rsmall\", \"Ssmall\", \"Tsmall\", \"Usmall\", \"Vsmall\", \"Wsmall\", \"Xsmall\", \"Ysmall\", \"Zsmall\", \"colonmonetary\", \"onefitted\", \"rupiah\", \"Tildesmall\", \"exclamdownsmall\", \"centoldstyle\", \"Lslashsmall\", \"Scaronsmall\", \"Zcaronsmall\", \"Dieresissmall\", \"Brevesmall\", \"Caronsmall\", \"Dotaccentsmall\", \"Macronsmall\", \"figuredash\", \"hypheninferior\", \"Ogoneksmall\", \"Ringsmall\", \"Cedillasmall\", \"questiondownsmall\", \"oneeighth\", \"threeeighths\", \"fiveeighths\", \"seveneighths\", \"onethird\", \"twothirds\", \"zerosuperior\", \"foursuperior\", \"fivesuperior\", \"sixsuperior\", \"sevensuperior\", \"eightsuperior\", \"ninesuperior\", \"zeroinferior\", \"oneinferior\", \"twoinferior\", \"threeinferior\", \"fourinferior\", \"fiveinferior\", \"sixinferior\", \"seveninferior\", \"eightinferior\", \"nineinferior\", \"centinferior\", \"dollarinferior\", \"periodinferior\", \"commainferior\", \"Agravesmall\", \"Aacutesmall\", \"Acircumflexsmall\", \"Atildesmall\", \"Adieresissmall\", \"Aringsmall\", \"AEsmall\", \"Ccedillasmall\", \"Egravesmall\", \"Eacutesmall\", \"Ecircumflexsmall\", \"Edieresissmall\", \"Igravesmall\", \"Iacutesmall\", \"Icircumflexsmall\", \"Idieresissmall\", \"Ethsmall\", \"Ntildesmall\", \"Ogravesmall\", \"Oacutesmall\", \"Ocircumflexsmall\", \"Otildesmall\", \"Odieresissmall\", \"OEsmall\", \"Oslashsmall\", \"Ugravesmall\", \"Uacutesmall\", \"Ucircumflexsmall\", \"Udieresissmall\", \"Yacutesmall\", \"Thornsmall\", \"Ydieresissmall\", \"001.000\", \"001.001\", \"001.002\", \"001.003\", \"Black\", \"Bold\", \"Book\", \"Light\", \"Medium\", \"Regular\", \"Roman\", \"Semibold\"];\nvar StandardEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger', 'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron', 'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '', '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '', 'lslash', 'oslash', 'oe', 'germandbls'];\nvar ExpertEncoding = ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior', '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '', '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ISOAdobeCharset = ['.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand', 'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE', 'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu', 'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn', 'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright', 'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex', 'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute', 'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute', 'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute', 'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave', 'yacute', 'ydieresis', 'zcaron'];\nvar ExpertCharset = ['.notdef', 'space', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior', 'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall', 'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall', 'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall', 'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall', 'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall', 'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', 'onequarter', 'onehalf', 'threequarters', 'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];\nvar ExpertSubsetCharset = ['.notdef', 'space', 'dollaroldstyle', 'dollarsuperior', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader', 'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon', 'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior', 'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'parenleftinferior', 'parenrightinferior', 'hyphensuperior', 'colonmonetary', 'onefitted', 'rupiah', 'centoldstyle', 'figuredash', 'hypheninferior', 'onequarter', 'onehalf', 'threequarters', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior'];\n\n// Scripts and Languages #\n//########################\n\nvar LangSysTable = new r.Struct({\n reserved: new r.Reserved(r.uint16),\n reqFeatureIndex: r.uint16,\n featureCount: r.uint16,\n featureIndexes: new r.Array(r.uint16, 'featureCount')\n});\nvar LangSysRecord = new r.Struct({\n tag: new r.String(4),\n langSys: new r.Pointer(r.uint16, LangSysTable, {\n type: 'parent'\n })\n});\nvar Script = new r.Struct({\n defaultLangSys: new r.Pointer(r.uint16, LangSysTable),\n count: r.uint16,\n langSysRecords: new r.Array(LangSysRecord, 'count')\n});\nvar ScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, Script, {\n type: 'parent'\n })\n});\nvar ScriptList = new r.Array(ScriptRecord, r.uint16); //#######################\n// Features and Lookups #\n//#######################\n\nvar Feature = new r.Struct({\n featureParams: r.uint16,\n // pointer\n lookupCount: r.uint16,\n lookupListIndexes: new r.Array(r.uint16, 'lookupCount')\n});\nvar FeatureRecord = new r.Struct({\n tag: new r.String(4),\n feature: new r.Pointer(r.uint16, Feature, {\n type: 'parent'\n })\n});\nvar FeatureList = new r.Array(FeatureRecord, r.uint16);\nvar LookupFlags = new r.Struct({\n markAttachmentType: r.uint8,\n flags: new r.Bitfield(r.uint8, ['rightToLeft', 'ignoreBaseGlyphs', 'ignoreLigatures', 'ignoreMarks', 'useMarkFilteringSet'])\n});\nfunction LookupList(SubTable) {\n var Lookup = new r.Struct({\n lookupType: r.uint16,\n flags: LookupFlags,\n subTableCount: r.uint16,\n subTables: new r.Array(new r.Pointer(r.uint16, SubTable), 'subTableCount'),\n markFilteringSet: new r.Optional(r.uint16, function (t) {\n return t.flags.flags.useMarkFilteringSet;\n })\n });\n return new r.LazyArray(new r.Pointer(r.uint16, Lookup), r.uint16);\n} //#################\n// Coverage Table #\n//#################\n\nvar RangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n startCoverageIndex: r.uint16\n});\nvar Coverage = new r.VersionedStruct(r.uint16, {\n 1: {\n glyphCount: r.uint16,\n glyphs: new r.Array(r.uint16, 'glyphCount')\n },\n 2: {\n rangeCount: r.uint16,\n rangeRecords: new r.Array(RangeRecord, 'rangeCount')\n }\n}); //#########################\n// Class Definition Table #\n//#########################\n\nvar ClassRangeRecord = new r.Struct({\n start: r.uint16,\n end: r.uint16,\n class: r.uint16\n});\nvar ClassDef = new r.VersionedStruct(r.uint16, {\n 1: {\n // Class array\n startGlyph: r.uint16,\n glyphCount: r.uint16,\n classValueArray: new r.Array(r.uint16, 'glyphCount')\n },\n 2: {\n // Class ranges\n classRangeCount: r.uint16,\n classRangeRecord: new r.Array(ClassRangeRecord, 'classRangeCount')\n }\n}); //###############\n// Device Table #\n//###############\n\nvar Device = new r.Struct({\n a: r.uint16,\n // startSize for hinting Device, outerIndex for VariationIndex\n b: r.uint16,\n // endSize for Device, innerIndex for VariationIndex\n deltaFormat: r.uint16\n}); //#############################################\n// Contextual Substitution/Positioning Tables #\n//#############################################\n\nvar LookupRecord = new r.Struct({\n sequenceIndex: r.uint16,\n lookupListIndex: r.uint16\n});\nvar Rule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n input: new r.Array(r.uint16, function (t) {\n return t.glyphCount - 1;\n }),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar RuleSet = new r.Array(new r.Pointer(r.uint16, Rule), r.uint16);\nvar ClassRule = new r.Struct({\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n classes: new r.Array(r.uint16, function (t) {\n return t.glyphCount - 1;\n }),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ClassSet = new r.Array(new r.Pointer(r.uint16, ClassRule), r.uint16);\nvar Context = new r.VersionedStruct(r.uint16, {\n 1: {\n // Simple context\n coverage: new r.Pointer(r.uint16, Coverage),\n ruleSetCount: r.uint16,\n ruleSets: new r.Array(new r.Pointer(r.uint16, RuleSet), 'ruleSetCount')\n },\n 2: {\n // Class-based context\n coverage: new r.Pointer(r.uint16, Coverage),\n classDef: new r.Pointer(r.uint16, ClassDef),\n classSetCnt: r.uint16,\n classSet: new r.Array(new r.Pointer(r.uint16, ClassSet), 'classSetCnt')\n },\n 3: {\n glyphCount: r.uint16,\n lookupCount: r.uint16,\n coverages: new r.Array(new r.Pointer(r.uint16, Coverage), 'glyphCount'),\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n}); //######################################################\n// Chaining Contextual Substitution/Positioning Tables #\n//######################################################\n\nvar ChainRule = new r.Struct({\n backtrackGlyphCount: r.uint16,\n backtrack: new r.Array(r.uint16, 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n input: new r.Array(r.uint16, function (t) {\n return t.inputGlyphCount - 1;\n }),\n lookaheadGlyphCount: r.uint16,\n lookahead: new r.Array(r.uint16, 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n});\nvar ChainRuleSet = new r.Array(new r.Pointer(r.uint16, ChainRule), r.uint16);\nvar ChainingContext = new r.VersionedStruct(r.uint16, {\n 1: {\n // Simple context glyph substitution\n coverage: new r.Pointer(r.uint16, Coverage),\n chainCount: r.uint16,\n chainRuleSets: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n 2: {\n // Class-based chaining context\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackClassDef: new r.Pointer(r.uint16, ClassDef),\n inputClassDef: new r.Pointer(r.uint16, ClassDef),\n lookaheadClassDef: new r.Pointer(r.uint16, ClassDef),\n chainCount: r.uint16,\n chainClassSet: new r.Array(new r.Pointer(r.uint16, ChainRuleSet), 'chainCount')\n },\n 3: {\n // Coverage-based chaining context\n backtrackGlyphCount: r.uint16,\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n inputGlyphCount: r.uint16,\n inputCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'inputGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n lookupCount: r.uint16,\n lookupRecords: new r.Array(LookupRecord, 'lookupCount')\n }\n});\n\n/*******************\r\n * Variation Store *\r\n *******************/\n\nvar F2DOT14 = new r.Fixed(16, 'BE', 14);\nvar RegionAxisCoordinates = new r.Struct({\n startCoord: F2DOT14,\n peakCoord: F2DOT14,\n endCoord: F2DOT14\n});\nvar VariationRegionList = new r.Struct({\n axisCount: r.uint16,\n regionCount: r.uint16,\n variationRegions: new r.Array(new r.Array(RegionAxisCoordinates, 'axisCount'), 'regionCount')\n});\nvar DeltaSet = new r.Struct({\n shortDeltas: new r.Array(r.int16, function (t) {\n return t.parent.shortDeltaCount;\n }),\n regionDeltas: new r.Array(r.int8, function (t) {\n return t.parent.regionIndexCount - t.parent.shortDeltaCount;\n }),\n deltas: function deltas(t) {\n return t.shortDeltas.concat(t.regionDeltas);\n }\n});\nvar ItemVariationData = new r.Struct({\n itemCount: r.uint16,\n shortDeltaCount: r.uint16,\n regionIndexCount: r.uint16,\n regionIndexes: new r.Array(r.uint16, 'regionIndexCount'),\n deltaSets: new r.Array(DeltaSet, 'itemCount')\n});\nvar ItemVariationStore = new r.Struct({\n format: r.uint16,\n variationRegionList: new r.Pointer(r.uint32, VariationRegionList),\n variationDataCount: r.uint16,\n itemVariationData: new r.Array(new r.Pointer(r.uint32, ItemVariationData), 'variationDataCount')\n});\n/**********************\r\n * Feature Variations *\r\n **********************/\n\nvar ConditionTable = new r.VersionedStruct(r.uint16, {\n 1: (_ = {\n axisIndex: r.uint16\n }, _[\"axisIndex\"] = r.uint16, _.filterRangeMinValue = F2DOT14, _.filterRangeMaxValue = F2DOT14, _)\n});\nvar ConditionSet = new r.Struct({\n conditionCount: r.uint16,\n conditionTable: new r.Array(new r.Pointer(r.uint32, ConditionTable), 'conditionCount')\n});\nvar FeatureTableSubstitutionRecord = new r.Struct({\n featureIndex: r.uint16,\n alternateFeatureTable: new r.Pointer(r.uint32, Feature, {\n type: 'parent'\n })\n});\nvar FeatureTableSubstitution = new r.Struct({\n version: r.fixed32,\n substitutionCount: r.uint16,\n substitutions: new r.Array(FeatureTableSubstitutionRecord, 'substitutionCount')\n});\nvar FeatureVariationRecord = new r.Struct({\n conditionSet: new r.Pointer(r.uint32, ConditionSet, {\n type: 'parent'\n }),\n featureTableSubstitution: new r.Pointer(r.uint32, FeatureTableSubstitution, {\n type: 'parent'\n })\n});\nvar FeatureVariations = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n featureVariationRecordCount: r.uint32,\n featureVariationRecords: new r.Array(FeatureVariationRecord, 'featureVariationRecordCount')\n});\n\n// otherwise delegates to the provided type.\nvar PredefinedOp = /*#__PURE__*/function () {\n function PredefinedOp(predefinedOps, type) {\n this.predefinedOps = predefinedOps;\n this.type = type;\n }\n var _proto5 = PredefinedOp.prototype;\n _proto5.decode = function decode(stream, parent, operands) {\n if (this.predefinedOps[operands[0]]) {\n return this.predefinedOps[operands[0]];\n }\n return this.type.decode(stream, parent, operands);\n };\n _proto5.size = function size(value, ctx) {\n return this.type.size(value, ctx);\n };\n _proto5.encode = function encode(stream, value, ctx) {\n var index = this.predefinedOps.indexOf(value);\n if (index !== -1) {\n return index;\n }\n return this.type.encode(stream, value, ctx);\n };\n return PredefinedOp;\n}();\nvar CFFEncodingVersion = /*#__PURE__*/function (_r$Number) {\n _inheritsLoose(CFFEncodingVersion, _r$Number);\n function CFFEncodingVersion() {\n return _r$Number.call(this, 'UInt8') || this;\n }\n var _proto6 = CFFEncodingVersion.prototype;\n _proto6.decode = function decode(stream) {\n return r.uint8.decode(stream) & 0x7f;\n };\n return CFFEncodingVersion;\n}(r.Number);\nvar Range1 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint8\n});\nvar Range2 = new r.Struct({\n first: r.uint16,\n nLeft: r.uint16\n});\nvar CFFCustomEncoding = new r.VersionedStruct(new CFFEncodingVersion(), {\n 0: {\n nCodes: r.uint8,\n codes: new r.Array(r.uint8, 'nCodes')\n },\n 1: {\n nRanges: r.uint8,\n ranges: new r.Array(Range1, 'nRanges')\n } // TODO: supplement?\n});\nvar CFFEncoding = new PredefinedOp([StandardEncoding, ExpertEncoding], new CFFPointer(CFFCustomEncoding, {\n lazy: true\n})); // Decodes an array of ranges until the total\n// length is equal to the provided length.\nvar RangeArray = /*#__PURE__*/function (_r$Array) {\n _inheritsLoose(RangeArray, _r$Array);\n function RangeArray() {\n return _r$Array.apply(this, arguments) || this;\n }\n var _proto7 = RangeArray.prototype;\n _proto7.decode = function decode(stream, parent) {\n var length = utils.resolveLength(this.length, stream, parent);\n var count = 0;\n var res = [];\n while (count < length) {\n var range = this.type.decode(stream, parent);\n range.offset = count;\n count += range.nLeft + 1;\n res.push(range);\n }\n return res;\n };\n return RangeArray;\n}(r.Array);\nvar CFFCustomCharset = new r.VersionedStruct(r.uint8, {\n 0: {\n glyphs: new r.Array(r.uint16, function (t) {\n return t.parent.CharStrings.length - 1;\n })\n },\n 1: {\n ranges: new RangeArray(Range1, function (t) {\n return t.parent.CharStrings.length - 1;\n })\n },\n 2: {\n ranges: new RangeArray(Range2, function (t) {\n return t.parent.CharStrings.length - 1;\n })\n }\n});\nvar CFFCharset = new PredefinedOp([ISOAdobeCharset, ExpertCharset, ExpertSubsetCharset], new CFFPointer(CFFCustomCharset, {\n lazy: true\n}));\nvar FDRange3 = new r.Struct({\n first: r.uint16,\n fd: r.uint8\n});\nvar FDRange4 = new r.Struct({\n first: r.uint32,\n fd: r.uint16\n});\nvar FDSelect = new r.VersionedStruct(r.uint8, {\n 0: {\n fds: new r.Array(r.uint8, function (t) {\n return t.parent.CharStrings.length;\n })\n },\n 3: {\n nRanges: r.uint16,\n ranges: new r.Array(FDRange3, 'nRanges'),\n sentinel: r.uint16\n },\n 4: {\n nRanges: r.uint32,\n ranges: new r.Array(FDRange4, 'nRanges'),\n sentinel: r.uint32\n }\n});\nvar ptr = new CFFPointer(CFFPrivateDict);\nvar CFFPrivateOp = /*#__PURE__*/function () {\n function CFFPrivateOp() {}\n var _proto8 = CFFPrivateOp.prototype;\n _proto8.decode = function decode(stream, parent, operands) {\n parent.length = operands[0];\n return ptr.decode(stream, parent, [operands[1]]);\n };\n _proto8.size = function size(dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.size(dict, ctx)[0]];\n };\n _proto8.encode = function encode(stream, dict, ctx) {\n return [CFFPrivateDict.size(dict, ctx, false), ptr.encode(stream, dict, ctx)[0]];\n };\n return CFFPrivateOp;\n}();\nvar FontDict = new CFFDict([\n// key name type(s) default\n[18, 'Private', new CFFPrivateOp(), null], [[12, 38], 'FontName', 'sid', null], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [[12, 5], 'PaintType', 'number', 0]]);\nvar CFFTopDict = new CFFDict([\n// key name type(s) default\n[[12, 30], 'ROS', ['sid', 'sid', 'number'], null], [0, 'version', 'sid', null], [1, 'Notice', 'sid', null], [[12, 0], 'Copyright', 'sid', null], [2, 'FullName', 'sid', null], [3, 'FamilyName', 'sid', null], [4, 'Weight', 'sid', null], [[12, 1], 'isFixedPitch', 'boolean', false], [[12, 2], 'ItalicAngle', 'number', 0], [[12, 3], 'UnderlinePosition', 'number', -100], [[12, 4], 'UnderlineThickness', 'number', 50], [[12, 5], 'PaintType', 'number', 0], [[12, 6], 'CharstringType', 'number', 2], [[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [13, 'UniqueID', 'number', null], [5, 'FontBBox', 'array', [0, 0, 0, 0]], [[12, 8], 'StrokeWidth', 'number', 0], [14, 'XUID', 'array', null], [15, 'charset', CFFCharset, ISOAdobeCharset], [16, 'Encoding', CFFEncoding, StandardEncoding], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [18, 'Private', new CFFPrivateOp(), null], [[12, 20], 'SyntheticBase', 'number', null], [[12, 21], 'PostScript', 'sid', null], [[12, 22], 'BaseFontName', 'sid', null], [[12, 23], 'BaseFontBlend', 'delta', null],\n// CID font specific\n[[12, 31], 'CIDFontVersion', 'number', 0], [[12, 32], 'CIDFontRevision', 'number', 0], [[12, 33], 'CIDFontType', 'number', 0], [[12, 34], 'CIDCount', 'number', 8720], [[12, 35], 'UIDBase', 'number', null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [[12, 38], 'FontName', 'sid', null]]);\nvar VariationStore = new r.Struct({\n length: r.uint16,\n itemVariationStore: ItemVariationStore\n});\nvar CFF2TopDict = new CFFDict([[[12, 7], 'FontMatrix', 'array', [0.001, 0, 0, 0.001, 0, 0]], [17, 'CharStrings', new CFFPointer(new CFFIndex()), null], [[12, 37], 'FDSelect', new CFFPointer(FDSelect), null], [[12, 36], 'FDArray', new CFFPointer(new CFFIndex(FontDict)), null], [24, 'vstore', new CFFPointer(VariationStore), null], [25, 'maxstack', 'number', 193]]);\nvar CFFTop = new r.VersionedStruct(r.fixed16, {\n 1: {\n hdrSize: r.uint8,\n offSize: r.uint8,\n nameIndex: new CFFIndex(new r.String('length')),\n topDictIndex: new CFFIndex(CFFTopDict),\n stringIndex: new CFFIndex(new r.String('length')),\n globalSubrIndex: new CFFIndex()\n },\n 2: {\n hdrSize: r.uint8,\n length: r.uint16,\n topDict: CFF2TopDict,\n globalSubrIndex: new CFFIndex()\n }\n});\nvar CFFFont = /*#__PURE__*/function () {\n function CFFFont(stream) {\n this.stream = stream;\n this.decode();\n }\n CFFFont.decode = function decode(stream) {\n return new CFFFont(stream);\n };\n var _proto9 = CFFFont.prototype;\n _proto9.decode = function decode() {\n var start = this.stream.pos;\n var top = CFFTop.decode(this.stream);\n for (var key in top) {\n var val = top[key];\n this[key] = val;\n }\n if (this.version < 2) {\n if (this.topDictIndex.length !== 1) {\n throw new Error(\"Only a single font is allowed in CFF\");\n }\n this.topDict = this.topDictIndex[0];\n }\n this.isCIDFont = this.topDict.ROS != null;\n return this;\n };\n _proto9.string = function string(sid) {\n if (this.version >= 2) {\n return null;\n }\n if (sid < standardStrings.length) {\n return standardStrings[sid];\n }\n return this.stringIndex[sid - standardStrings.length];\n };\n _proto9.getCharString = function getCharString(glyph) {\n this.stream.pos = this.topDict.CharStrings[glyph].offset;\n return this.stream.readBuffer(this.topDict.CharStrings[glyph].length);\n };\n _proto9.getGlyphName = function getGlyphName(gid) {\n // CFF2 glyph names are in the post table.\n if (this.version >= 2) {\n return null;\n } // CID-keyed fonts don't have glyph names\n\n if (this.isCIDFont) {\n return null;\n }\n var charset = this.topDict.charset;\n if (Array.isArray(charset)) {\n return charset[gid];\n }\n if (gid === 0) {\n return '.notdef';\n }\n gid -= 1;\n switch (charset.version) {\n case 0:\n return this.string(charset.glyphs[gid]);\n case 1:\n case 2:\n for (var i = 0; i < charset.ranges.length; i++) {\n var range = charset.ranges[i];\n if (range.offset <= gid && gid <= range.offset + range.nLeft) {\n return this.string(range.first + (gid - range.offset));\n }\n }\n break;\n }\n return null;\n };\n _proto9.fdForGlyph = function fdForGlyph(gid) {\n if (!this.topDict.FDSelect) {\n return null;\n }\n switch (this.topDict.FDSelect.version) {\n case 0:\n return this.topDict.FDSelect.fds[gid];\n case 3:\n case 4:\n var ranges = this.topDict.FDSelect.ranges;\n var low = 0;\n var high = ranges.length - 1;\n while (low <= high) {\n var mid = low + high >> 1;\n if (gid < ranges[mid].first) {\n high = mid - 1;\n } else if (mid < high && gid >= ranges[mid + 1].first) {\n low = mid + 1;\n } else {\n return ranges[mid].fd;\n }\n }\n default:\n throw new Error(\"Unknown FDSelect version: \".concat(this.topDict.FDSelect.version));\n }\n };\n _proto9.privateDictForGlyph = function privateDictForGlyph(gid) {\n if (this.topDict.FDSelect) {\n var fd = this.fdForGlyph(gid);\n if (this.topDict.FDArray[fd]) {\n return this.topDict.FDArray[fd].Private;\n }\n return null;\n }\n if (this.version < 2) {\n return this.topDict.Private;\n }\n return this.topDict.FDArray[0].Private;\n };\n _createClass(CFFFont, [{\n key: \"postscriptName\",\n get: function get() {\n if (this.version < 2) {\n return this.nameIndex[0];\n }\n return null;\n }\n }, {\n key: \"fullName\",\n get: function get() {\n return this.string(this.topDict.FullName);\n }\n }, {\n key: \"familyName\",\n get: function get() {\n return this.string(this.topDict.FamilyName);\n }\n }]);\n return CFFFont;\n}();\nvar VerticalOrigin = new r.Struct({\n glyphIndex: r.uint16,\n vertOriginY: r.int16\n});\nvar VORG = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n defaultVertOriginY: r.int16,\n numVertOriginYMetrics: r.uint16,\n metrics: new r.Array(VerticalOrigin, 'numVertOriginYMetrics')\n});\nvar BigMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n horiBearingX: r.int8,\n horiBearingY: r.int8,\n horiAdvance: r.uint8,\n vertBearingX: r.int8,\n vertBearingY: r.int8,\n vertAdvance: r.uint8\n});\nvar SmallMetrics = new r.Struct({\n height: r.uint8,\n width: r.uint8,\n bearingX: r.int8,\n bearingY: r.int8,\n advance: r.uint8\n});\nvar EBDTComponent = new r.Struct({\n glyph: r.uint16,\n xOffset: r.int8,\n yOffset: r.int8\n});\nvar ByteAligned = function ByteAligned() {};\nvar BitAligned = function BitAligned() {};\nvar glyph = new r.VersionedStruct('version', {\n 1: {\n metrics: SmallMetrics,\n data: ByteAligned\n },\n 2: {\n metrics: SmallMetrics,\n data: BitAligned\n },\n // format 3 is deprecated\n // format 4 is not supported by Microsoft\n 5: {\n data: BitAligned\n },\n 6: {\n metrics: BigMetrics,\n data: ByteAligned\n },\n 7: {\n metrics: BigMetrics,\n data: BitAligned\n },\n 8: {\n metrics: SmallMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n 9: {\n metrics: BigMetrics,\n pad: new r.Reserved(r.uint8),\n numComponents: r.uint16,\n components: new r.Array(EBDTComponent, 'numComponents')\n },\n 17: {\n metrics: SmallMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n 18: {\n metrics: BigMetrics,\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n },\n 19: {\n dataLen: r.uint32,\n data: new r.Buffer('dataLen')\n }\n});\nvar SBitLineMetrics = new r.Struct({\n ascender: r.int8,\n descender: r.int8,\n widthMax: r.uint8,\n caretSlopeNumerator: r.int8,\n caretSlopeDenominator: r.int8,\n caretOffset: r.int8,\n minOriginSB: r.int8,\n minAdvanceSB: r.int8,\n maxBeforeBL: r.int8,\n minAfterBL: r.int8,\n pad: new r.Reserved(r.int8, 2)\n});\nvar CodeOffsetPair = new r.Struct({\n glyphCode: r.uint16,\n offset: r.uint16\n});\nvar IndexSubtable = new r.VersionedStruct(r.uint16, {\n header: {\n imageFormat: r.uint16,\n imageDataOffset: r.uint32\n },\n 1: {\n offsetArray: new r.Array(r.uint32, function (t) {\n return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n })\n },\n 2: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics\n },\n 3: {\n offsetArray: new r.Array(r.uint16, function (t) {\n return t.parent.lastGlyphIndex - t.parent.firstGlyphIndex + 1;\n })\n },\n 4: {\n numGlyphs: r.uint32,\n glyphArray: new r.Array(CodeOffsetPair, function (t) {\n return t.numGlyphs + 1;\n })\n },\n 5: {\n imageSize: r.uint32,\n bigMetrics: BigMetrics,\n numGlyphs: r.uint32,\n glyphCodeArray: new r.Array(r.uint16, 'numGlyphs')\n }\n});\nvar IndexSubtableArray = new r.Struct({\n firstGlyphIndex: r.uint16,\n lastGlyphIndex: r.uint16,\n subtable: new r.Pointer(r.uint32, IndexSubtable)\n});\nvar BitmapSizeTable = new r.Struct({\n indexSubTableArray: new r.Pointer(r.uint32, new r.Array(IndexSubtableArray, 1), {\n type: 'parent'\n }),\n indexTablesSize: r.uint32,\n numberOfIndexSubTables: r.uint32,\n colorRef: r.uint32,\n hori: SBitLineMetrics,\n vert: SBitLineMetrics,\n startGlyphIndex: r.uint16,\n endGlyphIndex: r.uint16,\n ppemX: r.uint8,\n ppemY: r.uint8,\n bitDepth: r.uint8,\n flags: new r.Bitfield(r.uint8, ['horizontal', 'vertical'])\n});\nvar EBLC = new r.Struct({\n version: r.uint32,\n // 0x00020000\n numSizes: r.uint32,\n sizes: new r.Array(BitmapSizeTable, 'numSizes')\n});\nvar ImageTable = new r.Struct({\n ppem: r.uint16,\n resolution: r.uint16,\n imageOffsets: new r.Array(new r.Pointer(r.uint32, 'void'), function (t) {\n return t.parent.parent.maxp.numGlyphs + 1;\n })\n}); // This is the Apple sbix table, used by the \"Apple Color Emoji\" font.\n// It includes several image tables with images for each bitmap glyph\n// of several different sizes.\n\nvar sbix = new r.Struct({\n version: r.uint16,\n flags: new r.Bitfield(r.uint16, ['renderOutlines']),\n numImgTables: r.uint32,\n imageTables: new r.Array(new r.Pointer(r.uint32, ImageTable), 'numImgTables')\n});\nvar LayerRecord = new r.Struct({\n gid: r.uint16,\n // Glyph ID of layer glyph (must be in z-order from bottom to top).\n paletteIndex: r.uint16 // Index value to use in the appropriate palette. This value must\n}); // be less than numPaletteEntries in the CPAL table, except for\n// the special case noted below. Each palette entry is 16 bits.\n// A palette index of 0xFFFF is a special case indicating that\n// the text foreground color should be used.\n\nvar BaseGlyphRecord = new r.Struct({\n gid: r.uint16,\n // Glyph ID of reference glyph. This glyph is for reference only\n // and is not rendered for color.\n firstLayerIndex: r.uint16,\n // Index (from beginning of the Layer Records) to the layer record.\n // There will be numLayers consecutive entries for this base glyph.\n numLayers: r.uint16\n});\nvar COLR = new r.Struct({\n version: r.uint16,\n numBaseGlyphRecords: r.uint16,\n baseGlyphRecord: new r.Pointer(r.uint32, new r.Array(BaseGlyphRecord, 'numBaseGlyphRecords')),\n layerRecords: new r.Pointer(r.uint32, new r.Array(LayerRecord, 'numLayerRecords'), {\n lazy: true\n }),\n numLayerRecords: r.uint16\n});\nvar ColorRecord = new r.Struct({\n blue: r.uint8,\n green: r.uint8,\n red: r.uint8,\n alpha: r.uint8\n});\nvar CPAL = new r.VersionedStruct(r.uint16, {\n header: {\n numPaletteEntries: r.uint16,\n numPalettes: r.uint16,\n numColorRecords: r.uint16,\n colorRecords: new r.Pointer(r.uint32, new r.Array(ColorRecord, 'numColorRecords')),\n colorRecordIndices: new r.Array(r.uint16, 'numPalettes')\n },\n 0: {},\n 1: {\n offsetPaletteTypeArray: new r.Pointer(r.uint32, new r.Array(r.uint32, 'numPalettes')),\n offsetPaletteLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPalettes')),\n offsetPaletteEntryLabelArray: new r.Pointer(r.uint32, new r.Array(r.uint16, 'numPaletteEntries'))\n }\n});\nvar BaseCoord = new r.VersionedStruct(r.uint16, {\n 1: {\n // Design units only\n coordinate: r.int16 // X or Y value, in design units\n },\n 2: {\n // Design units plus contour point\n coordinate: r.int16,\n // X or Y value, in design units\n referenceGlyph: r.uint16,\n // GlyphID of control glyph\n baseCoordPoint: r.uint16 // Index of contour point on the referenceGlyph\n },\n 3: {\n // Design units plus Device table\n coordinate: r.int16,\n // X or Y value, in design units\n deviceTable: new r.Pointer(r.uint16, Device) // Device table for X or Y value\n }\n});\nvar BaseValues = new r.Struct({\n defaultIndex: r.uint16,\n // Index of default baseline for this script-same index in the BaseTagList\n baseCoordCount: r.uint16,\n baseCoords: new r.Array(new r.Pointer(r.uint16, BaseCoord), 'baseCoordCount')\n});\nvar FeatMinMaxRecord = new r.Struct({\n tag: new r.String(4),\n // 4-byte feature identification tag-must match FeatureTag in FeatureList\n minCoord: new r.Pointer(r.uint16, BaseCoord, {\n type: 'parent'\n }),\n // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord, {\n type: 'parent'\n }) // May be NULL\n});\nvar MinMax = new r.Struct({\n minCoord: new r.Pointer(r.uint16, BaseCoord),\n // May be NULL\n maxCoord: new r.Pointer(r.uint16, BaseCoord),\n // May be NULL\n featMinMaxCount: r.uint16,\n // May be 0\n featMinMaxRecords: new r.Array(FeatMinMaxRecord, 'featMinMaxCount') // In alphabetical order\n});\nvar BaseLangSysRecord = new r.Struct({\n tag: new r.String(4),\n // 4-byte language system identification tag\n minMax: new r.Pointer(r.uint16, MinMax, {\n type: 'parent'\n })\n});\nvar BaseScript = new r.Struct({\n baseValues: new r.Pointer(r.uint16, BaseValues),\n // May be NULL\n defaultMinMax: new r.Pointer(r.uint16, MinMax),\n // May be NULL\n baseLangSysCount: r.uint16,\n // May be 0\n baseLangSysRecords: new r.Array(BaseLangSysRecord, 'baseLangSysCount') // in alphabetical order by BaseLangSysTag\n});\nvar BaseScriptRecord = new r.Struct({\n tag: new r.String(4),\n // 4-byte script identification tag\n script: new r.Pointer(r.uint16, BaseScript, {\n type: 'parent'\n })\n});\nvar BaseScriptList = new r.Array(BaseScriptRecord, r.uint16); // Array of 4-byte baseline identification tags-must be in alphabetical order\n\nvar BaseTagList = new r.Array(new r.String(4), r.uint16);\nvar Axis = new r.Struct({\n baseTagList: new r.Pointer(r.uint16, BaseTagList),\n // May be NULL\n baseScriptList: new r.Pointer(r.uint16, BaseScriptList)\n});\nvar BASE = new r.VersionedStruct(r.uint32, {\n header: {\n horizAxis: new r.Pointer(r.uint16, Axis),\n // May be NULL\n vertAxis: new r.Pointer(r.uint16, Axis) // May be NULL\n },\n 0x00010000: {},\n 0x00010001: {\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\nvar AttachPoint = new r.Array(r.uint16, r.uint16);\nvar AttachList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n attachPoints: new r.Array(new r.Pointer(r.uint16, AttachPoint), 'glyphCount')\n});\nvar CaretValue = new r.VersionedStruct(r.uint16, {\n 1: {\n // Design units only\n coordinate: r.int16\n },\n 2: {\n // Contour point\n caretValuePoint: r.uint16\n },\n 3: {\n // Design units plus Device table\n coordinate: r.int16,\n deviceTable: new r.Pointer(r.uint16, Device)\n }\n});\nvar LigGlyph = new r.Array(new r.Pointer(r.uint16, CaretValue), r.uint16);\nvar LigCaretList = new r.Struct({\n coverage: new r.Pointer(r.uint16, Coverage),\n ligGlyphCount: r.uint16,\n ligGlyphs: new r.Array(new r.Pointer(r.uint16, LigGlyph), 'ligGlyphCount')\n});\nvar MarkGlyphSetsDef = new r.Struct({\n markSetTableFormat: r.uint16,\n markSetCount: r.uint16,\n coverage: new r.Array(new r.Pointer(r.uint32, Coverage), 'markSetCount')\n});\nvar GDEF = new r.VersionedStruct(r.uint32, {\n header: {\n glyphClassDef: new r.Pointer(r.uint16, ClassDef),\n attachList: new r.Pointer(r.uint16, AttachList),\n ligCaretList: new r.Pointer(r.uint16, LigCaretList),\n markAttachClassDef: new r.Pointer(r.uint16, ClassDef)\n },\n 0x00010000: {},\n 0x00010002: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef)\n },\n 0x00010003: {\n markGlyphSetsDef: new r.Pointer(r.uint16, MarkGlyphSetsDef),\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore)\n }\n});\nvar ValueFormat = new r.Bitfield(r.uint16, ['xPlacement', 'yPlacement', 'xAdvance', 'yAdvance', 'xPlaDevice', 'yPlaDevice', 'xAdvDevice', 'yAdvDevice']);\nvar types = {\n xPlacement: r.int16,\n yPlacement: r.int16,\n xAdvance: r.int16,\n yAdvance: r.int16,\n xPlaDevice: new r.Pointer(r.uint16, Device, {\n type: 'global',\n relativeTo: function relativeTo(ctx) {\n return ctx.rel;\n }\n }),\n yPlaDevice: new r.Pointer(r.uint16, Device, {\n type: 'global',\n relativeTo: function relativeTo(ctx) {\n return ctx.rel;\n }\n }),\n xAdvDevice: new r.Pointer(r.uint16, Device, {\n type: 'global',\n relativeTo: function relativeTo(ctx) {\n return ctx.rel;\n }\n }),\n yAdvDevice: new r.Pointer(r.uint16, Device, {\n type: 'global',\n relativeTo: function relativeTo(ctx) {\n return ctx.rel;\n }\n })\n};\nvar ValueRecord = /*#__PURE__*/function () {\n function ValueRecord(key) {\n if (key === void 0) {\n key = 'valueFormat';\n }\n this.key = key;\n }\n var _proto10 = ValueRecord.prototype;\n _proto10.buildStruct = function buildStruct(parent) {\n var struct = parent;\n while (!struct[this.key] && struct.parent) {\n struct = struct.parent;\n }\n if (!struct[this.key]) return;\n var fields = {};\n fields.rel = function () {\n return struct._startOffset;\n };\n var format = struct[this.key];\n for (var key in format) {\n if (format[key]) {\n fields[key] = types[key];\n }\n }\n return new r.Struct(fields);\n };\n _proto10.size = function size(val, ctx) {\n return this.buildStruct(ctx).size(val, ctx);\n };\n _proto10.decode = function decode(stream, parent) {\n var res = this.buildStruct(parent).decode(stream, parent);\n delete res.rel;\n return res;\n };\n return ValueRecord;\n}();\nvar PairValueRecord = new r.Struct({\n secondGlyph: r.uint16,\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\nvar PairSet = new r.Array(PairValueRecord, r.uint16);\nvar Class2Record = new r.Struct({\n value1: new ValueRecord('valueFormat1'),\n value2: new ValueRecord('valueFormat2')\n});\nvar Anchor = new r.VersionedStruct(r.uint16, {\n 1: {\n // Design units only\n xCoordinate: r.int16,\n yCoordinate: r.int16\n },\n 2: {\n // Design units plus contour point\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n anchorPoint: r.uint16\n },\n 3: {\n // Design units plus Device tables\n xCoordinate: r.int16,\n yCoordinate: r.int16,\n xDeviceTable: new r.Pointer(r.uint16, Device),\n yDeviceTable: new r.Pointer(r.uint16, Device)\n }\n});\nvar EntryExitRecord = new r.Struct({\n entryAnchor: new r.Pointer(r.uint16, Anchor, {\n type: 'parent'\n }),\n exitAnchor: new r.Pointer(r.uint16, Anchor, {\n type: 'parent'\n })\n});\nvar MarkRecord = new r.Struct({\n class: r.uint16,\n markAnchor: new r.Pointer(r.uint16, Anchor, {\n type: 'parent'\n })\n});\nvar MarkArray = new r.Array(MarkRecord, r.uint16);\nvar BaseRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n return t.parent.classCount;\n});\nvar BaseArray = new r.Array(BaseRecord, r.uint16);\nvar ComponentRecord = new r.Array(new r.Pointer(r.uint16, Anchor), function (t) {\n return t.parent.parent.classCount;\n});\nvar LigatureAttach = new r.Array(ComponentRecord, r.uint16);\nvar LigatureArray = new r.Array(new r.Pointer(r.uint16, LigatureAttach), r.uint16);\nvar GPOSLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, {\n // Single Adjustment\n 1: {\n // Single positioning value\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n value: new ValueRecord()\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat: ValueFormat,\n valueCount: r.uint16,\n values: new r.LazyArray(new ValueRecord(), 'valueCount')\n }\n }),\n 2: new r.VersionedStruct(r.uint16, {\n // Pair Adjustment Positioning\n 1: {\n // Adjustments for glyph pairs\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n pairSetCount: r.uint16,\n pairSets: new r.LazyArray(new r.Pointer(r.uint16, PairSet), 'pairSetCount')\n },\n 2: {\n // Class pair adjustment\n coverage: new r.Pointer(r.uint16, Coverage),\n valueFormat1: ValueFormat,\n valueFormat2: ValueFormat,\n classDef1: new r.Pointer(r.uint16, ClassDef),\n classDef2: new r.Pointer(r.uint16, ClassDef),\n class1Count: r.uint16,\n class2Count: r.uint16,\n classRecords: new r.LazyArray(new r.LazyArray(Class2Record, 'class2Count'), 'class1Count')\n }\n }),\n 3: {\n // Cursive Attachment Positioning\n format: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n entryExitCount: r.uint16,\n entryExitRecords: new r.Array(EntryExitRecord, 'entryExitCount')\n },\n 4: {\n // MarkToBase Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n baseCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n baseArray: new r.Pointer(r.uint16, BaseArray)\n },\n 5: {\n // MarkToLigature Attachment Positioning\n format: r.uint16,\n markCoverage: new r.Pointer(r.uint16, Coverage),\n ligatureCoverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n markArray: new r.Pointer(r.uint16, MarkArray),\n ligatureArray: new r.Pointer(r.uint16, LigatureArray)\n },\n 6: {\n // MarkToMark Attachment Positioning\n format: r.uint16,\n mark1Coverage: new r.Pointer(r.uint16, Coverage),\n mark2Coverage: new r.Pointer(r.uint16, Coverage),\n classCount: r.uint16,\n mark1Array: new r.Pointer(r.uint16, MarkArray),\n mark2Array: new r.Pointer(r.uint16, BaseArray)\n },\n 7: Context,\n // Contextual positioning\n 8: ChainingContext,\n // Chaining contextual positioning\n 9: {\n // Extension Positioning\n posFormat: r.uint16,\n lookupType: r.uint16,\n // cannot also be 9\n extension: new r.Pointer(r.uint32, GPOSLookup)\n }\n}); // Fix circular reference\n\nGPOSLookup.versions[9].extension.type = GPOSLookup;\nvar GPOS = new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n },\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n}); // export GPOSLookup for JSTF table\n\nvar Sequence = new r.Array(r.uint16, r.uint16);\nvar AlternateSet = Sequence;\nvar Ligature = new r.Struct({\n glyph: r.uint16,\n compCount: r.uint16,\n components: new r.Array(r.uint16, function (t) {\n return t.compCount - 1;\n })\n});\nvar LigatureSet = new r.Array(new r.Pointer(r.uint16, Ligature), r.uint16);\nvar GSUBLookup = new r.VersionedStruct('lookupType', {\n 1: new r.VersionedStruct(r.uint16, {\n // Single Substitution\n 1: {\n coverage: new r.Pointer(r.uint16, Coverage),\n deltaGlyphID: r.int16\n },\n 2: {\n coverage: new r.Pointer(r.uint16, Coverage),\n glyphCount: r.uint16,\n substitute: new r.LazyArray(r.uint16, 'glyphCount')\n }\n }),\n 2: {\n // Multiple Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n sequences: new r.LazyArray(new r.Pointer(r.uint16, Sequence), 'count')\n },\n 3: {\n // Alternate Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n alternateSet: new r.LazyArray(new r.Pointer(r.uint16, AlternateSet), 'count')\n },\n 4: {\n // Ligature Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n count: r.uint16,\n ligatureSets: new r.LazyArray(new r.Pointer(r.uint16, LigatureSet), 'count')\n },\n 5: Context,\n // Contextual Substitution\n 6: ChainingContext,\n // Chaining Contextual Substitution\n 7: {\n // Extension Substitution\n substFormat: r.uint16,\n lookupType: r.uint16,\n // cannot also be 7\n extension: new r.Pointer(r.uint32, GSUBLookup)\n },\n 8: {\n // Reverse Chaining Contextual Single Substitution\n substFormat: r.uint16,\n coverage: new r.Pointer(r.uint16, Coverage),\n backtrackCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'backtrackGlyphCount'),\n lookaheadGlyphCount: r.uint16,\n lookaheadCoverage: new r.Array(new r.Pointer(r.uint16, Coverage), 'lookaheadGlyphCount'),\n glyphCount: r.uint16,\n substitutes: new r.Array(r.uint16, 'glyphCount')\n }\n}); // Fix circular reference\n\nGSUBLookup.versions[7].extension.type = GSUBLookup;\nvar GSUB = new r.VersionedStruct(r.uint32, {\n header: {\n scriptList: new r.Pointer(r.uint16, ScriptList),\n featureList: new r.Pointer(r.uint16, FeatureList),\n lookupList: new r.Pointer(r.uint16, new LookupList(GSUBLookup))\n },\n 0x00010000: {},\n 0x00010001: {\n featureVariations: new r.Pointer(r.uint32, FeatureVariations)\n }\n});\nvar JstfGSUBModList = new r.Array(r.uint16, r.uint16);\nvar JstfPriority = new r.Struct({\n shrinkageEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n shrinkageJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup)),\n extensionEnableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGSUB: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionEnableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionDisableGPOS: new r.Pointer(r.uint16, JstfGSUBModList),\n extensionJstfMax: new r.Pointer(r.uint16, new LookupList(GPOSLookup))\n});\nvar JstfLangSys = new r.Array(new r.Pointer(r.uint16, JstfPriority), r.uint16);\nvar JstfLangSysRecord = new r.Struct({\n tag: new r.String(4),\n jstfLangSys: new r.Pointer(r.uint16, JstfLangSys)\n});\nvar JstfScript = new r.Struct({\n extenderGlyphs: new r.Pointer(r.uint16, new r.Array(r.uint16, r.uint16)),\n // array of glyphs to extend line length\n defaultLangSys: new r.Pointer(r.uint16, JstfLangSys),\n langSysCount: r.uint16,\n langSysRecords: new r.Array(JstfLangSysRecord, 'langSysCount')\n});\nvar JstfScriptRecord = new r.Struct({\n tag: new r.String(4),\n script: new r.Pointer(r.uint16, JstfScript, {\n type: 'parent'\n })\n});\nvar JSTF = new r.Struct({\n version: r.uint32,\n // should be 0x00010000\n scriptCount: r.uint16,\n scriptList: new r.Array(JstfScriptRecord, 'scriptCount')\n});\nvar VariableSizeNumber = /*#__PURE__*/function () {\n function VariableSizeNumber(size) {\n this._size = size;\n }\n var _proto11 = VariableSizeNumber.prototype;\n _proto11.decode = function decode(stream, parent) {\n switch (this.size(0, parent)) {\n case 1:\n return stream.readUInt8();\n case 2:\n return stream.readUInt16BE();\n case 3:\n return stream.readUInt24BE();\n case 4:\n return stream.readUInt32BE();\n }\n };\n _proto11.size = function size(val, parent) {\n return utils.resolveLength(this._size, null, parent);\n };\n return VariableSizeNumber;\n}();\nvar MapDataEntry = new r.Struct({\n entry: new VariableSizeNumber(function (t) {\n return ((t.parent.entryFormat & 0x0030) >> 4) + 1;\n }),\n outerIndex: function outerIndex(t) {\n return t.entry >> (t.parent.entryFormat & 0x000F) + 1;\n },\n innerIndex: function innerIndex(t) {\n return t.entry & (1 << (t.parent.entryFormat & 0x000F) + 1) - 1;\n }\n});\nvar DeltaSetIndexMap = new r.Struct({\n entryFormat: r.uint16,\n mapCount: r.uint16,\n mapData: new r.Array(MapDataEntry, 'mapCount')\n});\nvar HVAR = new r.Struct({\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n itemVariationStore: new r.Pointer(r.uint32, ItemVariationStore),\n advanceWidthMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n LSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap),\n RSBMapping: new r.Pointer(r.uint32, DeltaSetIndexMap)\n});\nvar Signature = new r.Struct({\n format: r.uint32,\n length: r.uint32,\n offset: r.uint32\n});\nvar SignatureBlock = new r.Struct({\n reserved: new r.Reserved(r.uint16, 2),\n cbSignature: r.uint32,\n // Length (in bytes) of the PKCS#7 packet in pbSignature\n signature: new r.Buffer('cbSignature')\n});\nvar DSIG = new r.Struct({\n ulVersion: r.uint32,\n // Version number of the DSIG table (0x00000001)\n usNumSigs: r.uint16,\n // Number of signatures in the table\n usFlag: r.uint16,\n // Permission flags\n signatures: new r.Array(Signature, 'usNumSigs'),\n signatureBlocks: new r.Array(SignatureBlock, 'usNumSigs')\n});\nvar GaspRange = new r.Struct({\n rangeMaxPPEM: r.uint16,\n // Upper limit of range, in ppem\n rangeGaspBehavior: new r.Bitfield(r.uint16, [\n // Flags describing desired rasterizer behavior\n 'grayscale', 'gridfit', 'symmetricSmoothing', 'symmetricGridfit' // only in version 1, for ClearType\n ])\n});\nvar gasp = new r.Struct({\n version: r.uint16,\n // set to 0\n numRanges: r.uint16,\n gaspRanges: new r.Array(GaspRange, 'numRanges') // Sorted by ppem\n});\nvar DeviceRecord = new r.Struct({\n pixelSize: r.uint8,\n maximumWidth: r.uint8,\n widths: new r.Array(r.uint8, function (t) {\n return t.parent.parent.maxp.numGlyphs;\n })\n}); // The Horizontal Device Metrics table stores integer advance widths scaled to particular pixel sizes\n\nvar hdmx = new r.Struct({\n version: r.uint16,\n numRecords: r.int16,\n sizeDeviceRecord: r.int32,\n records: new r.Array(DeviceRecord, 'numRecords')\n});\nvar KernPair = new r.Struct({\n left: r.uint16,\n right: r.uint16,\n value: r.int16\n});\nvar ClassTable = new r.Struct({\n firstGlyph: r.uint16,\n nGlyphs: r.uint16,\n offsets: new r.Array(r.uint16, 'nGlyphs'),\n max: function max(t) {\n return t.offsets.length && Math.max.apply(Math, t.offsets);\n }\n});\nvar Kern2Array = new r.Struct({\n off: function off(t) {\n return t._startOffset - t.parent.parent._startOffset;\n },\n len: function len(t) {\n return ((t.parent.leftTable.max - t.off) / t.parent.rowWidth + 1) * (t.parent.rowWidth / 2);\n },\n values: new r.LazyArray(r.int16, 'len')\n});\nvar KernSubtable = new r.VersionedStruct('format', {\n 0: {\n nPairs: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n pairs: new r.Array(KernPair, 'nPairs')\n },\n 2: {\n rowWidth: r.uint16,\n leftTable: new r.Pointer(r.uint16, ClassTable, {\n type: 'parent'\n }),\n rightTable: new r.Pointer(r.uint16, ClassTable, {\n type: 'parent'\n }),\n array: new r.Pointer(r.uint16, Kern2Array, {\n type: 'parent'\n })\n },\n 3: {\n glyphCount: r.uint16,\n kernValueCount: r.uint8,\n leftClassCount: r.uint8,\n rightClassCount: r.uint8,\n flags: r.uint8,\n kernValue: new r.Array(r.int16, 'kernValueCount'),\n leftClass: new r.Array(r.uint8, 'glyphCount'),\n rightClass: new r.Array(r.uint8, 'glyphCount'),\n kernIndex: new r.Array(r.uint8, function (t) {\n return t.leftClassCount * t.rightClassCount;\n })\n }\n});\nvar KernTable = new r.VersionedStruct('version', {\n 0: {\n // Microsoft uses this format\n subVersion: r.uint16,\n // Microsoft has an extra sub-table version number\n length: r.uint16,\n // Length of the subtable, in bytes\n format: r.uint8,\n // Format of subtable\n coverage: new r.Bitfield(r.uint8, ['horizontal',\n // 1 if table has horizontal data, 0 if vertical\n 'minimum',\n // If set to 1, the table has minimum values. If set to 0, the table has kerning values.\n 'crossStream',\n // If set to 1, kerning is perpendicular to the flow of the text\n 'override' // If set to 1 the value in this table replaces the accumulated value\n ]),\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, function (t) {\n return t.length - t._currentOffset;\n })\n },\n 1: {\n // Apple uses this format\n length: r.uint32,\n coverage: new r.Bitfield(r.uint8, [null, null, null, null, null, 'variation',\n // Set if table has variation kerning values\n 'crossStream',\n // Set if table has cross-stream kerning values\n 'vertical' // Set if table has vertical kerning values\n ]),\n format: r.uint8,\n tupleIndex: r.uint16,\n subtable: KernSubtable,\n padding: new r.Reserved(r.uint8, function (t) {\n return t.length - t._currentOffset;\n })\n }\n});\nvar kern = new r.VersionedStruct(r.uint16, {\n 0: {\n // Microsoft Version\n nTables: r.uint16,\n tables: new r.Array(KernTable, 'nTables')\n },\n 1: {\n // Apple Version\n reserved: new r.Reserved(r.uint16),\n // the other half of the version number\n nTables: r.uint32,\n tables: new r.Array(KernTable, 'nTables')\n }\n});\n\n// Records the ppem for each glyph at which the scaling becomes linear again,\n// despite instructions effecting the advance width\n\nvar LTSH = new r.Struct({\n version: r.uint16,\n numGlyphs: r.uint16,\n yPels: new r.Array(r.uint8, 'numGlyphs')\n});\n\n// NOTE: The PCLT table is strongly discouraged for OpenType fonts with TrueType outlines\n\nvar PCLT = new r.Struct({\n version: r.uint16,\n fontNumber: r.uint32,\n pitch: r.uint16,\n xHeight: r.uint16,\n style: r.uint16,\n typeFamily: r.uint16,\n capHeight: r.uint16,\n symbolSet: r.uint16,\n typeface: new r.String(16),\n characterComplement: new r.String(8),\n fileName: new r.String(6),\n strokeWeight: new r.String(1),\n widthType: new r.String(1),\n serifStyle: r.uint8,\n reserved: new r.Reserved(r.uint8)\n});\n\n// sizes. This is needed in order to match font metrics on Windows.\n\nvar Ratio = new r.Struct({\n bCharSet: r.uint8,\n // Character set\n xRatio: r.uint8,\n // Value to use for x-Ratio\n yStartRatio: r.uint8,\n // Starting y-Ratio value\n yEndRatio: r.uint8 // Ending y-Ratio value\n});\nvar vTable = new r.Struct({\n yPelHeight: r.uint16,\n // yPelHeight to which values apply\n yMax: r.int16,\n // Maximum value (in pels) for this yPelHeight\n yMin: r.int16 // Minimum value (in pels) for this yPelHeight\n});\nvar VdmxGroup = new r.Struct({\n recs: r.uint16,\n // Number of height records in this group\n startsz: r.uint8,\n // Starting yPelHeight\n endsz: r.uint8,\n // Ending yPelHeight\n entries: new r.Array(vTable, 'recs') // The VDMX records\n});\nvar VDMX = new r.Struct({\n version: r.uint16,\n // Version number (0 or 1)\n numRecs: r.uint16,\n // Number of VDMX groups present\n numRatios: r.uint16,\n // Number of aspect ratio groupings\n ratioRanges: new r.Array(Ratio, 'numRatios'),\n // Ratio ranges\n offsets: new r.Array(r.uint16, 'numRatios'),\n // Offset to the VDMX group for this ratio range\n groups: new r.Array(VdmxGroup, 'numRecs') // The actual VDMX groupings\n});\nvar vhea = new r.Struct({\n version: r.uint16,\n // Version number of the Vertical Header Table\n ascent: r.int16,\n // The vertical typographic ascender for this font\n descent: r.int16,\n // The vertical typographic descender for this font\n lineGap: r.int16,\n // The vertical typographic line gap for this font\n advanceHeightMax: r.int16,\n // The maximum advance height measurement found in the font\n minTopSideBearing: r.int16,\n // The minimum top side bearing measurement found in the font\n minBottomSideBearing: r.int16,\n // The minimum bottom side bearing measurement found in the font\n yMaxExtent: r.int16,\n caretSlopeRise: r.int16,\n // Caret slope (rise/run)\n caretSlopeRun: r.int16,\n caretOffset: r.int16,\n // Set value equal to 0 for nonslanted fonts\n reserved: new r.Reserved(r.int16, 4),\n metricDataFormat: r.int16,\n // Set to 0\n numberOfMetrics: r.uint16 // Number of advance heights in the Vertical Metrics table\n});\nvar VmtxEntry = new r.Struct({\n advance: r.uint16,\n // The advance height of the glyph\n bearing: r.int16 // The top sidebearing of the glyph\n}); // Vertical Metrics Table\n\nvar vmtx = new r.Struct({\n metrics: new r.LazyArray(VmtxEntry, function (t) {\n return t.parent.vhea.numberOfMetrics;\n }),\n bearings: new r.LazyArray(r.int16, function (t) {\n return t.parent.maxp.numGlyphs - t.parent.vhea.numberOfMetrics;\n })\n});\nvar shortFrac = new r.Fixed(16, 'BE', 14);\nvar Correspondence = new r.Struct({\n fromCoord: shortFrac,\n toCoord: shortFrac\n});\nvar Segment = new r.Struct({\n pairCount: r.uint16,\n correspondence: new r.Array(Correspondence, 'pairCount')\n});\nvar avar = new r.Struct({\n version: r.fixed32,\n axisCount: r.uint32,\n segment: new r.Array(Segment, 'axisCount')\n});\nvar UnboundedArrayAccessor = /*#__PURE__*/function () {\n function UnboundedArrayAccessor(type, stream, parent) {\n this.type = type;\n this.stream = stream;\n this.parent = parent;\n this.base = this.stream.pos;\n this._items = [];\n }\n var _proto12 = UnboundedArrayAccessor.prototype;\n _proto12.getItem = function getItem(index) {\n if (this._items[index] == null) {\n var pos = this.stream.pos;\n this.stream.pos = this.base + this.type.size(null, this.parent) * index;\n this._items[index] = this.type.decode(this.stream, this.parent);\n this.stream.pos = pos;\n }\n return this._items[index];\n };\n _proto12.inspect = function inspect() {\n return \"[UnboundedArray \".concat(this.type.constructor.name, \"]\");\n };\n return UnboundedArrayAccessor;\n}();\nvar UnboundedArray = /*#__PURE__*/function (_r$Array2) {\n _inheritsLoose(UnboundedArray, _r$Array2);\n function UnboundedArray(type) {\n return _r$Array2.call(this, type, 0) || this;\n }\n var _proto13 = UnboundedArray.prototype;\n _proto13.decode = function decode(stream, parent) {\n return new UnboundedArrayAccessor(this.type, stream, parent);\n };\n return UnboundedArray;\n}(r.Array);\nvar LookupTable = function LookupTable(ValueType) {\n if (ValueType === void 0) {\n ValueType = r.uint16;\n }\n // Helper class that makes internal structures invisible to pointers\n var Shadow = /*#__PURE__*/function () {\n function Shadow(type) {\n this.type = type;\n }\n var _proto14 = Shadow.prototype;\n _proto14.decode = function decode(stream, ctx) {\n ctx = ctx.parent.parent;\n return this.type.decode(stream, ctx);\n };\n _proto14.size = function size(val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.size(val, ctx);\n };\n _proto14.encode = function encode(stream, val, ctx) {\n ctx = ctx.parent.parent;\n return this.type.encode(stream, val, ctx);\n };\n return Shadow;\n }();\n ValueType = new Shadow(ValueType);\n var BinarySearchHeader = new r.Struct({\n unitSize: r.uint16,\n nUnits: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16\n });\n var LookupSegmentSingle = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n value: ValueType\n });\n var LookupSegmentArray = new r.Struct({\n lastGlyph: r.uint16,\n firstGlyph: r.uint16,\n values: new r.Pointer(r.uint16, new r.Array(ValueType, function (t) {\n return t.lastGlyph - t.firstGlyph + 1;\n }), {\n type: 'parent'\n })\n });\n var LookupSingle = new r.Struct({\n glyph: r.uint16,\n value: ValueType\n });\n return new r.VersionedStruct(r.uint16, {\n 0: {\n values: new UnboundedArray(ValueType) // length == number of glyphs maybe?\n },\n 2: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentSingle, function (t) {\n return t.binarySearchHeader.nUnits;\n })\n },\n 4: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSegmentArray, function (t) {\n return t.binarySearchHeader.nUnits;\n })\n },\n 6: {\n binarySearchHeader: BinarySearchHeader,\n segments: new r.Array(LookupSingle, function (t) {\n return t.binarySearchHeader.nUnits;\n })\n },\n 8: {\n firstGlyph: r.uint16,\n count: r.uint16,\n values: new r.Array(ValueType, 'count')\n }\n });\n};\nfunction StateTable(entryData, lookupType) {\n if (entryData === void 0) {\n entryData = {};\n }\n if (lookupType === void 0) {\n lookupType = r.uint16;\n }\n var entry = Object.assign({\n newState: r.uint16,\n flags: r.uint16\n }, entryData);\n var Entry = new r.Struct(entry);\n var StateArray = new UnboundedArray(new r.Array(r.uint16, function (t) {\n return t.nClasses;\n }));\n var StateHeader = new r.Struct({\n nClasses: r.uint32,\n classTable: new r.Pointer(r.uint32, new LookupTable(lookupType)),\n stateArray: new r.Pointer(r.uint32, StateArray),\n entryTable: new r.Pointer(r.uint32, new UnboundedArray(Entry))\n });\n return StateHeader;\n} // This is the old version of the StateTable structure\n\nfunction StateTable1(entryData, lookupType) {\n if (entryData === void 0) {\n entryData = {};\n }\n if (lookupType === void 0) {\n lookupType = r.uint16;\n }\n var ClassLookupTable = new r.Struct({\n version: function version() {\n return 8;\n },\n // simulate LookupTable\n firstGlyph: r.uint16,\n values: new r.Array(r.uint8, r.uint16)\n });\n var entry = Object.assign({\n newStateOffset: r.uint16,\n // convert offset to stateArray index\n newState: function newState(t) {\n return (t.newStateOffset - (t.parent.stateArray.base - t.parent._startOffset)) / t.parent.nClasses;\n },\n flags: r.uint16\n }, entryData);\n var Entry = new r.Struct(entry);\n var StateArray = new UnboundedArray(new r.Array(r.uint8, function (t) {\n return t.nClasses;\n }));\n var StateHeader1 = new r.Struct({\n nClasses: r.uint16,\n classTable: new r.Pointer(r.uint16, ClassLookupTable),\n stateArray: new r.Pointer(r.uint16, StateArray),\n entryTable: new r.Pointer(r.uint16, new UnboundedArray(Entry))\n });\n return StateHeader1;\n}\nvar BslnSubtable = new r.VersionedStruct('format', {\n 0: {\n // Distance-based, no mapping\n deltas: new r.Array(r.int16, 32)\n },\n 1: {\n // Distance-based, with mapping\n deltas: new r.Array(r.int16, 32),\n mappingData: new LookupTable(r.uint16)\n },\n 2: {\n // Control point-based, no mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32)\n },\n 3: {\n // Control point-based, with mapping\n standardGlyph: r.uint16,\n controlPoints: new r.Array(r.uint16, 32),\n mappingData: new LookupTable(r.uint16)\n }\n});\nvar bsln = new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n defaultBaseline: r.uint16,\n subtable: BslnSubtable\n});\nvar Setting = new r.Struct({\n setting: r.uint16,\n nameIndex: r.int16,\n name: function name(t) {\n return t.parent.parent.parent.name.records.fontFeatures[t.nameIndex];\n }\n});\nvar FeatureName = new r.Struct({\n feature: r.uint16,\n nSettings: r.uint16,\n settingTable: new r.Pointer(r.uint32, new r.Array(Setting, 'nSettings'), {\n type: 'parent'\n }),\n featureFlags: new r.Bitfield(r.uint8, [null, null, null, null, null, null, 'hasDefault', 'exclusive']),\n defaultSetting: r.uint8,\n nameIndex: r.int16,\n name: function name(t) {\n return t.parent.parent.name.records.fontFeatures[t.nameIndex];\n }\n});\nvar feat = new r.Struct({\n version: r.fixed32,\n featureNameCount: r.uint16,\n reserved1: new r.Reserved(r.uint16),\n reserved2: new r.Reserved(r.uint32),\n featureNames: new r.Array(FeatureName, 'featureNameCount')\n});\nvar Axis$1 = new r.Struct({\n axisTag: new r.String(4),\n minValue: r.fixed32,\n defaultValue: r.fixed32,\n maxValue: r.fixed32,\n flags: r.uint16,\n nameID: r.uint16,\n name: function name(t) {\n return t.parent.parent.name.records.fontFeatures[t.nameID];\n }\n});\nvar Instance = new r.Struct({\n nameID: r.uint16,\n name: function name(t) {\n return t.parent.parent.name.records.fontFeatures[t.nameID];\n },\n flags: r.uint16,\n coord: new r.Array(r.fixed32, function (t) {\n return t.parent.axisCount;\n }),\n postscriptNameID: new r.Optional(r.uint16, function (t) {\n return t.parent.instanceSize - t._currentOffset > 0;\n })\n});\nvar fvar = new r.Struct({\n version: r.fixed32,\n offsetToData: r.uint16,\n countSizePairs: r.uint16,\n axisCount: r.uint16,\n axisSize: r.uint16,\n instanceCount: r.uint16,\n instanceSize: r.uint16,\n axis: new r.Array(Axis$1, 'axisCount'),\n instance: new r.Array(Instance, 'instanceCount')\n});\nvar shortFrac$1 = new r.Fixed(16, 'BE', 14);\nvar Offset = /*#__PURE__*/function () {\n function Offset() {}\n Offset.decode = function decode(stream, parent) {\n // In short format, offsets are multiplied by 2.\n // This doesn't seem to be documented by Apple, but it\n // is implemented this way in Freetype.\n return parent.flags ? stream.readUInt32BE() : stream.readUInt16BE() * 2;\n };\n return Offset;\n}();\nvar gvar = new r.Struct({\n version: r.uint16,\n reserved: new r.Reserved(r.uint16),\n axisCount: r.uint16,\n globalCoordCount: r.uint16,\n globalCoords: new r.Pointer(r.uint32, new r.Array(new r.Array(shortFrac$1, 'axisCount'), 'globalCoordCount')),\n glyphCount: r.uint16,\n flags: r.uint16,\n offsetToData: r.uint32,\n offsets: new r.Array(new r.Pointer(Offset, 'void', {\n relativeTo: function relativeTo(ctx) {\n return ctx.offsetToData;\n },\n allowNull: false\n }), function (t) {\n return t.glyphCount + 1;\n })\n});\nvar ClassTable$1 = new r.Struct({\n length: r.uint16,\n coverage: r.uint16,\n subFeatureFlags: r.uint32,\n stateTable: new StateTable1()\n});\nvar WidthDeltaRecord = new r.Struct({\n justClass: r.uint32,\n beforeGrowLimit: r.fixed32,\n beforeShrinkLimit: r.fixed32,\n afterGrowLimit: r.fixed32,\n afterShrinkLimit: r.fixed32,\n growFlags: r.uint16,\n shrinkFlags: r.uint16\n});\nvar WidthDeltaCluster = new r.Array(WidthDeltaRecord, r.uint32);\nvar ActionData = new r.VersionedStruct('actionType', {\n 0: {\n // Decomposition action\n lowerLimit: r.fixed32,\n upperLimit: r.fixed32,\n order: r.uint16,\n glyphs: new r.Array(r.uint16, r.uint16)\n },\n 1: {\n // Unconditional add glyph action\n addGlyph: r.uint16\n },\n 2: {\n // Conditional add glyph action\n substThreshold: r.fixed32,\n addGlyph: r.uint16,\n substGlyph: r.uint16\n },\n 3: {},\n // Stretch glyph action (no data, not supported by CoreText)\n 4: {\n // Ductile glyph action (not supported by CoreText)\n variationAxis: r.uint32,\n minimumLimit: r.fixed32,\n noStretchValue: r.fixed32,\n maximumLimit: r.fixed32\n },\n 5: {\n // Repeated add glyph action\n flags: r.uint16,\n glyph: r.uint16\n }\n});\nvar Action = new r.Struct({\n actionClass: r.uint16,\n actionType: r.uint16,\n actionLength: r.uint32,\n actionData: ActionData,\n padding: new r.Reserved(r.uint8, function (t) {\n return t.actionLength - t._currentOffset;\n })\n});\nvar PostcompensationAction = new r.Array(Action, r.uint32);\nvar PostCompensationTable = new r.Struct({\n lookupTable: new LookupTable(new r.Pointer(r.uint16, PostcompensationAction))\n});\nvar JustificationTable = new r.Struct({\n classTable: new r.Pointer(r.uint16, ClassTable$1, {\n type: 'parent'\n }),\n wdcOffset: r.uint16,\n postCompensationTable: new r.Pointer(r.uint16, PostCompensationTable, {\n type: 'parent'\n }),\n widthDeltaClusters: new LookupTable(new r.Pointer(r.uint16, WidthDeltaCluster, {\n type: 'parent',\n relativeTo: function relativeTo(ctx) {\n return ctx.wdcOffset;\n }\n }))\n});\nvar just = new r.Struct({\n version: r.uint32,\n format: r.uint16,\n horizontal: new r.Pointer(r.uint16, JustificationTable),\n vertical: new r.Pointer(r.uint16, JustificationTable)\n});\nvar LigatureData = {\n action: r.uint16\n};\nvar ContextualData = {\n markIndex: r.uint16,\n currentIndex: r.uint16\n};\nvar InsertionData = {\n currentInsertIndex: r.uint16,\n markedInsertIndex: r.uint16\n};\nvar SubstitutionTable = new r.Struct({\n items: new UnboundedArray(new r.Pointer(r.uint32, new LookupTable()))\n});\nvar SubtableData = new r.VersionedStruct('type', {\n 0: {\n // Indic Rearrangement Subtable\n stateTable: new StateTable()\n },\n 1: {\n // Contextual Glyph Substitution Subtable\n stateTable: new StateTable(ContextualData),\n substitutionTable: new r.Pointer(r.uint32, SubstitutionTable)\n },\n 2: {\n // Ligature subtable\n stateTable: new StateTable(LigatureData),\n ligatureActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint32)),\n components: new r.Pointer(r.uint32, new UnboundedArray(r.uint16)),\n ligatureList: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n },\n 4: {\n // Non-contextual Glyph Substitution Subtable\n lookupTable: new LookupTable()\n },\n 5: {\n // Glyph Insertion Subtable\n stateTable: new StateTable(InsertionData),\n insertionActions: new r.Pointer(r.uint32, new UnboundedArray(r.uint16))\n }\n});\nvar Subtable = new r.Struct({\n length: r.uint32,\n coverage: r.uint24,\n type: r.uint8,\n subFeatureFlags: r.uint32,\n table: SubtableData,\n padding: new r.Reserved(r.uint8, function (t) {\n return t.length - t._currentOffset;\n })\n});\nvar FeatureEntry = new r.Struct({\n featureType: r.uint16,\n featureSetting: r.uint16,\n enableFlags: r.uint32,\n disableFlags: r.uint32\n});\nvar MorxChain = new r.Struct({\n defaultFlags: r.uint32,\n chainLength: r.uint32,\n nFeatureEntries: r.uint32,\n nSubtables: r.uint32,\n features: new r.Array(FeatureEntry, 'nFeatureEntries'),\n subtables: new r.Array(Subtable, 'nSubtables')\n});\nvar morx = new r.Struct({\n version: r.uint16,\n unused: new r.Reserved(r.uint16),\n nChains: r.uint32,\n chains: new r.Array(MorxChain, 'nChains')\n});\nvar OpticalBounds = new r.Struct({\n left: r.int16,\n top: r.int16,\n right: r.int16,\n bottom: r.int16\n});\nvar opbd = new r.Struct({\n version: r.fixed32,\n format: r.uint16,\n lookupTable: new LookupTable(OpticalBounds)\n});\nvar tables = {};\ntables.cmap = cmap;\ntables.head = head;\ntables.hhea = hhea;\ntables.hmtx = hmtx;\ntables.maxp = maxp;\ntables.name = NameTable;\ntables['OS/2'] = OS2;\ntables.post = post; // TrueType Outlines\ntables.fpgm = fpgm;\ntables.loca = loca;\ntables.prep = prep;\ntables['cvt '] = cvt;\ntables.glyf = glyf; // PostScript Outlines\ntables['CFF '] = CFFFont;\ntables['CFF2'] = CFFFont;\ntables.VORG = VORG; // Bitmap Glyphs\ntables.EBLC = EBLC;\ntables.CBLC = tables.EBLC;\ntables.sbix = sbix;\ntables.COLR = COLR;\ntables.CPAL = CPAL; // Advanced OpenType Tables\ntables.BASE = BASE;\ntables.GDEF = GDEF;\ntables.GPOS = GPOS;\ntables.GSUB = GSUB;\ntables.JSTF = JSTF; // OpenType variations tables\ntables.HVAR = HVAR; // Other OpenType Tables\ntables.DSIG = DSIG;\ntables.gasp = gasp;\ntables.hdmx = hdmx;\ntables.kern = kern;\ntables.LTSH = LTSH;\ntables.PCLT = PCLT;\ntables.VDMX = VDMX;\ntables.vhea = vhea;\ntables.vmtx = vmtx; // Apple Advanced Typography Tables\ntables.avar = avar;\ntables.bsln = bsln;\ntables.feat = feat;\ntables.fvar = fvar;\ntables.gvar = gvar;\ntables.just = just;\ntables.morx = morx;\ntables.opbd = opbd;\nvar TableEntry = new r.Struct({\n tag: new r.String(4),\n checkSum: r.uint32,\n offset: new r.Pointer(r.uint32, 'void', {\n type: 'global'\n }),\n length: r.uint32\n});\nvar Directory = new r.Struct({\n tag: new r.String(4),\n numTables: r.uint16,\n searchRange: r.uint16,\n entrySelector: r.uint16,\n rangeShift: r.uint16,\n tables: new r.Array(TableEntry, 'numTables')\n});\nDirectory.process = function () {\n var tables = {};\n for (var _iterator9 = _createForOfIteratorHelperLoose(this.tables), _step9; !(_step9 = _iterator9()).done;) {\n var table = _step9.value;\n tables[table.tag] = table;\n }\n this.tables = tables;\n};\nDirectory.preEncode = function (stream) {\n var tables$1 = [];\n for (var tag in this.tables) {\n var table = this.tables[tag];\n if (table) {\n tables$1.push({\n tag: tag,\n checkSum: 0,\n offset: new r.VoidPointer(tables[tag], table),\n length: tables[tag].size(table)\n });\n }\n }\n this.tag = 'true';\n this.numTables = tables$1.length;\n this.tables = tables$1;\n var maxExponentFor2 = Math.floor(Math.log(this.numTables) / Math.LN2);\n var maxPowerOf2 = Math.pow(2, maxExponentFor2);\n this.searchRange = maxPowerOf2 * 16;\n this.entrySelector = Math.log(maxPowerOf2) / Math.LN2;\n this.rangeShift = this.numTables * 16 - this.searchRange;\n};\nfunction binarySearch(arr, cmp) {\n var min = 0;\n var max = arr.length - 1;\n while (min <= max) {\n var mid = min + max >> 1;\n var res = cmp(arr[mid]);\n if (res < 0) {\n max = mid - 1;\n } else if (res > 0) {\n min = mid + 1;\n } else {\n return mid;\n }\n }\n return -1;\n}\nfunction range(index, end) {\n var range = [];\n while (index < end) {\n range.push(index++);\n }\n return range;\n}\nvar _class;\ntry {\n var iconv = require('iconv-lite');\n} catch (err) {}\nvar CmapProcessor = (_class = /*#__PURE__*/function () {\n function CmapProcessor(cmapTable) {\n // Attempt to find a Unicode cmap first\n this.encoding = null;\n this.cmap = this.findSubtable(cmapTable, [\n // 32-bit subtables\n [3, 10], [0, 6], [0, 4],\n // 16-bit subtables\n [3, 1], [0, 3], [0, 2], [0, 1], [0, 0]]); // If not unicode cmap was found, and iconv-lite is installed,\n // take the first table with a supported encoding.\n\n if (!this.cmap && iconv) {\n for (var _iterator10 = _createForOfIteratorHelperLoose(cmapTable.tables), _step10; !(_step10 = _iterator10()).done;) {\n var cmap = _step10.value;\n var encoding = getEncoding(cmap.platformID, cmap.encodingID, cmap.table.language - 1);\n if (iconv.encodingExists(encoding)) {\n this.cmap = cmap.table;\n this.encoding = encoding;\n }\n }\n }\n if (!this.cmap) {\n throw new Error(\"Could not find a supported cmap table\");\n }\n this.uvs = this.findSubtable(cmapTable, [[0, 5]]);\n if (this.uvs && this.uvs.version !== 14) {\n this.uvs = null;\n }\n }\n var _proto15 = CmapProcessor.prototype;\n _proto15.findSubtable = function findSubtable(cmapTable, pairs) {\n for (var _iterator11 = _createForOfIteratorHelperLoose(pairs), _step11; !(_step11 = _iterator11()).done;) {\n var _step11$value = _step11.value,\n platformID = _step11$value[0],\n encodingID = _step11$value[1];\n for (var _iterator12 = _createForOfIteratorHelperLoose(cmapTable.tables), _step12; !(_step12 = _iterator12()).done;) {\n var cmap = _step12.value;\n if (cmap.platformID === platformID && cmap.encodingID === encodingID) {\n return cmap.table;\n }\n }\n }\n return null;\n };\n _proto15.lookup = function lookup(codepoint, variationSelector) {\n // If there is no Unicode cmap in this font, we need to re-encode\n // the codepoint in the encoding that the cmap supports.\n if (this.encoding) {\n var buf = iconv.encode(String.fromCodePoint(codepoint), this.encoding);\n codepoint = 0;\n for (var i = 0; i < buf.length; i++) {\n codepoint = codepoint << 8 | buf[i];\n } // Otherwise, try to get a Unicode variation selector for this codepoint if one is provided.\n } else if (variationSelector) {\n var gid = this.getVariationSelector(codepoint, variationSelector);\n if (gid) {\n return gid;\n }\n }\n var cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return cmap.codeMap.get(codepoint) || 0;\n case 4:\n {\n var min = 0;\n var max = cmap.segCount - 1;\n while (min <= max) {\n var mid = min + max >> 1;\n if (codepoint < cmap.startCode.get(mid)) {\n max = mid - 1;\n } else if (codepoint > cmap.endCode.get(mid)) {\n min = mid + 1;\n } else {\n var rangeOffset = cmap.idRangeOffset.get(mid);\n var _gid = void 0;\n if (rangeOffset === 0) {\n _gid = codepoint + cmap.idDelta.get(mid);\n } else {\n var index = rangeOffset / 2 + (codepoint - cmap.startCode.get(mid)) - (cmap.segCount - mid);\n _gid = cmap.glyphIndexArray.get(index) || 0;\n if (_gid !== 0) {\n _gid += cmap.idDelta.get(mid);\n }\n }\n return _gid & 0xffff;\n }\n }\n return 0;\n }\n case 8:\n throw new Error('TODO: cmap format 8');\n case 6:\n case 10:\n return cmap.glyphIndices.get(codepoint - cmap.firstCode) || 0;\n case 12:\n case 13:\n {\n var _min = 0;\n var _max = cmap.nGroups - 1;\n while (_min <= _max) {\n var _mid = _min + _max >> 1;\n var group = cmap.groups.get(_mid);\n if (codepoint < group.startCharCode) {\n _max = _mid - 1;\n } else if (codepoint > group.endCharCode) {\n _min = _mid + 1;\n } else {\n if (cmap.version === 12) {\n return group.glyphID + (codepoint - group.startCharCode);\n } else {\n return group.glyphID;\n }\n }\n }\n return 0;\n }\n case 14:\n throw new Error('TODO: cmap format 14');\n default:\n throw new Error(\"Unknown cmap format \".concat(cmap.version));\n }\n };\n _proto15.getVariationSelector = function getVariationSelector(codepoint, variationSelector) {\n if (!this.uvs) {\n return 0;\n }\n var selectors = this.uvs.varSelectors.toArray();\n var i = binarySearch(selectors, function (x) {\n return variationSelector - x.varSelector;\n });\n var sel = selectors[i];\n if (i !== -1 && sel.defaultUVS) {\n i = binarySearch(sel.defaultUVS, function (x) {\n return codepoint < x.startUnicodeValue ? -1 : codepoint > x.startUnicodeValue + x.additionalCount ? +1 : 0;\n });\n }\n if (i !== -1 && sel.nonDefaultUVS) {\n i = binarySearch(sel.nonDefaultUVS, function (x) {\n return codepoint - x.unicodeValue;\n });\n if (i !== -1) {\n return sel.nonDefaultUVS[i].glyphID;\n }\n }\n return 0;\n };\n _proto15.getCharacterSet = function getCharacterSet() {\n var cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n return range(0, cmap.codeMap.length);\n case 4:\n {\n var res = [];\n var endCodes = cmap.endCode.toArray();\n for (var i = 0; i < endCodes.length; i++) {\n var tail = endCodes[i] + 1;\n var start = cmap.startCode.get(i);\n res.push.apply(res, range(start, tail));\n }\n return res;\n }\n case 8:\n throw new Error('TODO: cmap format 8');\n case 6:\n case 10:\n return range(cmap.firstCode, cmap.firstCode + cmap.glyphIndices.length);\n case 12:\n case 13:\n {\n var _res = [];\n for (var _iterator13 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step13; !(_step13 = _iterator13()).done;) {\n var group = _step13.value;\n _res.push.apply(_res, range(group.startCharCode, group.endCharCode + 1));\n }\n return _res;\n }\n case 14:\n throw new Error('TODO: cmap format 14');\n default:\n throw new Error(\"Unknown cmap format \".concat(cmap.version));\n }\n };\n _proto15.codePointsForGlyph = function codePointsForGlyph(gid) {\n var cmap = this.cmap;\n switch (cmap.version) {\n case 0:\n {\n var res = [];\n for (var i = 0; i < 256; i++) {\n if (cmap.codeMap.get(i) === gid) {\n res.push(i);\n }\n }\n return res;\n }\n case 4:\n {\n var _res2 = [];\n for (var _i = 0; _i < cmap.segCount; _i++) {\n var end = cmap.endCode.get(_i);\n var start = cmap.startCode.get(_i);\n var rangeOffset = cmap.idRangeOffset.get(_i);\n var delta = cmap.idDelta.get(_i);\n for (var c = start; c <= end; c++) {\n var g = 0;\n if (rangeOffset === 0) {\n g = c + delta;\n } else {\n var index = rangeOffset / 2 + (c - start) - (cmap.segCount - _i);\n g = cmap.glyphIndexArray.get(index) || 0;\n if (g !== 0) {\n g += delta;\n }\n }\n if (g === gid) {\n _res2.push(c);\n }\n }\n }\n return _res2;\n }\n case 12:\n {\n var _res3 = [];\n for (var _iterator14 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step14; !(_step14 = _iterator14()).done;) {\n var group = _step14.value;\n if (gid >= group.glyphID && gid <= group.glyphID + (group.endCharCode - group.startCharCode)) {\n _res3.push(group.startCharCode + (gid - group.glyphID));\n }\n }\n return _res3;\n }\n case 13:\n {\n var _res4 = [];\n for (var _iterator15 = _createForOfIteratorHelperLoose(cmap.groups.toArray()), _step15; !(_step15 = _iterator15()).done;) {\n var _group = _step15.value;\n if (gid === _group.glyphID) {\n _res4.push.apply(_res4, range(_group.startCharCode, _group.endCharCode + 1));\n }\n }\n return _res4;\n }\n default:\n throw new Error(\"Unknown cmap format \".concat(cmap.version));\n }\n };\n return CmapProcessor;\n}(), (_applyDecoratedDescriptor(_class.prototype, \"getCharacterSet\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"getCharacterSet\"), _class.prototype), _applyDecoratedDescriptor(_class.prototype, \"codePointsForGlyph\", [cache], Object.getOwnPropertyDescriptor(_class.prototype, \"codePointsForGlyph\"), _class.prototype)), _class);\nvar KernProcessor = /*#__PURE__*/function () {\n function KernProcessor(font) {\n this.kern = font.kern;\n }\n var _proto16 = KernProcessor.prototype;\n _proto16.process = function process(glyphs, positions) {\n for (var glyphIndex = 0; glyphIndex < glyphs.length - 1; glyphIndex++) {\n var left = glyphs[glyphIndex].id;\n var right = glyphs[glyphIndex + 1].id;\n positions[glyphIndex].xAdvance += this.getKerning(left, right);\n }\n };\n _proto16.getKerning = function getKerning(left, right) {\n var res = 0;\n for (var _iterator16 = _createForOfIteratorHelperLoose(this.kern.tables), _step16; !(_step16 = _iterator16()).done;) {\n var table = _step16.value;\n if (table.coverage.crossStream) {\n continue;\n }\n switch (table.version) {\n case 0:\n if (!table.coverage.horizontal) {\n continue;\n }\n break;\n case 1:\n if (table.coverage.vertical || table.coverage.variation) {\n continue;\n }\n break;\n default:\n throw new Error(\"Unsupported kerning table version \".concat(table.version));\n }\n var val = 0;\n var s = table.subtable;\n switch (table.format) {\n case 0:\n var pairIdx = binarySearch(s.pairs, function (pair) {\n return left - pair.left || right - pair.right;\n });\n if (pairIdx >= 0) {\n val = s.pairs[pairIdx].value;\n }\n break;\n case 2:\n var leftOffset = 0,\n rightOffset = 0;\n if (left >= s.leftTable.firstGlyph && left < s.leftTable.firstGlyph + s.leftTable.nGlyphs) {\n leftOffset = s.leftTable.offsets[left - s.leftTable.firstGlyph];\n } else {\n leftOffset = s.array.off;\n }\n if (right >= s.rightTable.firstGlyph && right < s.rightTable.firstGlyph + s.rightTable.nGlyphs) {\n rightOffset = s.rightTable.offsets[right - s.rightTable.firstGlyph];\n }\n var index = (leftOffset + rightOffset - s.array.off) / 2;\n val = s.array.values.get(index);\n break;\n case 3:\n if (left >= s.glyphCount || right >= s.glyphCount) {\n return 0;\n }\n val = s.kernValue[s.kernIndex[s.leftClass[left] * s.rightClassCount + s.rightClass[right]]];\n break;\n default:\n throw new Error(\"Unsupported kerning sub-table format \".concat(table.format));\n } // Microsoft supports the override flag, which resets the result\n // Otherwise, the sum of the results from all subtables is returned\n\n if (table.coverage.override) {\n res = val;\n } else {\n res += val;\n }\n }\n return res;\n };\n return KernProcessor;\n}();\n/**\r\n * This class is used when GPOS does not define 'mark' or 'mkmk' features\r\n * for positioning marks relative to base glyphs. It uses the unicode\r\n * combining class property to position marks.\r\n *\r\n * Based on code from Harfbuzz, thanks!\r\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-fallback.cc\r\n */\nvar UnicodeLayoutEngine = /*#__PURE__*/function () {\n function UnicodeLayoutEngine(font) {\n this.font = font;\n }\n var _proto17 = UnicodeLayoutEngine.prototype;\n _proto17.positionGlyphs = function positionGlyphs(glyphs, positions) {\n // find each base + mark cluster, and position the marks relative to the base\n var clusterStart = 0;\n var clusterEnd = 0;\n for (var index = 0; index < glyphs.length; index++) {\n var glyph = glyphs[index];\n if (glyph.isMark) {\n // TODO: handle ligatures\n clusterEnd = index;\n } else {\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n clusterStart = clusterEnd = index;\n }\n }\n if (clusterStart !== clusterEnd) {\n this.positionCluster(glyphs, positions, clusterStart, clusterEnd);\n }\n return positions;\n };\n _proto17.positionCluster = function positionCluster(glyphs, positions, clusterStart, clusterEnd) {\n var base = glyphs[clusterStart];\n var baseBox = base.cbox.copy(); // adjust bounding box for ligature glyphs\n\n if (base.codePoints.length > 1) {\n // LTR. TODO: RTL support.\n baseBox.minX += (base.codePoints.length - 1) * baseBox.width / base.codePoints.length;\n }\n var xOffset = -positions[clusterStart].xAdvance;\n var yOffset = 0;\n var yGap = this.font.unitsPerEm / 16; // position each of the mark glyphs relative to the base glyph\n\n for (var index = clusterStart + 1; index <= clusterEnd; index++) {\n var mark = glyphs[index];\n var markBox = mark.cbox;\n var position = positions[index];\n var combiningClass = this.getCombiningClass(mark.codePoints[0]);\n if (combiningClass !== 'Not_Reordered') {\n position.xOffset = position.yOffset = 0; // x positioning\n\n switch (combiningClass) {\n case 'Double_Above':\n case 'Double_Below':\n // LTR. TODO: RTL support.\n position.xOffset += baseBox.minX - markBox.width / 2 - markBox.minX;\n break;\n case 'Attached_Below_Left':\n case 'Below_Left':\n case 'Above_Left':\n // left align\n position.xOffset += baseBox.minX - markBox.minX;\n break;\n case 'Attached_Above_Right':\n case 'Below_Right':\n case 'Above_Right':\n // right align\n position.xOffset += baseBox.maxX - markBox.width - markBox.minX;\n break;\n default:\n // Attached_Below, Attached_Above, Below, Above, other\n // center align\n position.xOffset += baseBox.minX + (baseBox.width - markBox.width) / 2 - markBox.minX;\n } // y positioning\n\n switch (combiningClass) {\n case 'Double_Below':\n case 'Below_Left':\n case 'Below':\n case 'Below_Right':\n case 'Attached_Below_Left':\n case 'Attached_Below':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Below_Left' || combiningClass === 'Attached_Below') {\n baseBox.minY += yGap;\n }\n position.yOffset = -baseBox.minY - markBox.maxY;\n baseBox.minY += markBox.height;\n break;\n case 'Double_Above':\n case 'Above_Left':\n case 'Above':\n case 'Above_Right':\n case 'Attached_Above':\n case 'Attached_Above_Right':\n // add a small gap between the glyphs if they are not attached\n if (combiningClass === 'Attached_Above' || combiningClass === 'Attached_Above_Right') {\n baseBox.maxY += yGap;\n }\n position.yOffset = baseBox.maxY - markBox.minY;\n baseBox.maxY += markBox.height;\n break;\n }\n position.xAdvance = position.yAdvance = 0;\n position.xOffset += xOffset;\n position.yOffset += yOffset;\n } else {\n xOffset -= position.xAdvance;\n yOffset -= position.yAdvance;\n }\n }\n return;\n };\n _proto17.getCombiningClass = function getCombiningClass(codePoint) {\n var combiningClass = unicode.getCombiningClass(codePoint); // Thai / Lao need some per-character work\n\n if ((codePoint & ~0xff) === 0x0e00) {\n if (combiningClass === 'Not_Reordered') {\n switch (codePoint) {\n case 0x0e31:\n case 0x0e34:\n case 0x0e35:\n case 0x0e36:\n case 0x0e37:\n case 0x0e47:\n case 0x0e4c:\n case 0x0e3d:\n case 0x0e4e:\n return 'Above_Right';\n case 0x0eb1:\n case 0x0eb4:\n case 0x0eb5:\n case 0x0eb6:\n case 0x0eb7:\n case 0x0ebb:\n case 0x0ecc:\n case 0x0ecd:\n return 'Above';\n case 0x0ebc:\n return 'Below';\n }\n } else if (codePoint === 0x0e3a) {\n // virama\n return 'Below_Right';\n }\n }\n switch (combiningClass) {\n // Hebrew\n case 'CCC10': // sheva\n\n case 'CCC11': // hataf segol\n\n case 'CCC12': // hataf patah\n\n case 'CCC13': // hataf qamats\n\n case 'CCC14': // hiriq\n\n case 'CCC15': // tsere\n\n case 'CCC16': // segol\n\n case 'CCC17': // patah\n\n case 'CCC18': // qamats\n\n case 'CCC20': // qubuts\n\n case 'CCC22':\n // meteg\n return 'Below';\n case 'CCC23':\n // rafe\n return 'Attached_Above';\n case 'CCC24':\n // shin dot\n return 'Above_Right';\n case 'CCC25': // sin dot\n\n case 'CCC19':\n // holam\n return 'Above_Left';\n case 'CCC26':\n // point varika\n return 'Above';\n case 'CCC21':\n // dagesh\n break;\n // Arabic and Syriac\n\n case 'CCC27': // fathatan\n\n case 'CCC28': // dammatan\n\n case 'CCC30': // fatha\n\n case 'CCC31': // damma\n\n case 'CCC33': // shadda\n\n case 'CCC34': // sukun\n\n case 'CCC35': // superscript alef\n\n case 'CCC36':\n // superscript alaph\n return 'Above';\n case 'CCC29': // kasratan\n\n case 'CCC32':\n // kasra\n return 'Below';\n // Thai\n\n case 'CCC103':\n // sara u / sara uu\n return 'Below_Right';\n case 'CCC107':\n // mai\n return 'Above_Right';\n // Lao\n\n case 'CCC118':\n // sign u / sign uu\n return 'Below';\n case 'CCC122':\n // mai\n return 'Above';\n // Tibetan\n\n case 'CCC129': // sign aa\n\n case 'CCC132':\n // sign u\n return 'Below';\n case 'CCC130':\n // sign i\n return 'Above';\n }\n return combiningClass;\n };\n return UnicodeLayoutEngine;\n}();\n/**\r\n * Represents a glyph bounding box\r\n */\nvar BBox = /*#__PURE__*/function () {\n function BBox(minX, minY, maxX, maxY) {\n if (minX === void 0) {\n minX = Infinity;\n }\n if (minY === void 0) {\n minY = Infinity;\n }\n if (maxX === void 0) {\n maxX = -Infinity;\n }\n if (maxY === void 0) {\n maxY = -Infinity;\n }\n /**\r\n * The minimum X position in the bounding box\r\n * @type {number}\r\n */\n this.minX = minX;\n /**\r\n * The minimum Y position in the bounding box\r\n * @type {number}\r\n */\n\n this.minY = minY;\n /**\r\n * The maxmimum X position in the bounding box\r\n * @type {number}\r\n */\n\n this.maxX = maxX;\n /**\r\n * The maxmimum Y position in the bounding box\r\n * @type {number}\r\n */\n\n this.maxY = maxY;\n }\n /**\r\n * The width of the bounding box\r\n * @type {number}\r\n */\n var _proto18 = BBox.prototype;\n _proto18.addPoint = function addPoint(x, y) {\n if (Math.abs(x) !== Infinity) {\n if (x < this.minX) {\n this.minX = x;\n }\n if (x > this.maxX) {\n this.maxX = x;\n }\n }\n if (Math.abs(y) !== Infinity) {\n if (y < this.minY) {\n this.minY = y;\n }\n if (y > this.maxY) {\n this.maxY = y;\n }\n }\n };\n _proto18.copy = function copy() {\n return new BBox(this.minX, this.minY, this.maxX, this.maxY);\n };\n _createClass(BBox, [{\n key: \"width\",\n get: function get() {\n return this.maxX - this.minX;\n }\n /**\r\n * The height of the bounding box\r\n * @type {number}\r\n */\n }, {\n key: \"height\",\n get: function get() {\n return this.maxY - this.minY;\n }\n }]);\n return BBox;\n}(); // Data from http://www.microsoft.com/typography/otspec/scripttags.htm\n// and http://www.unicode.org/Public/UNIDATA/PropertyValueAliases.txt.\nvar UNICODE_SCRIPTS = {\n Caucasian_Albanian: 'aghb',\n Arabic: 'arab',\n Imperial_Aramaic: 'armi',\n Armenian: 'armn',\n Avestan: 'avst',\n Balinese: 'bali',\n Bamum: 'bamu',\n Bassa_Vah: 'bass',\n Batak: 'batk',\n Bengali: ['bng2', 'beng'],\n Bopomofo: 'bopo',\n Brahmi: 'brah',\n Braille: 'brai',\n Buginese: 'bugi',\n Buhid: 'buhd',\n Chakma: 'cakm',\n Canadian_Aboriginal: 'cans',\n Carian: 'cari',\n Cham: 'cham',\n Cherokee: 'cher',\n Coptic: 'copt',\n Cypriot: 'cprt',\n Cyrillic: 'cyrl',\n Devanagari: ['dev2', 'deva'],\n Deseret: 'dsrt',\n Duployan: 'dupl',\n Egyptian_Hieroglyphs: 'egyp',\n Elbasan: 'elba',\n Ethiopic: 'ethi',\n Georgian: 'geor',\n Glagolitic: 'glag',\n Gothic: 'goth',\n Grantha: 'gran',\n Greek: 'grek',\n Gujarati: ['gjr2', 'gujr'],\n Gurmukhi: ['gur2', 'guru'],\n Hangul: 'hang',\n Han: 'hani',\n Hanunoo: 'hano',\n Hebrew: 'hebr',\n Hiragana: 'hira',\n Pahawh_Hmong: 'hmng',\n Katakana_Or_Hiragana: 'hrkt',\n Old_Italic: 'ital',\n Javanese: 'java',\n Kayah_Li: 'kali',\n Katakana: 'kana',\n Kharoshthi: 'khar',\n Khmer: 'khmr',\n Khojki: 'khoj',\n Kannada: ['knd2', 'knda'],\n Kaithi: 'kthi',\n Tai_Tham: 'lana',\n Lao: 'lao ',\n Latin: 'latn',\n Lepcha: 'lepc',\n Limbu: 'limb',\n Linear_A: 'lina',\n Linear_B: 'linb',\n Lisu: 'lisu',\n Lycian: 'lyci',\n Lydian: 'lydi',\n Mahajani: 'mahj',\n Mandaic: 'mand',\n Manichaean: 'mani',\n Mende_Kikakui: 'mend',\n Meroitic_Cursive: 'merc',\n Meroitic_Hieroglyphs: 'mero',\n Malayalam: ['mlm2', 'mlym'],\n Modi: 'modi',\n Mongolian: 'mong',\n Mro: 'mroo',\n Meetei_Mayek: 'mtei',\n Myanmar: ['mym2', 'mymr'],\n Old_North_Arabian: 'narb',\n Nabataean: 'nbat',\n Nko: 'nko ',\n Ogham: 'ogam',\n Ol_Chiki: 'olck',\n Old_Turkic: 'orkh',\n Oriya: ['ory2', 'orya'],\n Osmanya: 'osma',\n Palmyrene: 'palm',\n Pau_Cin_Hau: 'pauc',\n Old_Permic: 'perm',\n Phags_Pa: 'phag',\n Inscriptional_Pahlavi: 'phli',\n Psalter_Pahlavi: 'phlp',\n Phoenician: 'phnx',\n Miao: 'plrd',\n Inscriptional_Parthian: 'prti',\n Rejang: 'rjng',\n Runic: 'runr',\n Samaritan: 'samr',\n Old_South_Arabian: 'sarb',\n Saurashtra: 'saur',\n Shavian: 'shaw',\n Sharada: 'shrd',\n Siddham: 'sidd',\n Khudawadi: 'sind',\n Sinhala: 'sinh',\n Sora_Sompeng: 'sora',\n Sundanese: 'sund',\n Syloti_Nagri: 'sylo',\n Syriac: 'syrc',\n Tagbanwa: 'tagb',\n Takri: 'takr',\n Tai_Le: 'tale',\n New_Tai_Lue: 'talu',\n Tamil: ['tml2', 'taml'],\n Tai_Viet: 'tavt',\n Telugu: ['tel2', 'telu'],\n Tifinagh: 'tfng',\n Tagalog: 'tglg',\n Thaana: 'thaa',\n Thai: 'thai',\n Tibetan: 'tibt',\n Tirhuta: 'tirh',\n Ugaritic: 'ugar',\n Vai: 'vai ',\n Warang_Citi: 'wara',\n Old_Persian: 'xpeo',\n Cuneiform: 'xsux',\n Yi: 'yi ',\n Inherited: 'zinh',\n Common: 'zyyy',\n Unknown: 'zzzz'\n};\nvar OPENTYPE_SCRIPTS = {};\nfor (var script in UNICODE_SCRIPTS) {\n var tag = UNICODE_SCRIPTS[script];\n if (Array.isArray(tag)) {\n for (var _iterator17 = _createForOfIteratorHelperLoose(tag), _step17; !(_step17 = _iterator17()).done;) {\n var t = _step17.value;\n OPENTYPE_SCRIPTS[t] = script;\n }\n } else {\n OPENTYPE_SCRIPTS[tag] = script;\n }\n}\nfunction fromOpenType(tag) {\n return OPENTYPE_SCRIPTS[tag];\n}\nfunction forString(string) {\n var len = string.length;\n var idx = 0;\n while (idx < len) {\n var code = string.charCodeAt(idx++); // Check if this is a high surrogate\n\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n var next = string.charCodeAt(idx); // Check if this is a low surrogate\n\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3FF) << 10) + (next & 0x3FF) + 0x10000;\n }\n }\n var _script = unicode.getScript(code);\n if (_script !== 'Common' && _script !== 'Inherited' && _script !== 'Unknown') {\n return UNICODE_SCRIPTS[_script];\n }\n }\n return UNICODE_SCRIPTS.Unknown;\n}\nfunction forCodePoints(codePoints) {\n for (var i = 0; i < codePoints.length; i++) {\n var codePoint = codePoints[i];\n var _script2 = unicode.getScript(codePoint);\n if (_script2 !== 'Common' && _script2 !== 'Inherited' && _script2 !== 'Unknown') {\n return UNICODE_SCRIPTS[_script2];\n }\n }\n return UNICODE_SCRIPTS.Unknown;\n} // The scripts in this map are written from right to left\n\nvar RTL = {\n arab: true,\n // Arabic\n hebr: true,\n // Hebrew\n syrc: true,\n // Syriac\n thaa: true,\n // Thaana\n cprt: true,\n // Cypriot Syllabary\n khar: true,\n // Kharosthi\n phnx: true,\n // Phoenician\n 'nko ': true,\n // N'Ko\n lydi: true,\n // Lydian\n avst: true,\n // Avestan\n armi: true,\n // Imperial Aramaic\n phli: true,\n // Inscriptional Pahlavi\n prti: true,\n // Inscriptional Parthian\n sarb: true,\n // Old South Arabian\n orkh: true,\n // Old Turkic, Orkhon Runic\n samr: true,\n // Samaritan\n mand: true,\n // Mandaic, Mandaean\n merc: true,\n // Meroitic Cursive\n mero: true,\n // Meroitic Hieroglyphs\n // Unicode 7.0 (not listed on http://www.microsoft.com/typography/otspec/scripttags.htm)\n mani: true,\n // Manichaean\n mend: true,\n // Mende Kikakui\n nbat: true,\n // Nabataean\n narb: true,\n // Old North Arabian\n palm: true,\n // Palmyrene\n phlp: true // Psalter Pahlavi\n};\nfunction direction(script) {\n if (RTL[script]) {\n return 'rtl';\n }\n return 'ltr';\n}\n\n/**\r\n * Represents a run of Glyph and GlyphPosition objects.\r\n * Returned by the font layout method.\r\n */\nvar GlyphRun = /*#__PURE__*/function () {\n function GlyphRun(glyphs, features, script, language, direction$1) {\n /**\r\n * An array of Glyph objects in the run\r\n * @type {Glyph[]}\r\n */\n this.glyphs = glyphs;\n /**\r\n * An array of GlyphPosition objects for each glyph in the run\r\n * @type {GlyphPosition[]}\r\n */\n\n this.positions = null;\n /**\r\n * The script that was requested for shaping. This was either passed in or detected automatically.\r\n * @type {string}\r\n */\n\n this.script = script;\n /**\r\n * The language requested for shaping, as passed in. If `null`, the default language for the\r\n * script was used.\r\n * @type {string}\r\n */\n\n this.language = language || null;\n /**\r\n * The direction requested for shaping, as passed in (either ltr or rtl).\r\n * If `null`, the default direction of the script is used.\r\n * @type {string}\r\n */\n\n this.direction = direction$1 || direction(script);\n /**\r\n * The features requested during shaping. This is a combination of user\r\n * specified features and features chosen by the shaper.\r\n * @type {object}\r\n */\n\n this.features = {}; // Convert features to an object\n\n if (Array.isArray(features)) {\n for (var _iterator18 = _createForOfIteratorHelperLoose(features), _step18; !(_step18 = _iterator18()).done;) {\n var tag = _step18.value;\n this.features[tag] = true;\n }\n } else if (typeof features === 'object') {\n this.features = features;\n }\n }\n /**\r\n * The total advance width of the run.\r\n * @type {number}\r\n */\n _createClass(GlyphRun, [{\n key: \"advanceWidth\",\n get: function get() {\n var width = 0;\n for (var _iterator19 = _createForOfIteratorHelperLoose(this.positions), _step19; !(_step19 = _iterator19()).done;) {\n var position = _step19.value;\n width += position.xAdvance;\n }\n return width;\n }\n /**\r\n * The total advance height of the run.\r\n * @type {number}\r\n */\n }, {\n key: \"advanceHeight\",\n get: function get() {\n var height = 0;\n for (var _iterator20 = _createForOfIteratorHelperLoose(this.positions), _step20; !(_step20 = _iterator20()).done;) {\n var position = _step20.value;\n height += position.yAdvance;\n }\n return height;\n }\n /**\r\n * The bounding box containing all glyphs in the run.\r\n * @type {BBox}\r\n */\n }, {\n key: \"bbox\",\n get: function get() {\n var bbox = new BBox();\n var x = 0;\n var y = 0;\n for (var index = 0; index < this.glyphs.length; index++) {\n var glyph = this.glyphs[index];\n var p = this.positions[index];\n var b = glyph.bbox;\n bbox.addPoint(b.minX + x + p.xOffset, b.minY + y + p.yOffset);\n bbox.addPoint(b.maxX + x + p.xOffset, b.maxY + y + p.yOffset);\n x += p.xAdvance;\n y += p.yAdvance;\n }\n return bbox;\n }\n }]);\n return GlyphRun;\n}();\n/**\r\n * Represents positioning information for a glyph in a GlyphRun.\r\n */\nvar GlyphPosition = function GlyphPosition(xAdvance, yAdvance, xOffset, yOffset) {\n if (xAdvance === void 0) {\n xAdvance = 0;\n }\n if (yAdvance === void 0) {\n yAdvance = 0;\n }\n if (xOffset === void 0) {\n xOffset = 0;\n }\n if (yOffset === void 0) {\n yOffset = 0;\n }\n /**\r\n * The amount to move the virtual pen in the X direction after rendering this glyph.\r\n * @type {number}\r\n */\n this.xAdvance = xAdvance;\n /**\r\n * The amount to move the virtual pen in the Y direction after rendering this glyph.\r\n * @type {number}\r\n */\n\n this.yAdvance = yAdvance;\n /**\r\n * The offset from the pen position in the X direction at which to render this glyph.\r\n * @type {number}\r\n */\n\n this.xOffset = xOffset;\n /**\r\n * The offset from the pen position in the Y direction at which to render this glyph.\r\n * @type {number}\r\n */\n\n this.yOffset = yOffset;\n}; // see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html\n// and /System/Library/Frameworks/CoreText.framework/Versions/A/Headers/SFNTLayoutTypes.h on a Mac\nvar features = {\n allTypographicFeatures: {\n code: 0,\n exclusive: false,\n allTypeFeatures: 0\n },\n ligatures: {\n code: 1,\n exclusive: false,\n requiredLigatures: 0,\n commonLigatures: 2,\n rareLigatures: 4,\n // logos: 6\n rebusPictures: 8,\n diphthongLigatures: 10,\n squaredLigatures: 12,\n abbrevSquaredLigatures: 14,\n symbolLigatures: 16,\n contextualLigatures: 18,\n historicalLigatures: 20\n },\n cursiveConnection: {\n code: 2,\n exclusive: true,\n unconnected: 0,\n partiallyConnected: 1,\n cursive: 2\n },\n letterCase: {\n code: 3,\n exclusive: true\n },\n // upperAndLowerCase: 0 # deprecated\n // allCaps: 1 # deprecated\n // allLowerCase: 2 # deprecated\n // smallCaps: 3 # deprecated\n // initialCaps: 4 # deprecated\n // initialCapsAndSmallCaps: 5 # deprecated\n verticalSubstitution: {\n code: 4,\n exclusive: false,\n substituteVerticalForms: 0\n },\n linguisticRearrangement: {\n code: 5,\n exclusive: false,\n linguisticRearrangement: 0\n },\n numberSpacing: {\n code: 6,\n exclusive: true,\n monospacedNumbers: 0,\n proportionalNumbers: 1,\n thirdWidthNumbers: 2,\n quarterWidthNumbers: 3\n },\n smartSwash: {\n code: 8,\n exclusive: false,\n wordInitialSwashes: 0,\n wordFinalSwashes: 2,\n // lineInitialSwashes: 4\n // lineFinalSwashes: 6\n nonFinalSwashes: 8\n },\n diacritics: {\n code: 9,\n exclusive: true,\n showDiacritics: 0,\n hideDiacritics: 1,\n decomposeDiacritics: 2\n },\n verticalPosition: {\n code: 10,\n exclusive: true,\n normalPosition: 0,\n superiors: 1,\n inferiors: 2,\n ordinals: 3,\n scientificInferiors: 4\n },\n fractions: {\n code: 11,\n exclusive: true,\n noFractions: 0,\n verticalFractions: 1,\n diagonalFractions: 2\n },\n overlappingCharacters: {\n code: 13,\n exclusive: false,\n preventOverlap: 0\n },\n typographicExtras: {\n code: 14,\n exclusive: false,\n // hyphensToEmDash: 0\n // hyphenToEnDash: 2\n slashedZero: 4\n },\n // formInterrobang: 6\n // smartQuotes: 8\n // periodsToEllipsis: 10\n mathematicalExtras: {\n code: 15,\n exclusive: false,\n // hyphenToMinus: 0\n // asteristoMultiply: 2\n // slashToDivide: 4\n // inequalityLigatures: 6\n // exponents: 8\n mathematicalGreek: 10\n },\n ornamentSets: {\n code: 16,\n exclusive: true,\n noOrnaments: 0,\n dingbats: 1,\n piCharacters: 2,\n fleurons: 3,\n decorativeBorders: 4,\n internationalSymbols: 5,\n mathSymbols: 6\n },\n characterAlternatives: {\n code: 17,\n exclusive: true,\n noAlternates: 0\n },\n // user defined options\n designComplexity: {\n code: 18,\n exclusive: true,\n designLevel1: 0,\n designLevel2: 1,\n designLevel3: 2,\n designLevel4: 3,\n designLevel5: 4\n },\n styleOptions: {\n code: 19,\n exclusive: true,\n noStyleOptions: 0,\n displayText: 1,\n engravedText: 2,\n illuminatedCaps: 3,\n titlingCaps: 4,\n tallCaps: 5\n },\n characterShape: {\n code: 20,\n exclusive: true,\n traditionalCharacters: 0,\n simplifiedCharacters: 1,\n JIS1978Characters: 2,\n JIS1983Characters: 3,\n JIS1990Characters: 4,\n traditionalAltOne: 5,\n traditionalAltTwo: 6,\n traditionalAltThree: 7,\n traditionalAltFour: 8,\n traditionalAltFive: 9,\n expertCharacters: 10,\n JIS2004Characters: 11,\n hojoCharacters: 12,\n NLCCharacters: 13,\n traditionalNamesCharacters: 14\n },\n numberCase: {\n code: 21,\n exclusive: true,\n lowerCaseNumbers: 0,\n upperCaseNumbers: 1\n },\n textSpacing: {\n code: 22,\n exclusive: true,\n proportionalText: 0,\n monospacedText: 1,\n halfWidthText: 2,\n thirdWidthText: 3,\n quarterWidthText: 4,\n altProportionalText: 5,\n altHalfWidthText: 6\n },\n transliteration: {\n code: 23,\n exclusive: true,\n noTransliteration: 0\n },\n // hanjaToHangul: 1\n // hiraganaToKatakana: 2\n // katakanaToHiragana: 3\n // kanaToRomanization: 4\n // romanizationToHiragana: 5\n // romanizationToKatakana: 6\n // hanjaToHangulAltOne: 7\n // hanjaToHangulAltTwo: 8\n // hanjaToHangulAltThree: 9\n annotation: {\n code: 24,\n exclusive: true,\n noAnnotation: 0,\n boxAnnotation: 1,\n roundedBoxAnnotation: 2,\n circleAnnotation: 3,\n invertedCircleAnnotation: 4,\n parenthesisAnnotation: 5,\n periodAnnotation: 6,\n romanNumeralAnnotation: 7,\n diamondAnnotation: 8,\n invertedBoxAnnotation: 9,\n invertedRoundedBoxAnnotation: 10\n },\n kanaSpacing: {\n code: 25,\n exclusive: true,\n fullWidthKana: 0,\n proportionalKana: 1\n },\n ideographicSpacing: {\n code: 26,\n exclusive: true,\n fullWidthIdeographs: 0,\n proportionalIdeographs: 1,\n halfWidthIdeographs: 2\n },\n unicodeDecomposition: {\n code: 27,\n exclusive: false,\n canonicalComposition: 0,\n compatibilityComposition: 2,\n transcodingComposition: 4\n },\n rubyKana: {\n code: 28,\n exclusive: false,\n // noRubyKana: 0 # deprecated - use rubyKanaOff instead\n // rubyKana: 1 # deprecated - use rubyKanaOn instead\n rubyKana: 2\n },\n CJKSymbolAlternatives: {\n code: 29,\n exclusive: true,\n noCJKSymbolAlternatives: 0,\n CJKSymbolAltOne: 1,\n CJKSymbolAltTwo: 2,\n CJKSymbolAltThree: 3,\n CJKSymbolAltFour: 4,\n CJKSymbolAltFive: 5\n },\n ideographicAlternatives: {\n code: 30,\n exclusive: true,\n noIdeographicAlternatives: 0,\n ideographicAltOne: 1,\n ideographicAltTwo: 2,\n ideographicAltThree: 3,\n ideographicAltFour: 4,\n ideographicAltFive: 5\n },\n CJKVerticalRomanPlacement: {\n code: 31,\n exclusive: true,\n CJKVerticalRomanCentered: 0,\n CJKVerticalRomanHBaseline: 1\n },\n italicCJKRoman: {\n code: 32,\n exclusive: false,\n // noCJKItalicRoman: 0 # deprecated - use CJKItalicRomanOff instead\n // CJKItalicRoman: 1 # deprecated - use CJKItalicRomanOn instead\n CJKItalicRoman: 2\n },\n caseSensitiveLayout: {\n code: 33,\n exclusive: false,\n caseSensitiveLayout: 0,\n caseSensitiveSpacing: 2\n },\n alternateKana: {\n code: 34,\n exclusive: false,\n alternateHorizKana: 0,\n alternateVertKana: 2\n },\n stylisticAlternatives: {\n code: 35,\n exclusive: false,\n noStylisticAlternates: 0,\n stylisticAltOne: 2,\n stylisticAltTwo: 4,\n stylisticAltThree: 6,\n stylisticAltFour: 8,\n stylisticAltFive: 10,\n stylisticAltSix: 12,\n stylisticAltSeven: 14,\n stylisticAltEight: 16,\n stylisticAltNine: 18,\n stylisticAltTen: 20,\n stylisticAltEleven: 22,\n stylisticAltTwelve: 24,\n stylisticAltThirteen: 26,\n stylisticAltFourteen: 28,\n stylisticAltFifteen: 30,\n stylisticAltSixteen: 32,\n stylisticAltSeventeen: 34,\n stylisticAltEighteen: 36,\n stylisticAltNineteen: 38,\n stylisticAltTwenty: 40\n },\n contextualAlternates: {\n code: 36,\n exclusive: false,\n contextualAlternates: 0,\n swashAlternates: 2,\n contextualSwashAlternates: 4\n },\n lowerCase: {\n code: 37,\n exclusive: true,\n defaultLowerCase: 0,\n lowerCaseSmallCaps: 1,\n lowerCasePetiteCaps: 2\n },\n upperCase: {\n code: 38,\n exclusive: true,\n defaultUpperCase: 0,\n upperCaseSmallCaps: 1,\n upperCasePetiteCaps: 2\n },\n languageTag: {\n // indices into ltag table\n code: 39,\n exclusive: true\n },\n CJKRomanSpacing: {\n code: 103,\n exclusive: true,\n halfWidthCJKRoman: 0,\n proportionalCJKRoman: 1,\n defaultCJKRoman: 2,\n fullWidthCJKRoman: 3\n }\n};\nvar feature = function feature(name, selector) {\n return [features[name].code, features[name][selector]];\n};\nvar OTMapping = {\n rlig: feature('ligatures', 'requiredLigatures'),\n clig: feature('ligatures', 'contextualLigatures'),\n dlig: feature('ligatures', 'rareLigatures'),\n hlig: feature('ligatures', 'historicalLigatures'),\n liga: feature('ligatures', 'commonLigatures'),\n hist: feature('ligatures', 'historicalLigatures'),\n // ??\n smcp: feature('lowerCase', 'lowerCaseSmallCaps'),\n pcap: feature('lowerCase', 'lowerCasePetiteCaps'),\n frac: feature('fractions', 'diagonalFractions'),\n dnom: feature('fractions', 'diagonalFractions'),\n // ??\n numr: feature('fractions', 'diagonalFractions'),\n // ??\n afrc: feature('fractions', 'verticalFractions'),\n // aalt\n // abvf, abvm, abvs, akhn, blwf, blwm, blws, cfar, cjct, cpsp, falt, isol, jalt, ljmo, mset?\n // ltra, ltrm, nukt, pref, pres, pstf, psts, rand, rkrf, rphf, rtla, rtlm, size, tjmo, tnum?\n // unic, vatu, vhal, vjmo, vpal, vrt2\n // dist -> trak table?\n // kern, vkrn -> kern table\n // lfbd + opbd + rtbd -> opbd table?\n // mark, mkmk -> acnt table?\n // locl -> languageTag + ltag table\n case: feature('caseSensitiveLayout', 'caseSensitiveLayout'),\n // also caseSensitiveSpacing\n ccmp: feature('unicodeDecomposition', 'canonicalComposition'),\n // compatibilityComposition?\n cpct: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n // guess..., probably not given below\n valt: feature('CJKVerticalRomanPlacement', 'CJKVerticalRomanCentered'),\n swsh: feature('contextualAlternates', 'swashAlternates'),\n cswh: feature('contextualAlternates', 'contextualSwashAlternates'),\n curs: feature('cursiveConnection', 'cursive'),\n // ??\n c2pc: feature('upperCase', 'upperCasePetiteCaps'),\n c2sc: feature('upperCase', 'upperCaseSmallCaps'),\n init: feature('smartSwash', 'wordInitialSwashes'),\n // ??\n fin2: feature('smartSwash', 'wordFinalSwashes'),\n // ??\n medi: feature('smartSwash', 'nonFinalSwashes'),\n // ??\n med2: feature('smartSwash', 'nonFinalSwashes'),\n // ??\n fin3: feature('smartSwash', 'wordFinalSwashes'),\n // ??\n fina: feature('smartSwash', 'wordFinalSwashes'),\n // ??\n pkna: feature('kanaSpacing', 'proportionalKana'),\n half: feature('textSpacing', 'halfWidthText'),\n // also HalfWidthCJKRoman, HalfWidthIdeographs?\n halt: feature('textSpacing', 'altHalfWidthText'),\n hkna: feature('alternateKana', 'alternateHorizKana'),\n vkna: feature('alternateKana', 'alternateVertKana'),\n // hngl: feature 'transliteration', 'hanjaToHangulSelector' # deprecated\n ital: feature('italicCJKRoman', 'CJKItalicRoman'),\n lnum: feature('numberCase', 'upperCaseNumbers'),\n onum: feature('numberCase', 'lowerCaseNumbers'),\n mgrk: feature('mathematicalExtras', 'mathematicalGreek'),\n // nalt: not enough info. what type of annotation?\n // ornm: ditto, which ornament style?\n calt: feature('contextualAlternates', 'contextualAlternates'),\n // or more?\n vrt2: feature('verticalSubstitution', 'substituteVerticalForms'),\n // oh... below?\n vert: feature('verticalSubstitution', 'substituteVerticalForms'),\n tnum: feature('numberSpacing', 'monospacedNumbers'),\n pnum: feature('numberSpacing', 'proportionalNumbers'),\n sups: feature('verticalPosition', 'superiors'),\n subs: feature('verticalPosition', 'inferiors'),\n ordn: feature('verticalPosition', 'ordinals'),\n pwid: feature('textSpacing', 'proportionalText'),\n hwid: feature('textSpacing', 'halfWidthText'),\n qwid: feature('textSpacing', 'quarterWidthText'),\n // also QuarterWidthNumbers?\n twid: feature('textSpacing', 'thirdWidthText'),\n // also ThirdWidthNumbers?\n fwid: feature('textSpacing', 'proportionalText'),\n //??\n palt: feature('textSpacing', 'altProportionalText'),\n trad: feature('characterShape', 'traditionalCharacters'),\n smpl: feature('characterShape', 'simplifiedCharacters'),\n jp78: feature('characterShape', 'JIS1978Characters'),\n jp83: feature('characterShape', 'JIS1983Characters'),\n jp90: feature('characterShape', 'JIS1990Characters'),\n jp04: feature('characterShape', 'JIS2004Characters'),\n expt: feature('characterShape', 'expertCharacters'),\n hojo: feature('characterShape', 'hojoCharacters'),\n nlck: feature('characterShape', 'NLCCharacters'),\n tnam: feature('characterShape', 'traditionalNamesCharacters'),\n ruby: feature('rubyKana', 'rubyKana'),\n titl: feature('styleOptions', 'titlingCaps'),\n zero: feature('typographicExtras', 'slashedZero'),\n ss01: feature('stylisticAlternatives', 'stylisticAltOne'),\n ss02: feature('stylisticAlternatives', 'stylisticAltTwo'),\n ss03: feature('stylisticAlternatives', 'stylisticAltThree'),\n ss04: feature('stylisticAlternatives', 'stylisticAltFour'),\n ss05: feature('stylisticAlternatives', 'stylisticAltFive'),\n ss06: feature('stylisticAlternatives', 'stylisticAltSix'),\n ss07: feature('stylisticAlternatives', 'stylisticAltSeven'),\n ss08: feature('stylisticAlternatives', 'stylisticAltEight'),\n ss09: feature('stylisticAlternatives', 'stylisticAltNine'),\n ss10: feature('stylisticAlternatives', 'stylisticAltTen'),\n ss11: feature('stylisticAlternatives', 'stylisticAltEleven'),\n ss12: feature('stylisticAlternatives', 'stylisticAltTwelve'),\n ss13: feature('stylisticAlternatives', 'stylisticAltThirteen'),\n ss14: feature('stylisticAlternatives', 'stylisticAltFourteen'),\n ss15: feature('stylisticAlternatives', 'stylisticAltFifteen'),\n ss16: feature('stylisticAlternatives', 'stylisticAltSixteen'),\n ss17: feature('stylisticAlternatives', 'stylisticAltSeventeen'),\n ss18: feature('stylisticAlternatives', 'stylisticAltEighteen'),\n ss19: feature('stylisticAlternatives', 'stylisticAltNineteen'),\n ss20: feature('stylisticAlternatives', 'stylisticAltTwenty')\n}; // salt: feature 'stylisticAlternatives', 'stylisticAltOne' # hmm, which one to choose\n// Add cv01-cv99 features\n\nfor (var i = 1; i <= 99; i++) {\n OTMapping[\"cv\".concat(\"00\".concat(i).slice(-2))] = [features.characterAlternatives.code, i];\n} // create inverse mapping\n\nvar AATMapping = {};\nfor (var ot in OTMapping) {\n var aat = OTMapping[ot];\n if (AATMapping[aat[0]] == null) {\n AATMapping[aat[0]] = {};\n }\n AATMapping[aat[0]][aat[1]] = ot;\n} // Maps an array of OpenType features to AAT features\n// in the form of {featureType:{featureSetting:true}}\n\nfunction mapOTToAAT(features) {\n var res = {};\n for (var k in features) {\n var r = void 0;\n if (r = OTMapping[k]) {\n if (res[r[0]] == null) {\n res[r[0]] = {};\n }\n res[r[0]][r[1]] = features[k];\n }\n }\n return res;\n} // Maps strings in a [featureType, featureSetting]\n// to their equivalent number codes\n\nfunction mapFeatureStrings(f) {\n var type = f[0],\n setting = f[1];\n if (isNaN(type)) {\n var typeCode = features[type] && features[type].code;\n } else {\n var typeCode = type;\n }\n if (isNaN(setting)) {\n var settingCode = features[type] && features[type][setting];\n } else {\n var settingCode = setting;\n }\n return [typeCode, settingCode];\n} // Maps AAT features to an array of OpenType features\n// Supports both arrays in the form of [[featureType, featureSetting]]\n// and objects in the form of {featureType:{featureSetting:true}}\n// featureTypes and featureSettings can be either strings or number codes\n\nfunction mapAATToOT(features) {\n var res = {};\n if (Array.isArray(features)) {\n for (var k = 0; k < features.length; k++) {\n var r = void 0;\n var f = mapFeatureStrings(features[k]);\n if (r = AATMapping[f[0]] && AATMapping[f[0]][f[1]]) {\n res[r] = true;\n }\n }\n } else if (typeof features === 'object') {\n for (var type in features) {\n var _feature = features[type];\n for (var setting in _feature) {\n var _r = void 0;\n var _f = mapFeatureStrings([type, setting]);\n if (_feature[setting] && (_r = AATMapping[_f[0]] && AATMapping[_f[0]][_f[1]])) {\n res[_r] = true;\n }\n }\n }\n }\n return Object.keys(res);\n}\nvar _class$1;\nvar AATLookupTable = (_class$1 = /*#__PURE__*/function () {\n function AATLookupTable(table) {\n this.table = table;\n }\n var _proto19 = AATLookupTable.prototype;\n _proto19.lookup = function lookup(glyph) {\n switch (this.table.version) {\n case 0:\n // simple array format\n return this.table.values.getItem(glyph);\n case 2: // segment format\n\n case 4:\n {\n var min = 0;\n var max = this.table.binarySearchHeader.nUnits - 1;\n while (min <= max) {\n var mid = min + max >> 1;\n var seg = this.table.segments[mid]; // special end of search value\n\n if (seg.firstGlyph === 0xffff) {\n return null;\n }\n if (glyph < seg.firstGlyph) {\n max = mid - 1;\n } else if (glyph > seg.lastGlyph) {\n min = mid + 1;\n } else {\n if (this.table.version === 2) {\n return seg.value;\n } else {\n return seg.values[glyph - seg.firstGlyph];\n }\n }\n }\n return null;\n }\n case 6:\n {\n // lookup single\n var _min = 0;\n var _max = this.table.binarySearchHeader.nUnits - 1;\n while (_min <= _max) {\n var mid = _min + _max >> 1;\n var seg = this.table.segments[mid]; // special end of search value\n\n if (seg.glyph === 0xffff) {\n return null;\n }\n if (glyph < seg.glyph) {\n _max = mid - 1;\n } else if (glyph > seg.glyph) {\n _min = mid + 1;\n } else {\n return seg.value;\n }\n }\n return null;\n }\n case 8:\n // lookup trimmed\n return this.table.values[glyph - this.table.firstGlyph];\n default:\n throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n }\n };\n _proto19.glyphsForValue = function glyphsForValue(classValue) {\n var res = [];\n switch (this.table.version) {\n case 2: // segment format\n\n case 4:\n {\n for (var _iterator21 = _createForOfIteratorHelperLoose(this.table.segments), _step21; !(_step21 = _iterator21()).done;) {\n var segment = _step21.value;\n if (this.table.version === 2 && segment.value === classValue) {\n res.push.apply(res, range(segment.firstGlyph, segment.lastGlyph + 1));\n } else {\n for (var index = 0; index < segment.values.length; index++) {\n if (segment.values[index] === classValue) {\n res.push(segment.firstGlyph + index);\n }\n }\n }\n }\n break;\n }\n case 6:\n {\n // lookup single\n for (var _iterator22 = _createForOfIteratorHelperLoose(this.table.segments), _step22; !(_step22 = _iterator22()).done;) {\n var _segment = _step22.value;\n if (_segment.value === classValue) {\n res.push(_segment.glyph);\n }\n }\n break;\n }\n case 8:\n {\n // lookup trimmed\n for (var i = 0; i < this.table.values.length; i++) {\n if (this.table.values[i] === classValue) {\n res.push(this.table.firstGlyph + i);\n }\n }\n break;\n }\n default:\n throw new Error(\"Unknown lookup table format: \".concat(this.table.version));\n }\n return res;\n };\n return AATLookupTable;\n}(), _applyDecoratedDescriptor(_class$1.prototype, \"glyphsForValue\", [cache], Object.getOwnPropertyDescriptor(_class$1.prototype, \"glyphsForValue\"), _class$1.prototype), _class$1);\nvar START_OF_TEXT_STATE = 0;\nvar END_OF_TEXT_CLASS = 0;\nvar OUT_OF_BOUNDS_CLASS = 1;\nvar DELETED_GLYPH_CLASS = 2;\nvar DONT_ADVANCE = 0x4000;\nvar AATStateMachine = /*#__PURE__*/function () {\n function AATStateMachine(stateTable) {\n this.stateTable = stateTable;\n this.lookupTable = new AATLookupTable(stateTable.classTable);\n }\n var _proto20 = AATStateMachine.prototype;\n _proto20.process = function process(glyphs, reverse, processEntry) {\n var currentState = START_OF_TEXT_STATE; // START_OF_LINE_STATE is used for kashida glyph insertions sometimes I think?\n\n var index = reverse ? glyphs.length - 1 : 0;\n var dir = reverse ? -1 : 1;\n while (dir === 1 && index <= glyphs.length || dir === -1 && index >= -1) {\n var glyph = null;\n var classCode = OUT_OF_BOUNDS_CLASS;\n var shouldAdvance = true;\n if (index === glyphs.length || index === -1) {\n classCode = END_OF_TEXT_CLASS;\n } else {\n glyph = glyphs[index];\n if (glyph.id === 0xffff) {\n // deleted glyph\n classCode = DELETED_GLYPH_CLASS;\n } else {\n classCode = this.lookupTable.lookup(glyph.id);\n if (classCode == null) {\n classCode = OUT_OF_BOUNDS_CLASS;\n }\n }\n }\n var row = this.stateTable.stateArray.getItem(currentState);\n var entryIndex = row[classCode];\n var entry = this.stateTable.entryTable.getItem(entryIndex);\n if (classCode !== END_OF_TEXT_CLASS && classCode !== DELETED_GLYPH_CLASS) {\n processEntry(glyph, entry, index);\n shouldAdvance = !(entry.flags & DONT_ADVANCE);\n }\n currentState = entry.newState;\n if (shouldAdvance) {\n index += dir;\n }\n }\n return glyphs;\n }\n /**\r\n * Performs a depth-first traversal of the glyph strings\r\n * represented by the state machine.\r\n */;\n _proto20.traverse = function traverse(opts, state, visited) {\n if (state === void 0) {\n state = 0;\n }\n if (visited === void 0) {\n visited = new Set();\n }\n if (visited.has(state)) {\n return;\n }\n visited.add(state);\n var _this$stateTable = this.stateTable,\n nClasses = _this$stateTable.nClasses,\n stateArray = _this$stateTable.stateArray,\n entryTable = _this$stateTable.entryTable;\n var row = stateArray.getItem(state); // Skip predefined classes\n\n for (var classCode = 4; classCode < nClasses; classCode++) {\n var entryIndex = row[classCode];\n var entry = entryTable.getItem(entryIndex); // Try all glyphs in the class\n\n for (var _iterator23 = _createForOfIteratorHelperLoose(this.lookupTable.glyphsForValue(classCode)), _step23; !(_step23 = _iterator23()).done;) {\n var glyph = _step23.value;\n if (opts.enter) {\n opts.enter(glyph, entry);\n }\n if (entry.newState !== 0) {\n this.traverse(opts, entry.newState, visited);\n }\n if (opts.exit) {\n opts.exit(glyph, entry);\n }\n }\n }\n };\n return AATStateMachine;\n}();\nvar _class$2;\nvar MARK_FIRST = 0x8000;\nvar MARK_LAST = 0x2000;\nvar VERB = 0x000F; // contextual substitution and glyph insertion flag\n\nvar SET_MARK = 0x8000; // ligature entry flags\n\nvar SET_COMPONENT = 0x8000;\nvar PERFORM_ACTION = 0x2000; // ligature action masks\n\nvar LAST_MASK = 0x80000000;\nvar STORE_MASK = 0x40000000;\nvar OFFSET_MASK = 0x3FFFFFFF;\nvar REVERSE_DIRECTION = 0x400000;\nvar CURRENT_INSERT_BEFORE = 0x0800;\nvar MARKED_INSERT_BEFORE = 0x0400;\nvar CURRENT_INSERT_COUNT = 0x03E0;\nvar MARKED_INSERT_COUNT = 0x001F;\nvar AATMorxProcessor = (_class$2 = /*#__PURE__*/function () {\n function AATMorxProcessor(font) {\n this.processIndicRearragement = this.processIndicRearragement.bind(this);\n this.processContextualSubstitution = this.processContextualSubstitution.bind(this);\n this.processLigature = this.processLigature.bind(this);\n this.processNoncontextualSubstitutions = this.processNoncontextualSubstitutions.bind(this);\n this.processGlyphInsertion = this.processGlyphInsertion.bind(this);\n this.font = font;\n this.morx = font.morx;\n this.inputCache = null;\n } // Processes an array of glyphs and applies the specified features\n // Features should be in the form of {featureType:{featureSetting:boolean}}\n var _proto21 = AATMorxProcessor.prototype;\n _proto21.process = function process(glyphs, features) {\n if (features === void 0) {\n features = {};\n }\n for (var _iterator24 = _createForOfIteratorHelperLoose(this.morx.chains), _step24; !(_step24 = _iterator24()).done;) {\n var chain = _step24.value;\n var flags = chain.defaultFlags; // enable/disable the requested features\n\n for (var _iterator25 = _createForOfIteratorHelperLoose(chain.features), _step25; !(_step25 = _iterator25()).done;) {\n var feature = _step25.value;\n var f = void 0;\n if (f = features[feature.featureType]) {\n if (f[feature.featureSetting]) {\n flags &= feature.disableFlags;\n flags |= feature.enableFlags;\n } else if (f[feature.featureSetting] === false) {\n flags |= ~feature.disableFlags;\n flags &= ~feature.enableFlags;\n }\n }\n }\n for (var _iterator26 = _createForOfIteratorHelperLoose(chain.subtables), _step26; !(_step26 = _iterator26()).done;) {\n var subtable = _step26.value;\n if (subtable.subFeatureFlags & flags) {\n this.processSubtable(subtable, glyphs);\n }\n }\n } // remove deleted glyphs\n\n var index = glyphs.length - 1;\n while (index >= 0) {\n if (glyphs[index].id === 0xffff) {\n glyphs.splice(index, 1);\n }\n index--;\n }\n return glyphs;\n };\n _proto21.processSubtable = function processSubtable(subtable, glyphs) {\n this.subtable = subtable;\n this.glyphs = glyphs;\n if (this.subtable.type === 4) {\n this.processNoncontextualSubstitutions(this.subtable, this.glyphs);\n return;\n }\n this.ligatureStack = [];\n this.markedGlyph = null;\n this.firstGlyph = null;\n this.lastGlyph = null;\n this.markedIndex = null;\n var stateMachine = this.getStateMachine(subtable);\n var process = this.getProcessor();\n var reverse = !!(this.subtable.coverage & REVERSE_DIRECTION);\n return stateMachine.process(this.glyphs, reverse, process);\n };\n _proto21.getStateMachine = function getStateMachine(subtable) {\n return new AATStateMachine(subtable.table.stateTable);\n };\n _proto21.getProcessor = function getProcessor() {\n switch (this.subtable.type) {\n case 0:\n return this.processIndicRearragement;\n case 1:\n return this.processContextualSubstitution;\n case 2:\n return this.processLigature;\n case 4:\n return this.processNoncontextualSubstitutions;\n case 5:\n return this.processGlyphInsertion;\n default:\n throw new Error(\"Invalid morx subtable type: \".concat(this.subtable.type));\n }\n };\n _proto21.processIndicRearragement = function processIndicRearragement(glyph, entry, index) {\n if (entry.flags & MARK_FIRST) {\n this.firstGlyph = index;\n }\n if (entry.flags & MARK_LAST) {\n this.lastGlyph = index;\n }\n reorderGlyphs(this.glyphs, entry.flags & VERB, this.firstGlyph, this.lastGlyph);\n };\n _proto21.processContextualSubstitution = function processContextualSubstitution(glyph, entry, index) {\n var subsitutions = this.subtable.table.substitutionTable.items;\n if (entry.markIndex !== 0xffff) {\n var lookup = subsitutions.getItem(entry.markIndex);\n var lookupTable = new AATLookupTable(lookup);\n glyph = this.glyphs[this.markedGlyph];\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[this.markedGlyph] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n if (entry.currentIndex !== 0xffff) {\n var _lookup = subsitutions.getItem(entry.currentIndex);\n var _lookupTable = new AATLookupTable(_lookup);\n glyph = this.glyphs[index];\n var gid = _lookupTable.lookup(glyph.id);\n if (gid) {\n this.glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n if (entry.flags & SET_MARK) {\n this.markedGlyph = index;\n }\n };\n _proto21.processLigature = function processLigature(glyph, entry, index) {\n if (entry.flags & SET_COMPONENT) {\n this.ligatureStack.push(index);\n }\n if (entry.flags & PERFORM_ACTION) {\n var _this$ligatureStack;\n var actions = this.subtable.table.ligatureActions;\n var components = this.subtable.table.components;\n var ligatureList = this.subtable.table.ligatureList;\n var actionIndex = entry.action;\n var last = false;\n var ligatureIndex = 0;\n var codePoints = [];\n var ligatureGlyphs = [];\n while (!last) {\n var _codePoints;\n var componentGlyph = this.ligatureStack.pop();\n (_codePoints = codePoints).unshift.apply(_codePoints, this.glyphs[componentGlyph].codePoints);\n var action = actions.getItem(actionIndex++);\n last = !!(action & LAST_MASK);\n var store = !!(action & STORE_MASK);\n var offset = (action & OFFSET_MASK) << 2 >> 2; // sign extend 30 to 32 bits\n\n offset += this.glyphs[componentGlyph].id;\n var component = components.getItem(offset);\n ligatureIndex += component;\n if (last || store) {\n var ligatureEntry = ligatureList.getItem(ligatureIndex);\n this.glyphs[componentGlyph] = this.font.getGlyph(ligatureEntry, codePoints);\n ligatureGlyphs.push(componentGlyph);\n ligatureIndex = 0;\n codePoints = [];\n } else {\n this.glyphs[componentGlyph] = this.font.getGlyph(0xffff);\n }\n } // Put ligature glyph indexes back on the stack\n\n (_this$ligatureStack = this.ligatureStack).push.apply(_this$ligatureStack, ligatureGlyphs);\n }\n };\n _proto21.processNoncontextualSubstitutions = function processNoncontextualSubstitutions(subtable, glyphs, index) {\n var lookupTable = new AATLookupTable(subtable.table.lookupTable);\n for (index = 0; index < glyphs.length; index++) {\n var glyph = glyphs[index];\n if (glyph.id !== 0xffff) {\n var gid = lookupTable.lookup(glyph.id);\n if (gid) {\n // 0 means do nothing\n glyphs[index] = this.font.getGlyph(gid, glyph.codePoints);\n }\n }\n }\n };\n _proto21._insertGlyphs = function _insertGlyphs(glyphIndex, insertionActionIndex, count, isBefore) {\n var _this$glyphs;\n var insertions = [];\n while (count--) {\n var gid = this.subtable.table.insertionActions.getItem(insertionActionIndex++);\n insertions.push(this.font.getGlyph(gid));\n }\n if (!isBefore) {\n glyphIndex++;\n }\n (_this$glyphs = this.glyphs).splice.apply(_this$glyphs, [glyphIndex, 0].concat(insertions));\n };\n _proto21.processGlyphInsertion = function processGlyphInsertion(glyph, entry, index) {\n if (entry.flags & SET_MARK) {\n this.markedIndex = index;\n }\n if (entry.markedInsertIndex !== 0xffff) {\n var count = (entry.flags & MARKED_INSERT_COUNT) >>> 5;\n var isBefore = !!(entry.flags & MARKED_INSERT_BEFORE);\n this._insertGlyphs(this.markedIndex, entry.markedInsertIndex, count, isBefore);\n }\n if (entry.currentInsertIndex !== 0xffff) {\n var _count = (entry.flags & CURRENT_INSERT_COUNT) >>> 5;\n var _isBefore = !!(entry.flags & CURRENT_INSERT_BEFORE);\n this._insertGlyphs(index, entry.currentInsertIndex, _count, _isBefore);\n }\n };\n _proto21.getSupportedFeatures = function getSupportedFeatures() {\n var features = [];\n for (var _iterator27 = _createForOfIteratorHelperLoose(this.morx.chains), _step27; !(_step27 = _iterator27()).done;) {\n var chain = _step27.value;\n for (var _iterator28 = _createForOfIteratorHelperLoose(chain.features), _step28; !(_step28 = _iterator28()).done;) {\n var feature = _step28.value;\n features.push([feature.featureType, feature.featureSetting]);\n }\n }\n return features;\n };\n _proto21.generateInputs = function generateInputs(gid) {\n if (!this.inputCache) {\n this.generateInputCache();\n }\n return this.inputCache[gid] || [];\n };\n _proto21.generateInputCache = function generateInputCache() {\n this.inputCache = {};\n for (var _iterator29 = _createForOfIteratorHelperLoose(this.morx.chains), _step29; !(_step29 = _iterator29()).done;) {\n var chain = _step29.value;\n var flags = chain.defaultFlags;\n for (var _iterator30 = _createForOfIteratorHelperLoose(chain.subtables), _step30; !(_step30 = _iterator30()).done;) {\n var subtable = _step30.value;\n if (subtable.subFeatureFlags & flags) {\n this.generateInputsForSubtable(subtable);\n }\n }\n }\n };\n _proto21.generateInputsForSubtable = function generateInputsForSubtable(subtable) {\n var _this3 = this;\n // Currently, only supporting ligature subtables.\n if (subtable.type !== 2) {\n return;\n }\n var reverse = !!(subtable.coverage & REVERSE_DIRECTION);\n if (reverse) {\n throw new Error('Reverse subtable, not supported.');\n }\n this.subtable = subtable;\n this.ligatureStack = [];\n var stateMachine = this.getStateMachine(subtable);\n var process = this.getProcessor();\n var input = [];\n var stack = [];\n this.glyphs = [];\n stateMachine.traverse({\n enter: function enter(glyph, entry) {\n var glyphs = _this3.glyphs;\n stack.push({\n glyphs: glyphs.slice(),\n ligatureStack: _this3.ligatureStack.slice()\n }); // Add glyph to input and glyphs to process.\n\n var g = _this3.font.getGlyph(glyph);\n input.push(g);\n glyphs.push(input[input.length - 1]); // Process ligature substitution\n\n process(glyphs[glyphs.length - 1], entry, glyphs.length - 1); // Add input to result if only one matching (non-deleted) glyph remains.\n\n var count = 0;\n var found = 0;\n for (var i = 0; i < glyphs.length && count <= 1; i++) {\n if (glyphs[i].id !== 0xffff) {\n count++;\n found = glyphs[i].id;\n }\n }\n if (count === 1) {\n var result = input.map(function (g) {\n return g.id;\n });\n var _cache = _this3.inputCache[found];\n if (_cache) {\n _cache.push(result);\n } else {\n _this3.inputCache[found] = [result];\n }\n }\n },\n exit: function exit() {\n var _stack$pop = stack.pop();\n _this3.glyphs = _stack$pop.glyphs;\n _this3.ligatureStack = _stack$pop.ligatureStack;\n input.pop();\n }\n });\n };\n return AATMorxProcessor;\n}(), _applyDecoratedDescriptor(_class$2.prototype, \"getStateMachine\", [cache], Object.getOwnPropertyDescriptor(_class$2.prototype, \"getStateMachine\"), _class$2.prototype), _class$2);\n// reverse the glyphs inside those ranges if specified\n// ranges are in [offset, length] format\n\nfunction swap(glyphs, rangeA, rangeB, reverseA, reverseB) {\n if (reverseA === void 0) {\n reverseA = false;\n }\n if (reverseB === void 0) {\n reverseB = false;\n }\n var end = glyphs.splice(rangeB[0] - (rangeB[1] - 1), rangeB[1]);\n if (reverseB) {\n end.reverse();\n }\n var start = glyphs.splice.apply(glyphs, [rangeA[0], rangeA[1]].concat(end));\n if (reverseA) {\n start.reverse();\n }\n glyphs.splice.apply(glyphs, [rangeB[0] - (rangeA[1] - 1), 0].concat(start));\n return glyphs;\n}\nfunction reorderGlyphs(glyphs, verb, firstGlyph, lastGlyph) {\n switch (verb) {\n case 0:\n // no change\n return glyphs;\n case 1:\n // Ax => xA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 0]);\n case 2:\n // xD => Dx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 1]);\n case 3:\n // AxD => DxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 1]);\n case 4:\n // ABx => xAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0]);\n case 5:\n // ABx => xBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 0], true, false);\n case 6:\n // xCD => CDx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2]);\n case 7:\n // xCD => DCx\n return swap(glyphs, [firstGlyph, 0], [lastGlyph, 2], false, true);\n case 8:\n // AxCD => CDxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2]);\n case 9:\n // AxCD => DCxA\n return swap(glyphs, [firstGlyph, 1], [lastGlyph, 2], false, true);\n case 10:\n // ABxD => DxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1]);\n case 11:\n // ABxD => DxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 1], true, false);\n case 12:\n // ABxCD => CDxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2]);\n case 13:\n // ABxCD => CDxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, false);\n case 14:\n // ABxCD => DCxAB\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], false, true);\n case 15:\n // ABxCD => DCxBA\n return swap(glyphs, [firstGlyph, 2], [lastGlyph, 2], true, true);\n default:\n throw new Error(\"Unknown verb: \".concat(verb));\n }\n}\nvar AATLayoutEngine = /*#__PURE__*/function () {\n function AATLayoutEngine(font) {\n this.font = font;\n this.morxProcessor = new AATMorxProcessor(font);\n this.fallbackPosition = false;\n }\n var _proto22 = AATLayoutEngine.prototype;\n _proto22.substitute = function substitute(glyphRun) {\n // AAT expects the glyphs to be in visual order prior to morx processing,\n // so reverse the glyphs if the script is right-to-left.\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n }\n this.morxProcessor.process(glyphRun.glyphs, mapOTToAAT(glyphRun.features));\n };\n _proto22.getAvailableFeatures = function getAvailableFeatures(script, language) {\n return mapAATToOT(this.morxProcessor.getSupportedFeatures());\n };\n _proto22.stringsForGlyph = function stringsForGlyph(gid) {\n var glyphStrings = this.morxProcessor.generateInputs(gid);\n var result = new Set();\n for (var _iterator31 = _createForOfIteratorHelperLoose(glyphStrings), _step31; !(_step31 = _iterator31()).done;) {\n var glyphs = _step31.value;\n this._addStrings(glyphs, 0, result, '');\n }\n return result;\n };\n _proto22._addStrings = function _addStrings(glyphs, index, strings, string) {\n var codePoints = this.font._cmapProcessor.codePointsForGlyph(glyphs[index]);\n for (var _iterator32 = _createForOfIteratorHelperLoose(codePoints), _step32; !(_step32 = _iterator32()).done;) {\n var codePoint = _step32.value;\n var s = string + String.fromCodePoint(codePoint);\n if (index < glyphs.length - 1) {\n this._addStrings(glyphs, index + 1, strings, s);\n } else {\n strings.add(s);\n }\n }\n };\n return AATLayoutEngine;\n}();\n/**\r\n * ShapingPlans are used by the OpenType shapers to store which\r\n * features should by applied, and in what order to apply them.\r\n * The features are applied in groups called stages. A feature\r\n * can be applied globally to all glyphs, or locally to only\r\n * specific glyphs.\r\n *\r\n * @private\r\n */\nvar ShapingPlan = /*#__PURE__*/function () {\n function ShapingPlan(font, script, direction) {\n this.font = font;\n this.script = script;\n this.direction = direction;\n this.stages = [];\n this.globalFeatures = {};\n this.allFeatures = {};\n }\n /**\r\n * Adds the given features to the last stage.\r\n * Ignores features that have already been applied.\r\n */\n var _proto23 = ShapingPlan.prototype;\n _proto23._addFeatures = function _addFeatures(features, global) {\n var stageIndex = this.stages.length - 1;\n var stage = this.stages[stageIndex];\n for (var _iterator33 = _createForOfIteratorHelperLoose(features), _step33; !(_step33 = _iterator33()).done;) {\n var feature = _step33.value;\n if (this.allFeatures[feature] == null) {\n stage.push(feature);\n this.allFeatures[feature] = stageIndex;\n if (global) {\n this.globalFeatures[feature] = true;\n }\n }\n }\n }\n /**\r\n * Add features to the last stage\r\n */;\n _proto23.add = function add(arg, global) {\n if (global === void 0) {\n global = true;\n }\n if (this.stages.length === 0) {\n this.stages.push([]);\n }\n if (typeof arg === 'string') {\n arg = [arg];\n }\n if (Array.isArray(arg)) {\n this._addFeatures(arg, global);\n } else if (typeof arg === 'object') {\n this._addFeatures(arg.global || [], true);\n this._addFeatures(arg.local || [], false);\n } else {\n throw new Error(\"Unsupported argument to ShapingPlan#add\");\n }\n }\n /**\r\n * Add a new stage\r\n */;\n _proto23.addStage = function addStage(arg, global) {\n if (typeof arg === 'function') {\n this.stages.push(arg, []);\n } else {\n this.stages.push([]);\n this.add(arg, global);\n }\n };\n _proto23.setFeatureOverrides = function setFeatureOverrides(features) {\n if (Array.isArray(features)) {\n this.add(features);\n } else if (typeof features === 'object') {\n for (var tag in features) {\n if (features[tag]) {\n this.add(tag);\n } else if (this.allFeatures[tag] != null) {\n var stage = this.stages[this.allFeatures[tag]];\n stage.splice(stage.indexOf(tag), 1);\n delete this.allFeatures[tag];\n delete this.globalFeatures[tag];\n }\n }\n }\n }\n /**\r\n * Assigns the global features to the given glyphs\r\n */;\n _proto23.assignGlobalFeatures = function assignGlobalFeatures(glyphs) {\n for (var _iterator34 = _createForOfIteratorHelperLoose(glyphs), _step34; !(_step34 = _iterator34()).done;) {\n var glyph = _step34.value;\n for (var feature in this.globalFeatures) {\n glyph.features[feature] = true;\n }\n }\n }\n /**\r\n * Executes the planned stages using the given OTProcessor\r\n */;\n _proto23.process = function process(processor, glyphs, positions) {\n for (var _iterator35 = _createForOfIteratorHelperLoose(this.stages), _step35; !(_step35 = _iterator35()).done;) {\n var stage = _step35.value;\n if (typeof stage === 'function') {\n if (!positions) {\n stage(this.font, glyphs, this);\n }\n } else if (stage.length > 0) {\n processor.applyFeatures(stage, glyphs, positions);\n }\n }\n };\n return ShapingPlan;\n}();\nvar VARIATION_FEATURES = ['rvrn'];\nvar COMMON_FEATURES = ['ccmp', 'locl', 'rlig', 'mark', 'mkmk'];\nvar FRACTIONAL_FEATURES = ['frac', 'numr', 'dnom'];\nvar HORIZONTAL_FEATURES = ['calt', 'clig', 'liga', 'rclt', 'curs', 'kern'];\nvar DIRECTIONAL_FEATURES = {\n ltr: ['ltra', 'ltrm'],\n rtl: ['rtla', 'rtlm']\n};\nvar DefaultShaper = /*#__PURE__*/function () {\n function DefaultShaper() {}\n DefaultShaper.plan = function plan(_plan, glyphs, features) {\n // Plan the features we want to apply\n this.planPreprocessing(_plan);\n this.planFeatures(_plan);\n this.planPostprocessing(_plan, features); // Assign the global features to all the glyphs\n\n _plan.assignGlobalFeatures(glyphs); // Assign local features to glyphs\n\n this.assignFeatures(_plan, glyphs);\n };\n DefaultShaper.planPreprocessing = function planPreprocessing(plan) {\n plan.add({\n global: [].concat(VARIATION_FEATURES, DIRECTIONAL_FEATURES[plan.direction]),\n local: FRACTIONAL_FEATURES\n });\n };\n DefaultShaper.planFeatures = function planFeatures(plan) {// Do nothing by default. Let subclasses override this.\n };\n DefaultShaper.planPostprocessing = function planPostprocessing(plan, userFeatures) {\n plan.add([].concat(COMMON_FEATURES, HORIZONTAL_FEATURES));\n plan.setFeatureOverrides(userFeatures);\n };\n DefaultShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n // Enable contextual fractions\n for (var i = 0; i < glyphs.length; i++) {\n var glyph = glyphs[i];\n if (glyph.codePoints[0] === 0x2044) {\n // fraction slash\n var start = i;\n var end = i + 1; // Apply numerator\n\n while (start > 0 && unicode.isDigit(glyphs[start - 1].codePoints[0])) {\n glyphs[start - 1].features.numr = true;\n glyphs[start - 1].features.frac = true;\n start--;\n } // Apply denominator\n\n while (end < glyphs.length && unicode.isDigit(glyphs[end].codePoints[0])) {\n glyphs[end].features.dnom = true;\n glyphs[end].features.frac = true;\n end++;\n } // Apply fraction slash\n\n glyph.features.frac = true;\n i = end - 1;\n }\n }\n };\n return DefaultShaper;\n}();\n_defineProperty(DefaultShaper, \"zeroMarkWidths\", 'AFTER_GPOS');\nvar trie = new UnicodeTrie(Buffer(\"APABAAAAAAAAOAAAAf0BAv7tmi1MxDAUx7vtvjhAgcDgkEgEAnmXEBIMCYaEcygEiqBQ4FAkCE4ikUgMiiBJSAgSiUQSDMn9L9eSl6bddddug9t7yS/trevre+3r27pcNxZiG+yCfdCVv/9LeQxOwRm4AJegD27ALbgD9+ABPJF+z+BN/h7yDj5k/VOWX6SdmU5+wLWknggxDxaS8u0qiiX4uiz9XamQ3wzDMAzDMAzDMAzDVI/h959V/v7BMAzDMAzDMLlyNTNiMSdewVxbiA44B4/guz1qW58VYlMI0WsJ0W+N6kXw0spvPtdwhtkwnGM6uLaV4Xyzg3v3PM9DPfQ/sOg4xPWjipy31P8LTqbU304c/cLCUmWJLNB2Uz2U1KTeRKNmKHVMfbJC+/0loTZRH/W5cvEvBJPMbREkWt3FD1NcqXZBSpuE2Ad0PBehPtNrPtIEdYP+hiRt/V1jIiE69X4NT/uVZI3PUHE9bm5M7ePGdZWy951v7Nn6j8v1WWKP3mt6ttnsigx6VN7Vc0VomSSGqW2mGNP1muZPl7LfjNUaKNFtDGVf2fvE9O7VlBS5j333c5p/eeoOqcs1R/hIqDWLJ7TTlksirVT1SI7l8k4Yp+g3jafGcrU1RM6l9th80XOpnlN97bDNY4i4s61B0Si/ipa0uHMl6zqEjlFfCZm/TM8KmzQDjmuTAQ==\",\"base64\"));\nvar FEATURES = ['isol', 'fina', 'fin2', 'fin3', 'medi', 'med2', 'init'];\nvar ShapingClasses = {\n Non_Joining: 0,\n Left_Joining: 1,\n Right_Joining: 2,\n Dual_Joining: 3,\n Join_Causing: 3,\n ALAPH: 4,\n 'DALATH RISH': 5,\n Transparent: 6\n};\nvar ISOL = 'isol';\nvar FINA = 'fina';\nvar FIN2 = 'fin2';\nvar FIN3 = 'fin3';\nvar MEDI = 'medi';\nvar MED2 = 'med2';\nvar INIT = 'init';\nvar NONE = null; // Each entry is [prevAction, curAction, nextState]\n\nvar STATE_TABLE = [\n// Non_Joining, Left_Joining, Right_Joining, Dual_Joining, ALAPH, DALATH RISH\n// State 0: prev was U, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 6]],\n// State 1: prev was R or ISOL/ALAPH, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN2, 5], [NONE, ISOL, 6]],\n// State 2: prev was D/L in ISOL form, willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [INIT, FINA, 1], [INIT, FINA, 3], [INIT, FINA, 4], [INIT, FINA, 6]],\n// State 3: prev was D in FINA form, willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MEDI, FINA, 1], [MEDI, FINA, 3], [MEDI, FINA, 4], [MEDI, FINA, 6]],\n// State 4: prev was FINA ALAPH, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [MED2, ISOL, 1], [MED2, ISOL, 2], [MED2, FIN2, 5], [MED2, ISOL, 6]],\n// State 5: prev was FIN2/FIN3 ALAPH, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [ISOL, ISOL, 1], [ISOL, ISOL, 2], [ISOL, FIN2, 5], [ISOL, ISOL, 6]],\n// State 6: prev was DALATH/RISH, not willing to join.\n[[NONE, NONE, 0], [NONE, ISOL, 2], [NONE, ISOL, 1], [NONE, ISOL, 2], [NONE, FIN3, 5], [NONE, ISOL, 6]]];\n/**\r\n * This is a shaper for Arabic, and other cursive scripts.\r\n * It uses data from ArabicShaping.txt in the Unicode database,\r\n * compiled to a UnicodeTrie by generate-data.coffee.\r\n *\r\n * The shaping state machine was ported from Harfbuzz.\r\n * https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-arabic.cc\r\n */\nvar ArabicShaper = /*#__PURE__*/function (_DefaultShaper) {\n _inheritsLoose(ArabicShaper, _DefaultShaper);\n function ArabicShaper() {\n return _DefaultShaper.apply(this, arguments) || this;\n }\n ArabicShaper.planFeatures = function planFeatures(plan) {\n plan.add(['ccmp', 'locl']);\n for (var i = 0; i < FEATURES.length; i++) {\n var feature = FEATURES[i];\n plan.addStage(feature, false);\n }\n plan.addStage('mset');\n };\n ArabicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n _DefaultShaper.assignFeatures.call(this, plan, glyphs);\n var prev = -1;\n var state = 0;\n var actions = []; // Apply the state machine to map glyphs to features\n\n for (var i = 0; i < glyphs.length; i++) {\n var curAction = void 0,\n prevAction = void 0;\n var glyph = glyphs[i];\n var type = getShapingClass(glyph.codePoints[0]);\n if (type === ShapingClasses.Transparent) {\n actions[i] = NONE;\n continue;\n }\n var _STATE_TABLE$state$ty = STATE_TABLE[state][type];\n prevAction = _STATE_TABLE$state$ty[0];\n curAction = _STATE_TABLE$state$ty[1];\n state = _STATE_TABLE$state$ty[2];\n if (prevAction !== NONE && prev !== -1) {\n actions[prev] = prevAction;\n }\n actions[i] = curAction;\n prev = i;\n } // Apply the chosen features to their respective glyphs\n\n for (var index = 0; index < glyphs.length; index++) {\n var feature = void 0;\n var glyph = glyphs[index];\n if (feature = actions[index]) {\n glyph.features[feature] = true;\n }\n }\n };\n return ArabicShaper;\n}(DefaultShaper);\nfunction getShapingClass(codePoint) {\n var res = trie.get(codePoint);\n if (res) {\n return res - 1;\n }\n var category = unicode.getCategory(codePoint);\n if (category === 'Mn' || category === 'Me' || category === 'Cf') {\n return ShapingClasses.Transparent;\n }\n return ShapingClasses.Non_Joining;\n}\nvar GlyphIterator = /*#__PURE__*/function () {\n function GlyphIterator(glyphs, options) {\n this.glyphs = glyphs;\n this.reset(options);\n }\n var _proto24 = GlyphIterator.prototype;\n _proto24.reset = function reset(options, index) {\n if (options === void 0) {\n options = {};\n }\n if (index === void 0) {\n index = 0;\n }\n this.options = options;\n this.flags = options.flags || {};\n this.markAttachmentType = options.markAttachmentType || 0;\n this.index = index;\n };\n _proto24.shouldIgnore = function shouldIgnore(glyph) {\n return this.flags.ignoreMarks && glyph.isMark || this.flags.ignoreBaseGlyphs && glyph.isBase || this.flags.ignoreLigatures && glyph.isLigature || this.markAttachmentType && glyph.isMark && glyph.markAttachmentType !== this.markAttachmentType;\n };\n _proto24.move = function move(dir) {\n this.index += dir;\n while (0 <= this.index && this.index < this.glyphs.length && this.shouldIgnore(this.glyphs[this.index])) {\n this.index += dir;\n }\n if (0 > this.index || this.index >= this.glyphs.length) {\n return null;\n }\n return this.glyphs[this.index];\n };\n _proto24.next = function next() {\n return this.move(+1);\n };\n _proto24.prev = function prev() {\n return this.move(-1);\n };\n _proto24.peek = function peek(count) {\n if (count === void 0) {\n count = 1;\n }\n var idx = this.index;\n var res = this.increment(count);\n this.index = idx;\n return res;\n };\n _proto24.peekIndex = function peekIndex(count) {\n if (count === void 0) {\n count = 1;\n }\n var idx = this.index;\n this.increment(count);\n var res = this.index;\n this.index = idx;\n return res;\n };\n _proto24.increment = function increment(count) {\n if (count === void 0) {\n count = 1;\n }\n var dir = count < 0 ? -1 : 1;\n count = Math.abs(count);\n while (count--) {\n this.move(dir);\n }\n return this.glyphs[this.index];\n };\n _createClass(GlyphIterator, [{\n key: \"cur\",\n get: function get() {\n return this.glyphs[this.index] || null;\n }\n }]);\n return GlyphIterator;\n}();\nvar DEFAULT_SCRIPTS = ['DFLT', 'dflt', 'latn'];\nvar OTProcessor = /*#__PURE__*/function () {\n function OTProcessor(font, table) {\n this.font = font;\n this.table = table;\n this.script = null;\n this.scriptTag = null;\n this.language = null;\n this.languageTag = null;\n this.features = {};\n this.lookups = {}; // Setup variation substitutions\n\n this.variationsIndex = font._variationProcessor ? this.findVariationsIndex(font._variationProcessor.normalizedCoords) : -1; // initialize to default script + language\n\n this.selectScript(); // current context (set by applyFeatures)\n\n this.glyphs = [];\n this.positions = []; // only used by GPOS\n\n this.ligatureID = 1;\n this.currentFeature = null;\n }\n var _proto25 = OTProcessor.prototype;\n _proto25.findScript = function findScript(script) {\n if (this.table.scriptList == null) {\n return null;\n }\n if (!Array.isArray(script)) {\n script = [script];\n }\n for (var _iterator36 = _createForOfIteratorHelperLoose(script), _step36; !(_step36 = _iterator36()).done;) {\n var s = _step36.value;\n for (var _iterator37 = _createForOfIteratorHelperLoose(this.table.scriptList), _step37; !(_step37 = _iterator37()).done;) {\n var entry = _step37.value;\n if (entry.tag === s) {\n return entry;\n }\n }\n }\n return null;\n };\n _proto25.selectScript = function selectScript(script, language, direction$1) {\n var changed = false;\n var entry;\n if (!this.script || script !== this.scriptTag) {\n entry = this.findScript(script);\n if (!entry) {\n entry = this.findScript(DEFAULT_SCRIPTS);\n }\n if (!entry) {\n return this.scriptTag;\n }\n this.scriptTag = entry.tag;\n this.script = entry.script;\n this.language = null;\n this.languageTag = null;\n changed = true;\n }\n if (!direction$1 || direction$1 !== this.direction) {\n this.direction = direction$1 || direction(script);\n }\n if (language && language.length < 4) {\n language += ' '.repeat(4 - language.length);\n }\n if (!language || language !== this.languageTag) {\n this.language = null;\n for (var _iterator38 = _createForOfIteratorHelperLoose(this.script.langSysRecords), _step38; !(_step38 = _iterator38()).done;) {\n var lang = _step38.value;\n if (lang.tag === language) {\n this.language = lang.langSys;\n this.languageTag = lang.tag;\n break;\n }\n }\n if (!this.language) {\n this.language = this.script.defaultLangSys;\n this.languageTag = null;\n }\n changed = true;\n } // Build a feature lookup table\n\n if (changed) {\n this.features = {};\n if (this.language) {\n for (var _iterator39 = _createForOfIteratorHelperLoose(this.language.featureIndexes), _step39; !(_step39 = _iterator39()).done;) {\n var featureIndex = _step39.value;\n var record = this.table.featureList[featureIndex];\n var substituteFeature = this.substituteFeatureForVariations(featureIndex);\n this.features[record.tag] = substituteFeature || record.feature;\n }\n }\n }\n return this.scriptTag;\n };\n _proto25.lookupsForFeatures = function lookupsForFeatures(userFeatures, exclude) {\n if (userFeatures === void 0) {\n userFeatures = [];\n }\n var lookups = [];\n for (var _iterator40 = _createForOfIteratorHelperLoose(userFeatures), _step40; !(_step40 = _iterator40()).done;) {\n var tag = _step40.value;\n var feature = this.features[tag];\n if (!feature) {\n continue;\n }\n for (var _iterator41 = _createForOfIteratorHelperLoose(feature.lookupListIndexes), _step41; !(_step41 = _iterator41()).done;) {\n var lookupIndex = _step41.value;\n if (exclude && exclude.indexOf(lookupIndex) !== -1) {\n continue;\n }\n lookups.push({\n feature: tag,\n index: lookupIndex,\n lookup: this.table.lookupList.get(lookupIndex)\n });\n }\n }\n lookups.sort(function (a, b) {\n return a.index - b.index;\n });\n return lookups;\n };\n _proto25.substituteFeatureForVariations = function substituteFeatureForVariations(featureIndex) {\n if (this.variationsIndex === -1) {\n return null;\n }\n var record = this.table.featureVariations.featureVariationRecords[this.variationsIndex];\n var substitutions = record.featureTableSubstitution.substitutions;\n for (var _iterator42 = _createForOfIteratorHelperLoose(substitutions), _step42; !(_step42 = _iterator42()).done;) {\n var substitution = _step42.value;\n if (substitution.featureIndex === featureIndex) {\n return substitution.alternateFeatureTable;\n }\n }\n return null;\n };\n _proto25.findVariationsIndex = function findVariationsIndex(coords) {\n var variations = this.table.featureVariations;\n if (!variations) {\n return -1;\n }\n var records = variations.featureVariationRecords;\n for (var i = 0; i < records.length; i++) {\n var conditions = records[i].conditionSet.conditionTable;\n if (this.variationConditionsMatch(conditions, coords)) {\n return i;\n }\n }\n return -1;\n };\n _proto25.variationConditionsMatch = function variationConditionsMatch(conditions, coords) {\n return conditions.every(function (condition) {\n var coord = condition.axisIndex < coords.length ? coords[condition.axisIndex] : 0;\n return condition.filterRangeMinValue <= coord && coord <= condition.filterRangeMaxValue;\n });\n };\n _proto25.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n var lookups = this.lookupsForFeatures(userFeatures);\n this.applyLookups(lookups, glyphs, advances);\n };\n _proto25.applyLookups = function applyLookups(lookups, glyphs, positions) {\n this.glyphs = glyphs;\n this.positions = positions;\n this.glyphIterator = new GlyphIterator(glyphs);\n for (var _iterator43 = _createForOfIteratorHelperLoose(lookups), _step43; !(_step43 = _iterator43()).done;) {\n var _step43$value = _step43.value,\n feature = _step43$value.feature,\n lookup = _step43$value.lookup;\n this.currentFeature = feature;\n this.glyphIterator.reset(lookup.flags);\n while (this.glyphIterator.index < glyphs.length) {\n if (!(feature in this.glyphIterator.cur.features)) {\n this.glyphIterator.next();\n continue;\n }\n for (var _iterator44 = _createForOfIteratorHelperLoose(lookup.subTables), _step44; !(_step44 = _iterator44()).done;) {\n var table = _step44.value;\n var res = this.applyLookup(lookup.lookupType, table);\n if (res) {\n break;\n }\n }\n this.glyphIterator.next();\n }\n }\n };\n _proto25.applyLookup = function applyLookup(lookup, table) {\n throw new Error(\"applyLookup must be implemented by subclasses\");\n };\n _proto25.applyLookupList = function applyLookupList(lookupRecords) {\n var options = this.glyphIterator.options;\n var glyphIndex = this.glyphIterator.index;\n for (var _iterator45 = _createForOfIteratorHelperLoose(lookupRecords), _step45; !(_step45 = _iterator45()).done;) {\n var lookupRecord = _step45.value;\n // Reset flags and find glyph index for this lookup record\n this.glyphIterator.reset(options, glyphIndex);\n this.glyphIterator.increment(lookupRecord.sequenceIndex); // Get the lookup and setup flags for subtables\n\n var lookup = this.table.lookupList.get(lookupRecord.lookupListIndex);\n this.glyphIterator.reset(lookup.flags, this.glyphIterator.index); // Apply lookup subtables until one matches\n\n for (var _iterator46 = _createForOfIteratorHelperLoose(lookup.subTables), _step46; !(_step46 = _iterator46()).done;) {\n var table = _step46.value;\n if (this.applyLookup(lookup.lookupType, table)) {\n break;\n }\n }\n }\n this.glyphIterator.reset(options, glyphIndex);\n return true;\n };\n _proto25.coverageIndex = function coverageIndex(coverage, glyph) {\n if (glyph == null) {\n glyph = this.glyphIterator.cur.id;\n }\n switch (coverage.version) {\n case 1:\n return coverage.glyphs.indexOf(glyph);\n case 2:\n for (var _iterator47 = _createForOfIteratorHelperLoose(coverage.rangeRecords), _step47; !(_step47 = _iterator47()).done;) {\n var range = _step47.value;\n if (range.start <= glyph && glyph <= range.end) {\n return range.startCoverageIndex + glyph - range.start;\n }\n }\n break;\n }\n return -1;\n };\n _proto25.match = function match(sequenceIndex, sequence, fn, matched) {\n var pos = this.glyphIterator.index;\n var glyph = this.glyphIterator.increment(sequenceIndex);\n var idx = 0;\n while (idx < sequence.length && glyph && fn(sequence[idx], glyph)) {\n if (matched) {\n matched.push(this.glyphIterator.index);\n }\n idx++;\n glyph = this.glyphIterator.next();\n }\n this.glyphIterator.index = pos;\n if (idx < sequence.length) {\n return false;\n }\n return matched || true;\n };\n _proto25.sequenceMatches = function sequenceMatches(sequenceIndex, sequence) {\n return this.match(sequenceIndex, sequence, function (component, glyph) {\n return component === glyph.id;\n });\n };\n _proto25.sequenceMatchIndices = function sequenceMatchIndices(sequenceIndex, sequence) {\n var _this4 = this;\n return this.match(sequenceIndex, sequence, function (component, glyph) {\n // If the current feature doesn't apply to this glyph,\n if (!(_this4.currentFeature in glyph.features)) {\n return false;\n }\n return component === glyph.id;\n }, []);\n };\n _proto25.coverageSequenceMatches = function coverageSequenceMatches(sequenceIndex, sequence) {\n var _this5 = this;\n return this.match(sequenceIndex, sequence, function (coverage, glyph) {\n return _this5.coverageIndex(coverage, glyph.id) >= 0;\n });\n };\n _proto25.getClassID = function getClassID(glyph, classDef) {\n switch (classDef.version) {\n case 1:\n // Class array\n var i = glyph - classDef.startGlyph;\n if (i >= 0 && i < classDef.classValueArray.length) {\n return classDef.classValueArray[i];\n }\n break;\n case 2:\n for (var _iterator48 = _createForOfIteratorHelperLoose(classDef.classRangeRecord), _step48; !(_step48 = _iterator48()).done;) {\n var range = _step48.value;\n if (range.start <= glyph && glyph <= range.end) {\n return range.class;\n }\n }\n break;\n }\n return 0;\n };\n _proto25.classSequenceMatches = function classSequenceMatches(sequenceIndex, sequence, classDef) {\n var _this6 = this;\n return this.match(sequenceIndex, sequence, function (classID, glyph) {\n return classID === _this6.getClassID(glyph.id, classDef);\n });\n };\n _proto25.applyContext = function applyContext(table) {\n switch (table.version) {\n case 1:\n var index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n var set = table.ruleSets[index];\n for (var _iterator49 = _createForOfIteratorHelperLoose(set), _step49; !(_step49 = _iterator49()).done;) {\n var rule = _step49.value;\n if (this.sequenceMatches(1, rule.input)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n break;\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n index = this.getClassID(this.glyphIterator.cur.id, table.classDef);\n if (index === -1) {\n return false;\n }\n set = table.classSet[index];\n for (var _iterator50 = _createForOfIteratorHelperLoose(set), _step50; !(_step50 = _iterator50()).done;) {\n var _rule = _step50.value;\n if (this.classSequenceMatches(1, _rule.classes, table.classDef)) {\n return this.applyLookupList(_rule.lookupRecords);\n }\n }\n break;\n case 3:\n if (this.coverageSequenceMatches(0, table.coverages)) {\n return this.applyLookupList(table.lookupRecords);\n }\n break;\n }\n return false;\n };\n _proto25.applyChainingContext = function applyChainingContext(table) {\n switch (table.version) {\n case 1:\n var index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n var set = table.chainRuleSets[index];\n for (var _iterator51 = _createForOfIteratorHelperLoose(set), _step51; !(_step51 = _iterator51()).done;) {\n var rule = _step51.value;\n if (this.sequenceMatches(-rule.backtrack.length, rule.backtrack) && this.sequenceMatches(1, rule.input) && this.sequenceMatches(1 + rule.input.length, rule.lookahead)) {\n return this.applyLookupList(rule.lookupRecords);\n }\n }\n break;\n case 2:\n if (this.coverageIndex(table.coverage) === -1) {\n return false;\n }\n index = this.getClassID(this.glyphIterator.cur.id, table.inputClassDef);\n var rules = table.chainClassSet[index];\n if (!rules) {\n return false;\n }\n for (var _iterator52 = _createForOfIteratorHelperLoose(rules), _step52; !(_step52 = _iterator52()).done;) {\n var _rule2 = _step52.value;\n if (this.classSequenceMatches(-_rule2.backtrack.length, _rule2.backtrack, table.backtrackClassDef) && this.classSequenceMatches(1, _rule2.input, table.inputClassDef) && this.classSequenceMatches(1 + _rule2.input.length, _rule2.lookahead, table.lookaheadClassDef)) {\n return this.applyLookupList(_rule2.lookupRecords);\n }\n }\n break;\n case 3:\n if (this.coverageSequenceMatches(-table.backtrackGlyphCount, table.backtrackCoverage) && this.coverageSequenceMatches(0, table.inputCoverage) && this.coverageSequenceMatches(table.inputGlyphCount, table.lookaheadCoverage)) {\n return this.applyLookupList(table.lookupRecords);\n }\n break;\n }\n return false;\n };\n return OTProcessor;\n}();\nvar GlyphInfo = /*#__PURE__*/function () {\n function GlyphInfo(font, id, codePoints, features) {\n if (codePoints === void 0) {\n codePoints = [];\n }\n this._font = font;\n this.codePoints = codePoints;\n this.id = id;\n this.features = {};\n if (Array.isArray(features)) {\n for (var i = 0; i < features.length; i++) {\n var feature = features[i];\n this.features[feature] = true;\n }\n } else if (typeof features === 'object') {\n Object.assign(this.features, features);\n }\n this.ligatureID = null;\n this.ligatureComponent = null;\n this.isLigated = false;\n this.cursiveAttachment = null;\n this.markAttachment = null;\n this.shaperInfo = null;\n this.substituted = false;\n this.isMultiplied = false;\n }\n var _proto26 = GlyphInfo.prototype;\n _proto26.copy = function copy() {\n return new GlyphInfo(this._font, this.id, this.codePoints, this.features);\n };\n _createClass(GlyphInfo, [{\n key: \"id\",\n get: function get() {\n return this._id;\n },\n set: function set(id) {\n this._id = id;\n this.substituted = true;\n var GDEF = this._font.GDEF;\n if (GDEF && GDEF.glyphClassDef) {\n // TODO: clean this up\n var classID = OTProcessor.prototype.getClassID(id, GDEF.glyphClassDef);\n this.isBase = classID === 1;\n this.isLigature = classID === 2;\n this.isMark = classID === 3;\n this.markAttachmentType = GDEF.markAttachClassDef ? OTProcessor.prototype.getClassID(id, GDEF.markAttachClassDef) : 0;\n } else {\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n this.isBase = !this.isMark;\n this.isLigature = this.codePoints.length > 1;\n this.markAttachmentType = 0;\n }\n }\n }]);\n return GlyphInfo;\n}();\n/**\r\n * This is a shaper for the Hangul script, used by the Korean language.\r\n * It does the following:\r\n * - decompose if unsupported by the font:\r\n * -> \r\n * -> \r\n * -> \r\n *\r\n * - compose if supported by the font:\r\n * -> \r\n * -> \r\n * -> \r\n *\r\n * - reorder tone marks (S is any valid syllable):\r\n * -> \r\n *\r\n * - apply ljmo, vjmo, and tjmo OpenType features to decomposed Jamo sequences.\r\n *\r\n * This logic is based on the following documents:\r\n * - http://www.microsoft.com/typography/OpenTypeDev/hangul/intro.htm\r\n * - http://ktug.org/~nomos/harfbuzz-hangul/hangulshaper.pdf\r\n */\nvar HangulShaper = /*#__PURE__*/function (_DefaultShaper2) {\n _inheritsLoose(HangulShaper, _DefaultShaper2);\n function HangulShaper() {\n return _DefaultShaper2.apply(this, arguments) || this;\n }\n HangulShaper.planFeatures = function planFeatures(plan) {\n plan.add(['ljmo', 'vjmo', 'tjmo'], false);\n };\n HangulShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n var state = 0;\n var i = 0;\n while (i < glyphs.length) {\n var action = void 0;\n var glyph = glyphs[i];\n var code = glyph.codePoints[0];\n var type = getType(code);\n var _STATE_TABLE$1$state$ = STATE_TABLE$1[state][type];\n action = _STATE_TABLE$1$state$[0];\n state = _STATE_TABLE$1$state$[1];\n switch (action) {\n case DECOMPOSE:\n // Decompose the composed syllable if it is not supported by the font.\n if (!plan.font.hasGlyphForCodePoint(code)) {\n i = decompose(glyphs, i, plan.font);\n }\n break;\n case COMPOSE:\n // Found a decomposed syllable. Try to compose if supported by the font.\n i = compose(glyphs, i, plan.font);\n break;\n case TONE_MARK:\n // Got a valid syllable, followed by a tone mark. Move the tone mark to the beginning of the syllable.\n reorderToneMark(glyphs, i, plan.font);\n break;\n case INVALID:\n // Tone mark has no valid syllable to attach to, so insert a dotted circle\n i = insertDottedCircle(glyphs, i, plan.font);\n break;\n }\n i++;\n }\n };\n return HangulShaper;\n}(DefaultShaper);\n_defineProperty(HangulShaper, \"zeroMarkWidths\", 'NONE');\nvar HANGUL_BASE = 0xac00;\nvar HANGUL_END = 0xd7a4;\nvar HANGUL_COUNT = HANGUL_END - HANGUL_BASE + 1;\nvar L_BASE = 0x1100; // lead\n\nvar V_BASE = 0x1161; // vowel\n\nvar T_BASE = 0x11a7; // trail\n\nvar L_COUNT = 19;\nvar V_COUNT = 21;\nvar T_COUNT = 28;\nvar L_END = L_BASE + L_COUNT - 1;\nvar V_END = V_BASE + V_COUNT - 1;\nvar T_END = T_BASE + T_COUNT - 1;\nvar DOTTED_CIRCLE = 0x25cc;\nvar isL = function isL(code) {\n return 0x1100 <= code && code <= 0x115f || 0xa960 <= code && code <= 0xa97c;\n};\nvar isV = function isV(code) {\n return 0x1160 <= code && code <= 0x11a7 || 0xd7b0 <= code && code <= 0xd7c6;\n};\nvar isT = function isT(code) {\n return 0x11a8 <= code && code <= 0x11ff || 0xd7cb <= code && code <= 0xd7fb;\n};\nvar isTone = function isTone(code) {\n return 0x302e <= code && code <= 0x302f;\n};\nvar isLVT = function isLVT(code) {\n return HANGUL_BASE <= code && code <= HANGUL_END;\n};\nvar isLV = function isLV(code) {\n return code - HANGUL_BASE < HANGUL_COUNT && (code - HANGUL_BASE) % T_COUNT === 0;\n};\nvar isCombiningL = function isCombiningL(code) {\n return L_BASE <= code && code <= L_END;\n};\nvar isCombiningV = function isCombiningV(code) {\n return V_BASE <= code && code <= V_END;\n};\nvar isCombiningT = function isCombiningT(code) {\n return 1 <= code && code <= T_END;\n}; // Character categories\n\nvar X = 0; // Other character\n\nvar L = 1; // Leading consonant\n\nvar V = 2; // Medial vowel\n\nvar T = 3; // Trailing consonant\n\nvar LV = 4; // Composed syllable\n\nvar LVT = 5; // Composed syllable\n\nvar M = 6; // Tone mark\n// This function classifies a character using the above categories.\n\nfunction getType(code) {\n if (isL(code)) {\n return L;\n }\n if (isV(code)) {\n return V;\n }\n if (isT(code)) {\n return T;\n }\n if (isLV(code)) {\n return LV;\n }\n if (isLVT(code)) {\n return LVT;\n }\n if (isTone(code)) {\n return M;\n }\n return X;\n} // State machine actions\n\nvar NO_ACTION = 0;\nvar DECOMPOSE = 1;\nvar COMPOSE = 2;\nvar TONE_MARK = 4;\nvar INVALID = 5; // Build a state machine that accepts valid syllables, and applies actions along the way.\n// The logic this is implementing is documented at the top of the file.\n\nvar STATE_TABLE$1 = [\n// X L V T LV LVT M\n// State 0: start state\n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],\n// State 1: \n[[NO_ACTION, 0], [NO_ACTION, 1], [COMPOSE, 2], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [INVALID, 0]],\n// State 2: or \n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [COMPOSE, 3], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]],\n// State 3: or \n[[NO_ACTION, 0], [NO_ACTION, 1], [NO_ACTION, 0], [NO_ACTION, 0], [DECOMPOSE, 2], [DECOMPOSE, 3], [TONE_MARK, 0]]];\nfunction getGlyph(font, code, features) {\n return new GlyphInfo(font, font.glyphForCodePoint(code).id, [code], features);\n}\nfunction decompose(glyphs, i, font) {\n var glyph = glyphs[i];\n var code = glyph.codePoints[0];\n var s = code - HANGUL_BASE;\n var t = T_BASE + s % T_COUNT;\n s = s / T_COUNT | 0;\n var l = L_BASE + s / V_COUNT | 0;\n var v = V_BASE + s % V_COUNT; // Don't decompose if all of the components are not available\n\n if (!font.hasGlyphForCodePoint(l) || !font.hasGlyphForCodePoint(v) || t !== T_BASE && !font.hasGlyphForCodePoint(t)) {\n return i;\n } // Replace the current glyph with decomposed L, V, and T glyphs,\n // and apply the proper OpenType features to each component.\n\n var ljmo = getGlyph(font, l, glyph.features);\n ljmo.features.ljmo = true;\n var vjmo = getGlyph(font, v, glyph.features);\n vjmo.features.vjmo = true;\n var insert = [ljmo, vjmo];\n if (t > T_BASE) {\n var tjmo = getGlyph(font, t, glyph.features);\n tjmo.features.tjmo = true;\n insert.push(tjmo);\n }\n glyphs.splice.apply(glyphs, [i, 1].concat(insert));\n return i + insert.length - 1;\n}\nfunction compose(glyphs, i, font) {\n var glyph = glyphs[i];\n var code = glyphs[i].codePoints[0];\n var type = getType(code);\n var prev = glyphs[i - 1].codePoints[0];\n var prevType = getType(prev); // Figure out what type of syllable we're dealing with\n\n var lv, ljmo, vjmo, tjmo;\n if (prevType === LV && type === T) {\n // \n lv = prev;\n tjmo = glyph;\n } else {\n if (type === V) {\n // \n ljmo = glyphs[i - 1];\n vjmo = glyph;\n } else {\n // \n ljmo = glyphs[i - 2];\n vjmo = glyphs[i - 1];\n tjmo = glyph;\n }\n var l = ljmo.codePoints[0];\n var v = vjmo.codePoints[0]; // Make sure L and V are combining characters\n\n if (isCombiningL(l) && isCombiningV(v)) {\n lv = HANGUL_BASE + ((l - L_BASE) * V_COUNT + (v - V_BASE)) * T_COUNT;\n }\n }\n var t = tjmo && tjmo.codePoints[0] || T_BASE;\n if (lv != null && (t === T_BASE || isCombiningT(t))) {\n var s = lv + (t - T_BASE); // Replace with a composed glyph if supported by the font,\n // otherwise apply the proper OpenType features to each component.\n\n if (font.hasGlyphForCodePoint(s)) {\n var del = prevType === V ? 3 : 2;\n glyphs.splice(i - del + 1, del, getGlyph(font, s, glyph.features));\n return i - del + 1;\n }\n } // Didn't compose (either a non-combining component or unsupported by font).\n\n if (ljmo) {\n ljmo.features.ljmo = true;\n }\n if (vjmo) {\n vjmo.features.vjmo = true;\n }\n if (tjmo) {\n tjmo.features.tjmo = true;\n }\n if (prevType === LV) {\n // Sequence was originally , which got combined earlier.\n // Either the T was non-combining, or the LVT glyph wasn't supported.\n // Decompose the glyph again and apply OT features.\n decompose(glyphs, i - 1, font);\n return i + 1;\n }\n return i;\n}\nfunction getLength(code) {\n switch (getType(code)) {\n case LV:\n case LVT:\n return 1;\n case V:\n return 2;\n case T:\n return 3;\n }\n}\nfunction reorderToneMark(glyphs, i, font) {\n var glyph = glyphs[i];\n var code = glyphs[i].codePoints[0]; // Move tone mark to the beginning of the previous syllable, unless it is zero width\n\n if (font.glyphForCodePoint(code).advanceWidth === 0) {\n return;\n }\n var prev = glyphs[i - 1].codePoints[0];\n var len = getLength(prev);\n glyphs.splice(i, 1);\n return glyphs.splice(i - len, 0, glyph);\n}\nfunction insertDottedCircle(glyphs, i, font) {\n var glyph = glyphs[i];\n var code = glyphs[i].codePoints[0];\n if (font.hasGlyphForCodePoint(DOTTED_CIRCLE)) {\n var dottedCircle = getGlyph(font, DOTTED_CIRCLE, glyph.features); // If the tone mark is zero width, insert the dotted circle before, otherwise after\n\n var idx = font.glyphForCodePoint(code).advanceWidth === 0 ? i : i + 1;\n glyphs.splice(idx, 0, dottedCircle);\n i++;\n }\n return i;\n}\nvar stateTable = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 14, 15, 16, 17], [0, 0, 0, 18, 19, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 28, 29, 30, 31, 32, 33, 0, 34, 0, 0, 35, 36, 0, 0, 37, 0], [0, 0, 0, 38, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 39, 0, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 12, 43, 0, 0, 0, 0], [0, 0, 0, 0, 43, 44, 44, 8, 9, 0, 0, 0, 0, 0, 43, 0, 0, 0, 0], [0, 0, 0, 45, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 51, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 55, 56, 57, 58, 0, 59, 0, 0, 60, 61, 0, 0, 62, 0], [0, 0, 0, 4, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 63, 64, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 63, 0, 0], [0, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 11, 12, 13, 0, 2, 16, 0], [0, 0, 0, 18, 65, 20, 21, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 0, 0], [0, 0, 0, 69, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 73, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 75, 0, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 25, 79, 0, 0, 0, 0], [0, 0, 0, 18, 19, 20, 74, 22, 23, 0, 24, 0, 0, 25, 26, 0, 0, 27, 0], [0, 0, 0, 81, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 87, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 18, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 89, 90, 0, 0, 76, 77, 0, 23, 0, 24, 0, 0, 0, 78, 0, 89, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 0, 0], [0, 0, 0, 94, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 96, 0, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 35, 100, 0, 0, 0, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 102, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 108, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 28, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 110, 111, 0, 0, 97, 98, 0, 33, 0, 34, 0, 0, 0, 99, 0, 110, 0, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 0, 0], [0, 0, 0, 0, 5, 7, 7, 8, 9, 0, 10, 0, 0, 0, 13, 0, 0, 16, 0], [0, 0, 0, 115, 116, 117, 118, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 39, 0, 122, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 124, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 0, 0], [0, 39, 0, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 46, 47, 48, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 47, 47, 49, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 128, 127, 127, 49, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 129, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 135, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 136, 0, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 60, 140, 0, 0, 0, 0], [0, 0, 0, 0, 140, 141, 141, 57, 58, 0, 0, 0, 0, 0, 140, 0, 0, 0, 0], [0, 0, 0, 142, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 148, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 53, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 150, 151, 0, 0, 137, 138, 0, 58, 0, 59, 0, 0, 0, 139, 0, 150, 0, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 157, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 3, 4, 5, 159, 160, 8, 161, 0, 162, 0, 11, 12, 163, 0, 75, 16, 0], [0, 0, 0, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 0, 165, 0, 0, 0, 0], [0, 124, 64, 0, 0, 40, 164, 0, 9, 0, 10, 0, 0, 0, 42, 0, 124, 0, 0], [0, 0, 0, 0, 0, 70, 70, 0, 71, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 167, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 19, 74, 74, 22, 23, 0, 24, 0, 0, 0, 26, 0, 0, 27, 0], [0, 0, 0, 0, 79, 80, 80, 22, 23, 0, 0, 0, 0, 0, 79, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 172, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 75, 0, 176, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 178, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 178, 0, 0], [0, 75, 0, 0, 0, 175, 179, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 180, 180, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 82, 83, 84, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 83, 83, 85, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 182, 181, 181, 85, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 183, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 86, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 191, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 0, 194, 0, 0, 0, 0], [0, 178, 90, 0, 0, 76, 193, 0, 23, 0, 24, 0, 0, 0, 78, 0, 178, 0, 0], [0, 0, 0, 0, 29, 95, 31, 32, 33, 0, 34, 0, 0, 0, 36, 0, 0, 37, 0], [0, 0, 0, 0, 100, 101, 101, 32, 33, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 198, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 96, 0, 202, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 204, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 0, 0], [0, 96, 0, 0, 0, 201, 205, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 206, 206, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 103, 104, 105, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 104, 104, 106, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 208, 207, 207, 106, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 209, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 217, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 0, 220, 0, 0, 0, 0], [0, 204, 111, 0, 0, 97, 219, 0, 33, 0, 34, 0, 0, 0, 99, 0, 204, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 223, 0, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 119, 225, 0, 0, 0, 0], [0, 0, 0, 115, 116, 117, 222, 8, 9, 0, 10, 0, 0, 119, 120, 0, 0, 16, 0], [0, 0, 0, 115, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 226, 64, 0, 0, 40, 224, 0, 9, 0, 10, 0, 0, 0, 42, 0, 226, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 39, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 44, 44, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 229, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 39, 0, 122, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 39, 0, 0], [0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 231, 231, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 130, 131, 132, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 131, 131, 133, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 234, 233, 233, 133, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 235, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 54, 56, 56, 57, 58, 0, 59, 0, 0, 0, 61, 0, 0, 62, 0], [0, 0, 0, 240, 241, 242, 243, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 136, 0, 247, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 249, 151, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0], [0, 136, 0, 0, 0, 246, 250, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 251, 251, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 143, 144, 145, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 144, 144, 146, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 253, 252, 252, 146, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 254, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 147, 0, 0, 0, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 262, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 0, 265, 0, 0, 0, 0], [0, 249, 151, 0, 0, 137, 264, 0, 58, 0, 59, 0, 0, 0, 139, 0, 249, 0, 0], [0, 0, 0, 221, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 158, 225, 0, 0, 0, 0], [0, 0, 0, 155, 116, 156, 222, 8, 9, 0, 10, 0, 0, 158, 120, 0, 0, 16, 0], [0, 0, 0, 155, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 43, 266, 266, 8, 161, 0, 24, 0, 0, 12, 267, 0, 0, 0, 0], [0, 75, 0, 176, 43, 268, 268, 269, 161, 0, 24, 0, 0, 0, 267, 0, 75, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 271, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 272, 0, 0, 0, 0, 0, 0, 0, 0], [0, 273, 274, 0, 0, 40, 41, 0, 9, 0, 10, 0, 0, 0, 42, 0, 273, 0, 0], [0, 0, 0, 40, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 121, 275, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 166, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 276, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 279, 0, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 173, 281, 0, 0, 0, 0], [0, 0, 0, 169, 170, 171, 278, 22, 23, 0, 24, 0, 0, 173, 174, 0, 0, 27, 0], [0, 0, 0, 169, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 282, 90, 0, 0, 76, 280, 0, 23, 0, 24, 0, 0, 0, 78, 0, 282, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 75, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 80, 80, 22, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 285, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 75, 0, 176, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 75, 0, 0], [0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 287, 287, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 184, 185, 186, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 185, 185, 187, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 290, 289, 289, 187, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 291, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 277, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 192, 281, 0, 0, 0, 0], [0, 0, 0, 189, 170, 190, 278, 22, 23, 0, 24, 0, 0, 192, 174, 0, 0, 27, 0], [0, 0, 0, 189, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 76, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 175, 296, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 299, 0, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 199, 301, 0, 0, 0, 0], [0, 0, 0, 195, 196, 197, 298, 32, 33, 0, 34, 0, 0, 199, 200, 0, 0, 37, 0], [0, 0, 0, 195, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 302, 111, 0, 0, 97, 300, 0, 33, 0, 34, 0, 0, 0, 99, 0, 302, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 96, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 101, 101, 32, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 305, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 96, 0, 202, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 96, 0, 0], [0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 307, 307, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 210, 211, 212, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 211, 211, 213, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 310, 309, 309, 213, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 311, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 297, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 218, 301, 0, 0, 0, 0], [0, 0, 0, 215, 196, 216, 298, 32, 33, 0, 34, 0, 0, 218, 200, 0, 0, 37, 0], [0, 0, 0, 215, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 97, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 201, 316, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 116, 222, 222, 8, 9, 0, 10, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 9, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 320, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 223, 0, 323, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 0, 0, 121, 324, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 325, 318, 326, 327, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 64, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 228, 121, 0, 9, 0, 10, 0, 0, 230, 0, 0, 0, 0, 0], [0, 0, 0, 227, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0], [0, 0, 0, 0, 0, 329, 329, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 236, 237, 238, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 237, 237, 239, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 332, 331, 331, 239, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 333, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 337, 0, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 244, 339, 0, 0, 0, 0], [0, 0, 0, 240, 241, 242, 336, 57, 58, 0, 59, 0, 0, 244, 245, 0, 0, 62, 0], [0, 0, 0, 240, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 340, 151, 0, 0, 137, 338, 0, 58, 0, 59, 0, 0, 0, 139, 0, 340, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 136, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 141, 141, 57, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 343, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 136, 0, 247, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 136, 0, 0], [0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 345, 345, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 346, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 255, 256, 257, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 256, 256, 258, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 348, 347, 347, 258, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 349, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 335, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 263, 339, 0, 0, 0, 0], [0, 0, 0, 260, 241, 261, 336, 57, 58, 0, 59, 0, 0, 263, 245, 0, 0, 62, 0], [0, 0, 0, 260, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 137, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 246, 354, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 126, 126, 8, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 355, 90, 0, 0, 121, 125, 0, 9, 0, 10, 0, 0, 0, 42, 0, 355, 0, 0], [0, 0, 0, 0, 0, 356, 356, 269, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 357, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 270, 0, 0, 0, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 363, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 366, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 40, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 170, 278, 278, 22, 23, 0, 24, 0, 0, 0, 174, 0, 0, 27, 0], [0, 0, 0, 0, 281, 80, 80, 22, 23, 0, 0, 0, 0, 0, 281, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 372, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 279, 0, 375, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 0, 0, 175, 376, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 377, 370, 378, 379, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 90, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 284, 175, 0, 23, 0, 24, 0, 0, 286, 0, 0, 0, 0, 0], [0, 0, 0, 283, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 0, 0], [0, 0, 0, 0, 0, 381, 381, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 292, 293, 294, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 293, 293, 295, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 0, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 384, 383, 383, 295, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 385, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 76, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 196, 298, 298, 32, 33, 0, 34, 0, 0, 0, 200, 0, 0, 37, 0], [0, 0, 0, 0, 301, 101, 101, 32, 33, 0, 0, 0, 0, 0, 301, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 390, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 299, 0, 393, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 0, 0, 201, 394, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 395, 388, 396, 397, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 111, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 304, 201, 0, 33, 0, 34, 0, 0, 306, 0, 0, 0, 0, 0], [0, 0, 0, 303, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, 0, 0], [0, 0, 0, 0, 0, 399, 399, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 312, 313, 314, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 313, 313, 315, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 0, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 402, 401, 401, 315, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 403, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 97, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 407, 0, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 321, 409, 0, 0, 0, 0], [0, 0, 0, 317, 318, 319, 406, 8, 9, 0, 10, 0, 0, 321, 322, 0, 0, 16, 0], [0, 0, 0, 317, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 410, 64, 0, 0, 40, 408, 0, 9, 0, 10, 0, 0, 0, 42, 0, 410, 0, 0], [0, 223, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 223, 0, 323, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 223, 0, 0], [0, 0, 0, 405, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 328, 409, 0, 0, 0, 0], [0, 0, 0, 325, 318, 326, 406, 8, 9, 0, 10, 0, 0, 328, 322, 0, 0, 16, 0], [0, 0, 0, 325, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0], [0, 0, 0, 0, 0, 411, 411, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 40, 121, 334, 0, 9, 0, 10, 0, 0, 0, 42, 0, 0, 0, 0], [0, 0, 0, 0, 413, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 241, 336, 336, 57, 58, 0, 59, 0, 0, 0, 245, 0, 0, 62, 0], [0, 0, 0, 0, 339, 141, 141, 57, 58, 0, 0, 0, 0, 0, 339, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 417, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 337, 0, 420, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 0, 0, 246, 421, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 422, 415, 423, 424, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 151, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 58, 0, 0, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 342, 246, 0, 58, 0, 59, 0, 0, 344, 0, 0, 0, 0, 0], [0, 0, 0, 341, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, 0], [0, 0, 0, 0, 0, 426, 426, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 427, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 350, 351, 352, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 351, 351, 353, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 0, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 429, 428, 428, 353, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 430, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 137, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 434, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 180, 180, 269, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 358, 359, 360, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 359, 359, 361, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 437, 436, 436, 361, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 438, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 443, 274, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 443, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 367, 225, 0, 0, 0, 0], [0, 0, 0, 364, 116, 365, 445, 8, 161, 0, 162, 0, 0, 367, 120, 0, 0, 16, 0], [0, 0, 0, 364, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 448, 0, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 373, 450, 0, 0, 0, 0], [0, 0, 0, 369, 370, 371, 447, 22, 23, 0, 24, 0, 0, 373, 374, 0, 0, 27, 0], [0, 0, 0, 369, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 451, 90, 0, 0, 76, 449, 0, 23, 0, 24, 0, 0, 0, 78, 0, 451, 0, 0], [0, 279, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 279, 0, 375, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 279, 0, 0], [0, 0, 0, 446, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 380, 450, 0, 0, 0, 0], [0, 0, 0, 377, 370, 378, 447, 22, 23, 0, 24, 0, 0, 380, 374, 0, 0, 27, 0], [0, 0, 0, 377, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 0, 0], [0, 0, 0, 0, 0, 452, 452, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 453, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 76, 175, 386, 0, 23, 0, 24, 0, 0, 0, 78, 0, 0, 0, 0], [0, 0, 0, 0, 454, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 457, 0, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 391, 459, 0, 0, 0, 0], [0, 0, 0, 387, 388, 389, 456, 32, 33, 0, 34, 0, 0, 391, 392, 0, 0, 37, 0], [0, 0, 0, 387, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 460, 111, 0, 0, 97, 458, 0, 33, 0, 34, 0, 0, 0, 99, 0, 460, 0, 0], [0, 299, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 299, 0, 393, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 299, 0, 0], [0, 0, 0, 455, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 398, 459, 0, 0, 0, 0], [0, 0, 0, 395, 388, 396, 456, 32, 33, 0, 34, 0, 0, 398, 392, 0, 0, 37, 0], [0, 0, 0, 395, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 0, 0], [0, 0, 0, 0, 0, 461, 461, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 97, 201, 404, 0, 33, 0, 34, 0, 0, 0, 99, 0, 0, 0, 0], [0, 0, 0, 0, 463, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 318, 406, 406, 8, 9, 0, 10, 0, 0, 0, 322, 0, 0, 16, 0], [0, 0, 0, 0, 409, 44, 44, 8, 9, 0, 0, 0, 0, 0, 409, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 467, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 407, 0, 470, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 0, 0, 121, 471, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 472, 465, 473, 474, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 0, 0], [0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 479, 0, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 418, 481, 0, 0, 0, 0], [0, 0, 0, 414, 415, 416, 478, 57, 58, 0, 59, 0, 0, 418, 419, 0, 0, 62, 0], [0, 0, 0, 414, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 482, 151, 0, 0, 137, 480, 0, 58, 0, 59, 0, 0, 0, 139, 0, 482, 0, 0], [0, 337, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 337, 0, 420, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 337, 0, 0], [0, 0, 0, 477, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 425, 481, 0, 0, 0, 0], [0, 0, 0, 422, 415, 423, 478, 57, 58, 0, 59, 0, 0, 425, 419, 0, 0, 62, 0], [0, 0, 0, 422, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 258, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 0, 0], [0, 0, 0, 0, 0, 483, 483, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 484, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 137, 246, 431, 0, 58, 0, 59, 0, 0, 0, 139, 0, 0, 0, 0], [0, 0, 0, 0, 485, 0, 0, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 444, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 435, 225, 0, 0, 0, 0], [0, 0, 0, 432, 116, 433, 445, 8, 161, 0, 162, 0, 0, 435, 120, 0, 0, 16, 0], [0, 0, 0, 432, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 0, 486, 486, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 487, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 439, 440, 441, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 440, 440, 442, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 489, 488, 488, 442, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 490, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 497, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 0, 116, 445, 445, 8, 161, 0, 162, 0, 0, 0, 120, 0, 0, 16, 0], [0, 0, 0, 0, 225, 44, 44, 8, 161, 0, 0, 0, 0, 0, 225, 0, 0, 0, 0], [0, 0, 0, 0, 370, 447, 447, 22, 23, 0, 24, 0, 0, 0, 374, 0, 0, 27, 0], [0, 0, 0, 0, 450, 80, 80, 22, 23, 0, 0, 0, 0, 0, 450, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 502, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 448, 0, 505, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 0, 0, 175, 506, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 507, 500, 508, 509, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 295, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0], [0, 0, 0, 0, 0, 0, 511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 388, 456, 456, 32, 33, 0, 34, 0, 0, 0, 392, 0, 0, 37, 0], [0, 0, 0, 0, 459, 101, 101, 32, 33, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 515, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 457, 0, 518, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 0, 0, 201, 519, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 520, 513, 521, 522, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 312, 0, 0], [0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 527, 0, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 468, 529, 0, 0, 0, 0], [0, 0, 0, 464, 465, 466, 526, 8, 9, 0, 10, 0, 0, 468, 469, 0, 0, 16, 0], [0, 0, 0, 464, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 530, 64, 0, 0, 40, 528, 0, 9, 0, 10, 0, 0, 0, 42, 0, 530, 0, 0], [0, 407, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 407, 0, 470, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 407, 0, 0], [0, 0, 0, 525, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 475, 529, 0, 0, 0, 0], [0, 0, 0, 472, 465, 473, 526, 8, 9, 0, 10, 0, 0, 475, 469, 0, 0, 16, 0], [0, 0, 0, 472, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0], [0, 0, 0, 0, 415, 478, 478, 57, 58, 0, 59, 0, 0, 0, 419, 0, 0, 62, 0], [0, 0, 0, 0, 481, 141, 141, 57, 58, 0, 0, 0, 0, 0, 481, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 534, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 479, 0, 537, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 0, 0, 246, 538, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 539, 532, 540, 541, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 353, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 350, 0, 0], [0, 0, 0, 0, 0, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 0, 0], [0, 0, 0, 0, 0, 544, 544, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 545, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 491, 492, 493, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 492, 492, 494, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 547, 546, 546, 494, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 548, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 274, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 496, 368, 0, 161, 0, 162, 0, 0, 498, 0, 0, 0, 0, 0], [0, 0, 0, 495, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 553, 0, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 503, 555, 0, 0, 0, 0], [0, 0, 0, 499, 500, 501, 552, 22, 23, 0, 24, 0, 0, 503, 504, 0, 0, 27, 0], [0, 0, 0, 499, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 556, 90, 0, 0, 76, 554, 0, 23, 0, 24, 0, 0, 0, 78, 0, 556, 0, 0], [0, 448, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 448, 0, 505, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 448, 0, 0], [0, 0, 0, 551, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 510, 555, 0, 0, 0, 0], [0, 0, 0, 507, 500, 508, 552, 22, 23, 0, 24, 0, 0, 510, 504, 0, 0, 27, 0], [0, 0, 0, 507, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 559, 0, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 516, 561, 0, 0, 0, 0], [0, 0, 0, 512, 513, 514, 558, 32, 33, 0, 34, 0, 0, 516, 517, 0, 0, 37, 0], [0, 0, 0, 512, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 562, 111, 0, 0, 97, 560, 0, 33, 0, 34, 0, 0, 0, 99, 0, 562, 0, 0], [0, 457, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 457, 0, 518, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 457, 0, 0], [0, 0, 0, 557, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 523, 561, 0, 0, 0, 0], [0, 0, 0, 520, 513, 521, 558, 32, 33, 0, 34, 0, 0, 523, 517, 0, 0, 37, 0], [0, 0, 0, 520, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0], [0, 0, 0, 0, 465, 526, 526, 8, 9, 0, 10, 0, 0, 0, 469, 0, 0, 16, 0], [0, 0, 0, 0, 529, 44, 44, 8, 9, 0, 0, 0, 0, 0, 529, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 565, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 527, 0, 567, 0, 123, 123, 8, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 0, 0, 121, 568, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 569, 66, 570, 571, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 575, 0, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 535, 577, 0, 0, 0, 0], [0, 0, 0, 531, 532, 533, 574, 57, 58, 0, 59, 0, 0, 535, 536, 0, 0, 62, 0], [0, 0, 0, 531, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 578, 151, 0, 0, 137, 576, 0, 58, 0, 59, 0, 0, 0, 139, 0, 578, 0, 0], [0, 479, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 479, 0, 537, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 479, 0, 0], [0, 0, 0, 573, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 542, 577, 0, 0, 0, 0], [0, 0, 0, 539, 532, 540, 574, 57, 58, 0, 59, 0, 0, 542, 536, 0, 0, 62, 0], [0, 0, 0, 539, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 0, 0], [0, 0, 0, 0, 0, 0, 0, 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 439, 0, 0], [0, 0, 0, 0, 0, 579, 579, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 549, 368, 550, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 0, 368, 368, 0, 161, 0, 162, 0, 0, 0, 362, 0, 0, 0, 0], [0, 0, 0, 0, 581, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 500, 552, 552, 22, 23, 0, 24, 0, 0, 0, 504, 0, 0, 27, 0], [0, 0, 0, 0, 555, 80, 80, 22, 23, 0, 0, 0, 0, 0, 555, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 584, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 553, 0, 586, 0, 177, 177, 22, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 0, 0, 175, 587, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 588, 91, 589, 590, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 0, 513, 558, 558, 32, 33, 0, 34, 0, 0, 0, 517, 0, 0, 37, 0], [0, 0, 0, 0, 561, 101, 101, 32, 33, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 594, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 559, 0, 596, 0, 203, 203, 32, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 0, 0, 201, 597, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 598, 112, 599, 600, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 566, 165, 0, 0, 0, 0], [0, 0, 0, 563, 66, 564, 67, 8, 9, 0, 10, 0, 0, 566, 68, 0, 0, 16, 0], [0, 0, 0, 563, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 527, 0, 0, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 527, 0, 567, 0, 121, 121, 0, 9, 0, 10, 0, 0, 0, 42, 0, 527, 0, 0], [0, 0, 0, 602, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 165, 44, 44, 8, 9, 0, 0, 0, 0, 572, 165, 0, 0, 0, 0], [0, 0, 0, 569, 66, 570, 67, 8, 9, 0, 10, 0, 0, 572, 68, 0, 0, 16, 0], [0, 0, 0, 569, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 0, 532, 574, 574, 57, 58, 0, 59, 0, 0, 0, 536, 0, 0, 62, 0], [0, 0, 0, 0, 577, 141, 141, 57, 58, 0, 0, 0, 0, 0, 577, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 605, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 575, 0, 607, 0, 248, 248, 57, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 0, 0, 246, 608, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 609, 152, 610, 611, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 494, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 491, 0, 0], [0, 0, 0, 0, 0, 0, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 585, 194, 0, 0, 0, 0], [0, 0, 0, 582, 91, 583, 92, 22, 23, 0, 24, 0, 0, 585, 93, 0, 0, 27, 0], [0, 0, 0, 582, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 553, 0, 0, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 553, 0, 586, 0, 175, 175, 0, 23, 0, 24, 0, 0, 0, 78, 0, 553, 0, 0], [0, 0, 0, 614, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 194, 80, 80, 22, 23, 0, 0, 0, 0, 591, 194, 0, 0, 0, 0], [0, 0, 0, 588, 91, 589, 92, 22, 23, 0, 24, 0, 0, 591, 93, 0, 0, 27, 0], [0, 0, 0, 588, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 595, 220, 0, 0, 0, 0], [0, 0, 0, 592, 112, 593, 113, 32, 33, 0, 34, 0, 0, 595, 114, 0, 0, 37, 0], [0, 0, 0, 592, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 559, 0, 0, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 559, 0, 596, 0, 201, 201, 0, 33, 0, 34, 0, 0, 0, 99, 0, 559, 0, 0], [0, 0, 0, 615, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 220, 101, 101, 32, 33, 0, 0, 0, 0, 601, 220, 0, 0, 0, 0], [0, 0, 0, 598, 112, 599, 113, 32, 33, 0, 34, 0, 0, 601, 114, 0, 0, 37, 0], [0, 0, 0, 598, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 66, 67, 67, 8, 9, 0, 10, 0, 0, 0, 68, 0, 0, 16, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 606, 265, 0, 0, 0, 0], [0, 0, 0, 603, 152, 604, 153, 57, 58, 0, 59, 0, 0, 606, 154, 0, 0, 62, 0], [0, 0, 0, 603, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 575, 0, 0, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 575, 0, 607, 0, 246, 246, 0, 58, 0, 59, 0, 0, 0, 139, 0, 575, 0, 0], [0, 0, 0, 616, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 265, 141, 141, 57, 58, 0, 0, 0, 0, 612, 265, 0, 0, 0, 0], [0, 0, 0, 609, 152, 610, 153, 57, 58, 0, 59, 0, 0, 612, 154, 0, 0, 62, 0], [0, 0, 0, 609, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 549, 0, 0], [0, 0, 0, 0, 91, 92, 92, 22, 23, 0, 24, 0, 0, 0, 93, 0, 0, 27, 0], [0, 0, 0, 0, 112, 113, 113, 32, 33, 0, 34, 0, 0, 0, 114, 0, 0, 37, 0], [0, 0, 0, 0, 152, 153, 153, 57, 58, 0, 59, 0, 0, 0, 154, 0, 0, 62, 0]];\nvar accepting = [false, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, false, false, true, true, true, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, true, true, true, false, true, false, true, true, false, false, true, true, true, true, true, true, true, false, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, false, true, false, true, true, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, false, true, false, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, true, false, true, true, false, false, false, false, true, true, false, false, true, true, true, false, true, true, false, false, true, false, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, true, false, true, false, true, true, false, false, true, true, false, false, true, true, true, false, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, false, false, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, false, false, false, false, false, false, false, true, true, false, false, true, true, false, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, true, true, false, true, true, true, true, true, true, false, true, true, false, true, false, true, true, true, true, true, true, false, true, true, true, true, true, true, false, true, true, false, false, false, false, false, true, true, false, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, false, false, false, true, false, true, true, true, true, true, false, true, true, true, false, true, true, true, true, true, false, true, true, true, true, false, true, true, true, true, true, false, true, true, false, true, true, true];\nvar tags = [[], [\"broken_cluster\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"symbol_cluster\"], [], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"broken_cluster\"], [\"symbol_cluster\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [\"standalone_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [], [], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [], [], [\"consonant_syllable\", \"broken_cluster\"], [\"consonant_syllable\", \"broken_cluster\"], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [], [], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"consonant_syllable\"], [], [\"consonant_syllable\"], [\"consonant_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"vowel_syllable\"], [], [\"vowel_syllable\"], [\"vowel_syllable\"], [\"broken_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"standalone_cluster\"], [\"standalone_cluster\"], [], [\"consonant_syllable\"], [\"vowel_syllable\"], [\"standalone_cluster\"]];\nvar indicMachine = {\n stateTable: stateTable,\n accepting: accepting,\n tags: tags\n};\nvar categories = [\"O\", \"IND\", \"S\", \"GB\", \"B\", \"FM\", \"CGJ\", \"VMAbv\", \"VMPst\", \"VAbv\", \"VPst\", \"CMBlw\", \"VPre\", \"VBlw\", \"H\", \"VMBlw\", \"CMAbv\", \"MBlw\", \"CS\", \"R\", \"SUB\", \"MPst\", \"MPre\", \"FAbv\", \"FPst\", \"FBlw\", \"null\", \"SMAbv\", \"SMBlw\", \"VMPre\", \"ZWNJ\", \"ZWJ\", \"WJ\", \"M\", \"VS\", \"N\", \"HN\", \"MAbv\"];\nvar decompositions = {\n \"2507\": [2503, 2494],\n \"2508\": [2503, 2519],\n \"2888\": [2887, 2902],\n \"2891\": [2887, 2878],\n \"2892\": [2887, 2903],\n \"3018\": [3014, 3006],\n \"3019\": [3015, 3006],\n \"3020\": [3014, 3031],\n \"3144\": [3142, 3158],\n \"3264\": [3263, 3285],\n \"3271\": [3270, 3285],\n \"3272\": [3270, 3286],\n \"3274\": [3270, 3266],\n \"3275\": [3270, 3266, 3285],\n \"3402\": [3398, 3390],\n \"3403\": [3399, 3390],\n \"3404\": [3398, 3415],\n \"3546\": [3545, 3530],\n \"3548\": [3545, 3535],\n \"3549\": [3545, 3535, 3530],\n \"3550\": [3545, 3551],\n \"3635\": [3661, 3634],\n \"3763\": [3789, 3762],\n \"3955\": [3953, 3954],\n \"3957\": [3953, 3956],\n \"3958\": [4018, 3968],\n \"3959\": [4018, 3953, 3968],\n \"3960\": [4019, 3968],\n \"3961\": [4019, 3953, 3968],\n \"3969\": [3953, 3968],\n \"6971\": [6970, 6965],\n \"6973\": [6972, 6965],\n \"6976\": [6974, 6965],\n \"6977\": [6975, 6965],\n \"6979\": [6978, 6965],\n \"69934\": [69937, 69927],\n \"69935\": [69938, 69927],\n \"70475\": [70471, 70462],\n \"70476\": [70471, 70487],\n \"70843\": [70841, 70842],\n \"70844\": [70841, 70832],\n \"70846\": [70841, 70845],\n \"71098\": [71096, 71087],\n \"71099\": [71097, 71087]\n};\nvar stateTable$1 = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [2, 2, 3, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 17, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 2, 0, 0, 24, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 27, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 39, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 9, 0, 0, 12, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 0, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 4, 4, 5, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 49, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 0, 11, 12, 0, 14, 0, 16, 0, 0, 0, 11, 0, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 33, 0, 0, 36, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 0, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 53, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 0, 0, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 0, 35, 36, 0, 38, 0, 40, 0, 0, 0, 35, 0, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 0, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 5, 0, 6, 7, 8, 9, 48, 11, 12, 13, 14, 48, 16, 0, 0, 18, 11, 19, 20, 21, 22, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 25], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 0, 0], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 0, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 29, 0, 30, 31, 32, 33, 52, 35, 36, 37, 38, 52, 40, 0, 0, 41, 35, 42, 43, 44, 45, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 47], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, 0]];\nvar accepting$1 = [false, true, true, true, true, true, true, true, true, true, true, true, true, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true];\nvar tags$1 = [[], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"broken_cluster\"], [\"independent_cluster\"], [\"symbol_cluster\"], [\"symbol_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"virama_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"broken_cluster\"], [\"broken_cluster\"], [\"numeral_cluster\"], [\"number_joiner_terminated_cluster\"], [\"standard_cluster\"], [\"standard_cluster\"], [\"numeral_cluster\"]];\nvar useData = {\n categories: categories,\n decompositions: decompositions,\n stateTable: stateTable$1,\n accepting: accepting$1,\n tags: tags$1\n};\n\n// Cateories used in the OpenType spec:\n// https://www.microsoft.com/typography/otfntdev/devanot/shaping.aspx\nvar CATEGORIES = {\n X: 1 << 0,\n C: 1 << 1,\n V: 1 << 2,\n N: 1 << 3,\n H: 1 << 4,\n ZWNJ: 1 << 5,\n ZWJ: 1 << 6,\n M: 1 << 7,\n SM: 1 << 8,\n VD: 1 << 9,\n A: 1 << 10,\n Placeholder: 1 << 11,\n Dotted_Circle: 1 << 12,\n RS: 1 << 13,\n // Register Shifter, used in Khmer OT spec.\n Coeng: 1 << 14,\n // Khmer-style Virama.\n Repha: 1 << 15,\n // Atomically-encoded logical or visual repha.\n Ra: 1 << 16,\n CM: 1 << 17,\n // Consonant-Medial.\n Symbol: 1 << 18 // Avagraha, etc that take marks (SM,A,VD).\n}; // Visual positions in a syllable from left to right.\n\nvar POSITIONS = {\n Start: 1 << 0,\n Ra_To_Become_Reph: 1 << 1,\n Pre_M: 1 << 2,\n Pre_C: 1 << 3,\n Base_C: 1 << 4,\n After_Main: 1 << 5,\n Above_C: 1 << 6,\n Before_Sub: 1 << 7,\n Below_C: 1 << 8,\n After_Sub: 1 << 9,\n Before_Post: 1 << 10,\n Post_C: 1 << 11,\n After_Post: 1 << 12,\n Final_C: 1 << 13,\n SMVD: 1 << 14,\n End: 1 << 15\n};\nvar CONSONANT_FLAGS = CATEGORIES.C | CATEGORIES.Ra | CATEGORIES.CM | CATEGORIES.V | CATEGORIES.Placeholder | CATEGORIES.Dotted_Circle;\nvar JOINER_FLAGS = CATEGORIES.ZWJ | CATEGORIES.ZWNJ;\nvar HALANT_OR_COENG_FLAGS = CATEGORIES.H | CATEGORIES.Coeng;\nvar INDIC_CONFIGS = {\n Default: {\n hasOldSpec: false,\n virama: 0,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Devanagari: {\n hasOldSpec: true,\n virama: 0x094D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Bengali: {\n hasOldSpec: true,\n virama: 0x09CD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Gurmukhi: {\n hasOldSpec: true,\n virama: 0x0A4D,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Sub,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Gujarati: {\n hasOldSpec: true,\n virama: 0x0ACD,\n basePos: 'Last',\n rephPos: POSITIONS.Before_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Oriya: {\n hasOldSpec: true,\n virama: 0x0B4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Tamil: {\n hasOldSpec: true,\n virama: 0x0BCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Pre_And_Post'\n },\n Telugu: {\n hasOldSpec: true,\n virama: 0x0C4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Explicit',\n blwfMode: 'Post_Only'\n },\n Kannada: {\n hasOldSpec: true,\n virama: 0x0CCD,\n basePos: 'Last',\n rephPos: POSITIONS.After_Post,\n rephMode: 'Implicit',\n blwfMode: 'Post_Only'\n },\n Malayalam: {\n hasOldSpec: true,\n virama: 0x0D4D,\n basePos: 'Last',\n rephPos: POSITIONS.After_Main,\n rephMode: 'Log_Repha',\n blwfMode: 'Pre_And_Post'\n },\n // Handled by UniversalShaper\n // Sinhala: {\n // hasOldSpec: false,\n // virama: 0x0DCA,\n // basePos: 'Last_Sinhala',\n // rephPos: POSITIONS.After_Main,\n // rephMode: 'Explicit',\n // blwfMode: 'Pre_And_Post'\n // },\n Khmer: {\n hasOldSpec: false,\n virama: 0x17D2,\n basePos: 'First',\n rephPos: POSITIONS.Ra_To_Become_Reph,\n rephMode: 'Vis_Repha',\n blwfMode: 'Pre_And_Post'\n }\n}; // Additional decompositions that aren't in Unicode\n\nvar INDIC_DECOMPOSITIONS = {\n // Khmer\n 0x17BE: [0x17C1, 0x17BE],\n 0x17BF: [0x17C1, 0x17BF],\n 0x17C0: [0x17C1, 0x17C0],\n 0x17C4: [0x17C1, 0x17C4],\n 0x17C5: [0x17C1, 0x17C5]\n};\nvar decompositions$1 = useData.decompositions;\nvar trie$1 = new UnicodeTrie(Buffer(\"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\",\"base64\"));\nvar stateMachine = new StateMachine(indicMachine);\n/**\r\n * The IndicShaper supports indic scripts e.g. Devanagari, Kannada, etc.\r\n * Based on code from Harfbuzz: https://github.com/behdad/harfbuzz/blob/master/src/hb-ot-shape-complex-indic.cc\r\n */\nvar IndicShaper = /*#__PURE__*/function (_DefaultShaper3) {\n _inheritsLoose(IndicShaper, _DefaultShaper3);\n function IndicShaper() {\n return _DefaultShaper3.apply(this, arguments) || this;\n }\n IndicShaper.planFeatures = function planFeatures(plan) {\n plan.addStage(setupSyllables);\n plan.addStage(['locl', 'ccmp']);\n plan.addStage(initialReordering);\n plan.addStage('nukt');\n plan.addStage('akhn');\n plan.addStage('rphf', false);\n plan.addStage('rkrf');\n plan.addStage('pref', false);\n plan.addStage('blwf', false);\n plan.addStage('abvf', false);\n plan.addStage('half', false);\n plan.addStage('pstf', false);\n plan.addStage('vatu');\n plan.addStage('cjct');\n plan.addStage('cfar', false);\n plan.addStage(finalReordering);\n plan.addStage({\n local: ['init'],\n global: ['pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm', 'calt', 'clig']\n }); // Setup the indic config for the selected script\n\n plan.unicodeScript = fromOpenType(plan.script);\n plan.indicConfig = INDIC_CONFIGS[plan.unicodeScript] || INDIC_CONFIGS.Default;\n plan.isOldSpec = plan.indicConfig.hasOldSpec && plan.script[plan.script.length - 1] !== '2'; // TODO: turn off kern (Khmer) and liga features.\n };\n IndicShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n var _loop = function _loop(i) {\n var codepoint = glyphs[i].codePoints[0];\n var d = INDIC_DECOMPOSITIONS[codepoint] || decompositions$1[codepoint];\n if (d) {\n var decomposed = d.map(function (c) {\n var g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n }\n };\n\n // Decompose split matras\n // TODO: do this in a more general unicode normalizer\n for (var i = glyphs.length - 1; i >= 0; i--) {\n _loop(i);\n }\n };\n return IndicShaper;\n}(DefaultShaper);\n_defineProperty(IndicShaper, \"zeroMarkWidths\", 'NONE');\nfunction indicCategory(glyph) {\n return trie$1.get(glyph.codePoints[0]) >> 8;\n}\nfunction indicPosition(glyph) {\n return 1 << (trie$1.get(glyph.codePoints[0]) & 0xff);\n}\nvar IndicInfo = function IndicInfo(category, position, syllableType, syllable) {\n this.category = category;\n this.position = position;\n this.syllableType = syllableType;\n this.syllable = syllable;\n};\nfunction setupSyllables(font, glyphs) {\n var syllable = 0;\n var last = 0;\n for (var _iterator53 = _createForOfIteratorHelperLoose(stateMachine.match(glyphs.map(indicCategory))), _step53; !(_step53 = _iterator53()).done;) {\n var _step53$value = _step53.value,\n start = _step53$value[0],\n end = _step53$value[1],\n tags = _step53$value[2];\n if (start > last) {\n ++syllable;\n for (var i = last; i < start; i++) {\n glyphs[i].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n ++syllable; // Create shaper info\n\n for (var _i = start; _i <= end; _i++) {\n glyphs[_i].shaperInfo = new IndicInfo(1 << indicCategory(glyphs[_i]), indicPosition(glyphs[_i]), tags[0], syllable);\n }\n last = end + 1;\n }\n if (last < glyphs.length) {\n ++syllable;\n for (var _i2 = last; _i2 < glyphs.length; _i2++) {\n glyphs[_i2].shaperInfo = new IndicInfo(CATEGORIES.X, POSITIONS.End, 'non_indic_cluster', syllable);\n }\n }\n}\nfunction isConsonant(glyph) {\n return glyph.shaperInfo.category & CONSONANT_FLAGS;\n}\nfunction isJoiner(glyph) {\n return glyph.shaperInfo.category & JOINER_FLAGS;\n}\nfunction isHalantOrCoeng(glyph) {\n return glyph.shaperInfo.category & HALANT_OR_COENG_FLAGS;\n}\nfunction wouldSubstitute(glyphs, feature) {\n for (var _iterator54 = _createForOfIteratorHelperLoose(glyphs), _step54; !(_step54 = _iterator54()).done;) {\n var _glyph$features;\n var glyph = _step54.value;\n glyph.features = (_glyph$features = {}, _glyph$features[feature] = true, _glyph$features);\n }\n var GSUB = glyphs[0]._font._layoutEngine.engine.GSUBProcessor;\n GSUB.applyFeatures([feature], glyphs);\n return glyphs.length === 1;\n}\nfunction consonantPosition(font, consonant, virama) {\n var glyphs = [virama, consonant, virama];\n if (wouldSubstitute(glyphs.slice(0, 2), 'blwf') || wouldSubstitute(glyphs.slice(1, 3), 'blwf')) {\n return POSITIONS.Below_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pstf') || wouldSubstitute(glyphs.slice(1, 3), 'pstf')) {\n return POSITIONS.Post_C;\n } else if (wouldSubstitute(glyphs.slice(0, 2), 'pref') || wouldSubstitute(glyphs.slice(1, 3), 'pref')) {\n return POSITIONS.Post_C;\n }\n return POSITIONS.Base_C;\n}\nfunction initialReordering(font, glyphs, plan) {\n var indicConfig = plan.indicConfig;\n var features = font._layoutEngine.engine.GSUBProcessor.features;\n var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n var virama = font.glyphForCodePoint(indicConfig.virama).id;\n if (virama) {\n var info = new GlyphInfo(font, virama, [indicConfig.virama]);\n for (var i = 0; i < glyphs.length; i++) {\n if (glyphs[i].shaperInfo.position === POSITIONS.Base_C) {\n glyphs[i].shaperInfo.position = consonantPosition(font, glyphs[i].copy(), info);\n }\n }\n }\n for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n var _glyphs$start$shaperI = glyphs[start].shaperInfo,\n category = _glyphs$start$shaperI.category,\n syllableType = _glyphs$start$shaperI.syllableType;\n if (syllableType === 'symbol_cluster' || syllableType === 'non_indic_cluster') {\n continue;\n }\n if (syllableType === 'broken_cluster' && dottedCircle) {\n var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = new IndicInfo(1 << indicCategory(g), indicPosition(g), glyphs[start].shaperInfo.syllableType, glyphs[start].shaperInfo.syllable); // Insert after possible Repha.\n\n var _i3 = start;\n while (_i3 < end && glyphs[_i3].shaperInfo.category === CATEGORIES.Repha) {\n _i3++;\n }\n glyphs.splice(_i3++, 0, g);\n end++;\n } // 1. Find base consonant:\n //\n // The shaping engine finds the base consonant of the syllable, using the\n // following algorithm: starting from the end of the syllable, move backwards\n // until a consonant is found that does not have a below-base or post-base\n // form (post-base forms have to follow below-base forms), or that is not a\n // pre-base reordering Ra, or arrive at the first consonant. The consonant\n // stopped at will be the base.\n\n var base = end;\n var limit = start;\n var hasReph = false; // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n\n if (indicConfig.rephPos !== POSITIONS.Ra_To_Become_Reph && features.rphf && start + 3 <= end && (indicConfig.rephMode === 'Implicit' && !isJoiner(glyphs[start + 2]) || indicConfig.rephMode === 'Explicit' && glyphs[start + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n // See if it matches the 'rphf' feature.\n var _g = [glyphs[start].copy(), glyphs[start + 1].copy(), glyphs[start + 2].copy()];\n if (wouldSubstitute(_g.slice(0, 2), 'rphf') || indicConfig.rephMode === 'Explicit' && wouldSubstitute(_g, 'rphf')) {\n limit += 2;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n } else if (indicConfig.rephMode === 'Log_Repha' && glyphs[start].shaperInfo.category === CATEGORIES.Repha) {\n limit++;\n while (limit < end && isJoiner(glyphs[limit])) {\n limit++;\n }\n base = start;\n hasReph = true;\n }\n switch (indicConfig.basePos) {\n case 'Last':\n {\n // starting from the end of the syllable, move backwards\n var _i4 = end;\n var seenBelow = false;\n do {\n var _info = glyphs[--_i4].shaperInfo; // until a consonant is found\n\n if (isConsonant(glyphs[_i4])) {\n // that does not have a below-base or post-base form\n // (post-base forms have to follow below-base forms),\n if (_info.position !== POSITIONS.Below_C && (_info.position !== POSITIONS.Post_C || seenBelow)) {\n base = _i4;\n break;\n } // or that is not a pre-base reordering Ra,\n //\n // IMPLEMENTATION NOTES:\n //\n // Our pre-base reordering Ra's are marked POS_POST_C, so will be skipped\n // by the logic above already.\n //\n // or arrive at the first consonant. The consonant stopped at will\n // be the base.\n\n if (_info.position === POSITIONS.Below_C) {\n seenBelow = true;\n }\n base = _i4;\n } else if (start < _i4 && _info.category === CATEGORIES.ZWJ && glyphs[_i4 - 1].shaperInfo.category === CATEGORIES.H) {\n // A ZWJ after a Halant stops the base search, and requests an explicit\n // half form.\n // A ZWJ before a Halant, requests a subjoined form instead, and hence\n // search continues. This is particularly important for Bengali\n // sequence Ra,H,Ya that should form Ya-Phalaa by subjoining Ya.\n break;\n }\n } while (_i4 > limit);\n break;\n }\n case 'First':\n {\n // The first consonant is always the base.\n base = start; // Mark all subsequent consonants as below.\n\n for (var _i5 = base + 1; _i5 < end; _i5++) {\n if (isConsonant(glyphs[_i5])) {\n glyphs[_i5].shaperInfo.position = POSITIONS.Below_C;\n }\n }\n }\n } // If the syllable starts with Ra + Halant (in a script that has Reph)\n // and has more than one consonant, Ra is excluded from candidates for\n // base consonants.\n //\n // Only do this for unforced Reph. (ie. not for Ra,H,ZWJ)\n\n if (hasReph && base === start && limit - base <= 2) {\n hasReph = false;\n } // 2. Decompose and reorder Matras:\n //\n // Each matra and any syllable modifier sign in the cluster are moved to the\n // appropriate position relative to the consonant(s) in the cluster. The\n // shaping engine decomposes two- or three-part matras into their constituent\n // parts before any repositioning. Matra characters are classified by which\n // consonant in a conjunct they have affinity for and are reordered to the\n // following positions:\n //\n // o Before first half form in the syllable\n // o After subjoined consonants\n // o After post-form consonant\n // o After main consonant (for above marks)\n //\n // IMPLEMENTATION NOTES:\n //\n // The normalize() routine has already decomposed matras for us, so we don't\n // need to worry about that.\n // 3. Reorder marks to canonical order:\n //\n // Adjacent nukta and halant or nukta and vedic sign are always repositioned\n // if necessary, so that the nukta is first.\n //\n // IMPLEMENTATION NOTES:\n //\n // We don't need to do this: the normalize() routine already did this for us.\n // Reorder characters\n\n for (var _i6 = start; _i6 < base; _i6++) {\n var _info2 = glyphs[_i6].shaperInfo;\n _info2.position = Math.min(POSITIONS.Pre_C, _info2.position);\n }\n if (base < end) {\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n } // Mark final consonants. A final consonant is one appearing after a matra,\n // like in Khmer.\n\n for (var _i7 = base + 1; _i7 < end; _i7++) {\n if (glyphs[_i7].shaperInfo.category === CATEGORIES.M) {\n for (var j = _i7 + 1; j < end; j++) {\n if (isConsonant(glyphs[j])) {\n glyphs[j].shaperInfo.position = POSITIONS.Final_C;\n break;\n }\n }\n break;\n }\n } // Handle beginning Ra\n\n if (hasReph) {\n glyphs[start].shaperInfo.position = POSITIONS.Ra_To_Become_Reph;\n } // For old-style Indic script tags, move the first post-base Halant after\n // last consonant.\n //\n // Reports suggest that in some scripts Uniscribe does this only if there\n // is *not* a Halant after last consonant already (eg. Kannada), while it\n // does it unconditionally in other scripts (eg. Malayalam). We don't\n // currently know about other scripts, so we single out Malayalam for now.\n //\n // Kannada test case:\n // U+0C9A,U+0CCD,U+0C9A,U+0CCD\n // With some versions of Lohit Kannada.\n // https://bugs.freedesktop.org/show_bug.cgi?id=59118\n //\n // Malayalam test case:\n // U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D\n // With lohit-ttf-20121122/Lohit-Malayalam.ttf\n\n if (plan.isOldSpec) {\n var disallowDoubleHalants = plan.unicodeScript !== 'Malayalam';\n for (var _i8 = base + 1; _i8 < end; _i8++) {\n if (glyphs[_i8].shaperInfo.category === CATEGORIES.H) {\n var _j = void 0;\n for (_j = end - 1; _j > _i8; _j--) {\n if (isConsonant(glyphs[_j]) || disallowDoubleHalants && glyphs[_j].shaperInfo.category === CATEGORIES.H) {\n break;\n }\n }\n if (glyphs[_j].shaperInfo.category !== CATEGORIES.H && _j > _i8) {\n // Move Halant to after last consonant.\n var t = glyphs[_i8];\n glyphs.splice.apply(glyphs, [_i8, 0].concat(glyphs.splice(_i8 + 1, _j - _i8)));\n glyphs[_j] = t;\n }\n break;\n }\n }\n } // Attach misc marks to previous char to move with them.\n\n var lastPos = POSITIONS.Start;\n for (var _i9 = start; _i9 < end; _i9++) {\n var _info3 = glyphs[_i9].shaperInfo;\n if (_info3.category & (JOINER_FLAGS | CATEGORIES.N | CATEGORIES.RS | CATEGORIES.CM | HALANT_OR_COENG_FLAGS & _info3.category)) {\n _info3.position = lastPos;\n if (_info3.category === CATEGORIES.H && _info3.position === POSITIONS.Pre_M) {\n // Uniscribe doesn't move the Halant with Left Matra.\n // TEST: U+092B,U+093F,U+094DE\n // We follow. This is important for the Sinhala\n // U+0DDA split matra since it decomposes to U+0DD9,U+0DCA\n // where U+0DD9 is a left matra and U+0DCA is the virama.\n // We don't want to move the virama with the left matra.\n // TEST: U+0D9A,U+0DDA\n for (var _j2 = _i9; _j2 > start; _j2--) {\n if (glyphs[_j2 - 1].shaperInfo.position !== POSITIONS.Pre_M) {\n _info3.position = glyphs[_j2 - 1].shaperInfo.position;\n break;\n }\n }\n }\n } else if (_info3.position !== POSITIONS.SMVD) {\n lastPos = _info3.position;\n }\n } // For post-base consonants let them own anything before them\n // since the last consonant or matra.\n\n var last = base;\n for (var _i10 = base + 1; _i10 < end; _i10++) {\n if (isConsonant(glyphs[_i10])) {\n for (var _j3 = last + 1; _j3 < _i10; _j3++) {\n if (glyphs[_j3].shaperInfo.position < POSITIONS.SMVD) {\n glyphs[_j3].shaperInfo.position = glyphs[_i10].shaperInfo.position;\n }\n }\n last = _i10;\n } else if (glyphs[_i10].shaperInfo.category === CATEGORIES.M) {\n last = _i10;\n }\n }\n var arr = glyphs.slice(start, end);\n arr.sort(function (a, b) {\n return a.shaperInfo.position - b.shaperInfo.position;\n });\n glyphs.splice.apply(glyphs, [start, arr.length].concat(arr)); // Find base again\n\n for (var _i11 = start; _i11 < end; _i11++) {\n if (glyphs[_i11].shaperInfo.position === POSITIONS.Base_C) {\n base = _i11;\n break;\n }\n } // Setup features now\n // Reph\n\n for (var _i12 = start; _i12 < end && glyphs[_i12].shaperInfo.position === POSITIONS.Ra_To_Become_Reph; _i12++) {\n glyphs[_i12].features.rphf = true;\n } // Pre-base\n\n var blwf = !plan.isOldSpec && indicConfig.blwfMode === 'Pre_And_Post';\n for (var _i13 = start; _i13 < base; _i13++) {\n glyphs[_i13].features.half = true;\n if (blwf) {\n glyphs[_i13].features.blwf = true;\n }\n } // Post-base\n\n for (var _i14 = base + 1; _i14 < end; _i14++) {\n glyphs[_i14].features.abvf = true;\n glyphs[_i14].features.pstf = true;\n glyphs[_i14].features.blwf = true;\n }\n if (plan.isOldSpec && plan.unicodeScript === 'Devanagari') {\n // Old-spec eye-lash Ra needs special handling. From the\n // spec:\n //\n // \"The feature 'below-base form' is applied to consonants\n // having below-base forms and following the base consonant.\n // The exception is vattu, which may appear below half forms\n // as well as below the base glyph. The feature 'below-base\n // form' will be applied to all such occurrences of Ra as well.\"\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+0915\n // with Sanskrit 2003 font.\n //\n // However, note that Ra,Halant,ZWJ is the correct way to\n // request eyelash form of Ra, so we wouldbn't inhibit it\n // in that sequence.\n //\n // Test case: U+0924,U+094D,U+0930,U+094d,U+200D,U+0915\n for (var _i15 = start; _i15 + 1 < base; _i15++) {\n if (glyphs[_i15].shaperInfo.category === CATEGORIES.Ra && glyphs[_i15 + 1].shaperInfo.category === CATEGORIES.H && (_i15 + 1 === base || glyphs[_i15 + 2].shaperInfo.category === CATEGORIES.ZWJ)) {\n glyphs[_i15].features.blwf = true;\n glyphs[_i15 + 1].features.blwf = true;\n }\n }\n }\n var prefLen = 2;\n if (features.pref && base + prefLen < end) {\n // Find a Halant,Ra sequence and mark it for pre-base reordering processing.\n for (var _i16 = base + 1; _i16 + prefLen - 1 < end; _i16++) {\n var _g2 = [glyphs[_i16].copy(), glyphs[_i16 + 1].copy()];\n if (wouldSubstitute(_g2, 'pref')) {\n for (var _j4 = 0; _j4 < prefLen; _j4++) {\n glyphs[_i16++].features.pref = true;\n } // Mark the subsequent stuff with 'cfar'. Used in Khmer.\n // Read the feature spec.\n // This allows distinguishing the following cases with MS Khmer fonts:\n // U+1784,U+17D2,U+179A,U+17D2,U+1782\n // U+1784,U+17D2,U+1782,U+17D2,U+179A\n\n if (features.cfar) {\n for (; _i16 < end; _i16++) {\n glyphs[_i16].features.cfar = true;\n }\n }\n break;\n }\n }\n } // Apply ZWJ/ZWNJ effects\n\n for (var _i17 = start + 1; _i17 < end; _i17++) {\n if (isJoiner(glyphs[_i17])) {\n var nonJoiner = glyphs[_i17].shaperInfo.category === CATEGORIES.ZWNJ;\n var _j5 = _i17;\n do {\n _j5--; // ZWJ/ZWNJ should disable CJCT. They do that by simply\n // being there, since we don't skip them for the CJCT\n // feature (ie. F_MANUAL_ZWJ)\n // A ZWNJ disables HALF.\n\n if (nonJoiner) {\n delete glyphs[_j5].features.half;\n }\n } while (_j5 > start && !isConsonant(glyphs[_j5]));\n }\n }\n }\n}\nfunction finalReordering(font, glyphs, plan) {\n var indicConfig = plan.indicConfig;\n var features = font._layoutEngine.engine.GSUBProcessor.features;\n for (var start = 0, end = nextSyllable(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable(glyphs, start)) {\n // 4. Final reordering:\n //\n // After the localized forms and basic shaping forms GSUB features have been\n // applied (see below), the shaping engine performs some final glyph\n // reordering before applying all the remaining font features to the entire\n // cluster.\n var tryPref = !!features.pref; // Find base again\n\n var base = start;\n for (; base < end; base++) {\n if (glyphs[base].shaperInfo.position >= POSITIONS.Base_C) {\n if (tryPref && base + 1 < end) {\n for (var i = base + 1; i < end; i++) {\n if (glyphs[i].features.pref) {\n if (!(glyphs[i].substituted && glyphs[i].isLigated && !glyphs[i].isMultiplied)) {\n // Ok, this was a 'pref' candidate but didn't form any.\n // Base is around here...\n base = i;\n while (base < end && isHalantOrCoeng(glyphs[base])) {\n base++;\n }\n glyphs[base].shaperInfo.position = POSITIONS.BASE_C;\n tryPref = false;\n }\n break;\n }\n }\n } // For Malayalam, skip over unformed below- (but NOT post-) forms.\n\n if (plan.unicodeScript === 'Malayalam') {\n for (var _i18 = base + 1; _i18 < end; _i18++) {\n while (_i18 < end && isJoiner(glyphs[_i18])) {\n _i18++;\n }\n if (_i18 === end || !isHalantOrCoeng(glyphs[_i18])) {\n break;\n }\n _i18++; // Skip halant.\n\n while (_i18 < end && isJoiner(glyphs[_i18])) {\n _i18++;\n }\n if (_i18 < end && isConsonant(glyphs[_i18]) && glyphs[_i18].shaperInfo.position === POSITIONS.Below_C) {\n base = _i18;\n glyphs[base].shaperInfo.position = POSITIONS.Base_C;\n }\n }\n }\n if (start < base && glyphs[base].shaperInfo.position > POSITIONS.Base_C) {\n base--;\n }\n break;\n }\n }\n if (base === end && start < base && glyphs[base - 1].shaperInfo.category === CATEGORIES.ZWJ) {\n base--;\n }\n if (base < end) {\n while (start < base && glyphs[base].shaperInfo.category & (CATEGORIES.N | HALANT_OR_COENG_FLAGS)) {\n base--;\n }\n } // o Reorder matras:\n //\n // If a pre-base matra character had been reordered before applying basic\n // features, the glyph can be moved closer to the main consonant based on\n // whether half-forms had been formed. Actual position for the matra is\n // defined as “after last standalone halant glyph, after initial matra\n // position and before the main consonant”. If ZWJ or ZWNJ follow this\n // halant, position is moved after it.\n //\n\n if (start + 1 < end && start < base) {\n // Otherwise there can't be any pre-base matra characters.\n // If we lost track of base, alas, position before last thingy.\n var newPos = base === end ? base - 2 : base - 1; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (newPos > start && !(glyphs[newPos].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n newPos--;\n } // If we found no Halant we are done.\n // Otherwise only proceed if the Halant does\n // not belong to the Matra itself!\n\n if (isHalantOrCoeng(glyphs[newPos]) && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (newPos + 1 < end && isJoiner(glyphs[newPos + 1])) {\n newPos++;\n }\n } else {\n newPos = start; // No move.\n }\n }\n if (start < newPos && glyphs[newPos].shaperInfo.position !== POSITIONS.Pre_M) {\n // Now go see if there's actually any matras...\n for (var _i19 = newPos; _i19 > start; _i19--) {\n if (glyphs[_i19 - 1].shaperInfo.position === POSITIONS.Pre_M) {\n var oldPos = _i19 - 1;\n if (oldPos < base && base <= newPos) {\n // Shouldn't actually happen.\n base--;\n }\n var tmp = glyphs[oldPos];\n glyphs.splice.apply(glyphs, [oldPos, 0].concat(glyphs.splice(oldPos + 1, newPos - oldPos)));\n glyphs[newPos] = tmp;\n newPos--;\n }\n }\n }\n } // o Reorder reph:\n //\n // Reph’s original position is always at the beginning of the syllable,\n // (i.e. it is not reordered at the character reordering stage). However,\n // it will be reordered according to the basic-forms shaping results.\n // Possible positions for reph, depending on the script, are; after main,\n // before post-base consonant forms, and after post-base consonant forms.\n // Two cases:\n //\n // - If repha is encoded as a sequence of characters (Ra,H or Ra,H,ZWJ), then\n // we should only move it if the sequence ligated to the repha form.\n //\n // - If repha is encoded separately and in the logical position, we should only\n // move it if it did NOT ligate. If it ligated, it's probably the font trying\n // to make it work without the reordering.\n\n if (start + 1 < end && glyphs[start].shaperInfo.position === POSITIONS.Ra_To_Become_Reph && glyphs[start].shaperInfo.category === CATEGORIES.Repha !== (glyphs[start].isLigated && !glyphs[start].isMultiplied)) {\n var newRephPos = void 0;\n var rephPos = indicConfig.rephPos;\n var found = false; // 1. If reph should be positioned after post-base consonant forms,\n // proceed to step 5.\n\n if (rephPos !== POSITIONS.After_Post) {\n // 2. If the reph repositioning class is not after post-base: target\n // position is after the first explicit halant glyph between the\n // first post-reph consonant and last main consonant. If ZWJ or ZWNJ\n // are following this halant, position is moved after it. If such\n // position is found, this is the target position. Otherwise,\n // proceed to the next step.\n //\n // Note: in old-implementation fonts, where classifications were\n // fixed in shaping engine, there was no case where reph position\n // will be found on this step.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n found = true;\n } // 3. If reph should be repositioned after the main consonant: find the\n // first consonant not ligated with main, or find the first\n // consonant that is not a potential pre-base reordering Ra.\n\n if (!found && rephPos === POSITIONS.After_Main) {\n newRephPos = base;\n while (newRephPos + 1 < end && glyphs[newRephPos + 1].shaperInfo.position <= POSITIONS.After_Main) {\n newRephPos++;\n }\n found = newRephPos < end;\n } // 4. If reph should be positioned before post-base consonant, find\n // first post-base classified consonant not ligated with main. If no\n // consonant is found, the target position should be before the\n // first matra, syllable modifier sign or vedic sign.\n //\n // This is our take on what step 4 is trying to say (and failing, BADLY).\n\n if (!found && rephPos === POSITIONS.After_Sub) {\n newRephPos = base;\n while (newRephPos + 1 < end && !(glyphs[newRephPos + 1].shaperInfo.position & (POSITIONS.Post_C | POSITIONS.After_Post | POSITIONS.SMVD))) {\n newRephPos++;\n }\n found = newRephPos < end;\n }\n } // 5. If no consonant is found in steps 3 or 4, move reph to a position\n // immediately before the first post-base matra, syllable modifier\n // sign or vedic sign that has a reordering class after the intended\n // reph position. For example, if the reordering position for reph\n // is post-main, it will skip above-base matras that also have a\n // post-main position.\n\n if (!found) {\n // Copied from step 2.\n newRephPos = start + 1;\n while (newRephPos < base && !isHalantOrCoeng(glyphs[newRephPos])) {\n newRephPos++;\n }\n if (newRephPos < base && isHalantOrCoeng(glyphs[newRephPos])) {\n // ->If ZWJ or ZWNJ are following this halant, position is moved after it.\n if (newRephPos + 1 < base && isJoiner(glyphs[newRephPos + 1])) {\n newRephPos++;\n }\n found = true;\n }\n } // 6. Otherwise, reorder reph to the end of the syllable.\n\n if (!found) {\n newRephPos = end - 1;\n while (newRephPos > start && glyphs[newRephPos].shaperInfo.position === POSITIONS.SMVD) {\n newRephPos--;\n } // If the Reph is to be ending up after a Matra,Halant sequence,\n // position it before that Halant so it can interact with the Matra.\n // However, if it's a plain Consonant,Halant we shouldn't do that.\n // Uniscribe doesn't do this.\n // TEST: U+0930,U+094D,U+0915,U+094B,U+094D\n\n if (isHalantOrCoeng(glyphs[newRephPos])) {\n for (var _i20 = base + 1; _i20 < newRephPos; _i20++) {\n if (glyphs[_i20].shaperInfo.category === CATEGORIES.M) {\n newRephPos--;\n }\n }\n }\n }\n var reph = glyphs[start];\n glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, newRephPos - start)));\n glyphs[newRephPos] = reph;\n if (start < base && base <= newRephPos) {\n base--;\n }\n } // o Reorder pre-base reordering consonants:\n //\n // If a pre-base reordering consonant is found, reorder it according to\n // the following rules:\n\n if (tryPref && base + 1 < end) {\n for (var _i21 = base + 1; _i21 < end; _i21++) {\n if (glyphs[_i21].features.pref) {\n // 1. Only reorder a glyph produced by substitution during application\n // of the feature. (Note that a font may shape a Ra consonant with\n // the feature generally but block it in certain contexts.)\n // Note: We just check that something got substituted. We don't check that\n // the feature actually did it...\n //\n // Reorder pref only if it ligated.\n if (glyphs[_i21].isLigated && !glyphs[_i21].isMultiplied) {\n // 2. Try to find a target position the same way as for pre-base matra.\n // If it is found, reorder pre-base consonant glyph.\n //\n // 3. If position is not found, reorder immediately before main\n // consonant.\n var _newPos = base; // Malayalam / Tamil do not have \"half\" forms or explicit virama forms.\n // The glyphs formed by 'half' are Chillus or ligated explicit viramas.\n // We want to position matra after them.\n\n if (plan.unicodeScript !== 'Malayalam' && plan.unicodeScript !== 'Tamil') {\n while (_newPos > start && !(glyphs[_newPos - 1].shaperInfo.category & (CATEGORIES.M | HALANT_OR_COENG_FLAGS))) {\n _newPos--;\n } // In Khmer coeng model, a H,Ra can go *after* matras. If it goes after a\n // split matra, it should be reordered to *before* the left part of such matra.\n\n if (_newPos > start && glyphs[_newPos - 1].shaperInfo.category === CATEGORIES.M) {\n var _oldPos2 = _i21;\n for (var j = base + 1; j < _oldPos2; j++) {\n if (glyphs[j].shaperInfo.category === CATEGORIES.M) {\n _newPos--;\n break;\n }\n }\n }\n }\n if (_newPos > start && isHalantOrCoeng(glyphs[_newPos - 1])) {\n // -> If ZWJ or ZWNJ follow this halant, position is moved after it.\n if (_newPos < end && isJoiner(glyphs[_newPos])) {\n _newPos++;\n }\n }\n var _oldPos = _i21;\n var _tmp = glyphs[_oldPos];\n glyphs.splice.apply(glyphs, [_newPos + 1, 0].concat(glyphs.splice(_newPos, _oldPos - _newPos)));\n glyphs[_newPos] = _tmp;\n if (_newPos <= base && base < _oldPos) {\n base++;\n }\n }\n break;\n }\n }\n } // Apply 'init' to the Left Matra if it's a word start.\n\n if (glyphs[start].shaperInfo.position === POSITIONS.Pre_M && (!start || !/Cf|Mn/.test(unicode.getCategory(glyphs[start - 1].codePoints[0])))) {\n glyphs[start].features.init = true;\n }\n }\n}\nfunction nextSyllable(glyphs, start) {\n if (start >= glyphs.length) return start;\n var syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n return start;\n}\nvar categories$1 = useData.categories,\n decompositions$2 = useData.decompositions;\nvar trie$2 = new UnicodeTrie(Buffer(\"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\",\"base64\"));\nvar stateMachine$1 = new StateMachine(useData);\n/**\r\n * This shaper is an implementation of the Universal Shaping Engine, which\r\n * uses Unicode data to shape a number of scripts without a dedicated shaping engine.\r\n * See https://www.microsoft.com/typography/OpenTypeDev/USE/intro.htm.\r\n */\nvar UniversalShaper = /*#__PURE__*/function (_DefaultShaper4) {\n _inheritsLoose(UniversalShaper, _DefaultShaper4);\n function UniversalShaper() {\n return _DefaultShaper4.apply(this, arguments) || this;\n }\n UniversalShaper.planFeatures = function planFeatures(plan) {\n plan.addStage(setupSyllables$1); // Default glyph pre-processing group\n\n plan.addStage(['locl', 'ccmp', 'nukt', 'akhn']); // Reordering group\n\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['rphf'], false);\n plan.addStage(recordRphf);\n plan.addStage(clearSubstitutionFlags);\n plan.addStage(['pref']);\n plan.addStage(recordPref); // Orthographic unit shaping group\n\n plan.addStage(['rkrf', 'abvf', 'blwf', 'half', 'pstf', 'vatu', 'cjct']);\n plan.addStage(reorder); // Topographical features\n // Scripts that need this are handled by the Arabic shaper, not implemented here for now.\n // plan.addStage(['isol', 'init', 'medi', 'fina', 'med2', 'fin2', 'fin3'], false);\n // Standard topographic presentation and positional feature application\n\n plan.addStage(['abvs', 'blws', 'pres', 'psts', 'dist', 'abvm', 'blwm']);\n };\n UniversalShaper.assignFeatures = function assignFeatures(plan, glyphs) {\n var _loop = function _loop(i) {\n var codepoint = glyphs[i].codePoints[0];\n if (decompositions$2[codepoint]) {\n var decomposed = decompositions$2[codepoint].map(function (c) {\n var g = plan.font.glyphForCodePoint(c);\n return new GlyphInfo(plan.font, g.id, [c], glyphs[i].features);\n });\n glyphs.splice.apply(glyphs, [i, 1].concat(decomposed));\n }\n };\n\n // Decompose split vowels\n // TODO: do this in a more general unicode normalizer\n for (var i = glyphs.length - 1; i >= 0; i--) {\n _loop(i);\n }\n };\n return UniversalShaper;\n}(DefaultShaper);\n_defineProperty(UniversalShaper, \"zeroMarkWidths\", 'BEFORE_GPOS');\nfunction useCategory(glyph) {\n return trie$2.get(glyph.codePoints[0]);\n}\nvar USEInfo = function USEInfo(category, syllableType, syllable) {\n this.category = category;\n this.syllableType = syllableType;\n this.syllable = syllable;\n};\nfunction setupSyllables$1(font, glyphs) {\n var syllable = 0;\n for (var _iterator55 = _createForOfIteratorHelperLoose(stateMachine$1.match(glyphs.map(useCategory))), _step55; !(_step55 = _iterator55()).done;) {\n var _step55$value = _step55.value,\n start = _step55$value[0],\n end = _step55$value[1],\n tags = _step55$value[2];\n ++syllable; // Create shaper info\n\n for (var i = start; i <= end; i++) {\n glyphs[i].shaperInfo = new USEInfo(categories$1[useCategory(glyphs[i])], tags[0], syllable);\n } // Assign rphf feature\n\n var limit = glyphs[start].shaperInfo.category === 'R' ? 1 : Math.min(3, end - start);\n for (var _i = start; _i < start + limit; _i++) {\n glyphs[_i].features.rphf = true;\n }\n }\n}\nfunction clearSubstitutionFlags(font, glyphs) {\n for (var _iterator56 = _createForOfIteratorHelperLoose(glyphs), _step56; !(_step56 = _iterator56()).done;) {\n var glyph = _step56.value;\n glyph.substituted = false;\n }\n}\nfunction recordRphf(font, glyphs) {\n for (var _iterator57 = _createForOfIteratorHelperLoose(glyphs), _step57; !(_step57 = _iterator57()).done;) {\n var glyph = _step57.value;\n if (glyph.substituted && glyph.features.rphf) {\n // Mark a substituted repha.\n glyph.shaperInfo.category = 'R';\n }\n }\n}\nfunction recordPref(font, glyphs) {\n for (var _iterator58 = _createForOfIteratorHelperLoose(glyphs), _step58; !(_step58 = _iterator58()).done;) {\n var glyph = _step58.value;\n if (glyph.substituted) {\n // Mark a substituted pref as VPre, as they behave the same way.\n glyph.shaperInfo.category = 'VPre';\n }\n }\n}\nfunction reorder(font, glyphs) {\n var dottedCircle = font.glyphForCodePoint(0x25cc).id;\n for (var start = 0, end = nextSyllable$1(glyphs, 0); start < glyphs.length; start = end, end = nextSyllable$1(glyphs, start)) {\n var i = void 0,\n j = void 0;\n var info = glyphs[start].shaperInfo;\n var type = info.syllableType; // Only a few syllable types need reordering.\n\n if (type !== 'virama_terminated_cluster' && type !== 'standard_cluster' && type !== 'broken_cluster') {\n continue;\n } // Insert a dotted circle glyph in broken clusters.\n\n if (type === 'broken_cluster' && dottedCircle) {\n var g = new GlyphInfo(font, dottedCircle, [0x25cc]);\n g.shaperInfo = info; // Insert after possible Repha.\n\n for (i = start; i < end && glyphs[i].shaperInfo.category === 'R'; i++) {}\n glyphs.splice(++i, 0, g);\n end++;\n } // Move things forward.\n\n if (info.category === 'R' && end - start > 1) {\n // Got a repha. Reorder it to after first base, before first halant.\n for (i = start + 1; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move before it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n if (isHalant(glyphs[i])) {\n i--;\n }\n glyphs.splice.apply(glyphs, [start, 0].concat(glyphs.splice(start + 1, i - start), [glyphs[i]]));\n break;\n }\n }\n } // Move things back.\n\n for (i = start, j = end; i < end; i++) {\n info = glyphs[i].shaperInfo;\n if (isBase(info) || isHalant(glyphs[i])) {\n // If we hit a halant, move after it; otherwise it's a base: move to it's\n // place, and shift things in between backward.\n j = isHalant(glyphs[i]) ? i + 1 : i;\n } else if ((info.category === 'VPre' || info.category === 'VMPre') && j < i) {\n glyphs.splice.apply(glyphs, [j, 1, glyphs[i]].concat(glyphs.splice(j, i - j)));\n }\n }\n }\n}\nfunction nextSyllable$1(glyphs, start) {\n if (start >= glyphs.length) return start;\n var syllable = glyphs[start].shaperInfo.syllable;\n while (++start < glyphs.length && glyphs[start].shaperInfo.syllable === syllable) {}\n return start;\n}\nfunction isHalant(glyph) {\n return glyph.shaperInfo.category === 'H' && !glyph.isLigated;\n}\nfunction isBase(info) {\n return info.category === 'B' || info.category === 'GB';\n}\nvar SHAPERS = {\n arab: ArabicShaper,\n // Arabic\n mong: ArabicShaper,\n // Mongolian\n syrc: ArabicShaper,\n // Syriac\n 'nko ': ArabicShaper,\n // N'Ko\n phag: ArabicShaper,\n // Phags Pa\n mand: ArabicShaper,\n // Mandaic\n mani: ArabicShaper,\n // Manichaean\n phlp: ArabicShaper,\n // Psalter Pahlavi\n hang: HangulShaper,\n // Hangul\n bng2: IndicShaper,\n // Bengali\n beng: IndicShaper,\n // Bengali\n dev2: IndicShaper,\n // Devanagari\n deva: IndicShaper,\n // Devanagari\n gjr2: IndicShaper,\n // Gujarati\n gujr: IndicShaper,\n // Gujarati\n guru: IndicShaper,\n // Gurmukhi\n gur2: IndicShaper,\n // Gurmukhi\n knda: IndicShaper,\n // Kannada\n knd2: IndicShaper,\n // Kannada\n mlm2: IndicShaper,\n // Malayalam\n mlym: IndicShaper,\n // Malayalam\n ory2: IndicShaper,\n // Oriya\n orya: IndicShaper,\n // Oriya\n taml: IndicShaper,\n // Tamil\n tml2: IndicShaper,\n // Tamil\n telu: IndicShaper,\n // Telugu\n tel2: IndicShaper,\n // Telugu\n khmr: IndicShaper,\n // Khmer\n bali: UniversalShaper,\n // Balinese\n batk: UniversalShaper,\n // Batak\n brah: UniversalShaper,\n // Brahmi\n bugi: UniversalShaper,\n // Buginese\n buhd: UniversalShaper,\n // Buhid\n cakm: UniversalShaper,\n // Chakma\n cham: UniversalShaper,\n // Cham\n dupl: UniversalShaper,\n // Duployan\n egyp: UniversalShaper,\n // Egyptian Hieroglyphs\n gran: UniversalShaper,\n // Grantha\n hano: UniversalShaper,\n // Hanunoo\n java: UniversalShaper,\n // Javanese\n kthi: UniversalShaper,\n // Kaithi\n kali: UniversalShaper,\n // Kayah Li\n khar: UniversalShaper,\n // Kharoshthi\n khoj: UniversalShaper,\n // Khojki\n sind: UniversalShaper,\n // Khudawadi\n lepc: UniversalShaper,\n // Lepcha\n limb: UniversalShaper,\n // Limbu\n mahj: UniversalShaper,\n // Mahajani\n // mand: UniversalShaper, // Mandaic\n // mani: UniversalShaper, // Manichaean\n mtei: UniversalShaper,\n // Meitei Mayek\n modi: UniversalShaper,\n // Modi\n // mong: UniversalShaper, // Mongolian\n // 'nko ': UniversalShaper, // N’Ko\n hmng: UniversalShaper,\n // Pahawh Hmong\n // phag: UniversalShaper, // Phags-pa\n // phlp: UniversalShaper, // Psalter Pahlavi\n rjng: UniversalShaper,\n // Rejang\n saur: UniversalShaper,\n // Saurashtra\n shrd: UniversalShaper,\n // Sharada\n sidd: UniversalShaper,\n // Siddham\n sinh: UniversalShaper,\n // Sinhala\n sund: UniversalShaper,\n // Sundanese\n sylo: UniversalShaper,\n // Syloti Nagri\n tglg: UniversalShaper,\n // Tagalog\n tagb: UniversalShaper,\n // Tagbanwa\n tale: UniversalShaper,\n // Tai Le\n lana: UniversalShaper,\n // Tai Tham\n tavt: UniversalShaper,\n // Tai Viet\n takr: UniversalShaper,\n // Takri\n tibt: UniversalShaper,\n // Tibetan\n tfng: UniversalShaper,\n // Tifinagh\n tirh: UniversalShaper,\n // Tirhuta\n latn: DefaultShaper,\n // Latin\n DFLT: DefaultShaper // Default\n};\nfunction choose(script) {\n if (!Array.isArray(script)) {\n script = [script];\n }\n for (var _iterator59 = _createForOfIteratorHelperLoose(script), _step59; !(_step59 = _iterator59()).done;) {\n var s = _step59.value;\n var shaper = SHAPERS[s];\n if (shaper) {\n return shaper;\n }\n }\n return DefaultShaper;\n}\nvar GSUBProcessor = /*#__PURE__*/function (_OTProcessor) {\n _inheritsLoose(GSUBProcessor, _OTProcessor);\n function GSUBProcessor() {\n return _OTProcessor.apply(this, arguments) || this;\n }\n var _proto27 = GSUBProcessor.prototype;\n _proto27.applyLookup = function applyLookup(lookupType, table) {\n var _this7 = this;\n switch (lookupType) {\n case 1:\n {\n // Single Substitution\n var index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n var glyph = this.glyphIterator.cur;\n switch (table.version) {\n case 1:\n glyph.id = glyph.id + table.deltaGlyphID & 0xffff;\n break;\n case 2:\n glyph.id = table.substitute.get(index);\n break;\n }\n return true;\n }\n case 2:\n {\n // Multiple Substitution\n var _index = this.coverageIndex(table.coverage);\n if (_index !== -1) {\n var _this$glyphs2;\n var sequence = table.sequences.get(_index);\n if (sequence.length === 0) {\n // If the sequence length is zero, delete the glyph.\n // The OpenType spec disallows this, but seems like Harfbuzz and Uniscribe allow it.\n this.glyphs.splice(this.glyphIterator.index, 1);\n return true;\n }\n this.glyphIterator.cur.id = sequence[0];\n this.glyphIterator.cur.ligatureComponent = 0;\n var features = this.glyphIterator.cur.features;\n var curGlyph = this.glyphIterator.cur;\n var replacement = sequence.slice(1).map(function (gid, i) {\n var glyph = new GlyphInfo(_this7.font, gid, undefined, features);\n glyph.shaperInfo = curGlyph.shaperInfo;\n glyph.isLigated = curGlyph.isLigated;\n glyph.ligatureComponent = i + 1;\n glyph.substituted = true;\n glyph.isMultiplied = true;\n return glyph;\n });\n (_this$glyphs2 = this.glyphs).splice.apply(_this$glyphs2, [this.glyphIterator.index + 1, 0].concat(replacement));\n return true;\n }\n return false;\n }\n case 3:\n {\n // Alternate Substitution\n var _index2 = this.coverageIndex(table.coverage);\n if (_index2 !== -1) {\n var USER_INDEX = 0; // TODO\n\n this.glyphIterator.cur.id = table.alternateSet.get(_index2)[USER_INDEX];\n return true;\n }\n return false;\n }\n case 4:\n {\n // Ligature Substitution\n var _index3 = this.coverageIndex(table.coverage);\n if (_index3 === -1) {\n return false;\n }\n for (var _iterator60 = _createForOfIteratorHelperLoose(table.ligatureSets.get(_index3)), _step60; !(_step60 = _iterator60()).done;) {\n var ligature = _step60.value;\n var matched = this.sequenceMatchIndices(1, ligature.components);\n if (!matched) {\n continue;\n }\n var _curGlyph = this.glyphIterator.cur; // Concatenate all of the characters the new ligature will represent\n\n var characters = _curGlyph.codePoints.slice();\n for (var _iterator61 = _createForOfIteratorHelperLoose(matched), _step61; !(_step61 = _iterator61()).done;) {\n var _characters;\n var _index4 = _step61.value;\n (_characters = characters).push.apply(_characters, this.glyphs[_index4].codePoints);\n } // Create the replacement ligature glyph\n\n var ligatureGlyph = new GlyphInfo(this.font, ligature.glyph, characters, _curGlyph.features);\n ligatureGlyph.shaperInfo = _curGlyph.shaperInfo;\n ligatureGlyph.isLigated = true;\n ligatureGlyph.substituted = true; // From Harfbuzz:\n // - If it *is* a mark ligature, we don't allocate a new ligature id, and leave\n // the ligature to keep its old ligature id. This will allow it to attach to\n // a base ligature in GPOS. Eg. if the sequence is: LAM,LAM,SHADDA,FATHA,HEH,\n // and LAM,LAM,HEH for a ligature, they will leave SHADDA and FATHA with a\n // ligature id and component value of 2. Then if SHADDA,FATHA form a ligature\n // later, we don't want them to lose their ligature id/component, otherwise\n // GPOS will fail to correctly position the mark ligature on top of the\n // LAM,LAM,HEH ligature. See https://bugzilla.gnome.org/show_bug.cgi?id=676343\n //\n // - If a ligature is formed of components that some of which are also ligatures\n // themselves, and those ligature components had marks attached to *their*\n // components, we have to attach the marks to the new ligature component\n // positions! Now *that*'s tricky! And these marks may be following the\n // last component of the whole sequence, so we should loop forward looking\n // for them and update them.\n //\n // Eg. the sequence is LAM,LAM,SHADDA,FATHA,HEH, and the font first forms a\n // 'calt' ligature of LAM,HEH, leaving the SHADDA and FATHA with a ligature\n // id and component == 1. Now, during 'liga', the LAM and the LAM-HEH ligature\n // form a LAM-LAM-HEH ligature. We need to reassign the SHADDA and FATHA to\n // the new ligature with a component value of 2.\n //\n // This in fact happened to a font... See https://bugzilla.gnome.org/show_bug.cgi?id=437633\n\n var isMarkLigature = _curGlyph.isMark;\n for (var i = 0; i < matched.length && isMarkLigature; i++) {\n isMarkLigature = this.glyphs[matched[i]].isMark;\n }\n ligatureGlyph.ligatureID = isMarkLigature ? null : this.ligatureID++;\n var lastLigID = _curGlyph.ligatureID;\n var lastNumComps = _curGlyph.codePoints.length;\n var curComps = lastNumComps;\n var idx = this.glyphIterator.index + 1; // Set ligatureID and ligatureComponent on glyphs that were skipped in the matched sequence.\n // This allows GPOS to attach marks to the correct ligature components.\n\n for (var _iterator62 = _createForOfIteratorHelperLoose(matched), _step62; !(_step62 = _iterator62()).done;) {\n var matchIndex = _step62.value;\n // Don't assign new ligature components for mark ligatures (see above)\n if (isMarkLigature) {\n idx = matchIndex;\n } else {\n while (idx < matchIndex) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[idx].ligatureComponent || 1, lastNumComps);\n this.glyphs[idx].ligatureID = ligatureGlyph.ligatureID;\n this.glyphs[idx].ligatureComponent = ligatureComponent;\n idx++;\n }\n }\n lastLigID = this.glyphs[idx].ligatureID;\n lastNumComps = this.glyphs[idx].codePoints.length;\n curComps += lastNumComps;\n idx++; // skip base glyph\n } // Adjust ligature components for any marks following\n\n if (lastLigID && !isMarkLigature) {\n for (var _i = idx; _i < this.glyphs.length; _i++) {\n if (this.glyphs[_i].ligatureID === lastLigID) {\n var ligatureComponent = curComps - lastNumComps + Math.min(this.glyphs[_i].ligatureComponent || 1, lastNumComps);\n this.glyphs[_i].ligatureComponent = ligatureComponent;\n } else {\n break;\n }\n }\n } // Delete the matched glyphs, and replace the current glyph with the ligature glyph\n\n for (var _i2 = matched.length - 1; _i2 >= 0; _i2--) {\n this.glyphs.splice(matched[_i2], 1);\n }\n this.glyphs[this.glyphIterator.index] = ligatureGlyph;\n return true;\n }\n return false;\n }\n case 5:\n // Contextual Substitution\n return this.applyContext(table);\n case 6:\n // Chaining Contextual Substitution\n return this.applyChainingContext(table);\n case 7:\n // Extension Substitution\n return this.applyLookup(table.lookupType, table.extension);\n default:\n throw new Error(\"GSUB lookupType \".concat(lookupType, \" is not supported\"));\n }\n };\n return GSUBProcessor;\n}(OTProcessor);\nvar GPOSProcessor = /*#__PURE__*/function (_OTProcessor2) {\n _inheritsLoose(GPOSProcessor, _OTProcessor2);\n function GPOSProcessor() {\n return _OTProcessor2.apply(this, arguments) || this;\n }\n var _proto28 = GPOSProcessor.prototype;\n _proto28.applyPositionValue = function applyPositionValue(sequenceIndex, value) {\n var position = this.positions[this.glyphIterator.peekIndex(sequenceIndex)];\n if (value.xAdvance != null) {\n position.xAdvance += value.xAdvance;\n }\n if (value.yAdvance != null) {\n position.yAdvance += value.yAdvance;\n }\n if (value.xPlacement != null) {\n position.xOffset += value.xPlacement;\n }\n if (value.yPlacement != null) {\n position.yOffset += value.yPlacement;\n } // Adjustments for font variations\n\n var variationProcessor = this.font._variationProcessor;\n var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (value.xPlaDevice) {\n position.xOffset += variationProcessor.getDelta(variationStore, value.xPlaDevice.a, value.xPlaDevice.b);\n }\n if (value.yPlaDevice) {\n position.yOffset += variationProcessor.getDelta(variationStore, value.yPlaDevice.a, value.yPlaDevice.b);\n }\n if (value.xAdvDevice) {\n position.xAdvance += variationProcessor.getDelta(variationStore, value.xAdvDevice.a, value.xAdvDevice.b);\n }\n if (value.yAdvDevice) {\n position.yAdvance += variationProcessor.getDelta(variationStore, value.yAdvDevice.a, value.yAdvDevice.b);\n }\n } // TODO: device tables\n };\n _proto28.applyLookup = function applyLookup(lookupType, table) {\n switch (lookupType) {\n case 1:\n {\n // Single positioning value\n var index = this.coverageIndex(table.coverage);\n if (index === -1) {\n return false;\n }\n switch (table.version) {\n case 1:\n this.applyPositionValue(0, table.value);\n break;\n case 2:\n this.applyPositionValue(0, table.values.get(index));\n break;\n }\n return true;\n }\n case 2:\n {\n // Pair Adjustment Positioning\n var nextGlyph = this.glyphIterator.peek();\n if (!nextGlyph) {\n return false;\n }\n var _index = this.coverageIndex(table.coverage);\n if (_index === -1) {\n return false;\n }\n switch (table.version) {\n case 1:\n // Adjustments for glyph pairs\n var set = table.pairSets.get(_index);\n for (var _iterator63 = _createForOfIteratorHelperLoose(set), _step63; !(_step63 = _iterator63()).done;) {\n var _pair = _step63.value;\n if (_pair.secondGlyph === nextGlyph.id) {\n this.applyPositionValue(0, _pair.value1);\n this.applyPositionValue(1, _pair.value2);\n return true;\n }\n }\n return false;\n case 2:\n // Class pair adjustment\n var class1 = this.getClassID(this.glyphIterator.cur.id, table.classDef1);\n var class2 = this.getClassID(nextGlyph.id, table.classDef2);\n if (class1 === -1 || class2 === -1) {\n return false;\n }\n var pair = table.classRecords.get(class1).get(class2);\n this.applyPositionValue(0, pair.value1);\n this.applyPositionValue(1, pair.value2);\n return true;\n }\n }\n case 3:\n {\n // Cursive Attachment Positioning\n var nextIndex = this.glyphIterator.peekIndex();\n var _nextGlyph = this.glyphs[nextIndex];\n if (!_nextGlyph) {\n return false;\n }\n var curRecord = table.entryExitRecords[this.coverageIndex(table.coverage)];\n if (!curRecord || !curRecord.exitAnchor) {\n return false;\n }\n var nextRecord = table.entryExitRecords[this.coverageIndex(table.coverage, _nextGlyph.id)];\n if (!nextRecord || !nextRecord.entryAnchor) {\n return false;\n }\n var entry = this.getAnchor(nextRecord.entryAnchor);\n var exit = this.getAnchor(curRecord.exitAnchor);\n var cur = this.positions[this.glyphIterator.index];\n var next = this.positions[nextIndex];\n switch (this.direction) {\n case 'ltr':\n cur.xAdvance = exit.x + cur.xOffset;\n var d = entry.x + next.xOffset;\n next.xAdvance -= d;\n next.xOffset -= d;\n break;\n case 'rtl':\n d = exit.x + cur.xOffset;\n cur.xAdvance -= d;\n cur.xOffset -= d;\n next.xAdvance = entry.x + next.xOffset;\n break;\n }\n if (this.glyphIterator.flags.rightToLeft) {\n this.glyphIterator.cur.cursiveAttachment = nextIndex;\n cur.yOffset = entry.y - exit.y;\n } else {\n _nextGlyph.cursiveAttachment = this.glyphIterator.index;\n cur.yOffset = exit.y - entry.y;\n }\n return true;\n }\n case 4:\n {\n // Mark to base positioning\n var markIndex = this.coverageIndex(table.markCoverage);\n if (markIndex === -1) {\n return false;\n } // search backward for a base glyph\n\n var baseGlyphIndex = this.glyphIterator.index;\n while (--baseGlyphIndex >= 0 && (this.glyphs[baseGlyphIndex].isMark || this.glyphs[baseGlyphIndex].ligatureComponent > 0)) {}\n if (baseGlyphIndex < 0) {\n return false;\n }\n var baseIndex = this.coverageIndex(table.baseCoverage, this.glyphs[baseGlyphIndex].id);\n if (baseIndex === -1) {\n return false;\n }\n var markRecord = table.markArray[markIndex];\n var baseAnchor = table.baseArray[baseIndex][markRecord.class];\n this.applyAnchor(markRecord, baseAnchor, baseGlyphIndex);\n return true;\n }\n case 5:\n {\n // Mark to ligature positioning\n var _markIndex = this.coverageIndex(table.markCoverage);\n if (_markIndex === -1) {\n return false;\n } // search backward for a base glyph\n\n var _baseGlyphIndex = this.glyphIterator.index;\n while (--_baseGlyphIndex >= 0 && this.glyphs[_baseGlyphIndex].isMark) {}\n if (_baseGlyphIndex < 0) {\n return false;\n }\n var ligIndex = this.coverageIndex(table.ligatureCoverage, this.glyphs[_baseGlyphIndex].id);\n if (ligIndex === -1) {\n return false;\n }\n var ligAttach = table.ligatureArray[ligIndex];\n var markGlyph = this.glyphIterator.cur;\n var ligGlyph = this.glyphs[_baseGlyphIndex];\n var compIndex = ligGlyph.ligatureID && ligGlyph.ligatureID === markGlyph.ligatureID && markGlyph.ligatureComponent > 0 ? Math.min(markGlyph.ligatureComponent, ligGlyph.codePoints.length) - 1 : ligGlyph.codePoints.length - 1;\n var _markRecord = table.markArray[_markIndex];\n var _baseAnchor = ligAttach[compIndex][_markRecord.class];\n this.applyAnchor(_markRecord, _baseAnchor, _baseGlyphIndex);\n return true;\n }\n case 6:\n {\n // Mark to mark positioning\n var mark1Index = this.coverageIndex(table.mark1Coverage);\n if (mark1Index === -1) {\n return false;\n } // get the previous mark to attach to\n\n var prevIndex = this.glyphIterator.peekIndex(-1);\n var prev = this.glyphs[prevIndex];\n if (!prev || !prev.isMark) {\n return false;\n }\n var _cur = this.glyphIterator.cur; // The following logic was borrowed from Harfbuzz\n\n var good = false;\n if (_cur.ligatureID === prev.ligatureID) {\n if (!_cur.ligatureID) {\n // Marks belonging to the same base\n good = true;\n } else if (_cur.ligatureComponent === prev.ligatureComponent) {\n // Marks belonging to the same ligature component\n good = true;\n }\n } else {\n // If ligature ids don't match, it may be the case that one of the marks\n // itself is a ligature, in which case match.\n if (_cur.ligatureID && !_cur.ligatureComponent || prev.ligatureID && !prev.ligatureComponent) {\n good = true;\n }\n }\n if (!good) {\n return false;\n }\n var mark2Index = this.coverageIndex(table.mark2Coverage, prev.id);\n if (mark2Index === -1) {\n return false;\n }\n var _markRecord2 = table.mark1Array[mark1Index];\n var _baseAnchor2 = table.mark2Array[mark2Index][_markRecord2.class];\n this.applyAnchor(_markRecord2, _baseAnchor2, prevIndex);\n return true;\n }\n case 7:\n // Contextual positioning\n return this.applyContext(table);\n case 8:\n // Chaining contextual positioning\n return this.applyChainingContext(table);\n case 9:\n // Extension positioning\n return this.applyLookup(table.lookupType, table.extension);\n default:\n throw new Error(\"Unsupported GPOS table: \".concat(lookupType));\n }\n };\n _proto28.applyAnchor = function applyAnchor(markRecord, baseAnchor, baseGlyphIndex) {\n var baseCoords = this.getAnchor(baseAnchor);\n var markCoords = this.getAnchor(markRecord.markAnchor);\n var basePos = this.positions[baseGlyphIndex];\n var markPos = this.positions[this.glyphIterator.index];\n markPos.xOffset = baseCoords.x - markCoords.x;\n markPos.yOffset = baseCoords.y - markCoords.y;\n this.glyphIterator.cur.markAttachment = baseGlyphIndex;\n };\n _proto28.getAnchor = function getAnchor(anchor) {\n // TODO: contour point, device tables\n var x = anchor.xCoordinate;\n var y = anchor.yCoordinate; // Adjustments for font variations\n\n var variationProcessor = this.font._variationProcessor;\n var variationStore = this.font.GDEF && this.font.GDEF.itemVariationStore;\n if (variationProcessor && variationStore) {\n if (anchor.xDeviceTable) {\n x += variationProcessor.getDelta(variationStore, anchor.xDeviceTable.a, anchor.xDeviceTable.b);\n }\n if (anchor.yDeviceTable) {\n y += variationProcessor.getDelta(variationStore, anchor.yDeviceTable.a, anchor.yDeviceTable.b);\n }\n }\n return {\n x: x,\n y: y\n };\n };\n _proto28.applyFeatures = function applyFeatures(userFeatures, glyphs, advances) {\n _OTProcessor2.prototype.applyFeatures.call(this, userFeatures, glyphs, advances);\n for (var i = 0; i < this.glyphs.length; i++) {\n this.fixCursiveAttachment(i);\n }\n this.fixMarkAttachment();\n };\n _proto28.fixCursiveAttachment = function fixCursiveAttachment(i) {\n var glyph = this.glyphs[i];\n if (glyph.cursiveAttachment != null) {\n var j = glyph.cursiveAttachment;\n glyph.cursiveAttachment = null;\n this.fixCursiveAttachment(j);\n this.positions[i].yOffset += this.positions[j].yOffset;\n }\n };\n _proto28.fixMarkAttachment = function fixMarkAttachment() {\n for (var i = 0; i < this.glyphs.length; i++) {\n var glyph = this.glyphs[i];\n if (glyph.markAttachment != null) {\n var j = glyph.markAttachment;\n this.positions[i].xOffset += this.positions[j].xOffset;\n this.positions[i].yOffset += this.positions[j].yOffset;\n if (this.direction === 'ltr') {\n for (var k = j; k < i; k++) {\n this.positions[i].xOffset -= this.positions[k].xAdvance;\n this.positions[i].yOffset -= this.positions[k].yAdvance;\n }\n } else {\n for (var _k = j + 1; _k < i + 1; _k++) {\n this.positions[i].xOffset += this.positions[_k].xAdvance;\n this.positions[i].yOffset += this.positions[_k].yAdvance;\n }\n }\n }\n }\n };\n return GPOSProcessor;\n}(OTProcessor);\nvar OTLayoutEngine = /*#__PURE__*/function () {\n function OTLayoutEngine(font) {\n this.font = font;\n this.glyphInfos = null;\n this.plan = null;\n this.GSUBProcessor = null;\n this.GPOSProcessor = null;\n this.fallbackPosition = true;\n if (font.GSUB) {\n this.GSUBProcessor = new GSUBProcessor(font, font.GSUB);\n }\n if (font.GPOS) {\n this.GPOSProcessor = new GPOSProcessor(font, font.GPOS);\n }\n }\n var _proto29 = OTLayoutEngine.prototype;\n _proto29.setup = function setup(glyphRun) {\n var _this8 = this;\n // Map glyphs to GlyphInfo objects so data can be passed between\n // GSUB and GPOS without mutating the real (shared) Glyph objects.\n this.glyphInfos = glyphRun.glyphs.map(function (glyph) {\n return new GlyphInfo(_this8.font, glyph.id, [].concat(glyph.codePoints));\n }); // Select a script based on what is available in GSUB/GPOS.\n\n var script = null;\n if (this.GPOSProcessor) {\n script = this.GPOSProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n }\n if (this.GSUBProcessor) {\n script = this.GSUBProcessor.selectScript(glyphRun.script, glyphRun.language, glyphRun.direction);\n } // Choose a shaper based on the script, and setup a shaping plan.\n // This determines which features to apply to which glyphs.\n\n this.shaper = choose(script);\n this.plan = new ShapingPlan(this.font, script, glyphRun.direction);\n this.shaper.plan(this.plan, this.glyphInfos, glyphRun.features); // Assign chosen features to output glyph run\n\n for (var key in this.plan.allFeatures) {\n glyphRun.features[key] = true;\n }\n };\n _proto29.substitute = function substitute(glyphRun) {\n var _this9 = this;\n if (this.GSUBProcessor) {\n this.plan.process(this.GSUBProcessor, this.glyphInfos); // Map glyph infos back to normal Glyph objects\n\n glyphRun.glyphs = this.glyphInfos.map(function (glyphInfo) {\n return _this9.font.getGlyph(glyphInfo.id, glyphInfo.codePoints);\n });\n }\n };\n _proto29.position = function position(glyphRun) {\n if (this.shaper.zeroMarkWidths === 'BEFORE_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n }\n if (this.GPOSProcessor) {\n this.plan.process(this.GPOSProcessor, this.glyphInfos, glyphRun.positions);\n }\n if (this.shaper.zeroMarkWidths === 'AFTER_GPOS') {\n this.zeroMarkAdvances(glyphRun.positions);\n } // Reverse the glyphs and positions if the script is right-to-left\n\n if (glyphRun.direction === 'rtl') {\n glyphRun.glyphs.reverse();\n glyphRun.positions.reverse();\n }\n return this.GPOSProcessor && this.GPOSProcessor.features;\n };\n _proto29.zeroMarkAdvances = function zeroMarkAdvances(positions) {\n for (var i = 0; i < this.glyphInfos.length; i++) {\n if (this.glyphInfos[i].isMark) {\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n };\n _proto29.cleanup = function cleanup() {\n this.glyphInfos = null;\n this.plan = null;\n this.shaper = null;\n };\n _proto29.getAvailableFeatures = function getAvailableFeatures(script, language) {\n var features = [];\n if (this.GSUBProcessor) {\n this.GSUBProcessor.selectScript(script, language);\n features.push.apply(features, Object.keys(this.GSUBProcessor.features));\n }\n if (this.GPOSProcessor) {\n this.GPOSProcessor.selectScript(script, language);\n features.push.apply(features, Object.keys(this.GPOSProcessor.features));\n }\n return features;\n };\n return OTLayoutEngine;\n}();\nvar LayoutEngine = /*#__PURE__*/function () {\n function LayoutEngine(font) {\n this.font = font;\n this.unicodeLayoutEngine = null;\n this.kernProcessor = null; // Choose an advanced layout engine. We try the AAT morx table first since more\n // scripts are currently supported because the shaping logic is built into the font.\n\n if (this.font.morx) {\n this.engine = new AATLayoutEngine(this.font);\n } else if (this.font.GSUB || this.font.GPOS) {\n this.engine = new OTLayoutEngine(this.font);\n }\n }\n var _proto30 = LayoutEngine.prototype;\n _proto30.layout = function layout(string, features, script, language, direction) {\n // Make the features parameter optional\n if (typeof features === 'string') {\n direction = language;\n language = script;\n script = features;\n features = [];\n } // Map string to glyphs if needed\n\n if (typeof string === 'string') {\n // Attempt to detect the script from the string if not provided.\n if (script == null) {\n script = forString(string);\n }\n var glyphs = this.font.glyphsForString(string);\n } else {\n // Attempt to detect the script from the glyph code points if not provided.\n if (script == null) {\n var codePoints = [];\n for (var _iterator64 = _createForOfIteratorHelperLoose(string), _step64; !(_step64 = _iterator64()).done;) {\n var glyph = _step64.value;\n codePoints.push.apply(codePoints, glyph.codePoints);\n }\n script = forCodePoints(codePoints);\n }\n var glyphs = string;\n }\n var glyphRun = new GlyphRun(glyphs, features, script, language, direction); // Return early if there are no glyphs\n\n if (glyphs.length === 0) {\n glyphRun.positions = [];\n return glyphRun;\n } // Setup the advanced layout engine\n\n if (this.engine && this.engine.setup) {\n this.engine.setup(glyphRun);\n } // Substitute and position the glyphs\n\n this.substitute(glyphRun);\n this.position(glyphRun);\n this.hideDefaultIgnorables(glyphRun.glyphs, glyphRun.positions); // Let the layout engine clean up any state it might have\n\n if (this.engine && this.engine.cleanup) {\n this.engine.cleanup();\n }\n return glyphRun;\n };\n _proto30.substitute = function substitute(glyphRun) {\n // Call the advanced layout engine to make substitutions\n if (this.engine && this.engine.substitute) {\n this.engine.substitute(glyphRun);\n }\n };\n _proto30.position = function position(glyphRun) {\n // Get initial glyph positions\n glyphRun.positions = glyphRun.glyphs.map(function (glyph) {\n return new GlyphPosition(glyph.advanceWidth);\n });\n var positioned = null; // Call the advanced layout engine. Returns the features applied.\n\n if (this.engine && this.engine.position) {\n positioned = this.engine.position(glyphRun);\n } // if there is no GPOS table, use unicode properties to position marks.\n\n if (!positioned && (!this.engine || this.engine.fallbackPosition)) {\n if (!this.unicodeLayoutEngine) {\n this.unicodeLayoutEngine = new UnicodeLayoutEngine(this.font);\n }\n this.unicodeLayoutEngine.positionGlyphs(glyphRun.glyphs, glyphRun.positions);\n } // if kerning is not supported by GPOS, do kerning with the TrueType/AAT kern table\n\n if ((!positioned || !positioned.kern) && glyphRun.features.kern !== false && this.font.kern) {\n if (!this.kernProcessor) {\n this.kernProcessor = new KernProcessor(this.font);\n }\n this.kernProcessor.process(glyphRun.glyphs, glyphRun.positions);\n glyphRun.features.kern = true;\n }\n };\n _proto30.hideDefaultIgnorables = function hideDefaultIgnorables(glyphs, positions) {\n var space = this.font.glyphForCodePoint(0x20);\n for (var i = 0; i < glyphs.length; i++) {\n if (this.isDefaultIgnorable(glyphs[i].codePoints[0])) {\n glyphs[i] = space;\n positions[i].xAdvance = 0;\n positions[i].yAdvance = 0;\n }\n }\n };\n _proto30.isDefaultIgnorable = function isDefaultIgnorable(ch) {\n // From DerivedCoreProperties.txt in the Unicode database,\n // minus U+115F, U+1160, U+3164 and U+FFA0, which is what\n // Harfbuzz and Uniscribe do.\n var plane = ch >> 16;\n if (plane === 0) {\n // BMP\n switch (ch >> 8) {\n case 0x00:\n return ch === 0x00AD;\n case 0x03:\n return ch === 0x034F;\n case 0x06:\n return ch === 0x061C;\n case 0x17:\n return 0x17B4 <= ch && ch <= 0x17B5;\n case 0x18:\n return 0x180B <= ch && ch <= 0x180E;\n case 0x20:\n return 0x200B <= ch && ch <= 0x200F || 0x202A <= ch && ch <= 0x202E || 0x2060 <= ch && ch <= 0x206F;\n case 0xFE:\n return 0xFE00 <= ch && ch <= 0xFE0F || ch === 0xFEFF;\n case 0xFF:\n return 0xFFF0 <= ch && ch <= 0xFFF8;\n default:\n return false;\n }\n } else {\n // Other planes\n switch (plane) {\n case 0x01:\n return 0x1BCA0 <= ch && ch <= 0x1BCA3 || 0x1D173 <= ch && ch <= 0x1D17A;\n case 0x0E:\n return 0xE0000 <= ch && ch <= 0xE0FFF;\n default:\n return false;\n }\n }\n };\n _proto30.getAvailableFeatures = function getAvailableFeatures(script, language) {\n var features = [];\n if (this.engine) {\n features.push.apply(features, this.engine.getAvailableFeatures(script, language));\n }\n if (this.font.kern && features.indexOf('kern') === -1) {\n features.push('kern');\n }\n return features;\n };\n _proto30.stringsForGlyph = function stringsForGlyph(gid) {\n var result = new Set();\n var codePoints = this.font._cmapProcessor.codePointsForGlyph(gid);\n for (var _iterator65 = _createForOfIteratorHelperLoose(codePoints), _step65; !(_step65 = _iterator65()).done;) {\n var codePoint = _step65.value;\n result.add(String.fromCodePoint(codePoint));\n }\n if (this.engine && this.engine.stringsForGlyph) {\n for (var _iterator66 = _createForOfIteratorHelperLoose(this.engine.stringsForGlyph(gid)), _step66; !(_step66 = _iterator66()).done;) {\n var string = _step66.value;\n result.add(string);\n }\n }\n return Array.from(result);\n };\n return LayoutEngine;\n}();\nvar SVG_COMMANDS = {\n moveTo: 'M',\n lineTo: 'L',\n quadraticCurveTo: 'Q',\n bezierCurveTo: 'C',\n closePath: 'Z'\n};\n/**\r\n * Path objects are returned by glyphs and represent the actual\r\n * vector outlines for each glyph in the font. Paths can be converted\r\n * to SVG path data strings, or to functions that can be applied to\r\n * render the path to a graphics context.\r\n */\nvar Path = /*#__PURE__*/function () {\n function Path() {\n this.commands = [];\n this._bbox = null;\n this._cbox = null;\n }\n /**\r\n * Compiles the path to a JavaScript function that can be applied with\r\n * a graphics context in order to render the path.\r\n * @return {string}\r\n */\n var _proto31 = Path.prototype;\n _proto31.toFunction = function toFunction() {\n var _this10 = this;\n return function (ctx) {\n _this10.commands.forEach(function (c) {\n return ctx[c.command].apply(ctx, c.args);\n });\n };\n }\n /**\r\n * Converts the path to an SVG path data string\r\n * @return {string}\r\n */;\n _proto31.toSVG = function toSVG() {\n var cmds = this.commands.map(function (c) {\n var args = c.args.map(function (arg) {\n return Math.round(arg * 100) / 100;\n });\n return \"\".concat(SVG_COMMANDS[c.command]).concat(args.join(' '));\n });\n return cmds.join('');\n }\n /**\r\n * Gets the \"control box\" of a path.\r\n * This is like the bounding box, but it includes all points including\r\n * control points of bezier segments and is much faster to compute than\r\n * the real bounding box.\r\n * @type {BBox}\r\n */;\n /**\r\n * Applies a mapping function to each point in the path.\r\n * @param {function} fn\r\n * @return {Path}\r\n */\n _proto31.mapPoints = function mapPoints(fn) {\n var path = new Path();\n for (var _iterator67 = _createForOfIteratorHelperLoose(this.commands), _step67; !(_step67 = _iterator67()).done;) {\n var c = _step67.value;\n var args = [];\n for (var i = 0; i < c.args.length; i += 2) {\n var _fn = fn(c.args[i], c.args[i + 1]),\n x = _fn[0],\n y = _fn[1];\n args.push(x, y);\n }\n path[c.command].apply(path, args);\n }\n return path;\n }\n /**\r\n * Transforms the path by the given matrix.\r\n */;\n _proto31.transform = function transform(m0, m1, m2, m3, m4, m5) {\n return this.mapPoints(function (x, y) {\n x = m0 * x + m2 * y + m4;\n y = m1 * x + m3 * y + m5;\n return [x, y];\n });\n }\n /**\r\n * Translates the path by the given offset.\r\n */;\n _proto31.translate = function translate(x, y) {\n return this.transform(1, 0, 0, 1, x, y);\n }\n /**\r\n * Rotates the path by the given angle (in radians).\r\n */;\n _proto31.rotate = function rotate(angle) {\n var cos = Math.cos(angle);\n var sin = Math.sin(angle);\n return this.transform(cos, sin, -sin, cos, 0, 0);\n }\n /**\r\n * Scales the path.\r\n */;\n _proto31.scale = function scale(scaleX, scaleY) {\n if (scaleY === void 0) {\n scaleY = scaleX;\n }\n return this.transform(scaleX, 0, 0, scaleY, 0, 0);\n };\n _createClass(Path, [{\n key: \"cbox\",\n get: function get() {\n if (!this._cbox) {\n var cbox = new BBox();\n for (var _iterator68 = _createForOfIteratorHelperLoose(this.commands), _step68; !(_step68 = _iterator68()).done;) {\n var command = _step68.value;\n for (var i = 0; i < command.args.length; i += 2) {\n cbox.addPoint(command.args[i], command.args[i + 1]);\n }\n }\n this._cbox = Object.freeze(cbox);\n }\n return this._cbox;\n }\n /**\r\n * Gets the exact bounding box of the path by evaluating curve segments.\r\n * Slower to compute than the control box, but more accurate.\r\n * @type {BBox}\r\n */\n }, {\n key: \"bbox\",\n get: function get() {\n if (this._bbox) {\n return this._bbox;\n }\n var bbox = new BBox();\n var cx = 0,\n cy = 0;\n var f = function f(t) {\n return Math.pow(1 - t, 3) * p0[i] + 3 * Math.pow(1 - t, 2) * t * p1[i] + 3 * (1 - t) * Math.pow(t, 2) * p2[i] + Math.pow(t, 3) * p3[i];\n };\n for (var _iterator69 = _createForOfIteratorHelperLoose(this.commands), _step69; !(_step69 = _iterator69()).done;) {\n var c = _step69.value;\n switch (c.command) {\n case 'moveTo':\n case 'lineTo':\n var _c$args = c.args,\n x = _c$args[0],\n y = _c$args[1];\n bbox.addPoint(x, y);\n cx = x;\n cy = y;\n break;\n case 'quadraticCurveTo':\n case 'bezierCurveTo':\n if (c.command === 'quadraticCurveTo') {\n // http://fontforge.org/bezier.html\n var _c$args2 = c.args,\n qp1x = _c$args2[0],\n qp1y = _c$args2[1],\n p3x = _c$args2[2],\n p3y = _c$args2[3];\n var cp1x = cx + 2 / 3 * (qp1x - cx); // CP1 = QP0 + 2/3 * (QP1-QP0)\n\n var cp1y = cy + 2 / 3 * (qp1y - cy);\n var cp2x = p3x + 2 / 3 * (qp1x - p3x); // CP2 = QP2 + 2/3 * (QP1-QP2)\n\n var cp2y = p3y + 2 / 3 * (qp1y - p3y);\n } else {\n var _c$args3 = c.args,\n cp1x = _c$args3[0],\n cp1y = _c$args3[1],\n cp2x = _c$args3[2],\n cp2y = _c$args3[3],\n p3x = _c$args3[4],\n p3y = _c$args3[5];\n } // http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n\n bbox.addPoint(p3x, p3y);\n var p0 = [cx, cy];\n var p1 = [cp1x, cp1y];\n var p2 = [cp2x, cp2y];\n var p3 = [p3x, p3y];\n for (var i = 0; i <= 1; i++) {\n var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n var t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) {\n bbox.addPoint(f(t), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t));\n }\n }\n continue;\n }\n var b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t1), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t1));\n }\n }\n var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) {\n bbox.addPoint(f(t2), bbox.maxY);\n } else if (i === 1) {\n bbox.addPoint(bbox.maxX, f(t2));\n }\n }\n }\n cx = p3x;\n cy = p3y;\n break;\n }\n }\n return this._bbox = Object.freeze(bbox);\n }\n }]);\n return Path;\n}();\nvar _loop = function _loop(command) {\n Path.prototype[command] = function () {\n this._bbox = this._cbox = null;\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n this.commands.push({\n command: command,\n args: args\n });\n return this;\n };\n};\nfor (var _i23 = 0, _arr = ['moveTo', 'lineTo', 'quadraticCurveTo', 'bezierCurveTo', 'closePath']; _i23 < _arr.length; _i23++) {\n var command = _arr[_i23];\n _loop(command);\n}\nvar StandardNames = ['.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave', 'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis', 'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis', 'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section', 'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal', 'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation', 'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown', 'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright', 'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft', 'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction', 'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase', 'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex', 'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth', 'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior', 'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla', 'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];\nvar _class$3;\n/**\r\n * Glyph objects represent a glyph in the font. They have various properties for accessing metrics and\r\n * the actual vector path the glyph represents, and methods for rendering the glyph to a graphics context.\r\n *\r\n * You do not create glyph objects directly. They are created by various methods on the font object.\r\n * There are several subclasses of the base Glyph class internally that may be returned depending\r\n * on the font format, but they all inherit from this class.\r\n */\n\nvar Glyph = (_class$3 = /*#__PURE__*/function () {\n function Glyph(id, codePoints, font) {\n /**\r\n * The glyph id in the font\r\n * @type {number}\r\n */\n this.id = id;\n /**\r\n * An array of unicode code points that are represented by this glyph.\r\n * There can be multiple code points in the case of ligatures and other glyphs\r\n * that represent multiple visual characters.\r\n * @type {number[]}\r\n */\n\n this.codePoints = codePoints;\n this._font = font; // TODO: get this info from GDEF if available\n\n this.isMark = this.codePoints.length > 0 && this.codePoints.every(unicode.isMark);\n this.isLigature = this.codePoints.length > 1;\n }\n var _proto32 = Glyph.prototype;\n _proto32._getPath = function _getPath() {\n return new Path();\n };\n _proto32._getCBox = function _getCBox() {\n return this.path.cbox;\n };\n _proto32._getBBox = function _getBBox() {\n return this.path.bbox;\n };\n _proto32._getTableMetrics = function _getTableMetrics(table) {\n if (this.id < table.metrics.length) {\n return table.metrics.get(this.id);\n }\n var metric = table.metrics.get(table.metrics.length - 1);\n var res = {\n advance: metric ? metric.advance : 0,\n bearing: table.bearings.get(this.id - table.metrics.length) || 0\n };\n return res;\n };\n _proto32._getMetrics = function _getMetrics(cbox) {\n if (this._metrics) {\n return this._metrics;\n }\n var _this$_getTableMetric = this._getTableMetrics(this._font.hmtx),\n advanceWidth = _this$_getTableMetric.advance,\n leftBearing = _this$_getTableMetric.bearing; // For vertical metrics, use vmtx if available, or fall back to global data from OS/2 or hhea\n\n if (this._font.vmtx) {\n var _this$_getTableMetric2 = this._getTableMetrics(this._font.vmtx),\n advanceHeight = _this$_getTableMetric2.advance,\n topBearing = _this$_getTableMetric2.bearing;\n } else {\n var os2;\n if (typeof cbox === 'undefined' || cbox === null) {\n cbox = this.cbox;\n }\n if ((os2 = this._font['OS/2']) && os2.version > 0) {\n var advanceHeight = Math.abs(os2.typoAscender - os2.typoDescender);\n var topBearing = os2.typoAscender - cbox.maxY;\n } else {\n var hhea = this._font.hhea;\n var advanceHeight = Math.abs(hhea.ascent - hhea.descent);\n var topBearing = hhea.ascent - cbox.maxY;\n }\n }\n if (this._font._variationProcessor && this._font.HVAR) {\n advanceWidth += this._font._variationProcessor.getAdvanceAdjustment(this.id, this._font.HVAR);\n }\n return this._metrics = {\n advanceWidth: advanceWidth,\n advanceHeight: advanceHeight,\n leftBearing: leftBearing,\n topBearing: topBearing\n };\n }\n /**\r\n * The glyph’s control box.\r\n * This is often the same as the bounding box, but is faster to compute.\r\n * Because of the way bezier curves are defined, some of the control points\r\n * can be outside of the bounding box. Where `bbox` takes this into account,\r\n * `cbox` does not. Thus, cbox is less accurate, but faster to compute.\r\n * See [here](http://www.freetype.org/freetype2/docs/glyphs/glyphs-6.html#section-2)\r\n * for a more detailed description.\r\n *\r\n * @type {BBox}\r\n */;\n /**\r\n * Returns a path scaled to the given font size.\r\n * @param {number} size\r\n * @return {Path}\r\n */\n _proto32.getScaledPath = function getScaledPath(size) {\n var scale = 1 / this._font.unitsPerEm * size;\n return this.path.scale(scale);\n }\n /**\r\n * The glyph's advance width.\r\n * @type {number}\r\n */;\n _proto32._getName = function _getName() {\n var post = this._font.post;\n if (!post) {\n return null;\n }\n switch (post.version) {\n case 1:\n return StandardNames[this.id];\n case 2:\n var id = post.glyphNameIndex[this.id];\n if (id < StandardNames.length) {\n return StandardNames[id];\n }\n return post.names[id - StandardNames.length];\n case 2.5:\n return StandardNames[this.id + post.offsets[this.id]];\n case 4:\n return String.fromCharCode(post.map[this.id]);\n }\n }\n /**\r\n * The glyph's name\r\n * @type {string}\r\n */;\n /**\r\n * Renders the glyph to the given graphics context, at the specified font size.\r\n * @param {CanvasRenderingContext2d} ctx\r\n * @param {number} size\r\n */\n _proto32.render = function render(ctx, size) {\n ctx.save();\n var scale = 1 / this._font.head.unitsPerEm * size;\n ctx.scale(scale, scale);\n var fn = this.path.toFunction();\n fn(ctx);\n ctx.fill();\n ctx.restore();\n };\n _createClass(Glyph, [{\n key: \"cbox\",\n get: function get() {\n return this._getCBox();\n }\n /**\r\n * The glyph’s bounding box, i.e. the rectangle that encloses the\r\n * glyph outline as tightly as possible.\r\n * @type {BBox}\r\n */\n }, {\n key: \"bbox\",\n get: function get() {\n return this._getBBox();\n }\n /**\r\n * A vector Path object representing the glyph outline.\r\n * @type {Path}\r\n */\n }, {\n key: \"path\",\n get: function get() {\n // Cache the path so we only decode it once\n // Decoding is actually performed by subclasses\n return this._getPath();\n }\n }, {\n key: \"advanceWidth\",\n get: function get() {\n return this._getMetrics().advanceWidth;\n }\n /**\r\n * The glyph's advance height.\r\n * @type {number}\r\n */\n }, {\n key: \"advanceHeight\",\n get: function get() {\n return this._getMetrics().advanceHeight;\n }\n }, {\n key: \"ligatureCaretPositions\",\n get: function get() {}\n }, {\n key: \"name\",\n get: function get() {\n return this._getName();\n }\n }]);\n return Glyph;\n}(), (_applyDecoratedDescriptor(_class$3.prototype, \"cbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"cbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"bbox\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"path\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"path\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceWidth\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceWidth\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"advanceHeight\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"advanceHeight\"), _class$3.prototype), _applyDecoratedDescriptor(_class$3.prototype, \"name\", [cache], Object.getOwnPropertyDescriptor(_class$3.prototype, \"name\"), _class$3.prototype)), _class$3);\nvar GlyfHeader = new r.Struct({\n numberOfContours: r.int16,\n // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16\n}); // Flags for simple glyphs\n\nvar ON_CURVE = 1 << 0;\nvar X_SHORT_VECTOR = 1 << 1;\nvar Y_SHORT_VECTOR = 1 << 2;\nvar REPEAT = 1 << 3;\nvar SAME_X = 1 << 4;\nvar SAME_Y = 1 << 5; // Flags for composite glyphs\n\nvar ARG_1_AND_2_ARE_WORDS = 1 << 0;\nvar WE_HAVE_A_SCALE = 1 << 3;\nvar MORE_COMPONENTS = 1 << 5;\nvar WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;\nvar WE_HAVE_A_TWO_BY_TWO = 1 << 7;\nvar WE_HAVE_INSTRUCTIONS = 1 << 8;\nvar Point = /*#__PURE__*/function () {\n function Point(onCurve, endContour, x, y) {\n if (x === void 0) {\n x = 0;\n }\n if (y === void 0) {\n y = 0;\n }\n this.onCurve = onCurve;\n this.endContour = endContour;\n this.x = x;\n this.y = y;\n }\n var _proto33 = Point.prototype;\n _proto33.copy = function copy() {\n return new Point(this.onCurve, this.endContour, this.x, this.y);\n };\n return Point;\n}(); // Represents a component in a composite glyph\nvar Component = function Component(glyphID, dx, dy) {\n this.glyphID = glyphID;\n this.dx = dx;\n this.dy = dy;\n this.pos = 0;\n this.scaleX = this.scaleY = 1;\n this.scale01 = this.scale10 = 0;\n};\n/**\r\n * Represents a TrueType glyph.\r\n */\nvar TTFGlyph = /*#__PURE__*/function (_Glyph) {\n _inheritsLoose(TTFGlyph, _Glyph);\n function TTFGlyph() {\n return _Glyph.apply(this, arguments) || this;\n }\n var _proto34 = TTFGlyph.prototype;\n // Parses just the glyph header and returns the bounding box\n _proto34._getCBox = function _getCBox(internal) {\n // We need to decode the glyph if variation processing is requested,\n // so it's easier just to recompute the path's cbox after decoding.\n if (this._font._variationProcessor && !internal) {\n return this.path.cbox;\n }\n var stream = this._font._getTableStream('glyf');\n stream.pos += this._font.loca.offsets[this.id];\n var glyph = GlyfHeader.decode(stream);\n var cbox = new BBox(glyph.xMin, glyph.yMin, glyph.xMax, glyph.yMax);\n return Object.freeze(cbox);\n } // Parses a single glyph coordinate\n ;\n _proto34._parseGlyphCoord = function _parseGlyphCoord(stream, prev, short, same) {\n if (short) {\n var val = stream.readUInt8();\n if (!same) {\n val = -val;\n }\n val += prev;\n } else {\n if (same) {\n var val = prev;\n } else {\n var val = prev + stream.readInt16BE();\n }\n }\n return val;\n } // Decodes the glyph data into points for simple glyphs,\n // or components for composite glyphs\n ;\n _proto34._decode = function _decode() {\n var glyfPos = this._font.loca.offsets[this.id];\n var nextPos = this._font.loca.offsets[this.id + 1]; // Nothing to do if there is no data for this glyph\n\n if (glyfPos === nextPos) {\n return null;\n }\n var stream = this._font._getTableStream('glyf');\n stream.pos += glyfPos;\n var startPos = stream.pos;\n var glyph = GlyfHeader.decode(stream);\n if (glyph.numberOfContours > 0) {\n this._decodeSimple(glyph, stream);\n } else if (glyph.numberOfContours < 0) {\n this._decodeComposite(glyph, stream, startPos);\n }\n return glyph;\n };\n _proto34._decodeSimple = function _decodeSimple(glyph, stream) {\n // this is a simple glyph\n glyph.points = [];\n var endPtsOfContours = new r.Array(r.uint16, glyph.numberOfContours).decode(stream);\n glyph.instructions = new r.Array(r.uint8, r.uint16).decode(stream);\n var flags = [];\n var numCoords = endPtsOfContours[endPtsOfContours.length - 1] + 1;\n while (flags.length < numCoords) {\n var flag = stream.readUInt8();\n flags.push(flag); // check for repeat flag\n\n if (flag & REPEAT) {\n var count = stream.readUInt8();\n for (var j = 0; j < count; j++) {\n flags.push(flag);\n }\n }\n }\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n var point = new Point(!!(flag & ON_CURVE), endPtsOfContours.indexOf(i) >= 0, 0, 0);\n glyph.points.push(point);\n }\n var px = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].x = px = this._parseGlyphCoord(stream, px, flag & X_SHORT_VECTOR, flag & SAME_X);\n }\n var py = 0;\n for (var i = 0; i < flags.length; i++) {\n var flag = flags[i];\n glyph.points[i].y = py = this._parseGlyphCoord(stream, py, flag & Y_SHORT_VECTOR, flag & SAME_Y);\n }\n if (this._font._variationProcessor) {\n var points = glyph.points.slice();\n points.push.apply(points, this._getPhantomPoints(glyph));\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.slice(-4);\n }\n return;\n };\n _proto34._decodeComposite = function _decodeComposite(glyph, stream, offset) {\n if (offset === void 0) {\n offset = 0;\n }\n // this is a composite glyph\n glyph.components = [];\n var haveInstructions = false;\n var flags = MORE_COMPONENTS;\n while (flags & MORE_COMPONENTS) {\n flags = stream.readUInt16BE();\n var gPos = stream.pos - offset;\n var glyphID = stream.readUInt16BE();\n if (!haveInstructions) {\n haveInstructions = (flags & WE_HAVE_INSTRUCTIONS) !== 0;\n }\n if (flags & ARG_1_AND_2_ARE_WORDS) {\n var dx = stream.readInt16BE();\n var dy = stream.readInt16BE();\n } else {\n var dx = stream.readInt8();\n var dy = stream.readInt8();\n }\n var component = new Component(glyphID, dx, dy);\n component.pos = gPos;\n if (flags & WE_HAVE_A_SCALE) {\n // fixed number with 14 bits of fraction\n component.scaleX = component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {\n component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n } else if (flags & WE_HAVE_A_TWO_BY_TWO) {\n component.scaleX = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n component.scale01 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n component.scale10 = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n component.scaleY = (stream.readUInt8() << 24 | stream.readUInt8() << 16) / 1073741824;\n }\n glyph.components.push(component);\n }\n if (this._font._variationProcessor) {\n var points = [];\n for (var j = 0; j < glyph.components.length; j++) {\n var component = glyph.components[j];\n points.push(new Point(true, true, component.dx, component.dy));\n }\n points.push.apply(points, this._getPhantomPoints(glyph));\n this._font._variationProcessor.transformPoints(this.id, points);\n glyph.phantomPoints = points.splice(-4, 4);\n for (var i = 0; i < points.length; i++) {\n var point = points[i];\n glyph.components[i].dx = point.x;\n glyph.components[i].dy = point.y;\n }\n }\n return haveInstructions;\n };\n _proto34._getPhantomPoints = function _getPhantomPoints(glyph) {\n var cbox = this._getCBox(true);\n if (this._metrics == null) {\n this._metrics = Glyph.prototype._getMetrics.call(this, cbox);\n }\n var _this$_metrics = this._metrics,\n advanceWidth = _this$_metrics.advanceWidth,\n advanceHeight = _this$_metrics.advanceHeight,\n leftBearing = _this$_metrics.leftBearing,\n topBearing = _this$_metrics.topBearing;\n return [new Point(false, true, glyph.xMin - leftBearing, 0), new Point(false, true, glyph.xMin - leftBearing + advanceWidth, 0), new Point(false, true, 0, glyph.yMax + topBearing), new Point(false, true, 0, glyph.yMax + topBearing + advanceHeight)];\n } // Decodes font data, resolves composite glyphs, and returns an array of contours\n ;\n _proto34._getContours = function _getContours() {\n var glyph = this._decode();\n if (!glyph) {\n return [];\n }\n var points = [];\n if (glyph.numberOfContours < 0) {\n // resolve composite glyphs\n for (var _iterator70 = _createForOfIteratorHelperLoose(glyph.components), _step70; !(_step70 = _iterator70()).done;) {\n var component = _step70.value;\n var _contours = this._font.getGlyph(component.glyphID)._getContours();\n for (var i = 0; i < _contours.length; i++) {\n var contour = _contours[i];\n for (var j = 0; j < contour.length; j++) {\n var _point = contour[j];\n var x = _point.x * component.scaleX + _point.y * component.scale01 + component.dx;\n var y = _point.y * component.scaleY + _point.x * component.scale10 + component.dy;\n points.push(new Point(_point.onCurve, _point.endContour, x, y));\n }\n }\n }\n } else {\n points = glyph.points || [];\n } // Recompute and cache metrics if we performed variation processing, and don't have an HVAR table\n\n if (glyph.phantomPoints && !this._font.directory.tables.HVAR) {\n this._metrics.advanceWidth = glyph.phantomPoints[1].x - glyph.phantomPoints[0].x;\n this._metrics.advanceHeight = glyph.phantomPoints[3].y - glyph.phantomPoints[2].y;\n this._metrics.leftBearing = glyph.xMin - glyph.phantomPoints[0].x;\n this._metrics.topBearing = glyph.phantomPoints[2].y - glyph.yMax;\n }\n var contours = [];\n var cur = [];\n for (var k = 0; k < points.length; k++) {\n var point = points[k];\n cur.push(point);\n if (point.endContour) {\n contours.push(cur);\n cur = [];\n }\n }\n return contours;\n };\n _proto34._getMetrics = function _getMetrics() {\n if (this._metrics) {\n return this._metrics;\n }\n var cbox = this._getCBox(true);\n _Glyph.prototype._getMetrics.call(this, cbox);\n if (this._font._variationProcessor && !this._font.HVAR) {\n // No HVAR table, decode the glyph. This triggers recomputation of metrics.\n this.path;\n }\n return this._metrics;\n } // Converts contours to a Path object that can be rendered\n ;\n _proto34._getPath = function _getPath() {\n var contours = this._getContours();\n var path = new Path();\n for (var i = 0; i < contours.length; i++) {\n var contour = contours[i];\n var firstPt = contour[0];\n var lastPt = contour[contour.length - 1];\n var start = 0;\n if (firstPt.onCurve) {\n // The first point will be consumed by the moveTo command, so skip in the loop\n var curvePt = null;\n start = 1;\n } else {\n if (lastPt.onCurve) {\n // Start at the last point if the first point is off curve and the last point is on curve\n firstPt = lastPt;\n } else {\n // Start at the middle if both the first and last points are off curve\n firstPt = new Point(false, false, (firstPt.x + lastPt.x) / 2, (firstPt.y + lastPt.y) / 2);\n }\n var curvePt = firstPt;\n }\n path.moveTo(firstPt.x, firstPt.y);\n for (var j = start; j < contour.length; j++) {\n var pt = contour[j];\n var prevPt = j === 0 ? firstPt : contour[j - 1];\n if (prevPt.onCurve && pt.onCurve) {\n path.lineTo(pt.x, pt.y);\n } else if (prevPt.onCurve && !pt.onCurve) {\n var curvePt = pt;\n } else if (!prevPt.onCurve && !pt.onCurve) {\n var midX = (prevPt.x + pt.x) / 2;\n var midY = (prevPt.y + pt.y) / 2;\n path.quadraticCurveTo(prevPt.x, prevPt.y, midX, midY);\n var curvePt = pt;\n } else if (!prevPt.onCurve && pt.onCurve) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, pt.x, pt.y);\n var curvePt = null;\n } else {\n throw new Error(\"Unknown TTF path state\");\n }\n } // Connect the first and last points\n\n if (curvePt) {\n path.quadraticCurveTo(curvePt.x, curvePt.y, firstPt.x, firstPt.y);\n }\n path.closePath();\n }\n return path;\n };\n return TTFGlyph;\n}(Glyph);\n/**\r\n * Represents an OpenType PostScript glyph, in the Compact Font Format.\r\n */\nvar CFFGlyph = /*#__PURE__*/function (_Glyph2) {\n _inheritsLoose(CFFGlyph, _Glyph2);\n function CFFGlyph() {\n return _Glyph2.apply(this, arguments) || this;\n }\n var _proto35 = CFFGlyph.prototype;\n _proto35._getName = function _getName() {\n if (this._font.CFF2) {\n return _Glyph2.prototype._getName.call(this);\n }\n return this._font['CFF '].getGlyphName(this.id);\n };\n _proto35.bias = function bias(s) {\n if (s.length < 1240) {\n return 107;\n } else if (s.length < 33900) {\n return 1131;\n } else {\n return 32768;\n }\n };\n _proto35._getPath = function _getPath() {\n var cff = this._font.CFF2 || this._font['CFF '];\n var stream = cff.stream;\n var str = cff.topDict.CharStrings[this.id];\n var end = str.offset + str.length;\n stream.pos = str.offset;\n var path = new Path();\n var stack = [];\n var trans = [];\n var width = null;\n var nStems = 0;\n var x = 0,\n y = 0;\n var usedGsubrs;\n var usedSubrs;\n var open = false;\n this._usedGsubrs = usedGsubrs = {};\n this._usedSubrs = usedSubrs = {};\n var gsubrs = cff.globalSubrIndex || [];\n var gsubrsBias = this.bias(gsubrs);\n var privateDict = cff.privateDictForGlyph(this.id) || {};\n var subrs = privateDict.Subrs || [];\n var subrsBias = this.bias(subrs);\n var vstore = cff.topDict.vstore && cff.topDict.vstore.itemVariationStore;\n var vsindex = privateDict.vsindex;\n var variationProcessor = this._font._variationProcessor;\n function checkWidth() {\n if (width == null) {\n width = stack.shift() + privateDict.nominalWidthX;\n }\n }\n function parseStems() {\n if (stack.length % 2 !== 0) {\n checkWidth();\n }\n nStems += stack.length >> 1;\n return stack.length = 0;\n }\n function moveTo(x, y) {\n if (open) {\n path.closePath();\n }\n path.moveTo(x, y);\n open = true;\n }\n var parse = function parse() {\n while (stream.pos < end) {\n var op = stream.readUInt8();\n if (op < 32) {\n switch (op) {\n case 1: // hstem\n\n case 3: // vstem\n\n case 18: // hstemhm\n\n case 23:\n // vstemhm\n parseStems();\n break;\n case 4:\n // vmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n y += stack.shift();\n moveTo(x, y);\n break;\n case 5:\n // rlineto\n while (stack.length >= 2) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n break;\n case 6: // hlineto\n\n case 7:\n // vlineto\n var phase = op === 6;\n while (stack.length >= 1) {\n if (phase) {\n x += stack.shift();\n } else {\n y += stack.shift();\n }\n path.lineTo(x, y);\n phase = !phase;\n }\n break;\n case 8:\n // rrcurveto\n while (stack.length > 0) {\n var c1x = x + stack.shift();\n var c1y = y + stack.shift();\n var c2x = c1x + stack.shift();\n var c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 10:\n // callsubr\n var index = stack.pop() + subrsBias;\n var subr = subrs[index];\n if (subr) {\n usedSubrs[index] = true;\n var p = stream.pos;\n var e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n case 11:\n // return\n if (cff.version >= 2) {\n break;\n }\n return;\n case 14:\n // endchar\n if (cff.version >= 2) {\n break;\n }\n if (stack.length > 0) {\n checkWidth();\n }\n if (open) {\n path.closePath();\n open = false;\n }\n break;\n case 15:\n {\n // vsindex\n if (cff.version < 2) {\n throw new Error('vsindex operator not supported in CFF v1');\n }\n vsindex = stack.pop();\n break;\n }\n case 16:\n {\n // blend\n if (cff.version < 2) {\n throw new Error('blend operator not supported in CFF v1');\n }\n if (!variationProcessor) {\n throw new Error('blend operator in non-variation font');\n }\n var blendVector = variationProcessor.getBlendVector(vstore, vsindex);\n var numBlends = stack.pop();\n var numOperands = numBlends * blendVector.length;\n var delta = stack.length - numOperands;\n var base = delta - numBlends;\n for (var i = 0; i < numBlends; i++) {\n var sum = stack[base + i];\n for (var j = 0; j < blendVector.length; j++) {\n sum += blendVector[j] * stack[delta++];\n }\n stack[base + i] = sum;\n }\n while (numOperands--) {\n stack.pop();\n }\n break;\n }\n case 19: // hintmask\n\n case 20:\n // cntrmask\n parseStems();\n stream.pos += nStems + 7 >> 3;\n break;\n case 21:\n // rmoveto\n if (stack.length > 2) {\n checkWidth();\n }\n x += stack.shift();\n y += stack.shift();\n moveTo(x, y);\n break;\n case 22:\n // hmoveto\n if (stack.length > 1) {\n checkWidth();\n }\n x += stack.shift();\n moveTo(x, y);\n break;\n case 24:\n // rcurveline\n while (stack.length >= 8) {\n var c1x = x + stack.shift();\n var c1y = y + stack.shift();\n var c2x = c1x + stack.shift();\n var c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n break;\n case 25:\n // rlinecurve\n while (stack.length >= 8) {\n x += stack.shift();\n y += stack.shift();\n path.lineTo(x, y);\n }\n var c1x = x + stack.shift();\n var c1y = y + stack.shift();\n var c2x = c1x + stack.shift();\n var c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n case 26:\n // vvcurveto\n if (stack.length % 2) {\n x += stack.shift();\n }\n while (stack.length >= 4) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x;\n y = c2y + stack.shift();\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 27:\n // hhcurveto\n if (stack.length % 2) {\n y += stack.shift();\n }\n while (stack.length >= 4) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 28:\n // shortint\n stack.push(stream.readInt16BE());\n break;\n case 29:\n // callgsubr\n index = stack.pop() + gsubrsBias;\n subr = gsubrs[index];\n if (subr) {\n usedGsubrs[index] = true;\n var p = stream.pos;\n var e = end;\n stream.pos = subr.offset;\n end = subr.offset + subr.length;\n parse();\n stream.pos = p;\n end = e;\n }\n break;\n case 30: // vhcurveto\n\n case 31:\n // hvcurveto\n phase = op === 31;\n while (stack.length >= 4) {\n if (phase) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n } else {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n }\n path.bezierCurveTo(c1x, c1y, c2x, c2y, x, y);\n phase = !phase;\n }\n break;\n case 12:\n op = stream.readUInt8();\n switch (op) {\n case 3:\n // and\n var a = stack.pop();\n var b = stack.pop();\n stack.push(a && b ? 1 : 0);\n break;\n case 4:\n // or\n a = stack.pop();\n b = stack.pop();\n stack.push(a || b ? 1 : 0);\n break;\n case 5:\n // not\n a = stack.pop();\n stack.push(a ? 0 : 1);\n break;\n case 9:\n // abs\n a = stack.pop();\n stack.push(Math.abs(a));\n break;\n case 10:\n // add\n a = stack.pop();\n b = stack.pop();\n stack.push(a + b);\n break;\n case 11:\n // sub\n a = stack.pop();\n b = stack.pop();\n stack.push(a - b);\n break;\n case 12:\n // div\n a = stack.pop();\n b = stack.pop();\n stack.push(a / b);\n break;\n case 14:\n // neg\n a = stack.pop();\n stack.push(-a);\n break;\n case 15:\n // eq\n a = stack.pop();\n b = stack.pop();\n stack.push(a === b ? 1 : 0);\n break;\n case 18:\n // drop\n stack.pop();\n break;\n case 20:\n // put\n var val = stack.pop();\n var idx = stack.pop();\n trans[idx] = val;\n break;\n case 21:\n // get\n idx = stack.pop();\n stack.push(trans[idx] || 0);\n break;\n case 22:\n // ifelse\n var s1 = stack.pop();\n var s2 = stack.pop();\n var v1 = stack.pop();\n var v2 = stack.pop();\n stack.push(v1 <= v2 ? s1 : s2);\n break;\n case 23:\n // random\n stack.push(Math.random());\n break;\n case 24:\n // mul\n a = stack.pop();\n b = stack.pop();\n stack.push(a * b);\n break;\n case 26:\n // sqrt\n a = stack.pop();\n stack.push(Math.sqrt(a));\n break;\n case 27:\n // dup\n a = stack.pop();\n stack.push(a, a);\n break;\n case 28:\n // exch\n a = stack.pop();\n b = stack.pop();\n stack.push(b, a);\n break;\n case 29:\n // index\n idx = stack.pop();\n if (idx < 0) {\n idx = 0;\n } else if (idx > stack.length - 1) {\n idx = stack.length - 1;\n }\n stack.push(stack[idx]);\n break;\n case 30:\n // roll\n var n = stack.pop();\n var _j = stack.pop();\n if (_j >= 0) {\n while (_j > 0) {\n var t = stack[n - 1];\n for (var _i = n - 2; _i >= 0; _i--) {\n stack[_i + 1] = stack[_i];\n }\n stack[0] = t;\n _j--;\n }\n } else {\n while (_j < 0) {\n var t = stack[0];\n for (var _i2 = 0; _i2 <= n; _i2++) {\n stack[_i2] = stack[_i2 + 1];\n }\n stack[n - 1] = t;\n _j++;\n }\n }\n break;\n case 34:\n // hflex\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n var c3x = c2x + stack.shift();\n var c3y = c2y;\n var c4x = c3x + stack.shift();\n var c4y = c3y;\n var c5x = c4x + stack.shift();\n var c5y = c4y;\n var c6x = c5x + stack.shift();\n var c6y = c5y;\n x = c6x;\n y = c6y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n case 35:\n // flex\n var pts = [];\n for (var _i3 = 0; _i3 <= 5; _i3++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n path.bezierCurveTo.apply(path, pts.slice(0, 6));\n path.bezierCurveTo.apply(path, pts.slice(6));\n stack.shift(); // fd\n\n break;\n case 36:\n // hflex1\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n c3x = c2x + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y;\n c5x = c4x + stack.shift();\n c5y = c4y + stack.shift();\n c6x = c5x + stack.shift();\n c6y = c5y;\n x = c6x;\n y = c6y;\n path.bezierCurveTo(c1x, c1y, c2x, c2y, c3x, c3y);\n path.bezierCurveTo(c4x, c4y, c5x, c5y, c6x, c6y);\n break;\n case 37:\n // flex1\n var startx = x;\n var starty = y;\n pts = [];\n for (var _i4 = 0; _i4 <= 4; _i4++) {\n x += stack.shift();\n y += stack.shift();\n pts.push(x, y);\n }\n if (Math.abs(x - startx) > Math.abs(y - starty)) {\n // horizontal\n x += stack.shift();\n y = starty;\n } else {\n x = startx;\n y += stack.shift();\n }\n pts.push(x, y);\n path.bezierCurveTo.apply(path, pts.slice(0, 6));\n path.bezierCurveTo.apply(path, pts.slice(6));\n break;\n default:\n throw new Error(\"Unknown op: 12 \".concat(op));\n }\n break;\n default:\n throw new Error(\"Unknown op: \".concat(op));\n }\n } else if (op < 247) {\n stack.push(op - 139);\n } else if (op < 251) {\n var b1 = stream.readUInt8();\n stack.push((op - 247) * 256 + b1 + 108);\n } else if (op < 255) {\n var b1 = stream.readUInt8();\n stack.push(-(op - 251) * 256 - b1 - 108);\n } else {\n stack.push(stream.readInt32BE() / 65536);\n }\n }\n };\n parse();\n if (open) {\n path.closePath();\n }\n return path;\n };\n return CFFGlyph;\n}(Glyph);\nvar SBIXImage = new r.Struct({\n originX: r.uint16,\n originY: r.uint16,\n type: new r.String(4),\n data: new r.Buffer(function (t) {\n return t.parent.buflen - t._currentOffset;\n })\n});\n/**\r\n * Represents a color (e.g. emoji) glyph in Apple's SBIX format.\r\n */\nvar SBIXGlyph = /*#__PURE__*/function (_TTFGlyph) {\n _inheritsLoose(SBIXGlyph, _TTFGlyph);\n function SBIXGlyph() {\n return _TTFGlyph.apply(this, arguments) || this;\n }\n var _proto36 = SBIXGlyph.prototype;\n /**\r\n * Returns an object representing a glyph image at the given point size.\r\n * The object has a data property with a Buffer containing the actual image data,\r\n * along with the image type, and origin.\r\n *\r\n * @param {number} size\r\n * @return {object}\r\n */\n _proto36.getImageForSize = function getImageForSize(size) {\n for (var i = 0; i < this._font.sbix.imageTables.length; i++) {\n var table = this._font.sbix.imageTables[i];\n if (table.ppem >= size) {\n break;\n }\n }\n var offsets = table.imageOffsets;\n var start = offsets[this.id];\n var end = offsets[this.id + 1];\n if (start === end) {\n return null;\n }\n this._font.stream.pos = start;\n return SBIXImage.decode(this._font.stream, {\n buflen: end - start\n });\n };\n _proto36.render = function render(ctx, size) {\n var img = this.getImageForSize(size);\n if (img != null) {\n var scale = size / this._font.unitsPerEm;\n ctx.image(img.data, {\n height: size,\n x: img.originX,\n y: (this.bbox.minY - img.originY) * scale\n });\n }\n if (this._font.sbix.flags.renderOutlines) {\n _TTFGlyph.prototype.render.call(this, ctx, size);\n }\n };\n return SBIXGlyph;\n}(TTFGlyph);\nvar COLRLayer = function COLRLayer(glyph, color) {\n this.glyph = glyph;\n this.color = color;\n};\n/**\r\n * Represents a color (e.g. emoji) glyph in Microsoft's COLR format.\r\n * Each glyph in this format contain a list of colored layers, each\r\n * of which is another vector glyph.\r\n */\nvar COLRGlyph = /*#__PURE__*/function (_Glyph3) {\n _inheritsLoose(COLRGlyph, _Glyph3);\n function COLRGlyph() {\n return _Glyph3.apply(this, arguments) || this;\n }\n var _proto37 = COLRGlyph.prototype;\n _proto37._getBBox = function _getBBox() {\n var bbox = new BBox();\n for (var i = 0; i < this.layers.length; i++) {\n var layer = this.layers[i];\n var b = layer.glyph.bbox;\n bbox.addPoint(b.minX, b.minY);\n bbox.addPoint(b.maxX, b.maxY);\n }\n return bbox;\n }\n /**\r\n * Returns an array of objects containing the glyph and color for\r\n * each layer in the composite color glyph.\r\n * @type {object[]}\r\n */;\n _proto37.render = function render(ctx, size) {\n for (var _iterator71 = _createForOfIteratorHelperLoose(this.layers), _step71; !(_step71 = _iterator71()).done;) {\n var _step71$value = _step71.value,\n glyph = _step71$value.glyph,\n color = _step71$value.color;\n ctx.fillColor([color.red, color.green, color.blue], color.alpha / 255 * 100);\n glyph.render(ctx, size);\n }\n return;\n };\n _createClass(COLRGlyph, [{\n key: \"layers\",\n get: function get() {\n var cpal = this._font.CPAL;\n var colr = this._font.COLR;\n var low = 0;\n var high = colr.baseGlyphRecord.length - 1;\n while (low <= high) {\n var mid = low + high >> 1;\n var rec = colr.baseGlyphRecord[mid];\n if (this.id < rec.gid) {\n high = mid - 1;\n } else if (this.id > rec.gid) {\n low = mid + 1;\n } else {\n var baseLayer = rec;\n break;\n }\n } // if base glyph not found in COLR table,\n // default to normal glyph from glyf or CFF\n\n if (baseLayer == null) {\n var g = this._font._getBaseGlyph(this.id);\n var color = {\n red: 0,\n green: 0,\n blue: 0,\n alpha: 255\n };\n return [new COLRLayer(g, color)];\n } // otherwise, return an array of all the layers\n\n var layers = [];\n for (var i = baseLayer.firstLayerIndex; i < baseLayer.firstLayerIndex + baseLayer.numLayers; i++) {\n var rec = colr.layerRecords[i];\n var color = cpal.colorRecords[rec.paletteIndex];\n var g = this._font._getBaseGlyph(rec.gid);\n layers.push(new COLRLayer(g, color));\n }\n return layers;\n }\n }]);\n return COLRGlyph;\n}(Glyph);\nvar TUPLES_SHARE_POINT_NUMBERS = 0x8000;\nvar TUPLE_COUNT_MASK = 0x0fff;\nvar EMBEDDED_TUPLE_COORD = 0x8000;\nvar INTERMEDIATE_TUPLE = 0x4000;\nvar PRIVATE_POINT_NUMBERS = 0x2000;\nvar TUPLE_INDEX_MASK = 0x0fff;\nvar POINTS_ARE_WORDS = 0x80;\nvar POINT_RUN_COUNT_MASK = 0x7f;\nvar DELTAS_ARE_ZERO = 0x80;\nvar DELTAS_ARE_WORDS = 0x40;\nvar DELTA_RUN_COUNT_MASK = 0x3f;\n/**\r\n * This class is transforms TrueType glyphs according to the data from\r\n * the Apple Advanced Typography variation tables (fvar, gvar, and avar).\r\n * These tables allow infinite adjustments to glyph weight, width, slant,\r\n * and optical size without the designer needing to specify every exact style.\r\n *\r\n * Apple's documentation for these tables is not great, so thanks to the\r\n * Freetype project for figuring much of this out.\r\n *\r\n * @private\r\n */\nvar GlyphVariationProcessor = /*#__PURE__*/function () {\n function GlyphVariationProcessor(font, coords) {\n this.font = font;\n this.normalizedCoords = this.normalizeCoords(coords);\n this.blendVectors = new Map();\n }\n var _proto38 = GlyphVariationProcessor.prototype;\n _proto38.normalizeCoords = function normalizeCoords(coords) {\n // the default mapping is linear along each axis, in two segments:\n // from the minValue to defaultValue, and from defaultValue to maxValue.\n var normalized = [];\n for (var i = 0; i < this.font.fvar.axis.length; i++) {\n var axis = this.font.fvar.axis[i];\n if (coords[i] < axis.defaultValue) {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.defaultValue - axis.minValue + Number.EPSILON));\n } else {\n normalized.push((coords[i] - axis.defaultValue + Number.EPSILON) / (axis.maxValue - axis.defaultValue + Number.EPSILON));\n }\n } // if there is an avar table, the normalized value is calculated\n // by interpolating between the two nearest mapped values.\n\n if (this.font.avar) {\n for (var i = 0; i < this.font.avar.segment.length; i++) {\n var segment = this.font.avar.segment[i];\n for (var j = 0; j < segment.correspondence.length; j++) {\n var pair = segment.correspondence[j];\n if (j >= 1 && normalized[i] < pair.fromCoord) {\n var prev = segment.correspondence[j - 1];\n normalized[i] = ((normalized[i] - prev.fromCoord) * (pair.toCoord - prev.toCoord) + Number.EPSILON) / (pair.fromCoord - prev.fromCoord + Number.EPSILON) + prev.toCoord;\n break;\n }\n }\n }\n }\n return normalized;\n };\n _proto38.transformPoints = function transformPoints(gid, glyphPoints) {\n if (!this.font.fvar || !this.font.gvar) {\n return;\n }\n var gvar = this.font.gvar;\n if (gid >= gvar.glyphCount) {\n return;\n }\n var offset = gvar.offsets[gid];\n if (offset === gvar.offsets[gid + 1]) {\n return;\n } // Read the gvar data for this glyph\n\n var stream = this.font.stream;\n stream.pos = offset;\n if (stream.pos >= stream.length) {\n return;\n }\n var tupleCount = stream.readUInt16BE();\n var offsetToData = offset + stream.readUInt16BE();\n if (tupleCount & TUPLES_SHARE_POINT_NUMBERS) {\n var here = stream.pos;\n stream.pos = offsetToData;\n var sharedPoints = this.decodePoints();\n offsetToData = stream.pos;\n stream.pos = here;\n }\n var origPoints = glyphPoints.map(function (pt) {\n return pt.copy();\n });\n tupleCount &= TUPLE_COUNT_MASK;\n for (var i = 0; i < tupleCount; i++) {\n var tupleDataSize = stream.readUInt16BE();\n var tupleIndex = stream.readUInt16BE();\n if (tupleIndex & EMBEDDED_TUPLE_COORD) {\n var tupleCoords = [];\n for (var a = 0; a < gvar.axisCount; a++) {\n tupleCoords.push(stream.readInt16BE() / 16384);\n }\n } else {\n if ((tupleIndex & TUPLE_INDEX_MASK) >= gvar.globalCoordCount) {\n throw new Error('Invalid gvar table');\n }\n var tupleCoords = gvar.globalCoords[tupleIndex & TUPLE_INDEX_MASK];\n }\n if (tupleIndex & INTERMEDIATE_TUPLE) {\n var startCoords = [];\n for (var _a = 0; _a < gvar.axisCount; _a++) {\n startCoords.push(stream.readInt16BE() / 16384);\n }\n var endCoords = [];\n for (var _a2 = 0; _a2 < gvar.axisCount; _a2++) {\n endCoords.push(stream.readInt16BE() / 16384);\n }\n } // Get the factor at which to apply this tuple\n\n var factor = this.tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords);\n if (factor === 0) {\n offsetToData += tupleDataSize;\n continue;\n }\n var here = stream.pos;\n stream.pos = offsetToData;\n if (tupleIndex & PRIVATE_POINT_NUMBERS) {\n var points = this.decodePoints();\n } else {\n var points = sharedPoints;\n } // points.length = 0 means there are deltas for all points\n\n var nPoints = points.length === 0 ? glyphPoints.length : points.length;\n var xDeltas = this.decodeDeltas(nPoints);\n var yDeltas = this.decodeDeltas(nPoints);\n if (points.length === 0) {\n // all points\n for (var _i = 0; _i < glyphPoints.length; _i++) {\n var point = glyphPoints[_i];\n point.x += Math.round(xDeltas[_i] * factor);\n point.y += Math.round(yDeltas[_i] * factor);\n }\n } else {\n var outPoints = origPoints.map(function (pt) {\n return pt.copy();\n });\n var hasDelta = glyphPoints.map(function () {\n return false;\n });\n for (var _i2 = 0; _i2 < points.length; _i2++) {\n var idx = points[_i2];\n if (idx < glyphPoints.length) {\n var _point = outPoints[idx];\n hasDelta[idx] = true;\n _point.x += Math.round(xDeltas[_i2] * factor);\n _point.y += Math.round(yDeltas[_i2] * factor);\n }\n }\n this.interpolateMissingDeltas(outPoints, origPoints, hasDelta);\n for (var _i3 = 0; _i3 < glyphPoints.length; _i3++) {\n var deltaX = outPoints[_i3].x - origPoints[_i3].x;\n var deltaY = outPoints[_i3].y - origPoints[_i3].y;\n glyphPoints[_i3].x += deltaX;\n glyphPoints[_i3].y += deltaY;\n }\n }\n offsetToData += tupleDataSize;\n stream.pos = here;\n }\n };\n _proto38.decodePoints = function decodePoints() {\n var stream = this.font.stream;\n var count = stream.readUInt8();\n if (count & POINTS_ARE_WORDS) {\n count = (count & POINT_RUN_COUNT_MASK) << 8 | stream.readUInt8();\n }\n var points = new Uint16Array(count);\n var i = 0;\n var point = 0;\n while (i < count) {\n var run = stream.readUInt8();\n var runCount = (run & POINT_RUN_COUNT_MASK) + 1;\n var fn = run & POINTS_ARE_WORDS ? stream.readUInt16 : stream.readUInt8;\n for (var j = 0; j < runCount && i < count; j++) {\n point += fn.call(stream);\n points[i++] = point;\n }\n }\n return points;\n };\n _proto38.decodeDeltas = function decodeDeltas(count) {\n var stream = this.font.stream;\n var i = 0;\n var deltas = new Int16Array(count);\n while (i < count) {\n var run = stream.readUInt8();\n var runCount = (run & DELTA_RUN_COUNT_MASK) + 1;\n if (run & DELTAS_ARE_ZERO) {\n i += runCount;\n } else {\n var fn = run & DELTAS_ARE_WORDS ? stream.readInt16BE : stream.readInt8;\n for (var j = 0; j < runCount && i < count; j++) {\n deltas[i++] = fn.call(stream);\n }\n }\n }\n return deltas;\n };\n _proto38.tupleFactor = function tupleFactor(tupleIndex, tupleCoords, startCoords, endCoords) {\n var normalized = this.normalizedCoords;\n var gvar = this.font.gvar;\n var factor = 1;\n for (var i = 0; i < gvar.axisCount; i++) {\n if (tupleCoords[i] === 0) {\n continue;\n }\n if (normalized[i] === 0) {\n return 0;\n }\n if ((tupleIndex & INTERMEDIATE_TUPLE) === 0) {\n if (normalized[i] < Math.min(0, tupleCoords[i]) || normalized[i] > Math.max(0, tupleCoords[i])) {\n return 0;\n }\n factor = (factor * normalized[i] + Number.EPSILON) / (tupleCoords[i] + Number.EPSILON);\n } else {\n if (normalized[i] < startCoords[i] || normalized[i] > endCoords[i]) {\n return 0;\n } else if (normalized[i] < tupleCoords[i]) {\n factor = factor * (normalized[i] - startCoords[i] + Number.EPSILON) / (tupleCoords[i] - startCoords[i] + Number.EPSILON);\n } else {\n factor = factor * (endCoords[i] - normalized[i] + Number.EPSILON) / (endCoords[i] - tupleCoords[i] + Number.EPSILON);\n }\n }\n }\n return factor;\n } // Interpolates points without delta values.\n // Needed for the Ø and Q glyphs in Skia.\n // Algorithm from Freetype.\n ;\n _proto38.interpolateMissingDeltas = function interpolateMissingDeltas(points, inPoints, hasDelta) {\n if (points.length === 0) {\n return;\n }\n var point = 0;\n while (point < points.length) {\n var firstPoint = point; // find the end point of the contour\n\n var endPoint = point;\n var pt = points[endPoint];\n while (!pt.endContour) {\n pt = points[++endPoint];\n } // find the first point that has a delta\n\n while (point <= endPoint && !hasDelta[point]) {\n point++;\n }\n if (point > endPoint) {\n continue;\n }\n var firstDelta = point;\n var curDelta = point;\n point++;\n while (point <= endPoint) {\n // find the next point with a delta, and interpolate intermediate points\n if (hasDelta[point]) {\n this.deltaInterpolate(curDelta + 1, point - 1, curDelta, point, inPoints, points);\n curDelta = point;\n }\n point++;\n } // shift contour if we only have a single delta\n\n if (curDelta === firstDelta) {\n this.deltaShift(firstPoint, endPoint, curDelta, inPoints, points);\n } else {\n // otherwise, handle the remaining points at the end and beginning of the contour\n this.deltaInterpolate(curDelta + 1, endPoint, curDelta, firstDelta, inPoints, points);\n if (firstDelta > 0) {\n this.deltaInterpolate(firstPoint, firstDelta - 1, curDelta, firstDelta, inPoints, points);\n }\n }\n point = endPoint + 1;\n }\n };\n _proto38.deltaInterpolate = function deltaInterpolate(p1, p2, ref1, ref2, inPoints, outPoints) {\n if (p1 > p2) {\n return;\n }\n var iterable = ['x', 'y'];\n for (var i = 0; i < iterable.length; i++) {\n var k = iterable[i];\n if (inPoints[ref1][k] > inPoints[ref2][k]) {\n var p = ref1;\n ref1 = ref2;\n ref2 = p;\n }\n var in1 = inPoints[ref1][k];\n var in2 = inPoints[ref2][k];\n var out1 = outPoints[ref1][k];\n var out2 = outPoints[ref2][k]; // If the reference points have the same coordinate but different\n // delta, inferred delta is zero. Otherwise interpolate.\n\n if (in1 !== in2 || out1 === out2) {\n var scale = in1 === in2 ? 0 : (out2 - out1) / (in2 - in1);\n for (var _p = p1; _p <= p2; _p++) {\n var out = inPoints[_p][k];\n if (out <= in1) {\n out += out1 - in1;\n } else if (out >= in2) {\n out += out2 - in2;\n } else {\n out = out1 + (out - in1) * scale;\n }\n outPoints[_p][k] = out;\n }\n }\n }\n };\n _proto38.deltaShift = function deltaShift(p1, p2, ref, inPoints, outPoints) {\n var deltaX = outPoints[ref].x - inPoints[ref].x;\n var deltaY = outPoints[ref].y - inPoints[ref].y;\n if (deltaX === 0 && deltaY === 0) {\n return;\n }\n for (var p = p1; p <= p2; p++) {\n if (p !== ref) {\n outPoints[p].x += deltaX;\n outPoints[p].y += deltaY;\n }\n }\n };\n _proto38.getAdvanceAdjustment = function getAdvanceAdjustment(gid, table) {\n var outerIndex, innerIndex;\n if (table.advanceWidthMapping) {\n var idx = gid;\n if (idx >= table.advanceWidthMapping.mapCount) {\n idx = table.advanceWidthMapping.mapCount - 1;\n }\n var entryFormat = table.advanceWidthMapping.entryFormat;\n var _table$advanceWidthMa = table.advanceWidthMapping.mapData[idx];\n outerIndex = _table$advanceWidthMa.outerIndex;\n innerIndex = _table$advanceWidthMa.innerIndex;\n } else {\n outerIndex = 0;\n innerIndex = gid;\n }\n return this.getDelta(table.itemVariationStore, outerIndex, innerIndex);\n } // See pseudo code from `Font Variations Overview'\n // in the OpenType specification.\n ;\n _proto38.getDelta = function getDelta(itemStore, outerIndex, innerIndex) {\n if (outerIndex >= itemStore.itemVariationData.length) {\n return 0;\n }\n var varData = itemStore.itemVariationData[outerIndex];\n if (innerIndex >= varData.deltaSets.length) {\n return 0;\n }\n var deltaSet = varData.deltaSets[innerIndex];\n var blendVector = this.getBlendVector(itemStore, outerIndex);\n var netAdjustment = 0;\n for (var master = 0; master < varData.regionIndexCount; master++) {\n netAdjustment += deltaSet.deltas[master] * blendVector[master];\n }\n return netAdjustment;\n };\n _proto38.getBlendVector = function getBlendVector(itemStore, outerIndex) {\n var varData = itemStore.itemVariationData[outerIndex];\n if (this.blendVectors.has(varData)) {\n return this.blendVectors.get(varData);\n }\n var normalizedCoords = this.normalizedCoords;\n var blendVector = []; // outer loop steps through master designs to be blended\n\n for (var master = 0; master < varData.regionIndexCount; master++) {\n var scalar = 1;\n var regionIndex = varData.regionIndexes[master];\n var axes = itemStore.variationRegionList.variationRegions[regionIndex]; // inner loop steps through axes in this region\n\n for (var j = 0; j < axes.length; j++) {\n var axis = axes[j];\n var axisScalar = void 0; // compute the scalar contribution of this axis\n // ignore invalid ranges\n\n if (axis.startCoord > axis.peakCoord || axis.peakCoord > axis.endCoord) {\n axisScalar = 1;\n } else if (axis.startCoord < 0 && axis.endCoord > 0 && axis.peakCoord !== 0) {\n axisScalar = 1; // peak of 0 means ignore this axis\n } else if (axis.peakCoord === 0) {\n axisScalar = 1; // ignore this region if coords are out of range\n } else if (normalizedCoords[j] < axis.startCoord || normalizedCoords[j] > axis.endCoord) {\n axisScalar = 0; // calculate a proportional factor\n } else {\n if (normalizedCoords[j] === axis.peakCoord) {\n axisScalar = 1;\n } else if (normalizedCoords[j] < axis.peakCoord) {\n axisScalar = (normalizedCoords[j] - axis.startCoord + Number.EPSILON) / (axis.peakCoord - axis.startCoord + Number.EPSILON);\n } else {\n axisScalar = (axis.endCoord - normalizedCoords[j] + Number.EPSILON) / (axis.endCoord - axis.peakCoord + Number.EPSILON);\n }\n } // take product of all the axis scalars\n\n scalar *= axisScalar;\n }\n blendVector[master] = scalar;\n }\n this.blendVectors.set(varData, blendVector);\n return blendVector;\n };\n return GlyphVariationProcessor;\n}();\nvar resolved = Promise.resolve();\nvar Subset = /*#__PURE__*/function () {\n function Subset(font) {\n this.font = font;\n this.glyphs = [];\n this.mapping = {}; // always include the missing glyph\n\n this.includeGlyph(0);\n }\n var _proto39 = Subset.prototype;\n _proto39.includeGlyph = function includeGlyph(glyph) {\n if (typeof glyph === 'object') {\n glyph = glyph.id;\n }\n if (this.mapping[glyph] == null) {\n this.glyphs.push(glyph);\n this.mapping[glyph] = this.glyphs.length - 1;\n }\n return this.mapping[glyph];\n };\n _proto39.encodeStream = function encodeStream() {\n var _this11 = this;\n var s = new r.EncodeStream();\n resolved.then(function () {\n _this11.encode(s);\n return s.end();\n });\n return s;\n };\n return Subset;\n}();\nvar ON_CURVE$1 = 1 << 0;\nvar X_SHORT_VECTOR$1 = 1 << 1;\nvar Y_SHORT_VECTOR$1 = 1 << 2;\nvar REPEAT$1 = 1 << 3;\nvar SAME_X$1 = 1 << 4;\nvar SAME_Y$1 = 1 << 5;\nvar Point$1 = /*#__PURE__*/function () {\n function Point$1() {}\n Point$1.size = function size(val) {\n return val >= 0 && val <= 255 ? 1 : 2;\n };\n Point$1.encode = function encode(stream, value) {\n if (value >= 0 && value <= 255) {\n stream.writeUInt8(value);\n } else {\n stream.writeInt16BE(value);\n }\n };\n return Point$1;\n}();\nvar Glyf = new r.Struct({\n numberOfContours: r.int16,\n // if negative, this is a composite glyph\n xMin: r.int16,\n yMin: r.int16,\n xMax: r.int16,\n yMax: r.int16,\n endPtsOfContours: new r.Array(r.uint16, 'numberOfContours'),\n instructions: new r.Array(r.uint8, r.uint16),\n flags: new r.Array(r.uint8, 0),\n xPoints: new r.Array(Point$1, 0),\n yPoints: new r.Array(Point$1, 0)\n});\n/**\r\n * Encodes TrueType glyph outlines\r\n */\nvar TTFGlyphEncoder = /*#__PURE__*/function () {\n function TTFGlyphEncoder() {}\n var _proto40 = TTFGlyphEncoder.prototype;\n _proto40.encodeSimple = function encodeSimple(path, instructions) {\n if (instructions === void 0) {\n instructions = [];\n }\n var endPtsOfContours = [];\n var xPoints = [];\n var yPoints = [];\n var flags = [];\n var same = 0;\n var lastX = 0,\n lastY = 0,\n lastFlag = 0;\n var pointCount = 0;\n for (var i = 0; i < path.commands.length; i++) {\n var c = path.commands[i];\n for (var j = 0; j < c.args.length; j += 2) {\n var x = c.args[j];\n var y = c.args[j + 1];\n var flag = 0; // If the ending point of a quadratic curve is the midpoint\n // between the control point and the control point of the next\n // quadratic curve, we can omit the ending point.\n\n if (c.command === 'quadraticCurveTo' && j === 2) {\n var next = path.commands[i + 1];\n if (next && next.command === 'quadraticCurveTo') {\n var midX = (lastX + next.args[0]) / 2;\n var midY = (lastY + next.args[1]) / 2;\n if (x === midX && y === midY) {\n continue;\n }\n }\n } // All points except control points are on curve.\n\n if (!(c.command === 'quadraticCurveTo' && j === 0)) {\n flag |= ON_CURVE$1;\n }\n flag = this._encodePoint(x, lastX, xPoints, flag, X_SHORT_VECTOR$1, SAME_X$1);\n flag = this._encodePoint(y, lastY, yPoints, flag, Y_SHORT_VECTOR$1, SAME_Y$1);\n if (flag === lastFlag && same < 255) {\n flags[flags.length - 1] |= REPEAT$1;\n same++;\n } else {\n if (same > 0) {\n flags.push(same);\n same = 0;\n }\n flags.push(flag);\n lastFlag = flag;\n }\n lastX = x;\n lastY = y;\n pointCount++;\n }\n if (c.command === 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n } // Close the path if the last command didn't already\n\n if (path.commands.length > 1 && path.commands[path.commands.length - 1].command !== 'closePath') {\n endPtsOfContours.push(pointCount - 1);\n }\n var bbox = path.bbox;\n var glyf = {\n numberOfContours: endPtsOfContours.length,\n xMin: bbox.minX,\n yMin: bbox.minY,\n xMax: bbox.maxX,\n yMax: bbox.maxY,\n endPtsOfContours: endPtsOfContours,\n instructions: instructions,\n flags: flags,\n xPoints: xPoints,\n yPoints: yPoints\n };\n var size = Glyf.size(glyf);\n var tail = 4 - size % 4;\n var stream = new r.EncodeStream(size + tail);\n Glyf.encode(stream, glyf); // Align to 4-byte length\n\n if (tail !== 0) {\n stream.fill(0, tail);\n }\n return stream.buffer;\n };\n _proto40._encodePoint = function _encodePoint(value, last, points, flag, shortFlag, sameFlag) {\n var diff = value - last;\n if (value === last) {\n flag |= sameFlag;\n } else {\n if (-255 <= diff && diff <= 255) {\n flag |= shortFlag;\n if (diff < 0) {\n diff = -diff;\n } else {\n flag |= sameFlag;\n }\n }\n points.push(diff);\n }\n return flag;\n };\n return TTFGlyphEncoder;\n}();\nvar TTFSubset = /*#__PURE__*/function (_Subset) {\n _inheritsLoose(TTFSubset, _Subset);\n function TTFSubset(font) {\n var _this12;\n _this12 = _Subset.call(this, font) || this;\n _this12.glyphEncoder = new TTFGlyphEncoder();\n return _this12;\n }\n var _proto41 = TTFSubset.prototype;\n _proto41._addGlyph = function _addGlyph(gid) {\n var glyph = this.font.getGlyph(gid);\n var glyf = glyph._decode(); // get the offset to the glyph from the loca table\n\n var curOffset = this.font.loca.offsets[gid];\n var nextOffset = this.font.loca.offsets[gid + 1];\n var stream = this.font._getTableStream('glyf');\n stream.pos += curOffset;\n var buffer = stream.readBuffer(nextOffset - curOffset); // if it is a compound glyph, include its components\n\n if (glyf && glyf.numberOfContours < 0) {\n buffer = Buffer.from(buffer);\n for (var _iterator72 = _createForOfIteratorHelperLoose(glyf.components), _step72; !(_step72 = _iterator72()).done;) {\n var component = _step72.value;\n gid = this.includeGlyph(component.glyphID);\n buffer.writeUInt16BE(gid, component.pos);\n }\n } else if (glyf && this.font._variationProcessor) {\n // If this is a TrueType variation glyph, re-encode the path\n buffer = this.glyphEncoder.encodeSimple(glyph.path, glyf.instructions);\n }\n this.glyf.push(buffer);\n this.loca.offsets.push(this.offset);\n this.hmtx.metrics.push({\n advance: glyph.advanceWidth,\n bearing: glyph._getMetrics().leftBearing\n });\n this.offset += buffer.length;\n return this.glyf.length - 1;\n };\n _proto41.encode = function encode(stream) {\n // tables required by PDF spec:\n // head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm\n //\n // additional tables required for standalone fonts:\n // name, cmap, OS/2, post\n this.glyf = [];\n this.offset = 0;\n this.loca = {\n offsets: [],\n version: this.font.loca.version\n };\n this.hmtx = {\n metrics: [],\n bearings: []\n }; // include all the glyphs\n // not using a for loop because we need to support adding more\n // glyphs to the array as we go, and CoffeeScript caches the length.\n\n var i = 0;\n while (i < this.glyphs.length) {\n this._addGlyph(this.glyphs[i++]);\n }\n var maxp = cloneDeep(this.font.maxp);\n maxp.numGlyphs = this.glyf.length;\n this.loca.offsets.push(this.offset);\n var head = cloneDeep(this.font.head);\n head.indexToLocFormat = this.loca.version;\n var hhea = cloneDeep(this.font.hhea);\n hhea.numberOfMetrics = this.hmtx.metrics.length; // map = []\n // for index in [0...256]\n // if index < @numGlyphs\n // map[index] = index\n // else\n // map[index] = 0\n //\n // cmapTable =\n // version: 0\n // length: 262\n // language: 0\n // codeMap: map\n //\n // cmap =\n // version: 0\n // numSubtables: 1\n // tables: [\n // platformID: 1\n // encodingID: 0\n // table: cmapTable\n // ]\n // TODO: subset prep, cvt, fpgm?\n\n Directory.encode(stream, {\n tables: {\n head: head,\n hhea: hhea,\n loca: this.loca,\n maxp: maxp,\n 'cvt ': this.font['cvt '],\n prep: this.font.prep,\n glyf: this.glyf,\n hmtx: this.hmtx,\n fpgm: this.font.fpgm // name: clone @font.name\n // 'OS/2': clone @font['OS/2']\n // post: clone @font.post\n // cmap: cmap\n }\n });\n };\n return TTFSubset;\n}(Subset);\nvar CFFSubset = /*#__PURE__*/function (_Subset2) {\n _inheritsLoose(CFFSubset, _Subset2);\n function CFFSubset(font) {\n var _this13;\n _this13 = _Subset2.call(this, font) || this;\n _this13.cff = _this13.font['CFF '];\n if (!_this13.cff) {\n throw new Error('Not a CFF Font');\n }\n return _this13;\n }\n var _proto42 = CFFSubset.prototype;\n _proto42.subsetCharstrings = function subsetCharstrings() {\n this.charstrings = [];\n var gsubrs = {};\n for (var _iterator73 = _createForOfIteratorHelperLoose(this.glyphs), _step73; !(_step73 = _iterator73()).done;) {\n var gid = _step73.value;\n this.charstrings.push(this.cff.getCharString(gid));\n var glyph = this.font.getGlyph(gid);\n var path = glyph.path; // this causes the glyph to be parsed\n\n for (var subr in glyph._usedGsubrs) {\n gsubrs[subr] = true;\n }\n }\n this.gsubrs = this.subsetSubrs(this.cff.globalSubrIndex, gsubrs);\n };\n _proto42.subsetSubrs = function subsetSubrs(subrs, used) {\n var res = [];\n for (var i = 0; i < subrs.length; i++) {\n var subr = subrs[i];\n if (used[i]) {\n this.cff.stream.pos = subr.offset;\n res.push(this.cff.stream.readBuffer(subr.length));\n } else {\n res.push(Buffer.from([11])); // return\n }\n }\n return res;\n };\n _proto42.subsetFontdict = function subsetFontdict(topDict) {\n topDict.FDArray = [];\n topDict.FDSelect = {\n version: 0,\n fds: []\n };\n var used_fds = {};\n var used_subrs = [];\n var fd_select = {};\n for (var _iterator74 = _createForOfIteratorHelperLoose(this.glyphs), _step74; !(_step74 = _iterator74()).done;) {\n var gid = _step74.value;\n var fd = this.cff.fdForGlyph(gid);\n if (fd == null) {\n continue;\n }\n if (!used_fds[fd]) {\n topDict.FDArray.push(Object.assign({}, this.cff.topDict.FDArray[fd]));\n used_subrs.push({});\n fd_select[fd] = topDict.FDArray.length - 1;\n }\n used_fds[fd] = true;\n topDict.FDSelect.fds.push(fd_select[fd]);\n var glyph = this.font.getGlyph(gid);\n var path = glyph.path; // this causes the glyph to be parsed\n\n for (var subr in glyph._usedSubrs) {\n used_subrs[fd_select[fd]][subr] = true;\n }\n }\n for (var i = 0; i < topDict.FDArray.length; i++) {\n var dict = topDict.FDArray[i];\n delete dict.FontName;\n if (dict.Private && dict.Private.Subrs) {\n dict.Private = Object.assign({}, dict.Private);\n dict.Private.Subrs = this.subsetSubrs(dict.Private.Subrs, used_subrs[i]);\n }\n }\n return;\n };\n _proto42.createCIDFontdict = function createCIDFontdict(topDict) {\n var used_subrs = {};\n for (var _iterator75 = _createForOfIteratorHelperLoose(this.glyphs), _step75; !(_step75 = _iterator75()).done;) {\n var gid = _step75.value;\n var glyph = this.font.getGlyph(gid);\n var path = glyph.path; // this causes the glyph to be parsed\n\n for (var subr in glyph._usedSubrs) {\n used_subrs[subr] = true;\n }\n }\n var privateDict = Object.assign({}, this.cff.topDict.Private);\n if (this.cff.topDict.Private && this.cff.topDict.Private.Subrs) {\n privateDict.Subrs = this.subsetSubrs(this.cff.topDict.Private.Subrs, used_subrs);\n }\n topDict.FDArray = [{\n Private: privateDict\n }];\n return topDict.FDSelect = {\n version: 3,\n nRanges: 1,\n ranges: [{\n first: 0,\n fd: 0\n }],\n sentinel: this.charstrings.length\n };\n };\n _proto42.addString = function addString(string) {\n if (!string) {\n return null;\n }\n if (!this.strings) {\n this.strings = [];\n }\n this.strings.push(string);\n return standardStrings.length + this.strings.length - 1;\n };\n _proto42.encode = function encode(stream) {\n this.subsetCharstrings();\n var charset = {\n version: this.charstrings.length > 255 ? 2 : 1,\n ranges: [{\n first: 1,\n nLeft: this.charstrings.length - 2\n }]\n };\n var topDict = Object.assign({}, this.cff.topDict);\n topDict.Private = null;\n topDict.charset = charset;\n topDict.Encoding = null;\n topDict.CharStrings = this.charstrings;\n for (var _i24 = 0, _arr2 = ['version', 'Notice', 'Copyright', 'FullName', 'FamilyName', 'Weight', 'PostScript', 'BaseFontName', 'FontName']; _i24 < _arr2.length; _i24++) {\n var key = _arr2[_i24];\n topDict[key] = this.addString(this.cff.string(topDict[key]));\n }\n topDict.ROS = [this.addString('Adobe'), this.addString('Identity'), 0];\n topDict.CIDCount = this.charstrings.length;\n if (this.cff.isCIDFont) {\n this.subsetFontdict(topDict);\n } else {\n this.createCIDFontdict(topDict);\n }\n var top = {\n version: 1,\n hdrSize: this.cff.hdrSize,\n offSize: 4,\n header: this.cff.header,\n nameIndex: [this.cff.postscriptName],\n topDictIndex: [topDict],\n stringIndex: this.strings,\n globalSubrIndex: this.gsubrs\n };\n CFFTop.encode(stream, top);\n };\n return CFFSubset;\n}(Subset);\nvar _class$4;\n/**\r\n * This is the base class for all SFNT-based font formats in fontkit.\r\n * It supports TrueType, and PostScript glyphs, and several color glyph formats.\r\n */\n\nvar TTFFont = (_class$4 = /*#__PURE__*/function () {\n TTFFont.probe = function probe(buffer) {\n var format = buffer.toString('ascii', 0, 4);\n return format === 'true' || format === 'OTTO' || format === String.fromCharCode(0, 1, 0, 0);\n };\n function TTFFont(stream, variationCoords) {\n if (variationCoords === void 0) {\n variationCoords = null;\n }\n this.defaultLanguage = null;\n this.stream = stream;\n this.variationCoords = variationCoords;\n this._directoryPos = this.stream.pos;\n this._tables = {};\n this._glyphs = {};\n this._decodeDirectory(); // define properties for each table to lazily parse\n\n for (var tag in this.directory.tables) {\n var table = this.directory.tables[tag];\n if (tables[tag] && table.length > 0) {\n Object.defineProperty(this, tag, {\n get: this._getTable.bind(this, table)\n });\n }\n }\n }\n var _proto43 = TTFFont.prototype;\n _proto43.setDefaultLanguage = function setDefaultLanguage(lang) {\n if (lang === void 0) {\n lang = null;\n }\n this.defaultLanguage = lang;\n };\n _proto43._getTable = function _getTable(table) {\n if (!(table.tag in this._tables)) {\n try {\n this._tables[table.tag] = this._decodeTable(table);\n } catch (e) {\n if (fontkit.logErrors) {\n console.error(\"Error decoding table \".concat(table.tag));\n console.error(e.stack);\n }\n }\n }\n return this._tables[table.tag];\n };\n _proto43._getTableStream = function _getTableStream(tag) {\n var table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n return this.stream;\n }\n return null;\n };\n _proto43._decodeDirectory = function _decodeDirectory() {\n return this.directory = Directory.decode(this.stream, {\n _startOffset: 0\n });\n };\n _proto43._decodeTable = function _decodeTable(table) {\n var pos = this.stream.pos;\n var stream = this._getTableStream(table.tag);\n var result = tables[table.tag].decode(stream, this, table.length);\n this.stream.pos = pos;\n return result;\n }\n /**\r\n * Gets a string from the font's `name` table\r\n * `lang` is a BCP-47 language code.\r\n * @return {string}\r\n */;\n _proto43.getName = function getName(key, lang) {\n if (lang === void 0) {\n lang = this.defaultLanguage || fontkit.defaultLanguage;\n }\n var record = this.name && this.name.records[key];\n if (record) {\n // Attempt to retrieve the entry, depending on which translation is available:\n return record[lang] || record[this.defaultLanguage] || record[fontkit.defaultLanguage] || record['en'] || record[Object.keys(record)[0]] // Seriously, ANY language would be fine\n || null;\n }\n return null;\n }\n /**\r\n * The unique PostScript name for this font, e.g. \"Helvetica-Bold\"\r\n * @type {string}\r\n */;\n /**\r\n * Returns whether there is glyph in the font for the given unicode code point.\r\n *\r\n * @param {number} codePoint\r\n * @return {boolean}\r\n */\n _proto43.hasGlyphForCodePoint = function hasGlyphForCodePoint(codePoint) {\n return !!this._cmapProcessor.lookup(codePoint);\n }\n /**\r\n * Maps a single unicode code point to a Glyph object.\r\n * Does not perform any advanced substitutions (there is no context to do so).\r\n *\r\n * @param {number} codePoint\r\n * @return {Glyph}\r\n */;\n _proto43.glyphForCodePoint = function glyphForCodePoint(codePoint) {\n return this.getGlyph(this._cmapProcessor.lookup(codePoint), [codePoint]);\n }\n /**\r\n * Returns an array of Glyph objects for the given string.\r\n * This is only a one-to-one mapping from characters to glyphs.\r\n * For most uses, you should use font.layout (described below), which\r\n * provides a much more advanced mapping supporting AAT and OpenType shaping.\r\n *\r\n * @param {string} string\r\n * @return {Glyph[]}\r\n */;\n _proto43.glyphsForString = function glyphsForString(string) {\n var glyphs = [];\n var len = string.length;\n var idx = 0;\n var last = -1;\n var state = -1;\n while (idx <= len) {\n var code = 0;\n var nextState = 0;\n if (idx < len) {\n // Decode the next codepoint from UTF 16\n code = string.charCodeAt(idx++);\n if (0xd800 <= code && code <= 0xdbff && idx < len) {\n var next = string.charCodeAt(idx);\n if (0xdc00 <= next && next <= 0xdfff) {\n idx++;\n code = ((code & 0x3ff) << 10) + (next & 0x3ff) + 0x10000;\n }\n } // Compute the next state: 1 if the next codepoint is a variation selector, 0 otherwise.\n\n nextState = 0xfe00 <= code && code <= 0xfe0f || 0xe0100 <= code && code <= 0xe01ef ? 1 : 0;\n } else {\n idx++;\n }\n if (state === 0 && nextState === 1) {\n // Variation selector following normal codepoint.\n glyphs.push(this.getGlyph(this._cmapProcessor.lookup(last, code), [last, code]));\n } else if (state === 0 && nextState === 0) {\n // Normal codepoint following normal codepoint.\n glyphs.push(this.glyphForCodePoint(last));\n }\n last = code;\n state = nextState;\n }\n return glyphs;\n };\n /**\r\n * Returns a GlyphRun object, which includes an array of Glyphs and GlyphPositions for the given string.\r\n *\r\n * @param {string} string\r\n * @param {string[]} [userFeatures]\r\n * @param {string} [script]\r\n * @param {string} [language]\r\n * @param {string} [direction]\r\n * @return {GlyphRun}\r\n */\n _proto43.layout = function layout(string, userFeatures, script, language, direction) {\n return this._layoutEngine.layout(string, userFeatures, script, language, direction);\n }\n /**\r\n * Returns an array of strings that map to the given glyph id.\r\n * @param {number} gid - glyph id\r\n */;\n _proto43.stringsForGlyph = function stringsForGlyph(gid) {\n return this._layoutEngine.stringsForGlyph(gid);\n }\n /**\r\n * An array of all [OpenType feature tags](https://www.microsoft.com/typography/otspec/featuretags.htm)\r\n * (or mapped AAT tags) supported by the font.\r\n * The features parameter is an array of OpenType feature tags to be applied in addition to the default set.\r\n * If this is an AAT font, the OpenType feature tags are mapped to AAT features.\r\n *\r\n * @type {string[]}\r\n */;\n _proto43.getAvailableFeatures = function getAvailableFeatures(script, language) {\n return this._layoutEngine.getAvailableFeatures(script, language);\n };\n _proto43._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n if (characters === void 0) {\n characters = [];\n }\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf) {\n this._glyphs[glyph] = new TTFGlyph(glyph, characters, this);\n } else if (this.directory.tables['CFF '] || this.directory.tables.CFF2) {\n this._glyphs[glyph] = new CFFGlyph(glyph, characters, this);\n }\n }\n return this._glyphs[glyph] || null;\n }\n /**\r\n * Returns a glyph object for the given glyph id.\r\n * You can pass the array of code points this glyph represents for\r\n * your use later, and it will be stored in the glyph object.\r\n *\r\n * @param {number} glyph\r\n * @param {number[]} characters\r\n * @return {Glyph}\r\n */;\n _proto43.getGlyph = function getGlyph(glyph, characters) {\n if (characters === void 0) {\n characters = [];\n }\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.sbix) {\n this._glyphs[glyph] = new SBIXGlyph(glyph, characters, this);\n } else if (this.directory.tables.COLR && this.directory.tables.CPAL) {\n this._glyphs[glyph] = new COLRGlyph(glyph, characters, this);\n } else {\n this._getBaseGlyph(glyph, characters);\n }\n }\n return this._glyphs[glyph] || null;\n }\n /**\r\n * Returns a Subset for this font.\r\n * @return {Subset}\r\n */;\n _proto43.createSubset = function createSubset() {\n if (this.directory.tables['CFF ']) {\n return new CFFSubset(this);\n }\n return new TTFSubset(this);\n }\n /**\r\n * Returns an object describing the available variation axes\r\n * that this font supports. Keys are setting tags, and values\r\n * contain the axis name, range, and default value.\r\n *\r\n * @type {object}\r\n */;\n /**\r\n * Returns a new font with the given variation settings applied.\r\n * Settings can either be an instance name, or an object containing\r\n * variation tags as specified by the `variationAxes` property.\r\n *\r\n * @param {object} settings\r\n * @return {TTFFont}\r\n */\n _proto43.getVariation = function getVariation(settings) {\n if (!(this.directory.tables.fvar && (this.directory.tables.gvar && this.directory.tables.glyf || this.directory.tables.CFF2))) {\n throw new Error('Variations require a font with the fvar, gvar and glyf, or CFF2 tables.');\n }\n if (typeof settings === 'string') {\n settings = this.namedVariations[settings];\n }\n if (typeof settings !== 'object') {\n throw new Error('Variation settings must be either a variation name or settings object.');\n } // normalize the coordinates\n\n var coords = this.fvar.axis.map(function (axis, i) {\n var axisTag = axis.axisTag.trim();\n if (axisTag in settings) {\n return Math.max(axis.minValue, Math.min(axis.maxValue, settings[axisTag]));\n } else {\n return axis.defaultValue;\n }\n });\n var stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = this._directoryPos;\n var font = new TTFFont(stream, coords);\n font._tables = this._tables;\n return font;\n };\n // Standardized format plugin API\n _proto43.getFont = function getFont(name) {\n return this.getVariation(name);\n };\n _createClass(TTFFont, [{\n key: \"postscriptName\",\n get: function get() {\n return this.getName('postscriptName');\n }\n /**\r\n * The font's full name, e.g. \"Helvetica Bold\"\r\n * @type {string}\r\n */\n }, {\n key: \"fullName\",\n get: function get() {\n return this.getName('fullName');\n }\n /**\r\n * The font's family name, e.g. \"Helvetica\"\r\n * @type {string}\r\n */\n }, {\n key: \"familyName\",\n get: function get() {\n return this.getName('fontFamily');\n }\n /**\r\n * The font's sub-family, e.g. \"Bold\".\r\n * @type {string}\r\n */\n }, {\n key: \"subfamilyName\",\n get: function get() {\n return this.getName('fontSubfamily');\n }\n /**\r\n * The font's copyright information\r\n * @type {string}\r\n */\n }, {\n key: \"copyright\",\n get: function get() {\n return this.getName('copyright');\n }\n /**\r\n * The font's version number\r\n * @type {string}\r\n */\n }, {\n key: \"version\",\n get: function get() {\n return this.getName('version');\n }\n /**\r\n * The font’s [ascender](https://en.wikipedia.org/wiki/Ascender_(typography))\r\n * @type {number}\r\n */\n }, {\n key: \"ascent\",\n get: function get() {\n return this.hhea.ascent;\n }\n /**\r\n * The font’s [descender](https://en.wikipedia.org/wiki/Descender)\r\n * @type {number}\r\n */\n }, {\n key: \"descent\",\n get: function get() {\n return this.hhea.descent;\n }\n /**\r\n * The amount of space that should be included between lines\r\n * @type {number}\r\n */\n }, {\n key: \"lineGap\",\n get: function get() {\n return this.hhea.lineGap;\n }\n /**\r\n * The offset from the normal underline position that should be used\r\n * @type {number}\r\n */\n }, {\n key: \"underlinePosition\",\n get: function get() {\n return this.post.underlinePosition;\n }\n /**\r\n * The weight of the underline that should be used\r\n * @type {number}\r\n */\n }, {\n key: \"underlineThickness\",\n get: function get() {\n return this.post.underlineThickness;\n }\n /**\r\n * If this is an italic font, the angle the cursor should be drawn at to match the font design\r\n * @type {number}\r\n */\n }, {\n key: \"italicAngle\",\n get: function get() {\n return this.post.italicAngle;\n }\n /**\r\n * The height of capital letters above the baseline.\r\n * See [here](https://en.wikipedia.org/wiki/Cap_height) for more details.\r\n * @type {number}\r\n */\n }, {\n key: \"capHeight\",\n get: function get() {\n var os2 = this['OS/2'];\n return os2 ? os2.capHeight : this.ascent;\n }\n /**\r\n * The height of lower case letters in the font.\r\n * See [here](https://en.wikipedia.org/wiki/X-height) for more details.\r\n * @type {number}\r\n */\n }, {\n key: \"xHeight\",\n get: function get() {\n var os2 = this['OS/2'];\n return os2 ? os2.xHeight : 0;\n }\n /**\r\n * The number of glyphs in the font.\r\n * @type {number}\r\n */\n }, {\n key: \"numGlyphs\",\n get: function get() {\n return this.maxp.numGlyphs;\n }\n /**\r\n * The size of the font’s internal coordinate grid\r\n * @type {number}\r\n */\n }, {\n key: \"unitsPerEm\",\n get: function get() {\n return this.head.unitsPerEm;\n }\n /**\r\n * The font’s bounding box, i.e. the box that encloses all glyphs in the font.\r\n * @type {BBox}\r\n */\n }, {\n key: \"bbox\",\n get: function get() {\n return Object.freeze(new BBox(this.head.xMin, this.head.yMin, this.head.xMax, this.head.yMax));\n }\n }, {\n key: \"_cmapProcessor\",\n get: function get() {\n return new CmapProcessor(this.cmap);\n }\n /**\r\n * An array of all of the unicode code points supported by the font.\r\n * @type {number[]}\r\n */\n }, {\n key: \"characterSet\",\n get: function get() {\n return this._cmapProcessor.getCharacterSet();\n }\n }, {\n key: \"_layoutEngine\",\n get: function get() {\n return new LayoutEngine(this);\n }\n }, {\n key: \"availableFeatures\",\n get: function get() {\n return this._layoutEngine.getAvailableFeatures();\n }\n }, {\n key: \"variationAxes\",\n get: function get() {\n var res = {};\n if (!this.fvar) {\n return res;\n }\n for (var _iterator76 = _createForOfIteratorHelperLoose(this.fvar.axis), _step76; !(_step76 = _iterator76()).done;) {\n var axis = _step76.value;\n res[axis.axisTag.trim()] = {\n name: axis.name.en,\n min: axis.minValue,\n default: axis.defaultValue,\n max: axis.maxValue\n };\n }\n return res;\n }\n /**\r\n * Returns an object describing the named variation instances\r\n * that the font designer has specified. Keys are variation names\r\n * and values are the variation settings for this instance.\r\n *\r\n * @type {object}\r\n */\n }, {\n key: \"namedVariations\",\n get: function get() {\n var res = {};\n if (!this.fvar) {\n return res;\n }\n for (var _iterator77 = _createForOfIteratorHelperLoose(this.fvar.instance), _step77; !(_step77 = _iterator77()).done;) {\n var instance = _step77.value;\n var settings = {};\n for (var i = 0; i < this.fvar.axis.length; i++) {\n var axis = this.fvar.axis[i];\n settings[axis.axisTag.trim()] = instance.coord[i];\n }\n res[instance.name.en] = settings;\n }\n return res;\n }\n }, {\n key: \"_variationProcessor\",\n get: function get() {\n if (!this.fvar) {\n return null;\n }\n var variationCoords = this.variationCoords; // Ignore if no variation coords and not CFF2\n\n if (!variationCoords && !this.CFF2) {\n return null;\n }\n if (!variationCoords) {\n variationCoords = this.fvar.axis.map(function (axis) {\n return axis.defaultValue;\n });\n }\n return new GlyphVariationProcessor(this, variationCoords);\n }\n }]);\n return TTFFont;\n}(), (_applyDecoratedDescriptor(_class$4.prototype, \"bbox\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"bbox\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_cmapProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_cmapProcessor\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"characterSet\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"characterSet\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_layoutEngine\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_layoutEngine\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"variationAxes\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"variationAxes\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"namedVariations\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"namedVariations\"), _class$4.prototype), _applyDecoratedDescriptor(_class$4.prototype, \"_variationProcessor\", [cache], Object.getOwnPropertyDescriptor(_class$4.prototype, \"_variationProcessor\"), _class$4.prototype)), _class$4);\nvar WOFFDirectoryEntry = new r.Struct({\n tag: new r.String(4),\n offset: new r.Pointer(r.uint32, 'void', {\n type: 'global'\n }),\n compLength: r.uint32,\n length: r.uint32,\n origChecksum: r.uint32\n});\nvar WOFFDirectory = new r.Struct({\n tag: new r.String(4),\n // should be 'wOFF'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFFDirectoryEntry, 'numTables')\n});\nWOFFDirectory.process = function () {\n var tables = {};\n for (var _iterator78 = _createForOfIteratorHelperLoose(this.tables), _step78; !(_step78 = _iterator78()).done;) {\n var table = _step78.value;\n tables[table.tag] = table;\n }\n this.tables = tables;\n};\nvar WOFFFont = /*#__PURE__*/function (_TTFFont) {\n _inheritsLoose(WOFFFont, _TTFFont);\n function WOFFFont() {\n return _TTFFont.apply(this, arguments) || this;\n }\n WOFFFont.probe = function probe(buffer) {\n return buffer.toString('ascii', 0, 4) === 'wOFF';\n };\n var _proto44 = WOFFFont.prototype;\n _proto44._decodeDirectory = function _decodeDirectory() {\n this.directory = WOFFDirectory.decode(this.stream, {\n _startOffset: 0\n });\n };\n _proto44._getTableStream = function _getTableStream(tag) {\n var table = this.directory.tables[tag];\n if (table) {\n this.stream.pos = table.offset;\n if (table.compLength < table.length) {\n this.stream.pos += 2; // skip deflate header\n\n var outBuffer = Buffer.alloc(table.length);\n var buf = inflate(this.stream.readBuffer(table.compLength - 2), outBuffer);\n return new r.DecodeStream(buf);\n } else {\n return this.stream;\n }\n }\n return null;\n };\n return WOFFFont;\n}(TTFFont);\n/**\r\n * Represents a TrueType glyph in the WOFF2 format, which compresses glyphs differently.\r\n */\nvar WOFF2Glyph = /*#__PURE__*/function (_TTFGlyph2) {\n _inheritsLoose(WOFF2Glyph, _TTFGlyph2);\n function WOFF2Glyph() {\n return _TTFGlyph2.apply(this, arguments) || this;\n }\n var _proto45 = WOFF2Glyph.prototype;\n _proto45._decode = function _decode() {\n // We have to decode in advance (in WOFF2Font), so just return the pre-decoded data.\n return this._font._transformedGlyphs[this.id];\n };\n _proto45._getCBox = function _getCBox() {\n return this.path.bbox;\n };\n return WOFF2Glyph;\n}(TTFGlyph);\nvar Base128 = {\n decode: function decode(stream) {\n var result = 0;\n var iterable = [0, 1, 2, 3, 4];\n for (var j = 0; j < iterable.length; j++) {\n var code = stream.readUInt8(); // If any of the top seven bits are set then we're about to overflow.\n\n if (result & 0xe0000000) {\n throw new Error('Overflow');\n }\n result = result << 7 | code & 0x7f;\n if ((code & 0x80) === 0) {\n return result;\n }\n }\n throw new Error('Bad base 128 number');\n }\n};\nvar knownTags = ['cmap', 'head', 'hhea', 'hmtx', 'maxp', 'name', 'OS/2', 'post', 'cvt ', 'fpgm', 'glyf', 'loca', 'prep', 'CFF ', 'VORG', 'EBDT', 'EBLC', 'gasp', 'hdmx', 'kern', 'LTSH', 'PCLT', 'VDMX', 'vhea', 'vmtx', 'BASE', 'GDEF', 'GPOS', 'GSUB', 'EBSC', 'JSTF', 'MATH', 'CBDT', 'CBLC', 'COLR', 'CPAL', 'SVG ', 'sbix', 'acnt', 'avar', 'bdat', 'bloc', 'bsln', 'cvar', 'fdsc', 'feat', 'fmtx', 'fvar', 'gvar', 'hsty', 'just', 'lcar', 'mort', 'morx', 'opbd', 'prop', 'trak', 'Zapf', 'Silf', 'Glat', 'Gloc', 'Feat', 'Sill'];\nvar WOFF2DirectoryEntry = new r.Struct({\n flags: r.uint8,\n customTag: new r.Optional(new r.String(4), function (t) {\n return (t.flags & 0x3f) === 0x3f;\n }),\n tag: function tag(t) {\n return t.customTag || knownTags[t.flags & 0x3f];\n },\n // || (() => { throw new Error(`Bad tag: ${flags & 0x3f}`); })(); },\n length: Base128,\n transformVersion: function transformVersion(t) {\n return t.flags >>> 6 & 0x03;\n },\n transformed: function transformed(t) {\n return t.tag === 'glyf' || t.tag === 'loca' ? t.transformVersion === 0 : t.transformVersion !== 0;\n },\n transformLength: new r.Optional(Base128, function (t) {\n return t.transformed;\n })\n});\nvar WOFF2Directory = new r.Struct({\n tag: new r.String(4),\n // should be 'wOF2'\n flavor: r.uint32,\n length: r.uint32,\n numTables: r.uint16,\n reserved: new r.Reserved(r.uint16),\n totalSfntSize: r.uint32,\n totalCompressedSize: r.uint32,\n majorVersion: r.uint16,\n minorVersion: r.uint16,\n metaOffset: r.uint32,\n metaLength: r.uint32,\n metaOrigLength: r.uint32,\n privOffset: r.uint32,\n privLength: r.uint32,\n tables: new r.Array(WOFF2DirectoryEntry, 'numTables')\n});\nWOFF2Directory.process = function () {\n var tables = {};\n for (var i = 0; i < this.tables.length; i++) {\n var table = this.tables[i];\n tables[table.tag] = table;\n }\n return this.tables = tables;\n};\n\n/**\r\n * Subclass of TTFFont that represents a TTF/OTF font compressed by WOFF2\r\n * See spec here: http://www.w3.org/TR/WOFF2/\r\n */\nvar WOFF2Font = /*#__PURE__*/function (_TTFFont2) {\n _inheritsLoose(WOFF2Font, _TTFFont2);\n function WOFF2Font() {\n return _TTFFont2.apply(this, arguments) || this;\n }\n WOFF2Font.probe = function probe(buffer) {\n return buffer.toString('ascii', 0, 4) === 'wOF2';\n };\n var _proto46 = WOFF2Font.prototype;\n _proto46._decodeDirectory = function _decodeDirectory() {\n this.directory = WOFF2Directory.decode(this.stream);\n this._dataPos = this.stream.pos;\n };\n _proto46._decompress = function _decompress() {\n // decompress data and setup table offsets if we haven't already\n if (!this._decompressed) {\n this.stream.pos = this._dataPos;\n var buffer = this.stream.readBuffer(this.directory.totalCompressedSize);\n var decompressedSize = 0;\n for (var tag in this.directory.tables) {\n var entry = this.directory.tables[tag];\n entry.offset = decompressedSize;\n decompressedSize += entry.transformLength != null ? entry.transformLength : entry.length;\n }\n var decompressed = brotli(buffer, decompressedSize);\n if (!decompressed) {\n throw new Error('Error decoding compressed data in WOFF2');\n }\n this.stream = new r.DecodeStream(Buffer.from(decompressed));\n this._decompressed = true;\n }\n };\n _proto46._decodeTable = function _decodeTable(table) {\n this._decompress();\n return _TTFFont2.prototype._decodeTable.call(this, table);\n } // Override this method to get a glyph and return our\n // custom subclass if there is a glyf table.\n ;\n _proto46._getBaseGlyph = function _getBaseGlyph(glyph, characters) {\n if (characters === void 0) {\n characters = [];\n }\n if (!this._glyphs[glyph]) {\n if (this.directory.tables.glyf && this.directory.tables.glyf.transformed) {\n if (!this._transformedGlyphs) {\n this._transformGlyfTable();\n }\n return this._glyphs[glyph] = new WOFF2Glyph(glyph, characters, this);\n } else {\n return _TTFFont2.prototype._getBaseGlyph.call(this, glyph, characters);\n }\n }\n };\n _proto46._transformGlyfTable = function _transformGlyfTable() {\n this._decompress();\n this.stream.pos = this.directory.tables.glyf.offset;\n var table = GlyfTable.decode(this.stream);\n var glyphs = [];\n for (var index = 0; index < table.numGlyphs; index++) {\n var glyph = {};\n var nContours = table.nContours.readInt16BE();\n glyph.numberOfContours = nContours;\n if (nContours > 0) {\n // simple glyph\n var nPoints = [];\n var totalPoints = 0;\n for (var i = 0; i < nContours; i++) {\n var _r = read255UInt16(table.nPoints);\n totalPoints += _r;\n nPoints.push(totalPoints);\n }\n glyph.points = decodeTriplet(table.flags, table.glyphs, totalPoints);\n for (var _i = 0; _i < nContours; _i++) {\n glyph.points[nPoints[_i] - 1].endContour = true;\n }\n var instructionSize = read255UInt16(table.glyphs);\n } else if (nContours < 0) {\n // composite glyph\n var haveInstructions = TTFGlyph.prototype._decodeComposite.call({\n _font: this\n }, glyph, table.composites);\n if (haveInstructions) {\n var instructionSize = read255UInt16(table.glyphs);\n }\n }\n glyphs.push(glyph);\n }\n this._transformedGlyphs = glyphs;\n };\n return WOFF2Font;\n}(TTFFont); // Special class that accepts a length and returns a sub-stream for that data\nvar Substream = /*#__PURE__*/function () {\n function Substream(length) {\n this.length = length;\n this._buf = new r.Buffer(length);\n }\n var _proto47 = Substream.prototype;\n _proto47.decode = function decode(stream, parent) {\n return new r.DecodeStream(this._buf.decode(stream, parent));\n };\n return Substream;\n}(); // This struct represents the entire glyf table\nvar GlyfTable = new r.Struct({\n version: r.uint32,\n numGlyphs: r.uint16,\n indexFormat: r.uint16,\n nContourStreamSize: r.uint32,\n nPointsStreamSize: r.uint32,\n flagStreamSize: r.uint32,\n glyphStreamSize: r.uint32,\n compositeStreamSize: r.uint32,\n bboxStreamSize: r.uint32,\n instructionStreamSize: r.uint32,\n nContours: new Substream('nContourStreamSize'),\n nPoints: new Substream('nPointsStreamSize'),\n flags: new Substream('flagStreamSize'),\n glyphs: new Substream('glyphStreamSize'),\n composites: new Substream('compositeStreamSize'),\n bboxes: new Substream('bboxStreamSize'),\n instructions: new Substream('instructionStreamSize')\n});\nvar WORD_CODE = 253;\nvar ONE_MORE_BYTE_CODE2 = 254;\nvar ONE_MORE_BYTE_CODE1 = 255;\nvar LOWEST_U_CODE = 253;\nfunction read255UInt16(stream) {\n var code = stream.readUInt8();\n if (code === WORD_CODE) {\n return stream.readUInt16BE();\n }\n if (code === ONE_MORE_BYTE_CODE1) {\n return stream.readUInt8() + LOWEST_U_CODE;\n }\n if (code === ONE_MORE_BYTE_CODE2) {\n return stream.readUInt8() + LOWEST_U_CODE * 2;\n }\n return code;\n}\nfunction withSign(flag, baseval) {\n return flag & 1 ? baseval : -baseval;\n}\nfunction decodeTriplet(flags, glyphs, nPoints) {\n var y;\n var x = y = 0;\n var res = [];\n for (var i = 0; i < nPoints; i++) {\n var dx = 0,\n dy = 0;\n var flag = flags.readUInt8();\n var onCurve = !(flag >> 7);\n flag &= 0x7f;\n if (flag < 10) {\n dx = 0;\n dy = withSign(flag, ((flag & 14) << 7) + glyphs.readUInt8());\n } else if (flag < 20) {\n dx = withSign(flag, ((flag - 10 & 14) << 7) + glyphs.readUInt8());\n dy = 0;\n } else if (flag < 84) {\n var b0 = flag - 20;\n var b1 = glyphs.readUInt8();\n dx = withSign(flag, 1 + (b0 & 0x30) + (b1 >> 4));\n dy = withSign(flag >> 1, 1 + ((b0 & 0x0c) << 2) + (b1 & 0x0f));\n } else if (flag < 120) {\n var b0 = flag - 84;\n dx = withSign(flag, 1 + (b0 / 12 << 8) + glyphs.readUInt8());\n dy = withSign(flag >> 1, 1 + (b0 % 12 >> 2 << 8) + glyphs.readUInt8());\n } else if (flag < 124) {\n var b1 = glyphs.readUInt8();\n var b2 = glyphs.readUInt8();\n dx = withSign(flag, (b1 << 4) + (b2 >> 4));\n dy = withSign(flag >> 1, ((b2 & 0x0f) << 8) + glyphs.readUInt8());\n } else {\n dx = withSign(flag, glyphs.readUInt16BE());\n dy = withSign(flag >> 1, glyphs.readUInt16BE());\n }\n x += dx;\n y += dy;\n res.push(new Point(onCurve, false, x, y));\n }\n return res;\n}\nvar TTCHeader = new r.VersionedStruct(r.uint32, {\n 0x00010000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts')\n },\n 0x00020000: {\n numFonts: r.uint32,\n offsets: new r.Array(r.uint32, 'numFonts'),\n dsigTag: r.uint32,\n dsigLength: r.uint32,\n dsigOffset: r.uint32\n }\n});\nvar TrueTypeCollection = /*#__PURE__*/function () {\n TrueTypeCollection.probe = function probe(buffer) {\n return buffer.toString('ascii', 0, 4) === 'ttcf';\n };\n function TrueTypeCollection(stream) {\n this.stream = stream;\n if (stream.readString(4) !== 'ttcf') {\n throw new Error('Not a TrueType collection');\n }\n this.header = TTCHeader.decode(stream);\n }\n var _proto48 = TrueTypeCollection.prototype;\n _proto48.getFont = function getFont(name) {\n for (var _iterator79 = _createForOfIteratorHelperLoose(this.header.offsets), _step79; !(_step79 = _iterator79()).done;) {\n var offset = _step79.value;\n var stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n var font = new TTFFont(stream);\n if (font.postscriptName === name) {\n return font;\n }\n }\n return null;\n };\n _createClass(TrueTypeCollection, [{\n key: \"fonts\",\n get: function get() {\n var fonts = [];\n for (var _iterator80 = _createForOfIteratorHelperLoose(this.header.offsets), _step80; !(_step80 = _iterator80()).done;) {\n var offset = _step80.value;\n var stream = new r.DecodeStream(this.stream.buffer);\n stream.pos = offset;\n fonts.push(new TTFFont(stream));\n }\n return fonts;\n }\n }]);\n return TrueTypeCollection;\n}();\nvar DFontName = new r.String(r.uint8);\nvar DFontData = new r.Struct({\n len: r.uint32,\n buf: new r.Buffer('len')\n});\nvar Ref = new r.Struct({\n id: r.uint16,\n nameOffset: r.int16,\n attr: r.uint8,\n dataOffset: r.uint24,\n handle: r.uint32\n});\nvar Type = new r.Struct({\n name: new r.String(4),\n maxTypeIndex: r.uint16,\n refList: new r.Pointer(r.uint16, new r.Array(Ref, function (t) {\n return t.maxTypeIndex + 1;\n }), {\n type: 'parent'\n })\n});\nvar TypeList = new r.Struct({\n length: r.uint16,\n types: new r.Array(Type, function (t) {\n return t.length + 1;\n })\n});\nvar DFontMap = new r.Struct({\n reserved: new r.Reserved(r.uint8, 24),\n typeList: new r.Pointer(r.uint16, TypeList),\n nameListOffset: new r.Pointer(r.uint16, 'void')\n});\nvar DFontHeader = new r.Struct({\n dataOffset: r.uint32,\n map: new r.Pointer(r.uint32, DFontMap),\n dataLength: r.uint32,\n mapLength: r.uint32\n});\nvar DFont = /*#__PURE__*/function () {\n DFont.probe = function probe(buffer) {\n var stream = new r.DecodeStream(buffer);\n try {\n var header = DFontHeader.decode(stream);\n } catch (e) {\n return false;\n }\n for (var _iterator81 = _createForOfIteratorHelperLoose(header.map.typeList.types), _step81; !(_step81 = _iterator81()).done;) {\n var type = _step81.value;\n if (type.name === 'sfnt') {\n return true;\n }\n }\n return false;\n };\n function DFont(stream) {\n this.stream = stream;\n this.header = DFontHeader.decode(this.stream);\n for (var _iterator82 = _createForOfIteratorHelperLoose(this.header.map.typeList.types), _step82; !(_step82 = _iterator82()).done;) {\n var type = _step82.value;\n for (var _iterator83 = _createForOfIteratorHelperLoose(type.refList), _step83; !(_step83 = _iterator83()).done;) {\n var ref = _step83.value;\n if (ref.nameOffset >= 0) {\n this.stream.pos = ref.nameOffset + this.header.map.nameListOffset;\n ref.name = DFontName.decode(this.stream);\n } else {\n ref.name = null;\n }\n }\n if (type.name === 'sfnt') {\n this.sfnt = type;\n }\n }\n }\n var _proto49 = DFont.prototype;\n _proto49.getFont = function getFont(name) {\n if (!this.sfnt) {\n return null;\n }\n for (var _iterator84 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step84; !(_step84 = _iterator84()).done;) {\n var ref = _step84.value;\n var pos = this.header.dataOffset + ref.dataOffset + 4;\n var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n var font = new TTFFont(stream);\n if (font.postscriptName === name) {\n return font;\n }\n }\n return null;\n };\n _createClass(DFont, [{\n key: \"fonts\",\n get: function get() {\n var fonts = [];\n for (var _iterator85 = _createForOfIteratorHelperLoose(this.sfnt.refList), _step85; !(_step85 = _iterator85()).done;) {\n var ref = _step85.value;\n var pos = this.header.dataOffset + ref.dataOffset + 4;\n var stream = new r.DecodeStream(this.stream.buffer.slice(pos));\n fonts.push(new TTFFont(stream));\n }\n return fonts;\n }\n }]);\n return DFont;\n}();\nfontkit.registerFormat(TTFFont);\nfontkit.registerFormat(WOFFFont);\nfontkit.registerFormat(WOFF2Font);\nfontkit.registerFormat(TrueTypeCollection);\nfontkit.registerFormat(DFont);\nmodule.exports = fontkit;","\"use strict\";\n\nvar UnicodeTrie = require('unicode-trie');\n\nvar base64 = require('base64-js');\nvar _require = require('./classes'),\n BK = _require.BK,\n CR = _require.CR,\n LF = _require.LF,\n NL = _require.NL,\n SG = _require.SG,\n WJ = _require.WJ,\n SP = _require.SP,\n ZWJ = _require.ZWJ,\n BA = _require.BA,\n HY = _require.HY,\n NS = _require.NS,\n AI = _require.AI,\n AL = _require.AL,\n CJ = _require.CJ,\n HL = _require.HL,\n RI = _require.RI,\n SA = _require.SA,\n XX = _require.XX;\nvar _require2 = require('./pairs'),\n DI_BRK = _require2.DI_BRK,\n IN_BRK = _require2.IN_BRK,\n CI_BRK = _require2.CI_BRK,\n CP_BRK = _require2.CP_BRK,\n PR_BRK = _require2.PR_BRK,\n pairTable = _require2.pairTable;\nvar data = base64.toByteArray(\"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\");\nvar classTrie = new UnicodeTrie(data);\nvar mapClass = function mapClass(c) {\n switch (c) {\n case AI:\n return AL;\n case SA:\n case SG:\n case XX:\n return AL;\n case CJ:\n return NS;\n default:\n return c;\n }\n};\nvar mapFirst = function mapFirst(c) {\n switch (c) {\n case LF:\n case NL:\n return BK;\n case SP:\n return WJ;\n default:\n return c;\n }\n};\nvar Break = function Break(position, required) {\n if (required === void 0) {\n required = false;\n }\n this.position = position;\n this.required = required;\n};\nvar LineBreaker = /*#__PURE__*/function () {\n function LineBreaker(string) {\n this.string = string;\n this.pos = 0;\n this.lastPos = 0;\n this.curClass = null;\n this.nextClass = null;\n this.LB8a = false;\n this.LB21a = false;\n this.LB30a = 0;\n }\n var _proto = LineBreaker.prototype;\n _proto.nextCodePoint = function nextCodePoint() {\n var code = this.string.charCodeAt(this.pos++);\n var next = this.string.charCodeAt(this.pos);\n\n // If a surrogate pair\n if (0xd800 <= code && code <= 0xdbff && 0xdc00 <= next && next <= 0xdfff) {\n this.pos++;\n return (code - 0xd800) * 0x400 + (next - 0xdc00) + 0x10000;\n }\n return code;\n };\n _proto.nextCharClass = function nextCharClass() {\n return mapClass(classTrie.get(this.nextCodePoint()));\n };\n _proto.getSimpleBreak = function getSimpleBreak() {\n // handle classes not handled by the pair table\n switch (this.nextClass) {\n case SP:\n return false;\n case BK:\n case LF:\n case NL:\n this.curClass = BK;\n return false;\n case CR:\n this.curClass = CR;\n return false;\n }\n return null;\n };\n _proto.getPairTableBreak = function getPairTableBreak(lastClass) {\n // if not handled already, use the pair table\n var shouldBreak = false;\n switch (pairTable[this.curClass][this.nextClass]) {\n case DI_BRK:\n // Direct break\n shouldBreak = true;\n break;\n case IN_BRK:\n // possible indirect break\n shouldBreak = lastClass === SP;\n break;\n case CI_BRK:\n shouldBreak = lastClass === SP;\n if (!shouldBreak) {\n shouldBreak = false;\n return shouldBreak;\n }\n break;\n case CP_BRK:\n // prohibited for combining marks\n if (lastClass !== SP) {\n return shouldBreak;\n }\n break;\n case PR_BRK:\n break;\n }\n if (this.LB8a) {\n shouldBreak = false;\n }\n\n // Rule LB21a\n if (this.LB21a && (this.curClass === HY || this.curClass === BA)) {\n shouldBreak = false;\n this.LB21a = false;\n } else {\n this.LB21a = this.curClass === HL;\n }\n\n // Rule LB30a\n if (this.curClass === RI) {\n this.LB30a++;\n if (this.LB30a == 2 && this.nextClass === RI) {\n shouldBreak = true;\n this.LB30a = 0;\n }\n } else {\n this.LB30a = 0;\n }\n this.curClass = this.nextClass;\n return shouldBreak;\n };\n _proto.nextBreak = function nextBreak() {\n // get the first char if we're at the beginning of the string\n if (this.curClass == null) {\n var firstClass = this.nextCharClass();\n this.curClass = mapFirst(firstClass);\n this.nextClass = firstClass;\n this.LB8a = firstClass === ZWJ;\n this.LB30a = 0;\n }\n while (this.pos < this.string.length) {\n this.lastPos = this.pos;\n var lastClass = this.nextClass;\n this.nextClass = this.nextCharClass();\n\n // explicit newline\n if (this.curClass === BK || this.curClass === CR && this.nextClass !== LF) {\n this.curClass = mapFirst(mapClass(this.nextClass));\n return new Break(this.lastPos, true);\n }\n var shouldBreak = this.getSimpleBreak();\n if (shouldBreak === null) {\n shouldBreak = this.getPairTableBreak(lastClass);\n }\n\n // Rule LB8a\n this.LB8a = this.nextClass === ZWJ;\n if (shouldBreak) {\n return new Break(this.lastPos);\n }\n }\n if (this.lastPos < this.string.length) {\n this.lastPos = this.string.length;\n return new Break(this.string.length);\n }\n return null;\n };\n return LineBreaker;\n}();\nmodule.exports = LineBreaker;","'use strict';\n\nvar possibleNames = require('possible-typed-array-names');\n\nvar g = typeof globalThis === 'undefined' ? global : globalThis;\n\n/** @type {import('.')} */\nmodule.exports = function availableTypedArrays() {\n\tvar /** @type {ReturnType} */ out = [];\n\tfor (var i = 0; i < possibleNames.length; i++) {\n\t\tif (typeof g[possibleNames[i]] === 'function') {\n\t\t\t// @ts-expect-error\n\t\t\tout[out.length] = possibleNames[i];\n\t\t}\n\t}\n\treturn out;\n};\n","{\"categories\":[\"Cc\",\"Zs\",\"Po\",\"Sc\",\"Ps\",\"Pe\",\"Sm\",\"Pd\",\"Nd\",\"Lu\",\"Sk\",\"Pc\",\"Ll\",\"So\",\"Lo\",\"Pi\",\"Cf\",\"No\",\"Pf\",\"Lt\",\"Lm\",\"Mn\",\"Me\",\"Mc\",\"Nl\",\"Zl\",\"Zp\",\"Cs\",\"Co\"],\"combiningClasses\":[\"Not_Reordered\",\"Above\",\"Above_Right\",\"Below\",\"Attached_Above_Right\",\"Attached_Below\",\"Overlay\",\"Iota_Subscript\",\"Double_Below\",\"Double_Above\",\"Below_Right\",\"Above_Left\",\"CCC10\",\"CCC11\",\"CCC12\",\"CCC13\",\"CCC14\",\"CCC15\",\"CCC16\",\"CCC17\",\"CCC18\",\"CCC19\",\"CCC20\",\"CCC21\",\"CCC22\",\"CCC23\",\"CCC24\",\"CCC25\",\"CCC30\",\"CCC31\",\"CCC32\",\"CCC27\",\"CCC28\",\"CCC29\",\"CCC33\",\"CCC34\",\"CCC35\",\"CCC36\",\"Nukta\",\"Virama\",\"CCC84\",\"CCC91\",\"CCC103\",\"CCC107\",\"CCC118\",\"CCC122\",\"CCC129\",\"CCC130\",\"CCC132\",\"Attached_Above\",\"Below_Left\",\"Left\",\"Kana_Voicing\",\"CCC26\",\"Right\"],\"scripts\":[\"Common\",\"Latin\",\"Bopomofo\",\"Inherited\",\"Greek\",\"Coptic\",\"Cyrillic\",\"Armenian\",\"Hebrew\",\"Arabic\",\"Syriac\",\"Thaana\",\"Nko\",\"Samaritan\",\"Mandaic\",\"Devanagari\",\"Bengali\",\"Gurmukhi\",\"Gujarati\",\"Oriya\",\"Tamil\",\"Telugu\",\"Kannada\",\"Malayalam\",\"Sinhala\",\"Thai\",\"Lao\",\"Tibetan\",\"Myanmar\",\"Georgian\",\"Hangul\",\"Ethiopic\",\"Cherokee\",\"Canadian_Aboriginal\",\"Ogham\",\"Runic\",\"Tagalog\",\"Hanunoo\",\"Buhid\",\"Tagbanwa\",\"Khmer\",\"Mongolian\",\"Limbu\",\"Tai_Le\",\"New_Tai_Lue\",\"Buginese\",\"Tai_Tham\",\"Balinese\",\"Sundanese\",\"Batak\",\"Lepcha\",\"Ol_Chiki\",\"Braille\",\"Glagolitic\",\"Tifinagh\",\"Han\",\"Hiragana\",\"Katakana\",\"Yi\",\"Lisu\",\"Vai\",\"Bamum\",\"Syloti_Nagri\",\"Phags_Pa\",\"Saurashtra\",\"Kayah_Li\",\"Rejang\",\"Javanese\",\"Cham\",\"Tai_Viet\",\"Meetei_Mayek\",\"null\",\"Linear_B\",\"Lycian\",\"Carian\",\"Old_Italic\",\"Gothic\",\"Old_Permic\",\"Ugaritic\",\"Old_Persian\",\"Deseret\",\"Shavian\",\"Osmanya\",\"Osage\",\"Elbasan\",\"Caucasian_Albanian\",\"Linear_A\",\"Cypriot\",\"Imperial_Aramaic\",\"Palmyrene\",\"Nabataean\",\"Hatran\",\"Phoenician\",\"Lydian\",\"Meroitic_Hieroglyphs\",\"Meroitic_Cursive\",\"Kharoshthi\",\"Old_South_Arabian\",\"Old_North_Arabian\",\"Manichaean\",\"Avestan\",\"Inscriptional_Parthian\",\"Inscriptional_Pahlavi\",\"Psalter_Pahlavi\",\"Old_Turkic\",\"Old_Hungarian\",\"Hanifi_Rohingya\",\"Old_Sogdian\",\"Sogdian\",\"Elymaic\",\"Brahmi\",\"Kaithi\",\"Sora_Sompeng\",\"Chakma\",\"Mahajani\",\"Sharada\",\"Khojki\",\"Multani\",\"Khudawadi\",\"Grantha\",\"Newa\",\"Tirhuta\",\"Siddham\",\"Modi\",\"Takri\",\"Ahom\",\"Dogra\",\"Warang_Citi\",\"Nandinagari\",\"Zanabazar_Square\",\"Soyombo\",\"Pau_Cin_Hau\",\"Bhaiksuki\",\"Marchen\",\"Masaram_Gondi\",\"Gunjala_Gondi\",\"Makasar\",\"Cuneiform\",\"Egyptian_Hieroglyphs\",\"Anatolian_Hieroglyphs\",\"Mro\",\"Bassa_Vah\",\"Pahawh_Hmong\",\"Medefaidrin\",\"Miao\",\"Tangut\",\"Nushu\",\"Duployan\",\"SignWriting\",\"Nyiakeng_Puachue_Hmong\",\"Wancho\",\"Mende_Kikakui\",\"Adlam\"],\"eaw\":[\"N\",\"Na\",\"A\",\"W\",\"H\",\"F\"]}","import base64 from 'base64-js';\nimport UnicodeTrie from 'unicode-trie';\nimport data from './data.json';\n\nconst trie = new UnicodeTrie(base64.toByteArray(require('fs').readFileSync(__dirname + '/data.trie', 'base64')));\n\nconst log2 = Math.log2 || (n => Math.log(n) / Math.LN2);\nconst bits = (n) => ((log2(n) + 1) | 0);\n\n// compute the number of bits stored for each field\nconst CATEGORY_BITS = bits(data.categories.length - 1);\nconst COMBINING_BITS = bits(data.combiningClasses.length - 1);\nconst SCRIPT_BITS = bits(data.scripts.length - 1);\nconst EAW_BITS = bits(data.eaw.length - 1);\nconst NUMBER_BITS = 10;\n\n// compute shift and mask values for each field\nconst CATEGORY_SHIFT = COMBINING_BITS + SCRIPT_BITS + EAW_BITS + NUMBER_BITS;\nconst COMBINING_SHIFT = SCRIPT_BITS + EAW_BITS + NUMBER_BITS;\nconst SCRIPT_SHIFT = EAW_BITS + NUMBER_BITS;\nconst EAW_SHIFT = NUMBER_BITS;\nconst CATEGORY_MASK = (1 << CATEGORY_BITS) - 1;\nconst COMBINING_MASK = (1 << COMBINING_BITS) - 1;\nconst SCRIPT_MASK = (1 << SCRIPT_BITS) - 1;\nconst EAW_MASK = (1 << EAW_BITS) - 1;\nconst NUMBER_MASK = (1 << NUMBER_BITS) - 1;\n\nexport function getCategory(codePoint) {\n const val = trie.get(codePoint);\n return data.categories[(val >> CATEGORY_SHIFT) & CATEGORY_MASK];\n}\n\nexport function getCombiningClass(codePoint) {\n const val = trie.get(codePoint);\n return data.combiningClasses[(val >> COMBINING_SHIFT) & COMBINING_MASK];\n}\n\nexport function getScript(codePoint) {\n const val = trie.get(codePoint);\n return data.scripts[(val >> SCRIPT_SHIFT) & SCRIPT_MASK];\n}\n\nexport function getEastAsianWidth(codePoint) {\n const val = trie.get(codePoint);\n return data.eaw[(val >> EAW_SHIFT) & EAW_MASK];\n}\n\nexport function getNumericValue(codePoint) {\n let val = trie.get(codePoint);\n let num = val & NUMBER_MASK;\n\n if (num === 0) {\n return null;\n } else if (num <= 50) {\n return num - 1;\n } else if (num < 0x1e0) {\n const numerator = (num >> 4) - 12;\n const denominator = (num & 0xf) + 1;\n return numerator / denominator;\n } else if (num < 0x300) {\n val = (num >> 5) - 14;\n let exp = (num & 0x1f) + 2;\n\n while (exp > 0) {\n val *= 10;\n exp--;\n }\n return val;\n } else {\n val = (num >> 2) - 0xbf;\n let exp = (num & 3) + 1;\n while (exp > 0) {\n val *= 60;\n exp--;\n }\n return val;\n }\n}\n\nexport function isAlphabetic(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Lu' ||\n category === 'Ll' ||\n category === 'Lt' ||\n category === 'Lm' ||\n category === 'Lo' ||\n category === 'Nl'\n )\n}\n\nexport function isDigit(codePoint) {\n return getCategory(codePoint) === 'Nd'\n}\n\nexport function isPunctuation(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Pc' ||\n category === 'Pd' ||\n category === 'Pe' ||\n category === 'Pf' ||\n category === 'Pi' ||\n category === 'Po' ||\n category === 'Ps'\n );\n}\n\nexport function isLowerCase(codePoint) {\n return getCategory(codePoint) === 'Ll';\n}\n\nexport function isUpperCase(codePoint) {\n return getCategory(codePoint) === 'Lu'\n}\n\nexport function isTitleCase(codePoint) {\n return getCategory(codePoint) === 'Lt'\n}\n\nexport function isWhiteSpace(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Zs' ||\n category === 'Zl' ||\n category === 'Zp'\n );\n}\n\nexport function isBaseForm(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Nd' ||\n category === 'No' ||\n category === 'Nl' ||\n category === 'Lu' ||\n category === 'Ll' ||\n category === 'Lt' ||\n category === 'Lm' ||\n category === 'Lo' ||\n category === 'Me' ||\n category === 'Mc'\n )\n}\n\nexport function isMark(codePoint) {\n const category = getCategory(codePoint);\n return (\n category === 'Mn' ||\n category === 'Me' ||\n category === 'Mc'\n );\n}\n\n// Backwards compatibility.\nexport default {\n getCategory,\n getCombiningClass,\n getScript,\n getEastAsianWidth,\n getNumericValue,\n isAlphabetic,\n isDigit,\n isPunctuation,\n isLowerCase,\n isUpperCase,\n isTitleCase,\n isWhiteSpace,\n isBaseForm,\n isMark\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(36164);\n"],"names":["factory","self","exports","OP","CL","CP","QU","GL","NS","EX","SY","IS","PR","PO","NU","AL","HL","ID","IN","HY","BA","BB","B2","ZW","CM","WJ","H2","H3","JL","JV","JT","RI","EB","EM","ZWJ","CB","AI","BK","CJ","CR","LF","NL","SA","SG","SP","XX","DI_BRK","IN_BRK","CI_BRK","CP_BRK","PR_BRK","pairTable","EncodeStream","DecodeStream","Array","LazyArray","Bitfield","Boolean","Buffer","Enum","Optional","Reserved","String","Struct","VersionedStruct","utils","require","NumberT","Pointer","Object","assign","Number","ArrayT","type","length","lengthType","this","_proto","prototype","decode","stream","parent","pos","res","ctx","resolveLength","defineProperties","value","_startOffset","_currentOffset","writable","_length","target","undefined","push","i","end","size","array","_step","_iterator","_createForOfIteratorHelperLoose","done","item","encode","pointers","startOffset","pointerOffset","_step2","_iterator2","ptr","val","module","flags","flag","keys","BooleanT","BufferT","readBuffer","buf","writeBuffer","iconv","error","buffer","readString","encoding","toString","from","byte","error1","slice","readUInt24BE","readUInt16BE","readUInt8","readUInt24LE","readUInt16LE","readInt24BE","readInt16BE","readInt24LE","readInt8","TYPES","UInt8","UInt16","UInt24","UInt32","Int8","Int16","Int24","Int32","Float","Double","_loop","key","bytes","replace","ret","_stream$Readable","bufferSize","_this","apply","arguments","alloc","bufferOffset","_read","ensure","flush","writeString","string","Error","writeUInt24BE","writeUInt24LE","writeInt24BE","writeInt24LE","fill","Readable","options","index","indexOf","inspect","LazyArrayT","_ArrayT","toArray","call","base","items","_proto2","get","result","endian","fn","uint8","uint16be","uint16","uint16le","uint24be","uint24","uint24le","uint32be","uint32","uint32le","int8","int16be","int16","int16le","int24be","int24","int24le","int32be","int32","int32le","floatbe","float","floatle","doublebe","double","doublele","Fixed","_NumberT","fracBits","_point","fixed16be","fixed16","fixed16le","fixed32be","fixed32","fixed32le","condition","offsetType","allowNull","nullValue","lazy","relativeTo","relativeToGetter","relative","offset","c","decodeValue","PropertyDescriptor","VoidPointer","pointerSize","count","data","StringT","byteLength","writeUInt8","fields","_setup","_parseFields","process","defineProperty","includePointers","preEncode","_Struct","versions","versionPath","split","object","version","reduce","prevObj","header","isNaN","opts","enumerable","configurable","_defineProperties","props","descriptor","_toPropertyKey","t","r","e","Symbol","toPrimitive","TypeError","_toPrimitive","_assertThisInitialized","ReferenceError","_setPrototypeOf","o","p","setPrototypeOf","bind","__proto__","base64","ieee754","customInspectSymbol","SlowBuffer","INSPECT_MAX_BYTES","K_MAX_LENGTH","createBuffer","RangeError","Uint8Array","arg","encodingOrOffset","allocUnsafe","isEncoding","actual","write","fromString","ArrayBuffer","isView","arrayView","isInstance","copy","fromArrayBuffer","byteOffset","fromArrayLike","fromArrayView","SharedArrayBuffer","valueOf","b","obj","isBuffer","len","checked","numberIsNaN","isArray","fromObject","assertSize","mustMatch","loweredCase","utf8ToBytes","base64ToBytes","toLowerCase","slowToString","start","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","n","m","bidirectionalIndexOf","dir","arrayIndexOf","lastIndexOf","arr","indexSize","arrLength","valLength","read","foundIndex","found","j","hexWrite","remaining","strLen","parsed","parseInt","substr","utf8Write","blitBuffer","asciiWrite","str","byteArray","charCodeAt","asciiToBytes","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","Math","min","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","kMaxLength","TYPED_ARRAY_SUPPORT","proto","foo","typedArraySupport","console","poolSize","allocUnsafeSlow","_isBuffer","compare","a","x","y","concat","list","set","swap16","swap32","swap64","toLocaleString","equals","max","trim","thisStart","thisEnd","thisCopy","targetCopy","includes","isFinite","toJSON","_arr","out","hexSliceLookupTable","checkOffset","ext","checkInt","wrtBigUInt64LE","checkIntBI","BigInt","wrtBigUInt64BE","checkIEEE754","writeFloat","littleEndian","noAssert","writeDouble","newBuf","subarray","readUintLE","readUIntLE","mul","readUintBE","readUIntBE","readUint8","readUint16LE","readUint16BE","readUint32LE","readUInt32LE","readUint32BE","readUInt32BE","readBigUInt64LE","defineBigIntMethod","validateNumber","first","last","boundsError","pow","readBigUInt64BE","readIntLE","readIntBE","readInt16LE","readInt32LE","readInt32BE","readBigInt64LE","readBigInt64BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUintLE","writeUIntLE","writeUintBE","writeUIntBE","writeUint8","writeUint16LE","writeUInt16LE","writeUint16BE","writeUInt16BE","writeUint32LE","writeUInt32LE","writeUint32BE","writeUInt32BE","writeBigUInt64LE","writeBigUInt64BE","writeIntLE","limit","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeBigInt64LE","writeBigInt64BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","copyWithin","code","errors","E","sym","getMessage","Base","_Base","subClass","superClass","Constructor","protoProps","NodeError","name","stack","create","constructor","message","addNumericalSeparator","range","ERR_OUT_OF_RANGE","checkBounds","ERR_INVALID_ARG_TYPE","floor","ERR_BUFFER_OUT_OF_BOUNDS","input","msg","received","isInteger","abs","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","base64clean","src","dst","alphabet","table","i16","BufferBigIntNotDefined","DataView","NAME","Prototype","NATIVE_ARRAY_BUFFER","DESCRIPTORS","global","isCallable","isObject","hasOwn","classof","tryToString","createNonEnumerableProperty","redefine","isPrototypeOf","getPrototypeOf","wellKnownSymbol","uid","Int8Array","Int8ArrayPrototype","Uint8ClampedArray","Uint8ClampedArrayPrototype","TypedArray","TypedArrayPrototype","ObjectPrototype","TO_STRING_TAG","TYPED_ARRAY_TAG","TYPED_ARRAY_CONSTRUCTOR","NATIVE_ARRAY_BUFFER_VIEWS","opera","TYPED_ARRAY_TAG_REQIRED","TypedArrayConstructorsList","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigIntArrayConstructorsList","BigInt64Array","BigUint64Array","isTypedArray","it","klass","Function","aTypedArray","aTypedArrayConstructor","C","exportTypedArrayMethod","KEY","property","forced","ARRAY","TypedArrayConstructor","exportTypedArrayStaticMethod","uncurryThis","FunctionName","redefineAll","fails","anInstance","toIntegerOrInfinity","toLength","toIndex","IEEE754","getOwnPropertyNames","arrayFill","arraySlice","setToStringTag","InternalStateModule","PROPER_FUNCTION_NAME","PROPER","CONFIGURABLE_FUNCTION_NAME","CONFIGURABLE","getInternalState","setInternalState","ARRAY_BUFFER","DATA_VIEW","PROTOTYPE","WRONG_INDEX","NativeArrayBuffer","$ArrayBuffer","ArrayBufferPrototype","$DataView","DataViewPrototype","reverse","packIEEE754","pack","unpackIEEE754","unpack","packInt8","number","packInt16","packInt32","unpackInt32","packFloat32","packFloat64","addGetter","view","isLittleEndian","intIndex","store","conversion","INCORRECT_ARRAY_BUFFER_NAME","NaN","testView","$setInt8","setInt8","getInt8","setUint8","unsafe","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","$","arrayBufferModule","setSpecies","CryptoJS","BlockCipher","lib","C_algo","algo","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","d","xi","sx","x2","x4","x8","RCON","AES","extend","_doReset","_nRounds","_keyPriorReset","_key","keyWords","words","keySize","sigBytes","ksRows","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","encryptBlock","M","_doCryptBlock","decryptBlock","nRounds","s0","s1","s2","s3","round","t0","t1","t2","t3","_createHelper","N","ORIG_P","ORIG_S","BLOWFISH_CTX","pbox","sbox","F","BlowFish_Encrypt","left","right","temp","Xl","Xr","Blowfish","keysize","Row","Col","keyIndex","Data1","Data2","BlowFishInit","BlowFish_Decrypt","blockSize","ivSize","C_lib","WordArray","BufferedBlockAlgorithm","C_enc","Base64","EvpKDF","Cipher","C_mode","BlockCipherMode","CBC","Pkcs7","CipherParams","OpenSSLFormatter","SerializableCipher","OpenSSLKdf","PasswordBasedCipher","enc","Utf8","cfg","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","init","xformMode","_xformMode","reset","dataUpdate","_append","_process","finalize","_doFinalize","selectCipherStrategy","cipher","encrypt","decrypt","ciphertext","StreamCipher","mode","iv","Encryptor","Decryptor","_cipher","_iv","xorBlock","block","_prevBlock","processBlock","thisBlock","pad","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","padding","unpad","modeCreator","_minBufferSize","_mode","__creator","_doProcessBlock","finalProcessedBlocks","_data","cipherParams","mixIn","formatter","stringify","format","OpenSSL","salt","parse","openSSLStr","ciphertextWords","splice","encryptor","cipherCfg","algorithm","_parse","kdf","execute","password","hasher","random","compute","derivedParams","crypto","window","globalThis","msCrypto","err","cryptoSecureRandomInt","getRandomValues","randomBytes","subtype","overrides","hasOwnProperty","$super","instance","properties","propertyName","clone","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","clamp","thatByte","ceil","nBytes","hexChars","bite","join","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","decodeURIComponent","escape","utf8Str","unescape","encodeURIComponent","_nDataBytes","doFlush","processedWords","dataWords","dataSigBytes","nBlocksReady","nWordsReady","nBytesReady","Hasher","update","messageUpdate","_createHmacHelper","HMAC","map","_map","base64Chars","triplet","charAt","paddingChar","base64Str","base64StrLength","reverseMap","_reverseMap","paddingIndex","bitsCombined","parseLoop","Base64url","urlSafe","_safe_map","swapEndian","word","Utf16","Utf16BE","utf16Chars","utf16Str","utf16StrLength","Utf16LE","MD5","iterations","derivedKey","derivedKeyWords","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","superInit","subInit","typedArray","typedArrayByteLength","T","sin","_hash","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","FF","GG","HH","II","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","hash","H_i","s","HmacMD5","CFB","generateKeystreamAndEncrypt","keystream","CTRGladman","incWord","b1","b2","b3","counter","_counter","incCounter","CTR","ECB","OFB","_keystream","AnsiX923","lastBytePos","Ansix923","Iso10126","Iso97971","ZeroPadding","NoPadding","SHA256","PBKDF2","hmac","blockIndex","blockIndexWords","blockWords","blockWordsLength","intermediate","intermediateWords","S","C_","G","RabbitLegacy","K","X","_X","_C","_b","nextState","IV","IV_0","IV_1","i0","i2","i1","i3","gx","ga","gb","gh","gl","Rabbit","RC4","keySigBytes","_S","keyByteIndex","keyByte","_i","_j","generateKeystreamWord","keystreamWord","RC4Drop","drop","_zl","_zr","_sl","_sr","_hl","_hr","RIPEMD160","al","bl","cl","dl","el","ar","br","cr","dr","er","hl","hr","zl","zr","sl","sr","f1","f2","f3","f4","f5","rotl","z","HmacRIPEMD160","W","SHA1","HmacSHA1","SHA224","HmacSHA224","isPrime","sqrtN","sqrt","factor","getFractionalBits","nPrime","f","g","h","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","HmacSHA256","X64Word","x64","Word","RHO_OFFSETS","PI_INDEXES","ROUND_CONSTANTS","newY","LFSR","roundConstantMsw","roundConstantLsw","bitPosition","SHA3","outputLength","state","_state","nBlockSizeLanes","M2i","M2i1","lane","high","low","tMsw","tLsw","Tx","Tx4","Tx1","Tx1Msw","Tx1Lsw","laneIndex","laneMsw","laneLsw","rhoOffset","TPiLane","T0","state0","TLane","Tx1Lane","Tx2Lane","roundConstant","blockSizeBits","outputLengthBytes","outputLengthLanes","hashWords","HmacSHA3","C_x64","X64WordArray","SHA512","SHA384","HmacSHA384","X64Word_create","H0","H1","H4","H5","H6","H7","H0h","H0l","H1h","H1l","H2h","H2l","H3h","H3l","H4h","H4l","H5h","H5l","H6h","H6l","H7h","H7l","ah","bh","ch","dh","eh","fh","fl","hh","Wil","Wih","Wi","gamma0xh","gamma0xl","gamma0h","gamma0l","gamma1xh","gamma1xl","gamma1h","gamma1l","Wi7","Wi7h","Wi7l","Wi16","Wi16h","Wi16l","t1l","chh","chl","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Ki","Kih","Kil","t1h","t2l","toX32","HmacSHA512","PC1","PC2","BIT_SHIFTS","SBOX_P","SBOX_MASK","DES","keyBits","keyBitPos","subKeys","_subKeys","nSubKey","subKey","bitShift","invSubKeys","_invSubKeys","_lBlock","_rBlock","exchangeLR","exchangeRL","lBlock","rBlock","mask","TripleDES","key1","key2","key3","_des1","_des2","_des3","X32WordArray","x64Words","x64WordsLength","x32Words","x64Word","wordsLength","StateMachine","dfa","stateTable","accepting","tags","match","_ref","iterator","_regeneratorRuntime","mark","_callee","startRun","lastAccepting","lastState","wrap","_context","prev","next","stop","actions","_step$value","tag","fs","zlib","PNG","palette","imgData","transparency","text","chunkSize","readUInt32","section","width","height","bits","colorType","compressionMethod","filterMethod","interlaceMethod","indexed","short","grayscale","rgb","colors","hasAlphaChannel","pixelBitlength","colorSpace","path","readFile","file","pixels","load","readFileSync","readUInt16","decodePixels","inflate","pixelBytes","pass","x0","y0","dx","dy","singlePass","w","scanlineLength","row","col","upper","paeth","upperLeft","pa","pb","pc","pixelsPos","bufferPos","decodePalette","copyToImageData","imageData","k","alpha","_decodedPalette","v","_this2","safer","Safer","kStringMaxLength","binding","constants","MAX_LENGTH","MAX_STRING_LENGTH","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","filter","getOwnPropertyDescriptor","_objectSpread","source","forEach","_defineProperty","getOwnPropertyDescriptors","hint","prim","custom","BufferList","_classCallCheck","head","tail","entry","hasStrings","shift","_getString","_getBuffer","nb","_","depth","customInspect","copyProps","SafeBuffer","swap32LE","UnicodeTrie","uncompressedLength","highStart","errorValue","DATA_BLOCK_LENGTH","INDEX_1_OFFSET","INDEX_2_BLOCK_LENGTH","isBigEndian","SVGtoPDF","doc","svg","NamedColors","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgrey","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgrey","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","DefaultColors","transparent","Entities","quot","amp","lt","gt","apos","OElig","oelig","Scaron","scaron","Yuml","circ","tilde","ensp","emsp","thinsp","zwnj","zwj","lrm","rlm","ndash","mdash","lsquo","rsquo","sbquo","ldquo","rdquo","bdquo","dagger","Dagger","permil","lsaquo","rsaquo","euro","nbsp","iexcl","cent","pound","curren","yen","brvbar","sect","uml","ordf","laquo","not","shy","reg","macr","deg","plusmn","sup2","sup3","acute","micro","para","middot","cedil","sup1","ordm","raquo","frac14","frac12","frac34","iquest","Agrave","Aacute","Acirc","Atilde","Auml","Aring","AElig","Ccedil","Egrave","Eacute","Ecirc","Euml","Igrave","Iacute","Icirc","Iuml","ETH","Ntilde","Ograve","Oacute","Ocirc","Otilde","Ouml","times","Oslash","Ugrave","Uacute","Ucirc","Uuml","Yacute","THORN","szlig","agrave","aacute","acirc","atilde","auml","aring","aelig","ccedil","egrave","eacute","ecirc","euml","igrave","iacute","icirc","iuml","eth","ntilde","ograve","oacute","ocirc","otilde","ouml","divide","oslash","ugrave","uacute","ucirc","uuml","yacute","thorn","yuml","fnof","Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","omicron","pi","rho","sigmaf","sigma","tau","upsilon","phi","chi","psi","omega","thetasym","upsih","piv","bull","hellip","prime","Prime","oline","frasl","weierp","image","real","trade","alefsym","larr","uarr","rarr","darr","harr","crarr","lArr","uArr","rArr","dArr","hArr","forall","part","exist","empty","nabla","isin","notin","ni","prod","sum","minus","lowast","radic","prop","infin","ang","and","or","cap","cup","int","there4","sim","cong","asymp","ne","equiv","le","ge","sup","nsub","sube","supe","oplus","otimes","perp","sdot","lceil","rceil","lfloor","rfloor","lang","rang","loz","spades","clubs","hearts","diams","PathArguments","A","L","l","Q","q","V","Z","PathFlags","A3","A4","a3","a4","Properties","inherit","initial","values","normal","css","docBeginGroup","bbox","group","_groupCount","resources","ref","xobj","Type","Subtype","FormType","BBox","Group","CS","I","Resources","savedMatrix","_ctm","savedPage","page","groupStack","fonts","xobjects","ext_gstates","patterns","docEndGroup","pop","Font","XObject","ExtGState","Pattern","docInsertGroup","addContent","docApplyMask","clip","_maskCount","gstate","CA","ca","BM","SMask","BC","docCreatePattern","matrix","pattern","docUsePattern","stroke","_patternCount","PatternType","PaintType","TilingType","XStep","YStep","Matrix","multiplyMatrix","ProcSet","docSetTextMode","docFillColor","color","fillOpacity","fillColor","docStrokeColor","strokeOpacity","strokeColor","parseXml","xml","SvgNode","nodeName","nodeValue","nodeType","attributes","childNodes","parentNode","id","textContent","classList","getAttribute","attr","getElementById","recursive","node","getElementsByTagName","child","parser","StringParser","decodeEntities","warningCallback","matchAll","mt","m0","m1","m2","parseColor","raw","parseFloat","colorCallback","opacityToColor","opacity","isMask","newColor","newOpacity","transformPoint","getGlobalMatrix","ctm","getPageBBox","SvgShape","transform","inverseMatrix","getBoundingBox","dt","validateMatrix","m3","m4","m5","isNotEqual","solveEquation","curve","isEqual","getCurveValue","parseTranform","func","nums","parser2","temp2","matchNumber","matchSeparator","PI","cos","parseAspectRatio","aspectRatio","availWidth","availHeight","elemWidth","elemHeight","initAlign","ratioType","xAlign","yAlign","scaleX","scaleY","parseStyleAttr","fontFamily","fontSize","fontStyle","fontWeight","fontVariant","parts","parseSelector","ids","classes","specificity","parseStyleSheet","rule","rules","selectors","selector","matchesSelector","elem","combineArrays","array1","array2","getAscent","font","ascender","maxY","scale","getDescent","descender","minY","getTextPos","encoded","hex","unicode","glyph","advanceWidth","xOffset","yOffset","xAdvance","yAdvance","createSVGElement","inherits","SvgElemUse","SvgElemSymbol","SvgElemGroup","SvgElemLink","SvgElemSvg","SVGElemImage","SvgElemRect","SvgElemCircle","SvgElemEllipse","SvgElemLine","SvgElemPolyline","SvgElemPolygon","SvgElemPath","SvgElemText","SvgElemTspan","SvgElemTextPath","SvgElemTextNode","SvgElem","exp","all","substring","matchSpace","matchLengthUnit","BezierSegment","p1x","p1y","c1x","c1y","c2x","c2y","p2x","p2y","divisions","precision","equationX","equationY","derivativeX","derivativeY","lengthMap","totalLength","startPoint","atan2","endPoint","minX","maxX","rootsX","rootsY","getPointAtLength","l1","l2","LineSegment","pathCommands","pathSegments","lastCom","lastCtrlX","lastCtrlY","startX","startY","currX","currY","move","line","segment","close","addCommand","hasStart","hasEnd","cx","cy","rx","ry","fi","fa","x1","y1","y2","th1","th2","segms","th3","th4","endX","endY","command","bbox1","mergeShape","shape","insertInDocument","moveTo","lineTo","bezierCurveTo","closePath","getSubPaths","subPaths","getMarkers","markers","subPath","subPathMarkers","startMarker","prevEndMarker","endMarker","styleCache","childrenCache","isOuterElement","style","useCSS","getComputedStyle","specificities","styleRules","getStyle","allowedChildren","resolveUrl","svgObj","documentCallback","svgs","documentCache","computeUnits","unit","percent","isFontSize","getViewport","computeLength","temp1","computeLengthList","strict","getLength","getLengthList","getUrl","getNumberList","getViewbox","viewBox","getPercent","chooseValue","args","keyInfo","fallbackColor","SvgElemGradient","SvgElemPattern","dasharray","getChildren","children","getParentVWidth","getVWidth","viewportWidth","getParentVHeight","getVHeight","viewportHeight","getParentViewport","getBoundingShape","SvgElemStylable","getTransformation","SvgElemClipPath","useMask","SvgElemMask","getFill","isClip","getPaint","getStroke","SvgElemHasChildren","childShape","drawChildren","drawInDocument","SvgElemContainer","drawContent","clipped","masked","save","restore","link","addLink","isText","url","Rect","Border","URI","links","docInsertLink","preserveAspectRatio","imageCallback","openImage","rect","translate","fallback","_attr","_getChildren","bBox","gOpacity","bBoxUnitsPattern","bBoxUnitsContent","aspectRatioMatrix","stopColor","grad","r2","bBoxUnits","spread","nAfter","nBefore","nTotal","multiplier","inv","corner1","corner2","corner3","corner4","linearGradient","radialGradient","inOrder","_colorSpace","setTransform","SvgElemBasicShape","dashScale","lineWidth","lineCap","circle","dashArray","dashOffset","miterLimit","lineJoin","dash","phase","fillAndStroke","markerStart","markerMid","markerEnd","markersPos","SvgElemMarker","drawMarker","points","pathLength","posArray","strokeWidth","orient","rotate","refX","refY","SvgElemTextContainer","_pos","hidden","dx0","ascent","dy0","dx1","descent","dy1","dx2","dy2","drawTextInDocument","decorate","_font","fauxBold","childElem","skew","fauxItalic","linePosition","pathObject","pathScale","pathElem","textParentElem","currentAnchor","currentDirection","processedText","remainingText","textPaths","currentChunk","currentX","currentY","doAnchoring","anchordx","textOnPath","currentElem","textOffset","charMidX","pointOnPath","continuous","parentElem","_x","_y","_dx","_dy","_rot","_defRot","fontOptions","fontNameorLink","fontCallback","_index","textLength","spacingAndGlyphs","wordSpacing","letterSpacing","textAnchor","textDirection","baseline","xHeight","getXHeight","getBaseline","rawText","renderedText","xAttr","yAttr","dxAttr","dyAttr","rotAttr","position","firstChar","lastChar","textScale","spaceDiff","adjustLength","pxToPt","assumePt","SVGElement","warn","family","bold","italic","_registeredFonts","styles","savedFillColor","_fillColor","annotations","PDFAbstractReference","PDFTree","_items","limits","sortedKeys","sort","_compareKeys","PDFObject","convert","_dataForKey","_keysName","escapableRe","escapable","encryptFn","stringBuffer","isUnicode","buff","swapBytes","Date","_string","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","PDFReference","_PDFAbstractReference","document","gen","compress","Filter","chunk","Length","_offset","_security","getEncryptFn","deflateSync","_write","_refEnd","DEFAULT_MARGINS","top","bottom","SIZES","A0","A1","A2","A5","A6","A7","A8","A9","A10","B0","B1","B3","B4","B5","B6","B7","B8","B9","B10","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","RA0","RA1","RA2","RA3","RA4","SRA0","SRA1","SRA2","SRA3","SRA4","EXECUTIVE","FOLIO","LEGAL","LETTER","TABLOID","PDFPage","layout","margin","margins","dimensions","toUpperCase","content","dictionary","Parent","_root","Pages","MediaBox","Contents","markings","ColorSpace","Annots","StructParents","createStructParentTreeNextKey","PDFNameTree","_PDFTree","localeCompare","inRange","rangeGroup","startRange","endRange","middleRange","arrayIndex","unassigned_code_points","isUnassignedCodePoint","character","commonly_mapped_to_nothing","non_ASCII_space_characters","non_ASCII_controls_characters","non_character_codepoints","prohibited_characters","isProhibitedCharacter","bidirectional_r_al","isBidirectionalRAL","bidirectional_l","isBidirectionalL","getCodePoint","codePointAt","toCodePoints","codepoints","before","PDFSecurity","ownerPassword","userPassword","_setupEncryption","info","infoStr","CreationDate","getTime","wordArrayToBuffer","pdfVersion","encDict","_setupEncryptionV1V2V4","_setupEncryptionV5","permissions","permissionObject","printing","modifying","copying","annotating","getPermissionsR2","getPermissionsR3","userPasswordEntry","encryptionKey","paddedUserPassword","processPasswordR2R3R4","paddedOwnerPassword","ownerPasswordEntry","digest","xorRound","getOwnerPasswordR2R3R4","documentId","lsbFirstWord","getEncryptionKeyR2R3R4","_id","getUserPasswordR3R4","CF","StdCF","AuthEvent","CFM","StmF","StrF","R","O","U","P","processedUserPassword","processPasswordR5","processedOwnerPassword","getEncryptionKeyR5","generateRandomWordArray","validationSalt","keySalt","getUserPasswordR5","userEncryptionKeyEntry","userKeySalt","getUserEncryptionKeyR5","getOwnerPasswordR5","ownerEncryptionKeyEntry","ownerKeySalt","getOwnerEncryptionKeyR5","permsEntry","getEncryptedPermissionsR5","OE","UE","Perms","fillingForms","contentAccessibility","documentAssembly","PASSWORD_PADDING","mapped_input","mapping2space","mapping2nothing","normalized_input","fromCodePoint","normalize","normalized_map","some","allowUnassigned","hasBidiRAL","hasBidiL","isFirstBidiRAL","isLastBidiRAL","saslprep","px","py","sy","PDFGradient","stops","embedded","_normalizeColor","m11","m12","m21","m22","stopsLength","bounds","FunctionType","Domain","Functions","Bounds","Encode","_gradCount","shader","Shading","opacityGradient","embed","pageBBox","form","Sh1","opacityPattern","Gs1","_this$doc$_ctm","_this$transform","_setColorSpace","op","Gradient","PDFLinearGradient","_PDFGradient","ShadingType","Coords","Extend","PDFRadialGradient","_PDFGradient2","r1","underlyingColorSpaces","PDFGradient$1","PDFLinearGradient$1","PDFRadialGradient$1","PDFTilingPattern$1","xStep","yStep","toFixed","csName","csId","getPatternColorSpaceId","colorSpaces","cs","underlyingColorspace","createPattern","patternColor","embedPatternColorSpaces","normalizedColor","_getColorSpace","ColorMixin","initColor","_opacityRegistry","_opacityCount","namedColors","_setColor","_setColorCore","space","_opacity","_doOpacity","_this$_opacityRegistr","yellowgreen","parameters","runners","_toConsumableArray","quadraticCurveTo","solveArc","_a","coords","_coords","rot","large","sweep","ex","ey","arcToSegments","seg","bez","segmentToBezier","rotateX","ox","oy","th","sin_th","cos_th","pl","a00","a01","a10","a11","sfactor_sq","sfactor","xc","yc","th0","th_arc","segments","th_half","x3","y3","SVGPath","commands","cmd","curArg","foundDecimal","params","_apply","number$1","KAPPA","VectorMixin","initVector","_ctmStack","_CAP_STYLES","BUTT","ROUND","SQUARE","_JOIN_STYLES","MITER","BEVEL","originalLength","every","JSON","undash","cp1x","cp1y","cp2x","cp2y","cpx","cpy","roundedRect","ellipse","xe","ye","xm","ym","radius","arc","startAngle","endAngle","anticlockwise","TWO_PI","HALF_PI","deltaAng","numSegs","segAng","handleLen","curAng","deltaCx","deltaCy","ax","ay","segIdx","polygon","_len","_points","point","_path","_windingRule","test","isFillRule","_m","angle","rad","origin","_options$origin","xFactor","yFactor","_options$origin2","WIN_ANSI_MAP","characters","AFMFont","contents","glyphWidths","boundingBoxes","kernPairs","charWidths","char","capHeight","lineGap","filename","glyphs","charCode","characterToGlyph","advances","widthOfGlyph","getKernPair","PDFFont","includeGap","gap","STANDARD_FONTS","Courier","__dirname","Helvetica","ZapfDingbats","StandardFont","_PDFFont","_this$font","BaseFont","Encoding","encodeText","glyphsForString","advancesForGlyphs","positions","toHex","num","EmbeddedFont","subset","createSubset","widths","getGlyph","postscriptName","unitsPerEm","fontLayoutCache","layoutCache","features","run","layoutRun","cached","onlyWidth","needle","layoutCached","_this$layout","gid","includeGlyph","isCFF","cff","fontFile","encodeStream","on","familyClass","sFamilyClass","post","isFixedPitch","macStyle","FontName","Flags","FontBBox","ItalicAngle","italicAngle","Ascent","Descent","CapHeight","XHeight","StemV","FontFile3","FontFile2","CIDSet","CIDSetRef","descendantFontData","CIDSystemInfo","Registry","Ordering","Supplement","FontDescriptor","CIDToGIDMap","descendantFont","DescendantFonts","ToUnicode","toUnicodeCmap","cmap","entries","PDFFontFactory","isStandardFont","fontkit","FontsMixin","initFonts","defaultFont","_fontFamilies","_fontCount","_fontSize","cacheKey","_this$_registeredFont","open","currentLineHeight","lineHeight","registerFont","LineWrapper","_EventEmitter","indent","characterSpacing","columns","columnGap","spaceLeft","column","ellipsis","continuedX","once","continued","align","lastLine","paragraphGap","widthOfString","bk","breaker","LineBreaker","wordWidths","nextBreak","shouldContinue","wordWidth","lbk","fbk","mightGrow","mustShrink","required","nextY","nextSection","textWidth","wc","lc","emitLine","wordCount","emit","eachWord","lh","continueOnNewPage","_this$document","EventEmitter","number$2","TextMixin","initText","_line","_lineGap","moveDown","lines","moveUp","_text","lineCallback","_initOptions","addStructure","structParent","add","struct","structType","markStructureContent","wrapper","_wrapper","_textOptions","_text2","heightOfString","_list","listType","midLine","bulletRadius","textIndent","itemIndent","bulletIndent","level","levels","numbers","flatten","itemType","labelType","bodyType","structTypes","_options$structTypes","_this3","diff","letter","label","_fragment","lineBreak","spaceWidth","renderedWidth","goTo","destination","addNamedDestination","underline","lineY","strike","_lineWidth","_lineY","oblique","encodedWord","_this$_font$encode2","positionsWord","_this$_font$encode4","hadOffset","addSegment","cur","advance","_this4","MARKERS","COLOR_SPACE_MAP","JPEG","marker","channels","BitsPerComponent","Width","Height","PNGImage","dataDecoded","isInterlaced","Predictor","Colors","Columns","loadIndexedAlphaChannel","splitAlphaChannel","decodeData","alphaChannel","sMask","Decode","colorCount","pixelCount","skipByteCount","colorIndex","PDFImage","exec","ImagesMixin","initImages","_imageRegistry","_imageCount","bp","bw","ip","left1","wp","hp","fit","_options$fit","cover","_options$cover","valign","AnnotationsMixin","annotate","_convertRect","Dest","note","Name","D","pages","Kids","_markup","_this$_convertRect2","QuadPoints","highlight","lineAnnotation","rectAnnotation","ellipseAnnotation","textAnnotation","DA","fileAnnotation","filespec","FS","Desc","_this$_ctm","PDFOutline","title","dest","expanded","outlineData","Count","First","Last","Prev","Next","endOutline","OutlineMixin","initOutline","outline","Outlines","PageMode","PDFStructureContent","pageRef","mcid","refs","structContent","PDFStructureElement","_attached","_ended","_flushed","_isValidChild","Lang","alt","Alt","ActualText","_children","setParent","setAttached","_addContentToParentTree","_contentForClosure","getStructParentTree","parentRef","_flush","closure","endMarkedContent","_isFlushable","_flushChild","_ref2","_this5","Pg","MCID","PDFNumberTree","MarkingsMixin","initMarkings","structChildren","tagged","getMarkInfoDictionary","Marked","getStructTreeRoot","markContent","toClose","marking","attached","Attached","pageStructParents","structParentTreeKey","_objectSpread2","structElem","structTreeRoot","initPageMarkings","pageMarkings","newStructContent","endPageMarkings","MarkInfo","StructTreeRoot","ParentTree","ParentTreeNextKey","endMarkings","FIELD_FLAGS","readOnly","noExport","multiline","toggleToOffButton","radioButton","pushButton","combo","edit","multiSelect","noSpell","FIELD_JUSTIFY","center","VALUE_MAP","defaultValue","FORMAT_SPECIAL","zip","zipPlus4","zip4","phone","ssn","FORMAT_DEFAULT","nDec","sepComma","negStyle","currency","currencyPrepend","AcroFormMixin","initForm","_acroform","Fields","NeedAppearances","DR","AcroForm","endAcroForm","fontDict","fieldRef","_endChild","childRef","formField","fieldDict","_fieldDict","_addToParent","formAnnotation","annotRef","formText","formPushButton","formCombo","formList","formRadioButton","formCheckbox","_resolveType","_resolveFlags","_resolveJustify","_resolveFont","_resolveStrings","_resolveColors","_resolveFormat","FT","fnKeystroke","fnFormat","param","_p","AA","JS","backgroundColor","MK","BG","borderColor","Ff","select","appendChoices","idx","Opt","AttachmentsMixin","refBody","Params","statSync","birthtime","_fs$statSync","ctime","ModDate","creationDate","modifiedDate","checksum","CheckSum","Size","_fileRegistry","fileSpecBody","EF","UF","description","addNamedEmbeddedFile","PDFA","initPDFA","pSubset","subset_conformance","endSubset","_addPdfaMetadata","jsPath","jestPath","_addColorOutputIntent","existsSync","pICCPath","iccProfile","colorProfileRef","intentRef","Info","OutputConditionIdentifier","DestOutputProfile","OutputIntents","_getPdfaid","appendXML","SubsetMixin","_importSubset","initSubset","PDFMetadata","_metadata","newline","_closeTags","MetadataMixin","initMetadata","metadata","append","_addInfo","toISOString","Creator","Title","Author","Subject","Keywords","endMetadata","metadataRef","getXML","Metadata","PDFDocument","_pageBuffer","_pageBufferStart","_offsets","_waiting","Names","Dests","Producer","displayTitle","ViewerPreferences","DisplayDocTitle","generateFileID","autoFirstPage","addPage","bufferPages","flushPages","unshift","EmbeddedFiles","js","JavaScript","_finalize","pipe","createWriteStream","_info","xRefOffset","trailer","Root","Encrypt","mixin","methods","___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","_typeof","_createClass","staticProps","isDeepEqual","isDeepStrictEqual","_require$codes","codes","ERR_AMBIGUOUS_ARGUMENT","ERR_INVALID_ARG_VALUE","ERR_INVALID_RETURN_VALUE","ERR_MISSING_ARGS","AssertionError","_require$types","isPromise","isRegExp","objectAssign","objectIs","RegExpPrototypeTest","lazyLoadComparison","comparison","Map","warned","assert","ok","NO_EXCEPTION_SENTINEL","innerFail","innerOk","argLen","generatedMessage","expected","operator","stackStartFn","fail","internalMessage","argsLen","emitWarning","errArgs","equal","notEqual","deepEqual","notDeepEqual","deepStrictEqual","notDeepStrictEqual","strictEqual","notStrictEqual","Comparison","expectedException","compareExceptionKey","getActual","checkIsPromise","then","catch","waitForActual","promiseFn","Promise","resolve","resultPromise","expectsError","details","fnType","expectsNoError","internalMatch","regexp","fnName","_len6","_key6","throws","_len2","_key2","rejects","_len3","_key3","doesNotThrow","_len4","_key4","doesNotReject","_len5","_key5","ifError","newErr","origStack","tmp2","tmp1","doesNotMatch","_possibleConstructorReturn","_wrapNativeSuper","Class","_cache","has","Wrapper","_construct","_getPrototypeOf","_isNativeReflectConstruct","Reflect","construct","sham","Proxy","endsWith","search","this_len","kReadableOperator","strictEqualObject","notStrictEqualObject","notIdentical","copyError","inspectValue","compact","maxArrayLength","showHidden","breakLength","showProxy","sorted","getters","_Error","_inspect$custom","_inherits","Derived","hasNativeReflectConstruct","_super","Super","NewTarget","stackTraceLimit","stderr","isTTY","getColorDepth","other","lastPos","skipped","actualInspected","actualLines","expectedLines","indicator","inputLength","maxCount","log","repeat","maxLines","_actualLines","printedLines","skippedMsg","expectedLine","actualLine","divergingLines","createErrDiff","_res","knownOperators","captureStackTrace","recurseTimes","util","createErrorType","arg1","arg2","arg3","oneOf","thing","determiner","reason","inspected","_slicedToArray","_arrayWithHoles","u","return","_iterableToArrayLimit","minLen","_arrayLikeToArray","_unsupportedIterableToArray","_nonIterableRest","arr2","regexFlagsSupported","arrayFromSet","arrayFromMap","is","objectGetOwnPropertySymbols","propertyIsEnumerable","objectToString","isAnyArrayBuffer","isArrayBufferView","isDate","isMap","isSet","isNativeError","isBoxedPrimitive","isNumberObject","isStringObject","isBooleanObject","isBigIntObject","isSymbolObject","isFloat32Array","isFloat64Array","isNonIndex","getOwnNonIndexProperties","kNoIterator","kIsArray","kIsSet","kIsMap","innerDeepEqual","val1","val2","memos","buf1","buf2","val1Tag","keys1","keys2","keyCheck","RegExp","areSimilarTypedArrays","areSimilarFloatArrays","_keys","_keys2","isEqualBoxedPrimitive","getEnumerables","iterationType","aKeys","bKeys","symbolKeysA","symbolKeysB","_symbolKeysB","val2MemoA","val2MemoB","areEq","memo","aValues","Set","setMightHaveLoosePrim","bValues","_val","setHasEqualElement","setEquiv","aEntries","_aEntries$i","item1","item2","mapMightHaveLoosePrim","bEntries","_i2","_bEntries$_i","mapHasEqualEntry","mapEquiv","keysA","objEquiv","delete","setValues","findLooseMatchingPrimitives","altValue","curB","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","extraBytes","maxChunkLength","len2","encodeChunk","lookup","output","BROTLI_READ_SIZE","kBitMask","BrotliBitReader","buf_","input_","READ_SIZE","IBUF_MASK","buf_ptr_","val_","pos_","bit_pos_","bit_end_pos_","eos_","readMoreInput","bytes_read","fillBitWindow","readBits","n_bits","lookupOffsets","BrotliInput","BrotliOutput","BrotliDictionary","HuffmanCode","BrotliBuildHuffmanTable","Context","Prefix","Transform","kDefaultCodeLength","kCodeLengthRepeatCode","HUFFMAN_TABLE_BITS","HUFFMAN_TABLE_MASK","HUFFMAN_MAX_TABLE_SIZE","CODE_LENGTH_CODES","kCodeLengthCodeOrder","NUM_DISTANCE_SHORT_CODES","kDistanceShortCodeIndexOffset","kDistanceShortCodeValueOffset","kMaxHuffmanTableSize","DecodeWindowBits","DecodeVarLenUint8","nbits","MetaBlockLength","meta_block_length","input_end","is_uncompressed","is_metadata","DecodeMetaBlockLength","size_nibbles","size_bytes","next_byte","next_nibble","ReadSymbol","ReadHuffmanCode","alphabet_size","tables","table_size","simple_code_or_skip","code_lengths","max_bits_counter","max_bits","num_symbols","code_length_code_lengths","num_codes","huff","code_len_idx","symbol","prev_code_len","repeat_code_len","code_len","old_repeat","repeat_delta","extra_bits","new_len","ReadHuffmanCodeLengths","ReadBlockLength","kBlockLengthPrefixCode","TranslateShortCodes","ringbuffer","MoveToFront","HuffmanTreeGroup","num_htrees","htrees","DecodeContextMap","context_map_size","context_map","max_run_length_prefix","reps","v_len","mtf","InverseMoveToFrontTransform","DecodeBlockType","max_block_type","trees","tree_type","block_types","ringbuffers","indexes","block_type","type_code","CopyUncompressedBlockToOutput","ringbuffer_mask","nbytes","rb_size","rb_pos","br_pos","JumpToByteBoundary","new_bit_pos","BrotliDecompressBuffer","output_size","BrotliDecompressedSize","output_buffer","window_bits","max_backward_distance","ringbuffer_size","ringbuffer_end","block_type_trees","block_len_trees","max_distance","dist_rb","dist_rb_idx","prev_byte1","prev_byte2","hgroup","kRingBufferWriteAheadSlack","maxDictionaryWordLength","distance_postfix_bits","num_direct_distance_codes","distance_postfix_mask","num_distance_codes","num_literal_htrees","dist_context_map","num_dist_htrees","context_mode","htree_command","meta_block_remaining_len","block_length","num_block_types","block_type_rb","block_type_rb_index","context_modes","context_map_slice","literal_htree_index","dist_context_map_slice","dist_htree_index","context_lookup_offset1","context_lookup_offset2","_out","_o1","_o2","cmd_code","range_idx","insert_code","copy_code","insert_length","copy_length","distance_code","distance","copy_dst","postfix","kInsertRangeLut","kCopyRangeLut","kInsertLengthPrefixCode","kCopyLengthPrefixCode","minDictionaryWordLength","offsetsByLength","word_id","sizeBitsByLength","transform_idx","kNumTransforms","transformDictionaryWord","BrotliDecompress","GetNextKey","step","ReplicateValue","NextTableBitSize","root_bits","root_table","code_lengths_size","table_bits","total_size","start_table","PrefixCodeRange","kUppercaseFirst","kUppercaseAll","prefix","suffix","kTransforms","ToUpperCase","uppercase","skip","start_idx","prefix_pos","suffix_pos","Zstream","zlib_deflate","zlib_inflate","Zlib","DEFLATE","UNZIP","init_done","memLevel","strategy","windowBits","write_in_progress","pending_close","gzip_id_bytes_read","NONE","INFLATE","GZIP","GUNZIP","DEFLATERAW","INFLATERAW","deflateEnd","strm","inflateEnd","in_off","in_len","out_off","out_len","writeSync","async","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","avail_in","next_in","avail_out","next_out","_checkError","_afterSync","nextTick","_after","next_expected_header_byte","deflate","Z_NEED_DICT","inflateSetDictionary","Z_OK","Z_DATA_ERROR","Z_STREAM_END","Z_BUF_ERROR","_error","callback","onerror","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","_init","_setDictionary","_reset","deflateInit2","Z_DEFLATED","inflateInit2","deflateSetDictionary","deflateReset","inflateReset","kRangeErrorMessage","Z_MIN_WINDOWBITS","Z_MAX_WINDOWBITS","Z_DEFAULT_WINDOWBITS","Z_MIN_CHUNK","Z_MAX_CHUNK","Z_DEFAULT_CHUNK","Z_MIN_MEMLEVEL","Z_MAX_MEMLEVEL","Z_DEFAULT_MEMLEVEL","Z_MIN_LEVEL","Z_MAX_LEVEL","Z_DEFAULT_LEVEL","Z_DEFAULT_COMPRESSION","bkeys","bkey","Z_ERRNO","Z_STREAM_ERROR","Z_MEM_ERROR","Z_VERSION_ERROR","ckeys","ck","ckey","zlibBuffer","engine","buffers","nread","flow","onEnd","removeListener","zlibBufferSync","flushFlag","_finishFlushFlag","_processChunk","Deflate","Inflate","Gzip","Gunzip","DeflateRaw","InflateRaw","Unzip","isValidFlushFlag","_opts","_chunkSize","finishFlush","_flushFlag","_handle","_hadError","errno","_close","_buffer","_level","_strategy","emitCloseNT","freeze","createDeflate","createInflate","createDeflateRaw","createInflateRaw","createGzip","createGunzip","createUnzip","gzip","gzipSync","deflateRaw","deflateRawSync","unzip","unzipSync","inflateSync","gunzip","gunzipSync","inflateRaw","inflateRawSync","_transform","kind","ws","_writableState","ended","ending","needDrain","cb","availInBefore","availOutBefore","inOff","req","availInAfter","availOutAfter","have","newReq","GetIntrinsic","callBind","$indexOf","allowMissing","intrinsic","setFunctionLength","$TypeError","$apply","$call","$reflectApply","$defineProperty","$max","originalFunction","applyBind","circular","allParents","allChildren","useBuffer","_clone","__isArray","__isRegExp","__getRegExpFlags","lastIndex","__isDate","attrs","__objToStr","re","ignoreCase","clonePrototype","argument","isConstructor","definePropertyModule","UNSCOPABLES","ArrayPrototype","toObject","toAbsoluteIndex","lengthOfArrayLike","to","inc","argumentsLength","endPos","$forEach","STRICT_METHOD","arrayMethodIsStrict","callbackfn","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIterator","getIteratorMethod","arrayLike","IS_CONSTRUCTOR","mapfn","mapping","iteratorMethod","toIndexedObject","createMethod","IS_INCLUDES","$this","fromIndex","IndexedObject","arraySpeciesCreate","TYPE","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","IS_FILTER_REJECT","NO_HOLES","that","specificCreate","boundFunction","find","findIndex","filterReject","$lastIndexOf","NEGATIVE_ZERO","FORCED","searchElement","V8_VERSION","SPECIES","METHOD_NAME","method","aCallable","IS_RIGHT","mergeSort","comparefn","middle","insertionSort","merge","element","llength","rlength","lindex","rindex","originalArray","arraySpeciesConstructor","anObject","iteratorClose","ENTRIES","ITERATOR","SAFE_CLOSING","called","iteratorWithReturn","SKIP_CLOSING","ITERATION_SUPPORT","stringSlice","TO_STRING_TAG_SUPPORT","classofRaw","CORRECT_ARGUMENTS","tryGet","callee","TEST","V8_OR_CHAKRA_STACK_ENTRY","IS_V8_OR_CHAKRA_STACK","IS_FIREFOX_OR_SAFARI_STACK","dropEntries","iterate","defineIterator","fastKey","internalStateGetterFor","getterFor","getConstructor","CONSTRUCTOR_NAME","ADDER","iterable","AS_ENTRIES","define","previous","getEntry","removed","clear","setStrong","ITERATOR_NAME","getInternalCollectionState","getInternalIteratorState","iterated","isForced","InternalMetadataModule","checkCorrectnessOfIteration","inheritIfRequired","common","IS_WEAK","NativeConstructor","NativePrototype","exported","fixMethod","uncurriedNativeMethod","enable","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","dummy","getOwnPropertyDescriptorModule","MATCH","error2","requireObjectCoercible","attribute","p1","IteratorPrototype","createPropertyDescriptor","Iterators","returnThis","IteratorConstructor","bitmap","toPropertyKey","propertyKey","ordinaryToPrimitive","IS_PURE","createIteratorConstructor","IteratorsCore","BUGGY_SAFARI_ITERATORS","KEYS","VALUES","Iterable","DEFAULT","IS_SET","CurrentIteratorPrototype","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","wrappedWellKnownSymbolModule","EXISTS","createElement","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","documentCreateElement","DOMTokenListPrototype","firefox","UA","userAgent","Pebble","getBuiltIn","Deno","v8","webkit","setGlobal","copyConstructorProperties","targetProperty","sourceProperty","TARGET","GLOBAL","STATIC","stat","noTargetGet","regexpExec","RegExpPrototype","SHAM","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","uncurriedNativeRegExpMethod","nativeMethod","forceStringMethod","$exec","isExtensible","preventExtensions","FunctionPrototype","factories","partArgs","argsLength","getDescriptor","namespace","getMethod","usingIterator","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","matched","captures","namedCaptures","replacement","tailPos","capture","check","LN2","mantissaLength","exponent","mantissa","exponentLength","eMax","eBias","rt","sign","nBits","NewTargetPrototype","functionToString","inspectSource","cause","hiddenKeys","getOwnPropertyNamesModule","getOwnPropertyNamesExternalModule","FREEZING","REQUIRED","METADATA","setMetadata","objectID","weakData","meta","getWeakData","onFreeze","NATIVE_WEAK_MAP","shared","sharedKey","OBJECT_ALREADY_INITIALIZED","WeakMap","wmget","wmhas","wmset","facade","STATE","enforce","noop","constructorRegExp","INCORRECT_TO_STRING","isConstructorModern","feature","detection","POLYFILL","NATIVE","USE_SYMBOL_AS_UID","$Symbol","Result","stopped","ResultPrototype","unboundFunction","iterFn","IS_ITERATOR","INTERRUPTED","callFn","innerResult","innerError","PrototypeOfArrayIteratorPrototype","arrayIterator","notify","toggle","promise","macrotask","IS_IOS","IS_IOS_PEBBLE","IS_WEBOS_WEBKIT","IS_NODE","MutationObserver","WebKitMutationObserver","queueMicrotaskDescriptor","queueMicrotask","domain","exit","enter","createTextNode","observe","characterData","task","PromiseCapability","reject","$$resolve","$$reject","$default","globalIsFinite","objectKeys","getOwnPropertySymbolsModule","propertyIsEnumerableModule","$assign","B","chr","activeXDocument","enumBugKeys","html","SCRIPT","IE_PROTO","EmptyConstructor","scriptTag","LT","NullProtoObjectViaActiveX","parentWindow","NullProtoObject","ActiveXObject","iframeDocument","iframe","display","appendChild","contentWindow","IE8_DOM_DEFINE","Attributes","$getOwnPropertyDescriptor","$getOwnPropertyNames","windowNames","getWindowNames","internalObjectKeys","CORRECT_PROTOTYPE_GETTER","names","$propertyIsEnumerable","NASHORN_BUG","aPossiblePrototype","setter","CORRECT_SETTER","TO_ENTRIES","pref","newPromiseCapability","promiseCapability","enforceInternalState","TEMPLATE","simple","re1","re2","regexpFlags","stickyHelpers","UNSUPPORTED_DOT_ALL","UNSUPPORTED_NCG","nativeReplace","nativeExec","patchedExec","UPDATES_LAST_INDEX_WRONG","UNSUPPORTED_Y","BROKEN_CARET","NPCG_INCLUDED","reCopy","groups","sticky","charsAdded","strCopy","dotAll","$RegExp","TAG","SHARED","copyright","aConstructor","defaultConstructor","CONVERT_TO_STRING","second","codeAt","whitespaces","whitespace","ltrim","rtrim","location","defer","channel","port","setImmediate","clearImmediate","Dispatch","MessageChannel","queue","ONREADYSTATECHANGE","runner","listener","event","postMessage","protocol","host","now","port2","port1","onmessage","addEventListener","importScripts","removeChild","setTimeout","integer","toPositiveInteger","BYTES","isSymbol","TO_PRIMITIVE","exoticToPrim","TYPED_ARRAYS_CONSTRUCTORS_REQUIRES_WRAPPERS","ArrayBufferViewCore","ArrayBufferModule","isIntegralNumber","toOffset","typedArrayFrom","nativeDefineProperty","nativeGetOwnPropertyDescriptor","BYTES_PER_ELEMENT","WRONG_LENGTH","fromList","isArrayBuffer","isTypedArrayIndex","wrappedGetOwnPropertyDescriptor","wrappedDefineProperty","CLAMPED","GETTER","SETTER","NativeTypedArrayConstructor","TypedArrayConstructorPrototype","addElement","getter","typedArrayOffset","$length","$len","arrayFromConstructorAndList","typedArraySpeciesConstructor","speciesConstructor","NATIVE_SYMBOL","WellKnownSymbolsStore","symbolFor","createWellKnownSymbol","withoutSetter","clearErrorStack","installErrorCause","normalizeStringArgument","ERROR_STACK_INSTALLABLE","$AggregateError","AggregateErrorPrototype","errorsArray","AggregateError","arrayMethodHasSpeciesSupport","IS_CONCAT_SPREADABLE","MAX_SAFE_INTEGER","MAXIMUM_ALLOWED_INDEX_EXCEEDED","IS_CONCAT_SPREADABLE_SUPPORT","SPECIES_SUPPORT","isConcatSpreadable","spreadable","addToUnscopables","$filter","$includes","ARRAY_ITERATOR","Arguments","un$Join","ES3_STRINGS","separator","$map","un$Slice","HAS_SPECIES_SUPPORT","fin","internalSort","IE_OR_EDGE","V8","WEBKIT","un$Sort","FAILS_ON_UNDEFINED","FAILS_ON_NULL","STABLE_SORT","itemsLength","arrayLength","getSortCompare","deleteCount","insertCount","actualDeleteCount","actualStart","dateToPrimitive","DatePrototype","FUNCTION_NAME_EXISTS","nameRE","regExpExec","collection","thisNumberValue","NUMBER","NativeNumber","NumberPrototype","NumberWrapper","primValue","third","radix","maxCode","digits","toNumber","toNumeric","EPSILON","$repeat","un$ToFixed","acc","multiply","c2","dataToString","fractionDigits","fractDigits","$freeze","FAILS_ON_PRIMITIVES","nativeGetPrototypeOf","nativeKeys","$values","newPromiseCapabilityModule","perform","allSettled","capability","promiseResolve","alreadyCalled","status","PROMISE_ANY_ERROR","any","alreadyResolved","alreadyRejected","NativePromise","onFinally","isFunction","Internal","OwnPromiseCapability","PromiseWrapper","nativeThen","microtask","hostReportErrors","IS_BROWSER","PROMISE","getInternalPromiseState","NativePromisePrototype","PromiseConstructor","PromisePrototype","newGenericPromiseCapability","DISPATCH_EVENT","createEvent","dispatchEvent","NATIVE_REJECTION_EVENT","PromiseRejectionEvent","UNHANDLED_REJECTION","SUBCLASSING","PROMISE_CONSTRUCTOR_SOURCE","GLOBAL_CORE_JS_PROMISE","FakePromise","INCORRECT_ITERATION","isThenable","isReject","notified","chain","reactions","exited","reaction","handler","rejection","onHandleUnhandled","onUnhandled","initEvent","isUnhandled","unwrap","internalReject","internalResolve","executor","onFulfilled","onRejected","$promiseResolve","race","nativeConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","objectDefinePropertyModule","regExpFlags","$toString","TO_STRING","n$ToString","getFlags","NOT_GENERIC","INCORRECT_NAME","rf","$fromCodePoint","elements","notARegExp","correctIsRegExpLogic","stringIndexOf","searchString","createHTML","forcedStringHTMLMethod","italics","STRING_ITERATOR","advanceStringIndex","MATCH_ALL","REGEXP_STRING","REGEXP_STRING_ITERATOR","un$MatchAll","WORKS_WITH_NON_GLOBAL_REGEX","$RegExpStringIterator","$global","fullUnicode","$matchAll","flagsValue","matcher","fixRegExpWellKnownSymbolLogic","nativeMatch","maybeCallNative","matchStr","getSubstitution","REPLACE","REPLACE_KEEPS_$0","REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE","UNSAFE_SUBSTITUTE","searchValue","replaceValue","replacer","functionalReplace","results","accumulatedResult","nextSourcePosition","replacerArgs","callRegExpExec","MAX_UINT32","$push","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SPLIT","nativeSplit","internalSplit","lim","lastLength","lastLastIndex","separatorCopy","splitter","unicodeMatching","$trim","forcedStringTrimMethod","defineWellKnownSymbol","NativeSymbol","SymbolPrototype","EmptyStringDescriptionStore","SymbolWrapper","symbolToString","symbolValueOf","desc","nativeObjectCreate","getOwnPropertyNamesExternal","HIDDEN","QObject","$stringify","nativeGetOwnPropertyNames","nativePropertyIsEnumerable","AllSymbols","ObjectPrototypeSymbols","StringToSymbolRegistry","SymbolToStringRegistry","USE_SETTER","findChild","setSymbolDescriptor","ObjectPrototypeDescriptor","$defineProperties","$getOwnPropertySymbols","IS_OBJECT_PROTOTYPE","keyFor","useSetter","useSimple","$replacer","u$ArrayCopyWithin","$every","$fill","fromSpeciesAndList","$findIndex","predicate","$find","createTypedArrayConstructor","ArrayIterators","arrayValues","arrayKeys","arrayEntries","nativeTypedArrayIterator","PROPER_ARRAY_VALUES_NAME","typedArrayValues","$join","$reduceRight","$reduce","$some","ACCEPT_INCORRECT_ARGUMENTS","mod","begin","beginIndex","$toLocaleString","TO_LOCALE_STRING_BUG","Uint8ArrayPrototype","arrayToString","IS_NOT_ARRAY_METHOD","DOMIterables","handlePrototype","CollectionPrototype","COLLECTION_NAME","ArrayIteratorMethods","ArrayValues","URL","isArguments","isRegex","isUndefinedOrNull","aIsRegex","bIsRegex","aIsBuffer","bIsBuffer","ka","kb","$SyntaxError","gopd","nonEnumerable","nonWritable","nonConfigurable","loose","hasSymbols","toStr","defineDataProperty","supportsDescriptors","predicates","EvalError","SyntaxError","URIError","ReflectOwnKeys","ReflectApply","receiver","NumberIsNaN","emitter","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","_events","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","events","existing","warning","newListener","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","evlistener","unwrapListeners","arrayClone","listenerCount","wrapListener","removeEventListener","setMaxListeners","getMaxListeners","doError","context","listeners","addListener","prependListener","prependOnceListener","originalListener","spliceOne","off","removeAllListeners","rawListeners","eventNames","thisArg","forEachArray","forEachString","forEachObject","concatty","bound","arrLike","slicy","boundLength","boundArgs","joiner","joiny","Empty","implementation","functionsHaveNames","gOPD","functionsHaveConfigurableNames","$bind","boundFunctionsHaveNames","$Error","$EvalError","$RangeError","$ReferenceError","$URIError","$Function","getEvalledConstructor","expressionSyntax","$gOPD","throwTypeError","ThrowTypeError","calleeThrows","gOPDthrows","hasProto","getProto","needsEval","INTRINSICS","Atomics","decodeURI","encodeURI","eval","FinalizationRegistry","WeakRef","WeakSet","errorProto","doEval","LEGACY_ALIASES","$concat","$spliceApply","$replace","$strSlice","rePropName","reEscapeChar","getBaseIntrinsic","alias","intrinsicName","quote","subString","stringToPath","intrinsicBaseName","intrinsicRealName","skipFurtherCaching","isOwn","hasPropertyDescriptors","hasArrayLengthDefineBug","$Object","origSymbol","hasSymbolSham","symObj","syms","toStringTag","$hasOwn","_dbcs","DBCSCodec","UNASSIGNED","GB18030_CODE","SEQ_START","NODE_START","UNASSIGNED_NODE","codecOptions","encodingName","mappingTable","decodeTables","decodeTableSeq","_addDecodeChunk","gb18030","commonThirdByteNodeIdx","commonFourthByteNodeIdx","firstByteNode","secondByteNode","thirdByteNode","fourthByteNode","defaultCharUnicode","encodeTable","encodeTableSeq","skipEncodeChars","encodeSkipVals","_fillEncodeTable","encodeAdd","uChar","_setEncodeChar","defCharSB","defaultCharSingleByte","DBCSEncoder","codec","seqObj","DBCSDecoder","nodeIdx","prevBytes","findIdx","mid","decoder","_getDecodeTrieNode","addr","curAddr","writeTable","codeTrail","seq","_getEncodeBucket","uCode","dbcsCode","bucket","_setEncodeSequence","oldVal","hasValues","subNodeEmpty","mbCode","subNodeIdx","newPrefix","nextChar","resCode","subtable","uChars","gbChars","prevOffset","seqStart","uCodeLead","bytesArr","modules","InternalCodec","bomAware","InternalEncoderBase64","InternalEncoderCesu8","InternalDecoderCesu8","utf8","cesu8","unicode11utf8","ucs2","utf16le","binary","_internal","InternalEncoder","InternalDecoder","StringDecoder","prevStr","contBytes","accBytes","completeQuads","bufIdx","SBCSCodec","chars","asciiString","decodeBuf","encodeBuf","SBCSEncoder","SBCSDecoder","_sbcs","idx1","idx2","Utf16BECodec","Utf16BEEncoder","Utf16BEDecoder","overflowByte","Utf16Codec","Utf16Encoder","addBOM","getEncoder","Utf16Decoder","initialBufs","initialBufsLen","detectEncoding","bufs","defaultEncoding","charsProcessed","asciiCharsLE","asciiCharsBE","outer_loop","utf16be","utf16","getDecoder","resStr","trail","Utf32Codec","isLE","Utf32Encoder","highSurrogate","Utf32Decoder","badChar","overflow","_writeCodepoint","codepoint","Utf32AutoCodec","Utf32AutoEncoder","Utf32AutoDecoder","invalidLE","invalidBE","bmpCharsLE","bmpCharsBE","_utf32","utf32le","utf32be","ucs4le","ucs4be","write32","isHighSurrogate","isLowSurrogate","utf32","ucs4","Utf7Codec","utf7","unicode11utf7","Utf7Encoder","Utf7Decoder","nonDirectChars","inBase64","base64Accum","base64Regex","plusChar","minusChar","andChar","Utf7IMAPCodec","Utf7IMAPEncoder","base64AccumIdx","Utf7IMAPDecoder","lastI","b64str","canBeDecoded","utf7imap","base64IMAPChars","PrependBOMWrapper","StripBOMWrapper","PrependBOM","StripBOM","stripBOM","stream_module","bomHandling","encodings","skipDecodeWarning","encodingExists","getCodec","toEncoding","fromEncoding","_codecDataCache","_canonicalizeEncoding","codecDef","enableStreamingAPI","supportsStreams","streams","IconvLiteEncoderStream","IconvLiteDecoderStream","decodeStream","conv","decodeStrings","collect","chunks","mLen","eLen","ctor","superCtor","super_","TempCtor","hasToStringTag","callBound","isStandardArguments","isLegacyArguments","supportsStandardArguments","badArrayLike","isCallableMarker","fnToStr","reflectApply","constructorRegex","isES6ClassFn","fnStr","tryFunctionObject","isIE68","isDDA","strClass","getDay","tryDateObject","GeneratorFunction","isFnRegex","generatorFunc","getGeneratorFunc","getPolyfill","shim","polyfill","isRegexMarker","badStringifier","throwRegexMarker","whichTypedArray","keysShim","isArgs","isEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","excludedKeys","$applicationCache","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$onmozfullscreenchange","$onmozfullscreenerror","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","isString","theKeys","skipProto","skipConstructor","equalsConstructorPrototypeIfNotBuggy","origKeys","originalKeys","keysWorksWithArguments","$propIsEnumerable","originalGetSymbols","source1","getSymbols","nextKey","propValue","letters","lacksProperEnumerationOrder","thrower","assignHasPendingExceptions","TYPED_OK","_has","sources","shrinkBuf","fnTyped","arraySet","src_offs","dest_offs","flattenChunks","fnUntyped","setTyped","Buf8","Buf16","Buf32","adler","Z_TREES","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_BINARY","Z_TEXT","Z_UNKNOWN","crcTable","makeTable","crc","configuration_table","adler32","crc32","L_CODES","LITERALS","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","INIT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","errorCode","rank","zero","flush_pending","pending","pending_buf","pending_out","total_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","total_in","insert","ins_h","hash_shift","hash_mask","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","DeflateState","pending_buf_size","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","l_buf","lit_bufsize","d_buf","opt_len","static_len","matches","bi_buf","bi_valid","deflateResetKeep","data_type","_tr_init","max_block_size","max_start","deflateInit","deflateSetHeader","old_flush","beg","hcrc","extra","comment","time","os","bstate","deflate_huff","deflate_rle","_tr_align","_tr_stored_block","avail","tmpDict","dictLength","deflateInfo","_in","dmax","wsize","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","dist","from_source","lencode","distcode","lenbits","distbits","dolen","dodist","sane","inflate_fast","inflate_table","HEAD","BAD","ENOUGH_LENS","ENOUGH_DISTS","zswap32","InflateState","havedict","total","wbits","ncode","nlen","ndist","work","lendyn","distdyn","back","was","inflateResetKeep","inflateReset2","lenfix","distfix","virgin","fixedtables","updatewindow","inflateInit","put","here_bits","here_op","here_val","last_bits","last_op","last_val","hbuf","order","inf_leave","xflags","extra_len","inflateGetHeader","inflateInfo","lbase","lext","dbase","dext","lens_index","table_index","incr","root","curr","used","base_index","MAXBITS","offs","extra_index","Buf_size","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","_dist_code","_length_code","base_length","static_l_desc","static_d_desc","static_bl_desc","base_dist","StaticTreeDesc","static_tree","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","put_short","send_bits","send_code","tree","bi_reverse","gen_codes","next_code","init_block","END_BLOCK","bi_windup","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lx","build_tree","stree","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","REP_3_6","REPZ_3_10","REPZ_11_138","send_tree","static_init_done","stored_len","copy_block","LENGTH_CODES","tr_static_init","opt_lenb","static_lenb","max_blindex","black_mask","detect_data_type","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","STATIC_TREES","bi_flush","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","clearTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","runClearTimeout","Item","browser","env","argv","cwd","chdir","umask","setFunctionName","hasIndices","unicodeSets","flagsBound","calls","TypeErr","regex","sax","opt","SAXParser","SAXStream","createStream","MAX_BUFFER_LENGTH","Stream","clearBuffers","bufferCheckPosition","lowercase","lowercasetags","looseCase","closed","closedRoot","sawRoot","noscript","BEGIN","strictEntities","ENTITIES","XML_ENTITIES","attribList","xmlns","ns","rootNS","trackPosition","EVENTS","BEGIN_WHITESPACE","beginWhiteSpace","TEXT","starti","textNode","isWhitespace","strictFail","TEXT_ENTITY","OPEN_WAKA","startTagPosition","SCRIPT_ENDING","script","CLOSE_TAG","SGML_DECL","sgmlDecl","isMatch","nameStart","OPEN_TAG","tagName","PROC_INST","procInstName","procInstBody","CDATA","emitNode","cdata","COMMENT","DOCTYPE","doctype","isQuote","SGML_DECL_QUOTED","DOCTYPE_DTD","DOCTYPE_QUOTED","DOCTYPE_DTD_QUOTED","COMMENT_ENDING","COMMENT_ENDED","textopts","CDATA_ENDING","CDATA_ENDING_2","PROC_INST_ENDING","PROC_INST_BODY","body","nameBody","newTag","openTag","OPEN_TAG_SLASH","ATTRIB","closeTag","attribName","attribValue","ATTRIB_NAME","ATTRIB_VALUE","attrib","ATTRIB_NAME_SAW_WHITE","ATTRIB_VALUE_QUOTED","ATTRIB_VALUE_UNQUOTED","ATTRIB_VALUE_ENTITY_Q","ATTRIB_VALUE_CLOSED","isAttribEnd","ATTRIB_VALUE_ENTITY_U","CLOSE_TAG_SAW_WHITE","notMatch","returnState","unparsedEntities","parsedEntity","parseEntity","entity","entityBody","entityStart","maxAllowed","maxActual","closeText","checkBufferLength","resume","streamWraps","ev","_parser","readable","me","onend","_decoder","SD","XML_NAMESPACE","XMLNS_NAMESPACE","stringFromCharCode","COMMENT_STARTING","qname","qualName","local","qn","selfClosing","uri","nv","isSelfClosing","closeTo","entityLC","numStr","lowSurrogate","codeUnits","hasDescriptors","$floor","functionLengthIsConfigurable","functionLengthIsWritable","EE","Writable","Duplex","PassThrough","finished","pipeline","ondata","pause","ondrain","_isStdio","onclose","didOnEnd","destroy","cleanup","allowHalfOpen","onEndNT","highWaterMark","getBuffer","_readableState","destroyed","ReadableState","debug","EElistenerCount","OurUint8Array","debugUtil","debuglog","createReadableStreamAsyncIterator","destroyImpl","getHighWaterMark","ERR_STREAM_PUSH_AFTER_EOF","ERR_METHOD_NOT_IMPLEMENTED","ERR_STREAM_UNSHIFT_AFTER_END_EVENT","errorOrDestroy","kProxyEvents","isDuplex","objectMode","readableObjectMode","pipes","pipesCount","flowing","endEmitted","reading","sync","needReadable","emittedReadable","readableListening","resumeScheduled","paused","emitClose","autoDestroy","awaitDrain","readingMore","_destroy","readableAddChunk","addToFront","skipChunkCheck","emitReadable","emitReadable_","onEofChunk","chunkInvalid","_uint8ArrayToBuffer","addChunk","maybeReadMore","_undestroy","undestroy","isPaused","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","maybeReadMore_","updateReadableListening","nReadingNextTick","resume_","consume","endReadable","endReadableNT","wState","xs","nOrig","doRead","pipeOpts","endFn","stdout","unpipe","onunpipe","unpipeInfo","hasUnpiped","onfinish","cleanedUp","pipeOnDrain","dests","asyncIterator","_fromList","ERR_MULTIPLE_CALLBACK","ERR_TRANSFORM_ALREADY_TRANSFORMING","ERR_TRANSFORM_WITH_LENGTH_0","afterTransform","ts","_transformState","transforming","writecb","writechunk","rs","needTransform","writeencoding","prefinish","err2","CorkedRequest","finish","corkReq","pendingcb","onCorkedFinish","corkedRequestsFree","WritableState","realHasInstance","internalUtil","deprecate","ERR_STREAM_CANNOT_PIPE","ERR_STREAM_DESTROYED","ERR_STREAM_NULL_VALUES","ERR_STREAM_WRITE_AFTER_END","ERR_UNKNOWN_ENCODING","nop","writableObjectMode","finalCalled","noDecode","writing","corked","bufferProcessing","onwrite","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","writev","_writev","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","rState","current","hasInstance","writeAfterEnd","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_Object$setPrototypeO","kLastResolve","kLastReject","kError","kEnded","kLastPromise","kHandlePromise","kStream","createIterResult","readAndResolve","iter","onReadable","AsyncIteratorPrototype","ReadableStreamAsyncIteratorPrototype","lastPromise","wrapForNext","_Object$create","emitErrorAndCloseNT","emitErrorNT","readableDestroyed","writableDestroyed","ERR_STREAM_PREMATURE_CLOSE","eos","onlegacyfinish","writableEnded","readableEnded","onrequest","setHeader","abort","isRequest","popCallback","destroys","destroyer","ERR_INVALID_OPT_VALUE","duplexKey","hwm","highWaterMarkFrom","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","utf8CheckByte","utf8CheckExtraBytes","utf8CheckIncomplete","Tree","trans","Data","sourceIndex","bitcount","destLen","sltree","sdtree","length_bits","length_base","dist_bits","dist_base","clcidx","code_tree","lengths","tinf_build_bits_base","tinf_build_tree","tinf_getbit","bit","tinf_read_bits","tinf_decode_symbol","tinf_decode_trees","hlit","hdist","hclen","clen","tinf_inflate_block_data","tinf_inflate_uncompressed_block","tinf_build_fixed_trees","bfinal","config","localStorage","trace","isArgumentsObject","isGeneratorFunction","BigIntSupported","SymbolSupported","ObjectToString","numberValue","stringValue","booleanValue","bigIntValue","symbolValue","checkBoxedPrimitive","prototypeValueOf","isMapToString","isSetToString","isWeakMapToString","isWeakSetToString","isArrayBufferToString","working","isDataViewToString","isDataView","isUint8Array","isUint8ClampedArray","isUint16Array","isUint32Array","isInt8Array","isInt16Array","isInt32Array","isBigInt64Array","isBigUint64Array","isWeakMap","isWeakSet","SharedArrayBufferCopy","isSharedArrayBufferToString","isSharedArrayBuffer","isAsyncFunction","isMapIterator","isSetIterator","isGeneratorObject","isWebAssemblyCompiledModule","descriptors","formatRegExp","objects","isNull","noDeprecation","throwDeprecation","traceDeprecation","debugs","debugEnvRegex","NODE_DEBUG","debugEnv","seen","stylize","stylizeNoColor","isBoolean","_extend","isUndefined","stylizeWithColor","formatValue","styleType","primitive","isNumber","formatPrimitive","visibleKeys","arrayToHash","isError","formatError","braces","toUTCString","formatProperty","formatArray","reduceToSingleString","pid","types","isNullOrUndefined","isPrimitive","months","getHours","getMinutes","getSeconds","getDate","getMonth","kCustomPromisifiedSymbol","callbackifyOnRejected","newReason","promisify","original","promiseReject","callbackify","callbackified","maybeCb","rej","availableTypedArrays","typedArrays","$slice","cache","superProto","trySlices","tryTypedArrays","xmldocAssumeBrowser","XmlElement","delegate","delegates","firstChild","lastChild","XmlTextNode","XmlCDataNode","XmlCommentNode","XmlDocument","onopentag","parser_opentag","onclosetag","parser_closetag","ontext","parser_text","oncdata","parser_cdata","oncomment","parser_comment","ondoctype","parser_doctype","parser_error","_addChild","_opentag","_closetag","_cdata","_comment","eachChild","childNamed","childrenNamed","childWithAttribute","descendantsNamed","descendantWithPath","descendant","components","valueWithPath","toStringWithIndent","linebreak","compressed","preserveWhitespace","escapeXML","childIndent","formatText","_doctype","finalText","trimmed","URLBrowserResolver","resolving","headers","xhr","XMLHttpRequest","headerName","setRequestHeader","responseType","onreadystatechange","readyState","onload","response","ontimeout","send","fetchUrl","writeFileSync","resolved","saveAs","defaultClientFonts","Roboto","bolditalics","Document","docDefinition","tableLayouts","vfs","_createDoc","getExtendedUrl","printer","createPdfKitDocument","urlResolver","images","_flushDoc","_pdfMakePages","_getPages","ignoreBuffer","_bufferToBlob","blob","Blob","_openWindow","win","_openPdf","getBlob","pdfUrl","webkitURL","createObjectURL","href","autoPrint","print","download","defaultFileName","getBase64","getDataUrl","getStream","createPdf","canCreatePdf","pdfMake","VirtualFileSystem","fileSystem","dataSystem","fixFilename","dataContent","bindFS","isAutoColumn","isStarColumn","buildColumnWidths","availableWidth","autoColumns","autoMin","autoMax","starColumns","starMaxMin","starMaxMax","fixedColumns","initial_availableWidth","_minWidth","_maxWidth","elasticWidth","_calcWidth","minW","maxW","starSize","measureMinMax","maxStar","starCount","TextTools","StyleContextStack","ColumnCalculator","fontStringify","getNodeId","qrEncoder","DocMeasure","fontProvider","styleDictionary","defaultStyle","imageMeasure","svgMeasure","textTools","styleStack","autoImageIndex","measureDocument","docStructure","measureNode","auto","_margin","processSingleMargins","currentMargin","marginLeft","marginTop","marginRight","marginBottom","convertMargin","flattenedStyleArray","styleArray","flattenedStyles","styleName","flattenStyleArray","getNodeMargin","extendMargins","measureColumns","measureVerticalContainer","ul","measureUnorderedList","ol","measureOrderedList","measureTable","measureLeaf","toc","measureToc","measureImage","measureSVG","canvas","measureCanvas","qr","measureQr","convertIfBase64Image","measureImageWithDimensions","_width","_height","_minHeight","_maxHeight","maxWidth","maxHeight","minWidth","minHeight","_alignment","getProperty","writeDimensions","_textRef","_textNodeRef","buildInlines","_inlines","textStyle","numberStyle","textMargin","lineStyle","tocStyle","lineMargin","tocMargin","lineNumberStyle","tocNumberStyle","_nodeRef","linkToDestination","alignment","_tocItemRef","_table","dontBreakRows","gapSizeForList","sizeOfString","buildUnorderedMarker","gapSize","lineColor","buildCircle","buildSquare","buildDisc","buildOrderedMarker","prepareAlpha","toAlpha","prepareRoman","CD","XC","XL","IX","roman","counterText","prepareDecimal","textArray","markerColor","_gapSize","listMarker","reversed","counterValue","_gap","measures","numGaps","extendTableWidths","_layout","hLineWidth","vLineWidth","hLineColor","vLineColor","hLineStyle","vLineStyle","paddingLeft","paddingRight","paddingTop","paddingBottom","defaultBorder","offsets","totalOffset","prevRightPadding","lOffset","getOffsets","cols","rows","colSpans","rowData","_span","measureCb","colSpan","markSpans","span","rowSpan","markVSpans","currentMinMax","getMinMax","minDifference","maxDifference","extendWidthsForColSpans","vector","measure","DocPreprocessor","preprocessDocument","tocs","nodeReferences","preprocessNode","preprocessColumns","preprocessVerticalContainer","preprocessList","preprocessTable","preprocessText","preprocessToc","preprocessImage","preprocessSVG","preprocessCanvas","preprocessQr","pageReference","textReference","tocItem","tocItemId","_pseudo","tocItemRef","_getNodeForNodeRef","_pageRef","isSetParentNode","TraversalTracker","DocumentContext","pageSize","pageMargins","availableHeight","snapshots","endingCell","tracker","backgroundLength","beginColumnGroup","bottomMost","lastColumnWidth","beginColumn","saved","calculateBottomMost","destContext","c1","saveContextInEndingCell","markEnding","_columnEndingContext","completeColumnGroup","addMargin","initializePage","getCurrentPage","pageSnapshot","moveToRelative","beginDetachedBlock","endDetachedBlock","moveToNextPage","pageOrientation","nextPageIndex","prevPage","prevY","createNewPage","currentAvailableWidth","currentPageOrientation","orientation","currentPage","newPageOrientation","pageOrientationString","getPageSize","newPageCreated","getCurrentPosition","innerHeight","innerWidth","pageNumber","pageInnerHeight","pageInnerWidth","verticalRatio","horizontalRatio","Line","offsetVector","ElementWriter","contextStack","addPageItem","addLine","dontUpdateContextPosition","getHeight","getCurrentPositionOnPage","alignLine","getWidth","inlines","newLineForced","lastLineInParagraph","additionalSpacing","justifyShift","addImage","absolutePosition","alignImage","addSVG","addQr","_canvas","addVector","imageWidth","alignCanvas","canvasWidth","ignoreContextX","ignoreContextY","beginClip","endClip","addFragment","useBlockXOffset","useBlockYOffset","cloneLine","_node","img","pushContext","contextOrWidth","popContext","FontProvider","fontDescriptors","pdfKitDoc","fontCache","fontDef","getFontType","typeName","getFontFile","familyName","provideFont","def","variable","nodeId","isPattern","getPattern","ImageMeasure","imageDictionary","realImageSrc","PageElementWriter","TableProcessor","addAll","otherArray","LayoutBuilder","registerTableLayouts","layoutDocument","background","footer","watermark","pageBreakBeforeFct","addPageBreaksIfNecessary","linearNodeList","nodeInfo","startPosition","pageNumbers","pageBreak","pageBreakCalculated","followingNodesOnPage","nodesOnNextPage","previousNodesOnPage","ii","resetXYs","resetXY","docPreprocessor","docMeasure","tryLayoutDocument","writer","startTracking","addBackground","processNode","addHeadersAndFooters","addWatermark","backgroundGetter","pageBackground","beginUnbreakableBlock","commitUnbreakableBlock","addStaticRepeatable","headerOrFooter","sizeFunction","addDynamicRepeatable","nodeGetter","pageIndex","sizes","headerSizeFct","footerSizeFct","rotatedSize","styleContextStack","sizeOfRotatedText","getWatermarkFontSize","watermarkObject","_size","getWatermarkSize","decorateNode","unbreakable","absPosition","relPosition","relativePosition","processVerticalContainer","processColumns","processList","processTable","processLeaf","processToc","processImage","processSVG","processCanvas","processQr","columnNode","gaps","gapArray","processRow","tableBody","tableRow","pageBreaks","pageDesc","leftOffset","colLeftOffset","getEndingCell","columnIndex","endingRow","orderedList","nextMarker","markerLine","addInline","getAscenderHeight","tableNode","processor","beginTable","rowHeights","heights","beginRow","endRow","endTable","buildNextLine","currentHeight","_pageNodeRef","cloneInline","inline","newInline","isForceContinue","hasEnoughSpaceForInline","isHardWrap","noWrap","getAvailableWidth","widthPerChar","maxChars","fontFeatures","noNewLine","leadingCut","trailingCut","inlineWidths","nextInlines","inlineWidth","inlineTrailingCut","nextInline","lineEnd","transactionLevel","repeatables","fitOnPage","addFct","fragment","nextPage","rep","insertedOnPages","originalX","forcedX","forcedY","unbreakableContext","nbPages","currentBlockToRepeatable","pushToRepeatables","popFromRepeatables","PdfKit","getEngineInstance","createPdfDocument","PdfKitEngine","SVGMeasure","textDecorator","PdfPrinter","createMetadata","standardizePropertyKey","standardizedKey","fixPageMargins","updatePageOrientationInOptions","previousPageOrientation","offsetText","renderLine","preparePageNodeRefLine","newWidth","diffWidth","drawBackground","shiftToBaseline","shiftedY","linkToPage","drawDecorations","renderWatermark","renderVector","gradient","pn","renderImage","renderSVG","fontsFamily","requiredFonts","requiredFont","findFont","pageSize2widthAndHeight","isNeedSwapPageSizes","fixPageSize","pdfOptions","language","builder","noBorders","headerLineOnly","headerRows","lightHorizontalLines","pageBreakBefore","maxNumberPages","maxPagesNumber","pageHeight","getBottomPosition","getItemHeight","fixedMargins","bottomPosition","calculatePageHeight","patternDefinitions","boundingBox","colored","createPatterns","progressCallback","totalItems","renderedItems","il","renderPages","printActionRef","OpenAction","VERSIONS","NUMERIC_REGEXP","ALPHANUMERIC_REGEXP","ALPHANUMERIC_OUT_REGEXP","GF256_MAP","GF256_INVMAP","GF256_GENPOLY","prevpoly","poly","ALPHANUMERIC_MAP","MASKFUNCS","needsverinfo","ver","ndatabits","ecclevel","nfullbits","ndatalenbits","getmaxdatalen","calculateecc","genpoly","modulus","polylen","genpolylen","quotient","augumentbch","maskdata","reserved","maskf","putformatinfo","evaluatematrix","evaluategroup","score","nblacks","nextrow","buildCanvas","foreground","MODES","ECCLEVELS","eccLevel","newdata","validatedata","maxbuflen","datalen","nlenbits","nblocks","subsizes","subsize","subsize0","pivot","eccs","nitemsperblock","augumenteccs","getsizebyver","blit","aligns","maxj","makebasematrix","jj","putdata","bestmask","bestscore","generate","generateFrame","modSize","paddingXY","cd","styleOverrides","styleNameOrOverride","howMany","autopush","styleNames","styleOverrideObject","pushStyleOverrideObject","pushedItems","xmldoc","stripUnits","textVal","parseSVG","svgString","docWidth","docHeight","viewBoxParts","tableWidth","rowSpanData","rsd","lastWidth","prepareRowSpanData","cleanUpRepeatables","rowsWithoutPageBreak","keepWithHeaderRows","rowIndex","colIndex","cell","border","rowOffset","setBorder","colOffset","borderIndex","borderValue","prepareCellBorders","drawHorizontalLine","onRowBreak","rowPaddingTop","topLineWidth","reservedAtBottom","bottomLineWidth","rowPaddingBottom","rowCallback","rowTopY","lineIndex","overrideY","cellAbove","currentCell","rowCellAbove","currentLine","shouldDrawLine","topBorder","bottomBorder","rowBottomBorder","_rowSpanCurrentOffset","colSpanIndex","drawVerticalLine","vLineColIndex","vLineRowIndex","beforeVLineColIndex","cellBefore","rowCellBeforeAbove","rowCurrentCellAbove","stopTracking","endingPage","endingY","_colSpan","getLineXs","ys","hasBreaks","yi","yl","willBreak","rowBreakWithoutHeader","hzLineOffset","leftCellBorder","rightCellBorder","overlayPattern","overlayOpacity","widthRightBorder","widthLeftBorder","x1f","y1f","bgWidth","bgHeight","hLineWhenBroken","headerRepeatable","drawDecoration","firstInline","biggerInline","maxInline","totalWidth","lineAscent","lw","decoration","decorationStyle","decorationColor","nbDashes","rdx","nbDots","sh","nbWaves","rwx","iii","currentGroup","ll","decorationItem","groupDecorations","LEADING","TRAILING","splitWords","copyStyle","normalizeString","getStyleProperty","currentLineWidth","measured","normalized","getOneWord","tmpWords","lastWord","normalizeTextArray","leadingIndent","fontName","preserveLeadingSpaces","preserveTrailingSpaces","leadingSpaces","trailingSpaces","angleRad","callbacks","innerFunction","MouseEvent","initMouseEvent","navigator","autoBom","_inheritsLoose","allowArrayLike","_interopDefault","cloneDeep","brotli","formats","_applyDecoratedDescriptor","decorators","initializer","decorator","memoized","registerFormat","openSync","probe","getFont","defaultLanguage","setDefaultLanguage","SubHeader","firstCode","entryCount","idDelta","idRangeOffset","CmapGroup","startCharCode","endCharCode","glyphID","UnicodeValueRange","startUnicodeValue","additionalCount","UVSMapping","unicodeValue","DefaultUVS","NonDefaultUVS","VarSelectorRecord","varSelector","defaultUVS","nonDefaultUVS","CmapSubtable","codeMap","subHeaderKeys","subHeaderCount","subHeaders","glyphIndexArray","segCountX2","segCount","searchRange","entrySelector","rangeShift","endCode","reservedPad","startCode","glyphIndices","is32","nGroups","numRecords","varSelectors","CmapEntry","platformID","encodingID","numSubtables","revision","checkSumAdjustment","magicNumber","created","modified","xMin","yMin","xMax","yMax","lowestRecPPEM","fontDirectionHint","indexToLocFormat","glyphDataFormat","hhea","advanceWidthMax","minLeftSideBearing","minRightSideBearing","xMaxExtent","caretSlopeRise","caretSlopeRun","caretOffset","metricDataFormat","numberOfMetrics","HmtxEntry","bearing","hmtx","metrics","bearings","maxp","numGlyphs","maxPoints","maxContours","maxComponentPoints","maxComponentContours","maxZones","maxTwilightPoints","maxStorage","maxFunctionDefs","maxInstructionDefs","maxStackElements","maxSizeOfInstructions","maxComponentElements","maxComponentDepth","getEncoding","languageID","MAC_LANGUAGE_ENCODINGS","ENCODINGS","LANGUAGES","NameRecord","nameID","stringOffset","LangTagRecord","NameTable","records","langTagCount","langTags","NAMES","record","en","OS2","xAvgCharWidth","usWeightClass","usWidthClass","fsType","ySubscriptXSize","ySubscriptYSize","ySubscriptXOffset","ySubscriptYOffset","ySuperscriptXSize","ySuperscriptYSize","ySuperscriptXOffset","ySuperscriptYOffset","yStrikeoutSize","yStrikeoutPosition","panose","ulCharRange","vendorID","fsSelection","usFirstCharIndex","usLastCharIndex","typoAscender","typoDescender","typoLineGap","winAscent","winDescent","codePageRange","defaultChar","breakChar","maxContent","usLowerOpticalPointSize","usUpperOpticalPointSize","underlinePosition","underlineThickness","minMemType42","maxMemType42","minMemType1","maxMemType1","numberOfGlyphs","glyphNameIndex","cvt","controlValues","fpgm","instructions","loca","prep","controlValueProgram","glyf","CFFIndex","getCFFVersion","hdrSize","offSize","startPos","_i22","_sizes","_step3","_iterator3","_item","FLOAT_LOOKUP","FLOAT_ENCODE_LOOKUP","CFFOperand","n1","n2","forceLarge","FLOAT_EOF","CFFDict","ops","_step4","_iterator4","field","decodeOperands","operands","encodeOperands","_field","dict","_step5","_iterator5","_step6","_iterator6","_step7","_iterator7","_step8","_iterator8","_op","CFFPointer","_r$Pointer","_proto3","Ptr","CFFPrivateDict","CFFBlendOp","numBlends","standardStrings","StandardEncoding","ISOAdobeCharset","LangSysTable","reqFeatureIndex","featureCount","featureIndexes","LangSysRecord","langSys","Script","defaultLangSys","langSysRecords","ScriptRecord","ScriptList","Feature","featureParams","lookupCount","lookupListIndexes","FeatureRecord","FeatureList","LookupFlags","markAttachmentType","LookupList","SubTable","Lookup","lookupType","subTableCount","subTables","markFilteringSet","useMarkFilteringSet","RangeRecord","startCoverageIndex","Coverage","glyphCount","rangeCount","rangeRecords","ClassRangeRecord","class","ClassDef","startGlyph","classValueArray","classRangeCount","classRangeRecord","Device","deltaFormat","LookupRecord","sequenceIndex","lookupListIndex","Rule","lookupRecords","RuleSet","ClassRule","ClassSet","coverage","ruleSetCount","ruleSets","classDef","classSetCnt","classSet","coverages","ChainRule","backtrackGlyphCount","backtrack","inputGlyphCount","lookaheadGlyphCount","ChainRuleSet","ChainingContext","chainCount","chainRuleSets","backtrackClassDef","inputClassDef","lookaheadClassDef","chainClassSet","backtrackCoverage","inputCoverage","lookaheadCoverage","F2DOT14","RegionAxisCoordinates","startCoord","peakCoord","endCoord","VariationRegionList","axisCount","regionCount","variationRegions","DeltaSet","shortDeltas","shortDeltaCount","regionDeltas","regionIndexCount","deltas","ItemVariationData","itemCount","regionIndexes","deltaSets","ItemVariationStore","variationRegionList","variationDataCount","itemVariationData","ConditionTable","axisIndex","filterRangeMinValue","filterRangeMaxValue","ConditionSet","conditionCount","conditionTable","FeatureTableSubstitutionRecord","featureIndex","alternateFeatureTable","FeatureTableSubstitution","substitutionCount","substitutions","FeatureVariationRecord","conditionSet","featureTableSubstitution","FeatureVariations","majorVersion","minorVersion","featureVariationRecordCount","featureVariationRecords","PredefinedOp","predefinedOps","_proto5","CFFEncodingVersion","_r$Number","Range1","nLeft","Range2","CFFEncoding","nCodes","nRanges","ranges","RangeArray","_r$Array","CFFCustomCharset","CharStrings","CFFCharset","FDRange3","fd","FDRange4","FDSelect","fds","sentinel","CFFPrivateOp","_proto8","FontDict","CFFTopDict","VariationStore","itemVariationStore","CFF2TopDict","CFFTop","nameIndex","topDictIndex","stringIndex","globalSubrIndex","topDict","CFFFont","_proto9","isCIDFont","ROS","sid","getCharString","getGlyphName","charset","fdForGlyph","privateDictForGlyph","FDArray","Private","FullName","FamilyName","VerticalOrigin","glyphIndex","vertOriginY","VORG","defaultVertOriginY","numVertOriginYMetrics","BigMetrics","horiBearingX","horiBearingY","horiAdvance","vertBearingX","vertBearingY","vertAdvance","SmallMetrics","bearingX","bearingY","EBDTComponent","ByteAligned","BitAligned","SBitLineMetrics","numComponents","dataLen","widthMax","caretSlopeNumerator","caretSlopeDenominator","minOriginSB","minAdvanceSB","maxBeforeBL","minAfterBL","CodeOffsetPair","glyphCode","IndexSubtable","imageFormat","imageDataOffset","offsetArray","lastGlyphIndex","firstGlyphIndex","imageSize","bigMetrics","glyphArray","glyphCodeArray","IndexSubtableArray","BitmapSizeTable","indexSubTableArray","indexTablesSize","numberOfIndexSubTables","colorRef","hori","vert","startGlyphIndex","endGlyphIndex","ppemX","ppemY","bitDepth","EBLC","numSizes","ImageTable","ppem","resolution","imageOffsets","sbix","numImgTables","imageTables","LayerRecord","paletteIndex","BaseGlyphRecord","firstLayerIndex","numLayers","COLR","numBaseGlyphRecords","baseGlyphRecord","layerRecords","numLayerRecords","ColorRecord","CPAL","numPaletteEntries","numPalettes","numColorRecords","colorRecords","colorRecordIndices","offsetPaletteTypeArray","offsetPaletteLabelArray","offsetPaletteEntryLabelArray","BaseCoord","coordinate","referenceGlyph","baseCoordPoint","deviceTable","BaseValues","defaultIndex","baseCoordCount","baseCoords","FeatMinMaxRecord","minCoord","maxCoord","MinMax","featMinMaxCount","featMinMaxRecords","BaseLangSysRecord","minMax","BaseScript","baseValues","defaultMinMax","baseLangSysCount","baseLangSysRecords","BaseScriptRecord","BaseScriptList","BaseTagList","Axis","baseTagList","baseScriptList","BASE","horizAxis","vertAxis","AttachPoint","AttachList","attachPoints","CaretValue","caretValuePoint","LigGlyph","LigCaretList","ligGlyphCount","ligGlyphs","MarkGlyphSetsDef","markSetTableFormat","markSetCount","GDEF","glyphClassDef","attachList","ligCaretList","markAttachClassDef","markGlyphSetsDef","ValueFormat","xPlacement","yPlacement","xPlaDevice","rel","yPlaDevice","xAdvDevice","yAdvDevice","ValueRecord","_proto10","buildStruct","PairValueRecord","secondGlyph","value1","value2","PairSet","Class2Record","Anchor","xCoordinate","yCoordinate","anchorPoint","xDeviceTable","yDeviceTable","EntryExitRecord","entryAnchor","exitAnchor","MarkRecord","markAnchor","MarkArray","BaseRecord","classCount","BaseArray","ComponentRecord","LigatureAttach","LigatureArray","GPOSLookup","valueFormat","valueCount","valueFormat1","valueFormat2","pairSetCount","pairSets","classDef1","classDef2","class1Count","class2Count","classRecords","entryExitCount","entryExitRecords","markCoverage","baseCoverage","markArray","baseArray","ligatureCoverage","ligatureArray","mark1Coverage","mark2Coverage","mark1Array","mark2Array","posFormat","extension","GPOS","scriptList","featureList","lookupList","featureVariations","Sequence","AlternateSet","Ligature","compCount","LigatureSet","GSUBLookup","deltaGlyphID","substitute","substFormat","sequences","alternateSet","ligatureSets","substitutes","GSUB","JstfGSUBModList","JstfPriority","shrinkageEnableGSUB","shrinkageDisableGSUB","shrinkageEnableGPOS","shrinkageDisableGPOS","shrinkageJstfMax","extensionEnableGSUB","extensionDisableGSUB","extensionEnableGPOS","extensionDisableGPOS","extensionJstfMax","JstfLangSys","JstfLangSysRecord","jstfLangSys","JstfScript","extenderGlyphs","langSysCount","JstfScriptRecord","JSTF","scriptCount","VariableSizeNumber","_proto11","MapDataEntry","entryFormat","outerIndex","innerIndex","DeltaSetIndexMap","mapCount","mapData","HVAR","advanceWidthMapping","LSBMapping","RSBMapping","Signature","SignatureBlock","cbSignature","signature","DSIG","ulVersion","usNumSigs","usFlag","signatures","signatureBlocks","GaspRange","rangeMaxPPEM","rangeGaspBehavior","gasp","numRanges","gaspRanges","DeviceRecord","pixelSize","maximumWidth","hdmx","sizeDeviceRecord","KernPair","ClassTable","firstGlyph","nGlyphs","Kern2Array","leftTable","rowWidth","KernSubtable","nPairs","pairs","rightTable","kernValueCount","leftClassCount","rightClassCount","kernValue","leftClass","rightClass","kernIndex","KernTable","subVersion","tupleIndex","kern","nTables","LTSH","yPels","PCLT","fontNumber","pitch","typeFamily","symbolSet","typeface","characterComplement","fileName","strokeWeight","widthType","serifStyle","Ratio","bCharSet","xRatio","yStartRatio","yEndRatio","vTable","yPelHeight","VdmxGroup","recs","startsz","endsz","VDMX","numRecs","numRatios","ratioRanges","vhea","advanceHeightMax","minTopSideBearing","minBottomSideBearing","yMaxExtent","VmtxEntry","vmtx","shortFrac","Correspondence","fromCoord","toCoord","Segment","pairCount","correspondence","avar","UnboundedArrayAccessor","_proto12","getItem","UnboundedArray","_r$Array2","LookupTable","ValueType","Shadow","_proto14","BinarySearchHeader","unitSize","nUnits","LookupSegmentSingle","lastGlyph","LookupSegmentArray","LookupSingle","binarySearchHeader","StateTable","entryData","newState","Entry","StateArray","nClasses","classTable","stateArray","entryTable","BslnSubtable","mappingData","standardGlyph","controlPoints","bsln","defaultBaseline","Setting","setting","FeatureName","nSettings","settingTable","featureFlags","defaultSetting","feat","featureNameCount","reserved1","reserved2","featureNames","Axis$1","axisTag","minValue","maxValue","Instance","coord","postscriptNameID","instanceSize","fvar","offsetToData","countSizePairs","axisSize","instanceCount","axis","shortFrac$1","Offset","gvar","globalCoordCount","globalCoords","ClassTable$1","subFeatureFlags","ClassLookupTable","newStateOffset","WidthDeltaRecord","justClass","beforeGrowLimit","beforeShrinkLimit","afterGrowLimit","afterShrinkLimit","growFlags","shrinkFlags","WidthDeltaCluster","ActionData","lowerLimit","upperLimit","addGlyph","substThreshold","substGlyph","variationAxis","minimumLimit","noStretchValue","maximumLimit","Action","actionClass","actionType","actionLength","actionData","PostcompensationAction","PostCompensationTable","lookupTable","JustificationTable","wdcOffset","postCompensationTable","widthDeltaClusters","just","horizontal","vertical","LigatureData","action","ContextualData","markIndex","currentIndex","InsertionData","currentInsertIndex","markedInsertIndex","SubstitutionTable","SubtableData","substitutionTable","ligatureActions","ligatureList","insertionActions","Subtable","FeatureEntry","featureType","featureSetting","enableFlags","disableFlags","MorxChain","defaultFlags","chainLength","nFeatureEntries","nSubtables","subtables","morx","unused","nChains","chains","OpticalBounds","opbd","CBLC","_class","TableEntry","checkSum","Directory","numTables","binarySearch","cmp","_step9","_iterator9","tables$1","maxExponentFor2","maxPowerOf2","CmapProcessor","cmapTable","findSubtable","_step10","_iterator10","uvs","_proto15","_step11","_iterator11","_step12","_step11$value","_iterator12","variationSelector","getVariationSelector","rangeOffset","_gid","_min","_max","_mid","sel","getCharacterSet","endCodes","_step13","_iterator13","codePointsForGlyph","_res2","_step14","_res3","_iterator14","_step15","_res4","_iterator15","_group","KernProcessor","_proto16","getKerning","_step16","_iterator16","crossStream","variation","pairIdx","pair","rightOffset","override","UnicodeLayoutEngine","_proto17","positionGlyphs","clusterStart","clusterEnd","isMark","positionCluster","baseBox","cbox","yGap","markBox","combiningClass","getCombiningClass","_proto18","addPoint","UNICODE_SCRIPTS","Caucasian_Albanian","Arabic","Imperial_Aramaic","Armenian","Avestan","Balinese","Bamum","Bassa_Vah","Batak","Bengali","Bopomofo","Brahmi","Braille","Buginese","Buhid","Chakma","Canadian_Aboriginal","Carian","Cham","Cherokee","Coptic","Cypriot","Cyrillic","Devanagari","Deseret","Duployan","Egyptian_Hieroglyphs","Elbasan","Ethiopic","Georgian","Glagolitic","Gothic","Grantha","Greek","Gujarati","Gurmukhi","Hangul","Han","Hanunoo","Hebrew","Hiragana","Pahawh_Hmong","Katakana_Or_Hiragana","Old_Italic","Javanese","Kayah_Li","Katakana","Kharoshthi","Khmer","Khojki","Kannada","Kaithi","Tai_Tham","Lao","Latin","Lepcha","Limbu","Linear_A","Linear_B","Lisu","Lycian","Lydian","Mahajani","Mandaic","Manichaean","Mende_Kikakui","Meroitic_Cursive","Meroitic_Hieroglyphs","Malayalam","Modi","Mongolian","Mro","Meetei_Mayek","Myanmar","Old_North_Arabian","Nabataean","Nko","Ogham","Ol_Chiki","Old_Turkic","Oriya","Osmanya","Palmyrene","Pau_Cin_Hau","Old_Permic","Phags_Pa","Inscriptional_Pahlavi","Psalter_Pahlavi","Phoenician","Miao","Inscriptional_Parthian","Rejang","Runic","Samaritan","Old_South_Arabian","Saurashtra","Shavian","Sharada","Siddham","Khudawadi","Sinhala","Sora_Sompeng","Sundanese","Syloti_Nagri","Syriac","Tagbanwa","Takri","Tai_Le","New_Tai_Lue","Tamil","Tai_Viet","Telugu","Tifinagh","Tagalog","Thaana","Thai","Tibetan","Tirhuta","Ugaritic","Vai","Warang_Citi","Old_Persian","Cuneiform","Yi","Inherited","Common","Unknown","OPENTYPE_SCRIPTS","_step17","_iterator17","RTL","arab","hebr","syrc","thaa","cprt","khar","phnx","lydi","avst","armi","phli","prti","sarb","orkh","samr","mand","merc","mero","mani","mend","nbat","narb","palm","phlp","direction","GlyphRun","direction$1","_step18","_iterator18","_step19","_iterator19","_step20","_iterator20","GlyphPosition","allTypographicFeatures","exclusive","allTypeFeatures","ligatures","requiredLigatures","commonLigatures","rareLigatures","rebusPictures","diphthongLigatures","squaredLigatures","abbrevSquaredLigatures","symbolLigatures","contextualLigatures","historicalLigatures","cursiveConnection","unconnected","partiallyConnected","cursive","letterCase","verticalSubstitution","substituteVerticalForms","linguisticRearrangement","numberSpacing","monospacedNumbers","proportionalNumbers","thirdWidthNumbers","quarterWidthNumbers","smartSwash","wordInitialSwashes","wordFinalSwashes","nonFinalSwashes","diacritics","showDiacritics","hideDiacritics","decomposeDiacritics","verticalPosition","normalPosition","superiors","inferiors","ordinals","scientificInferiors","fractions","noFractions","verticalFractions","diagonalFractions","overlappingCharacters","preventOverlap","typographicExtras","slashedZero","mathematicalExtras","mathematicalGreek","ornamentSets","noOrnaments","dingbats","piCharacters","fleurons","decorativeBorders","internationalSymbols","mathSymbols","characterAlternatives","noAlternates","designComplexity","designLevel1","designLevel2","designLevel3","designLevel4","designLevel5","styleOptions","noStyleOptions","displayText","engravedText","illuminatedCaps","titlingCaps","tallCaps","characterShape","traditionalCharacters","simplifiedCharacters","JIS1978Characters","JIS1983Characters","JIS1990Characters","traditionalAltOne","traditionalAltTwo","traditionalAltThree","traditionalAltFour","traditionalAltFive","expertCharacters","JIS2004Characters","hojoCharacters","NLCCharacters","traditionalNamesCharacters","numberCase","lowerCaseNumbers","upperCaseNumbers","textSpacing","proportionalText","monospacedText","halfWidthText","thirdWidthText","quarterWidthText","altProportionalText","altHalfWidthText","transliteration","noTransliteration","annotation","noAnnotation","boxAnnotation","roundedBoxAnnotation","circleAnnotation","invertedCircleAnnotation","parenthesisAnnotation","periodAnnotation","romanNumeralAnnotation","diamondAnnotation","invertedBoxAnnotation","invertedRoundedBoxAnnotation","kanaSpacing","fullWidthKana","proportionalKana","ideographicSpacing","fullWidthIdeographs","proportionalIdeographs","halfWidthIdeographs","unicodeDecomposition","canonicalComposition","compatibilityComposition","transcodingComposition","rubyKana","CJKSymbolAlternatives","noCJKSymbolAlternatives","CJKSymbolAltOne","CJKSymbolAltTwo","CJKSymbolAltThree","CJKSymbolAltFour","CJKSymbolAltFive","ideographicAlternatives","noIdeographicAlternatives","ideographicAltOne","ideographicAltTwo","ideographicAltThree","ideographicAltFour","ideographicAltFive","CJKVerticalRomanPlacement","CJKVerticalRomanCentered","CJKVerticalRomanHBaseline","italicCJKRoman","CJKItalicRoman","caseSensitiveLayout","caseSensitiveSpacing","alternateKana","alternateHorizKana","alternateVertKana","stylisticAlternatives","noStylisticAlternates","stylisticAltOne","stylisticAltTwo","stylisticAltThree","stylisticAltFour","stylisticAltFive","stylisticAltSix","stylisticAltSeven","stylisticAltEight","stylisticAltNine","stylisticAltTen","stylisticAltEleven","stylisticAltTwelve","stylisticAltThirteen","stylisticAltFourteen","stylisticAltFifteen","stylisticAltSixteen","stylisticAltSeventeen","stylisticAltEighteen","stylisticAltNineteen","stylisticAltTwenty","contextualAlternates","swashAlternates","contextualSwashAlternates","lowerCase","defaultLowerCase","lowerCaseSmallCaps","lowerCasePetiteCaps","upperCase","defaultUpperCase","upperCaseSmallCaps","upperCasePetiteCaps","languageTag","CJKRomanSpacing","halfWidthCJKRoman","proportionalCJKRoman","defaultCJKRoman","fullWidthCJKRoman","OTMapping","rlig","clig","dlig","hlig","liga","hist","smcp","pcap","frac","dnom","numr","afrc","case","ccmp","cpct","valt","swsh","cswh","curs","c2pc","c2sc","fin2","medi","med2","fin3","fina","pkna","half","halt","hkna","vkna","ital","lnum","onum","mgrk","calt","vrt2","tnum","pnum","sups","subs","ordn","pwid","hwid","qwid","twid","fwid","palt","trad","smpl","jp78","jp83","jp90","jp04","expt","hojo","nlck","tnam","ruby","titl","ss01","ss02","ss03","ss04","ss05","ss06","ss07","ss08","ss09","ss10","ss11","ss12","ss13","ss14","ss15","ss16","ss17","ss18","ss19","ss20","_class$1","AATMapping","ot","aat","mapFeatureStrings","typeCode","settingCode","_class$2","AATLookupTable","_proto19","glyphsForValue","classValue","_step21","_iterator21","_step22","_iterator22","_segment","AATStateMachine","_proto20","processEntry","currentState","classCode","shouldAdvance","entryIndex","traverse","visited","_this$stateTable","_step23","_iterator23","REVERSE_DIRECTION","AATMorxProcessor","processIndicRearragement","processContextualSubstitution","processLigature","processNoncontextualSubstitutions","processGlyphInsertion","inputCache","_proto21","_step24","_iterator24","_step25","_iterator25","_step26","_iterator26","processSubtable","ligatureStack","markedGlyph","markedIndex","stateMachine","getStateMachine","getProcessor","verb","reorderGlyphs","subsitutions","_lookup","_lookupTable","_this$ligatureStack","actionIndex","ligatureIndex","ligatureGlyphs","_codePoints","componentGlyph","ligatureEntry","_insertGlyphs","insertionActionIndex","isBefore","_this$glyphs","insertions","_count","_isBefore","getSupportedFeatures","_step27","_iterator27","_step28","_iterator28","generateInputs","generateInputCache","_step29","_iterator29","_step30","_iterator30","generateInputsForSubtable","_stack$pop","rangeA","rangeB","reverseA","reverseB","AATLayoutEngine","morxProcessor","fallbackPosition","_proto22","glyphRun","mapOTToAAT","getAvailableFeatures","_feature","_r","_f","mapAATToOT","stringsForGlyph","_step31","glyphStrings","_iterator31","_addStrings","strings","_step32","_iterator32","_cmapProcessor","ShapingPlan","stages","globalFeatures","allFeatures","_proto23","_addFeatures","_step33","stageIndex","stage","_iterator33","addStage","setFeatureOverrides","assignGlobalFeatures","_step34","_iterator34","_step35","_iterator35","applyFeatures","VARIATION_FEATURES","COMMON_FEATURES","FRACTIONAL_FEATURES","HORIZONTAL_FEATURES","DIRECTIONAL_FEATURES","ltr","rtl","DefaultShaper","plan","_plan","planPreprocessing","planFeatures","planPostprocessing","assignFeatures","userFeatures","isDigit","trie","FEATURES","ISOL","FINA","FIN2","MEDI","MED2","INIT","STATE_TABLE","ArabicShaper","_DefaultShaper","curAction","prevAction","getShapingClass","_STATE_TABLE$state$ty","category","getCategory","GlyphIterator","_proto24","shouldIgnore","ignoreMarks","ignoreBaseGlyphs","isBase","ignoreLigatures","isLigature","peek","increment","peekIndex","DEFAULT_SCRIPTS","OTProcessor","lookups","variationsIndex","_variationProcessor","findVariationsIndex","normalizedCoords","selectScript","ligatureID","currentFeature","_proto25","findScript","_step36","_iterator36","_step37","_iterator37","changed","_step38","_iterator38","_step39","_iterator39","substituteFeature","substituteFeatureForVariations","lookupsForFeatures","exclude","_step40","_iterator40","_step41","_iterator41","lookupIndex","_step42","_iterator42","substitution","variations","conditions","variationConditionsMatch","applyLookups","glyphIterator","_step43","_iterator43","_step43$value","_step44","_iterator44","applyLookup","applyLookupList","_step45","_iterator45","lookupRecord","_step46","_iterator46","coverageIndex","_step47","_iterator47","sequence","sequenceMatches","component","sequenceMatchIndices","coverageSequenceMatches","getClassID","_step48","_iterator48","classSequenceMatches","_this6","classID","applyContext","_step49","_iterator49","_step50","_iterator50","_rule","applyChainingContext","_step51","_iterator51","_step52","_iterator52","_rule2","GlyphInfo","ligatureComponent","isLigated","cursiveAttachment","markAttachment","shaperInfo","substituted","isMultiplied","HangulShaper","_DefaultShaper2","getType","_STATE_TABLE$1$state$","STATE_TABLE$1","DECOMPOSE","hasGlyphForCodePoint","decompose","COMPOSE","compose","TONE_MARK","reorderToneMark","INVALID","insertDottedCircle","HANGUL_BASE","HANGUL_COUNT","L_BASE","V_BASE","T_BASE","V_COUNT","T_COUNT","L_END","V_END","T_END","DOTTED_CIRCLE","isL","isV","isT","isTone","isLVT","isLV","isCombiningL","isCombiningV","isCombiningT","LV","LVT","glyphForCodePoint","ljmo","vjmo","tjmo","lv","prevType","del","dottedCircle","useData","categories","decompositions","CATEGORIES","POSITIONS","Start","Ra_To_Become_Reph","Pre_M","Pre_C","Base_C","After_Main","Above_C","Before_Sub","Below_C","After_Sub","Before_Post","Post_C","After_Post","Final_C","SMVD","End","CONSONANT_FLAGS","JOINER_FLAGS","HALANT_OR_COENG_FLAGS","INDIC_CONFIGS","Default","hasOldSpec","virama","basePos","rephPos","rephMode","blwfMode","INDIC_DECOMPOSITIONS","decompositions$1","trie$1","IndicShaper","_DefaultShaper3","setupSyllables","initialReordering","finalReordering","unicodeScript","fromOpenType","indicConfig","isOldSpec","decomposed","indicCategory","indicPosition","IndicInfo","syllableType","syllable","_step53","_iterator53","_step53$value","isConsonant","isJoiner","isHalantOrCoeng","wouldSubstitute","_step54","_iterator54","_glyph$features","_layoutEngine","GSUBProcessor","consonantPosition","consonant","nextSyllable","_glyphs$start$shaperI","_i3","hasReph","rphf","_g","_i4","seenBelow","_i5","_i6","_info2","_i7","disallowDoubleHalants","_i8","_i9","_info3","_j2","_i10","_j3","_i11","_i12","blwf","_i13","_i14","abvf","pstf","_i15","_i16","_j4","cfar","_i17","nonJoiner","_j5","tryPref","BASE_C","_i18","newPos","_i19","oldPos","newRephPos","_i20","reph","_i21","_newPos","_oldPos2","_oldPos","_tmp","categories$1","decompositions$2","trie$2","stateMachine$1","UniversalShaper","_DefaultShaper4","setupSyllables$1","clearSubstitutionFlags","recordRphf","recordPref","reorder","useCategory","USEInfo","_step55","_iterator55","_step55$value","_step56","_iterator56","_step57","_iterator57","_step58","_iterator58","nextSyllable$1","isHalant","SHAPERS","mong","phag","hang","bng2","beng","dev2","deva","gjr2","gujr","guru","gur2","knda","knd2","mlm2","mlym","ory2","orya","taml","tml2","telu","tel2","khmr","bali","batk","brah","bugi","buhd","cakm","cham","dupl","egyp","gran","hano","java","kthi","kali","khoj","sind","lepc","limb","mahj","mtei","modi","hmng","rjng","saur","shrd","sidd","sinh","sund","sylo","tglg","tagb","tale","lana","tavt","takr","tibt","tfng","tirh","latn","DFLT","_OTProcessor","_this7","_this$glyphs2","curGlyph","_index2","_index3","_step60","_iterator60","ligature","_step61","_curGlyph","_iterator61","_characters","_index4","ligatureGlyph","isMarkLigature","_step62","lastLigID","lastNumComps","curComps","_iterator62","matchIndex","GPOSProcessor","_OTProcessor2","_proto28","applyPositionValue","variationProcessor","variationStore","getDelta","nextGlyph","_step63","_iterator63","_pair","class1","class2","nextIndex","_nextGlyph","curRecord","nextRecord","getAnchor","rightToLeft","baseGlyphIndex","baseIndex","markRecord","baseAnchor","applyAnchor","_markIndex","_baseGlyphIndex","ligIndex","ligAttach","markGlyph","ligGlyph","compIndex","_markRecord","_baseAnchor","mark1Index","prevIndex","_cur","good","mark2Index","_markRecord2","_baseAnchor2","markCoords","markPos","anchor","fixCursiveAttachment","fixMarkAttachment","_k","OTLayoutEngine","glyphInfos","_proto29","setup","_this8","shaper","_step59","_iterator59","choose","_this9","glyphInfo","zeroMarkWidths","zeroMarkAdvances","LayoutEngine","unicodeLayoutEngine","kernProcessor","_proto30","_script","getScript","forString","_step64","_iterator64","_script2","forCodePoints","hideDefaultIgnorables","positioned","isDefaultIgnorable","plane","_step65","_iterator65","_step66","_iterator66","SVG_COMMANDS","Path","_bbox","_cbox","_proto31","toFunction","_this10","toSVG","mapPoints","_step67","_iterator67","_fn","_step68","_iterator68","_step69","p0","p2","p3","_iterator69","_c$args","_c$args2","qp1x","qp1y","p3x","p3y","_c$args3","b2ac","_i23","_class$3","_class$4","StandardNames","Glyph","_proto32","_getPath","_getCBox","_getBBox","_getTableMetrics","metric","_getMetrics","_metrics","os2","_this$_getTableMetric","leftBearing","_this$_getTableMetric2","advanceHeight","topBearing","getAdvanceAdjustment","getScaledPath","_getName","render","GlyfHeader","numberOfContours","Point","onCurve","endContour","Component","scale01","scale10","TTFGlyph","_Glyph","_proto34","internal","_getTableStream","_parseGlyphCoord","same","_decode","glyfPos","_decodeSimple","_decodeComposite","endPtsOfContours","numCoords","_getPhantomPoints","transformPoints","phantomPoints","haveInstructions","gPos","_this$_metrics","_getContours","_step70","_iterator70","_contours","contour","directory","contours","firstPt","lastPt","curvePt","pt","prevPt","midX","midY","CFFGlyph","_Glyph2","_proto35","CFF2","bias","usedGsubrs","usedSubrs","nStems","_usedGsubrs","_usedSubrs","gsubrs","gsubrsBias","privateDict","subrs","Subrs","subrsBias","vstore","vsindex","checkWidth","nominalWidthX","parseStems","subr","blendVector","getBlendVector","numOperands","v1","v2","c3x","c3y","c4x","c4y","c5x","c5y","c6x","c6y","pts","startx","starty","SBIXImage","originX","originY","buflen","SBIXGlyph","_TTFGlyph","_proto36","getImageForSize","renderOutlines","COLRLayer","COLRGlyph","_Glyph3","_proto37","layers","_step71","_iterator71","_step71$value","cpal","colr","rec","baseLayer","_getBaseGlyph","GlyphVariationProcessor","normalizeCoords","blendVectors","_proto38","glyphPoints","tupleCount","sharedPoints","decodePoints","origPoints","tupleDataSize","tupleCoords","startCoords","endCoords","_a2","tupleFactor","nPoints","xDeltas","decodeDeltas","yDeltas","outPoints","hasDelta","interpolateMissingDeltas","deltaX","deltaY","runCount","inPoints","firstPoint","firstDelta","curDelta","deltaInterpolate","deltaShift","ref1","ref2","in1","in2","out1","out2","_table$advanceWidthMa","itemStore","varData","deltaSet","netAdjustment","master","scalar","regionIndex","axes","Subset","_proto39","_this11","Point$1","Glyf","xPoints","yPoints","TTFGlyphEncoder","_proto40","encodeSimple","lastX","lastY","lastFlag","pointCount","_encodePoint","shortFlag","sameFlag","TTFSubset","_Subset","_this12","glyphEncoder","_proto41","_addGlyph","curOffset","nextOffset","_step72","_iterator72","CFFSubset","_Subset2","_this13","_proto42","subsetCharstrings","charstrings","_step73","_iterator73","subsetSubrs","subsetFontdict","_step74","used_fds","used_subrs","fd_select","_iterator74","createCIDFontdict","_step75","_iterator75","addString","_i24","_arr2","CIDCount","TTFFont","variationCoords","_directoryPos","_tables","_glyphs","_decodeDirectory","_getTable","_proto43","_decodeTable","logErrors","getName","getVariation","settings","namedVariations","_step76","_iterator76","default","_step77","_iterator77","WOFFDirectoryEntry","compLength","origChecksum","WOFFDirectory","flavor","totalSfntSize","metaOffset","metaLength","metaOrigLength","privOffset","privLength","_step78","_iterator78","WOFFFont","_TTFFont","_proto44","outBuffer","WOFF2Glyph","_TTFGlyph2","_proto45","_transformedGlyphs","Base128","knownTags","WOFF2DirectoryEntry","customTag","transformVersion","transformed","transformLength","WOFF2Directory","totalCompressedSize","WOFF2Font","_TTFFont2","_proto46","_dataPos","_decompress","_decompressed","decompressedSize","decompressed","_transformGlyfTable","GlyfTable","nContours","totalPoints","read255UInt16","decodeTriplet","composites","Substream","_buf","indexFormat","nContourStreamSize","nPointsStreamSize","flagStreamSize","glyphStreamSize","compositeStreamSize","bboxStreamSize","instructionStreamSize","bboxes","WORD_CODE","ONE_MORE_BYTE_CODE2","ONE_MORE_BYTE_CODE1","LOWEST_U_CODE","withSign","baseval","b0","TTCHeader","numFonts","dsigTag","dsigLength","dsigOffset","TrueTypeCollection","_step79","_iterator79","_step80","_iterator80","DFontName","Ref","nameOffset","dataOffset","handle","maxTypeIndex","refList","TypeList","DFontMap","typeList","nameListOffset","DFontHeader","dataLength","mapLength","DFont","_step82","_iterator82","_step83","_iterator83","sfnt","_step81","_iterator81","_step84","_iterator84","_step85","_iterator85","_require","_require2","classTrie","mapClass","mapFirst","Break","curClass","nextClass","LB8a","LB21a","LB30a","nextCodePoint","nextCharClass","getSimpleBreak","getPairTableBreak","lastClass","shouldBreak","firstClass","possibleNames","log2","combiningClasses","scripts","eaw","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","nmd","paths"],"sourceRoot":""} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/deps/xlsx.js b/src/main/resources/static/js/amcharts5/deps/xlsx.js new file mode 100644 index 00000000..4a9ee92c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/deps/xlsx.js @@ -0,0 +1,3 @@ +/*! For license information please see xlsx.js.LICENSE.txt */ +"use strict";(self.webpackChunk_am5=self.webpackChunk_am5||[]).push([[4297],{7289:function(e,t,r){r.r(t),r.d(t,{CFB:function(){return Ie},SSF:function(){return Ee},parse_xlscfb:function(){return wl},parse_zip:function(){return Gf},read:function(){return Jf},readFile:function(){return qf},readFileSync:function(){return qf},set_cptable:function(){return b},set_fs:function(){return Oe},stream:function(){return kh},utils:function(){return Eh},version:function(){return _h},write:function(){return sh},writeFile:function(){return oh},writeFileAsync:function(){return lh},writeFileSync:function(){return oh},writeFileXLSX:function(){return ch},writeXLSX:function(){return nh}});var a,n={version:"0.20.2"},s=1200,i=1252,o=[874,932,936,949,950,1250,1251,1252,1253,1254,1255,1256,1257,1258,1e4],c={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},l=function(e){-1!=o.indexOf(e)&&(i=c[0]=e)},f=function(e){s=e,l(e)};function h(){f(1200),l(1252)}function u(e){for(var t=[],r=0,a=e.length;r>1;++r)t[r]=String.fromCharCode(e.charCodeAt(2*r)+(e.charCodeAt(2*r+1)<<8));return t.join("")}function p(e){for(var t=[],r=0;r>1;++r)t[r]=String.fromCharCode(e.charCodeAt(2*r+1)+(e.charCodeAt(2*r)<<8));return t.join("")}var m=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1);return 255==t&&254==r?d(e.slice(2)):254==t&&255==r?p(e.slice(2)):65279==t?e.slice(1):e},v=function(e){return String.fromCharCode(e)},g=function(e){return String.fromCharCode(e)};function b(e){a=e,f=function(e){s=e,l(e)},m=function(e){return 255===e.charCodeAt(0)&&254===e.charCodeAt(1)?a.utils.decode(1200,u(e.slice(2))):e},v=function(e){return 1200===s?String.fromCharCode(e):a.utils.decode(s,[255&e,e>>8])[0]},g=function(e){return a.utils.decode(i,[e])[0]},Fr()}var w=null,T="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";function y(e){for(var t="",r=0,a=0,n=0,s=0,i=0,o=0,c=0,l=0;l>2,i=(3&r)<<4|(a=e.charCodeAt(l++))>>4,o=(15&a)<<2|(n=e.charCodeAt(l++))>>6,c=63&n,isNaN(a)?o=c=64:isNaN(n)&&(c=64),t+=T.charAt(s)+T.charAt(i)+T.charAt(o)+T.charAt(c);return t}function E(e){var t="",r=0,a=0,n=0,s=0,i=0,o=0;"data:"==e.slice(0,5)&&(c=e.slice(0,1024).indexOf(";base64,"))>-1&&(e=e.slice(c+8)),e=e.replace(/[^\w\+\/\=]/g,"");for(var c=0;c>4,t+=String.fromCharCode(r),a=(15&s)<<4|(i=T.indexOf(e.charAt(c++)))>>2,64!==i&&(t+=String.fromCharCode(a)),n=(3&i)<<6|(o=T.indexOf(e.charAt(c++))),64!==o&&(t+=String.fromCharCode(n));return t}var k=function(){return"undefined"!=typeof Buffer&&"undefined"!=typeof process&&void 0!==process.versions&&!!process.versions.node}(),_=function(){if("undefined"!=typeof Buffer){var e=!Buffer.from;if(!e)try{Buffer.from("foo","utf8")}catch(t){e=!0}return e?function(e,t){return t?new Buffer(e,t):new Buffer(e)}:Buffer.from.bind(Buffer)}return function(){}}(),S=function(){if("undefined"==typeof Buffer)return!1;var e=_([65,0]);return!!e&&1==e.toString("utf16le").length}();function x(e){return k?Buffer.alloc?Buffer.alloc(e):new Buffer(e):"undefined"!=typeof Uint8Array?new Uint8Array(e):new Array(e)}function A(e){return k?Buffer.allocUnsafe?Buffer.allocUnsafe(e):new Buffer(e):"undefined"!=typeof Uint8Array?new Uint8Array(e):new Array(e)}var C=function(e){return k?_(e,"binary"):e.split("").map((function(e){return 255&e.charCodeAt(0)}))};function I(e){if("undefined"==typeof ArrayBuffer)return C(e);for(var t=new ArrayBuffer(e.length),r=new Uint8Array(t),a=0;a!=e.length;++a)r[a]=255&e.charCodeAt(a);return t}function O(e){if(Array.isArray(e))return e.map((function(e){return String.fromCharCode(e)})).join("");for(var t=[],r=0;r=0;)t+=e.charAt(r--);return t}function M(e,t){var r=""+e;return r.length>=t?r:Ye("0",t-r.length)+r}function L(e,t){var r=""+e;return r.length>=t?r:Ye(" ",t-r.length)+r}function U(e,t){var r=""+e;return r.length>=t?r:r+Ye(" ",t-r.length)}var B=Math.pow(2,32);function W(e,t){return e>B||e<-B?function(e,t){var r=""+Math.round(e);return r.length>=t?r:Ye("0",t-r.length)+r}(e,t):function(e,t){var r=""+e;return r.length>=t?r:Ye("0",t-r.length)+r}(Math.round(e),t)}function z(e,t){return t=t||0,e.length>=7+t&&103==(32|e.charCodeAt(t))&&101==(32|e.charCodeAt(t+1))&&110==(32|e.charCodeAt(t+2))&&101==(32|e.charCodeAt(t+3))&&114==(32|e.charCodeAt(t+4))&&97==(32|e.charCodeAt(t+5))&&108==(32|e.charCodeAt(t+6))}var H=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]],V=[["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"]],G={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"秒 "'},X={5:37,6:38,7:39,8:40,23:0,24:0,25:0,26:0,27:14,28:14,29:14,30:14,31:14,50:14,51:14,52:14,53:14,54:14,55:14,56:14,57:14,58:14,59:1,60:2,61:3,62:4,67:9,68:10,69:12,70:13,71:14,72:14,73:15,74:16,75:17,76:20,77:21,78:22,79:45,80:46,81:47,82:0},j={5:'"$"#,##0_);\\("$"#,##0\\)',63:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',41:'_(* #,##0_);_(* \\(#,##0\\);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* \\(#,##0\\);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* \\(#,##0.00\\);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* \\(#,##0.00\\);_("$"* "-"??_);_(@_)'};function K(e,t,r){for(var a=e<0?-1:1,n=e*a,s=0,i=1,o=0,c=1,l=0,f=0,h=Math.floor(n);lt&&(l>t?(f=c,o=s):(f=l,o=i)),!r)return[0,a*o,f];var u=Math.floor(a*o/f);return[u,a*o-u*f,f]}function Y(e,t,r){if(e>2958465||e<0)return null;var a=0|(e=function(e){var t=e.toPrecision(16);if(t.indexOf("e")>-1){var r=t.slice(0,t.indexOf("e"));return(r=r.indexOf(".")>-1?r.slice(0,"0."==r.slice(0,2)?17:16):r.slice(0,15)+Ye("0",r.length-15))+t.slice(t.indexOf("e"))}var a=t.indexOf(".")>-1?t.slice(0,"0."==t.slice(0,2)?17:16):t.slice(0,15)+Ye("0",t.length-15);return Number(a)}(e)),n=Math.floor(86400*(e-a)),s=0,i=[],o={D:a,T:n,u:86400*(e-a)-n,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(o.u)<1e-6&&(o.u=0),t&&t.date1904&&(a+=1462),o.u>.9999&&(o.u=0,86400==++n&&(o.T=n=0,++a,++o.D)),60===a)i=r?[1317,10,29]:[1900,2,29],s=3;else if(0===a)i=r?[1317,8,29]:[1900,1,0],s=6;else{a>60&&--a;var c=new Date(1900,0,1);c.setDate(c.getDate()+a-1),i=[c.getFullYear(),c.getMonth()+1,c.getDate()],s=c.getDay(),a<60&&(s=(s+6)%7),r&&(s=function(e,t){t[0]-=581;var r=e.getDay();return e<60&&(r=(r+6)%7),r}(c,i))}return o.y=i[0],o.m=i[1],o.d=i[2],o.S=n%60,n=Math.floor(n/60),o.M=n%60,n=Math.floor(n/60),o.H=n,o.q=s,o}function Z(e){return-1==e.indexOf(".")?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)$/,"$1")}function J(e){var t,r=Math.floor(Math.log(Math.abs(e))*Math.LOG10E);return t=r>=-4&&r<=-1?e.toPrecision(10+r):Math.abs(r)<=9?function(e){var t=e<0?12:11,r=Z(e.toFixed(12));return r.length<=t||(r=e.toPrecision(10)).length<=t?r:e.toExponential(5)}(e):10===r?e.toFixed(10).substr(0,12):function(e){var t=Z(e.toFixed(11));return t.length>(e<0?12:11)||"0"===t||"-0"===t?e.toPrecision(6):t}(e),Z(function(e){return-1==e.indexOf("E")?e:e.replace(/(?:\.0*|(\.\d*[1-9])0+)[Ee]/,"$1E").replace(/(E[+-])(\d)$/,"$10$2")}(t.toUpperCase()))}function q(e,t){switch(typeof e){case"string":return e;case"boolean":return e?"TRUE":"FALSE";case"number":return(0|e)===e?e.toString(10):J(e);case"undefined":return"";case"object":if(null==e)return"";if(e instanceof Date)return be(14,We(e,t&&t.date1904),t)}throw new Error("unsupported value in General format: "+e)}function Q(e,t,r,a){var n,s="",i=0,o=0,c=r.y,l=0;switch(e){case 98:c=r.y+543;case 121:switch(t.length){case 1:case 2:n=c%100,l=2;break;default:n=c%1e4,l=4}break;case 109:switch(t.length){case 1:case 2:n=r.m,l=t.length;break;case 3:return V[r.m-1][1];case 5:return V[r.m-1][0];default:return V[r.m-1][2]}break;case 100:switch(t.length){case 1:case 2:n=r.d,l=t.length;break;case 3:return H[r.q][0];default:return H[r.q][1]}break;case 104:switch(t.length){case 1:case 2:n=1+(r.H+11)%12,l=t.length;break;default:throw"bad hour format: "+t}break;case 72:switch(t.length){case 1:case 2:n=r.H,l=t.length;break;default:throw"bad hour format: "+t}break;case 77:switch(t.length){case 1:case 2:n=r.M,l=t.length;break;default:throw"bad minute format: "+t}break;case 115:if("s"!=t&&"ss"!=t&&".0"!=t&&".00"!=t&&".000"!=t)throw"bad second format: "+t;return 0!==r.u||"s"!=t&&"ss"!=t?(o=a>=2?3===a?1e3:100:1===a?10:1,(i=Math.round(o*(r.S+r.u)))>=60*o&&(i=0),"s"===t?0===i?"0":""+i/o:(s=M(i,2+a),"ss"===t?s.substr(0,2):"."+s.substr(2,t.length-1))):M(r.S,t.length);case 90:switch(t){case"[h]":case"[hh]":n=24*r.D+r.H;break;case"[m]":case"[mm]":n=60*(24*r.D+r.H)+r.M;break;case"[s]":case"[ss]":n=60*(60*(24*r.D+r.H)+r.M)+(0==a?Math.round(r.S+r.u):r.S);break;default:throw"bad abstime format: "+t}l=3===t.length?1:2;break;case 101:n=c,l=1}return l>0?M(n,l):""}function ee(e){if(e.length<=3)return e;for(var t=e.length%3,r=e.substr(0,t);t!=e.length;t+=3)r+=(r.length>0?",":"")+e.substr(t,3);return r}var te=/%/g;function re(e,t){var r,a=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+re(e,-t);var n=e.indexOf(".");-1===n&&(n=e.indexOf("E"));var s=Math.floor(Math.log(t)*Math.LOG10E)%n;if(s<0&&(s+=n),-1===(r=(t/Math.pow(10,s)).toPrecision(a+1+(n+s)%n)).indexOf("e")){var i=Math.floor(Math.log(t)*Math.LOG10E);for(-1===r.indexOf(".")?r=r.charAt(0)+"."+r.substr(1)+"E+"+(i-r.length+s):r+="E+"+(i-s);"0."===r.substr(0,2);)r=(r=r.charAt(0)+r.substr(2,n)+"."+r.substr(2+n)).replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.");r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,r,a){return t+r+a.substr(0,(n+s)%n)+"."+a.substr(s)+"E"}))}else r=t.toExponential(a);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}var ae=/# (\?+)( ?)\/( ?)(\d+)/,ne=/^#*0*\.([0#]+)/,se=/\)[^)]*[0#]/,ie=/\(###\) ###\\?-####/;function oe(e){for(var t,r="",a=0;a!=e.length;++a)switch(t=e.charCodeAt(a)){case 35:break;case 63:r+=" ";break;case 48:r+="0";break;default:r+=String.fromCharCode(t)}return r}function ce(e,t){var r=Math.pow(10,t);return""+Math.round(e*r)/r}function le(e,t){var r=e-Math.floor(e),a=Math.pow(10,t);return t<(""+Math.round(r*a)).length?0:Math.round(r*a)}function fe(e,t,r){if(40===e.charCodeAt(0)&&!t.match(se)){var a=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?fe("n",a,r):"("+fe("n",a,-r)+")"}if(44===t.charCodeAt(t.length-1))return function(e,t,r){for(var a=t.length-1;44===t.charCodeAt(a-1);)--a;return de(e,t.substr(0,a),r/Math.pow(10,3*(t.length-a)))}(e,t,r);if(-1!==t.indexOf("%"))return function(e,t,r){var a=t.replace(te,""),n=t.length-a.length;return de(e,a,r*Math.pow(10,2*n))+Ye("%",n)}(e,t,r);if(-1!==t.indexOf("E"))return re(t,r);if(36===t.charCodeAt(0))return"$"+fe(e,t.substr(" "==t.charAt(1)?2:1),r);var n,s,i,o,c=Math.abs(r),l=r<0?"-":"";if(t.match(/^00+$/))return l+W(c,t.length);if(t.match(/^[#?]+$/))return"0"===(n=W(r,0))&&(n=""),n.length>t.length?n:oe(t.substr(0,t.length-n.length))+n;if(s=t.match(ae))return function(e,t,r){var a=parseInt(e[4],10),n=Math.round(t*a),s=Math.floor(n/a),i=n-s*a,o=a;return r+(0===s?"":""+s)+" "+(0===i?Ye(" ",e[1].length+1+e[4].length):L(i,e[1].length)+e[2]+"/"+e[3]+M(o,e[4].length))}(s,c,l);if(t.match(/^#+0+$/))return l+W(c,t.length-t.indexOf("0"));if(s=t.match(ne))return n=ce(r,s[1].length).replace(/^([^\.]+)$/,"$1."+oe(s[1])).replace(/\.$/,"."+oe(s[1])).replace(/\.(\d*)$/,(function(e,t){return"."+t+Ye("0",oe(s[1]).length-t.length)})),-1!==t.indexOf("0.")?n:n.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),s=t.match(/^(0*)\.(#*)$/))return l+ce(c,s[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,s[1].length?"0.":".");if(s=t.match(/^#{1,3},##0(\.?)$/))return l+ee(W(c,0));if(s=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+fe(e,t,-r):ee(""+(Math.floor(r)+function(e,t){return t<(""+Math.round((e-Math.floor(e))*Math.pow(10,t))).length?1:0}(r,s[1].length)))+"."+M(le(r,s[1].length),s[1].length);if(s=t.match(/^#,#*,#0/))return fe(e,t.replace(/^#,#*,/,""),r);if(s=t.match(/^([0#]+)(\\?-([0#]+))+$/))return n=P(fe(e,t.replace(/[\\-]/g,""),r)),i=0,P(P(t.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return i-2147483648?""+(e>=0?0|e:e-1|0):""+Math.floor(e)}(r)).replace(/^\d,\d{3}$/,"0$&").replace(/^\d*$/,(function(e){return"00,"+(e.length<3?M(0,3-e.length):"")+e}))+"."+M(i,s[1].length);switch(t){case"###,##0.00":return fe(e,"#,##0.00",r);case"###,###":case"##,###":case"#,###":var d=ee(W(c,0));return"0"!==d?l+d:"";case"###,###.00":return fe(e,"###,##0.00",r).replace(/^0\./,".");case"#,###.00":return fe(e,"#,##0.00",r).replace(/^0\./,".")}throw new Error("unsupported format |"+t+"|")}function he(e,t){var r,a=e.indexOf("E")-e.indexOf(".")-1;if(e.match(/^#+0.0E\+0$/)){if(0==t)return"0.0E+0";if(t<0)return"-"+he(e,-t);var n=e.indexOf(".");-1===n&&(n=e.indexOf("E"));var s=Math.floor(Math.log(t)*Math.LOG10E)%n;if(s<0&&(s+=n),!(r=(t/Math.pow(10,s)).toPrecision(a+1+(n+s)%n)).match(/[Ee]/)){var i=Math.floor(Math.log(t)*Math.LOG10E);-1===r.indexOf(".")?r=r.charAt(0)+"."+r.substr(1)+"E+"+(i-r.length+s):r+="E+"+(i-s),r=r.replace(/\+-/,"-")}r=r.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,(function(e,t,r,a){return t+r+a.substr(0,(n+s)%n)+"."+a.substr(s)+"E"}))}else r=t.toExponential(a);return e.match(/E\+00$/)&&r.match(/e[+-]\d$/)&&(r=r.substr(0,r.length-1)+"0"+r.charAt(r.length-1)),e.match(/E\-/)&&r.match(/e\+/)&&(r=r.replace(/e\+/,"e")),r.replace("e","E")}function ue(e,t,r){if(40===e.charCodeAt(0)&&!t.match(se)){var a=t.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");return r>=0?ue("n",a,r):"("+ue("n",a,-r)+")"}if(44===t.charCodeAt(t.length-1))return function(e,t,r){for(var a=t.length-1;44===t.charCodeAt(a-1);)--a;return de(e,t.substr(0,a),r/Math.pow(10,3*(t.length-a)))}(e,t,r);if(-1!==t.indexOf("%"))return function(e,t,r){var a=t.replace(te,""),n=t.length-a.length;return de(e,a,r*Math.pow(10,2*n))+Ye("%",n)}(e,t,r);if(-1!==t.indexOf("E"))return he(t,r);if(36===t.charCodeAt(0))return"$"+ue(e,t.substr(" "==t.charAt(1)?2:1),r);var n,s,i,o,c=Math.abs(r),l=r<0?"-":"";if(t.match(/^00+$/))return l+M(c,t.length);if(t.match(/^[#?]+$/))return n=""+r,0===r&&(n=""),n.length>t.length?n:oe(t.substr(0,t.length-n.length))+n;if(s=t.match(ae))return function(e,t,r){return r+(0===t?"":""+t)+Ye(" ",e[1].length+2+e[4].length)}(s,c,l);if(t.match(/^#+0+$/))return l+M(c,t.length-t.indexOf("0"));if(s=t.match(ne))return n=(n=(""+r).replace(/^([^\.]+)$/,"$1."+oe(s[1])).replace(/\.$/,"."+oe(s[1]))).replace(/\.(\d*)$/,(function(e,t){return"."+t+Ye("0",oe(s[1]).length-t.length)})),-1!==t.indexOf("0.")?n:n.replace(/^0\./,".");if(t=t.replace(/^#+([0.])/,"$1"),s=t.match(/^(0*)\.(#*)$/))return l+(""+c).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,s[1].length?"0.":".");if(s=t.match(/^#{1,3},##0(\.?)$/))return l+ee(""+c);if(s=t.match(/^#,##0\.([#0]*0)$/))return r<0?"-"+ue(e,t,-r):ee(""+r)+"."+Ye("0",s[1].length);if(s=t.match(/^#,#*,#0/))return ue(e,t.replace(/^#,#*,/,""),r);if(s=t.match(/^([0#]+)(\\?-([0#]+))+$/))return n=P(ue(e,t.replace(/[\\-]/g,""),r)),i=0,P(P(t.replace(/\\/g,"")).replace(/[0#]/g,(function(e){return i-1||"\\"==r&&"-"==e.charAt(t+1)&&"0#".indexOf(e.charAt(t+2))>-1););break;case"?":for(;e.charAt(++t)===r;);break;case"*":++t," "!=e.charAt(t)&&"*"!=e.charAt(t)||++t;break;case"(":case")":++t;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(;t-1;);break;default:++t}return!1}var ve=/\[(=|>[=]?|<[>=]?)(-?\d+(?:\.\d*)?)\]/;function ge(e,t){if(null==t)return!1;var r=parseFloat(t[2]);switch(t[1]){case"=":if(e==r)return!0;break;case">":if(e>r)return!0;break;case"<":if(e":if(e!=r)return!0;break;case">=":if(e>=r)return!0;break;case"<=":if(e<=r)return!0}return!1}function be(e,t,r){null==r&&(r={});var a="";switch(typeof e){case"string":a="m/d/yy"==e&&r.dateNF?r.dateNF:e;break;case"number":null==(a=14==e&&r.dateNF?r.dateNF:(null!=r.table?r.table:G)[e])&&(a=r.table&&r.table[X[e]]||G[X[e]]),null==a&&(a=j[e]||"General")}if(z(a,0))return q(t,r);t instanceof Date&&(t=We(t,r.date1904));var n=function(e,t){var r=function(e){for(var t=[],r=!1,a=0,n=0;a-1&&--a,r.length>4)throw new Error("cannot find right format for |"+r.join("|")+"|");if("number"!=typeof t)return[4,4===r.length||n>-1?r[r.length-1]:"@"];switch(r.length){case 1:r=n>-1?["General","General","General",r[0]]:[r[0],r[0],r[0],"@"];break;case 2:r=n>-1?[r[0],r[0],r[0],r[1]]:[r[0],r[1],r[0],"@"];break;case 3:r=n>-1?[r[0],r[1],r[0],r[2]]:[r[0],r[1],r[2],"@"]}var s=t>0?r[0]:t<0?r[1]:r[2];if(-1===r[0].indexOf("[")&&-1===r[1].indexOf("["))return[a,s];if(null!=r[0].match(/\[[=<>]/)||null!=r[1].match(/\[[=<>]/)){var i=r[0].match(ve),o=r[1].match(ve);return ge(t,i)?[a,r[0]]:ge(t,o)?[a,r[1]]:[a,r[null!=i&&null!=o?2:1]]}return[a,s]}(a,t);if(z(n[1]))return q(t,r);if(!0===t)t="TRUE";else if(!1===t)t="FALSE";else if(""===t||null==t)return"";return function(e,t,r,a){for(var n,s,i,o=[],c="",l=0,f="",h="t",u="H";l=12?e.charAt(l+2):f),m.t="T",u="h",l+=3):"AM/PM"===e.substr(l,5).toUpperCase()?(null!=n&&(m.v=n.H>=12?"PM":"AM"),m.t="T",l+=5,u="h"):"上午/下午"===e.substr(l,5).toUpperCase()?(null!=n&&(m.v=n.H>=12?"下午":"上午"),m.t="T",l+=5,u="h"):(m.t="t",++l),null==n&&"T"===m.t)return"";o[o.length]=m,h=f;break;case"[":for(c=f;"]"!==e.charAt(l++)&&l-1&&(c=(c.match(/\$([^-\[\]]*)/)||[])[1]||"$",me(e)||(o[o.length]={t:"t",v:c}));break;case".":if(null!=n){for(c=f;++l-1;)c+=f;o[o.length]={t:"n",v:c};break;case"?":for(c=f;e.charAt(++l)===f;)c+=f;o[o.length]={t:f,v:c},h=f;break;case"*":++l," "!=e.charAt(l)&&"*"!=e.charAt(l)||++l;break;case"(":case")":o[o.length]={t:1===a?"t":f,v:f},++l;break;case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":for(c=f;l-1;)c+=e.charAt(l);o[o.length]={t:"D",v:c};break;case" ":o[o.length]={t:f,v:f},++l;break;case"$":o[o.length]={t:"t",v:"$"},++l;break;default:if(-1===",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP".indexOf(f))throw new Error("unrecognized character "+f+" in "+e);o[o.length]={t:"t",v:f},++l}var v,g,b=0,w=0;for(l=o.length-1,h="t";l>=0;--l)switch(o[l].t){case"h":case"H":o[l].t=u,h="h",b<1&&(b=1);break;case"s":(v=o[l].v.match(/\.0+$/))&&(w=Math.max(w,v[0].length-1),b=4),b<3&&(b=3);case"d":case"y":case"e":h=o[l].t;break;case"M":h=o[l].t,b<2&&(b=2);break;case"m":"s"===h&&(o[l].t="M",b<2&&(b=2));break;case"X":break;case"Z":b<1&&o[l].v.match(/[Hh]/)&&(b=1),b<2&&o[l].v.match(/[Mm]/)&&(b=2),b<3&&o[l].v.match(/[Ss]/)&&(b=3)}switch(b){case 0:break;case 1:case 2:case 3:n.u>=.5&&(n.u=0,++n.S),n.S>=60&&(n.S=0,++n.M),n.M>=60&&(n.M=0,++n.H),n.H>=24&&(n.H=0,++n.D,(g=Y(n.D)).u=n.u,g.S=n.S,g.M=n.M,g.H=n.H,n=g);break;case 4:switch(w){case 1:n.u=Math.round(10*n.u)/10;break;case 2:n.u=Math.round(100*n.u)/100;break;case 3:n.u=Math.round(1e3*n.u)/1e3}n.u>=1&&(n.u=0,++n.S),n.S>=60&&(n.S=0,++n.M),n.M>=60&&(n.M=0,++n.H),n.H>=24&&(n.H=0,++n.D,(g=Y(n.D)).u=n.u,g.S=n.S,g.M=n.M,g.H=n.H,n=g)}var T,y="";for(l=0;l0){40==y.charCodeAt(0)?(E=t<0&&45===y.charCodeAt(0)?-t:t,k=de("n",y,E)):(k=de("n",y,E=t<0&&a>1?-t:t),E<0&&o[0]&&"t"==o[0].t&&(k=k.substr(1),o[0].v="-"+o[0].v)),T=k.length-1;var S=o.length;for(l=0;l-1){S=l;break}var x=o.length;if(S===o.length&&-1===k.indexOf("E")){for(l=o.length-1;l>=0;--l)null!=o[l]&&-1!=="n?".indexOf(o[l].t)&&(T>=o[l].v.length-1?(T-=o[l].v.length,o[l].v=k.substr(T+1,o[l].v.length)):T<0?o[l].v="":(o[l].v=k.substr(0,T+1),T=-1),o[l].t="t",x=l);T>=0&&x=0;--l)if(null!=o[l]&&-1!=="n?".indexOf(o[l].t)){for(s=o[l].v.indexOf(".")>-1&&l===S?o[l].v.indexOf(".")-1:o[l].v.length-1,_=o[l].v.substr(s+1);s>=0;--s)T>=0&&("0"===o[l].v.charAt(s)||"#"===o[l].v.charAt(s))&&(_=k.charAt(T--)+_);o[l].v=_,o[l].t="t",x=l}for(T>=0&&x-1&&l===S?o[l].v.indexOf(".")+1:0,_=o[l].v.substr(0,s);s-1&&(E=a>1&&t<0&&l>0&&"-"===o[l-1].v?-t:t,o[l].v=de(o[l].t,o[l].v,E),o[l].t="t");var A="";for(l=0;l!==o.length;++l)null!=o[l]&&(A+=o[l].v);return A}(n[1],t,r,n[0])}function we(e,t){if("number"!=typeof t){t=+t||-1;for(var r=0;r<392;++r)if(null!=G[r]){if(G[r]==e){t=r;break}}else t<0&&(t=r);t<0&&(t=391)}return G[t]=e,t}function Te(e){for(var t=0;392!=t;++t)void 0!==e[t]&&we(e[t],t)}function ye(){var e;e||(e={}),e[0]="General",e[1]="0",e[2]="0.00",e[3]="#,##0",e[4]="#,##0.00",e[9]="0%",e[10]="0.00%",e[11]="0.00E+00",e[12]="# ?/?",e[13]="# ??/??",e[14]="m/d/yy",e[15]="d-mmm-yy",e[16]="d-mmm",e[17]="mmm-yy",e[18]="h:mm AM/PM",e[19]="h:mm:ss AM/PM",e[20]="h:mm",e[21]="h:mm:ss",e[22]="m/d/yy h:mm",e[37]="#,##0 ;(#,##0)",e[38]="#,##0 ;[Red](#,##0)",e[39]="#,##0.00;(#,##0.00)",e[40]="#,##0.00;[Red](#,##0.00)",e[45]="mm:ss",e[46]="[h]:mm:ss",e[47]="mmss.0",e[48]="##0.0E+0",e[49]="@",e[56]='"上午/下午 "hh"時"mm"分"ss"秒 "',G=e}var Ee={format:be,load:we,_table:G,load_table:Te,parse_date_code:Y,is_date:me,get_table:function(){return Ee._table=G}},ke={5:'"$"#,##0_);\\("$"#,##0\\)',6:'"$"#,##0_);[Red]\\("$"#,##0\\)',7:'"$"#,##0.00_);\\("$"#,##0.00\\)',8:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',23:"General",24:"General",25:"General",26:"General",27:"m/d/yy",28:"m/d/yy",29:"m/d/yy",30:"m/d/yy",31:"m/d/yy",32:"h:mm:ss",33:"h:mm:ss",34:"h:mm:ss",35:"h:mm:ss",36:"m/d/yy",41:'_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)',42:'_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)',43:'_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)',44:'_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)',50:"m/d/yy",51:"m/d/yy",52:"m/d/yy",53:"m/d/yy",54:"m/d/yy",55:"m/d/yy",56:"m/d/yy",57:"m/d/yy",58:"m/d/yy",59:"0",60:"0.00",61:"#,##0",62:"#,##0.00",63:'"$"#,##0_);\\("$"#,##0\\)',64:'"$"#,##0_);[Red]\\("$"#,##0\\)',65:'"$"#,##0.00_);\\("$"#,##0.00\\)',66:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',67:"0%",68:"0.00%",69:"# ?/?",70:"# ??/??",71:"m/d/yy",72:"m/d/yy",73:"d-mmm-yy",74:"d-mmm",75:"mmm-yy",76:"h:mm",77:"h:mm:ss",78:"m/d/yy h:mm",79:"mm:ss",80:"[h]:mm:ss",81:"mmss.0"},_e=/[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g,Se={"d.m":"d\\.m"};function xe(e,t){return we(Se[e]||e,t)}var Ae,Ce=function(){var e={version:"1.2.0"},t=function(){for(var e=0,t=new Array(256),r=0;256!=r;++r)e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=1&(e=r)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1)?-306674912^e>>>1:e>>>1,t[r]=e;return"undefined"!=typeof Int32Array?new Int32Array(t):t}(),r=function(e){var t=0,r=0,a=0,n="undefined"!=typeof Int32Array?new Int32Array(4096):new Array(4096);for(a=0;256!=a;++a)n[a]=e[a];for(a=0;256!=a;++a)for(r=e[a],t=256+a;t<4096;t+=256)r=n[t]=r>>>8^e[255&r];var s=[];for(a=1;16!=a;++a)s[a-1]="undefined"!=typeof Int32Array&&"function"==typeof n.subarray?n.subarray(256*a,256*a+256):n.slice(256*a,256*a+256);return s}(t),a=r[0],n=r[1],s=r[2],i=r[3],o=r[4],c=r[5],l=r[6],f=r[7],h=r[8],u=r[9],d=r[10],p=r[11],m=r[12],v=r[13],g=r[14];return e.table=t,e.bstr=function(e,r){for(var a=-1^r,n=0,s=e.length;n>>8^t[255&(a^e.charCodeAt(n++))];return~a},e.buf=function(e,r){for(var b=-1^r,w=e.length-15,T=0;T>8&255]^m[e[T++]^b>>16&255]^p[e[T++]^b>>>24]^d[e[T++]]^u[e[T++]]^h[e[T++]]^f[e[T++]]^l[e[T++]]^c[e[T++]]^o[e[T++]]^i[e[T++]]^s[e[T++]]^n[e[T++]]^a[e[T++]]^t[e[T++]];for(w+=15;T>>8^t[255&(b^e[T++])];return~b},e.str=function(e,r){for(var a=-1^r,n=0,s=e.length,i=0,o=0;n>>8^t[255&(a^i)]:i<2048?a=(a=a>>>8^t[255&(a^(192|i>>6&31))])>>>8^t[255&(a^(128|63&i))]:i>=55296&&i<57344?(i=64+(1023&i),o=1023&e.charCodeAt(n++),a=(a=(a=(a=a>>>8^t[255&(a^(240|i>>8&7))])>>>8^t[255&(a^(128|i>>2&63))])>>>8^t[255&(a^(128|o>>6&15|(3&i)<<4))])>>>8^t[255&(a^(128|63&o))]):a=(a=(a=a>>>8^t[255&(a^(224|i>>12&15))])>>>8^t[255&(a^(128|i>>6&63))])>>>8^t[255&(a^(128|63&i))];return~a},e}(),Ie=function(){var e,t={};function r(e){if("/"==e.charAt(e.length-1))return-1===e.slice(0,-1).indexOf("/")?e:r(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(0,t+1)}function a(e){if("/"==e.charAt(e.length-1))return a(e.slice(0,-1));var t=e.lastIndexOf("/");return-1===t?e:e.slice(t+1)}function n(e,t){"string"==typeof t&&(t=new Date(t));var r=t.getHours();r=(r=r<<6|t.getMinutes())<<5|t.getSeconds()>>>1,e.write_shift(2,r);var a=t.getFullYear()-1980;a=(a=a<<4|t.getMonth()+1)<<5|t.getDate(),e.write_shift(2,a)}function s(e){Xr(e,0);for(var t={},r=0;e.l<=e.length-4;){var a=e.read_shift(2),n=e.read_shift(2),s=e.l+n,i={};switch(a){case 21589:1&(r=e.read_shift(1))&&(i.mtime=e.read_shift(4)),n>5&&(2&r&&(i.atime=e.read_shift(4)),4&r&&(i.ctime=e.read_shift(4))),i.mtime&&(i.mt=new Date(1e3*i.mtime));break;case 1:var o=e.read_shift(4),c=e.read_shift(4);i.usz=c*Math.pow(2,32)+o,o=e.read_shift(4),c=e.read_shift(4),i.csz=c*Math.pow(2,32)+o}e.l=s,t[a]=i}return t}function i(){return e||(e=Ae)}function o(e,t){if(80==e[0]&&75==e[1])return de(e,t);if(109==(32|e[0])&&105==(32|e[1]))return function(e,t){if("mime-version:"!=I(e.slice(0,13)).toLowerCase())throw new Error("Unsupported MAD header");var r=t&&t.root||"",a=(k&&Buffer.isBuffer(e)?e.toString("binary"):I(e)).split("\r\n"),n=0,s="";for(n=0;n0&&(r=(r=r.slice(0,r.length-1)).slice(0,r.lastIndexOf("/")+1),s.slice(0,r.length)!=r););var i=(a[1]||"").match(/boundary="(.*?)"/);if(!i)throw new Error("MAD cannot find boundary");var o="--"+(i[1]||""),c={FileIndex:[],FullPaths:[]};u(c);var l,f=0;for(n=0;n=n&&(u-=n),!i[u]){c=[];var p=[];for(h=u;h>=0;){p[h]=!0,i[h]=!0,o[o.length]=h,c.push(e[h]);var m=r[Math.floor(4*h/a)];if(a<4+(d=4*h&l))throw new Error("FAT boundary crossed: "+h+" 4 "+a);if(!e[m])break;if(p[h=Ur(e[m],d)])break}s[u]={nodes:o,data:dr([c])}}return s}(_,s,p,d);s0&&i!==g&&(S[i].name="!MiniFAT"),S[p[0]].name="!FAT",S.fat_addrs=p,S.ssz=d;var x=[],A=[],C=[];!function(e,t,r,a,n,s,i,o){for(var l,u=0,d=a.length?2:0,p=t[e].data,m=0,v=0;m0&&u!==g&&(t[u].name="!StreamData")):w.size>=4096?(w.storage="fat",void 0===t[w.start]&&(t[w.start]=f(r,w.start,t.fat_addrs,t.ssz)),t[w.start].name=w.name,w.content=t[w.start].data.slice(0,w.size)):(w.storage="minifat",w.size<0?w.size=0:u!==g&&w.start!==g&&t[u]&&(w.content=c(w,t[u].data,(t[o]||{}).data))),w.content&&Xr(w.content,0),s[l]=w,i.push(w)}}(s,S,_,x,a,{},A,i),function(e,t,r){for(var a=0,n=0,s=0,i=0,o=0,c=r.length,l=[],f=[];a0&&i>=0;)s.push(t.slice(i*v,i*v+v)),n-=v,i=Ur(r,4*i);return 0===s.length?Kr(0):N(s).slice(0,e.size)}function l(e,t,r,a,n){var s=g;if(e===g){if(0!==t)throw new Error("DIFAT chain shorter than expected")}else if(-1!==e){var i=r[e],o=(a>>>2)-1;if(!i)return;for(var c=0;c=1&&l(Ur(i,a-4),t-1,r,a,n)}}function f(e,t,r,a,n){var s=[],i=[];n||(n=[]);var o=a-1,c=0,l=0;for(c=t;c>=0;){n[c]=!0,s[s.length]=c,i.push(e[c]);var f=r[Math.floor(4*c/a)];if(a<4+(l=4*c&o))throw new Error("FAT boundary crossed: "+c+" 4 "+a);if(!e[f])break;c=Ur(e[f],l)}return{nodes:s,data:dr([i])}}function h(e,t){return new Date(1e3*(Lr(e,t+4)/1e7*Math.pow(2,32)+Lr(e,t)/1e7-11644473600))}function u(e,t){var r=t||{},a=r.root||"Root Entry";if(e.FullPaths||(e.FullPaths=[]),e.FileIndex||(e.FileIndex=[]),e.FullPaths.length!==e.FileIndex.length)throw new Error("inconsistent CFB structure");0===e.FullPaths.length&&(e.FullPaths[0]=a+"/",e.FileIndex[0]={name:a,type:5}),r.CLSID&&(e.FileIndex[0].clsid=r.CLSID),function(e){var t="Sh33tJ5";if(!Ie.find(e,"/"+t)){var r=Kr(4);r[0]=55,r[1]=r[3]=50,r[2]=54,e.FileIndex.push({name:t,type:2,content:r,size:4,L:69,R:69,C:69}),e.FullPaths.push(e.FullPaths[0]+t),d(e)}}(e)}function d(e,t){u(e);for(var n=!1,s=!1,i=e.FullPaths.length-1;i>=0;--i){var o=e.FileIndex[i];switch(o.type){case 0:s?n=!0:(e.FileIndex.pop(),e.FullPaths.pop());break;case 1:case 2:case 5:s=!0,isNaN(o.R*o.L*o.C)&&(n=!0),o.R>-1&&o.L>-1&&o.R==o.L&&(n=!0);break;default:n=!0}}if(n||t){var c=new Date(1987,1,19),l=0,f=Object.create?Object.create(null):{},h=[];for(i=0;i1?1:-1,p.size=0,p.type=5;else if("/"==m.slice(-1)){for(l=i+1;l=h.length?-1:l,l=i+1;l=h.length?-1:l,p.type=1}else r(e.FullPaths[i+1]||"")==r(m)&&(p.R=i+1),p.type=2}}}function p(e,t){var r=t||{};if("mad"==r.fileType)return function(e,t){for(var r=t||{},a=r.boundary||"SheetJS",n=["MIME-Version: 1.0",'Content-Type: multipart/related; boundary="'+(a="------="+a).slice(2)+'"',"","",""],s=e.FullPaths[0],i=s,o=e.FileIndex[0],c=1;c=32&&d<128&&++h;var m=h>=4*u/5;n.push(a),n.push("Content-Location: "+(r.root||"file:///C:/SheetJS/")+i),n.push("Content-Transfer-Encoding: "+(m?"quoted-printable":"base64")),n.push("Content-Type: "+ve(o,i)),n.push(""),n.push(m?be(f):ge(f))}return n.push(a+"--\r\n"),n.join("\r\n")}(e,r);if(d(e),"zip"===r.fileType)return function(e,t){var r,a=t||{},s=[],i=[],o=Kr(1),c=a.compression?8:0,l=0,f=0,h=0,u=0,d=e.FullPaths[0],p=d,v=e.FileIndex[0],g=[],b=0;for(l=1;l0&&(s<4096?t+=s+63>>6:r+=s+511>>9)}}for(var i=e.FullPaths.length+3>>2,o=t+127>>7,c=(t+7>>3)+r+i+o,l=c+127>>7,f=l<=109?0:Math.ceil((l-109)/127);c+l+f+127>>7>l;)f=++l<=109?0:Math.ceil((l-109)/127);var h=[1,f,l,o,i,r,t,0];return e.FileIndex[0].size=t<<6,h[7]=(e.FileIndex[0].start=h[0]+h[1]+h[2]+h[3]+h[4]+h[5])+(h[6]+7>>3),h}(e),s=Kr(a[7]<<9),i=0,o=0;for(i=0;i<8;++i)s.write_shift(1,w[i]);for(i=0;i<8;++i)s.write_shift(2,0);for(s.write_shift(2,62),s.write_shift(2,3),s.write_shift(2,65534),s.write_shift(2,9),s.write_shift(2,6),i=0;i<3;++i)s.write_shift(2,0);for(s.write_shift(4,0),s.write_shift(4,a[2]),s.write_shift(4,a[0]+a[1]+a[2]+a[3]-1),s.write_shift(4,0),s.write_shift(4,4096),s.write_shift(4,a[3]?a[0]+a[1]+a[2]-1:g),s.write_shift(4,a[3]),s.write_shift(-4,a[1]?a[0]-1:g),s.write_shift(4,a[1]),i=0;i<109;++i)s.write_shift(-4,i>9)));for(c(a[6]+7>>3);511&s.l;)s.write_shift(-4,S.ENDOFCHAIN);for(o=i=0,l=0;l=4096||(h.start=o,c(f+63>>6)));for(;511&s.l;)s.write_shift(-4,S.ENDOFCHAIN);for(i=0;i31&&(console.error("Name "+p+" will be truncated to "+p.slice(0,31)),p=p.slice(0,31)),f=2*(p.length+1),s.write_shift(64,p,"utf16le"),s.write_shift(2,f),s.write_shift(1,h.type),s.write_shift(1,h.color),s.write_shift(-4,h.L),s.write_shift(-4,h.R),s.write_shift(-4,h.C),h.clsid)s.write_shift(16,h.clsid,"hex");else for(l=0;l<4;++l)s.write_shift(4,0);s.write_shift(4,h.state||0),s.write_shift(4,0),s.write_shift(4,0),s.write_shift(4,0),s.write_shift(4,0),s.write_shift(4,h.start),s.write_shift(4,h.size),s.write_shift(4,0)}else{for(l=0;l<17;++l)s.write_shift(4,0);for(l=0;l<3;++l)s.write_shift(4,-1);for(l=0;l<12;++l)s.write_shift(4,0)}}for(i=1;i=4096)if(s.l=h.start+1<<9,k&&Buffer.isBuffer(h.content))h.content.copy(s,s.l,0,h.size),s.l+=h.size+511&-512;else{for(l=0;l0&&h.size<4096)if(k&&Buffer.isBuffer(h.content))h.content.copy(s,s.l,0,h.size),s.l+=h.size+63&-64;else{for(l=0;l>16|R>>8|R));function z(e,t){var r=B[255&e];return t<=8?r>>>8-t:(r=r<<8|B[e>>8&255],t<=16?r>>>16-t:(r=r<<8|B[e>>16&255])>>>24-t)}function H(e,t){var r=7&t,a=t>>>3;return(e[a]|(r<=6?0:e[a+1]<<8))>>>r&3}function V(e,t){var r=7&t,a=t>>>3;return(e[a]|(r<=5?0:e[a+1]<<8))>>>r&7}function $(e,t){var r=7&t,a=t>>>3;return(e[a]|(r<=3?0:e[a+1]<<8))>>>r&31}function G(e,t){var r=7&t,a=t>>>3;return(e[a]|(r<=1?0:e[a+1]<<8))>>>r&127}function X(e,t,r){var a=7&t,n=t>>>3,s=(1<>>a;return r<8-a?i&s:(i|=e[n+1]<<8-a,r<16-a?i&s:(i|=e[n+2]<<16-a,r<24-a?i&s:(i|=e[n+3]<<24-a)&s))}function j(e,t,r){var a=7&t,n=t>>>3;return a<=5?e[n]|=(7&r)<>8-a),t+3}function K(e,t,r){return r=(1&r)<<(7&t),e[t>>>3]|=r,t+1}function Y(e,t,r){var a=t>>>3;return r<<=7&t,e[a]|=255&r,r>>>=8,e[a+1]=r,t+8}function Z(e,t,r){var a=t>>>3;return r<<=7&t,e[a]|=255&r,r>>>=8,e[a+1]=255&r,e[a+2]=r>>>8,t+16}function J(e,t){var r=e.length,a=2*r>t?2*r:t+5,n=0;if(r>=t)return e;if(k){var s=A(a);if(e.copy)e.copy(s);else for(;n>a-h,i=(1<=0;--i)t[o|i<0;)t[t.l++]=e[r++]}return t.l}(t,r):function(t,r){for(var n=0,s=0,i=U?new Uint16Array(32768):[];s0;)r[r.l++]=t[s++];n=8*r.l}else{n=j(r,n,+!(s+o!=t.length)+2);for(var c=0;o-- >0;){var l=t[s],f=-1,h=0;if((f=i[c=32767&(c<<5^l)])&&((f|=-32768&s)>s&&(f-=32768),f2){(l=a[h])<=22?n=Y(r,n,B[l+1]>>1)-1:(Y(r,n,3),Y(r,n+=5,B[l-23]>>5),n+=3);var u=l<8?0:l-4>>2;u>0&&(Z(r,n,h-M[l]),n+=u),l=e[s-f],n=Y(r,n,B[l]>>3),n-=3;var d=l<4?0:l-2>>1;d>0&&(Z(r,n,s-f-L[l]),n+=d);for(var p=0;p>>3;return(e[a]|(r<=4?0:e[a+1]<<8))>>>r&15}(e,t+=5)+4;t+=4;for(var s=0,i=U?new Uint8Array(19):q(19),o=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],c=1,l=U?new Uint8Array(8):q(8),f=U?new Uint8Array(8):q(8),h=i.length,u=0;u>8-p;for(var m=(1<<7-p)-1;m>=0;--m)oe[d|m<>>=3){case 16:for(s=3+H(e,t),t+=2,d=v[v.length-1];s-- >0;)v.push(d);break;case 17:for(s=3+V(e,t),t+=3;s-- >0;)v.push(0);break;case 18:for(s=11+G(e,t),t+=7;s-- >0;)v.push(0);break;default:v.push(d),c>>0,o=0,c=0;0==(1&a);)if(a=V(e,r),r+=3,a>>>1!=0)for(a>>1==1?(o=9,c=5):(r=fe(e,r),o=ce,c=le);;){!t&&i>>1==1?ee[l]:se[l];if(r+=15&f,0==((f>>>=4)>>>8&255))n[s++]=f;else{if(256==f)break;var h=(f-=257)<8?0:f-4>>2;h>5&&(h=0);var u=s+M[f];h>0&&(u+=X(e,r,h),r+=h),l=X(e,r,c),r+=15&(f=a>>>1==1?te[l]:ie[l]);var d=(f>>>=4)<4?0:f-2>>1,p=L[f];for(d>0&&(p+=X(e,r,d),r+=d),!t&&i>>3]|e[1+(r>>>3)]<<8;if(r+=32,m>0)for(!t&&i0;)n[s++]=e[r>>>3],r+=8}return t?[n,r+7>>>3]:[n.slice(0,s),r+7>>>3]}(e.slice(e.l||0),t);return e.l+=r[1],r[0]}function ue(e,t){if(!e)throw new Error(t);"undefined"!=typeof console&&console.error(t)}function de(e,t){var r=e;Xr(r,0);var a={FileIndex:[],FullPaths:[]};u(a,{root:t.root});for(var n=r.length-4;(80!=r[n]||75!=r[n+1]||5!=r[n+2]||6!=r[n+3])&&n>=0;)--n;r.l=n+4,r.l+=4;var i=r.read_shift(2);r.l+=6;var o=r.read_shift(4);for(r.l=o,n=0;n>>=5);r>>>=4,a.setMilliseconds(0),a.setFullYear(r+1980),a.setMonth(s-1),a.setDate(n);var i=31&t,o=63&(t>>>=5);return t>>>=6,a.setHours(t),a.setMinutes(o),a.setSeconds(i<<1),a}(e);if(8257&i)throw new Error("Unsupported ZIP encryption");e.read_shift(4);for(var l=e.read_shift(4),f=e.read_shift(4),h=e.read_shift(2),u=e.read_shift(2),d="",p=0;p>2,i=(3&r)<<4|(a=e[l++])>>4,o=(15&a)<<2|(n=e[l++])>>6,c=63&n,isNaN(a)?o=c=64:isNaN(n)&&(c=64),t+=T.charAt(s)+T.charAt(i)+T.charAt(o)+T.charAt(c);return t}(new Uint8Array(Re(a)));return chrome.downloads.download({url:o,filename:e,saveAs:!0})}}if("undefined"!=typeof $&&"undefined"!=typeof File&&"undefined"!=typeof Folder)try{var c=File(e);return c.open("w"),c.encoding="binary",Array.isArray(t)&&(t=O(t)),c.write(t),c.close(),t}catch(e){if(!e.message||-1==e.message.indexOf("onstruct"))throw e}throw new Error("cannot save file "+e)}function Fe(e){for(var t=Object.keys(e),r=[],a=0;a=60&&e<61)return e;var t=new Date;return t.setTime(24*(e>60?e:e+1)*60*60*1e3+Le),t}function He(e){var t=0,r=0,a=!1,n=e.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/);if(!n)throw new Error("|"+e+"| is not an ISO8601 Duration");for(var s=1;s!=n.length;++s)if(n[s]){switch(r=1,s>3&&(a=!0),n[s].slice(n[s].length-1)){case"Y":throw new Error("Unsupported ISO Duration Field: "+n[s].slice(n[s].length-1));case"D":r*=24;case"H":r*=60;case"M":if(!a)throw new Error("Unsupported ISO Duration Field: M");r*=60}t+=r*parseInt(n[s],10)}return t}var Ve=/^(\d+):(\d+)(:\d+)?(\.\d+)?$/,$e=/^(\d+)-(\d+)-(\d+)$/,Ge=/^(\d+)-(\d+)-(\d+)[T ](\d+):(\d+)(:\d+)?(\.\d+)?$/;function Xe(e,t){if(e instanceof Date)return e;var r=e.match(Ve);return r?new Date((t?Be:Ue)+1e3*(60*(60*parseInt(r[1],10)+parseInt(r[2],10))+(r[3]?parseInt(r[3].slice(1),10):0))+(r[4]?parseInt((r[4]+"000").slice(1,4),10):0)):(r=e.match($e))?new Date(Date.UTC(+r[1],+r[2]-1,+r[3],0,0,0,0)):(r=e.match(Ge))?new Date(Date.UTC(+r[1],+r[2]-1,+r[3],+r[4],+r[5],r[6]&&parseInt(r[6].slice(1),10)||0,r[7]&&parseInt((r[7]+"0000").slice(1,4),10)||0)):new Date(e)}function je(e,t){if(k&&Buffer.isBuffer(e)){if(t&&S){if(255==e[0]&&254==e[1])return Jt(e.slice(2).toString("utf16le"));if(254==e[1]&&255==e[2])return Jt(p(e.slice(2).toString("binary")))}return e.toString("binary")}if("undefined"!=typeof TextDecoder)try{if(t){if(255==e[0]&&254==e[1])return Jt(new TextDecoder("utf-16le").decode(e.slice(2)));if(254==e[0]&&255==e[1])return Jt(new TextDecoder("utf-16be").decode(e.slice(2)))}var r={"€":"€","‚":"‚","ƒ":"ƒ","„":"„","…":"…","†":"†","‡":"‡","ˆ":"ˆ","‰":"‰","Š":"Š","‹":"‹","Œ":"Œ","Ž":"Ž","‘":"‘","’":"’","“":"“","”":"”","•":"•","–":"–","—":"—","˜":"˜","™":"™","š":"š","›":"›","œ":"œ","ž":"ž","Ÿ":"Ÿ"};return Array.isArray(e)&&(e=new Uint8Array(e)),new TextDecoder("latin1").decode(e).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g,(function(e){return r[e]||e}))}catch(e){}var a=[],n=0;try{for(n=0;n3&&-1==tt.indexOf(t))return s}else if(t.replace(/[ap]m?/,"").match(/[a-z]/))return s;return i<0||i>8099||e.match(/[^-0-9:,\/\\\ ]/)?s:n}var at=function(){var e=5=="abacaba".split(/(:?b)/i).length;return function(t,r,a){if(e||"string"==typeof r)return t.split(r);for(var n=t.split(r),s=[n[0]],i=1;i-1;){var s=e.indexOf(r,n+t.length);if(-1==s)break;a.push(e.slice(n,s+r.length)),n=e.indexOf(t,s+r.length)}return a.length>0?a:null}function ct(e,t,r){var a=[],n=0,s=e.indexOf(t);if(-1==s)return e;for(;s>-1;){a.push(e.slice(n,s));var i=e.indexOf(r,s+t.length);if(-1==i)break;-1==(s=e.indexOf(t,n=i+r.length))&&a.push(e.slice(n))}return a.join("")}var lt={" ":1,"\t":1,"\r":1,"\n":1,">":1};function ft(e,t){for(var r=e.indexOf("<"+t),a=t.length+1,n=e.length;r>=0&&r<=n-a&&!lt[e.charAt(r+a)];)r=e.indexOf("<"+t,r+1);if(-1===r)return null;var s=e.indexOf(">",r+t.length);if(-1===s)return null;var i="",o=e.indexOf(i,s);return-1==o?null:[e.slice(r,o+i.length),e.slice(s+1,o)]}var ht=function(){var e={};return function(t,r){var a=e[r];a||(e[r]=a=[new RegExp("<(?:\\w+:)?"+r+"\\b[^<>]*>","g"),new RegExp("","g")]),a[0].lastIndex=a[1].lastIndex=0;var n=a[0].exec(t);if(!n)return null;var s=n.index,i=a[0].lastIndex;if(a[1].lastIndex=a[0].lastIndex,!(n=a[1].exec(t)))return null;var o=n.index,c=a[1].lastIndex;return[t.slice(s,c),t.slice(i,o)]}}(),ut=function(){var e={};return function(t,r){var a,n=[],s=e[r];for(s||(e[r]=s=[new RegExp("<(?:\\w+:)?"+r+"\\b[^<>]*>","g"),new RegExp("","g")]),s[0].lastIndex=s[1].lastIndex=0;a=s[0].exec(t);){var i=a.index;if(s[1].lastIndex=s[0].lastIndex,!(a=s[1].exec(t)))return null;var o=s[1].lastIndex;n.push(t.slice(i,o)),s[0].lastIndex=s[1].lastIndex}return 0==n.length?null:n}}(),dt=function(){var e={};return function(t,r){var a,n=[],s=e[r];s||(e[r]=s=[new RegExp("<(?:\\w+:)?"+r+"\\b[^<>]*>","g"),new RegExp("","g")]),s[0].lastIndex=s[1].lastIndex=0;for(var i=0,o=0;a=s[0].exec(t);){if(i=a.index,n.push(t.slice(o,i)),o=i,s[1].lastIndex=s[0].lastIndex,!(a=s[1].exec(t)))return null;o=s[1].lastIndex,s[0].lastIndex=s[1].lastIndex}return n.push(t.slice(o)),0==n.length?"":n.join("")}}(),pt=function(){var e={};return function(t,r){var a,n=[],s=e[r];for(s||(e[r]=s=[new RegExp("<"+r+"\\b[^<>]*>","ig"),new RegExp("","ig")]),s[0].lastIndex=s[1].lastIndex=0;a=s[0].exec(t);){var i=a.index;if(s[1].lastIndex=s[0].lastIndex,!(a=s[1].exec(t)))return null;var o=s[1].lastIndex;n.push(t.slice(i,o)),s[0].lastIndex=s[1].lastIndex}return 0==n.length?null:n}}();function mt(e){return e?e.content&&e.type?je(e.content,!0):e.data?m(e.data):e.asNodeBuffer&&k?m(e.asNodeBuffer().toString("binary")):e.asBinary?m(e.asBinary()):e._data&&e._data.getContent?m(je(Array.prototype.slice.call(e._data.getContent(),0))):null:null}function vt(e){if(!e)return null;if(e.data)return u(e.data);if(e.asNodeBuffer&&k)return e.asNodeBuffer();if(e._data&&e._data.getContent){var t=e._data.getContent();return"string"==typeof t?u(t):Array.prototype.slice.call(t)}return e.content&&e.type?e.content:null}function gt(e,t){for(var r=e.FullPaths||Fe(e.files),a=t.toLowerCase().replace(/[\/]/g,"\\"),n=a.replace(/\\/g,"/"),s=0;s>6&31,n[r++]=128|63&i;else if(i>=55296&&i<57344){i=64+(1023&i);var o=1023&e.charCodeAt(++s);n[r++]=240|i>>8&7,n[r++]=128|i>>2&63,n[r++]=128|o>>6&15|(3&i)<<4,n[r++]=128|63&o}else n[r++]=224|i>>12&15,n[r++]=128|i>>6&63,n[r++]=128|63&i;r>a&&(t.push(n.slice(0,r)),r=0,n=x(65535),a=65530)}return t.push(n.slice(0,r)),N(t)}(r),Ie.utils.cfb_add(e,t,a);Ie.utils.cfb_add(e,t,r)}else e.file(t,r)}function _t(){return Ie.utils.cfb_new()}function St(e,t){switch(t.type){case"base64":return Ie.read(e,{type:"base64"});case"binary":return Ie.read(e,{type:"binary"});case"buffer":case"array":return Ie.read(e,{type:"buffer"})}throw new Error("Unrecognized type "+t.type)}function xt(e,t){if("/"==e.charAt(0))return e.slice(1);var r=t.split("/");"/"!=t.slice(-1)&&r.pop();for(var a=e.split("/");0!==a.length;){var n=a.shift();".."===n?r.pop():"."!==n&&r.push(n)}return r.join("/")}var At='\r\n',Ct=/\s([^"\s?>\/]+)\s*=\s*((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g,It=/<[\/\?]?[a-zA-Z0-9:_-]+(?:\s+[^"\s?<>\/]+\s*=\s*(?:"[^"]*"|'[^']*'|[^'"<>\s=]+))*\s*[\/\?]?>/gm,Ot=At.match(It)?It:/<[^<>]*>/g,Rt=/<\w*:/,Nt=/<(\/?)\w+:/;function Ft(e,t,r){for(var a={},n=0,s=0;n!==e.length&&32!==(s=e.charCodeAt(n))&&10!==s&&13!==s;++n);if(t||(a[0]=e.slice(0,n)),n===e.length)return a;var i=e.match(Ct),o=0,c="",l=0,f="",h="",u=1;if(i)for(l=0;l!=i.length;++l){for(h=i[l].slice(1),s=0;s!=h.length&&61!==h.charCodeAt(s);++s);for(f=h.slice(0,s).trim();32==h.charCodeAt(s+1);)++s;for(u=34==(n=h.charCodeAt(s+1))||39==n?1:0,c=h.slice(s+1+u,h.length-u),o=0;o!=f.length&&58!==f.charCodeAt(o);++o);if(o===f.length)f.indexOf("_")>0&&(f=f.slice(0,f.indexOf("_"))),a[f]=c,r||(a[f.toLowerCase()]=c);else{var d=(5===o&&"xmlns"===f.slice(0,5)?"xmlns":"")+f.slice(o+1);if(a[d]&&"ext"==f.slice(o-3,o))continue;a[d]=c,r||(a[d.toLowerCase()]=c)}}return a}function Dt(e){return e.replace(Nt,"<$1")}var Pt={""":'"',"'":"'",">":">","<":"<","&":"&"},Mt=Pe(Pt),Lt=function(){var e=/&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/gi,t=/_x([\da-fA-F]{4})_/gi;function r(a){var n=a+"",s=n.indexOf("");if(-1==s)return n.replace(e,(function(e,t){return Pt[e]||String.fromCharCode(parseInt(t,e.indexOf("x")>-1?16:10))||e})).replace(t,(function(e,t){return String.fromCharCode(parseInt(t,16))}));var i=n.indexOf("");return r(n.slice(0,s))+n.slice(s+9,i)+r(n.slice(i+3))}return function(e,t){var a=r(e);return t?a.replace(/\r\n/g,"\n"):a}}(),Ut=/[&<>'"]/g,Bt=/[\u0000-\u0008\u000b-\u001f\uFFFE-\uFFFF]/g;function Wt(e){return(e+"").replace(Ut,(function(e){return Mt[e]})).replace(Bt,(function(e){return"_x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+"_"}))}function zt(e){return Wt(e).replace(/ /g,"_x0020_")}var Ht=/[\u0000-\u001f]/g;function Vt(e){return(e+"").replace(Ut,(function(e){return Mt[e]})).replace(/\n/g,"
").replace(Ht,(function(e){return"&#x"+("000"+e.charCodeAt(0).toString(16)).slice(-4)+";"}))}var $t=function(){var e=/&#(\d+);/g;function t(e,t){return String.fromCharCode(parseInt(t,10))}return function(r){return r.replace(e,t)}}();function Gt(e){switch(e){case 1:case!0:case"1":case"true":return!0;case 0:case!1:case"0":case"false":return!1}return!1}function Xt(e){for(var t="",r=0,a=0,n=0,s=0,i=0,o=0;r191&&a<224?(i=(31&a)<<6,i|=63&n,t+=String.fromCharCode(i)):(s=e.charCodeAt(r++),a<240?t+=String.fromCharCode((15&a)<<12|(63&n)<<6|63&s):(o=((7&a)<<18|(63&n)<<12|(63&s)<<6|63&(i=e.charCodeAt(r++)))-65536,t+=String.fromCharCode(55296+(o>>>10&1023)),t+=String.fromCharCode(56320+(1023&o)))));return t}function jt(e){var t,r,a,n=x(2*e.length),s=1,i=0,o=0;for(r=0;r>>10&1023),t=56320+(1023&t)),0!==o&&(n[i++]=255&o,n[i++]=o>>>8,o=0),n[i++]=t%256,n[i++]=t>>>8;return n.slice(0,i).toString("ucs2")}function Kt(e){return _(e,"binary").toString("utf8")}var Yt="foo bar baz☃🍣",Zt=k&&(Kt(Yt)==Xt(Yt)&&Kt||jt(Yt)==Xt(Yt)&&jt)||Xt,Jt=k?function(e){return _(e,"utf8").toString("binary")}:function(e){for(var t=[],r=0,a=0,n=0;r>6))),t.push(String.fromCharCode(128+(63&a)));break;case a>=55296&&a<57344:a-=55296,n=e.charCodeAt(r++)-56320+(a<<10),t.push(String.fromCharCode(240+(n>>18&7))),t.push(String.fromCharCode(144+(n>>12&63))),t.push(String.fromCharCode(128+(n>>6&63))),t.push(String.fromCharCode(128+(63&n)));break;default:t.push(String.fromCharCode(224+(a>>12))),t.push(String.fromCharCode(128+(a>>6&63))),t.push(String.fromCharCode(128+(63&a)))}return t.join("")},qt=function(){var e=[["nbsp"," "],["middot","·"],["quot",'"'],["apos","'"],["gt",">"],["lt","<"],["amp","&"]].map((function(e){return[new RegExp("&"+e[0]+";","ig"),e[1]]}));return function(t){for(var r=t.replace(/^[\t\n\r ]+/,"").replace(/(^|[^\t\n\r ])[\t\n\r ]+$/,"$1").replace(/>\s+/g,">").replace(/\b\s+/g,"\n").replace(/<[^<>]*>/g,""),a=0;a/g,er=/<(?:vt:)([^<"'>]*)>([\s\S]*)"+t+""}function nr(e){return Fe(e).map((function(t){return" "+t+'="'+e[t]+'"'})).join("")}function sr(e,t,r){return"<"+e+(null!=r?nr(r):"")+(null!=t?(t.match(rr)?' xml:space="preserve"':"")+">"+t+""}function ir(e,t){try{return e.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}return""}function or(e){if(k&&Buffer.isBuffer(e))return e.toString("utf8");if("string"==typeof e)return e;if("undefined"!=typeof Uint8Array&&e instanceof Uint8Array)return Zt(O(R(e)));throw new Error("Bad input format: expected Buffer or string")}var cr=/<([\/]?)([^\s?>:\/"]+)(?:\s+[^<>=?"'\s]+="[^"]*?")*\s*[\/]?>/gm,lr={CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/metadata/core-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties",CT:"http://schemas.openxmlformats.org/package/2006/content-types",RELS:"http://schemas.openxmlformats.org/package/2006/relationships",TCMNT:"http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments",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"},fr=["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"],hr={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"},ur=function(e){for(var t=[],r=0;r0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0].map((function(e){return Buffer.isBuffer(e)?e:_(e)}))):ur(e)}:ur,pr=function(e,t,r){for(var a=[],n=t;n0?wr(e,t+4,t+4+r-1):""},yr=Tr,Er=function(e,t){var r=Lr(e,t);return r>0?wr(e,t+4,t+4+r-1):""},kr=Er,_r=function(e,t){var r=2*Lr(e,t);return r>0?wr(e,t+4,t+4+r-1):""},Sr=_r,xr=function(e,t){var r=Lr(e,t);return r>0?mr(e,t+4,t+4+r):""},Ar=xr,Cr=function(e,t){var r=Lr(e,t);return r>0?wr(e,t+4,t+4+r):""},Ir=Cr,Or=function(e,t){return function(e,t){for(var r=1-2*(e[t+7]>>>7),a=((127&e[t+7])<<4)+(e[t+6]>>>4&15),n=15&e[t+6],s=5;s>=0;--s)n=256*n+e[t+s];return 2047==a?0==n?r*(1/0):NaN:(0==a?a=-1022:(a-=1023,n+=Math.pow(2,52)),r*Math.pow(2,a-52)*n)}(e,t)},Rr=Or,Nr=function(e){return Array.isArray(e)||"undefined"!=typeof Uint8Array&&e instanceof Uint8Array};function Fr(){mr=function(e,t,r){return a.utils.decode(1200,e.slice(t,r)).replace(F,"")},wr=function(e,t,r){return a.utils.decode(65001,e.slice(t,r))},yr=function(e,t){var r=Lr(e,t);return r>0?a.utils.decode(i,e.slice(t+4,t+4+r-1)):""},kr=function(e,t){var r=Lr(e,t);return r>0?a.utils.decode(s,e.slice(t+4,t+4+r-1)):""},Sr=function(e,t){var r=2*Lr(e,t);return r>0?a.utils.decode(1200,e.slice(t+4,t+4+r-1)):""},Ar=function(e,t){var r=Lr(e,t);return r>0?a.utils.decode(1200,e.slice(t+4,t+4+r)):""},Ir=function(e,t){var r=Lr(e,t);return r>0?a.utils.decode(65001,e.slice(t+4,t+4+r)):""}}k&&(yr=function(e,t){if(!Buffer.isBuffer(e))return Tr(e,t);var r=e.readUInt32LE(t);return r>0?e.toString("utf8",t+4,t+4+r-1):""},kr=function(e,t){if(!Buffer.isBuffer(e))return Er(e,t);var r=e.readUInt32LE(t);return r>0?e.toString("utf8",t+4,t+4+r-1):""},Sr=function(e,t){if(!Buffer.isBuffer(e)||!S)return _r(e,t);var r=2*e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+r-1)},Ar=function(e,t){if(!Buffer.isBuffer(e)||!S)return xr(e,t);var r=e.readUInt32LE(t);return e.toString("utf16le",t+4,t+4+r)},Ir=function(e,t){if(!Buffer.isBuffer(e))return Cr(e,t);var r=e.readUInt32LE(t);return e.toString("utf8",t+4,t+4+r)},Rr=function(e,t){return Buffer.isBuffer(e)?e.readDoubleLE(t):Or(e,t)},Nr=function(e){return Buffer.isBuffer(e)||Array.isArray(e)||"undefined"!=typeof Uint8Array&&e instanceof Uint8Array}),void 0!==a&&Fr();var Dr=function(e,t){return e[t]},Pr=function(e,t){return 256*e[t+1]+e[t]},Mr=function(e,t){var r=256*e[t+1]+e[t];return r<32768?r:-1*(65535-r+1)},Lr=function(e,t){return e[t+3]*(1<<24)+(e[t+2]<<16)+(e[t+1]<<8)+e[t]},Ur=function(e,t){return e[t+3]<<24|e[t+2]<<16|e[t+1]<<8|e[t]},Br=function(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]};function Wr(e,t){var r,n,i,o,c,l,f="",h=[];switch(t){case"dbcs":if(l=this.l,k&&Buffer.isBuffer(this)&&S)f=this.slice(this.l,this.l+2*e).toString("utf16le");else for(c=0;c0?Ur:Br)(this,this.l),this.l+=4,r):(n=Lr(this,this.l),this.l+=4,n);case 8:case-8:if("f"===t)return n=8==e?Rr(this,this.l):Rr([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]],0),this.l+=8,n;e=8;case 16:f=gr(this,this.l,e)}}return this.l+=e,f}var zr=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255,e[r+2]=t>>>16&255,e[r+3]=t>>>24&255},Hr=function(e,t,r){e[r]=255&t,e[r+1]=t>>8&255,e[r+2]=t>>16&255,e[r+3]=t>>24&255},Vr=function(e,t,r){e[r]=255&t,e[r+1]=t>>>8&255};function $r(e,t,r){var n=0,o=0;if("dbcs"===r){for(o=0;o!=t.length;++o)Vr(this,t.charCodeAt(o),this.l+2*o);n=2*t.length}else if("sbcs"===r||"cpstr"==r)if(void 0!==a&&874==i){for(o=0;o!=t.length;++o){var c=a.utils.encode(i,t.charAt(o));this[this.l+o]=c[0]}n=t.length}else if(void 0!==a&&"cpstr"==r){if((c=a.utils.encode(s,t)).length==t.length)for(o=0;o>8}for(;this.l>>=8,this[this.l+1]=255&t;break;case 3:n=3,this[this.l]=255&t,t>>>=8,this[this.l+1]=255&t,t>>>=8,this[this.l+2]=255&t;break;case 4:n=4,zr(this,t,this.l);break;case 8:if(n=8,"f"===r){!function(e,t,r){var a=(t<0||1/t==-1/0?1:0)<<7,n=0,s=0,i=a?-t:t;isFinite(i)?0==i?n=s=0:(n=Math.floor(Math.log(i)/Math.LN2),s=i*Math.pow(2,52-n),n<=-1023&&(!isFinite(s)||s>4|a}(this,t,this.l);break}case 16:break;case-4:n=4,Hr(this,t,this.l)}}return this.l+=n,this}function Gr(e,t){var r=gr(this,this.l,e.length>>1);if(r!==e)throw new Error(t+"Expected "+e+" saw "+r);this.l+=e.length>>1}function Xr(e,t){e.l=t,e.read_shift=Wr,e.chk=Gr,e.write_shift=$r}function jr(e,t){e.l+=t}function Kr(e){var t=x(e);return Xr(t,0),t}function Yr(e,t,r){if(e){var a,n,s;Xr(e,e.l||0);for(var i=e.length,o=0,c=0;e.la.l&&((a=a.slice(0,a.l)).l=a.length),a.length>0&&e.push(a)),a=null)},s=function(e){return a&&e=128?1:0)+1,a>=128&&++n,a>=16384&&++n,a>=2097152&&++n;var i=e.next(n);s<=127?i.write_shift(1,s):(i.write_shift(1,128+(127&s)),i.write_shift(1,s>>7));for(var o=0;4!=o;++o){if(!(a>=128)){i.write_shift(1,a);break}i.write_shift(1,128+(127&a)),a>>=7}a>0&&Nr(r)&&e.push(r)}}function qr(e,t,r){var a=Ke(e);if(t.s?(a.cRel&&(a.c+=t.s.c),a.rRel&&(a.r+=t.s.r)):(a.cRel&&(a.c+=t.c),a.rRel&&(a.r+=t.r)),!r||r.biff<12){for(;a.c>=256;)a.c-=256;for(;a.r>=65536;)a.r-=65536}return a}function Qr(e,t,r){var a=Ke(e);return a.s=qr(a.s,t.s,r),a.e=qr(a.e,t.s,r),a}function ea(e,t){if(e.cRel&&e.c<0)for(e=Ke(e);e.c<0;)e.c+=t>8?16384:256;if(e.rRel&&e.r<0)for(e=Ke(e);e.r<0;)e.r+=t>8?1048576:t>5?65536:16384;var r=oa(e);return e.cRel||null==e.cRel||(r=r.replace(/^([A-Z])/,"$$$1")),e.rRel||null==e.rRel||(r=r.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")),r}function ta(e,t){return 0!=e.s.r||e.s.rRel||e.e.r!=(t.biff>=12?1048575:t.biff>=8?65536:16384)||e.e.rRel?0!=e.s.c||e.s.cRel||e.e.c!=(t.biff>=12?16383:255)||e.e.cRel?ea(e.s,t.biff)+":"+ea(e.e,t.biff):(e.s.rRel?"":"$")+aa(e.s.r)+":"+(e.e.rRel?"":"$")+aa(e.e.r):(e.s.cRel?"":"$")+sa(e.s.c)+":"+(e.e.cRel?"":"$")+sa(e.e.c)}function ra(e){return parseInt(e.replace(/\$(\d+)$/,"$1"),10)-1}function aa(e){return""+(e+1)}function na(e){for(var t=e.replace(/^\$([A-Z])/,"$1"),r=0,a=0;a!==t.length;++a)r=26*r+t.charCodeAt(a)-64;return r-1}function sa(e){if(e<0)throw new Error("invalid column "+e);var t="";for(++e;e;e=Math.floor((e-1)/26))t=String.fromCharCode((e-1)%26+65)+t;return t}function ia(e){for(var t=0,r=0,a=0;a=48&&n<=57?t=10*t+(n-48):n>=65&&n<=90&&(r=26*r+(n-64))}return{c:r-1,r:t-1}}function oa(e){for(var t=e.c+1,r="";t;t=(t-1)/26|0)r=String.fromCharCode((t-1)%26+65)+r;return r+(e.r+1)}function ca(e){var t=e.indexOf(":");return-1==t?{s:ia(e),e:ia(e)}:{s:ia(e.slice(0,t)),e:ia(e.slice(t+1))}}function la(e,t){return void 0===t||"number"==typeof t?la(e.s,e.e):("string"!=typeof e&&(e=oa(e)),"string"!=typeof t&&(t=oa(t)),e==t?e:e+":"+t)}function fa(e){var t=ca(e);return"$"+sa(t.s.c)+"$"+aa(t.s.r)+":$"+sa(t.e.c)+"$"+aa(t.e.r)}function ha(e,t){if(!(e||t&&t.biff<=5&&t.biff>=2))throw new Error("empty sheet name");return/[^\w\u4E00-\u9FFF\u3040-\u30FF]/.test(e)?"'"+e.replace(/'/g,"''")+"'":e}function ua(e){var t={s:{c:0,r:0},e:{c:0,r:0}},r=0,a=0,n=0,s=e.length;for(r=0;a26);++a)r=26*r+n;for(t.s.c=--r,r=0;a9);++a)r=10*r+n;if(t.s.r=--r,a===s||10!=n)return t.e.c=t.s.c,t.e.r=t.s.r,t;for(++a,r=0;a!=s&&!((n=e.charCodeAt(a)-64)<1||n>26);++a)r=26*r+n;for(t.e.c=--r,r=0;a!=s&&!((n=e.charCodeAt(a)-48)<0||n>9);++a)r=10*r+n;return t.e.r=--r,t}function da(e,t,r){return null==e||null==e.t||"z"==e.t?"":void 0!==e.w?e.w:("d"==e.t&&!e.z&&r&&r.dateNF&&(e.z=r.dateNF),"e"==e.t?tn[e.v]||e.v:function(e,t){var r="d"==e.t&&t instanceof Date;if(null!=e.z)try{return e.w=be(e.z,r?We(t):t)}catch(e){}try{return e.w=be((e.XF||{}).numFmtId||(r?14:0),r?We(t):t)}catch(e){return""+t}}(e,null==t?e.v:t))}function pa(e,t){var r=t&&t.sheet?t.sheet:"Sheet1",a={};return a[r]=e,{SheetNames:[r],Sheets:a}}function ma(e,t,r){var a=r||{},n=e?null!=e["!data"]:a.dense;null!=w&&null==n&&(n=w);var s=e||{};n&&!s["!data"]&&(s["!data"]=[]);var i=0,o=0;if(s&&null!=a.origin)if("number"==typeof a.origin)i=a.origin;else{var c="string"==typeof a.origin?ia(a.origin):a.origin;i=c.r,o=c.c}var l={s:{c:1e7,r:1e7},e:{c:0,r:0}};if(s["!ref"]){var f=ua(s["!ref"]);l.s.c=f.s.c,l.s.r=f.s.r,l.e.c=Math.max(l.e.c,f.e.c),l.e.r=Math.max(l.e.r,f.e.r),-1==i&&(l.e.r=i=s["!ref"]?f.e.r+1:0)}else l.s.c=l.e.c=l.s.r=l.e.r=0;for(var h=[],u=!1,d=0;d!=t.length;++d)if(t[d]){if(!Array.isArray(t[d]))throw new Error("aoa_to_sheet expects an array of arrays");var p=i+d,m=""+(p+1);n&&(s["!data"][p]||(s["!data"][p]=[]),h=s["!data"][p]);for(var v=0;v!=t[d].length;++v)if(void 0!==t[d][v]){var g={v:t[d][v]},b=o+v;if(l.s.r>p&&(l.s.r=p),l.s.c>b&&(l.s.c=b),l.e.r0&&t.write_shift(0,e,"dbcs"),r?t.slice(0,t.l):t}function Ta(e){return{ich:e.read_shift(2),ifnt:e.read_shift(2)}}function ya(e,t){var r=e.l,a=e.read_shift(1),n=ba(e),s=[],i={t:n,h:n};if(0!=(1&a)){for(var o=e.read_shift(4),c=0;c!=o;++c)s.push(Ta(e));i.r=s}else i.r=[{ich:0,ifnt:0}];return e.l=r+t,i}var Ea=ya;function ka(e){var t=e.read_shift(4),r=e.read_shift(2);return r+=e.read_shift(1)<<16,e.l++,{c:t,iStyleRef:r}}function _a(e,t){return null==t&&(t=Kr(8)),t.write_shift(-4,e.c),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}function Sa(e){var t=e.read_shift(2);return t+=e.read_shift(1)<<16,e.l++,{c:-1,iStyleRef:t}}function xa(e,t){return null==t&&(t=Kr(4)),t.write_shift(3,e.iStyleRef||e.s),t.write_shift(1,0),t}var Aa=ba,Ca=wa;function Ia(e){var t=e.read_shift(4);return 0===t||4294967295===t?"":e.read_shift(t,"dbcs")}function Oa(e,t){var r=!1;return null==t&&(r=!0,t=Kr(127)),t.write_shift(4,e.length>0?e.length:4294967295),e.length>0&&t.write_shift(0,e,"dbcs"),r?t.slice(0,t.l):t}var Ra=ba,Na=Ia,Fa=Oa;function Da(e){var t=e.slice(e.l,e.l+4),r=1&t[0],a=2&t[0];e.l+=4;var n=0===a?Rr([0,0,0,0,252&t[0],t[1],t[2],t[3]],0):Ur(t,0)>>2;return r?n/100:n}function Pa(e,t){null==t&&(t=Kr(4));var r=0,a=0,n=100*e;if(e==(0|e)&&e>=-(1<<29)&&e<1<<29?a=1:n==(0|n)&&n>=-(1<<29)&&n<1<<29&&(a=1,r=1),!a)throw new Error("unsupported RkNumber "+e);t.write_shift(-4,((r?n:e)<<2)+(r+2))}function Ma(e){var t={s:{},e:{}};return t.s.r=e.read_shift(4),t.e.r=e.read_shift(4),t.s.c=e.read_shift(4),t.e.c=e.read_shift(4),t}var La=Ma,Ua=function(e,t){return t||(t=Kr(16)),t.write_shift(4,e.s.r),t.write_shift(4,e.e.r),t.write_shift(4,e.s.c),t.write_shift(4,e.e.c),t};function Ba(e){if(e.length-e.l<8)throw"XLS Xnum Buffer underflow";return e.read_shift(8,"f")}function Wa(e,t){return(t||Kr(8)).write_shift(8,e,"f")}function za(e,t){if(t||(t=Kr(8)),!e||e.auto)return t.write_shift(4,0),t.write_shift(4,0),t;null!=e.index?(t.write_shift(1,2),t.write_shift(1,e.index)):null!=e.theme?(t.write_shift(1,6),t.write_shift(1,e.theme)):(t.write_shift(1,5),t.write_shift(1,0));var r=e.tint||0;if(r>0?r*=32767:r<0&&(r*=32768),t.write_shift(2,r),e.rgb&&null==e.theme){var a=e.rgb||"FFFFFF";"number"==typeof a&&(a=("000000"+a.toString(16)).slice(-6)),t.write_shift(1,parseInt(a.slice(0,2),16)),t.write_shift(1,parseInt(a.slice(2,4),16)),t.write_shift(1,parseInt(a.slice(4,6),16)),t.write_shift(1,255)}else t.write_shift(2,0),t.write_shift(1,0),t.write_shift(1,0);return t}function Ha(e,t){var r=e.read_shift(4);switch(r){case 0:return"";case 4294967295:case 4294967294:return{2:"BITMAP",3:"METAFILEPICT",8:"DIB",14:"ENHMETAFILE"}[e.read_shift(4)]||""}if(r>400)throw new Error("Unsupported Clipboard: "+r.toString(16));return e.l-=4,e.read_shift(0,1==t?"lpstr":"lpwstr")}var Va=2,$a=3,Ga=12,Xa=80,ja=81,Ka=[Xa,ja],Ya={1:{n:"CodePage",t:Va},2:{n:"Category",t:Xa},3:{n:"PresentationFormat",t:Xa},4:{n:"ByteCount",t:$a},5:{n:"LineCount",t:$a},6:{n:"ParagraphCount",t:$a},7:{n:"SlideCount",t:$a},8:{n:"NoteCount",t:$a},9:{n:"HiddenCount",t:$a},10:{n:"MultimediaClipCount",t:$a},11:{n:"ScaleCrop",t:11},12:{n:"HeadingPairs",t:4108},13:{n:"TitlesOfParts",t:4126},14:{n:"Manager",t:Xa},15:{n:"Company",t:Xa},16:{n:"LinksUpToDate",t:11},17:{n:"CharacterCount",t:$a},19:{n:"SharedDoc",t:11},22:{n:"HyperlinksChanged",t:11},23:{n:"AppVersion",t:$a,p:"version"},24:{n:"DigSig",t:65},26:{n:"ContentType",t:Xa},27:{n:"ContentStatus",t:Xa},28:{n:"Language",t:Xa},29:{n:"Version",t:Xa},255:{},2147483648:{n:"Locale",t:19},2147483651:{n:"Behavior",t:19},1919054434:{}},Za={1:{n:"CodePage",t:Va},2:{n:"Title",t:Xa},3:{n:"Subject",t:Xa},4:{n:"Author",t:Xa},5:{n:"Keywords",t:Xa},6:{n:"Comments",t:Xa},7:{n:"Template",t:Xa},8:{n:"LastAuthor",t:Xa},9:{n:"RevNumber",t:Xa},10:{n:"EditTime",t:64},11:{n:"LastPrinted",t:64},12:{n:"CreatedDate",t:64},13:{n:"ModifiedDate",t:64},14:{n:"PageCount",t:$a},15:{n:"WordCount",t:$a},16:{n:"CharCount",t:$a},17:{n:"Thumbnail",t:71},18:{n:"Application",t:Xa},19:{n:"DocSecurity",t:$a},255:{},2147483648:{n:"Locale",t:19},2147483651:{n:"Behavior",t:19},1919054434:{}},Ja={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"},qa=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function Qa(e){return e.map((function(e){return[e>>16&255,e>>8&255,255&e]}))}var en=Ke(Qa([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,0,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0])),tn={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"},rn={"#NULL!":0,"#DIV/0!":7,"#VALUE!":15,"#REF!":23,"#NAME?":29,"#NUM!":36,"#N/A":42,"#GETTING_DATA":43,"#WTF?":255},an=["_xlnm.Consolidate_Area","_xlnm.Auto_Open","_xlnm.Auto_Close","_xlnm.Extract","_xlnm.Database","_xlnm.Criteria","_xlnm.Print_Area","_xlnm.Print_Titles","_xlnm.Recorder","_xlnm.Data_Form","_xlnm.Auto_Activate","_xlnm.Auto_Deactivate","_xlnm.Sheet_Title","_xlnm._FilterDatabase"],nn={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.sheet.macroEnabled.main+xml":"workbooks","application/vnd.ms-excel.sheet.binary.macroEnabled.main":"workbooks","application/vnd.ms-excel.addin.macroEnabled.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":"workbooks","application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":"sheets","application/vnd.ms-excel.worksheet":"sheets","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":"charts","application/vnd.ms-excel.chartsheet":"charts","application/vnd.ms-excel.macrosheet+xml":"macros","application/vnd.ms-excel.macrosheet":"macros","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":"dialogs","application/vnd.ms-excel.dialogsheet":"dialogs","application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml":"strs","application/vnd.ms-excel.sharedStrings":"strs","application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":"styles","application/vnd.ms-excel.styles":"styles","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.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":"comments","application/vnd.ms-excel.comments":"comments","application/vnd.ms-excel.threadedcomments+xml":"threadedcomments","application/vnd.ms-excel.person+xml":"people","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"metadata","application/vnd.ms-excel.sheetMetadata":"metadata","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-office.chartex+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":"links","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"links","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.openxmlformats-officedocument.themeOverride+xml":"TODO","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":"TODO","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":"drawings","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","image/png":"TODO",sheet:"js"},sn={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",xlam:"application/vnd.ms-excel.addin.macroEnabled.main+xml",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},metadata:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml",xlsb:"application/vnd.ms-excel.sheetMetadata"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};function on(e,t,r){var a,n=function(e){for(var t=[],r=Fe(e),a=0;a!==r.length;++a)null==t[e[r[a]]]&&(t[e[r[a]]]=[]),t[e[r[a]]].push(r[a]);return t}(nn),s=[];r||(s[s.length]=At,s[s.length]=sr("Types",null,{xmlns:lr.CT,"xmlns:xsd":lr.xsd,"xmlns:xsi":lr.xsi}),s=s.concat([["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["data","application/vnd.openxmlformats-officedocument.model+data"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels","application/vnd.openxmlformats-package.relationships+xml"]].map((function(e){return sr("Default",null,{Extension:e[0],ContentType:e[1]})}))));var i=function(r){e[r]&&e[r].length>0&&(a=e[r][0],s[s.length]=sr("Override",null,{PartName:("/"==a[0]?"":"/")+a,ContentType:sn[r][t.bookType]||sn[r].xlsx}))},o=function(r){(e[r]||[]).forEach((function(e){s[s.length]=sr("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:sn[r][t.bookType]||sn[r].xlsx})}))},c=function(t){(e[t]||[]).forEach((function(e){s[s.length]=sr("Override",null,{PartName:("/"==e[0]?"":"/")+e,ContentType:n[t][0]})}))};return i("workbooks"),o("sheets"),o("charts"),c("themes"),["strs","styles"].forEach(i),["coreprops","extprops","custprops"].forEach(c),c("vba"),c("comments"),c("threadedcomments"),c("drawings"),o("metadata"),c("people"),!r&&s.length>2&&(s[s.length]="",s[1]=s[1].replace("/>",">")),s.join("")}var cn={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",XPATH:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath",XMISS:"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing",XLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink",CXML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml",CXMLP:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps",CMNT:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments",CORE_PROPS:"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties",EXT_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties",CUST_PROPS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties",SST:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings",STY:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles",THEME:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme",CHART:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart",CHARTEX:"http://schemas.microsoft.com/office/2014/relationships/chartEx",CS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet",WS:["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"],DS:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet",MS:"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet",IMG:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image",DRAW:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing",XLMETA:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata",TCMNT:"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment",PEOPLE:"http://schemas.microsoft.com/office/2017/10/relationships/person",CONN:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function ln(e){var t=e.lastIndexOf("/");return e.slice(0,t+1)+"_rels/"+e.slice(t+1)+".rels"}function fn(e,t){var r={"!id":{}};if(!e)return r;"/"!==t.charAt(0)&&(t="/"+t);var a={};return(e.match(Ot)||[]).forEach((function(e){var n=Ft(e);if("2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function un(e,t,r,a,n,s){if(n||(n={}),e["!id"]||(e["!id"]={}),e["!idx"]||(e["!idx"]=1),t<0)for(t=e["!idx"];e["!id"]["rId"+t];++t);if(e["!idx"]=t+1,n.Id="rId"+t,n.Type=a,n.Target=r,s?n.TargetMode=s:[cn.HLINK,cn.XPATH,cn.XMISS].indexOf(n.Type)>-1&&(n.TargetMode="External"),e["!id"][n.Id])throw new Error("Cannot rewrite rId "+t);return e["!id"][n.Id]=n,e[("/"+n.Target).replace("//","/")]=n,t}var dn="application/vnd.oasis.opendocument.spreadsheet";function pn(e,t,r){return[' \n',' \n'," \n"].join("")}function mn(e,t){return'SheetJS '+n.version+""}var vn=[["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"]];function gn(e){var t={};e=Zt(e);for(var r=0;r0&&(t[a[1]]=Lt(n[1])),"date"===a[2]&&t[a[1]]&&(t[a[1]]=Xe(t[a[1]]))}return t}function bn(e,t,r,a,n){null==n[e]&&null!=t&&""!==t&&(n[e]=t,t=Wt(t),a[a.length]=r?sr(e,t,r):ar(e,t))}function wn(e,t){var r=t||{},a=[At,sr("cp:coreProperties",null,{"xmlns:cp":lr.CORE_PROPS,"xmlns:dc":lr.dc,"xmlns:dcterms":lr.dcterms,"xmlns:dcmitype":lr.dcmitype,"xmlns:xsi":lr.xsi})],n={};if(!e&&!r.Props)return a.join("");e&&(null!=e.CreatedDate&&bn("dcterms:created","string"==typeof e.CreatedDate?e.CreatedDate:ir(e.CreatedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},a,n),null!=e.ModifiedDate&&bn("dcterms:modified","string"==typeof e.ModifiedDate?e.ModifiedDate:ir(e.ModifiedDate,r.WTF),{"xsi:type":"dcterms:W3CDTF"},a,n));for(var s=0;s!=vn.length;++s){var i=vn[s],o=r.Props&&null!=r.Props[i[1]]?r.Props[i[1]]:e?e[i[1]]:null;!0===o?o="1":!1===o?o="0":"number"==typeof o&&(o=String(o)),null!=o&&bn(i[0],o,null,a,n)}return a.length>2&&(a[a.length]="",a[1]=a[1].replace("/>",">")),a.join("")}var Tn=[["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"]],yn=["Worksheets","SheetNames","NamedRanges","DefinedNames","Chartsheets","ChartNames"];function En(e,t,r,a){var n=[];if("string"==typeof e)n=tr(e,a);else for(var s=0;s0)for(var l=0;l!==n.length;l+=2){switch(c=+n[l+1].v,n[l].v){case"Worksheets":case"工作表":case"Листы":case"أوراق العمل":case"ワークシート":case"גליונות עבודה":case"Arbeitsblätter":case"Çalışma Sayfaları":case"Feuilles de calcul":case"Fogli di lavoro":case"Folhas de cálculo":case"Planilhas":case"Regneark":case"Hojas de cálculo":case"Werkbladen":r.Worksheets=c,r.SheetNames=i.slice(o,o+c);break;case"Named Ranges":case"Rangos con nombre":case"名前付き一覧":case"Benannte Bereiche":case"Navngivne områder":r.NamedRanges=c,r.DefinedNames=i.slice(o,o+c);break;case"Charts":case"Diagramme":r.Chartsheets=c,r.ChartNames=i.slice(o,o+c)}o+=c}}function kn(e){var t=[],r=sr;return e||(e={}),e.Application="SheetJS",t[t.length]=At,t[t.length]=sr("Properties",null,{xmlns:lr.EXT_PROPS,"xmlns:vt":lr.vt}),Tn.forEach((function(a){if(void 0!==e[a[1]]){var n;switch(a[2]){case"string":n=Wt(String(e[a[1]]));break;case"bool":n=e[a[1]]?"true":"false"}void 0!==n&&(t[t.length]=r(a[0],n))}})),t[t.length]=r("HeadingPairs",r("vt:vector",r("vt:variant","Worksheets")+r("vt:variant",r("vt:i4",String(e.Worksheets))),{size:2,baseType:"variant"})),t[t.length]=r("TitlesOfParts",r("vt:vector",e.SheetNames.map((function(e){return""+Wt(e)+""})).join(""),{size:e.Worksheets,baseType:"lpstr"})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var _n=/<[^<>]+>[^<]*/g;function Sn(e){var t=[At,sr("Properties",null,{xmlns:lr.CUST_PROPS,"xmlns:vt":lr.vt})];if(!e)return t.join("");var r=1;return Fe(e).forEach((function(a){++r,t[t.length]=sr("property",function(e,t){switch(typeof e){case"string":var r=sr("vt:lpwstr",Wt(e));return r=r.replace(/"/g,"_x0022_");case"number":return sr((0|e)==e?"vt:i4":"vt:r8",Wt(String(e)));case"boolean":return sr("vt:bool",e?"true":"false")}if(e instanceof Date)return sr("vt:filetime",ir(e));throw new Error("Unable to serialize "+e)}(e[a]),{fmtid:"{D5CDD505-2E9C-101B-9397-08002B2CF9AE}",pid:r,name:Wt(a)})})),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}var xn,An={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"};function Cn(e,t,r){xn||(xn=Pe(An)),e[t=xn[t]||t]=r}function In(e){var t=e.read_shift(4),r=e.read_shift(4);return new Date(1e3*(r/1e7*Math.pow(2,32)+t/1e7-11644473600)).toISOString().replace(/\.000/,"")}function On(e,t,r){var a=e.l,n=e.read_shift(0,"lpstr-cp");if(r)for(;e.l-a&3;)++e.l;return n}function Rn(e,t,r){var a=e.read_shift(0,"lpwstr");return r&&(e.l+=4-(a.length+1&3)&3),a}function Nn(e,t,r){return 31===t?Rn(e):On(e,0,r)}function Fn(e,t,r){return Nn(e,t,!1===r?0:4)}function Dn(e){var t=e.l,r=Ln(e,ja);return 0==e[e.l]&&0==e[e.l+1]&&e.l-t&2&&(e.l+=2),[r,Ln(e,$a)]}function Pn(e,t){for(var r=e.read_shift(4),a={},n=0;n!=r;++n){var s=e.read_shift(4),i=e.read_shift(4);a[s]=e.read_shift(i,1200===t?"utf16le":"utf8").replace(F,"").replace(D,"!"),1200===t&&i%2&&(e.l+=2)}return 3&e.l&&(e.l=e.l>>3<<2),a}function Mn(e){var t=e.read_shift(4),r=e.slice(e.l,e.l+t);return e.l+=t,(3&t)>0&&(e.l+=4-(3&t)&3),r}function Ln(e,t,r){var a,n=e.read_shift(2),s=r||{};if(e.l+=2,t!==Ga&&n!==t&&-1===Ka.indexOf(t)&&(4126!=(65534&t)||4126!=(65534&n)))throw new Error("Expected type "+t+" saw "+n);switch(t===Ga?n:t){case 2:return a=e.read_shift(2,"i"),s.raw||(e.l+=2),a;case 3:return e.read_shift(4,"i");case 11:return 0!==e.read_shift(4);case 19:return e.read_shift(4);case 30:return On(e,0,4).replace(F,"");case 31:return Rn(e);case 64:return In(e);case 65:return Mn(e);case 71:return function(e){var t={};return t.Size=e.read_shift(4),e.l+=t.Size+3-(t.Size-1)%4,t}(e);case 80:return Fn(e,n,!s.raw).replace(F,"");case 81:return function(e,t){if(!t)throw new Error("VtUnalignedString must have positive length");return Nn(e,t,0)}(e,n).replace(F,"");case 4108:return function(e){for(var t=e.read_shift(4),r=[],a=0;a0&&(r%=Math.pow(2,32),a+=n);var s=Kr(8);return s.write_shift(4,r),s.write_shift(4,a),s}(t);break;case 31:case 80:for((a=Kr(4+2*(t.length+1)+(t.length%2?0:2))).write_shift(4,t.length+1),a.write_shift(0,t,"dbcs");a.l!=a.length;)a.write_shift(1,0);break;default:throw new Error("TypedPropertyValue unrecognized type "+e+" "+t)}return N([r,a])}function Bn(e,t){var r=e.l,a=e.read_shift(4),n=e.read_shift(4),s=[],i=0,o=0,c=-1,l={};for(i=0;i!=n;++i){var h=e.read_shift(4),u=e.read_shift(4);s[i]=[h,u+r]}s.sort((function(e,t){return e[1]-t[1]}));var d={};for(i=0;i!=n;++i){if(e.l!==s[i][1]){var p=!0;if(i>0&&t)switch(t[s[i-1][0]].t){case 2:e.l+2===s[i][1]&&(e.l+=2,p=!1);break;case 80:case 4108:e.l<=s[i][1]&&(e.l=s[i][1],p=!1)}if((!t||0==i)&&e.l<=s[i][1]&&(p=!1,e.l=s[i][1]),p)throw new Error("Read Error: Expected address "+s[i][1]+" at "+e.l+" :"+i)}if(t){if(0==s[i][0]&&s.length>i+1&&s[i][1]==s[i+1][1])continue;var m=t[s[i][0]];if(d[m.n]=Ln(e,m.t,{raw:!0}),"version"===m.p&&(d[m.n]=String(d[m.n]>>16)+"."+("0000"+String(65535&d[m.n])).slice(-4)),"CodePage"==m.n)switch(d[m.n]){case 0:d[m.n]=1252;case 874:case 932:case 936:case 949:case 950:case 1250:case 1251:case 1253:case 1254:case 1255:case 1256:case 1257:case 1258:case 1e4:case 1200:case 1201:case 1252:case 65e3:case-536:case 65001:case-535:f(o=d[m.n]>>>0&65535);break;default:throw new Error("Unsupported CodePage: "+d[m.n])}}else if(1===s[i][0]){if(o=d.CodePage=Ln(e,Va),f(o),-1!==c){var v=e.l;e.l=s[c][1],l=Pn(e,o),e.l=v}}else if(0===s[i][0]){if(0===o){c=i,e.l=s[i+1][1];continue}l=Pn(e,o)}else{var g,b=l[s[i][0]];switch(e[e.l]){case 65:e.l+=4,g=Mn(e);break;case 30:case 31:e.l+=4,g=Fn(e,e[e.l-4]).replace(/(^|[^\u0000])\u0000+$/,"$1");break;case 3:e.l+=4,g=e.read_shift(4,"i");break;case 19:e.l+=4,g=e.read_shift(4);break;case 5:e.l+=4,g=e.read_shift(8,"f");break;case 11:e.l+=4,g=Xn(e,4);break;case 64:e.l+=4,g=Xe(In(e));break;default:throw new Error("unparsed value: "+e[e.l])}d[b]=g}}return e.l=r+a,d}var Wn=["CodePage","Thumbnail","_PID_LINKBASE","_PID_HLINKS","SystemIdentifier","FMTID"];function zn(e){switch(typeof e){case"boolean":return 11;case"number":return(0|e)==e?3:5;case"string":return 31;case"object":if(e instanceof Date)return 64}return-1}function Hn(e,t,r){var a=Kr(8),n=[],s=[],i=8,o=0,c=Kr(8),l=Kr(8);if(c.write_shift(4,2),c.write_shift(4,1200),l.write_shift(4,1),s.push(c),n.push(l),i+=8+c.length,!t){(l=Kr(8)).write_shift(4,0),n.unshift(l);var f=[Kr(4)];for(f[0].write_shift(4,e.length),o=0;o-1||yn.indexOf(e[o][0])>-1)&&null!=e[o][1]){var u=e[o][1],d=0;if(t){var p=r[d=+t[e[o][0]]];if("version"==p.p&&"string"==typeof u){var m=u.split(".");u=(+m[0]<<16)+(+m[1]||0)}c=Un(p.t,u)}else{var v=zn(u);-1==v&&(v=31,u=String(u)),c=Un(v,u)}s.push(c),(l=Kr(8)).write_shift(4,t?d:2+o),n.push(l),i+=8+c.length}var g=8*(s.length+1);for(o=0;o=12?2:1),n="sbcs-cont",i=s;r&&r.biff>=8&&(s=1200),r&&8!=r.biff?12==r.biff&&(n="wstr"):e.read_shift(1)&&(n="dbcs-cont"),r.biff>=2&&r.biff<=5&&(n="cpstr");var o=a?e.read_shift(a,n):"";return s=i,o}function es(e){var t=s;s=1200;var r,a=e.read_shift(2),n=e.read_shift(1),i=4&n,o=8&n,c=1+(1&n),l=0,f={};o&&(l=e.read_shift(2)),i&&(r=e.read_shift(4));var h=2==c?"dbcs-cont":"sbcs-cont",u=0===a?"":e.read_shift(a,h);return o&&(e.l+=4*l),i&&(e.l+=r),f.t=u,o||(f.raw=""+f.t+"",f.r=f.t),s=t,f}function ts(e){var t=e.t||"",r=Kr(3);r.write_shift(2,t.length),r.write_shift(1,1);var a=Kr(2*t.length);return a.write_shift(2*t.length,t,"utf16le"),N([r,a])}function rs(e,t,r){if(r){if(r.biff>=2&&r.biff<=5)return e.read_shift(t,"cpstr");if(r.biff>=12)return e.read_shift(t,"dbcs-cont")}return 0===e.read_shift(1)?e.read_shift(t,"sbcs-cont"):e.read_shift(t,"dbcs-cont")}function as(e,t,r){var a=e.read_shift(r&&2==r.biff?1:2);return 0===a?(e.l++,""):rs(e,a,r)}function ns(e,t,r){if(r.biff>5)return as(e,0,r);var a=e.read_shift(1);return 0===a?(e.l++,""):e.read_shift(a,r.biff<=4||!e.lens?"cpstr":"sbcs-cont")}function ss(e,t,r){return r||(r=Kr(3+2*e.length)),r.write_shift(2,e.length),r.write_shift(1,1),r.write_shift(31,e,"utf16le"),r}function is(e){var t=e.read_shift(4);return t>0?e.read_shift(t,"utf16le").replace(F,""):""}function os(e,t){t||(t=Kr(6+2*e.length)),t.write_shift(4,1+e.length);for(var r=0;r-1?31:23;switch(a.charAt(0)){case"#":s=28;break;case".":s&=-3}t.write_shift(4,2),t.write_shift(4,s);var i=[8,6815827,6619237,4849780,83];for(r=0;r-1?a.slice(0,n):a;for(t.write_shift(4,2*(o.length+1)),r=0;r-1?a.slice(n+1):"",t)}else{for(i="03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46".split(" "),r=0;r8?4:2;return[e.read_shift(a),e.read_shift(a,"i"),e.read_shift(a,"i")]}function ps(e){return[e.read_shift(2),Da(e)]}function ms(e){var t=e.read_shift(2),r=e.read_shift(2);return{s:{c:e.read_shift(2),r:t},e:{c:e.read_shift(2),r:r}}}function vs(e,t){return t||(t=Kr(8)),t.write_shift(2,e.s.r),t.write_shift(2,e.e.r),t.write_shift(2,e.s.c),t.write_shift(2,e.e.c),t}function gs(e){var t=e.read_shift(2),r=e.read_shift(2);return{s:{c:e.read_shift(1),r:t},e:{c:e.read_shift(1),r:r}}}var bs=gs;function ws(e){e.l+=4;var t=e.read_shift(2),r=e.read_shift(2),a=e.read_shift(2);return e.l+=12,[r,t,a]}function Ts(e){e.l+=2,e.l+=e.read_shift(2)}var ys={0:Ts,4:Ts,5:Ts,6:Ts,7:function(e){return e.l+=4,e.cf=e.read_shift(2),{}},8:Ts,9:Ts,10:Ts,11:Ts,12:Ts,13:function(e){var t={};return e.l+=4,e.l+=16,t.fSharedNote=e.read_shift(2),e.l+=4,t},14:Ts,15:Ts,16:Ts,17:Ts,18:Ts,19:Ts,20:Ts,21:ws};function Es(e,t){var r={BIFFVer:0,dt:0};switch(r.BIFFVer=e.read_shift(2),(t-=2)>=2&&(r.dt=e.read_shift(2),e.l-=2),r.BIFFVer){case 1536:case 1280:case 1024:case 768:case 512:case 2:case 7:break;default:if(t>6)throw new Error("Unexpected BIFF Ver "+r.BIFFVer)}return e.read_shift(t),r}function ks(e,t,r){var a=1536,n=16;switch(r.bookType){case"biff8":case"xla":break;case"biff5":a=1280,n=8;break;case"biff4":a=4,n=6;break;case"biff3":a=3,n=6;break;case"biff2":a=2,n=4;break;default:throw new Error("unsupported BIFF version")}var s=Kr(n);return s.write_shift(2,a),s.write_shift(2,t),n>4&&s.write_shift(2,29282),n>6&&s.write_shift(2,1997),n>8&&(s.write_shift(2,49161),s.write_shift(2,1),s.write_shift(2,1798),s.write_shift(2,0)),s}function _s(e,t){var r=!t||t.biff>=8?2:1,a=Kr(8+r*e.name.length);a.write_shift(4,e.pos),a.write_shift(1,e.hs||0),a.write_shift(1,e.dt),a.write_shift(1,e.name.length),t.biff>=8&&a.write_shift(1,1),a.write_shift(r*e.name.length,e.name,t.biff<8?"sbcs":"utf16le");var n=a.slice(0,a.l);return n.l=a.l,n}function Ss(e,t,r){var a=0;r&&2==r.biff||(a=e.read_shift(2));var n=e.read_shift(2);return r&&2==r.biff&&(a=1-(n>>15),n&=32767),[{Unsynced:1&a,DyZero:(2&a)>>1,ExAsc:(4&a)>>2,ExDsc:(8&a)>>3},n]}function xs(e,t,r,a){var n=r&&5==r.biff;a||(a=Kr(n?3+t.length:5+2*t.length)),a.write_shift(2,e),a.write_shift(n?1:2,t.length),n||a.write_shift(1,1),a.write_shift((n?1:2)*t.length,t,n?"sbcs":"utf16le");var s=a.length>a.l?a.slice(0,a.l):a;return null==s.l&&(s.l=s.length),s}var As=ns;function Cs(e,t,r){var a=e.l+t,n=8!=r.biff&&r.biff?2:4,s=e.read_shift(n),i=e.read_shift(n),o=e.read_shift(2),c=e.read_shift(2);return e.l=a,{s:{r:s,c:o},e:{r:i,c:c}}}function Is(e,t,r,a){var n=r&&5==r.biff;a||(a=Kr(n?16:20)),a.write_shift(2,0),e.style?(a.write_shift(2,e.numFmtId||0),a.write_shift(2,65524)):(a.write_shift(2,e.numFmtId||0),a.write_shift(2,t<<4));var s=0;return e.numFmtId>0&&n&&(s|=1024),a.write_shift(4,s),a.write_shift(4,0),n||a.write_shift(4,0),a.write_shift(2,0),a}function Os(e){var t=Kr(12);return t.l++,t.write_shift(1,e.numFmtId),t.l+=10,t}var Rs=Os;function Ns(e,t,r,a,n,s){var i=Kr(8);return us(e,t,a,i),qn(r,s,i),i}var Fs=function(e,t,r){return 0===t?"":ns(e,0,r)};function Ds(e,t,r){var a,n=e.read_shift(2),s={fBuiltIn:1&n,fWantAdvise:n>>>1&1,fWantPict:n>>>2&1,fOle:n>>>3&1,fOleLink:n>>>4&1,cf:n>>>5&1023,fIcon:n>>>15&1};return 14849===r.sbcch&&(a=function(e,t,r){e.l+=4,t-=4;var a=e.l+t,n=Qn(e,0,r),s=e.read_shift(2);if(s!==(a-=e.l))throw new Error("Malformed AddinUdf: padding = "+a+" != "+s);return e.l+=s,n}(e,t-2,r)),s.body=a||e.read_shift(t-2),"string"==typeof a&&(s.Name=a),s}function Ps(e,t,r){var a=e.l+t,n=e.read_shift(2),s=e.read_shift(1),i=e.read_shift(1),o=e.read_shift(r&&2==r.biff?1:2),c=0;(!r||r.biff>=5)&&(5!=r.biff&&(e.l+=2),c=e.read_shift(2),5==r.biff&&(e.l+=2),e.l+=4);var l=rs(e,i,r);32&n&&(l=an[l.charCodeAt(0)]);var f=a-e.l;r&&2==r.biff&&--f;var h=a!=e.l&&0!==o&&f>0?function(e,t,r,a){var n,s=e.l+t,i=Mo(e,a,r);return s!==e.l&&(n=Po(e,s-e.l,i,r)),[i,n]}(e,f,r,o):[];return{chKey:s,Name:l,itab:c,rgce:h}}function Ms(e,t,r){if(r.biff<8)return Ls(e,0,r);if(!(r.biff>8)&&t==e[e.l]+(3==e[e.l+1]?1:0)+1)return Ls(e,0,r);for(var a=[],n=e.l+t,s=e.read_shift(r.biff>8?4:2);0!=s--;)a.push(ds(e,r.biff,r));if(e.l!=n)throw new Error("Bad ExternSheet: "+e.l+" != "+n);return a}function Ls(e,t,r){3==e[e.l+1]&&e[e.l]++;var a=Qn(e,0,r);return 3==a.charCodeAt(0)?a.slice(1):a}function Us(e,t,r){var a=bs(e,6);switch(r.biff){case 2:e.l++,t-=7;break;case 3:case 4:e.l+=2,t-=8;break;default:e.l+=6,t-=12}return[a,Ho(e,t,r)]}function Bs(e,t,r,a){var n=Kr(6+(a||e.length));return n.write_shift(2,t),n.write_shift(2,r),n.write_shift(2,a||e.length),n.write_shift(e.length,e,"sbcs"),n}var Ws={8:function(e,t){var r=e.l+t;e.l+=10;var a=e.read_shift(2);e.l+=4,e.l+=2,e.l+=2,e.l+=2,e.l+=4;var n=e.read_shift(1);return e.l+=n,e.l=r,{fmt:a}}};function zs(e){var t=Kr(24),r=ia(e[0]);t.write_shift(2,r.r),t.write_shift(2,r.r),t.write_shift(2,r.c),t.write_shift(2,r.c);for(var a="d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b".split(" "),n=0;n<16;++n)t.write_shift(1,parseInt(a[n],16));return N([t,cs(e[1])])}function Hs(e){var t=e[1].Tooltip,r=Kr(10+2*(t.length+1));r.write_shift(2,2048);var a=ia(e[0]);r.write_shift(2,a.r),r.write_shift(2,a.r),r.write_shift(2,a.c),r.write_shift(2,a.c);for(var n=0;n=12?4:2,n=e.read_shift(a),s=e.read_shift(a),i=e.read_shift(a),o=e.read_shift(a),c=e.read_shift(2);2==a&&(e.l+=2);var l={s:n,e:s,w:i,ixfe:o,flags:c};return(r.biff>=5||!r.biff)&&(l.level=c>>8&7),l}var $s=hs,Gs=Zn,Xs=as;function js(e,t,r,a,n){return e||(e=Kr(7)),e.write_shift(2,t),e.write_shift(2,r),e.write_shift(1,a||0),e.write_shift(1,n||0),e.write_shift(1,0),e}var Ks=[2,3,48,49,131,139,140,245],Ys=function(){var e={1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127,8:865,9:437,10:850,11:437,13:437,14:850,15:437,16:850,17:437,18:850,19:932,20:850,21:437,22:850,23:865,24:437,25:437,26:850,27:437,28:863,29:850,31:852,34:852,35:852,36:860,37:850,38:866,55:850,64:852,77:936,78:949,79:950,80:874,87:1252,88:1252,89:1252,108:863,134:737,135:852,136:857,204:1257,255:16969},t=Pe({1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127});function r(t,r){var n=r||{};n.dateNF||(n.dateNF="yyyymmdd");var s=va(function(t,r){var n=[],s=x(1);switch(r.type){case"base64":s=C(E(t));break;case"binary":s=C(t);break;case"buffer":case"array":s=t}Xr(s,0);var i=s.read_shift(1),o=!!(136&i),c=!1,l=!1;switch(i){case 2:case 3:case 131:case 139:case 245:break;case 48:case 49:c=!0,o=!0;break;case 140:l=!0;break;default:throw new Error("DBF Unsupported Version: "+i.toString(16))}var f=0,h=521;2==i&&(f=s.read_shift(2)),s.l+=3,2!=i&&(f=s.read_shift(4)),f>1048576&&(f=1e6),2!=i&&(h=s.read_shift(2));var u=s.read_shift(2),d=r.codepage||1252;2!=i&&(s.l+=16,s.read_shift(1),0!==s[s.l]&&(d=e[s[s.l]]),s.l+=1,s.l+=2),l&&(s.l+=36);for(var p=[],m={},v=Math.min(s.length,2==i?521:h-10-(c?264:0)),g=l?32:11;s.l0;)if(42!==s[s.l])for(++s.l,n[++b]=[],w=0,w=0;w!=p.length;++w){var T=s.slice(s.l,s.l+p[w].len);s.l+=p[w].len,Xr(T,0);var y=void 0!==a?a.utils.decode(d,T):O(T);switch(p[w].type){case"C":y.trim().length&&(n[b][w]=y.replace(/([^\s])\s+$/,"$1"));break;case"D":8===y.length?(n[b][w]=new Date(Date.UTC(+y.slice(0,4),+y.slice(4,6)-1,+y.slice(6,8),0,0,0,0)),r&&r.UTC||(n[b][w]=nt(n[b][w]))):n[b][w]=y;break;case"F":n[b][w]=parseFloat(y.trim());break;case"+":case"I":n[b][w]=l?2147483648^T.read_shift(-4,"i"):T.read_shift(4,"i");break;case"L":switch(y.trim().toUpperCase()){case"Y":case"T":n[b][w]=!0;break;case"N":case"F":n[b][w]=!1;break;case"":case"\0":case"?":break;default:throw new Error("DBF Unrecognized L:|"+y+"|")}break;case"M":if(!o)throw new Error("DBF Unexpected MEMO for type "+i.toString(16));n[b][w]="##MEMO##"+(l?parseInt(y.trim(),10):T.read_shift(4));break;case"N":(y=y.replace(/\u0000/g,"").trim())&&"."!=y&&(n[b][w]=+y||0);break;case"@":n[b][w]=new Date(T.read_shift(-8,"f")-621356832e5);break;case"T":var k=T.read_shift(4),_=T.read_shift(4);if(0==k&&0==_)break;n[b][w]=new Date(864e5*(k-2440588)+_),r&&r.UTC||(n[b][w]=nt(n[b][w]));break;case"Y":n[b][w]=T.read_shift(4,"i")/1e4+T.read_shift(4,"i")/1e4*Math.pow(2,32);break;case"O":n[b][w]=-T.read_shift(-8,"f");break;case"B":if(c&&8==p[w].len){n[b][w]=T.read_shift(8,"f");break}case"G":case"P":T.l+=p[w].len;break;case"0":if("_NullFlags"===p[w].name)break;default:throw new Error("DBF Unsupported data type "+p[w].type)}}else s.l+=u;if(2!=i&&s.l=0&&f(+c.codepage),"string"==c.type)throw new Error("Cannot write DBF to JS string");var h=Zr(),u=hh(r,{header:1,raw:!0,cellDates:!0}),d=u[0],p=u.slice(1),m=r["!cols"]||[],v=0,g=0,b=0,w=1;for(v=0;v250&&(x=250),"C"==(S=((m[v]||{}).DBF||{}).type)&&m[v].DBF.len>x&&(x=m[v].DBF.len),"B"==_&&"N"==S&&(_="N",k[v]=m[v].DBF.dec,x=m[v].DBF.len),E[v]="C"==_||"N"==S?x:n[_]||0,w+=E[v],y[v]=_}else y[v]="?"}var C=h.next(32);for(C.write_shift(4,318902576),C.write_shift(4,p.length),C.write_shift(2,296+32*b),C.write_shift(2,w),v=0;v<4;++v)C.write_shift(4,0);var I=+t[s]||3;for(C.write_shift(4,0|I<<8),e[I]!=+c.codepage&&(c.codepage&&console.error("DBF Unsupported codepage "+s+", using 1252"),s=1252),v=0,g=0;vE[g]&&(D=D.slice(0,E[g])),b=0;b":190,"?":191,"{":223},t=new RegExp("N("+Fe(e).join("|").replace(/\|\|\|/,"|\\||").replace(/([?()+])/g,"\\$1").replace("{","\\{")+"|\\|)","gm");try{t=new RegExp("N("+Fe(e).join("|").replace(/\|\|\|/,"|\\||").replace(/([?()+])/g,"\\$1")+"|\\|)","gm")}catch(e){}var r=function(t,r){var a=e[r];return"number"==typeof a?g(a):a},n=function(e,t,r){var a=t.charCodeAt(0)-32<<4|r.charCodeAt(0)-48;return 59==a?e:g(a)};e["|"]=254;function s(e,s){var i,o=e.split(/[\n\r]+/),c=-1,l=-1,h=0,u=0,d=[],p=[],m=null,v={},g=[],b=[],w=[],T=0,y={Workbook:{WBProps:{},Names:[]}};for(+s.codepage>=0&&f(+s.codepage);h!==o.length;++h){T=0;var E,k=o[h].trim().replace(/\x1B([\x20-\x2F])([\x30-\x3F])/g,n).replace(t,r),_=k.replace(/;;/g,"\0").split(";").map((function(e){return e.replace(/\u0000/g,";")})),S=_[0];if(k.length>0)switch(S){case"ID":case"E":case"B":case"W":break;case"O":for(u=1;u<_.length;++u)if("V"===_[u].charAt(0)){var x=parseInt(_[u].slice(1),10);x>=1&&x<=4&&(y.Workbook.WBProps.date1904=!0)}break;case"P":"P"===_[1].charAt(0)&&p.push(k.slice(3).replace(/;;/g,";"));break;case"NN":var A={Sheet:0};for(u=1;u<_.length;++u)switch(_[u].charAt(0)){case"N":A.Name=_[u].slice(1);break;case"E":A.Ref=(s&&s.sheet||"Sheet1")+"!"+lo(_[u].slice(1))}y.Workbook.Names.push(A);break;case"C":var C=!1,I=!1,O=!1,R=!1,N=-1,F=-1,D="",P="z",M="";for(u=1;u<_.length;++u)switch(_[u].charAt(0)){case"A":M=_[u].slice(1);break;case"X":l=parseInt(_[u].slice(1),10)-1,I=!0;break;case"Y":for(c=parseInt(_[u].slice(1),10)-1,I||(l=0),i=d.length;i<=c;++i)d[i]=[];break;case"K":'"'===(E=_[u].slice(1)).charAt(0)?(E=E.slice(1,E.length-1),P="s"):"TRUE"===E||"FALSE"===E?(E="TRUE"===E,P="b"):"#"==E.charAt(0)&&null!=rn[E]?(P="e",E=rn[E]):isNaN(Ze(E))||(E=Ze(E),P="n",null!==m&&me(m)&&s.cellDates&&(P="number"==typeof(E=ze(y.Workbook.WBProps.date1904?E+1462:E))?"n":"d")),void 0!==a&&"string"==typeof E&&"string"!=(s||{}).type&&(s||{}).codepage&&(E=a.utils.decode(s.codepage,E)),C=!0;break;case"E":R=!0,D=lo(_[u].slice(1),{r:c,c:l});break;case"S":O=!0;break;case"G":break;case"R":N=parseInt(_[u].slice(1),10)-1;break;case"C":F=parseInt(_[u].slice(1),10)-1;break;default:if(s&&s.WTF)throw new Error("SYLK bad record "+k)}if(C&&(d[c][l]?(d[c][l].t=P,d[c][l].v=E):d[c][l]={t:P,v:E},m&&(d[c][l].z=m),!1!==s.cellText&&m&&(d[c][l].w=be(d[c][l].z,d[c][l].v,{date1904:y.Workbook.WBProps.date1904})),m=null),O){if(R)throw new Error("SYLK shared formula cannot have own formula");var L=N>-1&&d[N][F];if(!L||!L[1])throw new Error("SYLK shared formula cannot find base");D=uo(L[1],{r:c-N,c:l-F})}D&&(d[c][l]?d[c][l].f=D:d[c][l]={t:"n",f:D}),M&&(d[c][l]||(d[c][l]={t:"z"}),d[c][l].c=[{a:"SheetJSYLK",t:M}]);break;case"F":var U=0;for(u=1;u<_.length;++u)switch(_[u].charAt(0)){case"X":l=parseInt(_[u].slice(1),10)-1,++U;break;case"Y":for(c=parseInt(_[u].slice(1),10)-1,i=d.length;i<=c;++i)d[i]=[];break;case"M":T=parseInt(_[u].slice(1),10)/20;break;case"F":case"G":case"S":case"D":case"N":break;case"P":m=p[parseInt(_[u].slice(1),10)];break;case"W":for(w=_[u].slice(1).split(" "),i=parseInt(w[0],10);i<=parseInt(w[1],10);++i)T=parseInt(w[2],10),b[i-1]=0===T?{hidden:!0}:{wch:T};break;case"C":b[l=parseInt(_[u].slice(1),10)-1]||(b[l]={});break;case"R":g[c=parseInt(_[u].slice(1),10)-1]||(g[c]={}),T>0?(g[c].hpt=T,g[c].hpx=Pi(T)):0===T&&(g[c].hidden=!0);break;default:if(s&&s.WTF)throw new Error("SYLK bad record "+k)}U<1&&(m=null);break;default:if(s&&s.WTF)throw new Error("SYLK bad record "+k)}}return g.length>0&&(v["!rows"]=g),b.length>0&&(v["!cols"]=b),b.forEach((function(e){Ni(e)})),s&&s.sheetRows&&(d=d.slice(0,s.sheetRows)),[d,v,y]}function i(e,t,r,a,n,s){var i="C;Y"+(r+1)+";X"+(a+1)+";K";switch(e.t){case"n":i+=e.v||0,e.f&&!e.F&&(i+=";E"+ho(e.f,{r:r,c:a}));break;case"b":i+=e.v?"TRUE":"FALSE";break;case"e":i+=e.w||tn[e.v]||e.v;break;case"d":i+=We(Xe(e.v,s),s);break;case"s":i+='"'+(null==e.v?"":String(e.v)).replace(/"/g,"").replace(/;/g,";;")+'"'}return i}function o(e,t,r){return"C;Y"+(t+1)+";X"+(r+1)+";A"+e.map((function(e){return e.t})).join("").replace(/\n/g," :").replace(/\r/g," =")}return{to_workbook:function(e,t){var r=function(e,t){switch(t.type){case"base64":return s(E(e),t);case"binary":return s(e,t);case"buffer":return s(k&&Buffer.isBuffer(e)?e.toString("binary"):O(e),t);case"array":return s(je(e),t)}throw new Error("Unrecognized type "+t.type)}(e,t),a=r[0],n=r[1],i=r[2],o=Ke(t);o.date1904=(((i||{}).Workbook||{}).WBProps||{}).date1904;var c=va(a,o);Fe(n).forEach((function(e){c[e]=n[e]}));var l=pa(c,t);return Fe(i).forEach((function(e){l[e]=i[e]})),l.bookType="sylk",l},from_sheet:function(e,t,r){t||(t={}),t._formats=["General"];var a,n=["ID;PSheetJS;N;E"],s=[],c=ua(e["!ref"]||"A1"),l=null!=e["!data"],f="\r\n",h=(((r||{}).Workbook||{}).WBProps||{}).date1904;n.push("P;PGeneral");var u,d=c.s.r,p=c.s.c,m=[];if(e["!ref"])for(d=c.s.r;d<=c.e.r;++d)if(!l||e["!data"][d]){for(m=[],p=c.s.c;p<=c.e.c;++p)(a=l?e["!data"][d][p]:e[sa(p)+aa(d)])&&a.c&&m.push(o(a.c,d,p));m.length&&s.push(m.join(f))}if(e["!ref"])for(d=c.s.r;d<=c.e.r;++d)if(!l||e["!data"][d]){for(m=[],p=c.s.c;p<=c.e.c;++p)if((a=l?e["!data"][d][p]:e[sa(p)+aa(d)])&&(null!=a.v||a.f&&!a.F)){if("General"!=(a.z||("d"==a.t?G[14]:"General"))){var v=t._formats.indexOf(a.z);-1==v&&(t._formats.push(a.z),v=t._formats.length-1,n.push("P;P"+a.z.replace(/;/g,";;"))),m.push("F;P"+v+";Y"+(d+1)+";X"+(p+1))}m.push(i(a,0,d,p,0,h))}s.push(m.join(f))}return n.push("F;P0;DG0G8;M255"),e["!cols"]&&(u=n,e["!cols"].forEach((function(e,t){var r="F;W"+(t+1)+" "+(t+1)+" ";e.hidden?r+="0":("number"!=typeof e.width||e.wpx||(e.wpx=Ai(e.width)),"number"!=typeof e.wpx||e.wch||(e.wch=Ci(e.wpx)),"number"==typeof e.wch&&(r+=Math.round(e.wch)))," "!=r.charAt(r.length-1)&&u.push(r)}))),e["!rows"]&&function(e,t){t.forEach((function(t,r){var a="F;";t.hidden?a+="M0;":t.hpt?a+="M"+20*t.hpt+";":t.hpx&&(a+="M"+20*Di(t.hpx)+";"),a.length>2&&e.push(a+"R"+(r+1))}))}(n,e["!rows"]),e["!ref"]&&n.push("B;Y"+(c.e.r-c.s.r+1)+";X"+(c.e.c-c.s.c+1)+";D"+[c.s.c,c.s.r,c.e.c,c.e.r].join(" ")),n.push("O;L;D;B"+(h?";V4":"")+";K47;G100 0.001"),delete t._formats,n.join(f)+f+s.join(f)+f+"E"+f}}}(),Js=function(){function e(e,t){for(var r=e.split("\n"),a=-1,n=-1,s=0,i=[];s!==r.length;++s)if("BOT"!==r[s].trim()){if(!(a<0)){for(var o=r[s].trim().split(","),c=o[0],l=o[1],f=r[++s]||"";1&(f.match(/["]/g)||[]).length&&s=0?o=l:n=l}})),_e.lastIndex=0,c>=0&&-1==o&&n>=0&&(o=n,n=-1);var l=(""+(a>=0?a:(new Date).getFullYear())).slice(-4)+"-"+("00"+(n>=1?n:1)).slice(-2)+"-"+("00"+(s>=1?s:1)).slice(-2);7==l.length&&(l="0"+l),8==l.length&&(l="20"+l);var f=("00"+(i>=0?i:0)).slice(-2)+":"+("00"+(o>=0?o:0)).slice(-2)+":"+("00"+(c>=0?c:0)).slice(-2);return-1==i&&-1==o&&-1==c?l:-1==a&&-1==n&&-1==s?f:l+"T"+f}(0,r.dateNF,t.match(b)||[]);h=Xe(n),r&&!1===r.UTC&&(h=nt(h))}else r&&!1===r.UTC?h=nt(h):!1!==r.cellText&&r.dateNF&&(a.w=be(a.z,h));r.cellDates?(a.t="d",a.v=h):(a.t="n",a.v=We(h)),r.cellNF||delete a.z}else a.t="s",a.v=t;else a.t="n",a.v=h;if("z"==a.t||(r.dense?(s["!data"][l]||(s["!data"][l]=[]),s["!data"][l][f]=a):s[oa({c:f,r:l})]=a),u=d+1,g=e.charCodeAt(u),i.e.c0&&T(),s["!ref"]=la(i),s}function i(t,r){var n="",i="string"==r.type?[0,0,0,0]:Kf(t,r);switch(r.type){case"base64":n=E(t);break;case"binary":case"string":n=t;break;case"buffer":n=65001==r.codepage?t.toString("utf8"):r.codepage&&void 0!==a?a.utils.decode(r.codepage,t):k&&Buffer.isBuffer(t)?t.toString("binary"):O(t);break;case"array":n=je(t);break;default:throw new Error("Unrecognized type "+r.type)}return 239==i[0]&&187==i[1]&&191==i[2]?n=Zt(n.slice(3)):"string"!=r.type&&"buffer"!=r.type&&65001==r.codepage?n=Zt(n):"binary"==r.type&&void 0!==a&&r.codepage&&(n=a.utils.decode(r.codepage,a.utils.encode(28591,n))),"socialcalc:version:"==n.slice(0,19)?qs.to_sheet("string"==r.type?n:Zt(n),r):function(t,r){return r&&r.PRN?r.FS||"sep="==t.slice(0,4)||t.indexOf("\t")>=0||t.indexOf(",")>=0||t.indexOf(";")>=0?s(t,r):va(function(t,r){var a=r||{},n=[];if(!t||0===t.length)return n;for(var s=t.split(/[\r\n]/),i=s.length-1;i>=0&&0===s[i].length;)--i;for(var o=10,c=0,l=0;l<=i;++l)-1==(c=s[l].indexOf(" "))?c=s[l].length:c++,o=Math.max(o,c);for(l=0;l<=i;++l){n[l]=[];var f=0;for(e(s[l].slice(0,o).trim(),n,l,f,a),f=1;f<=(s[l].length-o)/10+1;++f)e(s[l].slice(o+10*(f-1),o+10*f).trim(),n,l,f,a)}return a.sheetRows&&(n=n.slice(0,a.sheetRows)),n}(t,r),r):s(t,r)}(n,r)}return{to_workbook:function(e,t){return pa(i(e,t),t)},to_sheet:i,from_sheet:function(e){var t=[];if(!e["!ref"])return"";for(var r,a=ua(e["!ref"]),n=null!=e["!data"],s=a.s.r;s<=a.e.r;++s){for(var i=[],o=a.s.c;o<=a.e.c;++o){var c=oa({r:s,c:o});if((r=n?(e["!data"][s]||[])[o]:e[c])&&null!=r.v){for(var l=(r.w||(da(r),r.w)||"").slice(0,10);l.length<10;)l+=" ";i.push(l+(0===o?" ":""))}else i.push(" ")}t.push(i.join(""))}return t.join("\n")}}}(),ei=function(){function e(e,t,r){if(e){Xr(e,e.l||0);for(var a=r.Enum||T;e.l255||i.s.r>999999)break;i.e.cl&&(i.s.c=l),f=m.read_shift(4),i.s.r>f&&(i.s.r=f),f=m.read_shift(4),i.e.rf&&(i.s.r=f),i.e.r0&&o>=0;){if(32&A)switch(31&A){case 2:x={t:"n",v:x.v+O&65535};break;case 3:(x={t:"n",v:x.v+O&65535}).v>32767&&(x.v-=65536);break;case 7:x={t:"s",v:n[c=c+O>>>0]};break;default:throw"Cannot apply delta for QPW cell type "+(31&A)}else switch(31&A){case 1:x={t:"z"};break;case 2:x={t:"n",v:m.read_shift(2)};break;case 7:x={t:"s",v:n[c=m.read_shift(4)-1]};break;default:throw"Cannot apply repeat for QPW cell type "+(31&A)}(r.sheetStubs||"z"!=x.t)&&(null!=a["!data"]?(a["!data"][f]||(a["!data"][f]=[]),a["!data"][f][l]=x):a[S+aa(f)]=x),++f,--o}}break;case 3074:l=m.read_shift(2),f=m.read_shift(4);var N=_(m);null!=a["!data"]?(a["!data"][f]||(a["!data"][f]=[]),a["!data"][f][l]={t:"s",v:N}):a[sa(l)+aa(f)]={t:"s",v:N}}e.l+=p}return h}(r,a);if(0==r[2]&&(8==r[3]||9==r[3])&&r.length>=16&&5==r[14]&&108===r[15])throw new Error("Unsupported Works 3 for Mac file");if(2==r[2])n.Enum=T,e(r,(function(e,r,a){switch(a){case 0:n.vers=e,e>=4096&&(n.qpro=!0);break;case 255:n.vers=e,n.works=!0;break;case 6:d=e;break;case 204:e&&(o=e);break;case 222:o=e;break;case 15:case 51:(!n.qpro&&!n.works||51==a)&&e[1].v.charCodeAt(0)<48&&(e[1].v=e[1].v.slice(1)),(n.works||n.works2)&&(e[1].v=e[1].v.replace(/\r\n/g,"\n"));case 13:case 14:case 16:112==(112&e[2])&&(15&e[2])>1&&(15&e[2])<15&&(e[1].z=n.dateNF||t[(15&e[2])-1]||G[14],n.cellDates&&(e[1].v=ze(e[1].v),e[1].t="number"==typeof e[1].v?"n":"d")),n.qpro&&e[3]>c&&(s["!ref"]=la(d),l[i]=s,f.push(i),s={},n.dense&&(u=s["!data"]=[]),d={s:{r:0,c:0},e:{r:0,c:0}},c=e[3],i=o||"Sheet"+(c+1),o="");var h=n.dense?(u[e[0].r]||[])[e[0].c]:s[oa(e[0])];if(h){h.t=e[1].t,h.v=e[1].v,null!=e[1].z&&(h.z=e[1].z),null!=e[1].f&&(h.f=e[1].f),m=h;break}n.dense?(u[e[0].r]||(u[e[0].r]=[]),u[e[0].r][e[0].c]=e[1]):s[oa(e[0])]=e[1],m=e[1];break;case 21509:n.works2=!0;break;case 21506:5281==e&&(m.z="hh:mm:ss",n.cellDates&&"n"==m.t&&(m.v=ze(m.v),m.t="number"==typeof m.v?"n":"d"))}}),n);else{if(26!=r[2]&&14!=r[2])throw new Error("Unrecognized LOTUS BOF "+r[2]);n.Enum=y,14==r[2]&&(n.qpro=!0,r.l=0),e(r,(function(e,t,r){switch(r){case 204:i=e;break;case 22:e[1].v.charCodeAt(0)<48&&(e[1].v=e[1].v.slice(1)),e[1].v=e[1].v.replace(/\x0F./g,(function(e){return String.fromCharCode(e.charCodeAt(1)-32)})).replace(/\r\n/g,"\n");case 23:case 24:case 25:case 37:case 39:case 40:if(e[3]>c&&(s["!ref"]=la(d),l[i]=s,f.push(i),s={},n.dense&&(u=s["!data"]=[]),d={s:{r:0,c:0},e:{r:0,c:0}},c=e[3],i="Sheet"+(c+1)),p>0&&e[0].r>=p)break;n.dense?(u[e[0].r]||(u[e[0].r]=[]),u[e[0].r][e[0].c]=e[1]):s[oa(e[0])]=e[1],d.e.c=128?95:s)}return a.write_shift(1,0),a}function i(e,t,r){var a=Kr(7);return a.write_shift(1,n(r)),a.write_shift(2,t),a.write_shift(2,e),a.write_shift(2,r.v,"i"),a}function o(e,t,r){var a=Kr(13);return a.write_shift(1,n(r)),a.write_shift(2,t),a.write_shift(2,e),a.write_shift(8,r.v,"f"),a}function c(e,t,r){var a=32768&t;return t=(a?e:0)+((t&=-32769)>=8192?t-16384:t),(a?"":"$")+(r?sa(t):aa(t))}var l={31:["NA",0],33:["ABS",1],34:["TRUNC",1],35:["SQRT",1],36:["LOG",1],37:["LN",1],38:["PI",0],39:["SIN",1],40:["COS",1],41:["TAN",1],42:["ATAN2",2],43:["ATAN",1],44:["ASIN",1],45:["ACOS",1],46:["EXP",1],47:["MOD",2],49:["ISNA",1],50:["ISERR",1],51:["FALSE",0],52:["TRUE",0],53:["RAND",0],54:["DATE",3],63:["ROUND",2],64:["TIME",3],68:["ISNUMBER",1],69:["ISTEXT",1],70:["LEN",1],71:["VALUE",1],73:["MID",3],74:["CHAR",1],80:["SUM",69],81:["AVERAGEA",69],82:["COUNTA",69],83:["MINA",69],84:["MAXA",69],102:["UPPER",1],103:["LOWER",1],107:["PROPER",1],109:["TRIM",1],111:["T",1]},h=["","","","","","","","","","+","-","*","/","^","=","<>","<=",">=","<",">","","","","","&","","","","","","",""];function u(e){var t=[{c:0,r:0},{t:"n",v:0},0];return t[0].r=e.read_shift(2),t[3]=e[e.l++],t[0].c=e[e.l++],t}function d(e,t,r,a){var n=Kr(6+a.length);n.write_shift(2,e),n.write_shift(1,r),n.write_shift(1,t),n.write_shift(1,39);for(var s=0;s=128?95:i)}return n.write_shift(1,0),n}function p(e,t){var r=u(e),a=e.read_shift(4),n=e.read_shift(4),s=e.read_shift(2);if(65535==s)return 0===a&&3221225472===n?(r[1].t="e",r[1].v=15):0===a&&3489660928===n?(r[1].t="e",r[1].v=42):r[1].v=0,r;var i=32768&s;return s=(32767&s)-16446,r[1].v=(1-2*i)*(n*Math.pow(2,s+32)+a*Math.pow(2,s)),r}function m(e,t,r,a){var n=Kr(14);if(n.write_shift(2,e),n.write_shift(1,r),n.write_shift(1,t),0==a)return n.write_shift(4,0),n.write_shift(4,0),n.write_shift(2,65535),n;var s,i=0,o=0,c=0;return a<0&&(i=1,a=-a),o=0|Math.log2(a),0==(2147483648&(c=(a/=Math.pow(2,o-31))>>>0))&&(++o,c=(a/=2)>>>0),a-=c,c|=2147483648,c>>>=0,s=(a*=Math.pow(2,32))>>>0,n.write_shift(4,s),n.write_shift(4,c),o+=16383+(i?32768:0),n.write_shift(2,o),n}function v(e,t){var r=u(e),a=e.read_shift(8,"f");return r[1].v=a,r}function g(e,t){return 0==e[e.l+t-1]?e.read_shift(t,"cstr"):""}function b(e,t){var r=Kr(5+e.length);r.write_shift(2,14e3),r.write_shift(2,t);for(var a=0;a127?95:n}return r[r.l++]=0,r}var T={0:{n:"BOF",f:Kn},1:{n:"EOF"},2:{n:"CALCMODE"},3:{n:"CALCORDER"},4:{n:"SPLIT"},5:{n:"SYNC"},6:{n:"RANGE",f:function(e,t,r){var a={s:{c:0,r:0},e:{c:0,r:0}};return 8==t&&r.qpro?(a.s.c=e.read_shift(1),e.l++,a.s.r=e.read_shift(2),a.e.c=e.read_shift(1),e.l++,a.e.r=e.read_shift(2),a):(a.s.c=e.read_shift(2),a.s.r=e.read_shift(2),12==t&&r.qpro&&(e.l+=2),a.e.c=e.read_shift(2),a.e.r=e.read_shift(2),12==t&&r.qpro&&(e.l+=2),65535==a.s.c&&(a.s.c=a.e.c=a.s.r=a.e.r=0),a)}},7:{n:"WINDOW1"},8:{n:"COLW1"},9:{n:"WINTWO"},10:{n:"COLW2"},11:{n:"NAME"},12:{n:"BLANK"},13:{n:"INTEGER",f:function(e,t,r){var n=a(e,0,r);return n[1].v=e.read_shift(2,"i"),n}},14:{n:"NUMBER",f:function(e,t,r){var n=a(e,0,r);return n[1].v=e.read_shift(8,"f"),n}},15:{n:"LABEL",f:function(e,t,r){var n=e.l+t,s=a(e,0,r);if(s[1].t="s",20768==(65534&r.vers)){e.l++;var i=e.read_shift(1);return s[1].v=e.read_shift(i,"utf8"),s}return r.qpro&&e.l++,s[1].v=e.read_shift(n-e.l,"cstr"),s}},16:{n:"FORMULA",f:function(e,t,r){var n=e.l+t,s=a(e,0,r);if(s[1].v=e.read_shift(8,"f"),r.qpro)e.l=n;else{var i=e.read_shift(2);!function(e,t){Xr(e,0);for(var r=[],a=0,n="",s="",i="",o="";e.lr.length)return void console.error("WK1 bad formula parse 0x"+f.toString(16)+":|"+r.join("|")+"|");var m=r.slice(-a);r.length-=a,r.push(l[f][0]+"("+m.join(",")+")")}}}1==r.length?t[1].f=""+r[0]:console.error("WK1 bad formula parse |"+r.join("|")+"|")}(e.slice(e.l,e.l+i),s),e.l+=i}return s}},24:{n:"TABLE"},25:{n:"ORANGE"},26:{n:"PRANGE"},27:{n:"SRANGE"},28:{n:"FRANGE"},29:{n:"KRANGE1"},32:{n:"HRANGE"},35:{n:"KRANGE2"},36:{n:"PROTEC"},37:{n:"FOOTER"},38:{n:"HEADER"},39:{n:"SETUP"},40:{n:"MARGINS"},41:{n:"LABELFMT"},42:{n:"TITLES"},43:{n:"SHEETJS"},45:{n:"GRAPH"},46:{n:"NGRAPH"},47:{n:"CALCCOUNT"},48:{n:"UNFORMATTED"},49:{n:"CURSORW12"},50:{n:"WINDOW"},51:{n:"STRING",f:function(e,t,r){var n=e.l+t,s=a(e,0,r);if(s[1].t="s",20768==r.vers){var i=e.read_shift(1);return s[1].v=e.read_shift(i,"utf8"),s}return s[1].v=e.read_shift(n-e.l,"cstr"),s}},55:{n:"PASSWORD"},56:{n:"LOCKED"},60:{n:"QUERY"},61:{n:"QUERYNAME"},62:{n:"PRINT"},63:{n:"PRINTNAME"},64:{n:"GRAPH2"},65:{n:"GRAPHNAME"},66:{n:"ZOOM"},67:{n:"SYMSPLIT"},68:{n:"NSROWS"},69:{n:"NSCOLS"},70:{n:"RULER"},71:{n:"NNAME"},72:{n:"ACOMM"},73:{n:"AMACRO"},74:{n:"PARSE"},102:{n:"PRANGES??"},103:{n:"RRANGES??"},104:{n:"FNAME??"},105:{n:"MRANGES??"},204:{n:"SHEETNAMECS",f:g},222:{n:"SHEETNAMELP",f:function(e,t){var r=e[e.l++];r>t-1&&(r=t-1);for(var a="";a.length>1;if(1&r[1].v)switch(7&a){case 0:a=5e3*(a>>3);break;case 1:a=500*(a>>3);break;case 2:a=(a>>3)/20;break;case 3:a=(a>>3)/200;break;case 4:a=(a>>3)/2e3;break;case 5:a=(a>>3)/2e4;break;case 6:a=(a>>3)/16;break;case 7:a=(a>>3)/64}return r[1].v=a,r}},25:{n:"FORMULA19",f:function(e,t){var r=p(e);return e.l+=t-14,r}},26:{n:"FORMULA1A"},27:{n:"XFORMAT",f:function(e,t){for(var r={},a=e.l+t;e.l>6,r}},38:{n:"??"},39:{n:"NUMBER27",f:v},40:{n:"FORMULA28",f:function(e,t){var r=v(e);return e.l+=t-12,r}},142:{n:"??"},147:{n:"??"},150:{n:"??"},151:{n:"??"},152:{n:"??"},153:{n:"??"},154:{n:"??"},155:{n:"??"},156:{n:"??"},163:{n:"??"},174:{n:"??"},175:{n:"??"},176:{n:"??"},177:{n:"??"},184:{n:"??"},185:{n:"??"},186:{n:"??"},187:{n:"??"},188:{n:"??"},195:{n:"??"},201:{n:"??"},204:{n:"SHEETNAMECS",f:g},205:{n:"??"},206:{n:"??"},207:{n:"??"},208:{n:"??"},256:{n:"??"},259:{n:"??"},260:{n:"??"},261:{n:"??"},262:{n:"??"},263:{n:"??"},265:{n:"??"},266:{n:"??"},267:{n:"??"},268:{n:"??"},270:{n:"??"},271:{n:"??"},384:{n:"??"},389:{n:"??"},390:{n:"??"},393:{n:"??"},396:{n:"??"},512:{n:"??"},514:{n:"??"},513:{n:"??"},516:{n:"??"},517:{n:"??"},640:{n:"??"},641:{n:"??"},642:{n:"??"},643:{n:"??"},644:{n:"??"},645:{n:"??"},646:{n:"??"},647:{n:"??"},648:{n:"??"},658:{n:"??"},659:{n:"??"},660:{n:"??"},661:{n:"??"},662:{n:"??"},665:{n:"??"},666:{n:"??"},768:{n:"??"},772:{n:"??"},1537:{n:"SHEETINFOQP",f:function(e,t,r){if(r.qpro&&!(t<21)){var a=e.read_shift(1);return e.l+=17,e.l+=1,e.l+=2,[a,e.read_shift(t-21,"cstr")]}}},1600:{n:"??"},1602:{n:"??"},1793:{n:"??"},1794:{n:"??"},1795:{n:"??"},1796:{n:"??"},1920:{n:"??"},2048:{n:"??"},2049:{n:"??"},2052:{n:"??"},2688:{n:"??"},10998:{n:"??"},12849:{n:"??"},28233:{n:"??"},28484:{n:"??"},65535:{n:""}},k={5:"dd-mmm-yy",6:"dd-mmm",7:"mmm-yy",8:"mm/dd/yy",10:"hh:mm:ss AM/PM",11:"hh:mm AM/PM",14:"dd-mmm-yyyy",15:"mmm-yyyy",34:"0.00",50:"0.00;[Red]0.00",66:"0.00;(0.00)",82:"0.00;[Red](0.00)",162:'"$"#,##0.00;\\("$"#,##0.00\\)',288:"0%",304:"0E+00",320:"# ?/?"};function _(e){var t=e.read_shift(2),r=e.read_shift(1);if(0!=r)throw"unsupported QPW string type "+r.toString(16);return e.read_shift(t,"sbcs-cont")}return{sheet_to_wk1:function(e,t){var r=t||{};if(+r.codepage>=0&&f(+r.codepage),"string"==r.type)throw new Error("Cannot write WK1 to JS string");var a=Zr();if(!e["!ref"])throw new Error("Cannot export empty sheet to WK1");var n,c=ua(e["!ref"]),l=null!=e["!data"],h=[];El(a,0,(1030,(n=Kr(2)).write_shift(2,1030),n)),El(a,6,function(e){var t=Kr(8);return t.write_shift(2,e.s.c),t.write_shift(2,e.s.r),t.write_shift(2,e.e.c),t.write_shift(2,e.e.r),t}(c));for(var u=Math.min(c.e.r,8191),d=c.s.c;d<=c.e.c;++d)h[d]=sa(d);for(var p=c.s.r;p<=u;++p){var m=aa(p);for(d=c.s.c;d<=c.e.c;++d){var v=l?(e["!data"][p]||[])[d]:e[h[d]+m];if(v&&"z"!=v.t)switch(v.t){case"n":(0|v.v)==v.v&&v.v>=-32768&&v.v<=32767?El(a,13,i(p,d,v)):El(a,14,o(p,d,v));break;case"d":var g=We(v.v);(0|g)==g&&g>=-32768&&g<=32767?El(a,13,i(p,d,{t:"n",v:g,z:v.z||G[14]})):El(a,14,o(p,d,{t:"n",v:g,z:v.z||G[14]}));break;default:El(a,15,s(p,d,da(v).slice(0,239)))}}}return El(a,1),a.end()},book_to_wk3:function(e,t){var r=t||{};if(+r.codepage>=0&&f(+r.codepage),"string"==r.type)throw new Error("Cannot write WK3 to JS string");var a=Zr();El(a,0,function(e){var t=Kr(26);t.write_shift(2,4096),t.write_shift(2,4),t.write_shift(4,0);for(var r=0,a=0,n=0,s=0;s8191&&(r=8191),t.write_shift(2,r),t.write_shift(1,n),t.write_shift(1,a),t.write_shift(2,0),t.write_shift(2,0),t.write_shift(1,1),t.write_shift(1,2),t.write_shift(4,0),t.write_shift(4,0),t}(e));for(var n=0,s=0;n":case"":t.shadow=1;break;case"":break;case"":case"":t.outline=1;break;case"":break;case"":case"":t.strike=1;break;case"":break;case"":case"":t.u=1;break;case"":break;case"":case"":t.b=1;break;case"":break;case"":case"":t.i=1;break;case"":break;case"":case"":case"":break;case"":case"":case"":break;case"":case"":case"":case"":case"":case"":case"":case"":break;case"":n=!1;break;default:if(47!==s[0].charCodeAt(1)&&!n)throw new Error("Unrecognized rich format "+s[0])}}return t}(a[1])),r}var t=/<(?:\w+:)?r>/g,r=/<\/(?:\w+:)?r>/;return function(a){return a.replace(t,"").split(r).map(e).filter((function(e){return e.v}))}}(),ri=function(){var e=/(\r\n|\n)/g;function t(t){var r=[[],t.v,[]];return t.v?(t.s&&function(e,t,r){var a=[];e.u&&a.push("text-decoration: underline;"),e.uval&&a.push("text-underline-style:"+e.uval+";"),e.sz&&a.push("font-size:"+e.sz+"pt;"),e.outline&&a.push("text-effect: outline;"),e.shadow&&a.push("text-shadow: auto;"),t.push(''),e.b&&(t.push(""),r.push("")),e.i&&(t.push(""),r.push("")),e.strike&&(t.push(""),r.push(""));var n=e.valign||"";"superscript"==n||"super"==n?n="sup":"subscript"==n&&(n="sub"),""!=n&&(t.push("<"+n+">"),r.push("")),r.push("")}(t.s,r[0],r[2]),r[0].join("")+r[1].replace(e,"
")+r[2].join("")):""}return function(e){return e.map(t).join("")}}(),ai=/<(?:\w+:)?t\b[^<>]*>([^<]*)<\/(?:\w+:)?t>/g,ni=/<(?:\w+:)?r\b[^<>]*>/;function si(e,t){var r=!t||t.cellHTML,a={};return e?(e.match(/^\s*<(?:\w+:)?t[^>]*>/)?(a.t=Lt(Zt(e.slice(e.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]||""),!0),a.r=Zt(e),r&&(a.h=Vt(a.t))):e.match(ni)&&(a.r=Zt(e),a.t=Lt(Zt((dt(e,"rPh").match(ai)||[]).join("").replace(Ot,"")),!0),r&&(a.h=ri(ti(a.r)))),a):{t:""}}var ii=/<(?:\w+:)?(?:si|sstItem)>/g,oi=/<\/(?:\w+:)?(?:si|sstItem)>/,ci=/^\s|\s$|[\t\n\r]/,li=function(e,t){var r=!1;return null==t&&(r=!0,t=Kr(15+4*e.t.length)),t.write_shift(1,0),wa(e.t,t),r?t.slice(0,t.l):t};function fi(e){if(void 0!==a)return a.utils.encode(i,e);for(var t=[],r=e.split(""),n=0;n=4&&(e.l+=t-4),r}function ui(e){for(var t=e.read_shift(4),r=e.l+t-4,a={},n=e.read_shift(4),s=[];n-- >0;)s.push({t:e.read_shift(4),v:e.read_shift(0,"lpp4")});if(a.name=e.read_shift(0,"lpp4"),a.comps=s,e.l!=r)throw new Error("Bad DataSpaceMapEntry: "+e.l+" != "+r);return a}function di(e,t){var r=e.l+t,a={};a.Flags=63&e.read_shift(4),e.l+=4,a.AlgID=e.read_shift(4);var n=!1;switch(a.AlgID){case 26126:case 26127:case 26128:n=36==a.Flags;break;case 26625:n=4==a.Flags;break;case 0:n=16==a.Flags||4==a.Flags||36==a.Flags;break;default:throw"Unrecognized encryption algorithm: "+a.AlgID}if(!n)throw new Error("Encryption Flags/AlgID mismatch");return a.AlgIDHash=e.read_shift(4),a.KeySize=e.read_shift(4),a.ProviderType=e.read_shift(4),e.l+=8,a.CSPName=e.read_shift(r-e.l>>1,"utf16le"),e.l=r,a}function pi(e,t){var r={},a=e.l+t;return e.l+=4,r.Salt=e.slice(e.l,e.l+16),e.l+=16,r.Verifier=e.slice(e.l,e.l+16),e.l+=16,e.read_shift(4),r.VerifierHash=e.slice(e.l,a),e.l=a,r}function mi(e){if(36!=(63&e.read_shift(4)))throw new Error("EncryptionInfo mismatch");var t=e.read_shift(4);return{t:"Std",h:di(e,t),v:pi(e,e.length-e.l)}}function vi(){throw new Error("File is password-protected: ECMA-376 Extensible")}function gi(e){var t=["saltSize","blockSize","keyBits","hashSize","cipherAlgorithm","cipherChaining","hashAlgorithm","saltValue"];e.l+=4;var r=e.read_shift(e.length-e.l,"utf8"),a={};return r.replace(Ot,(function(e){var r=Ft(e);switch(Dt(r[0])){case"":case"":case"":break;case"":case"=0;--r)a=((0==(16384&a)?0:1)|a<<1&32767)^t[r];return 52811^a}var wi=function(){var e=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0],t=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163],r=[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],a=function(e,t){return 255&((r=e^t)/2|128*r);var r};return function(n){for(var s,i,o,c=fi(n),l=function(e){for(var a=t[e.length-1],n=104,s=e.length-1;s>=0;--s)for(var i=e[s],o=0;7!=o;++o)64&i&&(a^=r[n]),i*=2,--n;return a}(c),f=c.length,h=x(16),u=0;16!=u;++u)h[u]=0;for(1==(1&f)&&(s=l>>8,h[f]=a(e[0],s),--f,s=255&l,i=c[c.length-1],h[f]=a(i,s));f>0;)s=l>>8,h[--f]=a(c[f],s),s=255&l,h[--f]=a(c[f],s);for(f=15,o=15-c.length;o>0;)s=l>>8,h[f]=a(e[o],s),--o,s=255&l,h[--f]=a(c[f],s),--f,--o;return h}}();function Ti(e,t){var r=t||{},a={},n=r.dense;n&&(a["!data"]=[]);var s=ot(e,"\\trowd","\\row");if(!s)throw new Error("RTF missing table");var i={s:{c:0,r:0},e:{c:0,r:s.length-1}},o=[];return s.forEach((function(e,t){n&&(o=a["!data"][t]=[]);for(var s,c=/\\[\w\-]+\b/g,l=0,f=-1,h=[];null!=(s=c.exec(e));){var u=e.slice(l,c.lastIndex-s[0].length);switch(32==u.charCodeAt(0)&&(u=u.slice(1)),u.length&&h.push(u),s[0]){case"\\cell":if(++f,h.length){var d={v:h.join(""),t:"s"};"TRUE"==d.v||"FALSE"==d.v?(d.v="TRUE"==d.v,d.t="b"):isNaN(Ze(d.v))||(d.t="n",!1!==r.cellText&&(d.w=d.v),d.v=Ze(d.v)),n?o[f]=d:a[oa({r:t,c:f})]=d}h=[];break;case"\\par":h.push("\n")}l=c.lastIndex}f>i.e.c&&(i.e.c=f)})),a["!ref"]=la(i),a}function yi(e){for(var t=0,r=1;3!=t;++t)r=256*r+(e[t]>255?255:e[t]<0?0:e[t]);return r.toString(16).toUpperCase().slice(1)}function Ei(e,t){if(0===t)return e;var r,a,n=function(e){var t=e[0]/255,r=e[1]/255,a=e[2]/255,n=Math.max(t,r,a),s=Math.min(t,r,a),i=n-s;if(0===i)return[0,0,t];var o,c=0,l=n+s;switch(o=i/(l>1?2-l:l),n){case t:c=((r-a)/i+6)%6;break;case r:c=(a-t)/i+2;break;case a:c=(t-r)/i+4}return[c/6,o,l/2]}((a=(r=e).slice("#"===r[0]?1:0).slice(0,6),[parseInt(a.slice(0,2),16),parseInt(a.slice(2,4),16),parseInt(a.slice(4,6),16)]));return n[2]=t<0?n[2]*(1+t):1-(1-n[2])*(1-t),yi(function(e){var t,r=e[0],a=e[1],n=e[2],s=2*a*(n<.5?n:1-n),i=n-s/2,o=[i,i,i],c=6*r;if(0!==a)switch(0|c){case 0:case 6:t=s*c,o[0]+=s,o[1]+=t;break;case 1:t=s*(2-c),o[0]+=t,o[1]+=s;break;case 2:t=s*(c-2),o[1]+=s,o[2]+=t;break;case 3:t=s*(4-c),o[1]+=t,o[2]+=s;break;case 4:t=s*(c-4),o[2]+=s,o[0]+=t;break;case 5:t=s*(6-c),o[2]+=t,o[0]+=s}for(var l=0;3!=l;++l)o[l]=Math.round(255*o[l]);return o}(n))}var ki=6,_i=15,Si=1,xi=ki;function Ai(e){return Math.floor((e+Math.round(128/xi)/256)*xi)}function Ci(e){return Math.floor((e-5)/xi*100+.5)/100}function Ii(e){return Math.round((e*xi+5)/xi*256)/256}function Oi(e){return Ii(Ci(Ai(e)))}function Ri(e){var t=Math.abs(e-Oi(e)),r=xi;if(t>.005)for(xi=Si;xi<_i;++xi)Math.abs(e-Oi(e))<=t&&(t=Math.abs(e-Oi(e)),r=xi);xi=r}function Ni(e){e.width?(e.wpx=Ai(e.width),e.wch=Ci(e.wpx),e.MDW=xi):e.wpx?(e.wch=Ci(e.wpx),e.width=Ii(e.wch),e.MDW=xi):"number"==typeof e.wch&&(e.width=Ii(e.wch),e.wpx=Ai(e.width),e.MDW=xi),e.customWidth&&delete e.customWidth}var Fi=96;function Di(e){return 96*e/Fi}function Pi(e){return e*Fi/96}var Mi={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"},Li=["numFmtId","fillId","fontId","borderId","xfId"],Ui=["applyAlignment","applyBorder","applyFill","applyFont","applyNumberFormat","applyProtection","pivotButton","quotePrefix"],Bi=function(){return function(e,t,r){var a,n={};return e?(e=it(ct(e,"\x3c!--","--\x3e")),(a=ht(e,"numFmts"))&&function(e,t,r){t.NumberFmt=[];for(var a=Fe(G),n=0;n":case"":case"":case"":break;case"0){if(c>392){for(c=392;c>60&&null!=t.NumberFmt[c];--c);t.NumberFmt[c]=o}xe(o,c)}break;default:if(r.WTF)throw new Error("unrecognized "+i[0]+" in numFmts")}}}(a[0],n,r),(a=ht(e,"fonts"))&&function(e,t,r,a){t.Fonts=[];var n={},s=!1;(e.match(Ot)||[]).forEach((function(e){var i=Ft(e);switch(Dt(i[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":break;case"":case"":t.Fonts.push(n),n={};break;case"":n.bold=1;break;case"":n.italic=1;break;case"":n.underline=1;break;case"":n.strike=1;break;case"":n.outline=1;break;case"":n.shadow=1;break;case"":n.condense=1;break;case"":n.extend=1;break;case"":case"":s=!1;break;default:if(a&&a.WTF&&!s)throw new Error("unrecognized "+i[0]+" in fonts")}}))}(a[0],n,t,r),(a=ht(e,"fills"))&&function(e,t,r,a){t.Fills=[];var n={},s=!1;(e.match(Ot)||[]).forEach((function(e){var r=Ft(e);switch(Dt(r[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"
":case"":case"":break;case"":case"":n={},t.Fills.push(n);break;case"":t.Fills.push(n),n={};break;case"":r.patternType&&(n.patternType=r.patternType);break;case"":s=!1;break;default:if(a&&a.WTF&&!s)throw new Error("unrecognized "+r[0]+" in fills")}}))}(a[0],n,0,r),(a=ht(e,"borders"))&&function(e,t,r,a){t.Borders=[];var n={},s=!1;(e.match(Ot)||[]).forEach((function(e){var r=Ft(e);switch(Dt(r[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":break;case"":case"":n={},r.diagonalUp&&(n.diagonalUp=Gt(r.diagonalUp)),r.diagonalDown&&(n.diagonalDown=Gt(r.diagonalDown)),t.Borders.push(n);break;case"":s=!1;break;default:if(a&&a.WTF&&!s)throw new Error("unrecognized "+r[0]+" in borders")}}))}(a[0],n,0,r),(a=ht(e,"cellXfs"))&&function(e,t,r){var a;t.CellXf=[];var n=!1;(e.match(Ot)||[]).forEach((function(e){var s=Ft(e),i=0;switch(Dt(s[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":break;case"":case"":for(delete(a=s)[0],i=0;i392)for(i=392;i>60;--i)if(t.NumberFmt[a.numFmtId]==t.NumberFmt[i]){a.numFmtId=i;break}t.CellXf.push(a);break;case"":case"":var o={};s.vertical&&(o.vertical=s.vertical),s.horizontal&&(o.horizontal=s.horizontal),null!=s.textRotation&&(o.textRotation=s.textRotation),s.indent&&(o.indent=s.indent),s.wrapText&&(o.wrapText=Gt(s.wrapText)),a.alignment=o;break;case"":case"":case"":n=!1;break;default:if(r&&r.WTF&&!n)throw new Error("unrecognized "+s[0]+" in cellXfs")}}))}(a[0],n,r),n):n}}();function Wi(e,t,r){r||(r=Kr(6+4*t.length)),r.write_shift(2,e),wa(t,r);var a=r.length>r.l?r.slice(0,r.l):r;return null==r.l&&(r.l=r.length),a}var zi,Hi=["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"],Vi=jr;function $i(e,t){t||(t=Kr(84)),zi||(zi=Pe(Hi));var r=zi[e.patternType];null==r&&(r=40),t.write_shift(4,r);var a=0;if(40!=r)for(za({auto:1},t),za({auto:1},t);a<12;++a)t.write_shift(4,0);else{for(;a<4;++a)t.write_shift(4,0);for(;a<12;++a)t.write_shift(4,0)}return t.length>t.l?t.slice(0,t.l):t}function Gi(e,t,r){return r||(r=Kr(16)),r.write_shift(2,t||0),r.write_shift(2,e.numFmtId||0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(1,0),r}function Xi(e,t){return t||(t=Kr(10)),t.write_shift(1,0),t.write_shift(1,0),t.write_shift(4,0),t.write_shift(4,0),t}var ji=jr;function Ki(e,t){var r=Zr();return Jr(r,278),function(e,t){if(t){var r=0;[[5,8],[23,26],[41,44],[50,392]].forEach((function(e){for(var a=e[0];a<=e[1];++a)null!=t[a]&&++r})),0!=r&&(Jr(e,615,ga(r)),[[5,8],[23,26],[41,44],[50,392]].forEach((function(r){for(var a=r[0];a<=r[1];++a)null!=t[a]&&Jr(e,44,Wi(a,t[a]))})),Jr(e,616))}}(r,e.SSF),function(e){Jr(e,611,ga(1)),Jr(e,43,function(e,t){t||(t=Kr(153)),t.write_shift(2,20*e.sz),function(e,t){t||(t=Kr(2));var r=(e.italic?2:0)|(e.strike?8:0)|(e.outline?16:0)|(e.shadow?32:0)|(e.condense?64:0)|(e.extend?128:0);t.write_shift(1,r),t.write_shift(1,0)}(e,t),t.write_shift(2,e.bold?700:400);var r=0;"superscript"==e.vertAlign?r=1:"subscript"==e.vertAlign&&(r=2),t.write_shift(2,r),t.write_shift(1,e.underline||0),t.write_shift(1,e.family||0),t.write_shift(1,e.charset||0),t.write_shift(1,0),za(e.color,t);var a=0;return"major"==e.scheme&&(a=1),"minor"==e.scheme&&(a=2),t.write_shift(1,a),wa(e.name,t),t.length>t.l?t.slice(0,t.l):t}({sz:12,color:{theme:1},name:"Calibri",family:2,scheme:"minor"})),Jr(e,612)}(r),function(e){Jr(e,603,ga(2)),Jr(e,45,$i({patternType:"none"})),Jr(e,45,$i({patternType:"gray125"})),Jr(e,604)}(r),function(e){var t;Jr(e,613,ga(1)),Jr(e,46,(t||(t=Kr(51)),t.write_shift(1,0),Xi(0,t),Xi(0,t),Xi(0,t),Xi(0,t),Xi(0,t),t.length>t.l?t.slice(0,t.l):t)),Jr(e,614)}(r),function(e){Jr(e,626,ga(1)),Jr(e,47,Gi({numFmtId:0,fontId:0,fillId:0,borderId:0},65535)),Jr(e,627)}(r),function(e,t){Jr(e,617,ga(t.length)),t.forEach((function(t){Jr(e,47,Gi(t,0))})),Jr(e,618)}(r,t.cellXfs),function(e){var t,r;Jr(e,619,ga(1)),Jr(e,48,(t={xfId:0,builtinId:0,name:"Normal"},r||(r=Kr(52)),r.write_shift(4,t.xfId),r.write_shift(2,1),r.write_shift(1,+t.builtinId),r.write_shift(1,0),Oa(t.name||"",r),r.length>r.l?r.slice(0,r.l):r)),Jr(e,620)}(r),function(e){Jr(e,505,ga(0)),Jr(e,506)}(r),function(e){var t;Jr(e,508,((t=Kr(2052)).write_shift(4,0),Oa("TableStyleMedium9",t),Oa("PivotStyleMedium4",t),t.length>t.l?t.slice(0,t.l):t)),Jr(e,509)}(r),Jr(r,279),r.end()}var Yi=["","","","","","","","","","","",""];function Zi(e,t){var r;e&&0!==e.length||(e=Ji());var a={};if(!(r=ft(e,"a:themeElements")))throw new Error("themeElements not found in theme");return function(e,t,r){var a;if(t.themeElements={},!(a=ft(e,"a:clrScheme")))throw new Error("clrScheme not found in themeElements");if(function(e,t,r){t.themeElements.clrScheme=[];var a={};(e[0].match(Ot)||[]).forEach((function(e){var n=Ft(e);switch(n[0]){case"":case"":case"":break;case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":"/"===n[0].charAt(1)?(t.themeElements.clrScheme[Yi.indexOf(n[0])]=a,a={}):a.name=n[0].slice(3,n[0].length-1);break;default:if(r&&r.WTF)throw new Error("Unrecognized "+n[0]+" in clrScheme")}}))}(a,t,r),!(a=ft(e,"a:fontScheme")))throw new Error("fontScheme not found in themeElements");if(!(a=ft(e,"a:fmtScheme")))throw new Error("fmtScheme not found in themeElements")}(r[0],a,t),a.raw=e,a}function Ji(e,t){if(t&&t.themeXLSX)return t.themeXLSX;if(e&&"string"==typeof e.raw)return e.raw;var r=[At];return r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]='',r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]='',r[r.length]="",r[r.length]="",r[r.length]="",r[r.length]="",r.join("")}function qi(e){var t=e.read_shift(2),r=e.read_shift(2)-4,a=[t];switch(t){case 4:case 5:case 7:case 8:case 9:case 10:case 11:case 13:a[1]=function(e){var t={};switch(t.xclrType=e.read_shift(2),t.nTintShade=e.read_shift(2),t.xclrType){case 0:case 4:e.l+=4;break;case 1:t.xclrValue=function(e,t){return jr(e,4)}(e);break;case 2:t.xclrValue=ls(e);break;case 3:t.xclrValue=function(e){return e.read_shift(4)}(e)}return e.l+=8,t}(e);break;case 6:a[1]=function(e,t){return jr(e,t)}(e,r);break;case 14:case 15:a[1]=e.read_shift(1===r?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+t+" "+r)}return a}function Qi(e,t,r){var a=[21600,21600],n=["m0,0l0",a[1],a[0],a[1],a[0],"0xe"].join(","),s=[sr("xml",null,{"xmlns:v":hr.v,"xmlns:o":hr.o,"xmlns:x":hr.x,"xmlns:mv":hr.mv}).replace(/\/>/,">"),sr("o:shapelayout",sr("o:idmap",null,{"v:ext":"edit",data:e}),{"v:ext":"edit"})],i=65536*e,o=t||[];return o.length>0&&s.push(sr("v:shapetype",[sr("v:stroke",null,{joinstyle:"miter"}),sr("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202",coordsize:a.join(","),"o:spt":202,path:n})),o.forEach((function(e){++i,s.push(function(e,t,r){var a=ia(e[0]),n={color2:"#BEFF82",type:"gradient"};"gradient"==n.type&&(n.angle="-180");var s="gradient"==n.type?sr("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}):null,i=sr("v:fill",s,n);return["",i,sr("v:shadow",null,{on:"t",obscured:"t"}),sr("v:path",null,{"o:connecttype":"none"}),'

','',"","",ar("x:Anchor",[a.c+1,0,a.r+1,0,a.c+3,20,a.r+5,20].join(",")),ar("x:AutoFill","False"),ar("x:Row",String(a.r)),ar("x:Column",String(a.c)),e[1].hidden?"":"","",""].join("")}(e,i))})),s.push(""),s.join("")}function eo(e,t,r,a){var n,s=null!=e["!data"];t.forEach((function(t){var i=ia(t.ref);if(!(i.r<0||i.c<0)){if(s?(e["!data"][i.r]||(e["!data"][i.r]=[]),n=e["!data"][i.r][i.c]):n=e[t.ref],!n){n={t:"z"},s?e["!data"][i.r][i.c]=n:e[t.ref]=n;var o=ua(e["!ref"]||"BDWGO1000001:A1");o.s.r>i.r&&(o.s.r=i.r),o.e.ri.c&&(o.s.c=i.c),o.e.c=0;--f){if(!r&&n.c[f].T)return;r&&!n.c[f].T&&n.c.splice(f,1)}if(r&&a)for(f=0;f"),e.forEach((function(e){e[1].forEach((function(e){var a=Wt(e.a);-1==r.indexOf(a)&&(r.push(a),t.push(""+a+"")),e.T&&e.ID&&-1==r.indexOf("tc="+e.ID)&&(r.push("tc="+e.ID),t.push("tc="+e.ID+""))}))})),0==r.length&&(r.push("SheetJ5"),t.push("SheetJ5")),t.push(""),t.push(""),e.forEach((function(e){var a=0,n=[],s=0;if(e[1][0]&&e[1][0].T&&e[1][0].ID&&(a=r.indexOf("tc="+e[1][0].ID)),e[1].forEach((function(e){e.a&&(a=r.indexOf(Wt(e.a))),e.T&&++s,n.push(null==e.t?"":Wt(e.t))})),0===s)e[1].forEach((function(a){t.push(''),t.push(ar("t",null==a.t?"":Wt(a.t))),t.push("")}));else{e[1][0]&&e[1][0].T&&e[1][0].ID&&(a=r.indexOf("tc="+e[1][0].ID)),t.push('');for(var i="Comment:\n "+n[0]+"\n",o=1;o")}})),t.push(""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}function ro(e,t,r){var a=[At,sr("ThreadedComments",null,{xmlns:lr.TCMNT}).replace(/[\/]>/,">")];return e.forEach((function(e){var n="";(e[1]||[]).forEach((function(s,i){if(s.T){s.a&&-1==t.indexOf(s.a)&&t.push(s.a);var o={ref:e[0],id:"{54EE7951-7262-4200-6969-"+("000000000000"+r.tcid++).slice(-12)+"}"};0==i?n=o.id:o.parentId=n,s.ID=o.id,s.a&&(o.personId="{54EE7950-7262-4200-6969-"+("000000000000"+t.indexOf(s.a)).slice(-12)+"}"),a.push(sr("threadedComment",ar("text",s.t||""),o))}else delete s.ID}))})),a.push(""),a.join("")}function ao(e){var t=[At,sr("personList",null,{xmlns:lr.TCMNT,"xmlns:x":fr[0]}).replace(/[\/]>/,">")];return e.forEach((function(e,r){t.push(sr("person",null,{displayName:e,id:"{54EE7950-7262-4200-6969-"+("000000000000"+r).slice(-12)+"}",userId:e,providerId:"None"}))})),t.push(""),t.join("")}var no=ba;function so(e){return wa(e.slice(0,54))}function io(e){var t=Zr(),r=[];return Jr(t,628),Jr(t,630),e.forEach((function(e){e[1].forEach((function(e){r.indexOf(e.a)>-1||(r.push(e.a.slice(0,54)),Jr(t,632,so(e.a)),e.T&&e.ID&&-1==r.indexOf("tc="+e.ID)&&(r.push("tc="+e.ID),Jr(t,632,so("tc="+e.ID))))}))})),Jr(t,631),Jr(t,633),e.forEach((function(e){e[1].forEach((function(a){var n=-1;a.ID&&(n=r.indexOf("tc="+a.ID)),-1==n&&e[1][0].T&&e[1][0].ID&&(n=r.indexOf("tc="+e[1][0].ID)),-1==n&&(n=r.indexOf(a.a)),a.iauthor=n;var s,i,o,c={s:ia(e[0]),e:ia(e[0])};Jr(t,635,function(e,t){return null==t&&(t=Kr(36)),t.write_shift(4,e[1].iauthor),Ua(e[0],t),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t.write_shift(4,0),t}([c,a])),a.t&&a.t.length>0&&Jr(t,637,(s=a,o=!1,null==i&&(o=!0,i=Kr(23+4*s.t.length)),i.write_shift(1,1),wa(s.t,i),i.write_shift(4,1),function(e,t){t||(t=Kr(4)),t.write_shift(2,e.ich||0),t.write_shift(2,e.ifnt||0)}({ich:0,ifnt:0},i),o?i.slice(0,i.l):i)),Jr(t,636),delete a.iauthor}))})),Jr(t,634),Jr(t,629),t.end()}var oo="application/vnd.ms-office.vbaProject",co=["xlsb","xlsm","xlam","biff8","xla"],lo=function(){var e=/(^|[^A-Za-z_])R(\[?-?\d+\]|[1-9]\d*|)C(\[?-?\d+\]|[1-9]\d*|)(?![A-Za-z0-9_])/g,t={r:0,c:0};function r(e,r,a,n){var s=!1,i=!1;0==a.length?i=!0:"["==a.charAt(0)&&(i=!0,a=a.slice(1,-1)),0==n.length?s=!0:"["==n.charAt(0)&&(s=!0,n=n.slice(1,-1));var o=a.length>0?0|parseInt(a,10):0,c=n.length>0?0|parseInt(n,10):0;return s?c+=t.c:--c,i?o+=t.r:--o,r+(s?"":"$")+sa(c)+(i?"":"$")+aa(o)}return function(a,n){return t=n,a.replace(e,r)}}(),fo=/(^|[^._A-Z0-9])(\$?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])(\$?)(\d{1,7})(?![_.\(A-Za-z0-9])/g;try{fo=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})(?![_.\(A-Za-z0-9])/g}catch(e){}var ho=function(){return function(e,t){return e.replace(fo,(function(e,r,a,n,s,i){var o=na(n)-(a?0:t.c),c=ra(i)-(s?0:t.r);return r+"R"+("$"==s?c+1:0==c?"":"["+c+"]")+"C"+("$"==a?o+1:0==o?"":"["+o+"]")}))}}();function uo(e,t){return e.replace(fo,(function(e,r,a,n,s,i){return r+("$"==a?a+n:sa(na(n)+t.c))+("$"==s?s+i:aa(ra(i)+t.r))}))}function po(e,t,r){var a=ca(t).s,n=ia(r);return uo(e,{r:n.r-a.r,c:n.c-a.c})}function mo(e){return e.replace(/_xlfn\./g,"")}function vo(e){e.l+=1}function go(e,t){var r=e.read_shift(1==t?1:2);return[16383&r,r>>14&1,r>>15&1]}function bo(e,t,r){var a=2;if(r){if(r.biff>=2&&r.biff<=5)return wo(e);12==r.biff&&(a=4)}var n=e.read_shift(a),s=e.read_shift(a),i=go(e,2),o=go(e,2);return{s:{r:n,c:i[0],cRel:i[1],rRel:i[2]},e:{r:s,c:o[0],cRel:o[1],rRel:o[2]}}}function wo(e){var t=go(e,2),r=go(e,2),a=e.read_shift(1),n=e.read_shift(1);return{s:{r:t[0],c:a,cRel:t[1],rRel:t[2]},e:{r:r[0],c:n,cRel:r[1],rRel:r[2]}}}function To(e,t,r){if(r&&r.biff>=2&&r.biff<=5)return function(e){var t=go(e,2),r=e.read_shift(1);return{r:t[0],c:r,cRel:t[1],rRel:t[2]}}(e);var a=e.read_shift(r&&12==r.biff?4:2),n=go(e,2);return{r:a,c:n[0],cRel:n[1],rRel:n[2]}}function yo(e){var t=e.read_shift(2),r=e.read_shift(2);return{r:t,c:255&r,fQuoted:!!(16384&r),cRel:r>>15,rRel:r>>15}}function Eo(e){var t=1&e[e.l+1];return e.l+=4,[t,1]}function ko(e){return[e.read_shift(1),e.read_shift(1)]}function _o(e,t){var r=[e.read_shift(1)];if(12==t)switch(r[0]){case 2:r[0]=4;break;case 4:r[0]=16;break;case 0:r[0]=1;break;case 1:r[0]=2}switch(r[0]){case 4:r[1]=Xn(e,1)?"TRUE":"FALSE",12!=t&&(e.l+=7);break;case 37:case 16:r[1]=tn[e[e.l]],e.l+=12==t?4:8;break;case 0:e.l+=8;break;case 1:r[1]=Ba(e);break;case 2:r[1]=ns(e,0,{biff:t>0&&t<8?2:t});break;default:throw new Error("Bad SerAr: "+r[0])}return r}function So(e,t,r){for(var a=e.read_shift(12==r.biff?4:2),n=[],s=0;s!=a;++s)n.push((12==r.biff?La:ms)(e,8));return n}function xo(e,t,r){var a=0,n=0;12==r.biff?(a=e.read_shift(4),n=e.read_shift(4)):(n=1+e.read_shift(1),a=1+e.read_shift(2)),r.biff>=2&&r.biff<8&&(--a,0==--n&&(n=256));for(var s=0,i=[];s!=a&&(i[s]=[]);++s)for(var o=0;o!=n;++o)i[s][o]=_o(e,r.biff);return i}function Ao(e,t,r){return e.l+=2,[yo(e)]}function Co(e){return e.l+=6,[]}function Io(e){return e.l+=2,[Kn(e),1&e.read_shift(2)]}var Oo=["Data","All","Headers","??","?Data2","??","?DataHeaders","??","Totals","??","??","??","?DataTotals","??","??","??","?Current"],Ro={1:{n:"PtgExp",f:function(e,t,r){return e.l++,r&&12==r.biff?[e.read_shift(4,"i"),0]:[e.read_shift(2),e.read_shift(r&&2==r.biff?1:2)]}},2:{n:"PtgTbl",f:jr},3:{n:"PtgAdd",f:vo},4:{n:"PtgSub",f:vo},5:{n:"PtgMul",f:vo},6:{n:"PtgDiv",f:vo},7:{n:"PtgPower",f:vo},8:{n:"PtgConcat",f:vo},9:{n:"PtgLt",f:vo},10:{n:"PtgLe",f:vo},11:{n:"PtgEq",f:vo},12:{n:"PtgGe",f:vo},13:{n:"PtgGt",f:vo},14:{n:"PtgNe",f:vo},15:{n:"PtgIsect",f:vo},16:{n:"PtgUnion",f:vo},17:{n:"PtgRange",f:vo},18:{n:"PtgUplus",f:vo},19:{n:"PtgUminus",f:vo},20:{n:"PtgPercent",f:vo},21:{n:"PtgParen",f:vo},22:{n:"PtgMissArg",f:vo},23:{n:"PtgStr",f:function(e,t,r){return e.l++,Qn(e,0,r)}},26:{n:"PtgSheet",f:function(e,t,r){return e.l+=5,e.l+=2,e.l+=2==r.biff?1:4,["PTGSHEET"]}},27:{n:"PtgEndSheet",f:function(e,t,r){return e.l+=2==r.biff?4:5,["PTGENDSHEET"]}},28:{n:"PtgErr",f:function(e){return e.l++,tn[e.read_shift(1)]}},29:{n:"PtgBool",f:function(e){return e.l++,0!==e.read_shift(1)}},30:{n:"PtgInt",f:function(e){return e.l++,e.read_shift(2)}},31:{n:"PtgNum",f:function(e){return e.l++,Ba(e)}},32:{n:"PtgArray",f:function(e,t,r){var a=(96&e[e.l++])>>5;return e.l+=2==r.biff?6:12==r.biff?14:7,[a]}},33:{n:"PtgFunc",f:function(e,t,r){var a=(96&e[e.l])>>5;e.l+=1;var n=e.read_shift(r&&r.biff<=3?1:2);return[ec[n],Qo[n],a]}},34:{n:"PtgFuncVar",f:function(e,t,r){var a=e[e.l++],n=e.read_shift(1),s=r&&r.biff<=3?[88==a?-1:0,e.read_shift(1)]:function(e){return[e[e.l+1]>>7,32767&e.read_shift(2)]}(e);return[n,(0===s[0]?Qo:qo)[s[1]]]}},35:{n:"PtgName",f:function(e,t,r){var a=e.read_shift(1)>>>5&3,n=!r||r.biff>=8?4:2,s=e.read_shift(n);switch(r.biff){case 2:e.l+=5;break;case 3:case 4:e.l+=8;break;case 5:e.l+=12}return[a,0,s]}},36:{n:"PtgRef",f:function(e,t,r){var a=(96&e[e.l])>>5;return e.l+=1,[a,To(e,0,r)]}},37:{n:"PtgArea",f:function(e,t,r){return[(96&e[e.l++])>>5,bo(e,r.biff>=2&&r.biff,r)]}},38:{n:"PtgMemArea",f:function(e,t,r){var a=e.read_shift(1)>>>5&3;return e.l+=r&&2==r.biff?3:4,[a,e.read_shift(r&&2==r.biff?1:2)]}},39:{n:"PtgMemErr",f:jr},40:{n:"PtgMemNoMem",f:jr},41:{n:"PtgMemFunc",f:function(e,t,r){return[e.read_shift(1)>>>5&3,e.read_shift(r&&2==r.biff?1:2)]}},42:{n:"PtgRefErr",f:function(e,t,r){var a=e.read_shift(1)>>>5&3;return e.l+=4,r.biff<8&&e.l--,12==r.biff&&(e.l+=2),[a]}},43:{n:"PtgAreaErr",f:function(e,t,r){var a=(96&e[e.l++])>>5;return e.l+=r&&r.biff>8?12:r.biff<8?6:8,[a]}},44:{n:"PtgRefN",f:function(e,t,r){var a=(96&e[e.l])>>5;e.l+=1;var n=function(e,t,r){var a=r&&r.biff?r.biff:8;if(a>=2&&a<=5)return function(e){var t=e.read_shift(2),r=e.read_shift(1),a=(32768&t)>>15,n=(16384&t)>>14;return t&=16383,1==a&&t>=8192&&(t-=16384),1==n&&r>=128&&(r-=256),{r:t,c:r,cRel:n,rRel:a}}(e);var n=e.read_shift(a>=12?4:2),s=e.read_shift(2),i=(16384&s)>>14,o=(32768&s)>>15;if(s&=16383,1==o)for(;n>524287;)n-=1048576;if(1==i)for(;s>8191;)s-=16384;return{r:n,c:s,cRel:i,rRel:o}}(e,0,r);return[a,n]}},45:{n:"PtgAreaN",f:function(e,t,r){var a=(96&e[e.l++])>>5,n=function(e,t,r){if(r.biff<8)return wo(e);var a=e.read_shift(12==r.biff?4:2),n=e.read_shift(12==r.biff?4:2),s=go(e,2),i=go(e,2);return{s:{r:a,c:s[0],cRel:s[1],rRel:s[2]},e:{r:n,c:i[0],cRel:i[1],rRel:i[2]}}}(e,0,r);return[a,n]}},46:{n:"PtgMemAreaN",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},47:{n:"PtgMemNoMemN",f:function(e){return[e.read_shift(1)>>>5&3,e.read_shift(2)]}},57:{n:"PtgNameX",f:function(e,t,r){return 5==r.biff?function(e){var t=e.read_shift(1)>>>5&3,r=e.read_shift(2,"i");e.l+=8;var a=e.read_shift(2);return e.l+=12,[t,r,a]}(e):[e.read_shift(1)>>>5&3,e.read_shift(2),e.read_shift(4)]}},58:{n:"PtgRef3d",f:function(e,t,r){var a=(96&e[e.l])>>5;e.l+=1;var n=e.read_shift(2);return r&&5==r.biff&&(e.l+=12),[a,n,To(e,0,r)]}},59:{n:"PtgArea3d",f:function(e,t,r){var a=(96&e[e.l++])>>5,n=e.read_shift(2,"i");if(r&&5===r.biff)e.l+=12;return[a,n,bo(e,0,r)]}},60:{n:"PtgRefErr3d",f:function(e,t,r){var a=(96&e[e.l++])>>5,n=e.read_shift(2),s=4;if(r)switch(r.biff){case 5:s=15;break;case 12:s=6}return e.l+=s,[a,n]}},61:{n:"PtgAreaErr3d",f:function(e,t,r){var a=(96&e[e.l++])>>5,n=e.read_shift(2),s=8;if(r)switch(r.biff){case 5:e.l+=12,s=6;break;case 12:s=12}return e.l+=s,[a,n]}},255:{}},No={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,78:46,110:46,79:47,111:47,88:34,120:34,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61},Fo={1:{n:"PtgElfLel",f:Io},2:{n:"PtgElfRw",f:Ao},3:{n:"PtgElfCol",f:Ao},6:{n:"PtgElfRwV",f:Ao},7:{n:"PtgElfColV",f:Ao},10:{n:"PtgElfRadical",f:Ao},11:{n:"PtgElfRadicalS",f:Co},13:{n:"PtgElfColS",f:Co},15:{n:"PtgElfColSV",f:Co},16:{n:"PtgElfRadicalLel",f:Io},25:{n:"PtgList",f:function(e){e.l+=2;var t=e.read_shift(2),r=e.read_shift(2),a=e.read_shift(4),n=e.read_shift(2),s=e.read_shift(2);return{ixti:t,coltype:3&r,rt:Oo[r>>2&31],idx:a,c:n,C:s}}},29:{n:"PtgSxName",f:function(e){return e.l+=2,[e.read_shift(4)]}},255:{}},Do={0:{n:"PtgAttrNoop",f:function(e){return e.l+=4,[0,0]}},1:{n:"PtgAttrSemi",f:function(e,t,r){var a=255&e[e.l+1]?1:0;return e.l+=r&&2==r.biff?3:4,[a]}},2:{n:"PtgAttrIf",f:function(e,t,r){var a=255&e[e.l+1]?1:0;return e.l+=2,[a,e.read_shift(r&&2==r.biff?1:2)]}},4:{n:"PtgAttrChoose",f:function(e,t,r){e.l+=2;for(var a=e.read_shift(r&&2==r.biff?1:2),n=[],s=0;s<=a;++s)n.push(e.read_shift(r&&2==r.biff?1:2));return n}},8:{n:"PtgAttrGoto",f:function(e,t,r){var a=255&e[e.l+1]?1:0;return e.l+=2,[a,e.read_shift(r&&2==r.biff?1:2)]}},16:{n:"PtgAttrSum",f:function(e,t,r){e.l+=r&&2==r.biff?3:4}},32:{n:"PtgAttrBaxcel",f:Eo},33:{n:"PtgAttrBaxcel",f:Eo},64:{n:"PtgAttrSpace",f:function(e){return e.read_shift(2),ko(e)}},65:{n:"PtgAttrSpaceSemi",f:function(e){return e.read_shift(2),ko(e)}},128:{n:"PtgAttrIfError",f:function(e){var t=255&e[e.l+1]?1:0;return e.l+=2,[t,e.read_shift(2)]}},255:{}};function Po(e,t,r,a){if(a.biff<8)return jr(e,t);for(var n=e.l+t,s=[],i=0;i!==r.length;++i)switch(r[i][0]){case"PtgArray":r[i][1]=xo(e,0,a),s.push(r[i][1]);break;case"PtgMemArea":r[i][2]=So(e,r[i][1],a),s.push(r[i][2]);break;case"PtgExp":a&&12==a.biff&&(r[i][1][1]=e.read_shift(4),s.push(r[i][1]));break;case"PtgList":case"PtgElfRadicalS":case"PtgElfColS":case"PtgElfColSV":throw"Unsupported "+r[i][0]}return 0!=(t=n-e.l)&&s.push(jr(e,t)),s}function Mo(e,t,r){for(var a,n,s=e.l+t,i=[];s!=e.l;)t=s-e.l,n=e[e.l],a=Ro[n]||Ro[No[n]],24!==n&&25!==n||(a=(24===n?Fo:Do)[e[e.l+1]]),a&&a.f?i.push([a.n,a.f(e,t,r)]):jr(e,t);return i}function Lo(e){for(var t=[],r=0;r=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function Bo(e,t,r){if(!e)return"SH33TJSERR0";if(r.biff>8&&(!e.XTI||!e.XTI[t]))return e.SheetNames[t];if(!e.XTI)return"SH33TJSERR6";var a=e.XTI[t];if(r.biff<8)return t>1e4&&(t-=65536),t<0&&(t=-t),0==t?"":e.XTI[t-1];if(!a)return"SH33TJSERR1";var n="";if(r.biff>8)switch(e[a[0]][0]){case 357:return n=-1==a[1]?"#REF":e.SheetNames[a[1]],a[1]==a[2]?n:n+":"+e.SheetNames[a[2]];case 358:return null!=r.SID?e.SheetNames[r.SID]:"SH33TJSSAME"+e[a[0]][0];default:return"SH33TJSSRC"+e[a[0]][0]}switch(e[a[0]][0][0]){case 1025:return n=-1==a[1]?"#REF":e.SheetNames[a[1]]||"SH33TJSERR3",a[1]==a[2]?n:n+":"+e.SheetNames[a[2]];case 14849:return e[a[0]].slice(1).map((function(e){return e.Name})).join(";;");default:return e[a[0]][0][3]?(n=-1==a[1]?"#REF":e[a[0]][0][3][a[1]]||"SH33TJSERR4",a[1]==a[2]?n:n+":"+e[a[0]][0][3][a[2]]):"SH33TJSERR2"}}function Wo(e,t,r){var a=Bo(e,t,r);return"#REF"==a?a:ha(a,r)}function zo(e,t,r,a,n){var s,i,o,c,l=n&&n.biff||8,f={s:{c:0,r:0},e:{c:0,r:0}},h=[],u=0,d=0,p="";if(!e[0]||!e[0][0])return"";for(var m,v,g,b,w=-1,T="",y=0,E=e[0].length;y=0){switch(e[0][w][1][0]){case 0:T=Ye(" ",e[0][w][1][1]);break;case 1:T=Ye("\r",e[0][w][1][1]);break;default:if(T="",n.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][w][1][0])}i+=T,w=-1}h.push(i+Uo[k[0]]+s);break;case"PtgIsect":s=h.pop(),i=h.pop(),h.push(i+" "+s);break;case"PtgUnion":s=h.pop(),i=h.pop(),h.push(i+","+s);break;case"PtgRange":s=h.pop(),i=h.pop(),h.push((v=s,void 0,void 0,g=(m=i).lastIndexOf("!"),b=v.lastIndexOf("!"),-1==g&&-1==b?m+":"+v:g>0&&b>0&&m.slice(0,g).toLowerCase()==v.slice(0,b).toLowerCase()?m+":"+v.slice(b+1):(console.error("Cannot hydrate range",m,v),m+":"+v)));break;case"PtgAttrChoose":case"PtgAttrGoto":case"PtgAttrIf":case"PtgAttrIfError":case"PtgAttrBaxcel":case"PtgAttrSemi":case"PtgMemArea":case"PtgTbl":case"PtgMemErr":case"PtgMemAreaN":case"PtgMemNoMemN":case"PtgAttrNoop":case"PtgSheet":case"PtgEndSheet":case"PtgMemFunc":case"PtgMemNoMem":break;case"PtgRef":o=qr(k[1][1],f,n),h.push(ea(o,l));break;case"PtgRefN":o=r?qr(k[1][1],r,n):k[1][1],h.push(ea(o,l));break;case"PtgRef3d":u=k[1][1],o=qr(k[1][2],f,n),p=Wo(a,u,n),h.push(p+"!"+ea(o,l));break;case"PtgFunc":case"PtgFuncVar":var _=k[1][0],S=k[1][1];_||(_=0);var x=0==(_&=127)?[]:h.slice(-_);h.length-=_,"User"===S&&(S=x.shift()),h.push(S+"("+x.join(",")+")");break;case"PtgBool":h.push(k[1]?"TRUE":"FALSE");break;case"PtgInt":case"PtgErr":h.push(k[1]);break;case"PtgNum":h.push(String(k[1]));break;case"PtgStr":h.push('"'+k[1].replace(/"/g,'""')+'"');break;case"PtgAreaN":c=Qr(k[1][1],r?{s:r}:f,n),h.push(ta(c,n));break;case"PtgArea":c=Qr(k[1][1],f,n),h.push(ta(c,n));break;case"PtgArea3d":u=k[1][1],c=k[1][2],p=Wo(a,u,n),h.push(p+"!"+ta(c,n));break;case"PtgAttrSum":h.push("SUM("+h.pop()+")");break;case"PtgName":d=k[1][2];var A=(a.names||[])[d-1]||(a[0]||[])[d],C=A?A.Name:"SH33TJSNAME"+String(d);C&&"_xlfn."==C.slice(0,6)&&!n.xlfn&&(C=C.slice(6)),h.push(C);break;case"PtgNameX":var I,O=k[1][1];if(d=k[1][2],!(n.biff<=5)){var R="";if(14849==((a[O]||[])[0]||[])[0]||(1025==((a[O]||[])[0]||[])[0]?a[O][d]&&a[O][d].itab>0&&(R=a.SheetNames[a[O][d].itab-1]+"!"):R=a.SheetNames[d-1]+"!"),a[O]&&a[O][d])R+=a[O][d].Name;else if(a[0]&&a[0][d])R+=a[0][d].Name;else{var N=(Bo(a,O,n)||"").split(";;");N[d-1]?R=N[d-1]:R+="SH33TJSERRX"}h.push(R);break}O<0&&(O=-O),a[O]&&(I=a[O][d]),I||(I={Name:"SH33TJSERRY"}),h.push(I.Name);break;case"PtgParen":var F="(",D=")";if(w>=0){switch(T="",e[0][w][1][0]){case 2:F=Ye(" ",e[0][w][1][1])+F;break;case 3:F=Ye("\r",e[0][w][1][1])+F;break;case 4:D=Ye(" ",e[0][w][1][1])+D;break;case 5:D=Ye("\r",e[0][w][1][1])+D;break;default:if(n.WTF)throw new Error("Unexpected PtgAttrSpaceType "+e[0][w][1][0])}w=-1}h.push(F+h.pop()+D);break;case"PtgRefErr":case"PtgRefErr3d":case"PtgAreaErr":case"PtgAreaErr3d":h.push("#REF!");break;case"PtgExp":o={c:k[1][1],r:k[1][0]};var P={c:r.c,r:r.r};if(a.sharedf[oa(o)]){var M=a.sharedf[oa(o)];h.push(zo(M,0,P,a,n))}else{var L=!1;for(s=0;s!=a.arrayf.length;++s)if(i=a.arrayf[s],!(o.ci[0].e.c||o.ri[0].e.r)){h.push(zo(i[1],0,P,a,n)),L=!0;break}L||h.push(k[1])}break;case"PtgArray":h.push("{"+Lo(k[1])+"}");break;case"PtgAttrSpace":case"PtgAttrSpaceSemi":w=y;break;case"PtgMissArg":h.push("");break;case"PtgList":h.push("Table"+k[1].idx+"[#"+k[1].rt+"]");break;case"PtgElfCol":case"PtgElfColS":case"PtgElfColSV":case"PtgElfColV":case"PtgElfLel":case"PtgElfRadical":case"PtgElfRadicalLel":case"PtgElfRadicalS":case"PtgElfRw":case"PtgElfRwV":throw new Error("Unsupported ELFs");default:throw new Error("Unrecognized Formula Token: "+String(k))}if(3!=n.biff&&w>=0&&-1==["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"].indexOf(e[0][y][0])){var U=!0;switch((k=e[0][w])[1][0]){case 4:U=!1;case 0:T=Ye(" ",k[1][1]);break;case 5:U=!1;case 1:T=Ye("\r",k[1][1]);break;default:if(T="",n.WTF)throw new Error("Unexpected PtgAttrSpaceType "+k[1][0])}h.push((U?T:"")+h.pop()+(U?"":T)),w=-1}}if(h.length>1&&n.WTF)throw new Error("bad formula stack");return"TRUE"==h[0]||"FALSE"!=h[0]&&h[0]}function Ho(e,t,r){var a,n=e.l+t,s=2==r.biff?1:2,i=e.read_shift(s);if(65535==i)return[[],jr(e,t-2)];var o=Mo(e,i,r);return t!==i+s&&(a=Po(e,t-i-s,o,r)),e.l=n,[o,a]}function Vo(e,t,r){var a,n=e.l+t,s=e.read_shift(2),i=Mo(e,s,r);return 65535==s?[[],jr(e,t-2)]:(t!==s+2&&(a=Po(e,n-s-2,i,r)),[i,a])}function $o(e,t,r){var a=e.l+t,n=hs(e,6,r),s=function(e){var t;if(65535!==Pr(e,e.l+6))return[Ba(e),"n"];switch(e[e.l]){case 0:return e.l+=8,["String","s"];case 1:return t=1===e[e.l+2],e.l+=8,[t,"b"];case 2:return t=e[e.l+2],e.l+=8,[t,"e"];case 3:return e.l+=8,["","s"]}return[]}(e),i=e.read_shift(1);2!=r.biff&&(e.read_shift(1),r.biff>=5&&e.read_shift(4));var o=function(e,t,r){var a,n=e.l+t,s=2==r.biff?1:2,i=e.read_shift(s);if(65535==i)return[[],jr(e,t-2)];var o=Mo(e,i,r);return t!==i+s&&(a=Po(e,t-i-s,o,r)),e.l=n,[o,a]}(e,a-e.l,r);return{cell:n,val:s[0],formula:o,shared:i>>3&1,tt:s[1]}}function Go(e,t,r){var a=e.read_shift(4),n=Mo(e,a,r),s=e.read_shift(4);return[n,s>0?Po(e,s,n,r):null]}var Xo=Go,jo=Go,Ko=Go,Yo=Go;function Zo(e){if((0|e)==e&&e=0){var t=Kr(11);return t.write_shift(4,3),t.write_shift(1,30),t.write_shift(2,e),t.write_shift(4,0),t}var r=Kr(17);return r.write_shift(4,11),r.write_shift(1,31),r.write_shift(8,e),r.write_shift(4,0),r}var Jo=function(e,t){if("number"==typeof e)return Zo(e);if("boolean"==typeof e)return function(e){var t=Kr(10);return t.write_shift(4,2),t.write_shift(1,29),t.write_shift(1,e?1:0),t.write_shift(4,0),t}(e);if(/^#(DIV\/0!|GETTING_DATA|N\/A|NAME\?|NULL!|NUM!|REF!|VALUE!)$/.test(e))return function(e){var t=Kr(10);return t.write_shift(4,2),t.write_shift(1,28),t.write_shift(1,e),t.write_shift(4,0),t}(+rn[e]);if(e.match(/^\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/))return a=ia(r=e),(n=Kr(15)).write_shift(4,7),n.write_shift(1,36),n.write_shift(4,a.r),n.write_shift(2,a.c|("$"==r.charAt(0)?0:1)<<14|(r.match(/\$\d/)?0:1)<<15),n.write_shift(4,0),n;var r,a,n;if(e.match(/^\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5}):\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/))return function(e){var t=e.split(":"),r=t[0],a=Kr(23);a.write_shift(4,15);var n=ia(r=t[0]);return a.write_shift(1,36),a.write_shift(4,n.r),a.write_shift(2,n.c|("$"==r.charAt(0)?0:1)<<14|(r.match(/\$\d/)?0:1)<<15),a.write_shift(4,0),n=ia(r=t[1]),a.write_shift(1,36),a.write_shift(4,n.r),a.write_shift(2,n.c|("$"==r.charAt(0)?0:1)<<14|(r.match(/\$\d/)?0:1)<<15),a.write_shift(4,0),a.write_shift(1,17),a.write_shift(4,0),a}(e);if(e.match(/^#REF!\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5}):\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/))return function(e,t){var r=e.lastIndexOf("!"),a=e.slice(0,r);e=e.slice(r+1),"'"==a.charAt(0)&&(a=a.slice(1,-1).replace(/''/g,"'"));var n=ca(e),s=Kr(23);return s.write_shift(4,15),s.write_shift(1,59),s.write_shift(2,2+t.SheetNames.map((function(e){return e.toLowerCase()})).indexOf(a.toLowerCase())),s.write_shift(4,n.s.r),s.write_shift(4,n.e.r),s.write_shift(2,n.s.c),s.write_shift(2,n.e.c),s.write_shift(4,0),s}(e,t);if(e.match(/^(?:'[^\\\/?*\[\]:]*'|[^'][^\\\/?*\[\]:'`~!@#$%^()\-=+{}|;,<.>]*)!\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/))return function(e,t){var r=e.lastIndexOf("!"),a=e.slice(0,r),n=ia(e=e.slice(r+1));"'"==a.charAt(0)&&(a=a.slice(1,-1).replace(/''/g,"'"));var s=Kr(17);return s.write_shift(4,9),s.write_shift(1,58),s.write_shift(2,2+t.SheetNames.map((function(e){return e.toLowerCase()})).indexOf(a.toLowerCase())),s.write_shift(4,n.r),s.write_shift(2,n.c|("$"==e.charAt(0)?0:1)<<14|(e.match(/\$\d/)?0:1)<<15),s.write_shift(4,0),s}(e,t);if(e.match(/^(?:'[^\\\/?*\[\]:]*'|[^'][^\\\/?*\[\]:'`~!@#$%^()\-=+{}|;,<.>]*)!\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5}):\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\$?(?:10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})$/))return function(e,t){var r=e.lastIndexOf("!"),a=e.slice(0,r);e=e.slice(r+1),"'"==a.charAt(0)&&(a=a.slice(1,-1).replace(/''/g,"'"));var n=e.split(":"),s=Kr(27);s.write_shift(4,19);var i=n[0],o=ia(i);return s.write_shift(1,58),s.write_shift(2,2+t.SheetNames.map((function(e){return e.toLowerCase()})).indexOf(a.toLowerCase())),s.write_shift(4,o.r),s.write_shift(2,o.c|("$"==i.charAt(0)?0:1)<<14|(i.match(/\$\d/)?0:1)<<15),o=ia(i=n[1]),s.write_shift(1,58),s.write_shift(2,2+t.SheetNames.map((function(e){return e.toLowerCase()})).indexOf(a.toLowerCase())),s.write_shift(4,o.r),s.write_shift(2,o.c|("$"==i.charAt(0)?0:1)<<14|(i.match(/\$\d/)?0:1)<<15),s.write_shift(1,17),s.write_shift(4,0),s}(e,t);if(/^(?:'[^\\\/?*\[\]:]*'|[^'][^\\\/?*\[\]:'`~!@#$%^()\-=+{}|;,<.>]*)!#REF!$/.test(e))return function(e,t){var r=e.lastIndexOf("!"),a=e.slice(0,r);e=e.slice(r+1),"'"==a.charAt(0)&&(a=a.slice(1,-1).replace(/''/g,"'"));var n=Kr(17);return n.write_shift(4,9),n.write_shift(1,60),n.write_shift(2,2+t.SheetNames.map((function(e){return e.toLowerCase()})).indexOf(a.toLowerCase())),n.write_shift(4,0),n.write_shift(2,0),n.write_shift(4,0),n}(e,t);if(/^".*"$/.test(e))return function(e){var t=Kr(7);t.write_shift(4,3+2*e.length),t.write_shift(1,23),t.write_shift(2,e.length);var r=Kr(2*e.length);r.write_shift(2*e.length,e,"utf16le");var a=Kr(4);return a.write_shift(4,0),N([t,r,a])}(e);if(/^[+-]\d+$/.test(e))return Zo(parseInt(e,10));throw"Formula |"+e+"| not supported for XLSB"},qo={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"},Qo={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",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"},ec={2:1,3:1,10:0,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,34:0,35:0,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,63:0,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,74:0,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,89:0,90:1,94:0,95:0,97:2,98:1,99:1,101:3,102:3,105:1,106:1,108:2,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,144:4,161:1,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,186:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,225:0,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,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,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0};function tc(e){return"of:"==e.slice(0,3)&&(e=e.slice(3)),61==e.charCodeAt(0)&&61==(e=e.slice(1)).charCodeAt(0)&&(e=e.slice(1)),(e=(e=(e=(e=(e=e.replace(/COM\.MICROSOFT\./g,"")).replace(/\[((?:\.[A-Z]+[0-9]+)(?::\.[A-Z]+[0-9]+)?)\]/g,(function(e,t){return t.replace(/\./g,"")}))).replace(/\$'([^']|'')+'/g,(function(e){return e.slice(1)}))).replace(/\$([^\]\. #$]+)/g,(function(e,t){return t.match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})?$/)?e:t}))).replace(/\[.(#[A-Z]*[?!])\]/g,"$1")).replace(/[;~]/g,",").replace(/\|/g,";")}function rc(e){var t=(e=(e=e.replace(/\$'([^']|'')+'/g,(function(e){return e.slice(1)}))).replace(/\$([^\]\. #$]+)/g,(function(e,t){return t.match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6]|[1-9]\d{0,5})?$/)?e:t}))).split(":");return[t[0].split(".")[0],t[0].split(".")[1]+(t.length>1?":"+(t[1].split(".")[1]||t[1].split(".")[0]):"")]}function ac(e){return e.replace(/!/,".").replace(/:/,":.")}var nc={},sc={},ic="undefined"!=typeof Map;function oc(e,t,r){var a=0,n=e.length;if(r){if(ic?r.has(t):Object.prototype.hasOwnProperty.call(r,t))for(var s=ic?r.get(t):r[t];a-1?(r.width=Ii(a),r.customWidth=1):null!=t.width&&(r.width=t.width),t.hidden&&(r.hidden=!0),null!=t.level&&(r.outlineLevel=r.level=t.level),r}function lc(e,t){if(e){var r=[.7,.7,.75,.75,.3,.3];"xlml"==t&&(r=[1,1,1,1,.5,.5]),null==e.left&&(e.left=r[0]),null==e.right&&(e.right=r[1]),null==e.top&&(e.top=r[2]),null==e.bottom&&(e.bottom=r[3]),null==e.header&&(e.header=r[4]),null==e.footer&&(e.footer=r[5])}}function fc(e,t,r){var a=r.revssf[null!=t.z?t.z:"General"],n=60,s=e.length;if(null==a&&r.ssf)for(;n<392;++n)if(null==r.ssf[n]){xe(t.z,n),r.ssf[n]=t.z,r.revssf[t.z]=a=n;break}for(n=0;n!=s;++n)if(e[n].numFmtId===a)return n;return e[s]={numFmtId:a,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1},s}function hc(e,t,r,a,n,s,i){try{a.cellNF&&(e.z=G[t])}catch(e){if(a.WTF)throw e}if("z"!==e.t||a.cellStyles){if("d"===e.t&&"string"==typeof e.v&&(e.v=Xe(e.v)),(!a||!1!==a.cellText)&&"z"!==e.t)try{if(null==G[t]&&xe(ke[t]||"General",t),"e"===e.t)e.w=e.w||tn[e.v];else if(0===t)if("n"===e.t)(0|e.v)===e.v?e.w=e.v.toString(10):e.w=J(e.v);else if("d"===e.t){var o=We(e.v,!!i);e.w=(0|o)===o?o.toString(10):J(o)}else{if(void 0===e.v)return"";e.w=q(e.v,sc)}else"d"===e.t?e.w=be(t,We(e.v,!!i),sc):e.w=be(t,e.v,sc)}catch(e){if(a.WTF)throw e}if(a.cellStyles&&null!=r)try{e.s=s.Fills[r],e.s.fgColor&&e.s.fgColor.theme&&!e.s.fgColor.rgb&&(e.s.fgColor.rgb=Ei(n.themeElements.clrScheme[e.s.fgColor.theme].rgb,e.s.fgColor.tint||0),a.WTF&&(e.s.fgColor.raw_rgb=n.themeElements.clrScheme[e.s.fgColor.theme].rgb)),e.s.bgColor&&e.s.bgColor.theme&&(e.s.bgColor.rgb=Ei(n.themeElements.clrScheme[e.s.bgColor.theme].rgb,e.s.bgColor.tint||0),a.WTF&&(e.s.bgColor.raw_rgb=n.themeElements.clrScheme[e.s.bgColor.theme].rgb))}catch(e){if(a.WTF&&s.Fills)throw e}}}function uc(e,t,r){if(e&&e["!ref"]){var a=ua(e["!ref"]);if(a.e.c/g,pc=/<(?:\w+:)?hyperlink [^<>]*>/gm,mc=/"(\w*:\w*)"/,vc=/<(?:\w+:)?col\b[^<>]*[\/]?>/g,gc=/<(?:\w+:)?autoFilter[^>]*/g,bc=/<(?:\w+:)?pageMargins[^<>]*\/>/g,wc=/<(?:\w+:)?sheetPr\b[^<>]*?\/>/;function Tc(e,t,r,a){var n=Ft(e);r.Sheets[a]||(r.Sheets[a]={}),n.codeName&&(r.Sheets[a].CodeName=Lt(Zt(n.codeName)))}var yc=["objects","scenarios","selectLockedCells","selectUnlockedCells"],Ec=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"],kc=/<(?:\w:)?sheetView(?:[^<>a-z][^<>]*)?\/?>/g;function _c(e,t,r,a,n,s,i){if(e.c&&r["!comments"].push([t,e.c]),(void 0===e.v||"z"===e.t&&!(a||{}).sheetStubs)&&"string"!=typeof e.f&&void 0===e.z)return"";var o="",c=e.t,l=e.v;if("z"!==e.t)switch(e.t){case"b":o=e.v?"1":"0";break;case"n":isNaN(e.v)?(e.t="e",o=tn[e.v=36]):isFinite(e.v)?o=""+e.v:(e.t="e",o=tn[e.v=7]);break;case"e":o=tn[e.v];break;case"d":if(a&&a.cellDates){var f=Xe(e.v,i);o=f.toISOString(),f.getUTCFullYear()<1900&&(o=o.slice(o.indexOf("T")+1).replace("Z",""))}else(e=Ke(e)).t="n",o=""+(e.v=We(Xe(e.v,i),i));void 0===e.z&&(e.z=G[14]);break;default:o=e.v}var h="z"==e.t||null==e.v?"":ar("v",Wt(o)),u={r:t},d=fc(a.cellXfs,e,a);switch(0!==d&&(u.s=d),e.t){case"n":case"z":break;case"d":u.t="d";break;case"b":u.t="b";break;case"e":u.t="e";break;default:if(null==e.v){delete e.t;break}if(e.v.length>32767)throw new Error("Text length must not exceed 32767 characters");if(a&&a.bookSST){h=ar("v",""+oc(a.Strings,e.v,a.revStrings)),u.t="s";break}u.t="str"}if(e.t!=c&&(e.t=c,e.v=l),"string"==typeof e.f&&e.f){var p=e.F&&e.F.slice(0,t.length)==t?{t:"array",ref:e.F}:null;h=sr("f",Wt(e.f),p)+(null!=e.v?h:"")}return e.l&&(e.l.display=Wt(o),r["!links"].push([t,e.l])),e.D&&(u.cm=1),sr("c",h,u)}var Sc=function(){var e=/<(?:\w+:)?c[ \/>]/,t=/<\/(?:\w+:)?row>/,r=/r=["']([^"']*)["']/,a=/ref=["']([^"']*)["']/;return function(n,s,i,o,c,l,f){for(var h,u,d,p,m,v=0,g="",b=[],w=[],T=0,y=0,E=0,k="",_=0,S=0,x=0,A=0,C=Array.isArray(l.CellXf),I=[],O=[],R=null!=s["!data"],N=[],F={},D=!1,P=!!i.sheetStubs,M=!!((f||{}).WBProps||{}).date1904,L=n.split(t),U=0,B=L.length;U!=B;++U){var W=(g=L[U].trim()).length;if(0!==W){var z=0;e:for(v=0;v":if("/"!=g[v-1]){++v;break e}if(i&&i.cellStyles){if(_=null!=(u=Ft(g.slice(z,v),!0)).r?parseInt(u.r,10):_+1,S=-1,i.sheetRows&&i.sheetRows<_)continue;F={},D=!1,u.ht&&(D=!0,F.hpt=parseFloat(u.ht),F.hpx=Pi(F.hpt)),u.hidden&&Gt(u.hidden)&&(D=!0,F.hidden=!0),null!=u.outlineLevel&&(D=!0,F.level=+u.outlineLevel),D&&(N[_-1]=F)}break;case"<":z=v}if(z>=v)break;if(_=null!=(u=Ft(g.slice(z,v),!0)).r?parseInt(u.r,10):_+1,S=-1,!(i.sheetRows&&i.sheetRows<_)){i.nodim||(o.s.r>_-1&&(o.s.r=_-1),o.e.r<_-1&&(o.e.r=_-1)),i&&i.cellStyles&&(F={},D=!1,u.ht&&(D=!0,F.hpt=parseFloat(u.ht),F.hpx=Pi(F.hpt)),u.hidden&&Gt(u.hidden)&&(D=!0,F.hidden=!0),null!=u.outlineLevel&&(D=!0,F.level=+u.outlineLevel),D&&(N[_-1]=F)),b=g.slice(v).split(e);for(var H=0;H!=b.length&&"<"==b[H].trim().charAt(0);++H);for(b=b.slice(H),v=0;v!=b.length;++v)if(0!==(g=b[v].trim()).length){if(w=g.match(r),T=v,y=0,E=0,g="":"")+g,null!=w&&2===w.length){for(T=0,k=w[1],y=0;y!=k.length&&!((E=k.charCodeAt(y)-64)<1||E>26);++y)T=26*T+E;S=--T}else++S;for(y=0;y!=g.length&&62!==g.charCodeAt(y);++y);if(++y,(u=Ft(g.slice(0,y),!0)).r||(u.r=oa({r:_-1,c:S})),k=g.slice(y),h={t:""},null!=(w=ht(k,"v"))&&""!==w[1]&&(h.v=Lt(w[1])),i.cellFormula){if(null!=(w=ht(k,"f"))){if(""==w[1])w[0].indexOf('t="shared"')>-1&&O[(p=Ft(w[0])).si]&&(h.f=po(O[p.si][1],O[p.si][2],u.r));else if(h.f=Lt(Zt(w[1]),!0),i.xlfn||(h.f=mo(h.f)),w[0].indexOf('t="array"')>-1)h.F=(k.match(a)||[])[1],h.F.indexOf(":")>-1&&I.push([ua(h.F),h.F]);else if(w[0].indexOf('t="shared"')>-1){p=Ft(w[0]);var V=Lt(Zt(w[1]));i.xlfn||(V=mo(V)),O[parseInt(p.si,10)]=[p,V,u.r]}}else(w=k.match(/]*\/>/))&&O[(p=Ft(w[0])).si]&&(h.f=po(O[p.si][1],O[p.si][2],u.r));var $=ia(u.r);for(y=0;y=I[y][0].s.r&&$.r<=I[y][0].e.r&&$.c>=I[y][0].s.c&&$.c<=I[y][0].e.c&&(h.F=I[y][1])}if(null==u.t&&void 0===h.v)if(h.f||h.F)h.v=0,h.t="n";else{if(!P)continue;h.t="z"}else h.t=u.t||"n";switch(o.s.c>S&&(o.s.c=S),o.e.cj.r&&(o.s.r=j.r),o.e.r0&&(s["!rows"]=N)}}();function xc(e,t,r,a){var n,s=[At,sr("worksheet",null,{xmlns:fr[0],"xmlns:r":lr.r})],i=r.SheetNames[e],o="",c=r.Sheets[i];null==c&&(c={});var l=c["!ref"]||"A1",f=ua(l);if(f.e.c>16383||f.e.r>1048575){if(t.WTF)throw new Error("Range "+l+" exceeds format limit A1:XFD1048576");f.e.c=Math.min(f.e.c,16383),f.e.r=Math.min(f.e.c,1048575),l=la(f)}a||(a={}),c["!comments"]=[];var h=[];!function(e,t,r,a,n){var s=!1,i={},o=null;if("xlsx"!==a.bookType&&t.vbaraw){var c=t.SheetNames[r];try{t.Workbook&&(c=t.Workbook.Sheets[r].CodeName||c)}catch(e){}s=!0,i.codeName=Jt(Wt(c))}if(e&&e["!outline"]){var l={summaryBelow:1,summaryRight:1};e["!outline"].above&&(l.summaryBelow=0),e["!outline"].left&&(l.summaryRight=0),o=(o||"")+sr("outlinePr",null,l)}(s||o)&&(n[n.length]=sr("sheetPr",o,i))}(c,r,e,t,s),s[s.length]=sr("dimension",null,{ref:l}),s[s.length]=function(e,t,r,a){var n={workbookViewId:"0"};return(((a||{}).Workbook||{}).Views||[])[0]&&(n.rightToLeft=a.Workbook.Views[0].RTL?"1":"0"),sr("sheetViews",sr("sheetView",null,n),{})}(0,0,0,r),t.sheetFormat&&(s[s.length]=sr("sheetFormatPr",null,{defaultRowHeight:t.sheetFormat.defaultRowHeight||"16",baseColWidth:t.sheetFormat.baseColWidth||"10",outlineLevelRow:t.sheetFormat.outlineLevelRow||"7"})),null!=c["!cols"]&&c["!cols"].length>0&&(s[s.length]=function(e,t){for(var r,a=[""],n=0;n!=t.length;++n)(r=t[n])&&(a[a.length]=sr("col",null,cc(n,r)));return a[a.length]="",a.join("")}(0,c["!cols"])),s[n=s.length]="",c["!links"]=[],null!=c["!ref"]&&(o=function(e,t,r,a){var n,s,i=[],o=[],c=ua(e["!ref"]),l="",f="",h=[],u=0,d=0,p=e["!rows"],m=null!=e["!data"],v={r:f},g=-1,b=(((a||{}).Workbook||{}).WBProps||{}).date1904;for(d=c.s.c;d<=c.e.c;++d)h[d]=sa(d);for(u=c.s.r;u<=c.e.r;++u){for(o=[],f=aa(u),d=c.s.c;d<=c.e.c;++d){n=h[d]+f;var w=m?(e["!data"][u]||[])[d]:e[n];void 0!==w&&null!=(l=_c(w,n,e,t,0,0,b))&&o.push(l)}(o.length>0||p&&p[u])&&(v={r:f},p&&p[u]&&((s=p[u]).hidden&&(v.hidden=1),g=-1,s.hpx?g=Di(s.hpx):s.hpt&&(g=s.hpt),g>-1&&(v.ht=g,v.customHeight=1),s.level&&(v.outlineLevel=s.level)),i[i.length]=sr("row",o.join(""),v))}if(p)for(;u-1&&(v.ht=g,v.customHeight=1),s.level&&(v.outlineLevel=s.level),i[i.length]=sr("row","",v));return i.join("")}(c,t,0,r),o.length>0&&(s[s.length]=o)),s.length>n+1&&(s[s.length]="",s[n]=s[n].replace("/>",">")),c["!protect"]&&(s[s.length]=function(e){var t={sheet:1};return yc.forEach((function(r){null!=e[r]&&e[r]&&(t[r]="1")})),Ec.forEach((function(r){null==e[r]||e[r]||(t[r]="0")})),e.password&&(t.password=bi(e.password).toString(16).toUpperCase()),sr("sheetProtection",null,t)}(c["!protect"])),null!=c["!autofilter"]&&(s[s.length]=function(e,t,r,a){var n="string"==typeof e.ref?e.ref:la(e.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var s=r.Workbook.Names,i=ca(n);i.s.r==i.e.r&&(i.e.r=ca(t["!ref"]).e.r,n=la(i));for(var o=0;o0&&(s[s.length]=function(e){if(0===e.length)return"";for(var t='',r=0;r!=e.length;++r)t+='';return t+""}(c["!merges"]));var u,d,p=-1,m=-1;return c["!links"].length>0&&(s[s.length]="",c["!links"].forEach((function(e){e[1].Target&&(u={ref:e[0]},"#"!=e[1].Target.charAt(0)&&(m=un(a,-1,Wt(e[1].Target).replace(/#[\s\S]*$/,""),cn.HLINK),u["r:id"]="rId"+m),(p=e[1].Target.indexOf("#"))>-1&&(u.location=Wt(e[1].Target.slice(p+1))),e[1].Tooltip&&(u.tooltip=Wt(e[1].Tooltip)),u.display=e[1].display,s[s.length]=sr("hyperlink",null,u))})),s[s.length]=""),delete c["!links"],null!=c["!margins"]&&(s[s.length]=(lc(d=c["!margins"]),sr("pageMargins",null,d))),t&&!t.ignoreEC&&null!=t.ignoreEC||(s[s.length]=ar("ignoredErrors",sr("ignoredError",null,{numberStoredAsText:1,sqref:l}))),h.length>0&&(m=un(a,-1,"../drawings/drawing"+(e+1)+".xml",cn.DRAW),s[s.length]=sr("drawing",null,{"r:id":"rId"+m}),c["!drawing"]=h),c["!comments"].length>0&&(m=un(a,-1,"../drawings/vmlDrawing"+(e+1)+".vml",cn.VML),s[s.length]=sr("legacyDrawing",null,{"r:id":"rId"+m}),c["!legacy"]=m),s.length>1&&(s[s.length]="",s[1]=s[1].replace("/>",">")),s.join("")}function Ac(e,t,r,a){var n=function(e,t,r){var a=Kr(145),n=(r["!rows"]||[])[e]||{};a.write_shift(4,e),a.write_shift(4,0);var s=320;n.hpx?s=20*Di(n.hpx):n.hpt&&(s=20*n.hpt),a.write_shift(2,s),a.write_shift(1,0);var i=0;n.level&&(i|=n.level),n.hidden&&(i|=16),(n.hpx||n.hpt)&&(i|=32),a.write_shift(1,i),a.write_shift(1,0);var o=0,c=a.l;a.l+=4;for(var l={r:e,c:0},f=null!=r["!data"],h=0;h<16;++h)if(!(t.s.c>h+1<<10||t.e.ca.l?a.slice(0,a.l):a}(a,r,t);(n.length>17||(t["!rows"]||[])[a])&&Jr(e,0,n)}var Cc=La,Ic=Ua;function Oc(e,t,r){return null==r&&(r=Kr(9)),_a(t,r),r.write_shift(1,e.v),r}function Rc(e,t,r){return null==r&&(r=Kr(8)),xa(t,r),r.write_shift(1,e.v),r.write_shift(2,0),r.write_shift(1,0),r}function Nc(e){return[Sa(e),Ba(e),"n"]}var Fc=La,Dc=Ua,Pc=["left","right","top","bottom","header","footer"];function Mc(e,t,r,a,n,s,i,o){var c={r:r,c:a};if(t.c&&s["!comments"].push([oa(c),t.c]),void 0===t.v)return!1;var l="";switch(t.t){case"b":l=t.v?"1":"0";break;case"d":(t=Ke(t)).z=t.z||G[14],t.v=We(Xe(t.v,o),o),t.t="n";break;case"n":case"e":l=""+t.v;break;default:l=t.v}switch(c.s=fc(n.cellXfs,t,n),t.l&&s["!links"].push([oa(c),t.l]),t.t){case"s":case"str":return n.bookSST?(l=oc(n.Strings,null==t.v?"":String(t.v),n.revStrings),c.t="s",c.v=l,i?Jr(e,18,function(e,t,r){return null==r&&(r=Kr(8)),xa(t,r),r.write_shift(4,t.v),r}(0,c)):Jr(e,7,function(e,t,r){return null==r&&(r=Kr(12)),_a(t,r),r.write_shift(4,t.v),r}(0,c))):(c.t="str",i?Jr(e,17,function(e,t,r){var a=null==e.v?"":String(e.v);return null==r&&(r=Kr(8+4*a.length)),xa(t,r),wa(a,r),r.length>r.l?r.slice(0,r.l):r}(t,c)):Jr(e,6,function(e,t,r){var a=null==e.v?"":String(e.v);return null==r&&(r=Kr(12+4*e.v.length)),_a(t,r),wa(a,r),r.length>r.l?r.slice(0,r.l):r}(t,c))),!0;case"n":return t.v==(0|t.v)&&t.v>-1e3&&t.v<1e3?i?Jr(e,13,function(e,t,r){return null==r&&(r=Kr(8)),xa(t,r),Pa(e.v,r),r}(t,c)):Jr(e,2,function(e,t,r){return null==r&&(r=Kr(12)),_a(t,r),Pa(e.v,r),r}(t,c)):isNaN(t.v)?i?Jr(e,14,Rc({t:"e",v:36},c)):Jr(e,3,Oc({t:"e",v:36},c)):isFinite(t.v)?i?Jr(e,16,function(e,t,r){return null==r&&(r=Kr(12)),xa(t,r),Wa(e.v,r),r}(t,c)):Jr(e,5,function(e,t,r){return null==r&&(r=Kr(16)),_a(t,r),Wa(e.v,r),r}(t,c)):i?Jr(e,14,Rc({t:"e",v:7},c)):Jr(e,3,Oc({t:"e",v:7},c)),!0;case"b":return c.t="b",i?Jr(e,15,function(e,t,r){return null==r&&(r=Kr(5)),xa(t,r),r.write_shift(1,e.v?1:0),r}(t,c)):Jr(e,4,function(e,t,r){return null==r&&(r=Kr(9)),_a(t,r),r.write_shift(1,e.v?1:0),r}(t,c)),!0;case"e":return c.t="e",i?Jr(e,14,Rc(t,c)):Jr(e,3,Oc(t,c)),!0}return i?Jr(e,12,function(e,t,r){return null==r&&(r=Kr(4)),xa(t,r)}(0,c)):Jr(e,1,function(e,t,r){return null==r&&(r=Kr(8)),_a(t,r)}(0,c)),!0}function Lc(e,t,r,a){var n=Zr(),s=r.SheetNames[e],i=r.Sheets[s]||{},o=s;try{r&&r.Workbook&&(o=r.Workbook.Sheets[e].CodeName||o)}catch(e){}var c,l,f=ua(i["!ref"]||"A1");if(f.e.c>16383||f.e.r>1048575){if(t.WTF)throw new Error("Range "+(i["!ref"]||"A1")+" exceeds format limit A1:XFD1048576");f.e.c=Math.min(f.e.c,16383),f.e.r=Math.min(f.e.c,1048575)}return i["!links"]=[],i["!comments"]=[],Jr(n,129),(r.vbaraw||i["!outline"])&&Jr(n,147,function(e,t,r){null==r&&(r=Kr(84+4*e.length));var a=192;t&&(t.above&&(a&=-65),t.left&&(a&=-129)),r.write_shift(1,a);for(var n=1;n<3;++n)r.write_shift(1,0);return za({auto:1},r),r.write_shift(-4,-1),r.write_shift(-4,-1),Ca(e,r),r.slice(0,r.l)}(o,i["!outline"])),Jr(n,148,Ic(f)),function(e,t,r){Jr(e,133),Jr(e,137,function(e,t,r){null==r&&(r=Kr(30));var a=924;return(((t||{}).Views||[])[0]||{}).RTL&&(a|=32),r.write_shift(2,a),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(4,0),r.write_shift(1,0),r.write_shift(1,0),r.write_shift(2,0),r.write_shift(2,100),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(2,0),r.write_shift(4,0),r}(0,r)),Jr(e,138),Jr(e,134)}(n,0,r.Workbook),function(e,t){t&&t["!cols"]&&(Jr(e,390),t["!cols"].forEach((function(t,r){t&&Jr(e,60,function(e,t,r){null==r&&(r=Kr(18));var a=cc(e,t);r.write_shift(-4,e),r.write_shift(-4,e),r.write_shift(4,256*(a.width||10)),r.write_shift(4,0);var n=0;return t.hidden&&(n|=1),"number"==typeof a.width&&(n|=2),t.level&&(n|=t.level<<8),r.write_shift(2,n),r}(r,t))})),Jr(e,391))}(n,i),function(e,t,r,a,n){var s,i=ua(t["!ref"]||"A1"),o="",c=[],l=(((n||{}).Workbook||{}).WBProps||{}).date1904;Jr(e,145);var f=null!=t["!data"],h=i.e.r;t["!rows"]&&(h=Math.max(i.e.r,t["!rows"].length-1));for(var u=i.s.r;u<=h;++u){o=aa(u),Ac(e,t,i,u);var d=!1;if(u<=i.e.r)for(var p=i.s.c;p<=i.e.c;++p){u===i.s.r&&(c[p]=sa(p)),s=c[p]+o;var m=f?(t["!data"][u]||[])[p]:t[s];d=!!m&&Mc(e,m,u,p,a,t,d,l)}}Jr(e,146)}(n,i,0,t,r),function(e,t){var r,a;t["!protect"]&&Jr(e,535,(r=t["!protect"],null==a&&(a=Kr(66)),a.write_shift(2,r.password?bi(r.password):0),a.write_shift(4,1),[["objects",!1],["scenarios",!1],["formatCells",!0],["formatColumns",!0],["formatRows",!0],["insertColumns",!0],["insertRows",!0],["insertHyperlinks",!0],["deleteColumns",!0],["deleteRows",!0],["selectLockedCells",!1],["sort",!0],["autoFilter",!0],["pivotTables",!0],["selectUnlockedCells",!1]].forEach((function(e){e[1]?a.write_shift(4,null==r[e[0]]||r[e[0]]?0:1):a.write_shift(4,null!=r[e[0]]&&r[e[0]]?0:1)})),a))}(n,i),function(e,t,r,a){if(t["!autofilter"]){var n=t["!autofilter"],s="string"==typeof n.ref?n.ref:la(n.ref);r.Workbook||(r.Workbook={Sheets:[]}),r.Workbook.Names||(r.Workbook.Names=[]);var i=r.Workbook.Names,o=ca(s);o.s.r==o.e.r&&(o.e.r=ca(t["!ref"]).e.r,s=la(o));for(var c=0;c0){var n=un(a,-1,"../drawings/vmlDrawing"+(r+1)+".vml",cn.VML);Jr(e,551,Fa("rId"+n)),t["!legacy"]=n}}(n,i,e,a),Jr(n,130),n.end()}var Uc=[["allowRefreshQuery",!1,"bool"],["autoCompressPictures",!0,"bool"],["backupFile",!1,"bool"],["checkCompatibility",!1,"bool"],["CodeName",""],["date1904",!1,"bool"],["defaultThemeVersion",0,"int"],["filterPrivacy",!1,"bool"],["hidePivotFieldList",!1,"bool"],["promptedSolutions",!1,"bool"],["publishItems",!1,"bool"],["refreshAllConnections",!1,"bool"],["saveExternalLinkValues",!0,"bool"],["showBorderUnselectedTables",!0,"bool"],["showInkAnnotation",!0,"bool"],["showObjects","all"],["showPivotChartFilter",!1,"bool"],["updateLinks","userSet"]],Bc=[["activeTab",0,"int"],["autoFilterDateGrouping",!0,"bool"],["firstSheet",0,"int"],["minimized",!1,"bool"],["showHorizontalScroll",!0,"bool"],["showSheetTabs",!0,"bool"],["showVerticalScroll",!0,"bool"],["tabRatio",600,"int"],["visibility","visible"]],Wc=[],zc=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];function Hc(e,t){for(var r=0;r!=e.length;++r)for(var a=e[r],n=0;n!=t.length;++n){var s=t[n];if(null==a[s[0]])a[s[0]]=s[1];else switch(s[2]){case"bool":"string"==typeof a[s[0]]&&(a[s[0]]=Gt(a[s[0]]));break;case"int":"string"==typeof a[s[0]]&&(a[s[0]]=parseInt(a[s[0]],10))}}}function Vc(e,t){for(var r=0;r!=t.length;++r){var a=t[r];if(null==e[a[0]])e[a[0]]=a[1];else switch(a[2]){case"bool":"string"==typeof e[a[0]]&&(e[a[0]]=Gt(e[a[0]]));break;case"int":"string"==typeof e[a[0]]&&(e[a[0]]=parseInt(e[a[0]],10))}}}function $c(e){Vc(e.WBProps,Uc),Vc(e.CalcPr,zc),Hc(e.WBView,Bc),Hc(e.Sheets,Wc),sc.date1904=Gt(e.WBProps.date1904)}var Gc=":][*?/\\".split("");function Xc(e,t){try{if(""==e)throw new Error("Sheet name cannot be blank");if(e.length>31)throw new Error("Sheet name cannot exceed 31 chars");if(39==e.charCodeAt(0)||39==e.charCodeAt(e.length-1))throw new Error("Sheet name cannot start or end with apostrophe (')");if("history"==e.toLowerCase())throw new Error("Sheet name cannot be 'History'");Gc.forEach((function(t){if(-1!=e.indexOf(t))throw new Error("Sheet name cannot contain : \\ / ? * [ ]")}))}catch(e){if(t)return!1;throw e}return!0}function jc(e){if(!e||!e.SheetNames||!e.Sheets)throw new Error("Invalid Workbook");if(!e.SheetNames.length)throw new Error("Workbook is empty");var t,r,a,n=e.Workbook&&e.Workbook.Sheets||[];t=e.SheetNames,r=n,a=!!e.vbaraw,t.forEach((function(e,n){Xc(e);for(var s=0;s22)throw new Error("Bad Code Name: Worksheet"+i)}}));for(var s=0;st.l?t.slice(0,t.l):t}()),Jr(r,153,function(e,t){t||(t=Kr(72));var r=0;return e&&(e.date1904&&(r|=1),e.filterPrivacy&&(r|=8)),t.write_shift(4,r),t.write_shift(4,0),Ca(e&&e.CodeName||"ThisWorkbook",t),t.slice(0,t.l)}(e.Workbook&&e.Workbook.WBProps||null)),function(e,t){if(t.Workbook&&t.Workbook.Sheets){for(var r,a,n=t.Workbook.Sheets,s=0,i=-1,o=-1;si||(Jr(e,135),Jr(e,158,(r=i,a||(a=Kr(29)),a.write_shift(-4,0),a.write_shift(-4,460),a.write_shift(4,28800),a.write_shift(4,17600),a.write_shift(4,500),a.write_shift(4,r),a.write_shift(4,r),a.write_shift(1,120),a.length>a.l?a.slice(0,a.l):a)),Jr(e,136))}}(r,e),function(e,t){Jr(e,143);for(var r=0;r!=t.SheetNames.length;++r)Jr(e,156,(a={Hidden:t.Workbook&&t.Workbook.Sheets&&t.Workbook.Sheets[r]&&t.Workbook.Sheets[r].Hidden||0,iTabID:r+1,strRelID:"rId"+(r+1),name:t.SheetNames[r]},(n=void 0)||(n=Kr(127)),n.write_shift(4,a.Hidden),n.write_shift(4,a.iTabID),Fa(a.strRelID,n),wa(a.name.slice(0,31),n),n.length>n.l?n.slice(0,n.l):n));var a,n;Jr(e,144)}(r,e),function(e,t){Jr(e,353),Jr(e,357),Jr(e,362,function(e){var t=e.SheetNames.length,r=Kr(12*t+28);r.write_shift(4,t+2),r.write_shift(4,0),r.write_shift(4,-2),r.write_shift(4,-2),r.write_shift(4,0),r.write_shift(4,-1),r.write_shift(4,-1);for(var a=0;a-1&&(a|=32,n=n.slice(6)),r.write_shift(4,a),r.write_shift(1,0),r.write_shift(4,null==e.Sheet?4294967295:e.Sheet);var s=[r,wa(n),Jo(e.Ref,t)];if(e.Comment)s.push(Oa(e.Comment));else{var i=Kr(4);i.write_shift(4,4294967295),s.push(i)}return N(s)}(r,t))}catch(e){console.error("Could not serialize defined name "+JSON.stringify(r))}}))}(r,e),Jr(r,132),r.end()}function Jc(e,t,r,a,n,s,i,o){return".bin"===t.slice(-4)?function(e,t,r,a,n,s,i){if(!e)return e;var o=t||{};a||(a={"!id":{}}),null!=w&&null==o.dense&&(o.dense=w);var c,l={};o.dense&&(l["!data"]=[]);var f,h,u,d,p,m,v,g,b,T={s:{r:2e6,c:2e6},e:{r:0,c:0}},y=[],E=!1,k=!1,_=[];o.biff=12,o["!row"]=0;var S=0,x=!1,A=[],C={},I=o.supbooks||n.supbooks||[[]];if(I.sharedf=C,I.arrayf=A,I.SheetNames=n.SheetNames||n.Sheets.map((function(e){return e.name})),!o.supbooks&&(o.supbooks=I,n.Names))for(var O=0;O0),p=-1==e[0].c?p+1:e[0].c,o.dense?(l["!data"][d]||(l["!data"][d]=[]),l["!data"][d][p]=h):l[sa(p)+g]=h,o.cellFormula){for(x=!1,S=0;S=O[0].s.r&&f.r<=O[0].e.r&&p>=O[0].s.c&&p<=O[0].e.c&&(h.F=la(O[0]),x=!0)}!x&&e.length>3&&(h.f=e[3])}if(T.s.r>f.r&&(T.s.r=f.r),T.s.c>p&&(T.s.c=p),T.e.rf.r&&(T.s.r=f.r),T.s.c>p&&(T.s.c=p),T.e.r=e.s;)F[e.e--]={width:e.w/256,hidden:!!(1&e.flags),level:e.level},P||(P=!0,Ri(e.w/256)),Ni(F[e.e+1]);break;case 551:e&&(l["!legrel"]=e);break;case 161:l["!autofilter"]={ref:la(e)};break;case 476:l["!margins"]=e;break;case 147:n.Sheets[r]||(n.Sheets[r]={}),e.name&&(n.Sheets[r].CodeName=e.name),(e.above||e.left)&&(l["!outline"]={above:e.above,left:e.left});break;case 137:n.Views||(n.Views=[{}]),n.Views[0]||(n.Views[0]={}),e.RTL&&(n.Views[0].RTL=!0);break;case 485:case 64:case 1053:case 151:case 152:case 175:case 644:case 625:case 562:case 396:case 1112:case 1146:case 471:case 1050:case 649:case 1105:case 589:case 607:case 564:case 1055:case 168:case 174:case 1180:case 499:case 507:case 550:case 171:case 167:case 1177:case 169:case 1181:case 552:case 661:case 639:case 478:case 537:case 477:case 536:case 1103:case 680:case 1104:case 1024:case 663:case 535:case 678:case 504:case 1043:case 428:case 170:case 3072:case 50:case 2070:case 1045:break;case 35:E=!0;break;case 36:E=!1;break;case 37:y.push(w),E=!0;break;case 38:y.pop(),E=!1;break;default:if(t.T);else if(!E||o.WTF)throw new Error("Unexpected record 0x"+w.toString(16))}}),o),delete o.supbooks,delete o["!row"],!l["!ref"]&&(T.s.r<2e6||c&&(c.e.r>0||c.e.c>0||c.s.r>0||c.s.c>0))&&(l["!ref"]=la(c||T)),o.sheetRows&&l["!ref"]){var L=ua(l["!ref"]);o.sheetRows<=+L.e.r&&(L.e.r=o.sheetRows-1,L.e.r>T.e.r&&(L.e.r=T.e.r),L.e.rT.e.c&&(L.e.c=T.e.c),L.e.c0&&(l["!merges"]=_),F.length>0&&(l["!cols"]=F),D.length>0&&(l["!rows"]=D),a["!id"][l["!legrel"]]&&(l["!legdrawel"]=a["!id"][l["!legrel"]]),l}(e,a,r,n,s,i,o):function(e,t,r,a,n,s,i){if(!e)return e;a||(a={"!id":{}}),null!=w&&null==t.dense&&(t.dense=w);var o={};t.dense&&(o["!data"]=[]);var c={s:{r:2e6,c:2e6},e:{r:0,c:0}},l="",f="",h=ht(e,"sheetData");h?(l=e.slice(0,h.index),f=e.slice(h.index+h[0].length)):l=f=e;var u=l.match(wc);u?Tc(u[0],0,n,r):(u=ht(l,"sheetPr"))&&function(e,t,r,a,n){Tc(e.slice(0,e.indexOf(">")),0,a,n)}(u[0],u[1],0,n,r);var d=(l.match(/<(?:\w*:)?dimension/)||{index:-1}).index;if(d>0){var p=l.slice(d,d+50).match(mc);!p||t&&t.nodim||function(e,t){var r=ua(t);r.s.r<=r.e.r&&r.s.c<=r.e.c&&r.s.r>=0&&r.s.c>=0&&(e["!ref"]=la(r))}(o,p[1])}var m=ht(l,"sheetViews");m&&m[1]&&function(e,t){t.Views||(t.Views=[{}]),(e.match(kc)||[]).forEach((function(e,r){var a=Ft(e);t.Views[r]||(t.Views[r]={}),+a.zoomScale&&(t.Views[r].zoom=+a.zoomScale),a.rightToLeft&&Gt(a.rightToLeft)&&(t.Views[r].RTL=!0)}))}(m[1],n);var v=[];if(t.cellStyles){var g=l.match(vc);g&&function(e,t){for(var r=!1,a=0;a!=t.length;++a){var n=Ft(t[a],!0);n.hidden&&(n.hidden=Gt(n.hidden));var s=parseInt(n.min,10)-1,i=parseInt(n.max,10)-1;for(n.outlineLevel&&(n.level=+n.outlineLevel||0),delete n.min,delete n.max,n.width=+n.width,!r&&n.width&&(r=!0,Ri(n.width)),Ni(n);s<=i;)e[s++]=Ke(n)}}(v,g)}h&&Sc(h[1],o,t,c,s,i,n);var b=f.match(gc);b&&(o["!autofilter"]=function(e){return{ref:(e.match(/ref="([^"]*)"/)||[])[1]}}(b[0]));var T=[],y=f.match(dc);if(y)for(d=0;d!=y.length;++d)T[d]=ua(y[d].slice(y[d].indexOf('"')+1));var E=f.match(pc);E&&function(e,t,r){for(var a=null!=e["!data"],n=0;n!=t.length;++n){var s=Ft(Zt(t[n]),!0);if(!s.ref)return;var i=((r||{})["!id"]||[])[s.id];i?(s.Target=i.Target,s.location&&(s.Target+="#"+Lt(s.location))):(s.Target="#"+Lt(s.location),i={Target:s.Target,TargetMode:"Internal"}),s.Rel=i,s.tooltip&&(s.Tooltip=s.tooltip,delete s.tooltip);for(var o=ua(s.ref),c=o.s.r;c<=o.e.r;++c)for(var l=o.s.c;l<=o.e.c;++l){var f=sa(l)+aa(c);a?(e["!data"][c]||(e["!data"][c]=[]),e["!data"][c][l]||(e["!data"][c][l]={t:"z",v:void 0}),e["!data"][c][l].l=s):(e[f]||(e[f]={t:"z",v:void 0}),e[f].l=s)}}}(o,E,a);var k,_,S,x=f.match(bc);if(x&&(o["!margins"]=(k=Ft(x[0]),_={},["left","right","top","bottom","header","footer"].forEach((function(e){k[e]&&(_[e]=parseFloat(k[e]))})),_)),(S=f.match(/legacyDrawing r:id="(.*?)"/))&&(o["!legrel"]=S[1]),t&&t.nodim&&(c.s.c=c.s.r=0),!o["!ref"]&&c.e.c>=c.s.c&&c.e.r>=c.s.r&&(o["!ref"]=la(c)),t.sheetRows>0&&o["!ref"]){var A=ua(o["!ref"]);t.sheetRows<=+A.e.r&&(A.e.r=t.sheetRows-1,A.e.r>c.e.r&&(A.e.r=c.e.r),A.e.rc.e.c&&(A.e.c=c.e.c),A.e.c0&&(o["!cols"]=v),T.length>0&&(o["!merges"]=T),a["!id"][o["!legrel"]]&&(o["!legdrawel"]=a["!id"][o["!legrel"]]),o}(e,a,r,n,s,i,o)}var qc,Qc=/\b((?:\w+:)?[\w]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g,el=/\b((?:\w+:)?[\w]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;function tl(e,t){var r=e.split(/\s+/),a=[];if(t||(a[0]=r[0]),1===r.length)return a;var n,s,i,o=e.match(Qc);if(o)for(i=0;i!=o.length;++i)-1===(s=(n=o[i].match(el))[1].indexOf(":"))?a[n[1]]=n[2].slice(1,n[2].length-1):a["xmlns:"===n[1].slice(0,6)?"xmlns"+n[1].slice(6):n[1].slice(s+1)]=n[2].slice(1,n[2].length-1);return a}function rl(e){var t={};if(1===e.split(/\s+/).length)return t;var r,a,n,s=e.match(Qc);if(s)for(n=0;n!=s.length;++n)-1===(a=(r=s[n].match(el))[1].indexOf(":"))?t[r[1]]=r[2].slice(1,r[2].length-1):t["xmlns:"===r[1].slice(0,6)?"xmlns"+r[1].slice(6):r[1].slice(a+1)]=r[2].slice(1,r[2].length-1);return t}function al(e,t,r,a){var n=a;switch((r[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":n=Gt(a);break;case"i2":case"int":n=parseInt(a,10);break;case"r4":case"float":n=parseFloat(a);break;case"date":case"dateTime.tz":n=Xe(a);break;case"i8":case"string":case"fixed":case"uuid":case"bin.base64":break;default:throw new Error("bad custprop:"+r[0])}e[Lt(t)]=n}function nl(e,t,r){if(r.cellStyles&&t.Interior){var a=t.Interior;a.Pattern&&(a.patternType=Mi[a.Pattern]||a.Pattern)}e[t.ID]=t}function sl(e,t,r,a,n,s,i,o,c,l,f){var h="General",u=a.StyleID,d={};l=l||{};var p=[],m=0;for(void 0===u&&o&&(u=o.StyleID),void 0===u&&i&&(u=i.StyleID);void 0!==s[u];){var v=s[u];if(v.nf&&(h=v.nf),v.Interior&&p.push(v.Interior),!v.Parent)break;u=v.Parent}switch(r.Type){case"Boolean":a.t="b",a.v=Gt(e);break;case"String":a.t="s",a.r=$t(Lt(e)),a.v=e.indexOf("<")>-1?Lt(t||e).replace(/<[^<>]*>/g,""):a.r;break;case"DateTime":"Z"!=e.slice(-1)&&(e+="Z"),a.v=We(Xe(e,f),f),a.v!=a.v&&(a.v=Lt(e)),h&&"General"!=h||(h="yyyy-mm-dd");case"Number":void 0===a.v&&(a.v=+e),a.t||(a.t="n");break;case"Error":a.t="e",a.v=rn[e],!1!==l.cellText&&(a.w=e);break;default:""==e&&""==t?a.t="z":(a.t="s",a.v=$t(t||e))}if(function(e,t,r,a){if("z"!==e.t){if(!r||!1!==r.cellText)try{"e"===e.t?e.w=e.w||tn[e.v]:"General"===t?"n"===e.t?(0|e.v)===e.v?e.w=e.v.toString(10):e.w=J(e.v):e.w=q(e.v):e.w=function(e,t,r){var a=qc[e]||Lt(e);return"General"===a?q(t):be(a,t,{date1904:!!r})}(t||"General",e.v,a)}catch(e){if(r.WTF)throw e}try{var n=qc[t]||t||"General";if(r.cellNF&&(e.z=n),r.cellDates&&"n"==e.t&&me(n)){var s=Y(e.v+(a?1462:0));s&&(e.t="d",e.v=new Date(Date.UTC(s.y,s.m-1,s.d,s.H,s.M,s.S,s.u)))}}catch(e){if(r.WTF)throw e}}}(a,h,l,f),!1!==l.cellFormula)if(a.Formula){var g=Lt(a.Formula);61==g.charCodeAt(0)&&(g=g.slice(1)),a.f=lo(g,n),delete a.Formula,"RC"==a.ArrayRange?a.F=lo("RC:RC",n):a.ArrayRange&&(a.F=lo(a.ArrayRange,n),c.push([ua(a.F),a.F]))}else for(m=0;m=c[m][0].s.r&&n.r<=c[m][0].e.r&&n.c>=c[m][0].s.c&&n.c<=c[m][0].e.c&&(a.F=c[m][1]);l.cellStyles&&(p.forEach((function(e){!d.patternType&&e.patternType&&(d.patternType=e.patternType)})),a.s=d),void 0!==a.StyleID&&(a.ixfe=a.StyleID)}function il(e){e.t=e.v||"",e.t=e.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n"),e.v=e.w=e.ixfe=void 0}function ol(e,t){var r=t||{};ye();var n=m(or(e));"binary"!=r.type&&"array"!=r.type&&"base64"!=r.type||(n=void 0!==a?a.utils.decode(65001,u(n)):Zt(n));var s,i=n.slice(0,1024).toLowerCase(),o=!1;if((1023&(i=i.replace(/".*?"/g,"")).indexOf(">"))>Math.min(1023&i.indexOf(","),1023&i.indexOf(";"))){var c=Ke(r);return c.type="string",Qs.to_workbook(n,c)}if(-1==i.indexOf("=0&&(o=!0)})),o)return function(e,t){var r=pt(e,"table");if(!r||0==r.length)throw new Error("Invalid HTML: could not find ");if(1==r.length){var a=pa(Nl(r[0],t),t);return a.bookType="html",a}var n=bh();return r.forEach((function(e,r){wh(n,Nl(e,t),"Sheet"+(r+1))})),n.bookType="html",n}(n,r);qc={"General Number":"General","General Date":G[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":G[15],"Short Date":G[14],"Long Time":G[19],"Medium Time":G[18],"Short Time":G[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:G[2],Standard:G[4],Percent:G[10],Scientific:G[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var l,f=[];null!=w&&null==r.dense&&(r.dense=w);var h={},d=[],p={},v="";r.dense&&(p["!data"]=[]);var g,b={},T={},y=tl(''),E=0,k=0,_=0,S={s:{r:2e6,c:2e6},e:{r:0,c:0}},x={},A={},C="",I=0,O=[],R={},N={},F=0,D=[],P=[],M={},L=[],U=!1,B=[],W=[],z={},H=0,V=0,$={Sheets:[],WBProps:{date1904:!1}},X={};cr.lastIndex=0,n=ct(n,"\x3c!--","--\x3e");for(var j,K="";s=cr.exec(n);)switch(s[3]=(K=s[3]).toLowerCase()){case"data":if("data"==K){if("/"===s[1]){if((l=f.pop())[0]!==s[3])throw new Error("Bad state: "+l.join("|"))}else"/"!==s[0].charAt(s[0].length-2)&&f.push([s[3],!0]);break}if(f[f.length-1][1])break;"/"===s[1]?sl(n.slice(E,s.index),C,y,"comment"==f[f.length-1][0]?M:b,{c:k,r:_},x,L[k],T,B,r,$.WBProps.date1904):(C="",y=tl(s[0]),E=s.index+s[0].length);break;case"cell":if("/"===s[1])if(P.length>0&&(b.c=P),(!r.sheetRows||r.sheetRows>_)&&void 0!==b.v&&(r.dense?(p["!data"][_]||(p["!data"][_]=[]),p["!data"][_][k]=b):p[sa(k)+aa(_)]=b),b.HRef&&(b.l={Target:Lt(b.HRef)},b.HRefScreenTip&&(b.l.Tooltip=b.HRefScreenTip),delete b.HRef,delete b.HRefScreenTip),(b.MergeAcross||b.MergeDown)&&(H=k+(0|parseInt(b.MergeAcross,10)),V=_+(0|parseInt(b.MergeDown,10)),(H>k||V>_)&&O.push({s:{c:k,r:_},e:{c:H,r:V}})),r.sheetStubs)if(b.MergeAcross||b.MergeDown){for(var Y=k;Y<=H;++Y)for(var Z=_;Z<=V;++Z)(Y>k||Z>_)&&(r.dense?(p["!data"][Z]||(p["!data"][Z]=[]),p["!data"][Z][Y]={t:"z"}):p[sa(Y)+aa(Z)]={t:"z"});k=H+1}else++k;else b.MergeAcross?k=H+1:++k;else(b=rl(s[0])).Index&&(k=+b.Index-1),kS.e.c&&(S.e.c=k),"/>"===s[0].slice(-2)&&++k,P=[];break;case"row":"/"===s[1]||"/>"===s[0].slice(-2)?(_S.e.r&&(S.e.r=_),"/>"===s[0].slice(-2)&&(T=tl(s[0])).Index&&(_=+T.Index-1),k=0,++_):((T=tl(s[0])).Index&&(_=+T.Index-1),z={},("0"==T.AutoFitHeight||T.Height)&&(z.hpx=parseInt(T.Height,10),z.hpt=Di(z.hpx),W[_]=z),"1"==T.Hidden&&(z.hidden=!0,W[_]=z));break;case"worksheet":if("/"===s[1]){if((l=f.pop())[0]!==s[3])throw new Error("Bad state: "+l.join("|"));d.push(v),S.s.r<=S.e.r&&S.s.c<=S.e.c&&(p["!ref"]=la(S),r.sheetRows&&r.sheetRows<=S.e.r&&(p["!fullref"]=p["!ref"],S.e.r=r.sheetRows-1,p["!ref"]=la(S))),O.length&&(p["!merges"]=O),L.length>0&&(p["!cols"]=L),W.length>0&&(p["!rows"]=W),h[v]=p}else S={s:{r:2e6,c:2e6},e:{r:0,c:0}},_=k=0,f.push([s[3],!1]),l=tl(s[0]),v=Lt(l.Name),p={},r.dense&&(p["!data"]=[]),O=[],B=[],W=[],X={name:v,Hidden:0},$.Sheets.push(X);break;case"table":if("/"===s[1]){if((l=f.pop())[0]!==s[3])throw new Error("Bad state: "+l.join("|"))}else{if("/>"==s[0].slice(-2))break;f.push([s[3],!1]),L=[],U=!1}break;case"style":"/"===s[1]?nl(x,A,r):A=tl(s[0]);break;case"numberformat":A.nf=Lt(tl(s[0]).Format||"General"),qc[A.nf]&&(A.nf=qc[A.nf]);for(var J=0;392!=J&&G[J]!=A.nf;++J);if(392==J)for(J=57;392!=J;++J)if(null==G[J]){xe(A.nf,J);break}break;case"column":if("table"!==f[f.length-1][0])break;if("/"===s[1])break;if((g=tl(s[0])).Hidden&&(g.hidden=!0,delete g.Hidden),g.Width&&(g.wpx=parseInt(g.Width,10)),!U&&g.wpx>10){U=!0,xi=ki;for(var q=0;q-1?"_xlnm."+j:j),Ref:lo(ee.RefersTo.slice(1),{r:0,c:0})};$.Sheets.length>0&&(te.Sheet=$.Sheets.length-1),$.Names.push(te);break;case"namedcell":case"b":case"i":case"u":case"s":case"em":case"h2":case"h3":case"sub":case"sup":case"span":case"alignment":case"borders":case"border":case"protection":case"paragraphs":case"name":case"pixelsperinch":case"null":break;case"font":if("/>"===s[0].slice(-2))break;"/"===s[1]?C+=n.slice(I,s.index):I=s.index+s[0].length;break;case"interior":if(!r.cellStyles)break;A.Interior=tl(s[0]);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":case"contentstatus":case"identifier":case"language":case"appname":if("/>"===s[0].slice(-2))break;"/"===s[1]?Cn(R,K,n.slice(F,s.index)):F=s.index+s[0].length;break;case"styles":case"workbook":if("/"===s[1]){if((l=f.pop())[0]!==s[3])throw new Error("Bad state: "+l.join("|"))}else f.push([s[3],!1]);break;case"comment":if("/"===s[1]){if((l=f.pop())[0]!==s[3])throw new Error("Bad state: "+l.join("|"));il(M),P.push(M)}else f.push([s[3],!1]),Gt((l=tl(s[0])).ShowAlways||"0")||(P.hidden=!0),M={a:l.Author};break;case"autofilter":if("/"===s[1]){if((l=f.pop())[0]!==s[3])throw new Error("Bad state: "+l.join("|"))}else if("/"!==s[0].charAt(s[0].length-2)){var re=tl(s[0]);p["!autofilter"]={ref:lo(re.Range).replace(/\$/g,"")},f.push([s[3],!0])}break;case"datavalidation":if("/"===s[1]){if((l=f.pop())[0]!==s[3])throw new Error("Bad state: "+l.join("|"))}else"/"!==s[0].charAt(s[0].length-2)&&f.push([s[3],!0]);break;case"componentoptions":case"documentproperties":case"customdocumentproperties":case"officedocumentsettings":case"pivottable":case"pivotcache":case"names":case"mapinfo":case"pagebreaks":case"querytable":case"sorting":case"schema":case"conditionalformatting":case"smarttagtype":case"smarttags":case"excelworkbook":case"workbookoptions":case"worksheetoptions":if("/"===s[1]){if((l=f.pop())[0]!==s[3])throw new Error("Bad state: "+l.join("|"))}else"/"!==s[0].charAt(s[0].length-2)&&f.push([s[3],!0]);break;default:if(0==f.length&&"document"==s[3])return $l(n,r);if(0==f.length&&"uof"==s[3])return $l(n,r);var ae=!0;switch(f[f.length-1][0]){case"officedocumentsettings":switch(s[3]){case"allowpng":case"removepersonalinformation":case"downloadcomponents":case"locationofcomponents":case"colors":case"color":case"index":case"rgb":case"targetscreensize":case"readonlyrecommended":break;default:ae=!1}break;case"componentoptions":switch(s[3]){case"toolbar":case"hideofficelogo":case"spreadsheetautofit":case"label":case"caption":case"maxheight":case"maxwidth":case"nextsheetnumber":break;default:ae=!1}break;case"excelworkbook":switch(s[3]){case"date1904":$.WBProps.date1904=!0;break;case"hidehorizontalscrollbar":case"hideverticalscrollbar":case"hideworkbooktabs":case"windowheight":case"windowwidth":case"windowtopx":case"windowtopy":case"tabratio":case"protectstructure":case"protectwindow":case"protectwindows":case"activesheet":case"displayinknotes":case"firstvisiblesheet":case"supbook":case"sheetname":case"sheetindex":case"sheetindexfirst":case"sheetindexlast":case"dll":case"acceptlabelsinformulas":case"donotsavelinkvalues":case"iteration":case"maxiterations":case"maxchange":case"path":case"xct":case"count":case"selectedsheets":case"calculation":case"uncalced":case"startupprompt":case"crn":case"externname":case"formula":case"colfirst":case"collast":case"wantadvise":case"boolean":case"error":case"text":case"ole":case"noautorecover":case"publishobjects":case"donotcalculatebeforesave":case"number":case"refmoder1c1":case"embedsavesmarttags":break;default:ae=!1}break;case"workbookoptions":switch(s[3]){case"owcversion":case"height":case"width":break;default:ae=!1}break;case"worksheetoptions":switch(s[3]){case"visible":if("/>"===s[0].slice(-2));else if("/"===s[1])switch(n.slice(F,s.index)){case"SheetHidden":X.Hidden=1;break;case"SheetVeryHidden":X.Hidden=2}else F=s.index+s[0].length;break;case"header":p["!margins"]||lc(p["!margins"]={},"xlml"),isNaN(+Ft(s[0]).Margin)||(p["!margins"].header=+Ft(s[0]).Margin);break;case"footer":p["!margins"]||lc(p["!margins"]={},"xlml"),isNaN(+Ft(s[0]).Margin)||(p["!margins"].footer=+Ft(s[0]).Margin);break;case"pagemargins":var ne=Ft(s[0]);p["!margins"]||lc(p["!margins"]={},"xlml"),isNaN(+ne.Top)||(p["!margins"].top=+ne.Top),isNaN(+ne.Left)||(p["!margins"].left=+ne.Left),isNaN(+ne.Right)||(p["!margins"].right=+ne.Right),isNaN(+ne.Bottom)||(p["!margins"].bottom=+ne.Bottom);break;case"displayrighttoleft":$.Views||($.Views=[]),$.Views[0]||($.Views[0]={}),$.Views[0].RTL=!0;break;case"freezepanes":case"frozennosplit":case"splithorizontal":case"splitvertical":case"donotdisplaygridlines":case"activerow":case"activecol":case"toprowbottompane":case"leftcolumnrightpane":case"unsynced":case"print":case"printerrors":case"panes":case"scale":case"pane":case"number":case"layout":case"pagesetup":case"selected":case"protectobjects":case"enableselection":case"protectscenarios":case"validprinterinfo":case"horizontalresolution":case"verticalresolution":case"numberofcopies":case"activepane":case"toprowvisible":case"leftcolumnvisible":case"fittopage":case"rangeselection":case"papersizeindex":case"pagelayoutzoom":case"pagebreakzoom":case"filteron":case"fitwidth":case"fitheight":case"commentslayout":case"zoom":case"lefttoright":case"gridlines":case"allowsort":case"allowfilter":case"allowinsertrows":case"allowdeleterows":case"allowinsertcols":case"allowdeletecols":case"allowinserthyperlinks":case"allowformatcells":case"allowsizecols":case"allowsizerows":case"tabcolorindex":case"donotdisplayheadings":case"showpagelayoutzoom":case"blackandwhite":case"donotdisplayzeros":case"displaypagebreak":case"rowcolheadings":case"donotdisplayoutline":case"noorientation":case"allowusepivottables":case"zeroheight":case"viewablerange":case"selection":case"protectcontents":break;case"nosummaryrowsbelowdetail":p["!outline"]||(p["!outline"]={}),p["!outline"].above=!0;break;case"nosummarycolumnsrightdetail":p["!outline"]||(p["!outline"]={}),p["!outline"].left=!0;break;default:ae=!1}break;case"pivottable":case"pivotcache":switch(s[3]){case"immediateitemsondrop":case"showpagemultipleitemlabel":case"compactrowindent":case"location":case"pivotfield":case"orientation":case"layoutform":case"layoutsubtotallocation":case"layoutcompactrow":case"position":case"pivotitem":case"datatype":case"datafield":case"sourcename":case"parentfield":case"ptlineitems":case"ptlineitem":case"countofsameitems":case"item":case"itemtype":case"ptsource":case"cacheindex":case"consolidationreference":case"filename":case"reference":case"nocolumngrand":case"norowgrand":case"blanklineafteritems":case"hidden":case"subtotal":case"basefield":case"mapchilditems":case"function":case"refreshonfileopen":case"printsettitles":case"mergelabels":case"defaultversion":case"refreshname":case"refreshdate":case"refreshdatecopy":case"versionlastrefresh":case"versionlastupdate":case"versionupdateablemin":case"versionrefreshablemin":case"calculation":break;default:ae=!1}break;case"pagebreaks":switch(s[3]){case"colbreaks":case"colbreak":case"rowbreaks":case"rowbreak":case"colstart":case"colend":case"rowend":break;default:ae=!1}break;case"autofilter":switch(s[3]){case"autofiltercolumn":case"autofiltercondition":case"autofilterand":case"autofilteror":break;default:ae=!1}break;case"querytable":switch(s[3]){case"id":case"autoformatfont":case"autoformatpattern":case"querysource":case"querytype":case"enableredirections":case"refreshedinxl9":case"urlstring":case"htmltables":case"connection":case"commandtext":case"refreshinfo":case"notitles":case"nextid":case"columninfo":case"overwritecells":case"donotpromptforfile":case"textwizardsettings":case"source":case"number":case"decimal":case"thousandseparator":case"trailingminusnumbers":case"formatsettings":case"fieldtype":case"delimiters":case"tab":case"comma":case"autoformatname":case"versionlastedit":case"versionlastrefresh":break;default:ae=!1}break;case"datavalidation":switch(s[3]){case"range":case"type":case"min":case"max":case"sort":case"descending":case"order":case"casesensitive":case"value":case"errorstyle":case"errormessage":case"errortitle":case"inputmessage":case"inputtitle":case"combohide":case"inputhide":case"condition":case"qualifier":case"useblank":case"value1":case"value2":case"format":case"cellrangelist":break;default:ae=!1}break;case"sorting":case"conditionalformatting":switch(s[3]){case"range":case"type":case"min":case"max":case"sort":case"descending":case"order":case"casesensitive":case"value":case"errorstyle":case"errormessage":case"errortitle":case"cellrangelist":case"inputmessage":case"inputtitle":case"combohide":case"inputhide":case"condition":case"qualifier":case"useblank":case"value1":case"value2":case"format":break;default:ae=!1}break;case"mapinfo":case"schema":case"data":switch(s[3]){case"map":case"entry":case"range":case"xpath":case"field":case"xsdtype":case"filteron":case"aggregate":case"elementtype":case"attributetype":case"schema":case"element":case"complextype":case"datatype":case"all":case"attribute":case"extends":case"row":break;default:ae=!1}break;case"smarttags":break;default:ae=!1}if(ae)break;if(s[3].match(/!\[CDATA/))break;if(!f[f.length-1][1])throw"Unrecognized tag: "+s[3]+"|"+f.join("|");if("customdocumentproperties"===f[f.length-1][0]){if("/>"===s[0].slice(-2))break;"/"===s[1]?al(N,K,D,n.slice(F,s.index)):(D=s,F=s.index+s[0].length);break}if(r.WTF)throw"Unrecognized tag: "+s[3]+"|"+f.join("|")}var se={};return r.bookSheets||r.bookProps||(se.Sheets=h),se.SheetNames=d,se.Workbook=$,se.SSF=Ke(G),se.Props=R,se.Custprops=N,se.bookType="xlml",se}function cl(e,t){switch(zf(t=t||{}),t.type||"base64"){case"base64":return ol(E(e),t);case"binary":case"buffer":case"file":return ol(e,t);case"array":return ol(O(e),t)}}function ll(e){return sr("NamedRange",null,{"ss:Name":"_xlnm."==e.Name.slice(0,6)?e.Name.slice(6):e.Name,"ss:RefersTo":"="+ho(e.Ref,{r:0,c:0})})}function fl(e,t,r,a,n,s,i){if(!e||null==e.v&&null==e.f)return"";var o={};if(e.f&&(o["ss:Formula"]="="+Wt(ho(e.f,i))),e.F&&e.F.slice(0,t.length)==t){var c=ia(e.F.slice(t.length+1));o["ss:ArrayRange"]="RC:R"+(c.r==i.r?"":"["+(c.r-i.r)+"]")+"C"+(c.c==i.c?"":"["+(c.c-i.c)+"]")}if(e.l&&e.l.Target&&(o["ss:HRef"]=Wt(e.l.Target),e.l.Tooltip&&(o["x:HRefScreenTip"]=Wt(e.l.Tooltip))),r["!merges"])for(var l=r["!merges"],f=0;f!=l.length;++f)l[f].s.c==i.c&&l[f].s.r==i.r&&(l[f].e.c>l[f].s.c&&(o["ss:MergeAcross"]=l[f].e.c-l[f].s.c),l[f].e.r>l[f].s.r&&(o["ss:MergeDown"]=l[f].e.r-l[f].s.r));var h="",u="";switch(e.t){case"z":if(!a.sheetStubs)return"";break;case"n":h="Number",u=String(e.v);break;case"b":h="Boolean",u=e.v?"1":"0";break;case"e":h="Error",u=tn[e.v];break;case"d":h="DateTime",u=new Date(e.v).toISOString(),null==e.z&&(e.z=e.z||G[14]);break;case"s":h="String",u=((e.v||"")+"").replace(Ut,(function(e){return Mt[e]})).replace(Ht,(function(e){return"&#x"+e.charCodeAt(0).toString(16).toUpperCase()+";"}))}var d=fc(a.cellXfs,e,a);o["ss:StyleID"]="s"+(21+d),o["ss:Index"]=i.c+1;var p,m=null!=e.v?u:"",v="z"==e.t?"":''+m+"";return(e.c||[]).length>0&&(v+=(p=e.c).map((function(e){var t=sr("ss:Data",(e.t||"").replace(/(\r\n|[\r\n])/g," "),{xmlns:"http://www.w3.org/TR/REC-html40"}),r={};return e.a&&(r["ss:Author"]=e.a),p.hidden||(r["ss:ShowAlways"]="1"),sr("Comment",t,r)})).join("")),sr("Cell",v,o)}function hl(e,t){var r='"}function ul(e,t,r){var a=[],n=r.SheetNames[e],s=r.Sheets[n],i=s?function(e,t,r,a){if(!e)return"";if(!((a||{}).Workbook||{}).Names)return"";for(var n=a.Workbook.Names,s=[],i=0;i0&&a.push(""+i+""),i=s?function(e,t,r,a){if(!e["!ref"])return"";var n=ua(e["!ref"]),s=e["!merges"]||[],i=0,o=[];e["!cols"]&&e["!cols"].forEach((function(e,t){Ni(e);var r=!!e.width,a=cc(t,e),n={"ss:Index":t+1};r&&(n["ss:Width"]=Ai(a.width)),e.hidden&&(n["ss:Hidden"]="1"),o.push(sr("Column",null,n))}));for(var c=null!=e["!data"],l=n.s.r;l<=n.e.r;++l){for(var f=[hl(l,(e["!rows"]||[])[l])],h=n.s.c;h<=n.e.c;++h){var u=!1;for(i=0;i!=s.length;++i)if(!(s[i].s.c>h||s[i].s.r>l||s[i].e.c"),f.length>2&&o.push(f.join(""))}return o.join("")}(s,t):"",i.length>0&&a.push("
"+i+"
"),a.push(function(e,t,r,a){if(!e)return"";var n=[];if(e["!margins"]&&(n.push(""),e["!margins"].header&&n.push(sr("Header",null,{"x:Margin":e["!margins"].header})),e["!margins"].footer&&n.push(sr("Footer",null,{"x:Margin":e["!margins"].footer})),n.push(sr("PageMargins",null,{"x:Bottom":e["!margins"].bottom||"0.75","x:Left":e["!margins"].left||"0.7","x:Right":e["!margins"].right||"0.7","x:Top":e["!margins"].top||"0.75"})),n.push("")),a&&a.Workbook&&a.Workbook.Sheets&&a.Workbook.Sheets[r])if(a.Workbook.Sheets[r].Hidden)n.push(sr("Visible",1==a.Workbook.Sheets[r].Hidden?"SheetHidden":"SheetVeryHidden",{}));else{for(var s=0;s")}return((((a||{}).Workbook||{}).Views||[])[0]||{}).RTL&&n.push(""),e["!protect"]&&(n.push(ar("ProtectContents","True")),e["!protect"].objects&&n.push(ar("ProtectObjects","True")),e["!protect"].scenarios&&n.push(ar("ProtectScenarios","True")),null==e["!protect"].selectLockedCells||e["!protect"].selectLockedCells?null==e["!protect"].selectUnlockedCells||e["!protect"].selectUnlockedCells||n.push(ar("EnableSelection","UnlockedCells")):n.push(ar("EnableSelection","NoSelection")),[["formatCells","AllowFormatCells"],["formatColumns","AllowSizeCols"],["formatRows","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach((function(t){e["!protect"][t[0]]&&n.push("<"+t[1]+"/>")}))),0==n.length?"":sr("WorksheetOptions",n.join(""),{xmlns:hr.x})}(s,0,e,r)),s["!autofilter"]&&a.push(''),a.join("")}function dl(e,t){t||(t={}),e.SSF||(e.SSF=Ke(G)),e.SSF&&(ye(),Te(e.SSF),t.revssf=Me(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF,t.cellXfs=[],fc(t.cellXfs,{},{revssf:{General:0}}));var r=[];r.push(function(e,t){var r=[];return e.Props&&r.push(function(e,t){var r=[];return Fe(An).map((function(e){for(var t=0;t'+n.join("")+""}(e.Props,e.Custprops)),r.join("")}(e,t)),r.push(function(e){return(((e||{}).Workbook||{}).WBProps||{}).date1904?'':""}(e)),r.push(""),r.push("");for(var a=0;a'];return t.cellXfs.forEach((function(e,t){var a=[];a.push(sr("NumberFormat",null,{"ss:Format":Wt(G[e.numFmtId])}));var n={"ss:ID":"s"+(21+t)};r.push(sr("Style",a.join(""),n))})),sr("Styles",r.join(""))}(0,t),r[3]=function(e){if(!((e||{}).Workbook||{}).Names)return"";for(var t=e.Workbook.Names,r=[],a=0;a0)switch(e){case 9:case 521:case 1033:case 2057:case 47:case 405:case 225:case 406:case 312:case 404:case 10:case 133:break;default:n.enc.insitu(o)}i.push(o),r.l+=s;for(var c=Pr(r,r.l),l=yl[c],f=0;null!=l&&pl.indexOf(c)>-1;)s=Pr(r,r.l+2),f=r.l+4,2066==c?f+=4:2165!=c&&2175!=c||(f+=12),o=r.slice(f,r.l+4+s),i.push(o),r.l+=4+s,l=yl[c=Pr(r,r.l)];var h=N(i);Xr(h,0);var u=0;h.lens=[];for(var d=0;d40||(r.l-=4,t.Reserved1=r.read_shift(0,"lpstr-ansi"),r.length-r.l<=4||1907505652!==(a=r.read_shift(4))||(t.UnicodeClipboardFormat=function(e){return Ha(e,2)}(r),0==(a=r.read_shift(4))||a>40||(r.l-=4,t.Reserved2=r.read_shift(0,"lpwstr"))))}(r),t.bookProps&&!t.bookSheets)n={};else{var i=k?"buffer":"array";if(a&&a.content)n=function(e,t){var r={opts:{}},a={};null!=w&&null==t.dense&&(t.dense=w);var n={};t.dense&&(n["!data"]=[]);var s,i,o,c,l,h,u,d,p={},m={},v=null,g=[],b="",T={},y="",E={},k=[],_=[],S=[],x={Sheets:[],WBProps:{date1904:!1},Views:[{}]},A={},C=!1,I=function(e){return e<8?en[e]:e<64&&S[e-8]||en[e]},O=function(e,t,r){if((C||!(W>1))&&!(r.sheetRows&&e.r>=r.sheetRows)){if(r.cellStyles&&t.XF&&t.XF.data&&function(e,t){var r,a=e.XF.data;a&&a.patternType&&t&&t.cellStyles&&(e.s={},e.s.patternType=a.patternType,(r=yi(I(a.icvFore)))&&(e.s.fgColor={rgb:r}),(r=yi(I(a.icvBack)))&&(e.s.bgColor={rgb:r}))}(t,r),delete t.ixfe,delete t.XF,s=e,y=oa(e),m&&m.s&&m.e||(m={s:{r:0,c:0},e:{r:0,c:0}}),e.rm.e.r&&(m.e.r=e.r+1),e.c+1>m.e.c&&(m.e.c=e.c+1),r.cellFormula&&t.f)for(var a=0;ae.c||k[a][0].s.r>e.r||k[a][0].e.c>8)!==j)throw new Error("rt mismatch: "+Z+"!="+j);12==Y.r&&(e.l+=10,K-=10)}var J={};if(J=10===j?Y.f(e,K,R):ml(j,Y,e,K,R),0==W&&-1===[9,521,1033,2057].indexOf(B))continue;switch(j){case 34:r.opts.Date1904=x.WBProps.date1904=J;break;case 134:r.opts.WriteProtect=!0;break;case 47:if(R.enc||(e.l=0),R.enc=J,!t.password)throw new Error("File is password-protected");if(null==J.valid)throw new Error("Encryption scheme unsupported");if(!J.valid)throw new Error("Password is incorrect");break;case 92:R.lastuser=J;break;case 66:var q=Number(J);switch(q){case 21010:q=1200;break;case 32768:q=1e4;break;case 32769:q=1252}f(R.codepage=q),$=!0;break;case 317:R.rrtabid=J;break;case 25:R.winlocked=J;break;case 439:r.opts.RefreshAll=J;break;case 12:r.opts.CalcCount=J;break;case 16:r.opts.CalcDelta=J;break;case 17:r.opts.CalcIter=J;break;case 13:r.opts.CalcMode=J;break;case 14:r.opts.CalcPrecision=J;break;case 95:r.opts.CalcSaveRecalc=J;break;case 15:R.CalcRefMode=J;break;case 2211:r.opts.FullCalc=J;break;case 129:J.fDialog&&(n["!type"]="dialog"),J.fBelow||((n["!outline"]||(n["!outline"]={})).above=!0),J.fRight||((n["!outline"]||(n["!outline"]={})).left=!0);break;case 67:case 579:case 1091:case 224:_.push(J);break;case 430:L.push([J]),L[L.length-1].XTI=[];break;case 35:case 547:L[L.length-1].push(J);break;case 24:case 536:U={Name:J.Name,Ref:zo(J.rgce,0,null,L,R)},J.itab>0&&(U.Sheet=J.itab-1),L.names.push(U),L[0]||(L[0]=[],L[0].XTI=[]),L[L.length-1].push(J),"_xlnm._FilterDatabase"==J.Name&&J.itab>0&&J.rgce&&J.rgce[0]&&J.rgce[0][0]&&"PtgArea3d"==J.rgce[0][0][0]&&(V[J.itab-1]={ref:la(J.rgce[0][0][1][2])});break;case 22:R.ExternCount=J;break;case 23:0==L.length&&(L[0]=[],L[0].XTI=[]),L[L.length-1].XTI=L[L.length-1].XTI.concat(J),L.XTI=L.XTI.concat(J);break;case 2196:if(R.biff<8)break;null!=U&&(U.Comment=J[1]);break;case 18:n["!protect"]=J;break;case 19:0!==J&&R.WTF&&console.error("Password verifier: "+J);break;case 133:p[4==R.biff?R.snames.length:J.pos]=J,R.snames.push(J.name);break;case 10:if(--W?!C:C)break;if(m.e){if(m.e.r>0&&m.e.c>0){if(m.e.r--,m.e.c--,n["!ref"]=la(m),t.sheetRows&&t.sheetRows<=m.e.r){var Q=m.e.r;m.e.r=t.sheetRows-1,n["!fullref"]=n["!ref"],n["!ref"]=la(m),m.e.r=Q}m.e.r++,m.e.c++}N.length>0&&(n["!merges"]=N),F.length>0&&(n["!objects"]=F),D.length>0&&(n["!cols"]=D),P.length>0&&(n["!rows"]=P),x.Sheets.push(A)}""===b?T=n:a[b]=n,n={},t.dense&&(n["!data"]=[]);break;case 9:case 521:case 1033:case 2057:if(8===R.biff&&(R.biff={9:2,521:3,1033:4}[j]||{512:2,768:3,1024:4,1280:5,1536:8,2:2,7:2}[J.BIFFVer]||8),R.biffguess=0==J.BIFFVer,0==J.BIFFVer&&4096==J.dt&&(R.biff=5,$=!0,f(R.codepage=28591)),4==R.biff&&256&J.dt&&(C=!0),8==R.biff&&0==J.BIFFVer&&16==J.dt&&(R.biff=2),W++&&!C)break;if(n={},t.dense&&(n["!data"]=[]),R.biff<8&&!$&&($=!0,f(R.codepage=t.codepage||1252)),4==R.biff&&C)b=(p[R.snames.indexOf(b)+1]||{name:""}).name;else if(R.biff<5||0==J.BIFFVer&&4096==J.dt){""===b&&(b="Sheet1"),m={s:{r:0,c:0},e:{r:0,c:0}};var ee={pos:e.l-K,name:b};p[ee.pos]=ee,R.snames.push(b)}else b=(p[X]||{name:""}).name;32==J.dt&&(n["!type"]="chart"),64==J.dt&&(n["!type"]="macro"),N=[],F=[],R.arrayf=k=[],D=[],P=[],M=!1,A={Hidden:(p[X]||{hs:0}).hs,name:b};break;case 515:case 3:case 2:"chart"==n["!type"]&&(t.dense?(n["!data"][J.r]||[])[J.c]:n[sa(J.c)+aa(J.r)])&&++J.c,h={ixfe:J.ixfe,XF:_[J.ixfe]||{},v:J.val,t:"n"},z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O({c:J.c,r:J.r},h,t);break;case 5:case 517:h={ixfe:J.ixfe,XF:_[J.ixfe],v:J.val,t:J.t},z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O({c:J.c,r:J.r},h,t);break;case 638:h={ixfe:J.ixfe,XF:_[J.ixfe],v:J.rknum,t:"n"},z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O({c:J.c,r:J.r},h,t);break;case 189:for(var te=J.c;te<=J.C;++te){var re=J.rkrec[te-J.c][0];h={ixfe:re,XF:_[re],v:J.rkrec[te-J.c][1],t:"n"},z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O({c:te,r:J.r},h,t)}break;case 6:case 518:case 1030:if("String"==J.val){v=J;break}if((h=gl(J.val,J.cell.ixfe,J.tt)).XF=_[h.ixfe],t.cellFormula){var ae=J.formula;if(ae&&ae[0]&&ae[0][0]&&"PtgExp"==ae[0][0][0]){var ne=ae[0][0][1][0],se=ae[0][0][1][1],ie=oa({r:ne,c:se});E[ie]?h.f=""+zo(J.formula,0,J.cell,L,R):h.F=((t.dense?(n["!data"][ne]||[])[se]:n[ie])||{}).F}else h.f=""+zo(J.formula,0,J.cell,L,R)}z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O(J.cell,h,t),v=J;break;case 7:case 519:if(!v)throw new Error("String record expects Formula");v.val=J,(h=gl(J,v.cell.ixfe,"s")).XF=_[h.ixfe],t.cellFormula&&(h.f=""+zo(v.formula,0,v.cell,L,R)),z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O(v.cell,h,t),v=null;break;case 33:case 545:k.push(J);var oe=oa(J[0].s);if(i=t.dense?(n["!data"][J[0].s.r]||[])[J[0].s.c]:n[oe],t.cellFormula&&i){if(!v)break;if(!oe||!i)break;i.f=""+zo(J[1],0,J[0],L,R),i.F=la(J[0])}break;case 1212:if(!t.cellFormula)break;if(y){if(!v)break;E[oa(v.cell)]=J[0],((i=t.dense?(n["!data"][v.cell.r]||[])[v.cell.c]:n[oa(v.cell)])||{}).f=""+zo(J[0],0,s,L,R)}break;case 253:h=gl(g[J.isst].t,J.ixfe,"s"),g[J.isst].h&&(h.h=g[J.isst].h),h.XF=_[h.ixfe],z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O({c:J.c,r:J.r},h,t);break;case 513:t.sheetStubs&&(h={ixfe:J.ixfe,XF:_[J.ixfe],t:"z"},z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O({c:J.c,r:J.r},h,t));break;case 190:if(t.sheetStubs)for(var ce=J.c;ce<=J.C;++ce){var le=J.ixfe[ce-J.c];h={ixfe:le,XF:_[le],t:"z"},z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O({c:ce,r:J.r},h,t)}break;case 214:case 516:case 4:(h=gl(J.val,J.ixfe,"s")).XF=_[h.ixfe],z>0&&(h.z=h.XF&&h.XF.numFmtId&&H[h.XF.numFmtId]||H[h.ixfe>>8&63]),vl(h,t,r.opts.Date1904),O({c:J.c,r:J.r},h,t);break;case 0:case 512:1===W&&(m=J);break;case 252:g=J;break;case 1054:if(R.biff>=3&&R.biff<=4){H[z++]=J[1];for(var fe=0;fe=163&&xe(J[1],z+163)}else xe(J[1],J[0]);break;case 30:H[z++]=J;for(var he=0;he=163&&xe(J,z+163);break;case 229:N=N.concat(J);break;case 93:F[J.cmo[0]]=R.lastobj=J;break;case 438:R.lastobj.TxO=J;break;case 127:R.lastobj.ImData=J;break;case 440:for(l=J[0].s.r;l<=J[0].e.r;++l)for(c=J[0].s.c;c<=J[0].e.c;++c)(i=t.dense?(n["!data"][l]||[])[c]:n[oa({c:c,r:l})])&&(i.l=J[1]);break;case 2048:for(l=J[0].s.r;l<=J[0].e.r;++l)for(c=J[0].s.c;c<=J[0].e.c;++c)(i=t.dense?(n["!data"][l]||[])[c]:n[oa({c:c,r:l})])&&i.l&&(i.l.Tooltip=J[1]);break;case 28:if((i=t.dense?(n["!data"][J[0].r]||[])[J[0].c]:n[oa(J[0])])||(t.dense?(n["!data"][J[0].r]||(n["!data"][J[0].r]=[]),i=n["!data"][J[0].r][J[0].c]={t:"z"}):i=n[oa(J[0])]={t:"z"},m.e.r=Math.max(m.e.r,J[0].r),m.s.r=Math.min(m.s.r,J[0].r),m.e.c=Math.max(m.e.c,J[0].c),m.s.c=Math.min(m.s.c,J[0].c)),i.c||(i.c=[]),R.biff<=5&&R.biff>=2)o={a:"SheetJ5",t:J[1]};else{var ue=F[J[2]];o={a:J[1],t:ue.TxO.t},null==J[3]||2&J[3]||(i.c.hidden=!0)}i.c.push(o);break;case 2173:_[J.ixfe],J.ext.forEach((function(e){e[0]}));break;case 125:if(!R.cellStyles)break;for(;J.e>=J.s;)D[J.e--]={width:J.w/256,level:J.level||0,hidden:!!(1&J.flags)},M||(M=!0,Ri(J.w/256)),Ni(D[J.e+1]);break;case 520:var de={};null!=J.level&&(P[J.r]=de,de.level=J.level),J.hidden&&(P[J.r]=de,de.hidden=!0),J.hpt&&(P[J.r]=de,de.hpt=J.hpt,de.hpx=Pi(J.hpt));break;case 38:case 39:case 40:case 41:n["!margins"]||lc(n["!margins"]={}),n["!margins"][{38:"left",39:"right",40:"top",41:"bottom"}[j]]=J;break;case 161:n["!margins"]||lc(n["!margins"]={}),n["!margins"].header=J.header,n["!margins"].footer=J.footer;break;case 574:J.RTL&&(x.Views[0].RTL=!0);break;case 146:S=J;break;case 2198:d=J;break;case 140:u=J;break;case 442:b?A.CodeName=J||A.name:x.WBProps.CodeName=J||"ThisWorkbook"}}else Y||console.error("Missing Info for XLS Record 0x"+j.toString(16)),e.l+=K}return r.SheetNames=Fe(p).sort((function(e,t){return Number(e)-Number(t)})).map((function(e){return p[e].name})),t.bookSheets||(r.Sheets=a),!r.SheetNames.length&&T["!ref"]?(r.SheetNames.push("Sheet1"),r.Sheets&&(r.Sheets.Sheet1=T)):r.Preamble=T,r.Sheets&&V.forEach((function(e,t){r.Sheets[r.SheetNames[t]]["!autofilter"]=e})),r.Strings=g,r.SSF=Ke(G),R.enc&&(r.Encryption=R.enc),d&&(r.Themes=d),r.Metadata={},void 0!==u&&(r.Metadata.Country=u),L.names.length>0&&(x.Names=L.names),r.Workbook=x,r}(a.content,t);else if((s=Ie.find(e,"PerfectOffice_MAIN"))&&s.content)n=ei.to_workbook(s.content,(t.type=i,t));else{if(!(s=Ie.find(e,"NativeContent_MAIN"))||!s.content)throw(s=Ie.find(e,"MN0"))&&s.content?new Error("Unsupported Works 4 for Mac file"):new Error("Cannot find Workbook stream");n=ei.to_workbook(s.content,(t.type=i,t))}t.bookVBA&&e.FullPaths&&Ie.find(e,"/_VBA_PROJECT_CUR/VBA/dir")&&(n.vbaraw=function(e){var t=Ie.utils.cfb_new({root:"R"});return e.FullPaths.forEach((function(r,a){if("/"!==r.slice(-1)&&r.match(/_VBA_PROJECT_CUR/)){var n=r.replace(/^[^\/]*/,"R").replace(/\/_VBA_PROJECT_CUR\u0000*/,"");Ie.utils.cfb_add(t,n,e.FileIndex[a].content)}})),Ie.write(t)}(e))}var o={};return e.FullPaths&&function(e,t,r){var a=Ie.find(e,"/!DocumentSummaryInformation");if(a&&a.size>0)try{var n=Vn(a,Ya,bl.DSI);for(var s in n)t[s]=n[s]}catch(e){if(r.WTF)throw e}var i=Ie.find(e,"/!SummaryInformation");if(i&&i.size>0)try{var o=Vn(i,Za,bl.SI);for(var c in o)null==t[c]&&(t[c]=o[c])}catch(e){if(r.WTF)throw e}t.HeadingPairs&&t.TitlesOfParts&&(En(t.HeadingPairs,t.TitlesOfParts,t,r),delete t.HeadingPairs,delete t.TitlesOfParts)}(e,o,t),n.Props=n.Custprops=o,t.bookFiles&&(n.cfb=e),n}var Tl={0:{f:function(e,t){var r={},a=e.l+t;r.r=e.read_shift(4),e.l+=4;var n=e.read_shift(2);e.l+=1;var s=e.read_shift(1);return e.l=a,7&s&&(r.level=7&s),16&s&&(r.hidden=!0),32&s&&(r.hpt=n/20),r}},1:{f:function(e){return[ka(e)]}},2:{f:function(e){return[ka(e),Da(e),"n"]}},3:{f:function(e){return[ka(e),e.read_shift(1),"e"]}},4:{f:function(e){return[ka(e),e.read_shift(1),"b"]}},5:{f:function(e){return[ka(e),Ba(e),"n"]}},6:{f:function(e){return[ka(e),ba(e),"str"]}},7:{f:function(e){return[ka(e),e.read_shift(4),"s"]}},8:{f:function(e,t,r){var a=e.l+t,n=ka(e);n.r=r["!row"];var s=[n,ba(e),"str"];if(r.cellFormula){e.l+=2;var i=jo(e,a-e.l,r);s[3]=zo(i,0,n,r.supbooks,r)}else e.l=a;return s}},9:{f:function(e,t,r){var a=e.l+t,n=ka(e);n.r=r["!row"];var s=[n,Ba(e),"n"];if(r.cellFormula){e.l+=2;var i=jo(e,a-e.l,r);s[3]=zo(i,0,n,r.supbooks,r)}else e.l=a;return s}},10:{f:function(e,t,r){var a=e.l+t,n=ka(e);n.r=r["!row"];var s=[n,e.read_shift(1),"b"];if(r.cellFormula){e.l+=2;var i=jo(e,a-e.l,r);s[3]=zo(i,0,n,r.supbooks,r)}else e.l=a;return s}},11:{f:function(e,t,r){var a=e.l+t,n=ka(e);n.r=r["!row"];var s=[n,e.read_shift(1),"e"];if(r.cellFormula){e.l+=2;var i=jo(e,a-e.l,r);s[3]=zo(i,0,n,r.supbooks,r)}else e.l=a;return s}},12:{f:function(e){return[Sa(e)]}},13:{f:function(e){return[Sa(e),Da(e),"n"]}},14:{f:function(e){return[Sa(e),e.read_shift(1),"e"]}},15:{f:function(e){return[Sa(e),e.read_shift(1),"b"]}},16:{f:Nc},17:{f:function(e){return[Sa(e),ba(e),"str"]}},18:{f:function(e){return[Sa(e),e.read_shift(4),"s"]}},19:{f:ya},20:{},21:{},22:{},23:{},24:{},25:{},26:{},27:{},28:{},29:{},30:{},31:{},32:{},33:{},34:{},35:{T:1},36:{T:-1},37:{T:1},38:{T:-1},39:{f:function(e,t,r){var a=e.l+t,n=e.read_shift(4);e.l+=1;var s,i=e.read_shift(4),o=Ra(e),c="";try{s=Ko(e,0,r);try{c=Ia(e)}catch(e){}}catch(e){console.error("Could not parse defined name "+o)}32&n&&(o="_xlnm."+o),e.l=a;var l={Name:o,Ptg:s,Flags:n};return i<268435455&&(l.Sheet=i),c&&(l.Comment=c),l}},40:{},42:{},43:{f:function(e,t,r){var a={};a.sz=e.read_shift(2)/20;var n=function(e){var t=e.read_shift(1);return e.l++,{fBold:1&t,fItalic:2&t,fUnderline:4&t,fStrikeout:8&t,fOutline:16&t,fShadow:32&t,fCondense:64&t,fExtend:128&t}}(e);switch(n.fItalic&&(a.italic=1),n.fCondense&&(a.condense=1),n.fExtend&&(a.extend=1),n.fShadow&&(a.shadow=1),n.fOutline&&(a.outline=1),n.fStrikeout&&(a.strike=1),700===e.read_shift(2)&&(a.bold=1),e.read_shift(2)){case 1:a.vertAlign="superscript";break;case 2:a.vertAlign="subscript"}var s=e.read_shift(1);0!=s&&(a.underline=s);var i=e.read_shift(1);i>0&&(a.family=i);var o=e.read_shift(1);switch(o>0&&(a.charset=o),e.l++,a.color=function(e){var t={},r=e.read_shift(1)>>>1,a=e.read_shift(1),n=e.read_shift(2,"i"),s=e.read_shift(1),i=e.read_shift(1),o=e.read_shift(1);switch(e.l++,r){case 0:t.auto=1;break;case 1:t.index=a;var c=en[a];c&&(t.rgb=yi(c));break;case 2:t.rgb=yi([s,i,o]);break;case 3:t.theme=a}return 0!=n&&(t.tint=n>0?n/32767:n/32768),t}(e),e.read_shift(1)){case 1:a.scheme="major";break;case 2:a.scheme="minor"}return a.name=ba(e),a}},44:{f:function(e,t){return[e.read_shift(2),ba(e)]}},45:{f:Vi},46:{f:ji},47:{f:function(e,t){var r=e.l+t,a=e.read_shift(2),n=e.read_shift(2);return e.l=r,{ixfe:a,numFmtId:n}}},48:{},49:{f:function(e){return e.read_shift(4,"i")}},50:{},51:{f:function(e){for(var t=[],r=e.read_shift(4);r-- >0;)t.push([e.read_shift(4),e.read_shift(4)]);return t}},52:{T:1},53:{T:-1},54:{T:1},55:{T:-1},56:{T:1},57:{T:-1},58:{},59:{},60:{f:Vs},62:{f:function(e){return[ka(e),ya(e),"is"]}},63:{f:function(e){var t={};t.i=e.read_shift(4);var r={};r.r=e.read_shift(4),r.c=e.read_shift(4),t.r=oa(r);var a=e.read_shift(1);return 2&a&&(t.l="1"),8&a&&(t.a="1"),t}},64:{f:function(){}},65:{},66:{},67:{},68:{},69:{},70:{},128:{},129:{T:1},130:{T:-1},131:{T:1,f:jr,p:0},132:{T:-1},133:{T:1},134:{T:-1},135:{T:1},136:{T:-1},137:{T:1,f:function(e){var t=e.read_shift(2);return e.l+=28,{RTL:32&t}}},138:{T:-1},139:{T:1},140:{T:-1},141:{T:1},142:{T:-1},143:{T:1},144:{T:-1},145:{T:1},146:{T:-1},147:{f:function(e,t){var r={},a=e[e.l];return++e.l,r.above=!(64&a),r.left=!(128&a),e.l+=18,r.name=Aa(e,t-19),r}},148:{f:Cc,p:16},151:{f:function(){}},152:{},153:{f:function(e,t){var r={},a=e.read_shift(4);r.defaultThemeVersion=e.read_shift(4);var n=t>8?ba(e):"";return n.length>0&&(r.CodeName=n),r.autoCompressPictures=!!(65536&a),r.backupFile=!!(64&a),r.checkCompatibility=!!(4096&a),r.date1904=!!(1&a),r.filterPrivacy=!!(8&a),r.hidePivotFieldList=!!(1024&a),r.promptedSolutions=!!(16&a),r.publishItems=!!(2048&a),r.refreshAllConnections=!!(262144&a),r.saveExternalLinkValues=!!(128&a),r.showBorderUnselectedTables=!!(4&a),r.showInkAnnotation=!!(32&a),r.showObjects=["all","placeholders","none"][a>>13&3],r.showPivotChartFilter=!!(32768&a),r.updateLinks=["userSet","never","always"][a>>8&3],r}},154:{},155:{},156:{f:function(e,t){var r={};return r.Hidden=e.read_shift(4),r.iTabID=e.read_shift(4),r.strRelID=Na(e,t-8),r.name=ba(e),r}},157:{},158:{},159:{T:1,f:function(e){return[e.read_shift(4),e.read_shift(4)]}},160:{T:-1},161:{T:1,f:La},162:{T:-1},163:{T:1},164:{T:-1},165:{T:1},166:{T:-1},167:{},168:{},169:{},170:{},171:{},172:{T:1},173:{T:-1},174:{},175:{},176:{f:Fc},177:{T:1},178:{T:-1},179:{T:1},180:{T:-1},181:{T:1},182:{T:-1},183:{T:1},184:{T:-1},185:{T:1},186:{T:-1},187:{T:1},188:{T:-1},189:{T:1},190:{T:-1},191:{T:1},192:{T:-1},193:{T:1},194:{T:-1},195:{T:1},196:{T:-1},197:{T:1},198:{T:-1},199:{T:1},200:{T:-1},201:{T:1},202:{T:-1},203:{T:1},204:{T:-1},205:{T:1},206:{T:-1},207:{T:1},208:{T:-1},209:{T:1},210:{T:-1},211:{T:1},212:{T:-1},213:{T:1},214:{T:-1},215:{T:1},216:{T:-1},217:{T:1},218:{T:-1},219:{T:1},220:{T:-1},221:{T:1},222:{T:-1},223:{T:1},224:{T:-1},225:{T:1},226:{T:-1},227:{T:1},228:{T:-1},229:{T:1},230:{T:-1},231:{T:1},232:{T:-1},233:{T:1},234:{T:-1},235:{T:1},236:{T:-1},237:{T:1},238:{T:-1},239:{T:1},240:{T:-1},241:{T:1},242:{T:-1},243:{T:1},244:{T:-1},245:{T:1},246:{T:-1},247:{T:1},248:{T:-1},249:{T:1},250:{T:-1},251:{T:1},252:{T:-1},253:{T:1},254:{T:-1},255:{T:1},256:{T:-1},257:{T:1},258:{T:-1},259:{T:1},260:{T:-1},261:{T:1},262:{T:-1},263:{T:1},264:{T:-1},265:{T:1},266:{T:-1},267:{T:1},268:{T:-1},269:{T:1},270:{T:-1},271:{T:1},272:{T:-1},273:{T:1},274:{T:-1},275:{T:1},276:{T:-1},277:{},278:{T:1},279:{T:-1},280:{T:1},281:{T:-1},282:{T:1},283:{T:1},284:{T:-1},285:{T:1},286:{T:-1},287:{T:1},288:{T:-1},289:{T:1},290:{T:-1},291:{T:1},292:{T:-1},293:{T:1},294:{T:-1},295:{T:1},296:{T:-1},297:{T:1},298:{T:-1},299:{T:1},300:{T:-1},301:{T:1},302:{T:-1},303:{T:1},304:{T:-1},305:{T:1},306:{T:-1},307:{T:1},308:{T:-1},309:{T:1},310:{T:-1},311:{T:1},312:{T:-1},313:{T:-1},314:{T:1},315:{T:-1},316:{T:1},317:{T:-1},318:{T:1},319:{T:-1},320:{T:1},321:{T:-1},322:{T:1},323:{T:-1},324:{T:1},325:{T:-1},326:{T:1},327:{T:-1},328:{T:1},329:{T:-1},330:{T:1},331:{T:-1},332:{T:1},333:{T:-1},334:{T:1},335:{f:function(e,t){return{flags:e.read_shift(4),version:e.read_shift(4),name:ba(e)}}},336:{T:-1},337:{f:function(e){return e.l+=4,0!=e.read_shift(4)},T:1},338:{T:-1},339:{T:1},340:{T:-1},341:{T:1},342:{T:-1},343:{T:1},344:{T:-1},345:{T:1},346:{T:-1},347:{T:1},348:{T:-1},349:{T:1},350:{T:-1},351:{},352:{},353:{T:1},354:{T:-1},355:{f:Na},357:{},358:{},359:{},360:{T:1},361:{},362:{f:Ms},363:{},364:{},366:{},367:{},368:{},369:{},370:{},371:{},372:{T:1},373:{T:-1},374:{T:1},375:{T:-1},376:{T:1},377:{T:-1},378:{T:1},379:{T:-1},380:{T:1},381:{T:-1},382:{T:1},383:{T:-1},384:{T:1},385:{T:-1},386:{T:1},387:{T:-1},388:{T:1},389:{T:-1},390:{T:1},391:{T:-1},392:{T:1},393:{T:-1},394:{T:1},395:{T:-1},396:{},397:{},398:{},399:{},400:{},401:{T:1},403:{},404:{},405:{},406:{},407:{},408:{},409:{},410:{},411:{},412:{},413:{},414:{},415:{},416:{},417:{},418:{},419:{},420:{},421:{},422:{T:1},423:{T:1},424:{T:-1},425:{T:-1},426:{f:function(e,t,r){var a=e.l+t,n=Ma(e),s=e.read_shift(1),i=[n];if(i[2]=s,r.cellFormula){var o=Xo(e,a-e.l,r);i[1]=o}else e.l=a;return i}},427:{f:function(e,t,r){var a=e.l+t,n=[La(e,16)];if(r.cellFormula){var s=Yo(e,a-e.l,r);n[1]=s,e.l=a}else e.l=a;return n}},428:{},429:{T:1},430:{T:-1},431:{T:1},432:{T:-1},433:{T:1},434:{T:-1},435:{T:1},436:{T:-1},437:{T:1},438:{T:-1},439:{T:1},440:{T:-1},441:{T:1},442:{T:-1},443:{T:1},444:{T:-1},445:{T:1},446:{T:-1},447:{T:1},448:{T:-1},449:{T:1},450:{T:-1},451:{T:1},452:{T:-1},453:{T:1},454:{T:-1},455:{T:1},456:{T:-1},457:{T:1},458:{T:-1},459:{T:1},460:{T:-1},461:{T:1},462:{T:-1},463:{T:1},464:{T:-1},465:{T:1},466:{T:-1},467:{T:1},468:{T:-1},469:{T:1},470:{T:-1},471:{},472:{},473:{T:1},474:{T:-1},475:{},476:{f:function(e){var t={};return Pc.forEach((function(r){t[r]=Ba(e)})),t}},477:{},478:{},479:{T:1},480:{T:-1},481:{T:1},482:{T:-1},483:{T:1},484:{T:-1},485:{f:function(){}},486:{T:1},487:{T:-1},488:{T:1},489:{T:-1},490:{T:1},491:{T:-1},492:{T:1},493:{T:-1},494:{f:function(e,t){var r=e.l+t,a=La(e,16),n=Ia(e),s=ba(e),i=ba(e),o=ba(e);e.l=r;var c={rfx:a,relId:n,loc:s,display:o};return i&&(c.Tooltip=i),c}},495:{T:1},496:{T:-1},497:{T:1},498:{T:-1},499:{},500:{T:1},501:{T:-1},502:{T:1},503:{T:-1},504:{},505:{T:1},506:{T:-1},507:{},508:{T:1},509:{T:-1},510:{T:1},511:{T:-1},512:{},513:{},514:{T:1},515:{T:-1},516:{T:1},517:{T:-1},518:{T:1},519:{T:-1},520:{T:1},521:{T:-1},522:{},523:{},524:{},525:{},526:{},527:{},528:{T:1},529:{T:-1},530:{T:1},531:{T:-1},532:{T:1},533:{T:-1},534:{},535:{},536:{},537:{},538:{T:1},539:{T:-1},540:{T:1},541:{T:-1},542:{T:1},548:{},549:{},550:{f:Na},551:{f:Ia},552:{},553:{},554:{T:1},555:{T:-1},556:{T:1},557:{T:-1},558:{T:1},559:{T:-1},560:{T:1},561:{T:-1},562:{},564:{},565:{T:1},566:{T:-1},569:{T:1},570:{T:-1},572:{},573:{T:1},574:{T:-1},577:{},578:{},579:{},580:{},581:{},582:{},583:{},584:{},585:{},586:{},587:{},588:{T:-1},589:{},590:{T:1},591:{T:-1},592:{T:1},593:{T:-1},594:{T:1},595:{T:-1},596:{},597:{T:1},598:{T:-1},599:{T:1},600:{T:-1},601:{T:1},602:{T:-1},603:{T:1},604:{T:-1},605:{T:1},606:{T:-1},607:{},608:{T:1},609:{T:-1},610:{},611:{T:1},612:{T:-1},613:{T:1},614:{T:-1},615:{T:1},616:{T:-1},617:{T:1},618:{T:-1},619:{T:1},620:{T:-1},625:{},626:{T:1},627:{T:-1},628:{T:1},629:{T:-1},630:{T:1},631:{T:-1},632:{f:no},633:{T:1},634:{T:-1},635:{T:1,f:function(e){var t={};t.iauthor=e.read_shift(4);var r=La(e,16);return t.rfx=r.s,t.ref=oa(r.s),e.l+=16,t}},636:{T:-1},637:{f:Ea},638:{T:1},639:{},640:{T:-1},641:{T:1},642:{T:-1},643:{T:1},644:{},645:{T:-1},646:{T:1},648:{T:1},649:{},650:{T:-1},651:{f:function(e,t){return e.l+=10,{name:ba(e)}}},652:{},653:{T:1},654:{T:-1},655:{T:1},656:{T:-1},657:{T:1},658:{T:-1},659:{},660:{T:1},661:{},662:{T:-1},663:{},664:{T:1},665:{},666:{T:-1},667:{},668:{},669:{},671:{T:1},672:{T:-1},673:{T:1},674:{T:-1},675:{},676:{},677:{},678:{},679:{},680:{},681:{},1024:{},1025:{},1026:{T:1},1027:{T:-1},1028:{T:1},1029:{T:-1},1030:{},1031:{T:1},1032:{T:-1},1033:{T:1},1034:{T:-1},1035:{},1036:{},1037:{},1038:{T:1},1039:{T:-1},1040:{},1041:{T:1},1042:{T:-1},1043:{},1044:{},1045:{},1046:{T:1},1047:{T:-1},1048:{T:1},1049:{T:-1},1050:{},1051:{T:1},1052:{T:1},1053:{f:function(){}},1054:{T:1},1055:{},1056:{T:1},1057:{T:-1},1058:{T:1},1059:{T:-1},1061:{},1062:{T:1},1063:{T:-1},1064:{T:1},1065:{T:-1},1066:{T:1},1067:{T:-1},1068:{T:1},1069:{T:-1},1070:{T:1},1071:{T:-1},1072:{T:1},1073:{T:-1},1075:{T:1},1076:{T:-1},1077:{T:1},1078:{T:-1},1079:{T:1},1080:{T:-1},1081:{T:1},1082:{T:-1},1083:{T:1},1084:{T:-1},1085:{},1086:{T:1},1087:{T:-1},1088:{T:1},1089:{T:-1},1090:{T:1},1091:{T:-1},1092:{T:1},1093:{T:-1},1094:{T:1},1095:{T:-1},1096:{},1097:{T:1},1098:{},1099:{T:-1},1100:{T:1},1101:{T:-1},1102:{},1103:{},1104:{},1105:{},1111:{},1112:{},1113:{T:1},1114:{T:-1},1115:{T:1},1116:{T:-1},1117:{},1118:{T:1},1119:{T:-1},1120:{T:1},1121:{T:-1},1122:{T:1},1123:{T:-1},1124:{T:1},1125:{T:-1},1126:{},1128:{T:1},1129:{T:-1},1130:{},1131:{T:1},1132:{T:-1},1133:{T:1},1134:{T:-1},1135:{T:1},1136:{T:-1},1137:{T:1},1138:{T:-1},1139:{T:1},1140:{T:-1},1141:{},1142:{T:1},1143:{T:-1},1144:{T:1},1145:{T:-1},1146:{},1147:{T:1},1148:{T:-1},1149:{T:1},1150:{T:-1},1152:{T:1},1153:{T:-1},1154:{T:-1},1155:{T:-1},1156:{T:-1},1157:{T:1},1158:{T:-1},1159:{T:1},1160:{T:-1},1161:{T:1},1162:{T:-1},1163:{T:1},1164:{T:-1},1165:{T:1},1166:{T:-1},1167:{T:1},1168:{T:-1},1169:{T:1},1170:{T:-1},1171:{},1172:{T:1},1173:{T:-1},1177:{},1178:{T:1},1180:{},1181:{},1182:{},2048:{T:1},2049:{T:-1},2050:{},2051:{T:1},2052:{T:-1},2053:{},2054:{},2055:{T:1},2056:{T:-1},2057:{T:1},2058:{T:-1},2060:{},2067:{},2068:{T:1},2069:{T:-1},2070:{},2071:{},2072:{T:1},2073:{T:-1},2075:{},2076:{},2077:{T:1},2078:{T:-1},2079:{},2080:{T:1},2081:{T:-1},2082:{},2083:{T:1},2084:{T:-1},2085:{T:1},2086:{T:-1},2087:{T:1},2088:{T:-1},2089:{T:1},2090:{T:-1},2091:{},2092:{},2093:{T:1},2094:{T:-1},2095:{},2096:{T:1},2097:{T:-1},2098:{T:1},2099:{T:-1},2100:{T:1},2101:{T:-1},2102:{},2103:{T:1},2104:{T:-1},2105:{},2106:{T:1},2107:{T:-1},2108:{},2109:{T:1},2110:{T:-1},2111:{T:1},2112:{T:-1},2113:{T:1},2114:{T:-1},2115:{},2116:{},2117:{},2118:{T:1},2119:{T:-1},2120:{},2121:{T:1},2122:{T:-1},2123:{T:1},2124:{T:-1},2125:{},2126:{T:1},2127:{T:-1},2128:{},2129:{T:1},2130:{T:-1},2131:{T:1},2132:{T:-1},2133:{T:1},2134:{},2135:{},2136:{},2137:{T:1},2138:{T:-1},2139:{T:1},2140:{T:-1},2141:{},3072:{},3073:{},4096:{T:1},4097:{T:-1},5002:{T:1},5003:{T:-1},5081:{T:1},5082:{T:-1},5083:{},5084:{T:1},5085:{T:-1},5086:{T:1},5087:{T:-1},5088:{},5089:{},5090:{},5092:{T:1},5093:{T:-1},5094:{},5095:{T:1},5096:{T:-1},5097:{},5099:{},65535:{n:""}},yl={6:{f:$o},10:{f:Gn},12:{f:Kn},13:{f:Kn},14:{f:Xn},15:{f:Xn},16:{f:Ba},17:{f:Xn},18:{f:Xn},19:{f:Kn},20:{f:Fs},21:{f:Fs},23:{f:Ms},24:{f:Ps},25:{f:Xn},26:{},27:{},28:{f:function(e,t,r){if(r&&r.biff<8){var a=e.read_shift(2),n=e.read_shift(2);if(65535==a||-1==a)return;var s=e.read_shift(2);return[{r:a,c:n},e.read_shift(Math.min(s,2048),"cpstr")]}return function(e,t,r){var a=e.read_shift(2),n=e.read_shift(2),s=e.read_shift(2),i=e.read_shift(2);return[{r:a,c:n},ns(e,0,r),i,s]}(e,0,r)}},29:{},34:{f:Xn},35:{f:Ds},38:{f:Ba},39:{f:Ba},40:{f:Ba},41:{f:Ba},42:{f:Xn},43:{f:Xn},47:{f:function(e,t,r){var a={Type:r.biff>=8?e.read_shift(2):0};return a.Type?function(e,t,r){var a=r||{};a.Info=e.read_shift(2),e.l-=2,1===a.Info?a.Data=function(e){var t={},r=t.EncryptionVersionInfo=hi(e,4);if(1!=r.Major||1!=r.Minor)throw"unrecognized version code "+r.Major+" : "+r.Minor;return t.Salt=e.read_shift(16),t.EncryptedVerifier=e.read_shift(16),t.EncryptedVerifierHash=e.read_shift(16),t}(e):a.Data=function(e,t){var r={},a=r.EncryptionVersionInfo=hi(e,4);if(t-=4,2!=a.Minor)throw new Error("unrecognized minor version code: "+a.Minor);if(a.Major>4||a.Major<2)throw new Error("unrecognized major version code: "+a.Major);r.Flags=e.read_shift(4),t-=4;var n=e.read_shift(4);return t-=4,r.EncryptionHeader=di(e,n),t-=n,r.EncryptionVerifier=pi(e,t),r}(e,t)}(e,t-2,a):function(e,t,r,a){var n,s,i,o={key:Kn(e),verificationBytes:Kn(e)};r.password&&(o.verifier=bi(r.password)),a.valid=o.verificationBytes===o.verifier,a.valid&&(a.insitu=(n=r.password,s=0,i=wi(n),function(e){var t=function(e,t,r,a,n){var s,i;for(n||(n=t),a||(a=wi("")),s=0;s!=t.length;++s)i=t[s],i=255&((i^=a[r])>>5|i<<3),n[s]=i,++r;return[n,r,a]}(0,e,s,i);return s=t[1],t[0]}))}(e,r.biff,r,a),a}},49:{f:function(e,t,r){var a={dyHeight:e.read_shift(2),fl:e.read_shift(2)};switch(r&&r.biff||8){case 2:break;case 3:case 4:e.l+=2;break;default:e.l+=10}return a.name=Qn(e,0,r),a}},51:{f:Kn},60:{},61:{f:function(e){return{Pos:[e.read_shift(2),e.read_shift(2)],Dim:[e.read_shift(2),e.read_shift(2)],Flags:e.read_shift(2),CurTab:e.read_shift(2),FirstTab:e.read_shift(2),Selected:e.read_shift(2),TabRatio:e.read_shift(2)}}},64:{f:Xn},65:{f:function(){}},66:{f:Kn},77:{},80:{},81:{},82:{},85:{f:Kn},89:{},90:{},91:{},92:{f:function(e,t,r){if(r.enc)return e.l+=t,"";var a=e.l,n=ns(e,0,r);return e.read_shift(t+a-e.l),n}},93:{f:function(e,t,r){if(r&&r.biff<8)return function(e,t,r){e.l+=4;var a=e.read_shift(2),n=e.read_shift(2),s=e.read_shift(2);e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=2,e.l+=6,t-=36;var i=[];return i.push((Ws[a]||jr)(e,t,r)),{cmo:[n,a,s],ft:i}}(e,t,r);var a=ws(e),n=function(e,t){for(var r=e.l+t,a=[];e.l7||t[1]>7)throw new Error("Bad Gutters: "+t.join("|"));return t}},129:{f:function(e,t,r){var a=r&&8==r.biff||2==t?e.read_shift(2):(e.l+=t,0);return{fDialog:16&a,fBelow:64&a,fRight:128&a}}},130:{f:Kn},131:{f:Xn},132:{f:Xn},133:{f:function(e,t,r){var a="";if(4==r.biff)return 0===(a=Qn(e,0,r)).length&&(a="Sheet1"),{name:a};var n=e.read_shift(4),s=3&e.read_shift(1),i=e.read_shift(1);switch(i){case 0:i="Worksheet";break;case 1:i="Macrosheet";break;case 2:i="Chartsheet";break;case 6:i="VBAModule"}return 0===(a=Qn(e,0,r)).length&&(a="Sheet1"),{pos:n,hs:s,dt:i,name:a}}},134:{},140:{f:function(e){var t,r=[0,0];return t=e.read_shift(2),r[0]=Ja[t]||t,t=e.read_shift(2),r[1]=Ja[t]||t,r}},141:{f:Kn},144:{},146:{f:function(e){for(var t=e.read_shift(2),r=[];t-- >0;)r.push(fs(e));return r}},151:{},152:{},153:{},154:{},155:{},156:{f:Kn},157:{},158:{},160:{f:Gs},161:{f:function(e,t){var r={};return t<32||(e.l+=16,r.header=Ba(e),r.footer=Ba(e),e.l+=2),r}},174:{},175:{},176:{},177:{},178:{},180:{},181:{},182:{},184:{},185:{},189:{f:function(e,t){for(var r=e.l+t-2,a=e.read_shift(2),n=e.read_shift(2),s=[];e.l>2&1,a.data=function(e,t,r,a){var n={},s=e.read_shift(4),i=e.read_shift(4),o=e.read_shift(4),c=e.read_shift(2);return n.patternType=qa[o>>26],a.cellStyles?(n.alc=7&s,n.fWrap=s>>3&1,n.alcV=s>>4&7,n.fJustLast=s>>7&1,n.trot=s>>8&255,n.cIndent=s>>16&15,n.fShrinkToFit=s>>20&1,n.iReadOrder=s>>22&2,n.fAtrNum=s>>26&1,n.fAtrFnt=s>>27&1,n.fAtrAlc=s>>28&1,n.fAtrBdr=s>>29&1,n.fAtrPat=s>>30&1,n.fAtrProt=s>>31&1,n.dgLeft=15&i,n.dgRight=i>>4&15,n.dgTop=i>>8&15,n.dgBottom=i>>12&15,n.icvLeft=i>>16&127,n.icvRight=i>>23&127,n.grbitDiag=i>>30&3,n.icvTop=127&o,n.icvBottom=o>>7&127,n.icvDiag=o>>14&127,n.dgDiag=o>>21&15,n.icvFore=127&c,n.icvBack=c>>7&127,n.fsxButton=c>>14&1,n):n}(e,0,a.fStyle,r),a}},225:{f:function(e,t){return 0===t||e.read_shift(2),1200}},226:{f:Gn},227:{},229:{f:function(e,t){for(var r=[],a=e.read_shift(2);a--;)r.push(ms(e));return r}},233:{},235:{},236:{},237:{},239:{},240:{},241:{},242:{},244:{},245:{},246:{},247:{},248:{},249:{},251:{},252:{f:function(e,t){for(var r=e.l+t,a=e.read_shift(4),n=e.read_shift(4),s=[],i=0;i!=n&&e.l255)throw new Error("Unexpected SupBook type: "+s);for(var i=rs(e,s),o=[];a>e.l;)o.push(as(e));return[s,n,i,o]}},431:{f:Xn},432:{},433:{},434:{},437:{},438:{f:function(e,t,r){var a=e.l,n="";try{e.l+=4;var s=(r.lastobj||{cmo:[0,0]}).cmo[1];-1==[0,5,7,11,12,14].indexOf(s)?e.l+=6:function(e){var t=e.read_shift(1);e.l++;var r=e.read_shift(2);e.l+=2}(e);var i=e.read_shift(2);e.read_shift(2),Kn(e);var o=e.read_shift(2);e.l+=o;for(var c=1;c=(l?i:2*i))break}if(n.length!==i&&n.length!==2*i)throw new Error("cchText: "+i+" != "+n.length);return e.l=a+t,{t:n}}catch(r){return e.l=a+t,{t:n}}}},439:{f:Xn},440:{f:function(e,t){var r=ms(e);e.l+=16;var a=function(e,t){var r=e.l+t,a=e.read_shift(4);if(2!==a)throw new Error("Unrecognized streamVersion: "+a);var n=e.read_shift(2);e.l+=2;var s,i,o,c,l,f,h="";16&n&&(s=is(e,e.l)),128&n&&(i=is(e,e.l)),257==(257&n)&&(o=is(e,e.l)),1==(257&n)&&(c=function(e,t){var r=e.read_shift(16);switch(r){case"e0c9ea79f9bace118c8200aa004ba90b":return function(e){var t=e.read_shift(4),r=e.l,a=!1;t>24&&(e.l+=t-24,"795881f43b1d7f48af2c825dc4852763"===e.read_shift(16)&&(a=!0),e.l=r);var n=e.read_shift((a?t-24:t)>>1,"utf16le").replace(F,"");return a&&(e.l+=24),n}(e);case"0303000000000000c000000000000046":return function(e){for(var t=e.read_shift(2),r="";t-- >0;)r+="../";var a=e.read_shift(0,"lpstr-ansi");if(e.l+=2,57005!=e.read_shift(2))throw new Error("Bad FileMoniker");if(0===e.read_shift(4))return r+a.replace(/\\/g,"/");var n=e.read_shift(4);if(3!=e.read_shift(2))throw new Error("Bad FileMoniker");return r+e.read_shift(n>>1,"utf16le").replace(F,"")}(e);default:throw new Error("Unsupported Moniker "+r)}}(e,e.l)),8&n&&(h=is(e,e.l)),32&n&&(l=e.read_shift(16)),64&n&&(f=In(e)),e.l=r;var u=i||o||c||"";u&&h&&(u+="#"+h),u||(u="#"+h),2&n&&"/"==u.charAt(0)&&"/"!=u.charAt(1)&&(u="file://"+u);var d={Target:u};return l&&(d.guid=l),f&&(d.time=f),s&&(d.Tooltip=s),d}(e,t-24);return[r,a]}},441:{},442:{f:as},443:{},444:{f:Kn},445:{},446:{},448:{f:Gn},449:{f:function(e){return e.read_shift(2),e.read_shift(4)},r:2},450:{f:Gn},512:{f:Cs},513:{f:$s},515:{f:function(e,t,r){r.biffguess&&2==r.biff&&(r.biff=5);var a=hs(e,6,r),n=Ba(e);return a.val=n,a}},516:{f:function(e,t,r){r.biffguess&&2==r.biff&&(r.biff=5),e.l;var a=hs(e,t,r),n=as(e,e.l,r);return a.val=n,a}},517:{f:function(e,t,r){var a=hs(e,6,r),n=Jn(e);return a.val=n,a.t=!0===n||!1===n?"b":"e",a}},519:{f:Xs},520:{f:function(e){var t={};t.r=e.read_shift(2),t.c=e.read_shift(2),t.cnt=e.read_shift(2)-t.c;var r=e.read_shift(2);e.l+=4;var a=e.read_shift(1);return e.l+=3,7&a&&(t.level=7&a),32&a&&(t.hidden=!0),64&a&&(t.hpt=r/20),t}},523:{},545:{f:Us},549:{f:Ss},566:{},574:{f:function(e,t,r){return r&&r.biff>=2&&r.biff<5?{}:{RTL:64&e.read_shift(2)}}},638:{f:function(e){var t=e.read_shift(2),r=e.read_shift(2),a=ps(e);return{r:t,c:r,ixfe:a[0],rknum:a[1]}}},659:{},1048:{},1054:{f:function(e,t,r){return[e.read_shift(2),ns(e,0,r)]}},1084:{},1212:{f:function(e,t,r){var a=gs(e);e.l++;var n=e.read_shift(1);return[Vo(e,t-=8,r),n,a]}},2048:{f:function(e,t){e.read_shift(2);var r=ms(e),a=e.read_shift((t-10)/2,"dbcs-cont");return[r,a=a.replace(F,"")]}},2049:{},2050:{},2051:{},2052:{},2053:{},2054:{},2055:{},2056:{},2057:{f:Es},2058:{},2059:{},2060:{},2061:{},2062:{},2063:{},2064:{},2066:{},2067:{},2128:{},2129:{},2130:{},2131:{},2132:{},2133:{},2134:{},2135:{},2136:{},2137:{},2138:{},2146:{},2147:{r:12},2148:{},2149:{},2150:{},2151:{f:Gn},2152:{},2154:{},2155:{},2156:{},2161:{},2162:{},2164:{},2165:{},2166:{},2167:{},2168:{},2169:{},2170:{},2171:{},2172:{f:function(e){e.l+=2;var t={cxfs:0,crc:0};return t.cxfs=e.read_shift(2),t.crc=e.read_shift(4),t},r:12},2173:{f:function(e,t){e.l,e.l+=2;var r=e.read_shift(2);e.l+=2;for(var a=e.read_shift(2),n=[];a-- >0;)n.push(qi(e,e.l));return{ixfe:r,ext:n}},r:12},2174:{},2175:{},2180:{},2181:{},2182:{},2183:{},2184:{},2185:{},2186:{},2187:{},2188:{f:Xn,r:12},2189:{},2190:{r:12},2191:{},2192:{},2194:{},2195:{},2196:{f:function(e,t,r){if(!(r.biff<8)){var a=e.read_shift(2),n=e.read_shift(2);return[rs(e,a,r),rs(e,n,r)]}e.l+=t},r:12},2197:{},2198:{f:function(e,t,r){var a=e.l+t;if(124226!==e.read_shift(4))if(r.cellStyles){var n,s=e.slice(e.l);e.l=a;try{n=St(s,{type:"array"})}catch(e){return}var i=Tt(n,"theme/theme/theme1.xml",!0);if(i)return Zi(i,r)}else e.l=a},r:12},2199:{},2200:{},2201:{},2202:{f:function(e){return[0!==e.read_shift(4),0!==e.read_shift(4),e.read_shift(4)]},r:12},2203:{f:Gn},2204:{},2205:{},2206:{},2207:{},2211:{f:function(e){var t=function(e){var t=e.read_shift(2),r=e.read_shift(2);return e.l+=8,{type:t,flags:r}}(e);if(2211!=t.type)throw new Error("Invalid Future Record "+t.type);return 0!==e.read_shift(4)}},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:{f:Kn},4135:{},4146:{},4147:{},4148:{},4149:{},4154:{},4156:{},4157:{},4158:{},4159:{},4160:{},4161:{},4163:{},4164:{f:function(e,t,r){var a={area:!1};if(5!=r.biff)return e.l+=t,a;var n=e.read_shift(1);return e.l+=3,16&n&&(a.area=!0),a}},4165:{},4166:{},4168:{},4170:{},4171:{},4174:{},4175:{},4176:{},4177:{},4187:{},4188:{f:function(e){for(var t=e.read_shift(2),r=[];t-- >0;)r.push(fs(e));return r}},4189:{},4191:{},4192:{},4193:{},4194:{},4195:{},4196:{},4197:{},4198:{},4199:{},4200:{},0:{f:Cs},1:{},2:{f:function(e,t,r){var a=hs(e,7,r),n=e.read_shift(2);return a.t="n",a.val=n,a}},3:{f:function(e,t,r){var a=hs(e,7,r),n=Ba(e);return a.t="n",a.val=n,a}},4:{f:function(e,t,r){r.biffguess&&5==r.biff&&(r.biff=2);var a=hs(e,7,r),n=ns(e,0,r);return a.t="str",a.val=n,a}},5:{f:function(e,t,r){var a=e.l+7,n=hs(e,6,r);e.l=a;var s=Jn(e);return n.val=s,n.t=!0===s||!1===s?"b":"e",n}},7:{f:function(e){var t=e.read_shift(1);return 0===t?(e.l++,""):e.read_shift(t,"sbcs-cont")}},8:{},9:{f:Es},11:{},22:{f:Kn},30:{f:As},31:{},32:{},33:{f:Us},36:{},37:{f:Ss},50:{f:function(e,t){e.l+=6,e.l+=2,e.l+=1,e.l+=3,e.l+=1,e.l+=t-13}},62:{},52:{},67:{f:function(e){var t={};return t.ifnt=e.read_shift(1),e.l++,t.flags=e.read_shift(1),t.numFmtId=63&t.flags,t.flags>>=6,t.fStyle=0,t.data={},t}},68:{f:Kn},69:{},86:{},126:{},127:{f:function(e){var t=e.read_shift(2),r=e.read_shift(2),a=e.read_shift(4),n={fmt:t,env:r,len:a,data:e.slice(e.l,e.l+a)};return e.l+=a,n}},135:{},136:{},137:{},143:{f:function(e){var t=e.read_shift(4),r=e.read_shift(1),a=e.read_shift(r,"sbcs");return 0===a.length&&(a="Sheet1"),{flags:t,name:a}}},145:{},148:{},149:{},150:{},169:{},171:{},188:{},191:{},192:{},194:{},195:{},214:{f:function(e,t,r){var a=e.l+t,n=hs(e,6,r),s=e.read_shift(2),i=rs(e,s,r);return e.l=a,n.t="str",n.val=i,n}},223:{},234:{},354:{},421:{},518:{f:$o},521:{f:Es},536:{f:Ps},547:{f:Ds},561:{},579:{f:function(e){var t={};return t.ifnt=e.read_shift(1),t.numFmtId=e.read_shift(1),t.flags=e.read_shift(2),t.fStyle=t.flags>>2&1,t.data={},t}},1030:{f:$o},1033:{f:Es},1091:{f:function(e){var t={};return t.ifnt=e.read_shift(1),t.numFmtId=e.read_shift(1),t.flags=e.read_shift(2),t.fStyle=t.flags>>2&1,t.data={},t}},2157:{},2163:{},2177:{},2240:{},2241:{},2242:{},2243:{},2244:{},2245:{},2246:{},2247:{},2248:{},2249:{},2250:{},2251:{},2262:{r:12},101:{},102:{},105:{},106:{},107:{},109:{},112:{},114:{},29282:{}};function El(e,t,r,a){var n=t;if(!isNaN(n)){var s=a||(r||[]).length||0,i=e.next(4);i.write_shift(2,n),i.write_shift(2,s),s>0&&Nr(r)&&e.push(r)}}function kl(e,t,r,a){var n=Kr(9);return js(n,e,t),qn(r,a||"b",n),n}function _l(e,t){t.forEach((function(t){var r=t[0].map((function(e){return e.t})).join("");if(r.length<=2048)return El(e,28,Bs(r,t[1],t[2]));El(e,28,Bs(r.slice(0,2048),t[1],t[2],r.length));for(var a=2048;a=0&&u<65536?El(e,2,function(e,t,r,a,n){var s=Kr(9);return js(s,e,t,a||0,n||0),s.write_shift(2,r),s}(r,a,u,h,i)):isNaN(u)?El(e,5,kl(r,a,36,"e")):isFinite(u)?El(e,3,function(e,t,r,a,n){var s=Kr(15);return js(s,e,t,a||0,n||0),s.write_shift(8,r,"f"),s}(r,a,u,h,i)):El(e,5,kl(r,a,7,"e")));case"b":case"e":return void El(e,5,kl(r,a,t.v,t.t));case"s":case"str":return void El(e,4,(o=r,c=a,l=null==t.v?"":String(t.v).slice(0,255),f=Kr(8+2*l.length),js(f,o,c),f.write_shift(1,l.length),f.write_shift(l.length,l,"sbcs"),f.l255||m.e.r>=v){if(t.WTF)throw new Error("Range "+(c["!ref"]||"A1")+" exceeds format limit A1:IV16384");m.e.c=Math.min(m.e.c,255),m.e.r=Math.min(m.e.c,v-1)}El(i,2057,ks(0,16,t)),El(i,13,Yn(1)),El(i,12,Yn(100)),El(i,15,jn(!0)),El(i,17,jn(!1)),El(i,16,Wa(.001)),El(i,95,jn(!0)),El(i,42,jn(!1)),El(i,43,jn(!1)),El(i,130,Yn(1)),El(i,128,(n=[0,0],(s=Kr(8)).write_shift(4,0),s.write_shift(2,n[0]?n[0]+1:0),s.write_shift(2,n[1]?n[1]+1:0),s)),El(i,131,jn(!1)),El(i,132,jn(!1)),u&&function(e,t){if(t){var r=0;t.forEach((function(t,a){++r<=256&&t&&El(e,125,function(e,t){var r=Kr(12);r.write_shift(2,t),r.write_shift(2,t),r.write_shift(2,256*e.width),r.write_shift(2,0);var a=0;return e.hidden&&(a|=1),r.write_shift(1,a),a=e.level||0,r.write_shift(1,a),r.write_shift(2,0),r}(cc(a,t),a))}))}}(i,c["!cols"]),El(i,512,function(e,t){var r=8!=t.biff&&t.biff?2:4,a=Kr(2*r+6);return a.write_shift(r,e.s.r),a.write_shift(r,e.e.r+1),a.write_shift(2,e.s.c),a.write_shift(2,e.e.c+1),a.write_shift(2,0),a}(m,t));var g=(((r||{}).Workbook||{}).WBProps||{}).date1904;u&&(c["!links"]=[]);for(var b=m.s.c;b<=m.e.c;++b)p[b]=sa(b);for(var w=[],T=[],y=m.s.r;y<=m.e.r;++y)for(h&&(T=c["!data"][y]||[]),d=aa(y),b=m.s.c;b<=m.e.c;++b){a=p[b]+d;var E=h?T[b]:c[a];E&&(Cl(i,E,y,b,t,g),u&&E.l&&c["!links"].push([a,E.l]),E.c&&w.push([E.c,y,b]))}var k=f.CodeName||f.name||o;return u?function(e,t){var r,a=[],n=0,s=Zr(),i=xl;t.forEach((function(e,t){var i="",o=e[0].map((function(e){return e.a&&!i&&(i=e.a),e.t})).join("");++xl;var c=Kr(150);c.write_shift(2,15),c.write_shift(2,61444),c.write_shift(4,150),c.write_shift(2,3234),c.write_shift(2,61450),c.write_shift(4,8),c.write_shift(4,xl),c.write_shift(4,2560),c.write_shift(2,227),c.write_shift(2,61451),c.write_shift(4,84),c.write_shift(2,128),c.write_shift(4,0),c.write_shift(2,139),c.write_shift(4,2),c.write_shift(2,191),c.write_shift(4,524296),c.write_shift(2,344),c.l+=4,c.write_shift(2,385),c.write_shift(4,134217808),c.write_shift(2,387),c.write_shift(4,134217808),c.write_shift(2,389),c.write_shift(4,268435700),c.write_shift(2,447),c.write_shift(4,1048592),c.write_shift(2,448),c.write_shift(4,134217809),c.write_shift(2,451),c.write_shift(4,268435700),c.write_shift(2,513),c.write_shift(4,134217809),c.write_shift(2,515),c.write_shift(4,268435700),c.write_shift(2,575),c.write_shift(4,196609),c.write_shift(2,959),c.write_shift(4,131072|(e[0].hidden?2:0)),c.l+=2,c.write_shift(2,61456),c.write_shift(4,18),c.write_shift(2,3),c.write_shift(2,e[2]+2),c.l+=2,c.write_shift(2,e[1]+1),c.l+=2,c.write_shift(2,e[2]+4),c.l+=2,c.write_shift(2,e[1]+5),c.l+=2,c.l+=2,c.write_shift(2,61457),c.l+=4,c.l=150,0==t?r=c:El(s,236,c),n+=150;var l=Kr(52);l.write_shift(2,21),l.write_shift(2,18),l.write_shift(2,25),l.write_shift(2,xl),l.write_shift(2,0),l.l=22,l.write_shift(2,13),l.write_shift(2,22),l.write_shift(4,1651663474),l.write_shift(4,2503426821),l.write_shift(4,2150634280),l.write_shift(4,1768515844+256*xl),l.write_shift(2,0),l.write_shift(4,0),l.l+=4,El(s,93,l);var f=Kr(8);f.l+=2,f.write_shift(2,61453),f.l+=4,El(s,236,f),n+=8;var h=Kr(18);h.write_shift(2,18),h.l+=8,h.write_shift(2,o.length),h.write_shift(2,16),h.l+=4,El(s,438,h);var u=Kr(1+o.length);u.write_shift(1,0),u.write_shift(o.length,o,"sbcs"),El(s,60,u);var d=Kr(16);d.l+=8,d.write_shift(2,o.length),d.l+=6,El(s,60,d);var p=Kr(12+i.length);p.write_shift(2,e[1]),p.write_shift(2,e[2]),p.write_shift(2,0|(e[0].hidden?0:2)),p.write_shift(2,xl),p.write_shift(2,i.length),p.write_shift(1,0),p.write_shift(i.length,i,"sbcs"),p.l++,a.push(p)}));var o=Kr(80);o.write_shift(2,15),o.write_shift(2,61442),o.write_shift(4,n+o.length-8),o.write_shift(2,16),o.write_shift(2,61448),o.write_shift(4,8),o.write_shift(4,t.length+1),o.write_shift(4,xl),o.write_shift(2,15),o.write_shift(2,61443),o.write_shift(4,n+48),o.write_shift(2,15),o.write_shift(2,61444),o.write_shift(4,40),o.write_shift(2,1),o.write_shift(2,61449),o.write_shift(4,16),o.l+=16,o.write_shift(2,2),o.write_shift(2,61450),o.write_shift(4,8),o.write_shift(4,i),o.write_shift(4,5),El(e,236,r?N([o,r]):o),e.push(s.end()),a.forEach((function(t){El(e,28,t)})),Al.push([i,t.length+1,xl]),++xl}(i,w):_l(i,w),u&&El(i,574,function(e){var t=Kr(18),r=1718;return e&&e.RTL&&(r|=64),t.write_shift(2,r),t.write_shift(4,0),t.write_shift(4,64),t.write_shift(4,0),t.write_shift(4,0),t}((l.Views||[])[0])),u&&(c["!merges"]||[]).length&&El(i,229,function(e){var t=Kr(2+8*e.length);t.write_shift(2,e.length);for(var r=0;r255&&"undefined"!=typeof console&&console.error&&console.error("Worksheet '"+e.SheetNames[r]+"' extends beyond column IV (255). Data may be lost.")}var n=t||{};switch(n.biff||2){case 8:case 5:return function(e,t){var r=t||{},a=[];e&&!e.SSF&&(e.SSF=Ke(G)),e&&e.SSF&&(ye(),Te(e.SSF),r.revssf=Me(e.SSF),r.revssf[e.SSF[65535]]=0,r.ssf=e.SSF),xl=1,Al=[],r.Strings=[],r.Strings.Count=0,r.Strings.Unique=0,Hf(r),r.cellXfs=[],fc(r.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={});for(var n=0;n255||i.e.r>16383){if(a.WTF)throw new Error("Range "+(t["!ref"]||"A1")+" exceeds format limit A1:IV16384");i.e.c=Math.min(i.e.c,255),i.e.r=Math.min(i.e.c,16383)}for(var l=(((n||{}).Workbook||{}).WBProps||{}).date1904,f=[],h=[],u=i.s.c;u<=i.e.c;++u)c[u]=sa(u);for(var d=i.s.r;d<=i.e.r;++d)for(s&&(f=t["!data"][d]||[]),o=aa(d),u=i.s.c;u<=i.e.c;++u){var p=s?f[u]:t[c[u]+o];p&&(Sl(e,p,d,u,a,l),p.c&&h.push([p.c,d,u]))}_l(e,h)}(i,e.Sheets[e.SheetNames[n]],0,r,e),r._BIFF2FmtTable.forEach((function(e){r.biff<=3?El(a,30,function(e){var t=Kr(1+e.length);return t.write_shift(1,e.length),t.write_shift(e.length,e,"sbcs"),t}(e)):El(a,1054,function(e){var t=Kr(3+e.length);return t.l+=2,t.write_shift(1,e.length),t.write_shift(e.length,e,"sbcs"),t}(e))})),r.cellXfs.forEach((function(e){switch(r.biff){case 2:El(a,67,function(e){var t=Kr(4);return t.l+=2,t.write_shift(1,e.numFmtId),t.l++,t}(e));break;case 3:El(a,579,Os(e));break;case 4:El(a,1091,Rs(e))}})),delete r._BIFF2FmtTable,delete r.cellXfs,delete r._Fonts,a.push(i.end()),El(a,10),a.end()}(e,t)}throw new Error("invalid type "+n.bookType+" for BIFF")}function Nl(e,t){var r=t||{},a=null!=r.dense?r.dense:w,n={};a&&(n["!data"]=[]);var s=(e=ct(e,"\x3c!--","--\x3e")).match(/");var i=e.match(/<\/table/i),o=s.index,c=i&&i.index||e.length,l=at(e.slice(o,c),/(:?]*>)/i,""),f=-1,h=0,u=0,d=0,p={s:{r:1e7,c:1e7},e:{r:0,c:0}},m=[];for(o=0;o/i);for(c=0;c"))>-1;)y=y.slice(E+1);for(var k=0;k")));d=S.colspan?+S.colspan:1,((u=+S.rowspan)>1||d>1)&&m.push({s:{r:f,c:h},e:{r:f+(u||1)-1,c:h+d-1}});var x=S.t||S["data-t"]||"";if(y.length)if(y=qt(y),p.s.r>f&&(p.s.r=f),p.e.rh&&(p.s.c=h),p.e.cr||n[h].s.c>c||n[h].e.r1&&(i.rowspan=l),f>1&&(i.colspan=f),a.editable?p=''+p+"":d&&(i["data-t"]=d&&d.t||"z",null!=d.v&&(i["data-v"]=Vt(d.v instanceof Date?d.v.toISOString():d.v)),null!=d.z&&(i["data-z"]=d.z),d.l&&"#"!=(d.l.Target||"#").charAt(0)&&(p=''+p+"")),i.id=(a.id||"sjs")+"-"+u,s.push(sr("td",p,i))}}return""+s.join("")+""}var Dl='SheetJS Table Export',Pl="";function Ml(e,t,r){return[].join("")+""}function Ll(e,t){var r=t||{},a=null!=r.header?r.header:Dl,n=null!=r.footer?r.footer:Pl,s=[a],i=ca(e["!ref"]||"A1");if(s.push(Ml(0,0,r)),e["!ref"])for(var o=i.s.r;o<=i.e.r;++o)s.push(Fl(e,i,o,r));return s.push("
"+n),s.join("")}function Ul(e,t,r){var a=t.rows;if(!a)throw"Unsupported origin when "+t.tagName+" is not a TABLE";var n=r||{},s=null!=e["!data"],i=0,o=0;if(null!=n.origin)if("number"==typeof n.origin)i=n.origin;else{var c="string"==typeof n.origin?ia(n.origin):n.origin;i=c.r,o=c.c}var l=Math.min(n.sheetRows||1e7,a.length),f={s:{r:0,c:0},e:{r:i,c:o}};if(e["!ref"]){var h=ca(e["!ref"]);f.s.r=Math.min(f.s.r,h.s.r),f.s.c=Math.min(f.s.c,h.s.c),f.e.r=Math.max(f.e.r,h.e.r),f.e.c=Math.max(f.e.c,h.e.c),-1==i&&(f.e.r=i=h.e.r+1)}var u=[],d=0,p=e["!rows"]||(e["!rows"]=[]),m=0,v=0,g=0,b=0,w=0,T=0;for(e["!cols"]||(e["!cols"]=[]);m1||T>1)&&u.push({s:{r:v+i,c:b+o},e:{r:v+i+(w||1)-1,c:b+o+(T||1)-1}});var A={t:"s",v:_},C=k.getAttribute("data-t")||k.getAttribute("t")||"";null!=_&&(0==_.length?A.t=C||"z":n.raw||0==_.trim().length||"s"==C||("TRUE"===_?A={t:"b",v:!0}:"FALSE"===_?A={t:"b",v:!1}:isNaN(Ze(_))?isNaN(rt(_).getDate())||(A={t:"d",v:Xe(_)},n.UTC&&(A.v=st(A.v)),n.cellDates||(A={t:"n",v:We(A.v)}),A.z=n.dateNF||G[14]):A={t:"n",v:Ze(_)})),void 0===A.z&&null!=S&&(A.z=S);var I="",O=k.getElementsByTagName("A");if(O&&O.length)for(var R=0;R=l&&(e["!fullref"]=la((f.e.r=a.length-m+v-1+i,f))),e}function Bl(e,t){var r={};return(t||{}).dense&&(r["!data"]=[]),Ul(r,e,t)}function Wl(e){var t="",r=function(e){return e.ownerDocument.defaultView&&"function"==typeof e.ownerDocument.defaultView.getComputedStyle?e.ownerDocument.defaultView.getComputedStyle:"function"==typeof getComputedStyle?getComputedStyle:null}(e);return r&&(t=r(e).getPropertyValue("display")),t||(t=e.style&&e.style.display),"none"===t}function zl(e,t,r){var a=r||{},n=or(e);cr.lastIndex=0,n=it(ct(n,"\x3c!--","--\x3e"));for(var s,i,o,c="",l="",f=0,h=-1,u="";s=cr.exec(n);)switch(s[3]=s[3].replace(/_[\s\S]*$/,"")){case"number-style":case"currency-style":case"percentage-style":case"date-style":case"time-style":case"text-style":"/"===s[1]?("false"==i["truncate-on-overflow"]&&(c.match(/h/)?c=c.replace(/h+/,"[$&]"):c.match(/m/)?c=c.replace(/m+/,"[$&]"):c.match(/s/)&&(c=c.replace(/s+/,"[$&]"))),a[i.name]=c,c=""):"/"!==s[0].charAt(s[0].length-2)&&(c="",i=Ft(s[0],!1));break;case"boolean-style":"/"===s[1]?(a[i.name]="General",c=""):"/"!==s[0].charAt(s[0].length-2)&&(c="",i=Ft(s[0],!1));break;case"boolean":c+="General";break;case"text":"/"===s[1]?"%"==(u=n.slice(h,cr.lastIndex-s[0].length))&&"=0"==Lt(o.condition)?c=a[o["apply-style-name"]]+";"+c:console.error("ODS number format may be incorrect: "+o.condition);break;case"number":if("/"===s[1])break;l="",l+=Ye("0",+(o=Ft(s[0],!1))["min-integer-digits"]||1),Gt(o.grouping)&&(l=ee(Ye("#",Math.max(0,4-l.length))+l)),(+o["min-decimal-places"]||+o["decimal-places"])&&(l+="."),+o["min-decimal-places"]&&(l+=Ye("0",+o["min-decimal-places"]||1)),+o["decimal-places"]-(+o["min-decimal-places"]||0)&&(l+=Ye("0",+o["decimal-places"]-(+o["min-decimal-places"]||0))),c+=l;break;case"embedded-text":"/"===s[1]?0==f?c+='"'+n.slice(h,cr.lastIndex-s[0].length).replace(/"/g,'""')+'"':c=c.slice(0,f)+'"'+n.slice(h,cr.lastIndex-s[0].length).replace(/"/g,'""')+'"'+c.slice(f):"/"!==s[0].charAt(s[0].length-2)&&(h=cr.lastIndex,f=-+Ft(s[0],!1).position||0)}return a}function Hl(e,t,r){var a=t||{};null!=w&&null==a.dense&&(a.dense=w);var n,s,i,o,c,l,f,h=or(e),u=[],d=0,p={},m=[],v={};a.dense&&(v["!data"]=[]);var g,b={value:""},T="",y=0,E="",k=0,_=[],S=[],x=-1,A=-1,C={s:{r:1e6,c:1e7},e:{r:0,c:0}},I=0,O=r||{},R={},N=[],F={},D=[],P=1,M=1,L=[],U={Names:[],WBProps:{}},B={},W=["",""],z=[],H={},V="",$=0,G=!1,X=!1,j=0;for(cr.lastIndex=0,h=it(ct(h,"\x3c!--","--\x3e"));l=cr.exec(h);)switch(l[3]=l[3].replace(/_[\s\S]*$/,"")){case"table":case"工作表":"/"===l[1]?(C.e.c>=C.s.c&&C.e.r>=C.s.r?v["!ref"]=la(C):v["!ref"]="A1:A1",a.sheetRows>0&&a.sheetRows<=C.e.r&&(v["!fullref"]=v["!ref"],C.e.r=a.sheetRows-1,v["!ref"]=la(C)),N.length&&(v["!merges"]=N),D.length&&(v["!rows"]=D),o.name=o["名称"]||o.name,"undefined"!=typeof JSON&&JSON.stringify(o),m.push(o.name),p[o.name]=v,X=!1):"/"!==l[0].charAt(l[0].length-2)&&(o=Ft(l[0],!1),x=A=-1,C.s.r=C.s.c=1e7,C.e.r=C.e.c=0,v={},a.dense&&(v["!data"]=[]),N=[],D=[],X=!0);break;case"table-row-group":"/"===l[1]?--I:++I;break;case"table-row":case"行":if("/"===l[1]){x+=P,P=1;break}if((c=Ft(l[0],!1))["行号"]?x=c["行号"]-1:-1==x&&(x=0),(P=+c["number-rows-repeated"]||1)<10)for(j=0;j0&&(D[x+j]={level:I});A=-1;break;case"covered-table-cell":"/"!==l[1]&&++A,a.sheetStubs&&(a.dense?(v["!data"][x]||(v["!data"][x]=[]),v["!data"][x][A]={t:"z"}):v[oa({r:x,c:A})]={t:"z"}),T="",_=[];break;case"table-cell":case"数据":if("/"===l[0].charAt(l[0].length-2))++A,b=Ft(l[0],!1),M=parseInt(b["number-columns-repeated"]||"1",10),f={t:"z",v:null},b.formula&&0!=a.cellFormula&&(f.f=tc(Lt(b.formula))),b["style-name"]&&R[b["style-name"]]&&(f.z=R[b["style-name"]]),"string"==(b["数据类型"]||b["value-type"])&&(f.t="s",f.v=Lt(b["string-value"]||""),a.dense?(v["!data"][x]||(v["!data"][x]=[]),v["!data"][x][A]=f):v[sa(A)+aa(x)]=f),A+=M-1;else if("/"!==l[1]){T=E="",y=k=0,_=[],S=[],M=1;var K=P?x+P-1:x;if(++A>C.e.c&&(C.e.c=A),AC.e.r&&(C.e.r=K),z=[],H={},f={t:(b=Ft(l[0],!1))["数据类型"]||b["value-type"],v:null},b["style-name"]&&R[b["style-name"]]&&(f.z=R[b["style-name"]]),a.cellFormula)if(b.formula&&(b.formula=Lt(b.formula)),b["number-matrix-columns-spanned"]&&b["number-matrix-rows-spanned"]&&(F={s:{r:x,c:A},e:{r:x+(parseInt(b["number-matrix-rows-spanned"],10)||0)-1,c:A+(parseInt(b["number-matrix-columns-spanned"],10)||0)-1}},f.F=la(F),L.push([F,f.F])),b.formula)f.f=tc(b.formula);else for(j=0;j=L[j][0].s.r&&x<=L[j][0].e.r&&A>=L[j][0].s.c&&A<=L[j][0].e.c&&(f.F=L[j][1]);switch((b["number-columns-spanned"]||b["number-rows-spanned"])&&(F={s:{r:x,c:A},e:{r:x+(parseInt(b["number-rows-spanned"],10)||0)-1,c:A+(parseInt(b["number-columns-spanned"],10)||0)-1}},N.push(F)),b["number-columns-repeated"]&&(M=parseInt(b["number-columns-repeated"],10)),f.t){case"boolean":f.t="b",f.v=Gt(b["boolean-value"])||+b["boolean-value"]>=1;break;case"float":f.t="n",f.v=parseFloat(b.value),a.cellDates&&f.z&&me(f.z)&&(f.v=ze(f.v+(U.WBProps.date1904?1462:0)),f.t="number"==typeof f.v?"n":"d");break;case"percentage":case"currency":f.t="n",f.v=parseFloat(b.value);break;case"date":f.t="d",f.v=Xe(b["date-value"],U.WBProps.date1904),a.cellDates||(f.t="n",f.v=We(f.v,U.WBProps.date1904)),f.z||(f.z="m/d/yy");break;case"time":f.t="n",f.v=He(b["time-value"])/86400,a.cellDates&&(f.v=ze(f.v),f.t="number"==typeof f.v?"n":"d"),f.z||(f.z="HH:MM:SS");break;case"number":f.t="n",f.v=parseFloat(b["数据数值"]);break;default:if("string"!==f.t&&"text"!==f.t&&f.t)throw new Error("Unsupported value type "+f.t);f.t="s",null!=b["string-value"]&&(T=Lt(b["string-value"]),_=[])}}else{if(G=!1,"s"===f.t&&(f.v=T||"",_.length&&(f.R=_),G=0==y),B.Target&&(f.l=B),z.length>0&&(f.c=z,z=[]),T&&!1!==a.cellText&&(f.w=T),G&&(f.t="z",delete f.v),(!G||a.sheetStubs)&&!(a.sheetRows&&a.sheetRows<=x))for(var Y=0;Y0;)v["!data"][x+Y][A+M]=Ke(f);else for(v[oa({r:x+Y,c:A})]=f;--M>0;)v[oa({r:x+Y,c:A+M})]=Ke(f);C.e.c<=A&&(C.e.c=A)}A+=(M=parseInt(b["number-columns-repeated"]||"1",10))-1,M=0,f={},T="",_=[]}B={};break;case"document":case"document-content":case"电子表格文档":case"spreadsheet":case"主体":case"scripts":case"styles":case"font-face-decls":case"master-styles":if("/"===l[1]){if((n=u.pop())[0]!==l[3])throw"Bad state: "+n}else"/"!==l[0].charAt(l[0].length-2)&&u.push([l[3],!0]);break;case"annotation":if("/"===l[1]){if((n=u.pop())[0]!==l[3])throw"Bad state: "+n;H.t=T,_.length&&(H.R=_),H.a=V,z.push(H),T=E,y=k,_=S}else if("/"!==l[0].charAt(l[0].length-2)){u.push([l[3],!1]);var Z=Ft(l[0],!0);Z.display&&Gt(Z.display)||(z.hidden=!0),E=T,k=y,S=_,T="",y=0,_=[]}V="",$=0;break;case"creator":"/"===l[1]?V=h.slice($,l.index):$=l.index+l[0].length;break;case"meta":case"元数据":case"settings":case"config-item-set":case"config-item-map-indexed":case"config-item-map-entry":case"config-item-map-named":case"shapes":case"frame":case"text-box":case"image":case"data-pilot-tables":case"list-style":case"form":case"dde-links":case"event-listeners":case"chart":if("/"===l[1]){if((n=u.pop())[0]!==l[3])throw"Bad state: "+n}else"/"!==l[0].charAt(l[0].length-2)&&u.push([l[3],!1]);T="",y=0,_=[];break;case"scientific-number":case"currency-symbol":case"fill-character":case"script":case"libraries":case"automatic-styles":case"default-style":case"page-layout":case"map":case"font-face":case"paragraph-properties":case"table-properties":case"table-column-properties":case"table-row-properties":case"table-cell-properties":case"number":case"fraction":case"day":case"month":case"year":case"era":case"day-of-week":case"week-of-year":case"quarter":case"hours":case"minutes":case"seconds":case"am-pm":case"boolean":case"text-content":case"text-properties":case"embedded-text":case"body":case"电子表格":case"forms":case"table-column":case"table-header-rows":case"table-rows":case"table-column-group":case"table-header-columns":case"table-columns":case"graphic-properties":case"calculation-settings":case"named-expressions":case"label-range":case"label-ranges":case"named-expression":case"sort":case"sort-by":case"sort-groups":case"tab":case"line-break":case"span":case"s":case"date":case"object":case"title":case"标题":case"desc":case"binary-data":case"table-source":case"scenario":case"iteration":case"content-validations":case"content-validation":case"help-message":case"error-message":case"database-ranges":case"filter":case"filter-and":case"filter-or":case"filter-condition":case"filter-set-item":case"list-level-style-bullet":case"list-level-style-number":case"list-level-properties":case"sender-firstname":case"sender-lastname":case"sender-initials":case"sender-title":case"sender-position":case"sender-email":case"sender-phone-private":case"sender-fax":case"sender-company":case"sender-phone-work":case"sender-street":case"sender-city":case"sender-postal-code":case"sender-country":case"sender-state-or-province":case"author-name":case"author-initials":case"chapter":case"file-name":case"template-name":case"sheet-name":case"event-listener":case"initial-creator":case"creation-date":case"print-date":case"generator":case"document-statistic":case"user-defined":case"editing-duration":case"editing-cycles":case"config-item":case"page-number":case"page-count":case"time":case"cell-range-source":case"detective":case"operation":case"highlighted-range":case"data-pilot-table":case"source-cell-range":case"source-service":case"data-pilot-field":case"data-pilot-level":case"data-pilot-subtotals":case"data-pilot-subtotal":case"data-pilot-members":case"data-pilot-member":case"data-pilot-display-info":case"data-pilot-sort-info":case"data-pilot-layout-info":case"data-pilot-field-reference":case"data-pilot-groups":case"data-pilot-group":case"data-pilot-group-member":case"rect":case"dde-connection-decls":case"dde-connection-decl":case"dde-link":case"dde-source":case"properties":case"property":case"table-protection":case"data-pilot-grand-total":case"office-document-common-attrs":break;case"text-style":case"boolean-style":case"number-style":case"currency-style":case"percentage-style":case"date-style":case"time-style":if("/"===l[1]){var J=cr.lastIndex;zl(h.slice(i,cr.lastIndex),0,O),cr.lastIndex=J}else"/"!==l[0].charAt(l[0].length-2)&&(i=cr.lastIndex-l[0].length);break;case"style":var q=Ft(l[0],!1);"table-cell"==q.family&&O[q["data-style-name"]]&&(R[q.name]=O[q["data-style-name"]]);break;case"text":if("/>"===l[0].slice(-2))break;if("/"===l[1])switch(u[u.length-1][0]){case"number-style":case"date-style":case"time-style":h.slice(d,l.index)}else d=l.index+l[0].length;break;case"named-range":W=rc((s=Ft(l[0],!1))["cell-range-address"]);var Q={Name:s.name,Ref:W[0]+"!"+W[1]};X&&(Q.Sheet=m.length),U.Names.push(Q);break;case"null-date":"1904-01-01"===(s=Ft(l[0],!1))["date-value"]&&(U.WBProps.date1904=!0);break;case"p":case"文本串":if(["master-styles"].indexOf(u[u.length-1][0])>-1)break;if("/"!==l[1]||b&&b["string-value"])"/>"==l[0].slice(-2)?T+="\n":(Ft(l[0],!1),y=l.index+l[0].length);else{var ee=(g=void 0,g=h.slice(y,l.index).replace(/[\t\r\n]/g," ").trim().replace(/ +/g," ").replace(//g," ").replace(//g,(function(e,t){return Array(parseInt(t,10)+1).join(" ")})).replace(/]*\/>/g,"\t").replace(//g,"\n"),[Lt(g.replace(/<[^<>]*>/g,""))]);T=(T.length>0?T+"\n":"")+ee[0]}break;case"database-range":if("/"===l[1])break;try{p[(W=rc(Ft(l[0])["target-range-address"]))[0]]["!autofilter"]={ref:W[1]}}catch(e){}break;case"a":if("/"!==l[1]){if(!(B=Ft(l[0],!1)).href)break;B.Target=Lt(B.href),delete B.href,"#"==B.Target.charAt(0)&&B.Target.indexOf(".")>-1?(W=rc(B.Target.slice(1)),B.Target="#"+W[0]+"!"+W[1]):B.Target.match(/^\.\.[\\\/]/)&&(B.Target=B.Target.slice(3))}break;default:switch(l[2]){case"dc:":case"calcext:":case"loext:":case"ooo:":case"chartooo:":case"draw:":case"style:":case"chart:":case"form:":case"uof:":case"表:":case"字:":break;default:if(a.WTF)throw new Error(l)}}var te={Sheets:p,SheetNames:m,Workbook:U};return a.bookSheets&&delete te.Sheets,te}function Vl(e,t){t=t||{},gt(e,"META-INF/manifest.xml")&&function(e,t){for(var r,a,n=or(e);r=cr.exec(n);)switch(r[3]){case"manifest":break;case"file-entry":if("/"==(a=Ft(r[0],!1)).path&&a.type!==dn)throw new Error("This OpenDocument is not a spreadsheet");break;case"encryption-data":case"algorithm":case"start-key-generation":case"key-derivation":throw new Error("Unsupported ODS Encryption");default:if(t&&t.WTF)throw r}}(wt(e,"META-INF/manifest.xml"),t);var r=Tt(e,"styles.xml"),a=r&&zl(Zt(r)),n=Tt(e,"content.xml");if(!n)throw new Error("Missing content.xml in ODS / UOF file");var s=Hl(Zt(n),t,a);return gt(e,"meta.xml")&&(s.Props=gn(wt(e,"meta.xml"))),s.bookType="ods",s}function $l(e,t){var r=Hl(e,t);return r.bookType="fods",r}var Gl=function(){var e=["",'',"",'',"",'',"",""].join(""),t=""+e+"";return function(){return At+t}}();function Xl(e,t){var r="number",a="",n={"style:name":t},s="",i=0;e:if((e=e.replace(/"[$]"/g,"$")).indexOf(";")>-1&&(console.error("Unsupported ODS Style Map exported. Using first branch of "+e),e=e.slice(0,e.indexOf(";"))),"@"!=e){if(e.indexOf(/\$/)>-1&&(r="currency"),'"'==e[i]){for(s="";'"'!=e[++i]||'"'==e[++i];)s+=e[i];"*"==e[1+--i]?(i++,a+=""+Wt(s.replace(/""/g,'"'))+""):a+=""+Wt(s.replace(/""/g,'"'))+"",e=e.slice(i+1),i=0}var o=e.match(/# (\?+)\/(\?+)/);if(o)a+=sr("number:fraction",null,{"number:min-integer-digits":0,"number:min-numerator-digits":o[1].length,"number:max-denominator-value":Math.max(+o[1].replace(/./g,"9"),+o[2].replace(/./g,"9"))});else if(o=e.match(/# (\?+)\/(\d+)/))a+=sr("number:fraction",null,{"number:min-integer-digits":0,"number:min-numerator-digits":o[1].length,"number:denominator-value":+o[2]});else if(o=e.match(/\b(\d+)(|\.\d+)%/))r="percentage",a+=sr("number:number",null,{"number:decimal-places":o[2]&&o.length-1||0,"number:min-decimal-places":o[2]&&o.length-1||0,"number:min-integer-digits":o[1].length})+"%";else{var c=!1;if(["y","m","d"].indexOf(e[0])>-1){r="date";t:for(;i";break;case"yyy":case"yyyy":a+='';break;case"mmmmm":console.error("ODS has no equivalent of format |mmmmm|");case"m":case"mm":case"mmm":case"mmmm":a+='';break;case"d":case"dd":a+='';break;case"ddd":case"dddd":a+=''}break;case'"':for(;'"'!=e[++i]||'"'==e[++i];)s+=e[i];--i,a+=""+Wt(s.slice(1).replace(/""/g,'"'))+"";break;case"\\":a+=""+Wt(s=e[++i])+"";break;case"/":case":":a+=""+Wt(s)+"";break;default:console.error("unrecognized character "+s+" in ODF format "+e)}if(!c)break e;e=e.slice(i+1),i=0}if(e.match(/^\[?[hms]/))for("number"==r&&(r="time"),e.match(/\[/)&&(e=e.replace(/[\[\]]/g,""),n["number:truncate-on-overflow"]="false");i';break;case"m":case"mm":a+='';break;case"s":case"ss":if("."==e[i+1])do{s+=e[i+1],++i}while("0"==e[i+1]);a+='"}break;case'"':for(;'"'!=e[++i]||'"'==e[++i];)s+=e[i];--i,a+=""+Wt(s.slice(1).replace(/""/g,'"'))+"";break;case"/":case":":a+=""+Wt(s)+"";break;case"a":if("a/p"==e.slice(i,i+3).toLowerCase()){a+="",i+=2;break}if("am/pm"==e.slice(i,i+5).toLowerCase()){a+="",i+=4;break}default:console.error("unrecognized character "+s+" in ODF format "+e)}else{if(e.indexOf(/\$/)>-1&&(r="currency"),"$"==e[0]&&(a+='$',e=e.slice(1),i=0),'"'==e[i=0]){for(;'"'!=e[++i]||'"'==e[++i];)s+=e[i];"*"==e[1+--i]?(i++,a+=""+Wt(s.replace(/""/g,'"'))+""):a+=""+Wt(s.replace(/""/g,'"'))+"",e=e.slice(i+1),i=0}var f=e.match(/([#0][0#,]*)(\.[0#]*|)(E[+]?0*|)/i);if(f&&f[0]){var h=f[1].replace(/,/g,"");a+="-1?' number:grouping="true"':"")+(f[2]&&' number:decimal-places="'+(f[2].length-1)+'"'||' number:decimal-places="0"')+(f[3]&&f[3].indexOf("+")>-1?' number:forced-exponent-sign="true"':"")+(f[3]?' number:min-exponent-digits="'+f[3].match(/0+/)[0].length+'"':"")+">",i=f.index+f[0].length}else console.error("Could not find numeric part of "+e);if('"'==e[i]){for(s="";'"'!=e[++i]||'"'==e[++i];)s+=e[i];--i,a+=""+Wt(s.replace(/""/g,'"'))+""}}}}else r="text",a="";return a?sr("number:"+r+"-style",a,n):(console.error("Could not generate ODS number format for |"+e+"|"),"")}function jl(e,t,r){for(var a=[],n=0;n\n"+a.map((function(e){var t=(-1==r?"$":"")+ac(e.Ref);return" "+sr("table:named-range",null,{"table:name":e.Name,"table:cell-range-address":t,"table:base-cell-address":t.replace(/[\.][^\.]*$/,".$A$1")})})).join("\n")+"\n \n":""}var Kl=function(){var e=function(e,t){return Wt(e).replace(/ +/g,(function(e){return''})).replace(/\t/g,"").replace(/\n/g,t?"":"").replace(/^ /,"").replace(/ $/,"")},t=" \n",r=function(r,a,n,s,i,o){var c=[];c.push(' \n');var l=0,f=0,h=ca(r["!ref"]||"A1"),u=r["!merges"]||[],d=0,p=null!=r["!data"];if(r["!cols"])for(f=0;f<=h.e.c;++f)c.push(" \n");var m="",v=r["!rows"]||[];for(l=0;l\n");for(;l<=h.e.r;++l){for(m=v[l]?' table:style-name="ro'+v[l].ods+'"':"",c.push(" \n"),f=0;ff||u[d].s.r>l||u[d].e.c\n");else{var T=oa({r:l,c:f}),y=p?(r["!data"][l]||[])[f]:r[T];if(y&&y.f&&(b["table:formula"]=Wt(("of:="+y.f.replace(fo,"$1[.$2$3$4$5]").replace(/\]:\[/g,":")).replace(/;/g,"|").replace(/,/g,";")),y.F&&y.F.slice(0,T.length)==T)){var E=ca(y.F);b["table:number-matrix-columns-spanned"]=E.e.c-E.s.c+1,b["table:number-matrix-rows-spanned"]=E.e.r-E.s.r+1}if(y){switch(y.t){case"b":w=y.v?"TRUE":"FALSE",b["office:value-type"]="boolean",b["office:boolean-value"]=y.v?"true":"false";break;case"n":w=y.w||String(y.v||0),b["office:value-type"]="float",b["office:value"]=y.v||0;break;case"s":case"str":w=null==y.v?"":y.v,b["office:value-type"]="string";break;case"d":w=y.w||Xe(y.v,o).toISOString(),b["office:value-type"]="date",b["office:date-value"]=Xe(y.v,o).toISOString(),b["table:style-name"]="ce1";break;default:c.push(t);continue}var k=e(w);if(y.l&&y.l.Target){var _=y.l.Target;"#"==(_="#"==_.charAt(0)?"#"+ac(_.slice(1)):_).charAt(0)||_.match(/^\w+:/)||(_="../"+_),k=sr("text:a",k,{"xlink:href":_.replace(/&/g,"&")})}i[y.z]&&(b["table:style-name"]="ce"+i[y.z].slice(1));var S=sr("text:p",k,{});if(y.c){for(var x="",A="",C={},I=0;I"+e(y.c[I].t)+"";y.c.hidden||(C["office:display"]=!0),S=sr("office:annotation",A,C)+S}c.push(" "+sr("table:table-cell",S,b)+"\n")}else c.push(t)}}c.push(" \n")}return(a.Workbook||{}).Names&&c.push(jl(a.Workbook.Names,a.SheetNames,n)),c.push(" \n"),c.join("")};return function(e,t){var a=[At],n=nr({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"}),s=nr({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});"fods"==t.bookType?(a.push("\n"),a.push(mn().replace(/]*?>/,"").replace(/<\/office:document-meta>/,"")+"\n")):a.push("\n");var i=function(e,t){e.push(" \n");var r=0;t.SheetNames.map((function(e){return t.Sheets[e]})).forEach((function(t){if(t&&t["!cols"])for(var a=0;a\n'),e.push(' \n'),e.push(" \n"),++r}}));var a=0;t.SheetNames.map((function(e){return t.Sheets[e]})).forEach((function(t){if(t&&t["!rows"])for(var r=0;r\n'),e.push(' \n'),e.push(" \n"),++a}})),e.push(' \n'),e.push(' \n'),e.push(" \n"),e.push(' \n'),e.push(' \n'),e.push(" /\n"),e.push(' \n'),e.push(" /\n"),e.push(" \n"),e.push(" \n");var n={},s=69;return t.SheetNames.map((function(e){return t.Sheets[e]})).forEach((function(t){if(t){var r=null!=t["!data"];if(t["!ref"])for(var a=ca(t["!ref"]),i=0;i<=a.e.r;++i)for(var o=0;o<=a.e.c;++o){var c=r?(t["!data"][i]||[])[o]:t[oa({r:i,c:o})];if(c&&c.z&&"general"!=c.z.toLowerCase()&&!n[c.z]){var l=Xl(c.z,"N"+s);l&&(n[c.z]="N"+s,++s,e.push(l+"\n"))}}}})),e.push(' \n'),Fe(n).forEach((function(t){e.push('\n')})),e.push(" \n"),n}(a,e);a.push(" \n"),a.push(" \n"),((e.Workbook||{}).WBProps||{}).date1904&&a.push(' \n \n \n');for(var o=0;o!=e.SheetNames.length;++o)a.push(r(e.Sheets[e.SheetNames[o]],e,o,0,i,((e.Workbook||{}).WBProps||{}).date1904));return(e.Workbook||{}).Names&&a.push(jl(e.Workbook.Names,e.SheetNames,-1)),a.push(" \n"),a.push(" \n"),"fods"==t.bookType?a.push(""):a.push(""),a.join("")}}();function Yl(e,t){if("fods"==t.bookType)return Kl(e,t);var r=_t(),a="",n=[],s=[];return kt(r,a="mimetype","application/vnd.oasis.opendocument.spreadsheet"),kt(r,a="content.xml",Kl(e,t)),n.push([a,"text/xml"]),s.push([a,"ContentFile"]),kt(r,a="styles.xml",Gl(e,t)),n.push([a,"text/xml"]),s.push([a,"StylesFile"]),kt(r,a="meta.xml",At+mn()),n.push([a,"text/xml"]),s.push([a,"MetadataFile"]),kt(r,a="manifest.rdf",function(e){var t=[At];t.push('\n');for(var r=0;r!=e.length;++r)t.push(pn(e[r][0],e[r][1])),t.push(("",[' \n',' \n'," \n"].join("")));return t.push(pn("","Document","pkg")),t.push(""),t.join("")}(s)),n.push([a,"application/rdf+xml"]),kt(r,a="META-INF/manifest.xml",function(e){var t=[At];t.push('\n'),t.push(' \n');for(var r=0;r\n');return t.push(""),t.join("")}(n)),r}var Zl=function(){try{return"undefined"==typeof Uint8Array||void 0===Uint8Array.prototype.subarray?"slice":"undefined"!=typeof Buffer?void 0===Buffer.prototype.subarray?"slice":("function"==typeof Buffer.from?Buffer.from([72,62]):new Buffer([72,62]))instanceof Uint8Array?"subarray":"slice":"subarray"}catch(e){return"slice"}}();function Jl(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function ql(e){return"undefined"!=typeof TextDecoder?(new TextDecoder).decode(e):Zt(O(e))}function Ql(e){return"undefined"!=typeof TextEncoder?(new TextEncoder).encode(e):C(Jt(e))}function ef(e){for(var t=0,r=0;r>1&1431655765))+(e>>2&858993459))+(e>>4)&252645135)>>>24}function rf(e,t){var r=t.l,a=127&e[r];e:if(e[r++]>=128){if(a|=(127&e[r])<<7,e[r++]<128)break e;if(a|=(127&e[r])<<14,e[r++]<128)break e;if(a|=(127&e[r])<<21,e[r++]<128)break e;if(a+=(127&e[r])*Math.pow(2,28),++r,e[r++]<128)break e;if(a+=(127&e[r])*Math.pow(2,35),++r,e[r++]<128)break e;if(a+=(127&e[r])*Math.pow(2,42),++r,e[r++]<128)break e}return t.l=r,a}function af(e){var t=new Uint8Array(7);t[0]=127&e;var r=1;e:if(e>127){if(t[r-1]|=128,t[r]=e>>7&127,++r,e<=16383)break e;if(t[r-1]|=128,t[r]=e>>14&127,++r,e<=2097151)break e;if(t[r-1]|=128,t[r]=e>>21&127,++r,e<=268435455)break e;if(t[r-1]|=128,t[r]=e/256>>>21&127,++r,e<=34359738367)break e;if(t[r-1]|=128,t[r]=e/65536>>>21&127,++r,e<=4398046511103)break e;t[r-1]|=128,t[r]=e/16777216>>>21&127,++r}return t[Zl](0,r)}function nf(e){for(var t={l:0},r=[];t.l=128;);a=e[Zl](r.l,o),r.l=o;break;case 1:a=e[Zl](o,o+8),r.l=o+8;break;case 2:var c=rf(e,r);a=e[Zl](r.l,r.l+c),r.l+=c;break;case 5:a=e[Zl](o,o+4),r.l=o+4;break;default:throw new Error("PB Type ".concat(i," for Field ").concat(s," at offset ").concat(n))}var l={data:a,type:i};null==t[s]&&(t[s]=[]),t[s].push(l)}return t}function lf(e){var t=[];return e.forEach((function(e,r){0!=r&&e.forEach((function(e){e.data&&(t.push(af(8*r+e.type)),2==e.type&&t.push(af(e.data.length)),t.push(e.data))}))})),ef(t)}function ff(e,t){return(null==e?void 0:e.map((function(e){return t(e.data)})))||[]}function hf(e){for(var t,r=[],a={l:0};a.l>>0>0),r.push(i)}return r}function uf(e){var t=[];return e.forEach((function(e){var r=[[],[{data:af(e.id),type:0}],[]];null!=e.merge&&(r[3]=[{data:af(+!!e.merge),type:0}]);var a=[];e.messages.forEach((function(e){a.push(e.data),e.meta[3]=[{type:0,data:af(e.data.length)}],r[2].push({data:lf(e.meta),type:2})}));var n=lf(r);t.push(af(n.length)),t.push(n),a.forEach((function(e){return t.push(e)}))})),ef(t)}function df(e,t){if(0!=e)throw new Error("Unexpected Snappy chunk type ".concat(e));for(var r={l:0},a=rf(t,r),n=[],s=r.l;s>2&7),o=(224&t[s++])<<3,o|=t[s++]):(c=1+(t[s++]>>2),2==i?(o=t[s]|t[s+1]<<8,s+=2):(o=(t[s]|t[s+1]<<8|t[s+2]<<16|t[s+3]<<24)>>>0,s+=4)),0==o)throw new Error("Invalid offset 0");for(var l=n.length-1,f=o;l>=0&&f>=n[l].length;)f-=n[l].length,--l;if(l<0){if(0!=f)throw new Error("Invalid offset beyond length");f=n[l=0].length}if(c0&&(n.push(n[l][Zl](n[l].length-f)),c-=f),++l;c>=n[l].length;)n.push(n[l]),c-=n[l].length,++l;c&&n.push(n[l][Zl](0,c))}n.length>25&&(n=[ef(n)])}else{var h=t[s++]>>2;if(h<60)++h;else{var u=h-59;h=t[s],u>1&&(h|=t[s+1]<<8),u>2&&(h|=t[s+2]<<16),u>3&&(h|=t[s+3]<<24),h>>>=0,h++,s+=u}n.push(t[Zl](s,s+h)),s+=h}}for(var d=0,p=0;p>8&255]))):a<=16777216?(i+=4,t.push(new Uint8Array([248,a-1&255,a-1>>8&255,a-1>>16&255]))):a<=4294967296&&(i+=5,t.push(new Uint8Array([252,a-1&255,a-1>>8&255,a-1>>16&255,a-1>>>24&255]))),t.push(e[Zl](r,r+a)),i+=a,n[0]=0,n[1]=255&i,n[2]=i>>8&255,n[3]=i>>16&255,r+=a}return ef(t)}var vf=function(){return{sst:[],rsst:[],ofmt:[],nfmt:[],fmla:[],ferr:[],cmnt:[]}};function gf(e,t,r,a,n){var s,i,o,c,l=255&t,f=t>>8,h=f>=5?n:a;e:if(r&(f>4?8:4)&&"n"==e.t&&7==l){var u=(null==(s=h[7])?void 0:s[0])?of(h[7][0].data):-1;if(-1==u)break e;var d=(null==(i=h[15])?void 0:i[0])?of(h[15][0].data):-1,p=(null==(o=h[16])?void 0:o[0])?of(h[16][0].data):-1,m=(null==(c=h[40])?void 0:c[0])?of(h[40][0].data):-1,v=e.v,g=v;t:if(m){if(0==v){d=p=2;break t}d=v>=604800?1:v>=86400?2:v>=3600?4:v>=60?8:v>=1?16:32,Math.floor(v)!=v?p=32:v%60?p=16:v%3600?p=8:v%86400?p=4:v%604800&&(p=2),p=2&&(g=v/86400,p>2&&(v-=86400*(g|=0)),w.push('d"d"'),b.push(g+(2==u?" day"+(1==g?"":"s"):1==u?"d":""))),d<=4&&p>=4&&(g=v/3600,p>4&&(v-=3600*(g|=0)),w.push((d>=4?"[h]":"h")+'"h"'),b.push(g+(2==u?" hour"+(1==g?"":"s"):1==u?"h":""))),d<=8&&p>=8&&(g=v/60,p>8&&(v-=60*(g|=0)),w.push((d>=8?"[m]":"m")+'"m"'),0==u?b.push((8==d&&8==p||g>=10?"":"0")+g):b.push(g+(2==u?" minute"+(1==g?"":"s"):1==u?"m":""))),d<=16&&p>=16&&(g=v,p>16&&(v-=g|=0),w.push((d>=16?"[s]":"s")+'"s"'),0==u?b.push((16==p&&16==d||g>=10?"":"0")+g):b.push(g+(2==u?" second"+(1==g?"":"s"):1==u?"s":""))),p>=32&&(g=Math.round(1e3*v),d<32&&w.push('.000"ms"'),0==u?b.push((g>=100?"":g>=10?"0":"00")+g):b.push(g+(2==u?" millisecond"+(1==g?"":"s"):1==u?"ms":""))),e.w=b.join(0==u?":":" "),e.z=w.join(0==u?'":"':" "),0==u&&(e.w=e.w.replace(/:(\d\d\d)$/,".$1"))}}function bf(e,t){var r=new Uint8Array(32),a=Jl(r),n=12,s=0;switch(r[0]=5,e.t){case"n":if(e.z&&me(e.z)){r[1]=5,a.setFloat64(n,(ze(e.v+1462).getTime()-Date.UTC(2001,0,1))/1e3,!0),s|=4,n+=8;break}r[1]=2,function(e,t,r){var a=Math.floor(0==r?0:Math.LOG10E*Math.log(Math.abs(r)))+6176-16,n=r/Math.pow(10,a-6176);e[t+15]|=a>>7,e[t+14]|=(127&a)<<1;for(var s=0;n>=1;++s,n/=256)e[t+s]=255&n;e[t+15]|=r>=0?0:128}(r,n,e.v),s|=1,n+=16;break;case"b":r[1]=6,a.setFloat64(n,e.v?1:0,!0),s|=2,n+=8;break;case"s":var i=null==e.v?"":String(e.v);if(e.l){var o=t.rsst.findIndex((function(t){var r;return t.v==i&&t.l==(null==(r=e.l)?void 0:r.Target)}));-1==o&&(t.rsst[o=t.rsst.length]={v:i,l:e.l.Target}),r[1]=9,a.setUint32(n,o,!0),s|=16,n+=4}else{var c=t.sst.indexOf(i);-1==c&&(t.sst[c=t.sst.length]=i),r[1]=3,a.setUint32(n,c,!0),s|=8,n+=4}break;case"d":r[1]=5,a.setFloat64(n,(e.v.getTime()-Date.UTC(2001,0,1))/1e3,!0),s|=4,n+=8;break;case"z":r[1]=0;break;default:throw"unsupported cell type "+e.t}return e.c&&(t.cmnt.push(function(e){for(var t={a:"",t:"",replies:[]},r=0;r1?12:8;2&i&&(l=s.getUint32(d,!0),d+=4),d+=4*tf(i&(r>1?3468:396)),512&i&&(o=s.getUint32(d,!0),d+=4),d+=4*tf(i&(r>1?12288:4096)),16&i&&(c=s.getUint32(d,!0),d+=4),32&i&&(f=s.getFloat64(d,!0),d+=8),64&i&&(u.setTime(u.getTime()+1e3*(h=s.getFloat64(d,!0))),d+=8),r>1&&255&(i=s.getUint32(8,!0)>>>16)&&(-1==l&&(l=s.getUint32(d,!0)),d+=4);var p=e[r>=4?1:2];switch(p){case 0:return;case 2:case 7:n={t:"n",v:f};break;case 3:n={t:"s",v:t.sst[c]};break;case 5:n=(null==a?void 0:a.cellDates)?{t:"d",v:u}:{t:"n",v:h/86400+35430,z:G[14]};break;case 6:n={t:"b",v:f>0};break;case 8:n={t:"e",v:0};break;case 9:if(!(o>-1))throw new Error("Unsupported cell type ".concat(e[Zl](0,4)));var m=t.rsst[o];n={t:"s",v:m.v},m.l&&(n.l={Target:m.l});break;default:throw new Error("Unsupported cell type ".concat(e[Zl](0,4)))}return l>-1&&gf(n,p|r<<8,i,t.ofmt[l],t.nfmt[l]),7==p&&(n.v/=86400),n}(e,t,e[0],r);case 5:return function(e,t,r){var a,n=Jl(e),s=(n.getUint32(4,!0),n.getUint32(8,!0)),i=12,o=-1,c=-1,l=-1,f=NaN,h=NaN,u=0,d=new Date(Date.UTC(2001,0,1));1&s&&(f=function(e,t){for(var r=(127&e[t+15])<<7|e[t+14]>>1,a=1&e[t+14],n=t+13;n>=t;--n)a=256*a+e[n];return(128&e[t+15]?-a:a)*Math.pow(10,r-6176)}(e,i),i+=16),2&s&&(h=n.getFloat64(i,!0),i+=8),4&s&&(d.setTime(d.getTime()+1e3*(u=n.getFloat64(i,!0))),i+=8),8&s&&(c=n.getUint32(i,!0),i+=4),16&s&&(o=n.getUint32(i,!0),i+=4),i+=4*tf(480&s),512&s&&(n.getUint32(i,!0),i+=4),i+=4*tf(1024&s),2048&s&&(n.getUint32(i,!0),i+=4);var p,m,v=e[1];switch(v){case 0:a={t:"z"};break;case 2:case 10:a={t:"n",v:f};break;case 3:a={t:"s",v:t.sst[c]};break;case 5:a=(null==r?void 0:r.cellDates)?{t:"d",v:d}:{t:"n",v:u/86400+35430,z:G[14]};break;case 6:a={t:"b",v:h>0};break;case 7:a={t:"n",v:h};break;case 8:a={t:"e",v:0};break;case 9:if(!(o>-1))throw new Error("Unsupported cell type ".concat(e[1]," : ").concat(31&s," : ").concat(e[Zl](0,4)));var g=t.rsst[o];a={t:"s",v:g.v},g.l&&(a.l={Target:g.l});break;default:throw new Error("Unsupported cell type ".concat(e[1]," : ").concat(31&s," : ").concat(e[Zl](0,4)))}if(i+=4*tf(4096&s),516096&s&&(-1==l&&(l=n.getUint32(i,!0)),i+=4),524288&s){var b=n.getUint32(i,!0);i+=4,t.cmnt[b]&&(a.c=(p=t.cmnt[b],(m=[]).push({t:p.t||"",a:p.a,T:p.replies&&p.replies.length>0}),p.replies&&p.replies.forEach((function(e){m.push({t:e.t||"",a:e.a,T:!0})})),m))}return l>-1&&gf(a,1280|v,s>>13,t.ofmt[l],t.nfmt[l]),7==v&&(a.v/=86400),a}(e,t,r);default:throw new Error("Unsupported payload version ".concat(e[0]))}}function yf(e){return of(cf(e)[1][0].data)}function Ef(e){return lf([[],[{type:0,data:af(e)}]])}function kf(e,t){var r,a=(null==(r=e.messages[0].meta[5])?void 0:r[0])?nf(e.messages[0].meta[5][0].data):[];-1==a.indexOf(t)&&(a.push(t),e.messages[0].meta[5]=[{type:2,data:sf(a)}])}function _f(e,t){var r,a=(null==(r=e.messages[0].meta[5])?void 0:r[0])?nf(e.messages[0].meta[5][0].data):[];e.messages[0].meta[5]=[{type:2,data:sf(a.filter((function(e){return e!=t})))}]}function Sf(e,t){var r=cf(t.data),a=of(r[1][0].data),n=r[3],s=[];return(n||[]).forEach((function(t){var r,n,i=cf(t.data);if(i[1]){var o=of(i[1][0].data)>>>0;switch(a){case 1:s[o]=ql(i[3][0].data);break;case 8:var c=cf(e[yf(i[9][0].data)][0].data),l=e[yf(c[1][0].data)][0],f=of(l.meta[1][0].data);if(2001!=f)throw new Error("2000 unexpected reference to ".concat(f));var h=cf(l.data),u={v:h[3].map((function(e){return ql(e.data)})).join("")};s[o]=u;e:if(null==(r=null==h?void 0:h[11])?void 0:r[0]){var d=null==(n=cf(h[11][0].data))?void 0:n[1];if(!d)break e;d.forEach((function(t){var r,a,n,s=cf(t.data);if(null==(r=s[2])?void 0:r[0]){var i=e[yf(null==(a=s[2])?void 0:a[0].data)][0],o=of(i.meta[1][0].data);switch(o){case 2032:var c=cf(i.data);(null==(n=null==c?void 0:c[2])?void 0:n[0])&&!u.l&&(u.l=ql(c[2][0].data));break;case 2039:break;default:console.log("unrecognized ObjectAttribute type ".concat(o))}}}))}break;case 2:s[o]=cf(i[6][0].data);break;case 3:s[o]=cf(i[5][0].data);break;case 10:var p=e[yf(i[10][0].data)][0];s[o]=xf(e,p.data);break;default:throw a}}})),s}function xf(e,t){var r,a,n,s,i,o,c,l,f,h,u={t:"",a:""},d=cf(t);if((null==(a=null==(r=null==d?void 0:d[1])?void 0:r[0])?void 0:a.data)&&(u.t=ql(null==(s=null==(n=null==d?void 0:d[1])?void 0:n[0])?void 0:s.data)||""),null==(o=null==(i=null==d?void 0:d[3])?void 0:i[0])?void 0:o.data){var p=cf(e[yf(null==(l=null==(c=null==d?void 0:d[3])?void 0:c[0])?void 0:l.data)][0].data);(null==(h=null==(f=p[1])?void 0:f[0])?void 0:h.data)&&(u.a=ql(p[1][0].data))}return(null==d?void 0:d[4])&&(u.replies=[],d[4].forEach((function(t){var r=e[yf(t.data)][0];u.replies.push(xf(e,r.data))}))),u}function Af(e,t,r){var a=cf(t.data),n={"!ref":"A1"};(null==r?void 0:r.dense)&&(n["!data"]=[]);var s=e[yf(a[2][0].data)],i=of(s[0].meta[1][0].data);if(6001!=i)throw new Error("6000 unexpected reference to ".concat(i));return function(e,t,r,a){var n,s,i,o,c,l,f,h,u,d,p=cf(t.data),m={s:{r:0,c:0},e:{r:0,c:0}};if(m.e.r=(of(p[6][0].data)>>>0)-1,m.e.r<0)throw new Error("Invalid row varint ".concat(p[6][0].data));if(m.e.c=(of(p[7][0].data)>>>0)-1,m.e.c<0)throw new Error("Invalid col varint ".concat(p[7][0].data));r["!ref"]=la(m);var v=null!=r["!data"],g=r,b=cf(p[4][0].data),w=vf();(null==(n=b[4])?void 0:n[0])&&(w.sst=Sf(e,e[yf(b[4][0].data)][0])),(null==(s=b[6])?void 0:s[0])&&(w.fmla=Sf(e,e[yf(b[6][0].data)][0])),(null==(i=b[11])?void 0:i[0])&&(w.ofmt=Sf(e,e[yf(b[11][0].data)][0])),(null==(o=b[12])?void 0:o[0])&&(w.ferr=Sf(e,e[yf(b[12][0].data)][0])),(null==(c=b[17])?void 0:c[0])&&(w.rsst=Sf(e,e[yf(b[17][0].data)][0])),(null==(l=b[19])?void 0:l[0])&&(w.cmnt=Sf(e,e[yf(b[19][0].data)][0])),(null==(f=b[22])?void 0:f[0])&&(w.nfmt=Sf(e,e[yf(b[22][0].data)][0]));var T=cf(b[3][0].data),y=0;if(!(null==(h=b[9])?void 0:h[0]))throw"NUMBERS file missing row tree";if(cf(b[9][0].data)[1].map((function(e){return cf(e.data)})).forEach((function(t){y=of(t[1][0].data);var n=of(t[2][0].data),s=T[1][n];if(!s)throw"NUMBERS missing tile "+n;var i=cf(s.data),o=e[yf(i[2][0].data)][0],c=of(o.meta[1][0].data);if(6002!=c)throw new Error("6001 unexpected reference to ".concat(c));var l=function(e,t){var r,a=cf(t.data),n=-1;(null==(r=null==a?void 0:a[7])?void 0:r[0])&&(n=of(a[7][0].data)>>>0?1:0);var s=ff(a[5],(function(e){return function(e,t){var r,a,n,s,i,o,c,l,f,h,u,d,p,m,v,g,b=cf(e),w=of(b[1][0].data)>>>0,T=of(b[2][0].data)>>>0,y=(null==(a=null==(r=b[8])?void 0:r[0])?void 0:a.data)&&of(b[8][0].data)>0||!1;if((null==(s=null==(n=b[7])?void 0:n[0])?void 0:s.data)&&0!=t)v=null==(o=null==(i=b[7])?void 0:i[0])?void 0:o.data,g=null==(l=null==(c=b[6])?void 0:c[0])?void 0:l.data;else{if(!(null==(h=null==(f=b[4])?void 0:f[0])?void 0:h.data)||1==t)throw"NUMBERS Tile missing ".concat(t," cell storage");v=null==(d=null==(u=b[4])?void 0:u[0])?void 0:d.data,g=null==(m=null==(p=b[3])?void 0:p[0])?void 0:m.data}for(var E=y?4:1,k=Jl(v),_=[],S=0;S=1&&(A[_[_.length-1][0]]=g[Zl](_[_.length-1][1]*E)),{R:w,cells:A}}(e,n)}));return{nrows:of(a[4][0].data)>>>0,data:s.reduce((function(e,t){return e[t.R]||(e[t.R]=[]),t.cells.forEach((function(r,a){if(e[t.R][a])throw new Error("Duplicate cell r=".concat(t.R," c=").concat(a));e[t.R][a]=r})),e}),[])}}(0,o);l.data.forEach((function(e,t){e.forEach((function(e,n){var s=Tf(e,w,a);s&&(v?(g["!data"][y+t]||(g["!data"][y+t]=[]),g["!data"][y+t][n]=s):r[sa(n)+aa(y+t)]=s)}))})),y+=l.nrows})),null==(u=b[13])?void 0:u[0]){var E=e[yf(b[13][0].data)][0],k=of(E.meta[1][0].data);if(6144!=k)throw new Error("Expected merge type 6144, found ".concat(k));r["!merges"]=null==(d=cf(E.data))?void 0:d[1].map((function(e){var t=cf(e.data),r=Jl(cf(t[1][0].data)[1][0].data),a=Jl(cf(t[2][0].data)[1][0].data);return{s:{r:r.getUint16(0,!0),c:r.getUint16(2,!0)},e:{r:r.getUint16(0,!0)+a.getUint16(0,!0)-1,c:r.getUint16(2,!0)+a.getUint16(2,!0)-1}}}))}}(e,s[0],n,r),n}function Cf(e,t){var r,a,n,s,i,o,c,l={},f=[];if(e.FullPaths.forEach((function(e){if(e.match(/\.iwpv2/))throw new Error("Unsupported password protection")})),e.FileIndex.forEach((function(e){if(e.name.match(/\.iwa$/)&&0==e.content[0]){var t,r;try{t=pf(e.content)}catch(t){return console.log("?? "+e.content.length+" "+(t.message||t))}try{r=hf(t)}catch(e){return console.log("## "+(e.message||e))}r.forEach((function(e){l[e.id]=e.messages,f.push(e.id)}))}})),!f.length)throw new Error("File has no messages");if((null==(n=null==(a=null==(r=null==l?void 0:l[1])?void 0:r[0].meta)?void 0:a[1])?void 0:n[0].data)&&1e4==of(l[1][0].meta[1][0].data))throw new Error("Pages documents are not supported");var h=(null==(c=null==(o=null==(i=null==(s=null==l?void 0:l[1])?void 0:s[0])?void 0:i.meta)?void 0:o[1])?void 0:c[0].data)&&1==of(l[1][0].meta[1][0].data)&&l[1][0];if(h||f.forEach((function(e){l[e].forEach((function(e){if(1==of(e.meta[1][0].data)>>>0){if(h)throw new Error("Document has multiple roots");h=e}}))})),!h)throw new Error("Cannot find Document root");return function(e,t,r){var a,n=bh();n.Workbook={WBProps:{date1904:!0}};var s=cf(t.data);if(null==(a=s[2])?void 0:a[0])throw new Error("Keynote presentations are not supported");if(ff(s[1],yf).forEach((function(t){e[t].forEach((function(t){if(2==of(t.meta[1][0].data)){var a=function(e,t,r){var a,n=cf(t.data),s={name:(null==(a=n[1])?void 0:a[0])?ql(n[1][0].data):"",sheets:[]};return ff(n[2],yf).forEach((function(t){e[t].forEach((function(t){6e3==of(t.meta[1][0].data)&&s.sheets.push(Af(e,t,r))}))})),s}(e,t,r);a.sheets.forEach((function(e,t){wh(n,e,0==t?a.name:a.name+"_"+t,!0)}))}}))})),0==n.SheetNames.length)throw new Error("Empty NUMBERS file");return n.bookType="numbers",n}(l,h,t)}function If(e,t,r){var a,n,s,i=[[],[{type:0,data:af(0)}],[{type:0,data:af(0)}],[{type:2,data:new Uint8Array([])}],[{type:2,data:new Uint8Array(Array.from({length:510},(function(){return 255})))}],[{type:0,data:af(5)}],[{type:2,data:new Uint8Array([])}],[{type:2,data:new Uint8Array(Array.from({length:510},(function(){return 255})))}],[{type:0,data:af(1)}]];if(!(null==(a=i[6])?void 0:a[0])||!(null==(n=i[7])?void 0:n[0]))throw"Mutation only works on post-BNC storages!";var o=0;if(i[7][0].data.length<2*e.length){var c=new Uint8Array(2*e.length);c.set(i[7][0].data),i[7][0].data=c}if(i[4][0].data.length<2*e.length){var l=new Uint8Array(2*e.length);l.set(i[4][0].data),i[4][0].data=l}for(var f=Jl(i[7][0].data),h=0,u=[],d=Jl(i[4][0].data),p=0,m=[],v=r?4:1,g=0;g0)i.push(c);else if(a.T<0)i.pop();else if(!o||t.WTF)throw new Error("Unexpected record 0x"+c.toString(16))}}),t),a["!id"][s["!rel"]]&&(s["!drawel"]=a["!id"][s["!rel"]]),s}(e,a,r,n,s):function(e,t,r,a,n){if(!e)return e;a||(a={"!id":{}});var s,i={"!type":"chart","!drawel":null,"!rel":""},o=e.match(wc);return o&&Tc(o[0],0,n,r),(s=e.match(/drawing r:id="(.*?)"/))&&(i["!rel"]=s[1]),a["!id"][i["!rel"]]&&(i["!drawel"]=a["!id"][i["!rel"]]),i}(e,0,r,n,s)}(d,t,n,c,s[a],l))||!u["!drawel"])break;var p=xt(u["!drawel"].Target,t),m=ln(p),v=function(e,t){if(!e)return"??";var r=(e.match(/]*r:id="([^<>"]*)"/)||["",""])[1];return t["!id"][r].Target}(Tt(e,p,!0),fn(Tt(e,m,!0),p)),g=xt(v,p),b=ln(g);u=function(e,t,r,a,n,s){var i=s||{"!type":"chart"};if(!e)return s;var o=0,c=0,l="A",f={s:{r:2e6,c:2e6},e:{r:0,c:0}};return(ot(e,"","")||[]).forEach((function(e){var t=function(e){var t,r=[],a=e.match(/^/);(e.match(/\/]*>([^<])<\/c:v><\/c:pt>/gm)||[]).forEach((function(e){var t=e.match(/\/]*>([^<]*)<\/c:v><\/c:pt>/);t&&(r[+t[1]]=a?+t[2]:t[2])}));var n=Lt((ft(e,"c:formatCode")||["","General"])[1]);return(ot(e,"","")||[]).forEach((function(e){t=e.replace(/<[^<>]*>/g,"")})),[r,n,t]}(e);f.s.r=f.s.c=0,f.e.c=o,l=sa(o),t[0].forEach((function(e,r){i["!data"]?(i["!data"][r]||(i["!data"][r]=[]),i["!data"][r][o]={t:"n",v:e,z:t[1]}):i[l+aa(r)]={t:"n",v:e,z:t[1]},c=r})),f.e.r0&&(i["!ref"]=la(f)),i}(Tt(e,g,!0),0,0,fn(Tt(e,b,!0),g),0,u);break;case"macro":y=t,s[a],y.slice(-4),u={"!type":"macro"};break;case"dialog":u=function(e,t,r,a,n,s,i,o){return t.slice(-4),{"!type":"dialog"}}(0,t,0,0,s[a]);break;default:throw new Error("Unrecognized sheet type "+o)}i[a]=u;var w=[],T=[];s&&s[a]&&Fe(s[a]).forEach((function(r){var n="";if(s[a][r].Type==cn.CMNT){if(n=xt(s[a][r].Target,t),!(w=function(e,t,r){return".bin"===t.slice(-4)?function(e,t){var r=[],a=[],n={},s=!1;return Yr(e,(function(e,i,o){switch(o){case 632:a.push(e);break;case 635:n=e;break;case 637:n.t=e.t,n.h=e.h,n.r=e.r;break;case 636:if(n.author=a[n.iauthor],delete n.iauthor,t.sheetRows&&n.rfx&&t.sheetRows<=n.rfx.r)break;n.t||(n.t=""),delete n.rfx,r.push(n);break;case 3072:case 37:case 38:break;case 35:s=!0;break;case 36:s=!1;break;default:if(i.T);else if(!s||t.WTF)throw new Error("Unexpected record 0x"+o.toString(16))}})),r}(e,r):function(e,t){if(e.match(/<(?:\w+:)?comments *\/>/))return[];var r=[],a=[],n=ht(e,"authors");n&&n[1]&&n[1].split(/<\/\w*:?author>/).forEach((function(e){if(""!==e&&""!==e.trim()){var t=e.match(/<(?:\w+:)?author[^<>]*>(.*)/);t&&r.push(t[1])}}));var s=ht(e,"commentList");return s&&s[1]&&s[1].split(/<\/\w*:?comment>/).forEach((function(e){if(""!==e&&""!==e.trim()){var n=e.match(/<(?:\w+:)?comment[^<>]*>/);if(n){var s=Ft(n[0]),i={author:s.authorId&&r[s.authorId]||"sheetjsghost",ref:s.ref,guid:s.guid},o=ia(s.ref);if(!(t.sheetRows&&t.sheetRows<=o.r)){var c=ht(e,"text"),l=!!c&&!!c[1]&&si(c[1])||{r:"",t:"",h:""};i.r=l.r,""==l.r&&(l.t=l.h=""),i.t=(l.t||"").replace(/\r\n/g,"\n").replace(/\r/g,"\n"),t.cellHTML&&(i.h=l.h),a.push(i)}}}})),a}(e,r)}(wt(e,n,!0),n,c))||!w.length)return;eo(u,w,!1)}s[a][r].Type==cn.TCMNT&&(n=xt(s[a][r].Target,t),T=T.concat(function(e,t){var r=[],a=!1,n={},s=0;return e.replace(Ot,(function(i,o){var c=Ft(i);switch(Dt(c[0])){case"":case"":case"":case"":break;case"":null!=n.t&&r.push(n);break;case"":case"":n.t=e.slice(s,o).replace(/\r\n/g,"\n").replace(/\r/g,"\n");break;case"":case"":case"":a=!1;break;default:if(!a&&t.WTF)throw new Error("unrecognized "+c[0]+" in threaded comments")}return i})),r}(wt(e,n,!0),c)))})),T&&T.length&&eo(u,T,!0,c.people||[]),function(e,t,r,a,n,s,i,o){if(e&&e["!legdrawel"]){var c=Tt(r,xt(e["!legdrawel"].Target,a),!0);c&&function(e,t,r){var a=0;(ut(e,"shape")||[]).forEach((function(e){var n="",s=!0,i=-1,o=-1,c=-1;if(e.replace(Ot,(function(t,r){var a=Ft(t);switch(Dt(a[0])){case"":s=!1;break;case"":case"":i=r+t.length;break;case"":o=+e.slice(i,r).trim();break;case"":c=+e.slice(i,r).trim()}return""})),"Note"===n){var l=gh(t,o>=0&&c>=0?oa({r:o,c:c}):r[a].ref);l.c&&(l.c.hidden=s),++a}}))}(Zt(c),e,o||[])}}(u,0,e,t,0,0,0,w)}catch(e){if(c.WTF)throw e}var y}function $f(e){return"/"==e.charAt(0)?e.slice(1):e}function Gf(e,t){if(ye(),zf(t=t||{}),gt(e,"META-INF/manifest.xml"))return Vl(e,t);if(gt(e,"objectdata.xml"))return Vl(e,t);if(gt(e,"Index/Document.iwa")){if("undefined"==typeof Uint8Array)throw new Error("NUMBERS file parsing requires Uint8Array support");if(void 0!==Cf){if(e.FileIndex)return Cf(e,t);var r=Ie.utils.cfb_new();return Et(e).forEach((function(t){kt(r,t,yt(e,t))})),Cf(r,t)}throw new Error("Unsupported NUMBERS file")}if(!gt(e,"[Content_Types].xml")){if(gt(e,"index.xml.gz"))throw new Error("Unsupported NUMBERS 08 file");if(gt(e,"index.xml"))throw new Error("Unsupported NUMBERS 09 file");var a=Ie.find(e,"Index.zip");if(a)return delete(t=Ke(t)).type,"string"==typeof a.content&&(t.type="binary"),"undefined"!=typeof Bun&&Buffer.isBuffer(a.content)?Jf(new Uint8Array(a.content),t):Jf(a.content,t);throw new Error("Unsupported ZIP file")}var n,s,i=Et(e),o=function(e){var t={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""};if(!e||!e.match)return t;var r={};if((e.match(Ot)||[]).forEach((function(e){var a=Ft(e);switch(a[0].replace(Rt,"<")){case"0?t.calcchains[0]:"",t.sst=t.strs.length>0?t.strs[0]:"",t.style=t.styles.length>0?t.styles[0]:"",t.defaults=r,delete t.calcchains,t}(Tt(e,"[Content_Types].xml")),c=!1;if(0===o.workbooks.length&&wt(e,s="xl/workbook.xml",!0)&&o.workbooks.push(s),0===o.workbooks.length){if(!wt(e,s="xl/workbook.bin",!0))throw new Error("Could not find workbook");o.workbooks.push(s),c=!0}"bin"==o.workbooks[0].slice(-3)&&(c=!0);var l={},f={};if(!t.bookSheets&&!t.bookProps){if(nc=[],o.sst)try{nc=function(e,t,r){return".bin"===t.slice(-4)?function(e,t){var r=[],a=!1;return Yr(e,(function(e,n,s){switch(s){case 159:r.Count=e[0],r.Unique=e[1];break;case 19:r.push(e);break;case 160:return!0;case 35:a=!0;break;case 36:a=!1;break;default:if(n.T,!a||t.WTF)throw new Error("Unexpected record 0x"+s.toString(16))}})),r}(e,r):function(e,t){var r=[],a="";if(!e)return r;var n=ht(e,"sst");if(n){a=n[1].replace(ii,"").split(oi);for(var s=0;s!=a.length;++s){var i=si(a[s].trim(),t);null!=i&&(r[r.length]=i)}n=Ft(n[0].slice(0,n[0].indexOf(">"))),r.Count=n.count,r.Unique=n.uniqueCount}return r}(e,r)}(wt(e,$f(o.sst)),o.sst,t)}catch(e){if(t.WTF)throw e}t.cellStyles&&o.themes.length&&(l=Zi(Tt(e,o.themes[0].replace(/^\//,""),!0)||"",t)),o.style&&(f=function(e,t,r,a){return".bin"===t.slice(-4)?function(e,t,r){var a={NumberFmt:[]};for(var n in G)a.NumberFmt[n]=G[n];a.CellXf=[],a.Fonts=[];var s=[],i=!1;return Yr(e,(function(e,n,o){switch(o){case 44:a.NumberFmt[e[0]]=e[1],xe(e[1],e[0]);break;case 43:a.Fonts.push(e),null!=e.color.theme&&t&&t.themeElements&&t.themeElements.clrScheme&&(e.color.rgb=Ei(t.themeElements.clrScheme[e.color.theme].rgb,e.color.tint||0));break;case 1025:case 45:case 46:case 48:case 507:case 572:case 475:case 1171:case 2102:case 1130:case 512:case 2095:case 3072:break;case 47:617==s[s.length-1]&&a.CellXf.push(e);break;case 35:i=!0;break;case 36:i=!1;break;case 37:s.push(o),i=!0;break;case 38:s.pop(),i=!1;break;default:if(n.T>0)s.push(o);else if(n.T<0)s.pop();else if(!i||r.WTF&&37!=s[s.length-1])throw new Error("Unexpected record 0x"+o.toString(16))}})),a}(e,r,a):Bi(e,r,a)}(wt(e,$f(o.style)),o.style,l,t))}o.links.map((function(r){try{return fn(Tt(e,ln($f(r))),r),function(e,t,r,a){if(".bin"===r.slice(-4))return function(e,t,r,a){if(!e)return e;var n=a||{},s=!1;Yr(e,(function(e,t,r){switch(r){case 359:case 363:case 364:case 366:case 367:case 368:case 369:case 370:case 371:case 472:case 577:case 578:case 579:case 580:case 581:case 582:case 583:case 584:case 585:case 586:case 587:break;case 35:s=!0;break;case 36:s=!1;break;default:if(t.T);else if(!s||n.WTF)throw new Error("Unexpected record 0x"+r.toString(16))}}),n)}(e,0,0,a)}(wt(e,$f(r)),0,r,t)}catch(e){}}));var h=function(e,t,r){return".bin"===t.slice(-4)?function(e,t){var r={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""},a=[],n=!1;t||(t={}),t.biff=12;var s=[],i=[[]];return i.SheetNames=[],i.XTI=[],Tl[16]={n:"BrtFRTArchID$",f:Yc},Yr(e,(function(e,o,c){switch(c){case 156:i.SheetNames.push(e.name),r.Sheets.push(e);break;case 153:r.WBProps=e;break;case 39:null!=e.Sheet&&(t.SID=e.Sheet),e.Ref=e.Ptg?zo(e.Ptg,0,null,i,t):"#REF!",delete t.SID,delete e.Ptg,s.push(e);break;case 1036:case 361:case 2071:case 158:case 143:case 664:case 353:case 3072:case 3073:case 534:case 677:case 157:case 610:case 2050:case 155:case 548:case 676:case 128:case 665:case 2128:case 2125:case 549:case 2053:case 596:case 2076:case 2075:case 2082:case 397:case 154:case 1117:case 553:case 2091:case 16:break;case 357:case 358:case 355:case 667:i[0].length?i.push([c,e]):i[0]=[c,e],i[i.length-1].XTI=[];break;case 362:0===i.length&&(i[0]=[],i[0].XTI=[]),i[i.length-1].XTI=i[i.length-1].XTI.concat(e),i.XTI=i.XTI.concat(e);break;case 35:case 37:a.push(c),n=!0;break;case 36:case 38:a.pop(),n=!1;break;default:if(o.T);else if(!n||t.WTF&&37!=a[a.length-1]&&35!=a[a.length-1])throw new Error("Unexpected record 0x"+c.toString(16))}}),t),$c(r),r.Names=s,r.supbooks=i,r}(e,r):function(e,t){if(!e)throw new Error("Could not find file");var r={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},Names:[],xmlns:""},a=!1,n="xmlns",s={},i=0;if(e.replace(Ot,(function(o,c){var l=Ft(o);switch(Dt(l[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":Uc.forEach((function(e){if(null!=l[e[0]])switch(e[2]){case"bool":r.WBProps[e[0]]=Gt(l[e[0]]);break;case"int":r.WBProps[e[0]]=parseInt(l[e[0]],10);break;default:r.WBProps[e[0]]=l[e[0]]}})),l.codeName&&(r.WBProps.CodeName=Zt(l.codeName));break;case"":delete l[0],r.WBView.push(l);break;case"":case"":a=!0;break;case"":case"":case"":a=!1;break;case"":s.Ref=Lt(Zt(e.slice(i,c))),r.Names.push(s);break;case"":delete l[0],r.CalcPr=l;break;default:if(!a&&t.WTF)throw new Error("unrecognized "+l[0]+" in workbook")}return o})),-1===fr.indexOf(r.xmlns))throw new Error("Unknown Namespace: "+r.xmlns);return $c(r),r}(e,r)}(wt(e,$f(o.workbooks[0])),o.workbooks[0],t),u={},d="";o.coreprops.length&&((d=wt(e,$f(o.coreprops[0]),!0))&&(u=gn(d)),0!==o.extprops.length&&(d=wt(e,$f(o.extprops[0]),!0))&&function(e,t,r){var a={};t||(t={}),e=Zt(e),Tn.forEach((function(r){var n=(ht(e,r[0])||[])[1];switch(r[2]){case"string":n&&(t[r[1]]=Lt(n));break;case"bool":t[r[1]]="true"===n;break;case"raw":var s=ft(e,r[0]);s&&s.length>0&&(a[r[1]]=s[1])}})),a.HeadingPairs&&a.TitlesOfParts&&En(a.HeadingPairs,a.TitlesOfParts,t,r)}(d,u,t));var p={};t.bookSheets&&!t.bookProps||0!==o.custprops.length&&(d=Tt(e,$f(o.custprops[0]),!0))&&(p=function(e,t){var r={},a="",n=e.match(_n);if(n)for(var s=0;s!=n.length;++s){var i=n[s],o=Ft(i);switch(Dt(o[0])){case"":a=null;break;default:if(0===i.indexOf(""),l=c[0].slice(4),f=c[1];switch(l){case"lpstr":case"bstr":case"lpwstr":case"cy":case"error":r[a]=Lt(f);break;case"bool":r[a]=Gt(f);break;case"i1":case"i2":case"i4":case"i8":case"int":case"uint":r[a]=parseInt(f,10);break;case"r4":case"r8":case"decimal":r[a]=parseFloat(f);break;case"filetime":case"date":r[a]=Xe(f);break;default:if("/"==l.slice(-1))break;t.WTF&&"undefined"!=typeof console&&console.warn("Unexpected",i,l,c)}}else if("0&&(n=u.SheetNames),t.bookProps&&(m.Props=u,m.Custprops=p),t.bookSheets&&void 0!==n&&(m.SheetNames=n),t.bookSheets?m.SheetNames:t.bookProps))return m;n={};var v,g={};t.bookDeps&&o.calcchain&&(v=wt(e,$f(o.calcchain)),g=".bin"===o.calcchain.slice(-4)?function(e,t,r){var a=[];return Yr(e,(function(e,t,r){if(63===r)a.push(e);else if(!t.T)throw new Error("Unexpected record 0x"+r.toString(16))})),a}(v):function(e){var t=[];if(!e)return t;var r=1;return(e.match(Ot)||[]).forEach((function(e){var a=Ft(e);switch(a[0]){case"":case"":break;case"=1&&(t.xlmeta=function(e,t,r){return".bin"===t.slice(-4)?function(e,t,r){var a={Types:[],Cell:[],Value:[]},n=r||{},s=[],i=!1,o=2;return Yr(e,(function(e,t,r){switch(r){case 335:a.Types.push({name:e.name});break;case 51:e.forEach((function(e){1==o?a.Cell.push({type:a.Types[e[0]-1].name,index:e[1]}):0==o&&a.Value.push({type:a.Types[e[0]-1].name,index:e[1]})}));break;case 337:o=e?1:0;break;case 338:o=2;break;case 35:s.push(r),i=!0;break;case 36:s.pop(),i=!1;break;default:if(t.T);else if(!i||n.WTF&&35!=s[s.length-1])throw new Error("Unexpected record 0x"+r.toString(16))}})),a}(e,0,r):function(e,t,r){var a={Types:[],Cell:[],Value:[]};if(!e)return a;var n,s=!1,i=2;return e.replace(Ot,(function(e){var t=Ft(e);switch(Dt(t[0])){case"":case"":case"":case"":case"":case"":case"":case"":case"":case"":break;case"":case"":i=2;break;case"":s=!1;break;case"=1&&(t.people=function(e,t){var r=[],a=!1;return e.replace(Ot,(function(e){var n=Ft(e);switch(Dt(n[0])){case"":case"":case"":case"":case"":break;case"":a=!1;break;default:if(!a&&t.WTF)throw new Error("unrecognized "+n[0]+" in threaded comments")}return e})),r}(wt(e,$f(o.people[0])),t)),A&&(A=function(e,t){if(!e)return 0;try{e=t.map((function(t){return t.id||(t.id=t.strRelID),[t.name,e["!id"][t.id].Target,(r=e["!id"][t.id].Type,cn.WS.indexOf(r)>-1?"sheet":cn.CS&&r==cn.CS?"chart":cn.DS&&r==cn.DS?"dialog":cn.MS&&r==cn.MS?"macro":r&&r.length?r:"sheet")];var r}))}catch(e){return null}return e&&0!==e.length?e:null}(A,h.Sheets));var C=wt(e,"xl/worksheets/sheet.xml",!0)?1:0;e:for(T=0;T!=u.Worksheets;++T){var I="sheet";if(A&&A[T]?(b="xl/"+A[T][1].replace(/[\/]?xl\//,""),gt(e,b)||(b=A[T][1]),gt(e,b)||(b=x.replace(/_rels\/[\S\s]*$/,"")+A[T][1]),I=A[T][2]):b=(b="xl/worksheets/sheet"+(T+1-C)+"."+_).replace(/sheet0\./,"sheet."),w=b.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels"),t&&null!=t.sheets)switch(typeof t.sheets){case"number":if(T!=t.sheets)continue e;break;case"string":if(u.SheetNames[T].toLowerCase()!=t.sheets.toLowerCase())continue e;break;default:if(Array.isArray&&Array.isArray(t.sheets)){for(var O=!1,R=0;R!=t.sheets.length;++R)"number"==typeof t.sheets[R]&&t.sheets[R]==T&&(O=1),"string"==typeof t.sheets[R]&&t.sheets[R].toLowerCase()==u.SheetNames[T].toLowerCase()&&(O=1);if(!O)continue e}}Vf(e,b,w,u.SheetNames[T],T,y,n,I,t,h,l,f)}return m={Directory:o,Workbook:h,Props:u,Custprops:p,Deps:g,Sheets:n,SheetNames:u.SheetNames,Strings:nc,Styles:f,Themes:l,SSF:Ke(G)},t&&t.bookFiles&&(e.files?(m.keys=i,m.files=e.files):(m.keys=[],m.files={},e.FullPaths.forEach((function(t,r){t=t.replace(/^Root Entry[\/]/,""),m.keys.push(t),m.files[t]=e.FileIndex[r]})))),t&&t.bookVBA&&(o.vba.length>0?m.vbaraw=wt(e,$f(o.vba[0]),!0):o.defaults&&o.defaults.bin===oo&&(m.vbaraw=wt(e,"xl/vbaProject.bin",!0))),m.bookType=c?"xlsb":"xlsx",m}function Xf(e,t){var r,a,n=t||{},s="Workbook",i=Ie.find(e,s);try{if(s="/!DataSpaces/Version",!(i=Ie.find(e,s))||!i.content)throw new Error("ECMA-376 Encrypted file missing "+s);if(r=i.content,(a={}).id=r.read_shift(0,"lpp4"),a.R=hi(r,4),a.U=hi(r,4),a.W=hi(r,4),s="/!DataSpaces/DataSpaceMap",!(i=Ie.find(e,s))||!i.content)throw new Error("ECMA-376 Encrypted file missing "+s);var o=function(e){var t=[];e.l+=4;for(var r=e.read_shift(4);r-- >0;)t.push(ui(e));return t}(i.content);if(1!==o.length||1!==o[0].comps.length||0!==o[0].comps[0].t||"StrongEncryptionDataSpace"!==o[0].name||"EncryptedPackage"!==o[0].comps[0].v)throw new Error("ECMA-376 Encrypted file bad "+s);if(s="/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace",!(i=Ie.find(e,s))||!i.content)throw new Error("ECMA-376 Encrypted file missing "+s);var c=function(e){var t=[];e.l+=4;for(var r=e.read_shift(4);r-- >0;)t.push(e.read_shift(0,"lpp4"));return t}(i.content);if(1!=c.length||"StrongEncryptionTransform"!=c[0])throw new Error("ECMA-376 Encrypted file bad "+s);if(s="/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary",!(i=Ie.find(e,s))||!i.content)throw new Error("ECMA-376 Encrypted file missing "+s);!function(e){var t=function(e){var t={};return e.read_shift(4),e.l+=4,t.id=e.read_shift(0,"lpp4"),t.name=e.read_shift(0,"lpp4"),t.R=hi(e,4),t.U=hi(e,4),t.W=hi(e,4),t}(e);if(t.ename=e.read_shift(0,"8lpp4"),t.blksz=e.read_shift(4),t.cmode=e.read_shift(4),4!=e.read_shift(4))throw new Error("Bad !Primary record")}(i.content)}catch(e){}if(s="/EncryptionInfo",!(i=Ie.find(e,s))||!i.content)throw new Error("ECMA-376 Encrypted file missing "+s);var l=function(e){var t=hi(e);switch(t.Minor){case 2:return[t.Minor,mi(e)];case 3:return[t.Minor,vi()];case 4:return[t.Minor,gi(e)]}throw new Error("ECMA-376 Encrypted file unrecognized Version: "+t.Minor)}(i.content);if(s="/EncryptedPackage",!(i=Ie.find(e,s))||!i.content)throw new Error("ECMA-376 Encrypted file missing "+s);if(4==l[0]&&"undefined"!=typeof decrypt_agile)return decrypt_agile(l[1],i.content,n.password||"",n);if(2==l[0]&&"undefined"!=typeof decrypt_std76)return decrypt_std76(l[1],i.content,n.password||"",n);throw new Error("File is password-protected")}function jf(e,t){e&&!e.SSF&&(e.SSF=Ke(G)),e&&e.SSF&&(ye(),Te(e.SSF),t.revssf=Me(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF),t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,ic?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var r="xml",a=co.indexOf(t.bookType)>-1,n={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""};Hf(t=t||{});var s=_t(),i="",o=0;if(t.cellXfs=[],fc(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),kt(s,i="docProps/core.xml",wn(e.Props,t)),n.coreprops.push(i),un(t.rels,2,i,cn.CORE_PROPS),i="docProps/app.xml",e.Props&&e.Props.SheetNames);else if(e.Workbook&&e.Workbook.Sheets){for(var c=[],l=0;l0&&(kt(s,i="docProps/custom.xml",Sn(e.Custprops)),n.custprops.push(i),un(t.rels,4,i,cn.CUST_PROPS));var f,h=["SheetJ5"];for(t.tcid=0,o=1;o<=e.SheetNames.length;++o){var u={"!id":{}},d=e.Sheets[e.SheetNames[o-1]];if((d||{})["!type"],kt(s,i="xl/worksheets/sheet"+o+"."+r,xc(o-1,t,e,u)),n.sheets.push(i),un(t.wbrels,-1,"worksheets/sheet"+o+"."+r,cn.WS[0]),d){var p=d["!comments"],m=!1,v="";if(p&&p.length>0){var g=!1;p.forEach((function(e){e[1].forEach((function(e){1==e.T&&(g=!0)}))})),g&&(kt(s,v="xl/threadedComments/threadedComment"+o+".xml",ro(p,h,t)),n.threadedcomments.push(v),un(u,-1,"../threadedComments/threadedComment"+o+".xml",cn.TCMNT)),kt(s,v="xl/comments"+o+"."+r,to(p)),n.comments.push(v),un(u,-1,"../comments"+o+"."+r,cn.CMNT),m=!0}d["!legacy"]&&m&&kt(s,"xl/drawings/vmlDrawing"+o+".vml",Qi(o,d["!comments"])),delete d["!comments"],delete d["!legacy"]}u["!id"].rId1&&kt(s,ln(i),hn(u))}return null!=t.Strings&&t.Strings.length>0&&(kt(s,i="xl/sharedStrings."+r,function(e,t){if(!t.bookSST)return"";var r=[At];r[r.length]=sr("sst",null,{xmlns:fr[0],count:e.Count,uniqueCount:e.Unique});for(var a=0;a!=e.length;++a)if(null!=e[a]){var n=e[a],s="";n.r?s+=n.r:(s+=""),s+="",r[r.length]=s}return r.length>2&&(r[r.length]="",r[1]=r[1].replace("/>",">")),r.join("")}(t.Strings,t)),n.strs.push(i),un(t.wbrels,-1,"sharedStrings."+r,cn.SST)),kt(s,i="xl/workbook."+r,function(e){var t=[At];t[t.length]=sr("workbook",null,{xmlns:fr[0],"xmlns:r":lr.r});var r=e.Workbook&&(e.Workbook.Names||[]).length>0,a={codeName:"ThisWorkbook"};e.Workbook&&e.Workbook.WBProps&&(Uc.forEach((function(t){null!=e.Workbook.WBProps[t[0]]&&e.Workbook.WBProps[t[0]]!=t[1]&&(a[t[0]]=e.Workbook.WBProps[t[0]])})),e.Workbook.WBProps.CodeName&&(a.codeName=e.Workbook.WBProps.CodeName,delete a.CodeName)),t[t.length]=sr("workbookPr",null,a);var n=e.Workbook&&e.Workbook.Sheets||[],s=0;if(n&&n[0]&&n[0].Hidden){for(t[t.length]="",s=0;s!=e.SheetNames.length&&n[s]&&n[s].Hidden;++s);s==e.SheetNames.length&&(s=0),t[t.length]='',t[t.length]=""}for(t[t.length]="",s=0;s!=e.SheetNames.length;++s){var i={name:Wt(e.SheetNames[s].slice(0,31))};if(i.sheetId=""+(s+1),i["r:id"]="rId"+(s+1),n[s])switch(n[s].Hidden){case 1:i.state="hidden";break;case 2:i.state="veryHidden"}t[t.length]=sr("sheet",null,i)}return t[t.length]="",r&&(t[t.length]="",e.Workbook&&e.Workbook.Names&&e.Workbook.Names.forEach((function(e){var r={name:e.Name};e.Comment&&(r.comment=e.Comment),null!=e.Sheet&&(r.localSheetId=""+e.Sheet),e.Hidden&&(r.hidden="1"),e.Ref&&(t[t.length]=sr("definedName",Wt(e.Ref),r))})),t[t.length]=""),t.length>2&&(t[t.length]="",t[1]=t[1].replace("/>",">")),t.join("")}(e)),n.workbooks.push(i),un(t.rels,1,i,cn.WB),kt(s,i="xl/theme/theme1.xml",Ji(e.Themes,t)),n.themes.push(i),un(t.wbrels,-1,"theme/theme1.xml",cn.THEME),kt(s,i="xl/styles."+r,function(e,t){var r,a=[At,sr("styleSheet",null,{xmlns:fr[0],"xmlns:vt":lr.vt})];return e.SSF&&null!=(r=function(e){var t=[""];return[[5,8],[23,26],[41,44],[50,392]].forEach((function(r){for(var a=r[0];a<=r[1];++a)null!=e[a]&&(t[t.length]=sr("numFmt",null,{numFmtId:a,formatCode:Wt(e[a])}))})),1===t.length?"":(t[t.length]="",t[0]=sr("numFmts",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(e.SSF))&&(a[a.length]=r),a[a.length]='',a[a.length]='',a[a.length]='',a[a.length]='',(r=function(e){var t=[];return t[t.length]=sr("cellXfs",null),e.forEach((function(e){t[t.length]=sr("xf",null,e)})),t[t.length]="",2===t.length?"":(t[0]=sr("cellXfs",null,{count:t.length-2}).replace("/>",">"),t.join(""))}(t.cellXfs))&&(a[a.length]=r),a[a.length]='',a[a.length]='',a[a.length]='',a.length>2&&(a[a.length]="",a[1]=a[1].replace("/>",">")),a.join("")}(e,t)),n.styles.push(i),un(t.wbrels,-1,"styles."+r,cn.STY),e.vbaraw&&a&&(kt(s,i="xl/vbaProject.bin",e.vbaraw),n.vba.push(i),un(t.wbrels,-1,"vbaProject.bin",cn.VBA)),kt(s,i="xl/metadata."+r,((f=[At]).push('\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n'),f.join(""))),n.metadata.push(i),un(t.wbrels,-1,"metadata."+r,cn.XLMETA),h.length>1&&(kt(s,i="xl/persons/person.xml",ao(h)),n.people.push(i),un(t.wbrels,-1,"persons/person.xml",cn.PEOPLE)),kt(s,"[Content_Types].xml",on(n,t)),kt(s,"_rels/.rels",hn(t.rels)),kt(s,"xl/_rels/workbook.xml.rels",hn(t.wbrels)),delete t.revssf,delete t.ssf,s}function Kf(e,t){var r="";switch((t||{}).type||"base64"){case"buffer":case"array":return[e[0],e[1],e[2],e[3],e[4],e[5],e[6],e[7]];case"base64":r=E(e.slice(0,12));break;case"binary":r=e;break;default:throw new Error("Unrecognized type "+(t&&t.type||"undefined"))}return[r.charCodeAt(0),r.charCodeAt(1),r.charCodeAt(2),r.charCodeAt(3),r.charCodeAt(4),r.charCodeAt(5),r.charCodeAt(6),r.charCodeAt(7)]}function Yf(e,t){var r=0;e:for(;r>1;++r)t[r]=String.fromCharCode(e[2*r]+(e[2*r+1]<<8));return t.join("")}(r.slice(2)):d(r.slice(2)),t.type="binary",Yf(r,t)}(s,r);if(0===n[1]&&2===n[2]&&0===n[3])return ei.to_workbook(s,r);break;case 0:if(0===n[1]){if(n[2]>=2&&0===n[3])return ei.to_workbook(s,r);if(0===n[2]&&(8===n[3]||9===n[3]))return ei.to_workbook(s,r)}break;case 3:case 131:case 139:case 140:return Ys.to_workbook(s,r);case 123:if(92===n[1]&&114===n[2]&&116===n[3])return function(e,t){var r=pa(function(e,t){switch(t.type){case"base64":return Ti(E(e),t);case"binary":return Ti(e,t);case"buffer":return Ti(k&&Buffer.isBuffer(e)?e.toString("binary"):O(e),t);case"array":return Ti(je(e),t)}throw new Error("Unrecognized type "+t.type)}(e,t),t);return r.bookType="rtf",r}(s,r);break;case 10:case 13:case 32:return function(e,t){var r="",a=Kf(e,t);switch(t.type){case"base64":r=E(e);break;case"binary":r=e;break;case"buffer":r=e.toString("binary");break;case"array":r=je(e);break;default:throw new Error("Unrecognized type "+t.type)}return 239==a[0]&&187==a[1]&&191==a[2]&&(r=Zt(r)),t.type="binary",Yf(r,t)}(s,r);case 137:if(80===n[1]&&78===n[2]&&71===n[3])throw new Error("PNG Image File is not a spreadsheet");break;case 8:if(231===n[1])throw new Error("Unsupported Multiplan 1.x file!");break;case 12:if(236===n[1])throw new Error("Unsupported Multiplan 2.x file!");if(237===n[1])throw new Error("Unsupported Multiplan 3.x file!")}return Ks.indexOf(n[0])>-1&&n[2]<=12&&n[3]<=31?Ys.to_workbook(s,r):Zf(e,s,r,i)}function qf(e,t){var r=t||{};return r.type="file",Jf(e,r)}function Qf(e,t){switch(t.type){case"base64":case"binary":break;case"buffer":case"array":t.type="";break;case"file":return Ne(t.file,Ie.write(e,{type:k?"buffer":""}));case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");default:throw new Error("Unrecognized type "+t.type)}return Ie.write(e,t)}function eh(e,t){switch(t.bookType){case"ods":return Yl(e,t);case"numbers":return function(e,t){if(!t||!t.numbers)throw new Error("Must pass a `numbers` option -- check the README");var r=Ie.read(t.numbers,{type:"base64"}),a=function(e){var t={},r=[];return e.FileIndex.map((function(t,r){return[t,e.FullPaths[r]]})).forEach((function(e){var a=e[0],n=e[1];2==a.type&&a.name.match(/\.iwa/)&&0==a.content[0]&&hf(pf(a.content)).forEach((function(e){r.push(e.id),t[e.id]={deps:[],location:n,type:of(e.messages[0].meta[1][0].data)}}))})),e.FileIndex.forEach((function(e){e.name.match(/\.iwa/)&&0==e.content[0]&&hf(pf(e.content)).forEach((function(e){e.messages.forEach((function(r){[5,6].forEach((function(a){r.meta[a]&&r.meta[a].forEach((function(r){t[e.id].deps.push(of(r.data))}))}))}))}))})),t}(r),n=Pf(r,a,1);if(null==n)throw"Could not find message ".concat(1," in Numbers template");var s=ff(cf(n.messages[0].data)[1],yf);if(s.length>1)throw new Error("Template NUMBERS file must have exactly one sheet");return e.SheetNames.forEach((function(t,i){i>=1&&(function(e,t,r){var a=-1,n=-1,s={};Df(e,t,1,(function(r,i){var o=cf(r.messages[0].data);a=yf(cf(r.messages[0].data)[1][0].data),n=Rf({deps:[1],location:t[a].location,type:2},t),s[a]=n,kf(r,n),o[1].push({type:2,data:Ef(n)});var c=Pf(e,t,a);c.id=n,t[1].location==t[n].location?i.push(c):Df(e,t,n,(function(e,t){return t.push(c)})),r.messages[0].data=lf(o)}));var i=-1;Df(e,t,n,(function(r,a){for(var o=cf(r.messages[0].data),c=3;c<=69;++c)delete o[c];var l=ff(o[2],yf);l.forEach((function(e){return _f(r,e)})),i=Rf({deps:[n],location:t[l[0]].location,type:t[l[0]].type},t),kf(r,i),s[l[0]]=i,o[2]=[{type:2,data:Ef(i)}];var f=Pf(e,t,l[0]);f.id=i,t[l[0]].location==t[n].location?a.push(f):(Df(e,t,2,(function(e){var r=cf(e.messages[0].data);Uf(r,t,n,i),e.messages[0].data=lf(r)})),Df(e,t,i,(function(e,t){return t.push(f)}))),r.messages[0].data=lf(o)}));var o=-1;Df(e,t,i,(function(r,a){for(var n=cf(r.messages[0].data),c=cf(n[1][0].data),l=3;l<=69;++l)delete c[l];var f=yf(c[2][0].data);c[2][0].data=Ef(s[f]),n[1][0].data=lf(c);var h=yf(n[2][0].data);_f(r,h),kf(r,o=Rf({deps:[i],location:t[h].location,type:t[h].type},t)),s[h]=o,n[2][0].data=Ef(o);var u=Pf(e,t,h);u.id=o,t[i].location==t[o].location?a.push(u):Df(e,t,o,(function(e,t){return t.push(u)})),r.messages[0].data=lf(n)})),Df(e,t,o,(function(a,n){var i,c,l=cf(a.messages[0].data),f=ql(l[1][0].data).replace(/-[A-Z0-9]*/,"-".concat(("0000"+r.toString(16)).slice(-4)));if(l[1][0].data=Ql(f),[12,13,29,31,32,33,39,44,47,81,82,84].forEach((function(e){return delete l[e]})),l[45]){var h=yf(cf(l[45][0].data)[1][0].data);_f(a,h),delete l[45]}l[70]&&(null==(i=cf(l[70][0].data)[2])||i.forEach((function(e){var t=cf(e.data);[2,3].map((function(e){return t[e][0]})).forEach((function(e){var t=cf(e.data);if(t[8]){var r=yf(t[8][0].data);_f(a,r)}}))})),delete l[70]),[46,30,34,35,36,38,48,49,60,61,62,63,64,71,72,73,74,75,85,86,87,88,89].forEach((function(e){if(l[e]){var t=yf(l[e][0].data);delete l[e],_f(a,t)}}));var u=cf(l[4][0].data);[2,4,5,6,11,12,13,15,16,17,18,19,20,21,22].forEach((function(r){var i;if(null==(i=u[r])?void 0:i[0]){var c=yf(u[r][0].data),l=Rf({deps:[o],location:t[c].location,type:t[c].type},t);_f(a,c),kf(a,l),s[c]=l;var f=Pf(e,t,c);if(f.id=l,t[c].location==t[o].location)n.push(f);else{t[l].location=t[c].location.replace(c.toString(),l.toString()),t[l].location==t[c].location&&(t[l].location=t[l].location.replace(/\.iwa/,"-".concat(l,".iwa"))),Ie.utils.cfb_add(e,t[l].location,mf(uf([f])));var h=t[l].location.replace(/^Root Entry\//,"").replace(/^Index\//,"").replace(/\.iwa$/,"");Df(e,t,2,(function(e){var r=cf(e.messages[0].data);Mf(r,l,h),Uf(r,t,o,l),e.messages[0].data=lf(r)}))}u[r][0].data=Ef(l)}}));var d=cf(u[1][0].data);null==(c=d[2])||c.forEach((function(r){var i=yf(r.data),c=Rf({deps:[o],location:t[i].location,type:t[i].type},t);_f(a,i),kf(a,c),s[i]=c;var l=Pf(e,t,i);if(l.id=c,t[i].location==t[o].location)n.push(l);else{t[c].location=t[i].location.replace(i.toString(),c.toString()),t[c].location==t[i].location&&(t[c].location=t[c].location.replace(/\.iwa/,"-".concat(c,".iwa"))),Ie.utils.cfb_add(e,t[c].location,mf(uf([l])));var f=t[c].location.replace(/^Root Entry\//,"").replace(/^Index\//,"").replace(/\.iwa$/,"");Df(e,t,2,(function(e){var r=cf(e.messages[0].data);Mf(r,c,f),Uf(r,t,o,c),e.messages[0].data=lf(r)}))}r.data=Ef(c)})),u[1][0].data=lf(d);var p=cf(u[3][0].data);p[1].forEach((function(r){var n=cf(r.data),i=yf(n[2][0].data),c=s[i];if(!s[i]){c=Rf({deps:[o],location:"",type:t[i].type},t),t[c].location="Root Entry/Index/Tables/Tile-".concat(c,".iwa"),s[i]=c;var l=Pf(e,t,i);l.id=c,_f(a,i),kf(a,c),Ie.utils.cfb_add(e,"/Index/Tables/Tile-".concat(c,".iwa"),mf(uf([l]))),Df(e,t,2,(function(e){var r=cf(e.messages[0].data);r[3].push({type:2,data:lf([[],[{type:0,data:af(c)}],[{type:2,data:Ql("Tables/Tile")}],[{type:2,data:Ql("Tables/Tile-".concat(c))}],[{type:2,data:new Uint8Array([2,0,0])}],[{type:2,data:new Uint8Array([2,0,0])}],[],[],[],[],[{type:0,data:af(0)}],[],[{type:0,data:af(0)}]])}),r[1]=[{type:0,data:af(Math.max(c+1,of(r[1][0].data)))}],Uf(r,t,o,c),e.messages[0].data=lf(r)}))}n[2][0].data=Ef(c),r.data=lf(n)})),u[3][0].data=lf(p),l[4][0].data=lf(u),a.messages[0].data=lf(l)}))}(r,a,i+1),n=Pf(r,a,1),s=ff(cf(n.messages[0].data)[1],yf)),function(e,t,r,a,n,s){var i=[];Df(e,t,s,(function(e){var t=cf(e.messages[0].data);t[1]=[{type:2,data:Ql(a)}],i=ff(t[2],yf),e.messages[0].data=lf(t)}));var o=yf(cf(Pf(e,t,i[0]).messages[0].data)[2][0].data);Df(e,t,o,(function(a,n){return function(e,t,r,a,n,s){if(!r["!ref"])throw new Error("Cannot export empty sheet to NUMBERS");var i=ca(r["!ref"]);i.s.r=i.s.c=0;var o=!1;i.e.c>999&&(o=!0,i.e.c=999),i.e.r>999999&&(o=!0,i.e.r=999999),o&&console.error("Truncating to ".concat(la(i)));var c=[];if(r["!data"])c=r["!data"];else{for(var l=[],f=0;f<=i.e.c;++f)l[f]=sa(f);for(var h=0;h<=i.e.r;++h){c[h]=[];var u=""+(h+1);for(f=0;f<=i.e.c;++f){var d=r[l[f]+u];d&&(c[h][f]=d)}}}var p={cmnt:[{a:"~54ee77S~",t:"... the people who are crazy enough to think they can change the world, are the ones who do."}],ferr:[],fmla:[],nfmt:[],ofmt:[],rsst:[{v:"~54ee77S~",l:"https://sheetjs.com/"}],sst:["~Sh33tJ5~"]},m=cf(a.messages[0].data);m[6][0].data=af(i.e.r+1),m[7][0].data=af(i.e.c+1),delete m[46];var v=cf(m[4][0].data),g=yf(cf(v[1][0].data)[2][0].data);Df(e,t,g,(function(e,t){var r,a=cf(e.messages[0].data);if(null==(r=null==a?void 0:a[2])?void 0:r[0])for(var n=0;n1){var P=yf(v[19][0].data),M={},L=0;Df(e,t,P,(function(r){var a=cf(r.messages[0].data);a[3]=[],p.cmnt.forEach((function(n,s){if(0!=s){var i=[];n.replies&&n.replies.forEach((function(r){M[r.a||""]||(M[r.a||""]=Lf(e,212,[[],[{type:2,data:Ql(r.a||"")}],[{type:2,data:Ff(++L)}],[],[{type:0,data:af(0)}]],"/Index/Tables/DataList",t));var a=M[r.a||""],n=Lf(e,3056,[[],[{type:2,data:Ql(r.t||"")}],[{type:2,data:lf([[],[{type:1,data:new Uint8Array([0,0,0,128,116,109,182,65])}]])}],[{type:2,data:Ef(a)}]],"/Index/Tables/DataList",t);Df(e,t,n,(function(e){return kf(e,a)})),i.push(n),Df(e,t,2,(function(e){var r=cf(e.messages[0].data);Uf(r,t,n,a),e.messages[0].data=lf(r)}))})),M[n.a||""]||(M[n.a||""]=Lf(e,212,[[],[{type:2,data:Ql(n.a||"")}],[{type:2,data:Ff(++L)}],[],[{type:0,data:af(0)}]],"/Index/Tables/DataList",t));var o=M[n.a||""],c=Lf(e,3056,[[],[{type:2,data:Ql(n.t||"")}],[{type:2,data:lf([[],[{type:1,data:new Uint8Array([0,0,0,128,116,109,182,65])}]])}],[{type:2,data:Ef(o)}],i.map((function(e){return{type:2,data:Ef(e)}})),[{type:2,data:lf([[],[{type:0,data:af(s)}],[{type:0,data:af(0)}]])}]],"/Index/Tables/DataList",t);Df(e,t,c,(function(e){kf(e,o),i.forEach((function(t){return kf(e,t)}))})),a[3].push({type:2,data:lf([[],[{type:0,data:af(s)}],[{type:0,data:af(1)}],[],[],[],[],[],[],[],[{type:2,data:Ef(c)}]])}),kf(r,c),Df(e,t,2,(function(e){var r=cf(e.messages[0].data);Uf(r,t,P,c),Uf(r,t,c,o),i.length&&Uf(r,t,c,i),e.messages[0].data=lf(r)}))}})),a[2][0].data=af(p.cmnt.length+1),r.messages[0].data=lf(a)}))}m[4][0].data=lf(v),a.messages[0].data=lf(m)}(e,t,r,a,n,o)}))}(r,a,e.Sheets[t],t,0,s[i])})),r}(e,t);case"xlsb":return function(e,t){e&&!e.SSF&&(e.SSF=Ke(G)),e&&e.SSF&&(ye(),Te(e.SSF),t.revssf=Me(e.SSF),t.revssf[e.SSF[65535]]=0,t.ssf=e.SSF),t.rels={},t.wbrels={},t.Strings=[],t.Strings.Count=0,t.Strings.Unique=0,ic?t.revStrings=new Map:(t.revStrings={},t.revStrings.foo=[],delete t.revStrings.foo);var r="bin",a={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],threadedcomments:[],links:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],metadata:[],people:[],TODO:[],xmlns:""};Hf(t=t||{});var n=_t(),s="",i=0;if(t.cellXfs=[],fc(t.cellXfs,{},{revssf:{General:0}}),e.Props||(e.Props={}),kt(n,s="docProps/core.xml",wn(e.Props,t)),a.coreprops.push(s),un(t.rels,2,s,cn.CORE_PROPS),s="docProps/app.xml",e.Props&&e.Props.SheetNames);else if(e.Workbook&&e.Workbook.Sheets){for(var o=[],c=0;c0&&(kt(n,s="docProps/custom.xml",Sn(e.Custprops)),a.custprops.push(s),un(t.rels,4,s,cn.CUST_PROPS));var l,f,h,u=["SheetJ5"];for(t.tcid=0,i=1;i<=e.SheetNames.length;++i){var d={"!id":{}},p=e.Sheets[e.SheetNames[i-1]];if((p||{})["!type"],kt(n,s="xl/worksheets/sheet"+i+"."+r,Lc(i-1,t,e,d)),a.sheets.push(s),un(t.wbrels,-1,"worksheets/sheet"+i+"."+r,cn.WS[0]),p){var m=p["!comments"],v=!1,g="";if(m&&m.length>0){var b=!1;m.forEach((function(e){e[1].forEach((function(e){1==e.T&&(b=!0)}))})),b&&(kt(n,g="xl/threadedComments/threadedComment"+i+".xml",ro(m,u,t)),a.threadedcomments.push(g),un(d,-1,"../threadedComments/threadedComment"+i+".xml",cn.TCMNT)),kt(n,g="xl/comments"+i+"."+r,io(m)),a.comments.push(g),un(d,-1,"../comments"+i+"."+r,cn.CMNT),v=!0}p["!legacy"]&&v&&kt(n,"xl/drawings/vmlDrawing"+i+".vml",Qi(i,p["!comments"])),delete p["!comments"],delete p["!legacy"]}d["!id"].rId1&&kt(n,ln(s),hn(d))}return null!=t.Strings&&t.Strings.length>0&&(kt(n,s="xl/sharedStrings."+r,function(e){var t=Zr();Jr(t,159,function(e,t){return t||(t=Kr(8)),t.write_shift(4,e.Count),t.write_shift(4,e.Unique),t}(e));for(var r=0;r1&&(kt(n,s="xl/persons/person.xml",ao(u)),a.people.push(s),un(t.wbrels,-1,"persons/person.xml",cn.PEOPLE)),kt(n,"[Content_Types].xml",on(a,t)),kt(n,"_rels/.rels",hn(t.rels)),kt(n,"xl/_rels/workbook.bin.rels",hn(t.wbrels)),delete t.revssf,delete t.ssf,n}(e,t);default:return jf(e,t)}}function th(e,t){var r={},a=k?"nodebuffer":"undefined"!=typeof Uint8Array?"array":"string";if(t.compression&&(r.compression="DEFLATE"),t.password)r.type=a;else switch(t.type){case"base64":r.type="base64";break;case"binary":r.type="string";break;case"string":throw new Error("'string' output type invalid for '"+t.bookType+"' files");case"buffer":case"file":r.type=a;break;default:throw new Error("Unrecognized type "+t.type)}var n=e.FullPaths?Ie.write(e,{fileType:"zip",type:{nodebuffer:"buffer",string:"binary"}[r.type]||r.type,compression:!!t.compression}):e.generate(r);if("undefined"!=typeof Deno&&"string"==typeof n){if("binary"==t.type||"base64"==t.type)return n;n=new Uint8Array(I(n))}return t.password&&"undefined"!=typeof encrypt_agile?Qf(encrypt_agile(n,t.password),t):"file"===t.type?Ne(t.file,n):"string"==t.type?Zt(n):n}function rh(e,t,r){r||(r="");var a=r+e;switch(t.type){case"base64":return y(Jt(a));case"binary":return Jt(a);case"string":return e;case"file":return Ne(t.file,a,"utf8");case"buffer":return k?_(a,"utf8"):"undefined"!=typeof TextEncoder?(new TextEncoder).encode(a):rh(a,{type:"binary"}).split("").map((function(e){return e.charCodeAt(0)}))}throw new Error("Unrecognized type "+t.type)}function ah(e,t){switch(t.type){case"string":case"base64":case"binary":for(var r="",a=0;a255&&(r=95),s=r>>2,(a=e.charCodeAt(l++))>255&&(a=95),i=(3&r)<<4|a>>4,(n=e.charCodeAt(l++))>255&&(n=95),o=(15&a)<<2|n>>6,c=63&n,isNaN(a)?o=c=64:isNaN(n)&&(c=64),t+=T.charAt(s)+T.charAt(i)+T.charAt(o)+T.charAt(c);return t}(e);case"binary":case"string":return e;case"file":return Ne(t.file,e,"binary");case"buffer":return k?_(e,"binary"):e.split("").map((function(e){return e.charCodeAt(0)}))}throw new Error("Unrecognized type "+t.type)}(mh(e.Sheets[e.SheetNames[n]],r),r);case"csv":return rh(ph(e.Sheets[e.SheetNames[n]],r),r,"\ufeff");case"dif":return rh(Js.from_sheet(e.Sheets[e.SheetNames[n]],r),r);case"dbf":return ah(Ys.from_sheet(e.Sheets[e.SheetNames[n]],r),r);case"prn":return rh(Qs.from_sheet(e.Sheets[e.SheetNames[n]],r),r);case"rtf":return rh(function(e,t){var r=["{\\rtf1\\ansi"];if(!e["!ref"])return r[0]+"}";for(var a,n=ua(e["!ref"]),s=null!=e["!data"],i=[],o=n.s.r;o<=n.e.r;++o){r.push("\\trowd\\trautofit1");for(var c=n.s.c;c<=n.e.c;++c)r.push("\\cellx"+(c+1));for(r.push("\\pard\\intbl"),s&&(i=e["!data"][o]||[]),c=n.s.c;c<=n.e.c;++c){var l=oa({r:o,c:c});(a=s?i[c]:e[l])&&(null!=a.v||a.f&&!a.F)?(r.push(" "+(a.w||(da(a),a.w)||"").replace(/[\r\n]/g,"\\par ")),r.push("\\cell")):r.push(" \\cell")}r.push("\\pard\\intbl\\row")}return r.join("")+"}"}(e.Sheets[e.SheetNames[n]]),r);case"eth":return rh(qs.from_sheet(e.Sheets[e.SheetNames[n]],r),r);case"fods":return rh(Yl(e,r),r);case"wk1":return ah(ei.sheet_to_wk1(e.Sheets[e.SheetNames[n]],r),r);case"wk3":return ah(ei.book_to_wk3(e,r),r);case"biff2":r.biff||(r.biff=2);case"biff3":r.biff||(r.biff=3);case"biff4":return r.biff||(r.biff=4),ah(Rl(e,r),r);case"biff5":r.biff||(r.biff=5);case"biff8":case"xla":case"xls":return r.biff||(r.biff=8),function(e,t){var r=t||{};return Qf(function(e,t){var r=t||{},a=Ie.utils.cfb_new({root:"R"}),n="/Workbook";switch(r.bookType||"xls"){case"xls":r.bookType="biff8";case"xla":r.bookType||(r.bookType="xla");case"biff8":n="/Workbook",r.biff=8;break;case"biff5":n="/Book",r.biff=5;break;default:throw new Error("invalid type "+r.bookType+" for XLS CFB")}return Ie.utils.cfb_add(a,n,Rl(e,r)),8==r.biff&&(e.Props||e.Custprops)&&function(e,t){var r,a=[],n=[],s=[],i=0,o=De(Ya,"n"),c=De(Za,"n");if(e.Props)for(r=Fe(e.Props),i=0;i-1||yn.indexOf(s[i][0])>-1||null!=s[i][1]&&l.push(s[i]);n.length&&Ie.utils.cfb_add(t,"/SummaryInformation",$n(n,bl.SI,c,Za)),(a.length||l.length)&&Ie.utils.cfb_add(t,"/DocumentSummaryInformation",$n(a,bl.DSI,o,Ya,l.length?l:null,bl.UDI))}(e,a),8==r.biff&&e.vbaraw&&function(e,t){t.FullPaths.forEach((function(r,a){if(0!=a){var n=r.replace(/^[\/]*[^\/]*[\/]/,"/_VBA_PROJECT_CUR/");"/"!==n.slice(-1)&&Ie.utils.cfb_add(e,n,t.FileIndex[a].content)}}))}(a,Ie.read(e.vbaraw,{type:"string"==typeof e.vbaraw?"binary":"buffer"})),a}(e,r),r)}(e,r);case"xlsx":case"xlsm":case"xlam":case"xlsb":case"numbers":case"ods":return function(e,t){var r=Ke(t||{});return th(eh(e,r),r)}(e,r);default:throw new Error("Unrecognized bookType |"+r.bookType+"|")}}function ih(e){if(!e.bookType){var t=e.file.slice(e.file.lastIndexOf(".")).toLowerCase();t.match(/^\.[a-z]+$/)&&(e.bookType=t.slice(1)),e.bookType={xls:"biff8",htm:"html",slk:"sylk",socialcalc:"eth",Sh33tJS:"WTF"}[e.bookType]||e.bookType}}function oh(e,t,r){var a=r||{};return a.type="file",a.file=t,ih(a),sh(e,a)}function ch(e,t,r){var a=r||{};return a.type="file",a.file=t,ih(a),nh(e,a)}function lh(e,t,r,a){var n=r||{};n.type="file",n.file=e,ih(n),n.type="buffer";var s=a;return s instanceof Function||(s=r),Ae.writeFile(e,sh(t,n),s)}function fh(e,t,r,a,n,s,i){var o=aa(r),c=i.defval,l=i.raw||!Object.prototype.hasOwnProperty.call(i,"raw"),f=!0,h=null!=e["!data"],u=1===n?[]:{};if(1!==n)if(Object.defineProperty)try{Object.defineProperty(u,"__rowNum__",{value:r,enumerable:!1})}catch(e){u.__rowNum__=r}else u.__rowNum__=r;if(!h||e["!data"][r])for(var d=t.s.c;d<=t.e.c;++d){var p=h?(e["!data"][r]||[])[d]:e[a[d]+o];if(null!=p&&void 0!==p.t){var m=p.v;switch(p.t){case"z":if(null==m)break;continue;case"e":m=0==m?null:void 0;break;case"s":case"b":case"n":if(!p.z||!me(p.z))break;if("number"==typeof(m=ze(m)))break;case"d":i&&(i.UTC||!1===i.raw)||(m=nt(new Date(m)));break;default:throw new Error("unrecognized type "+p.t)}if(null!=s[d]){if(null==m)if("e"==p.t&&null===m)u[s[d]]=null;else if(void 0!==c)u[s[d]]=c;else{if(!l||null!==m)continue;u[s[d]]=null}else u[s[d]]=("n"===p.t&&"boolean"==typeof i.rawNumbers?i.rawNumbers:l)?m:da(p,m,i);null!=m&&(f=!1)}}else{if(void 0===c)continue;null!=s[d]&&(u[s[d]]=c)}}return{row:u,isempty:f}}function hh(e,t){if(null==e||null==e["!ref"])return[];var r={t:"n",v:0},a=0,n=1,s=[],i=0,o="",c={s:{r:0,c:0},e:{r:0,c:0}},l=t||{},f=null!=l.range?l.range:e["!ref"];switch(1===l.header?a=1:"A"===l.header?a=2:Array.isArray(l.header)?a=3:null==l.header&&(a=0),typeof f){case"string":c=ua(f);break;case"number":(c=ua(e["!ref"])).s.r=f;break;default:c=f}a>0&&(n=0);var h=aa(c.s.r),u=[],d=[],p=0,m=0,v=null!=e["!data"],g=c.s.r,b=0,w={};v&&!e["!data"][g]&&(e["!data"][g]=[]);var T=l.skipHidden&&e["!cols"]||[],y=l.skipHidden&&e["!rows"]||[];for(b=c.s.c;b<=c.e.c;++b)if(!(T[b]||{}).hidden)switch(u[b]=sa(b),r=v?e["!data"][g][b]:e[u[b]+h],a){case 1:s[b]=b-c.s.c;break;case 2:s[b]=u[b];break;case 3:s[b]=l.header[b-c.s.c];break;default:if(null==r&&(r={w:"__EMPTY",t:"s"}),o=i=da(r,null,l),m=w[i]||0){do{o=i+"_"+m++}while(w[o]);w[i]=m,w[o]=1}else w[i]=1;s[b]=o}for(g=c.s.r+n;g<=c.e.r;++g)if(!(y[g]||{}).hidden){var E=fh(e,c,g,u,a,s,l);(!1===E.isempty||(1===a?!1!==l.blankrows:l.blankrows))&&(d[p++]=E.row)}return d.length=p,d}var uh=/"/g;function dh(e,t,r,a,n,s,i,o){for(var c=!0,l=[],f="",h=aa(r),u=null!=e["!data"],d=u&&e["!data"][r]||[],p=t.s.c;p<=t.e.c;++p)if(a[p]){var m=u?d[p]:e[a[p]+h];if(null==m)f="";else if(null!=m.v){c=!1,f=""+(o.rawNumbers&&"n"==m.t?m.v:da(m,null,o));for(var v=0,g=0;v!==f.length;++v)if((g=f.charCodeAt(v))===n||g===s||34===g||o.forceQuotes){f='"'+f.replace(uh,'""')+'"';break}"ID"==f&&(f='"ID"')}else null==m.f||m.F?f="":(c=!1,(f="="+m.f).indexOf(",")>=0&&(f='"'+f.replace(uh,'""')+'"'));l.push(f)}if(o.strip)for(;""===l[l.length-1];)--l.length;return!1===o.blankrows&&c?null:l.join(i)}function ph(e,t){var r=[],a=null==t?{}:t;if(null==e||null==e["!ref"])return"";for(var n=ua(e["!ref"]),s=void 0!==a.FS?a.FS:",",i=s.charCodeAt(0),o=void 0!==a.RS?a.RS:"\n",c=o.charCodeAt(0),l="",f=[],h=a.skipHidden&&e["!cols"]||[],u=a.skipHidden&&e["!rows"]||[],d=n.s.c;d<=n.e.c;++d)(h[d]||{}).hidden||(f[d]=sa(d));for(var p=0,m=n.s.r;m<=n.e.r;++m)(u[m]||{}).hidden||null!=(l=dh(e,n,m,f,i,c,s,a))&&(l||!1!==a.blankrows)&&r.push((p++?o:"")+l);return r.join("")}function mh(e,t){t||(t={}),t.FS="\t",t.RS="\n";var r=ph(e,t);if(void 0===a||"string"==t.type)return r;var n=a.utils.encode(1200,r,"str");return String.fromCharCode(255)+String.fromCharCode(254)+n}function vh(e,t,r){var a=r||{},n=e?null!=e["!data"]:a.dense;null!=w&&null==n&&(n=w);var s=+!a.skipHeader,i=e||{};!e&&n&&(i["!data"]=[]);var o=0,c=0;if(i&&null!=a.origin)if("number"==typeof a.origin)o=a.origin;else{var l="string"==typeof a.origin?ia(a.origin):a.origin;o=l.r,c=l.c}var f={s:{c:0,r:0},e:{c:c,r:o+t.length-1+s}};if(i["!ref"]){var h=ua(i["!ref"]);f.e.c=Math.max(f.e.c,h.e.c),f.e.r=Math.max(f.e.r,h.e.r),-1==o&&(o=h.e.r+1,f.e.r=o+t.length-1+s)}else-1==o&&(o=0,f.e.r=t.length-1+s);var u=a.header||[],d=0,p=[];t.forEach((function(e,t){n&&!i["!data"][o+t+s]&&(i["!data"][o+t+s]=[]),n&&(p=i["!data"][o+t+s]),Fe(e).forEach((function(r){-1==(d=u.indexOf(r))&&(u[d=u.length]=r);var l=e[r],f="z",h="",m=n?"":sa(c+d)+aa(o+t+s),v=n?p[c+d]:i[m];!l||"object"!=typeof l||l instanceof Date?("number"==typeof l?f="n":"boolean"==typeof l?f="b":"string"==typeof l?f="s":l instanceof Date?(f="d",a.UTC||(l=st(l)),a.cellDates||(f="n",l=We(l)),h=null!=v&&v.z&&me(v.z)?v.z:a.dateNF||G[14]):null===l&&a.nullError&&(f="e",l=0),v?(v.t=f,v.v=l,delete v.w,delete v.R,h&&(v.z=h)):n?p[c+d]=v={t:f,v:l}:i[m]=v={t:f,v:l},h&&(v.z=h)):n?p[c+d]=l:i[m]=l}))})),f.e.c=Math.max(f.e.c,c+u.length-1);var m=aa(o);if(n&&!i["!data"][o]&&(i["!data"][o]=[]),s)for(d=0;d=65535)throw new Error("Too many worksheets");if(a&&e.SheetNames.indexOf(r)>=0&&r.length<32){var s=r.match(/\d+$/);n=s&&+s[0]||0;var i=s&&r.slice(0,s.index)||r;for(++n;n<=65535&&-1!=e.SheetNames.indexOf(r=i+n);++n);}if(Xc(r),e.SheetNames.indexOf(r)>=0)throw new Error("Worksheet with name |"+r+"| already exists!");return e.SheetNames.push(r),e.Sheets[r]=t,r}function Th(e,t,r){return t?(e.l={Target:t},r&&(e.l.Tooltip=r)):delete e.l,e}var yh,Eh={encode_col:sa,encode_row:aa,encode_cell:oa,encode_range:la,decode_col:na,decode_row:ra,split_cell:function(e){return e.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")},decode_cell:ia,decode_range:ca,format_cell:da,sheet_new:function(e){var t={};return(e||{}).dense&&(t["!data"]=[]),t},sheet_add_aoa:ma,sheet_add_json:vh,sheet_add_dom:Ul,aoa_to_sheet:va,json_to_sheet:function(e,t){return vh(null,e,t)},table_to_sheet:Bl,table_to_book:function(e,t){return pa(Bl(e,t),t)},sheet_to_csv:ph,sheet_to_txt:mh,sheet_to_json:hh,sheet_to_html:Ll,sheet_to_formulae:function(e){var t,r="",a="";if(null==e||null==e["!ref"])return[];var n,s=ua(e["!ref"]),i="",o=[],c=[],l=null!=e["!data"];for(n=s.s.c;n<=s.e.c;++n)o[n]=sa(n);for(var f=s.s.r;f<=s.e.r;++f)for(i=aa(f),n=s.s.c;n<=s.e.c;++n)if(r=o[n]+i,a="",void 0!==(t=l?(e["!data"][f]||[])[n]:e[r])){if(null!=t.F){if(r=t.F,!t.f)continue;a=t.f,-1==r.indexOf(":")&&(r=r+":"+r)}if(null!=t.f)a=t.f;else{if("z"==t.t)continue;if("n"==t.t&&null!=t.v)a=""+t.v;else if("b"==t.t)a=t.v?"TRUE":"FALSE";else if(void 0!==t.w)a="'"+t.w;else{if(void 0===t.v)continue;a="s"==t.t?"'"+t.v:""+t.v}}c[c.length]=r+"="+a}return c},sheet_to_row_object_array:hh,sheet_get_cell:gh,book_new:bh,book_append_sheet:wh,book_set_sheet_visibility:function(e,t,r){e.Workbook||(e.Workbook={}),e.Workbook.Sheets||(e.Workbook.Sheets=[]);var a=function(e,t){if("number"==typeof t){if(t>=0&&e.SheetNames.length>t)return t;throw new Error("Cannot find sheet # "+t)}if("string"==typeof t){var r=e.SheetNames.indexOf(t);if(r>-1)return r;throw new Error("Cannot find sheet name |"+t+"|")}throw new Error("Cannot find sheet |"+t+"|")}(e,t);switch(e.Workbook.Sheets[a]||(e.Workbook.Sheets[a]={}),r){case 0:case 1:case 2:break;default:throw new Error("Bad sheet visibility setting "+r)}e.Workbook.Sheets[a].Hidden=r},cell_set_number_format:function(e,t){return e.z=t,e},cell_set_hyperlink:Th,cell_set_internal_link:function(e,t,r){return Th(e,"#"+t,r)},cell_add_comment:function(e,t,r){e.c||(e.c=[]),e.c.push({t:t,a:r||"SheetJS"})},sheet_set_array_formula:function(e,t,r,a){for(var n="string"!=typeof t?t:ua(t),s="string"==typeof t?t:la(t),i=n.s.r;i<=n.e.r;++i)for(var o=n.s.c;o<=n.e.c;++o){var c=gh(e,i,o);c.t="n",c.F=s,delete c.v,i==n.s.r&&o==n.s.c&&(c.f=r,a&&(c.D=!0))}var l=ca(e["!ref"]);return l.s.r>n.s.r&&(l.s.r=n.s.r),l.s.c>n.s.c&&(l.s.c=n.s.c),l.e.r0&&(s=0);var u=aa(l.s.r),d=[],p=0,m=null!=e["!data"],v=l.s.r,g=0,b={};m&&!e["!data"][v]&&(e["!data"][v]=[]);var w=f.skipHidden&&e["!cols"]||[],T=f.skipHidden&&e["!rows"]||[];for(g=l.s.c;g<=l.e.c;++g)if(!(w[g]||{}).hidden)switch(d[g]=sa(g),a=m?e["!data"][v][g]:e[d[g]+u],n){case 1:i[g]=g-l.s.c;break;case 2:i[g]=d[g];break;case 3:i[g]=f.header[g-l.s.c];break;default:if(null==a&&(a={w:"__EMPTY",t:"s"}),c=o=da(a,null,f),p=b[o]||0){do{c=o+"_"+p++}while(b[c]);b[o]=p,b[c]=1}else b[o]=1;i[g]=c}return v=l.s.r+s,r._read=function(){for(;v<=l.e.r;)if(!(T[v-1]||{}).hidden){var t=fh(e,l,v,d,n,i,f);if(++v,!1===t.isempty||(1===n?!1!==f.blankrows:f.blankrows))return void r.push(t.row)}return r.push(null)},r},to_html:function(e,t){var r=yh(),a=t||{},n=null!=a.header?a.header:Dl,s=null!=a.footer?a.footer:Pl;r.push(n);var i=ca(e["!ref"]);r.push(Ml(0,0,a));var o=i.s.r,c=!1;return r._read=function(){if(o>i.e.r)return c||(c=!0,r.push(""+s)),r.push(null);for(;o<=i.e.r;){r.push(Fl(e,i,o,a)),++o;break}},r},to_csv:function(e,t){var r=yh(),a=null==t?{}:t;if(null==e||null==e["!ref"])return r.push(null),r;for(var n=ua(e["!ref"]),s=void 0!==a.FS?a.FS:",",i=s.charCodeAt(0),o=void 0!==a.RS?a.RS:"\n",c=o.charCodeAt(0),l="",f=[],h=a.skipHidden&&e["!cols"]||[],u=a.skipHidden&&e["!rows"]||[],d=n.s.c;d<=n.e.c;++d)(h[d]||{}).hidden||(f[d]=sa(d));var p=n.s.r,m=!1,v=0;return r._read=function(){if(!m)return m=!0,r.push("\ufeff");for(;p<=n.e.r;)if(++p,!(u[p-1]||{}).hidden&&null!=(l=dh(e,n,p-1,f,i,c,s,a))&&(l||!1!==a.blankrows))return r.push((v++?o:"")+l);return r.push(null)},r},set_readable:function(e){yh=e}};const _h=n.version;t.default={parse_xlscfb:wl,parse_zip:Gf,read:Jf,readFile:qf,readFileSync:qf,write:sh,writeFile:oh,writeFileSync:oh,writeFileAsync:lh,writeXLSX:nh,writeFileXLSX:ch,utils:Eh,set_fs:Oe,set_cptable:b,stream:kh,SSF:Ee,CFB:Ie}}}]); +//# sourceMappingURL=xlsx.js.map \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/deps/xlsx.js.map b/src/main/resources/static/js/amcharts5/deps/xlsx.js.map new file mode 100644 index 00000000..7b240d63 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/deps/xlsx.js.map @@ -0,0 +1 @@ +{"version":3,"file":"deps/xlsx.js","mappings":"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EA,GAAG,GAAI,IAAKA,GAAG,EAAG,IAAM,IAAFA,EAAQ,GAAI,CAIrJ,IA4FI88B,GAAsBxT,GA5FEuT,GAAO,CAElC,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,EACA,SACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KAKG9E,GAAO,CACV,EAAM,SACN,EAAM,UACN,GAAM,UACN,GAAM,QACN,GAAM,SACN,GAAM,QACN,GAAM,OACN,GAAM,gBACN,IAAM,SAGHgF,GAAQ,CACX,SAAiB,EACjB,UAAiB,EACjB,UAAiB,GACjB,QAAiB,GACjB,SAAiB,GACjB,QAAiB,GACjB,OAAiB,GACjB,gBAAiB,GACjB,QAAiB,KAGdC,GAAgB,CACnB,yBACA,kBACA,mBACA,gBACA,iBACA,iBACA,mBACA,qBACA,iBACA,kBACA,sBACA,wBACA,oBACA,yBAOGC,GAA+B,CAElC,6EAA8E,YAC9E,uDAAwD,YACxD,0DAA2D,YAC3D,uDAAwD,YACxD,gFAAiF,YAGjF,4EAA6E,SAC7E,qCAAsC,SACtC,sCAAuC,OAGvC,6EAA8E,SAC9E,sCAAuC,SAGvC,0CAA2C,SAC3C,sCAAuC,SACvC,0CAA2C,OAC3C,sCAAuC,OAGvC,8EAA+E,UAC/E,uCAAwC,UAGxC,gFAAiF,OACjF,yCAA0C,OAG1C,yEAA0E,SAC1E,kCAAmC,SAGnC,6DAA8D,YAC9D,sEAAuE,YACvE,wEAAyE,WAGzE,wEAAyE,OACzE,6EAA8E,OAG9E,2EAA4E,WAC5E,oCAAqC,WACrC,gDAAiD,mBACjD,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E,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,cAAe8G,EAAEwxC,GAC7B,IAAQ,CAAEt4C,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ,IAAQ,CAAEA,EAAE,MACZ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K,SACL,IAAK,cACL,IAAK,WACL,IAAK,WACL,IAAK,eACL,IAAK,eACL,IAAK,iBACL,IAAK,eACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,YACL,IAAK,YACL,IAAK,gBACL,IAAK,cACL,IAAK,eACL,IAAK,kBACL,IAAK,oBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,cACL,IAAK,UACL,IAAK,SACL,IAAK,cACL,IAAK,UACL,IAAK,oBACL,IAAK,kBACL,IAAK,QACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,mBACL,IAAK,oBACL,IAAK,cACL,IAAK,cACL,IAAK,mBACL,IAAK,eACL,IAAK,aACL,IAAK,eACL,IAAK,gBACL,IAAK,aACL,IAAK,cACL,IAAK,cACL,IAAK,iBACL,IAAK,YACL,IAAK,cACL,IAAK,eACL,IAAK,aACL,IAAK,aACL,IAAK,gBACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,qBACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,kBACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,cACL,IAAK,iBACL,IAAK,qBACL,IAAK,YACL,IAAK,oBACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,WACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,eACL,IAAK,cACL,IAAK,YACL,IAAK,kBACL,IAAK,oBACL,IAAK,iBACL,IAAK,YACL,IAAK,aACL,IAAK,oBACL,IAAK,aACL,IAAK,eACL,IAAK,iBACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,mBACL,IAAK,qBACL,IAAK,yBACL,IAAK,cACL,IAAK,aACL,IAAK,mBACL,IAAK,sBACL,IAAK,eACL,IAAK,eACL,IAAK,gBACL,IAAK,cACL,IAAK,kBACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,2BACL,IAAK,eACL,IAAK,iBACL,IAAK,aACL,IAAK,iBACL,IAAK,YACL,IAAK,mBACL,IAAK,cACL,IAAK,wBACL,IAAK,kBACL,IAAK,qBACL,IAAK,kBACL,IAAK,kBACL,IAAK,kBACL,IAAK,qBACL,IAAK,aACL,IAAK,iBACL,IAAK,eACL,IAAK,mBACL,IAAK,aACL,IAAK,eACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,iBACL,IAAK,uBACL,IAAK,0BACL,IAAK,iBACL,IAAK,eACL,IAAK,YACL,IAAK,cACL,IAAK,aACL,IAAK,iBACL,IAAK,kBACL,IAAK,kBACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,qBACL,IAAK,cACL,IAAK,mBACL,IAAK,uBACL,IAAK,mBACL,IAAK,kBACL,IAAK,mBACL,IAAK,cACL,IAAK,iBACL,IAAK,kBACL,IAAK,eACL,IAAK,eACL,IAAK,oBACL,IAAK,sBACL,IAAK,sBACL,IAAK,mBACL,IAAK,qBACL,IAAK,qBACL,IAAK,gBACL,IAAK,aACL,IAAK,YACL,IAAK,cACL,IAAK,mBACL,IAAK,gBACL,IAAK,wBACL,IAAK,qBACL,IAAK,SACL,IAAK,kBACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,mBACL,IAAK,oBACL,IAAK,eACL,IAAK,oBACL,IAAK,uBACL,IAAK,cACL,IAAK,WACL,IAAK,WACL,IAAK,aACL,IAAK,aACL,IAAK,eACL,IAAK,eACL,IAAK,cACL,IAAK,qBACL,IAAK,yBACL,IAAK,mBACL,IAAK,WACL,IAAK,iBACL,IAAK,iBACL,IAAK,eACL,IAAK,YACL,IAAK,mBACL,IAAK,mBACL,IAAK,iBACL,IAAK,kBACL,IAAK,oBACL,IAAK,mBACL,IAAK,cACL,IAAK,gBACL,IAAK,WACL,IAAK,YACL,IAAK,cACL,IAAK,cACL,IAAK,mBACL,IAAK,oBACL,IAAK,iBACL,IAAK,YACL,IAAK,SACL,IAAK,SACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,WACL,IAAK,gBACL,IAAK,gBACL,IAAK,cACL,IAAK,iBACL,IAAK,iBACL,IAAK,oBACL,IAAK,sBACL,IAAK,aACL,IAAK,cACL,IAAK,cACL,IAAK,oBACL,IAAK,eACL,IAAK,gBACL,IAAK,qBAEHJ,GAAO,CACT,EAAG,QACH,EAAG,KACH,EAAG,OACH,EAAG,UACH,EAAG,MACH,EAAG,UACH,EAAG,MACH,EAAG,MACH,EAAG,MACH,EAAG,SACH,GAAI,KACJ,GAAI,MACJ,GAAI,QACJ,GAAI,SACJ,GAAI,QACJ,GAAI,MACJ,GAAI,MACJ,GAAI,MACJ,GAAI,OACJ,GAAI,KACJ,GAAI,OACJ,GAAI,MACJ,GAAI,KACJ,GAAI,QACJ,GAAI,MACJ,GAAI,MACJ,GAAI,OACJ,GAAI,QACJ,GAAI,SACJ,GAAI,QACJ,GAAI,OACJ,GAAI,MACJ,GAAI,MACJ,GAAI,QACJ,GAAI,OACJ,GAAI,QACJ,GAAI,MACJ,GAAI,KACJ,GAAI,MACJ,GAAI,MACJ,GAAI,SACJ,GAAI,OACJ,GAAI,WACJ,GAAI,OACJ,GAAI,OACJ,GAAI,SACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,GAAI,SACJ,GAAI,QACJ,GAAI,SACJ,GAAI,SACJ,GAAI,OACJ,GAAI,OACJ,GAAI,SACJ,GAAI,KACJ,GAAI,KACJ,GAAI,OACJ,GAAI,MACJ,GAAI,OACJ,GAAI,OACJ,GAAI,MACJ,GAAI,OACJ,GAAI,QACJ,GAAI,OACJ,GAAI,OACJ,GAAI,MACJ,GAAI,QACJ,GAAI,OACJ,GAAI,UACJ,GAAI,OACJ,GAAI,SACJ,GAAI,SACJ,GAAI,MACJ,GAAI,QACJ,GAAI,OACJ,GAAI,UACJ,GAAI,SACJ,GAAI,SACJ,GAAI,SACJ,GAAI,WACJ,GAAI,SACJ,GAAI,YACJ,GAAI,QACJ,GAAI,OACJ,GAAI,OACJ,GAAI,OACJ,GAAI,WACJ,GAAI,SACJ,GAAI,QACJ,GAAI,UACJ,GAAI,SACJ,GAAI,YACJ,GAAI,cACJ,GAAI,YACJ,GAAI,SACJ,GAAI,QACJ,GAAI,OACJ,GAAI,OACJ,IAAK,SACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,cACL,IAAK,WACL,IAAK,YACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,UACL,IAAK,aACL,IAAK,OACL,IAAK,QACL,IAAK,YACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,IACL,IAAK,IACL,IAAK,QACL,IAAK,SACL,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,WACL,IAAK,SACL,IAAK,OACL,IAAK,YACL,IAAK,YACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,OACL,IAAK,UACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,gBACL,IAAK,iBACL,IAAK,WACL,IAAK,cACL,IAAK,iBACL,IAAK,iBACL,IAAK,aACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,aACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,WACL,IAAK,UACL,IAAK,OACL,IAAK,UACL,IAAK,YACL,IAAK,UACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,OACL,IAAK,WACL,IAAK,gBACL,IAAK,aACL,IAAK,eACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,OACL,IAAK,SACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,YACL,IAAK,MACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,SACL,IAAK,aACL,IAAK,OACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,gBACL,IAAK,kBACL,IAAK,gBACL,IAAK,WACL,IAAK,OACL,IAAK,QACL,IAAK,aACL,IAAK,KACL,IAAK,QACL,IAAK,SACL,IAAK,YACL,IAAK,cACL,IAAK,iBACL,IAAK,OACL,IAAK,gBACL,IAAK,WACL,IAAK,cACL,IAAK,WACL,IAAK,iBACL,IAAK,aACL,IAAK,YACL,IAAK,eACL,IAAK,eACL,IAAK,cACL,IAAK,aACL,IAAK,cACL,IAAK,eACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,YACL,IAAK,UACL,IAAK,SACL,IAAK,SACL,IAAK,aACL,IAAK,YACL,IAAK,OACL,IAAK,YACL,IAAK,QACL,IAAK,OACL,IAAK,SACL,IAAK,YACL,IAAK,QACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,cACL,IAAK,SACL,IAAK,eACL,IAAK,WACL,IAAK,YACL,IAAK,UACL,IAAK,WACL,IAAK,cACL,IAAK,MACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,QACL,IAAK,WACL,IAAK,QACL,IAAK,YACL,IAAK,UACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,QACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,aACL,IAAK,cACL,IAAK,OACL,IAAK,WACL,IAAK,OACL,IAAK,gBACL,IAAK,YACL,IAAK,cACL,IAAK,QACL,IAAK,iBACL,IAAK,kBACL,IAAK,kBACL,IAAK,iBACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,oBACL,IAAK,QACL,IAAK,UACL,IAAK,aACL,IAAK,eACL,IAAK,QACL,IAAK,cACL,IAAK,cACL,IAAK,WACL,IAAK,eACL,IAAK,YACL,IAAK,WACL,IAAK,WACL,IAAK,OACL,IAAK,OACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,WACL,IAAK,gBACL,IAAK,YACL,IAAK,kBACL,IAAK,eACL,IAAK,gBACL,IAAK,mBACL,IAAK,cACL,IAAK,gBACL,IAAK,cACL,IAAK,WACL,IAAK,MACL,IAAK,YACL,IAAK,aACL,IAAK,qBACL,IAAK,mBACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,UACL,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,QACL,IAAK,QACL,IAAK,aACL,IAAK,cACL,IAAK,YACL,IAAK,SACL,IAAK,UACL,IAAK,QACL,IAAK,YACL,IAAK,YACL,IAAK,aACL,IAAK,SACL,IAAK,WACL,IAAK,QACL,IAAK,SACL,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,MACL,IAAK,OACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,OACL,IAAK,OACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,WACL,IAAK,OACL,IAAK,YACL,IAAK,YACL,IAAK,UACL,IAAK,aACL,IAAK,aACL,IAAK,QACL,IAAK,QACL,IAAK,WACL,IAAK,WACL,IAAK,UACL,IAAK,SACL,IAAK,WACL,IAAK,UACL,IAAK,QACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,WACL,IAAK,aACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,YACL,IAAK,cACL,IAAK,UACL,IAAK,YACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,UACL,IAAK,cACL,IAAK,MACL,IAAK,cACL,IAAK,MACL,IAAK,aACL,IAAK,gBACL,IAAK,UACL,IAAK,eACL,IAAK,UACL,IAAK,WACL,IAAK,SACL,IAAK,YACL,IAAK,cAEHD,GAAW,CACb,EAAG,EACH,EAAG,EACH,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,GAAI,EACJ,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,IAAK,EACL,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","sources":["webpack://@amcharts/amcharts5/./dist/es2015/.internal/bundled/xlsx/xlsx.mjs"],"sourcesContent":["/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global process:false, Buffer:false, ArrayBuffer:false, DataView:false, Deno:false */\nvar XLSX = {};\nXLSX.version = '0.20.2';\nvar current_codepage = 1200, current_ansi = 1252;\n/*:: declare var cptable:any; */\n/*global cptable:true, window */\nvar $cptable;\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257, 1258, 10000 ];\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n\t0: 1252, /* ANSI */\n\t1: 65001, /* DEFAULT */\n\t2: 65001, /* SYMBOL */\n\t77: 10000, /* MAC */\n\t128: 932, /* SHIFTJIS */\n\t129: 949, /* HANGUL */\n\t130: 1361, /* JOHAB */\n\t134: 936, /* GB2312 */\n\t136: 950, /* CHINESEBIG5 */\n\t161: 1253, /* GREEK */\n\t162: 1254, /* TURKISH */\n\t163: 1258, /* VIETNAMESE */\n\t177: 1255, /* HEBREW */\n\t178: 1256, /* ARABIC */\n\t186: 1257, /* BALTIC */\n\t204: 1251, /* RUSSIAN */\n\t222: 874, /* THAI */\n\t238: 1250, /* EASTEUROPE */\n\t255: 1252, /* OEM */\n\t69: 6969 /* MISC */\n}/*:any*/);\n\nvar set_ansi = function(cp/*:number*/) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data/*:string*/)/*:Array*/ { var o/*:Array*/ = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16lereadu(data/*:Uint8Array*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data[2*i] + (data[2*i+1]<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data/*:string*/)/*:string*/ {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\n\nfunction set_cptable(cptable) {\n\t$cptable = cptable;\n\tset_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\n\tdebom = function(data/*:string*/) {\n\t\tif(data.charCodeAt(0) === 0xFF && data.charCodeAt(1) === 0xFE) { return $cptable.utils.decode(1200, char_codes(data.slice(2))); }\n\t\treturn data;\n\t};\n\t_getchar = function _gc2(x/*:number*/)/*:string*/ {\n\t\tif(current_codepage === 1200) return String.fromCharCode(x);\n\t\treturn $cptable.utils.decode(current_codepage, [x&255,x>>8])[0];\n\t};\n\t_getansi = function _ga2(x/*:number*/)/*:string*/ {\n\t\treturn $cptable.utils.decode(current_ansi, [x])[0];\n\t};\n\tcpdoit();\n}\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64_map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nfunction Base64_encode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input.charCodeAt(i++);\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_encode_pass(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input.charCodeAt(i++);\n if (c1 > 255)\n c1 = 95;\n e1 = c1 >> 2;\n c2 = input.charCodeAt(i++);\n if (c2 > 255)\n c2 = 95;\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input.charCodeAt(i++);\n if (c3 > 255)\n c3 = 95;\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_encode_arr(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n for (var i = 0; i < input.length; ) {\n c1 = input[i++];\n e1 = c1 >> 2;\n c2 = input[i++];\n e2 = (c1 & 3) << 4 | c2 >> 4;\n c3 = input[i++];\n e3 = (c2 & 15) << 2 | c3 >> 6;\n e4 = c3 & 63;\n if (isNaN(c2)) {\n e3 = e4 = 64;\n } else if (isNaN(c3)) {\n e4 = 64;\n }\n o += Base64_map.charAt(e1) + Base64_map.charAt(e2) + Base64_map.charAt(e3) + Base64_map.charAt(e4);\n }\n return o;\n}\nfunction Base64_decode(input) {\n var o = \"\";\n var c1 = 0, c2 = 0, c3 = 0, e1 = 0, e2 = 0, e3 = 0, e4 = 0;\n if (input.slice(0, 5) == \"data:\") {\n var i = input.slice(0, 1024).indexOf(\";base64,\");\n if (i > -1)\n input = input.slice(i + 8);\n }\n input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n for (var i = 0; i < input.length; ) {\n e1 = Base64_map.indexOf(input.charAt(i++));\n e2 = Base64_map.indexOf(input.charAt(i++));\n c1 = e1 << 2 | e2 >> 4;\n o += String.fromCharCode(c1);\n e3 = Base64_map.indexOf(input.charAt(i++));\n c2 = (e2 & 15) << 4 | e3 >> 2;\n if (e3 !== 64) {\n o += String.fromCharCode(c2);\n }\n e4 = Base64_map.indexOf(input.charAt(i++));\n c3 = (e3 & 3) << 6 | e4;\n if (e4 !== 64) {\n o += String.fromCharCode(c3);\n }\n }\n return o;\n}\nvar has_buf = /*#__PURE__*/(function() { return typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node; })();\n\nvar Buffer_from = /*#__PURE__*/(function() {\n\tif(typeof Buffer !== 'undefined') {\n\t\tvar nbfs = !Buffer.from;\n\t\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\t\treturn nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t}\n\treturn function() {};\n})();\nvar buf_utf16le = /*#__PURE__*/(function() {\n\tif(typeof Buffer === 'undefined') return false;\n\tvar x = Buffer_from([65,0]);\n\tif(!x) return false;\n\tvar o = x.toString(\"utf16le\");\n\treturn o.length == 1;\n})();\n\n\nfunction new_raw_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.alloc ? Buffer.alloc(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\tif(has_buf) return Buffer.allocUnsafe ? Buffer.allocUnsafe(len) : new Buffer(len);\n\treturn typeof Uint8Array != \"undefined\" ? new Uint8Array(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s/*:string*/)/*:any*/ {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x/*:string*/)/*:number*/{ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s/*:string*/)/*:any*/ {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data/*:any*/)/*:string*/ {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o/*:Array*/ = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data/*:Array*/)/*:Uint8Array*/ {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array*/ {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n\t/*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\tvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = has_buf ? function(bufs) { return Buffer.concat(bufs.map(function(buf) { return Buffer.isBuffer(buf) ? buf : Buffer_from(buf); })); } : function(bufs) {\n\tif(typeof Uint8Array !== \"undefined\") {\n\t\tvar i = 0, maxlen = 0;\n\t\tfor(i = 0; i < bufs.length; ++i) maxlen += bufs[i].length;\n\t\tvar o = new Uint8Array(maxlen);\n\t\tvar len = 0;\n\t\tfor(i = 0, maxlen = 0; i < bufs.length; maxlen += len, ++i) {\n\t\t\tlen = bufs[i].length;\n\t\t\tif(bufs[i] instanceof Uint8Array) o.set(bufs[i], maxlen);\n\t\t\telse if(typeof bufs[i] == \"string\") o.set(new Uint8Array(s2a(bufs[i])), maxlen);\n\t\t\telse o.set(new Uint8Array(bufs[i]), maxlen);\n\t\t}\n\t\treturn o;\n\t}\n\treturn [].concat.apply([], bufs.map(function(buf) { return Array.isArray(buf) ? buf : [].slice.call(buf); }));\n};\n\nfunction utf8decode(content/*:string*/) {\n\tvar out = [], widx = 0, L = content.length + 250;\n\tvar o = new_raw_buf(content.length + 255);\n\tfor(var ridx = 0; ridx < content.length; ++ridx) {\n\t\tvar c = content.charCodeAt(ridx);\n\t\tif(c < 0x80) o[widx++] = c;\n\t\telse if(c < 0x800) {\n\t\t\to[widx++] = (192|((c>>6)&31));\n\t\t\to[widx++] = (128|(c&63));\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64;\n\t\t\tvar d = content.charCodeAt(++ridx)&1023;\n\t\t\to[widx++] = (240|((c>>8)&7));\n\t\t\to[widx++] = (128|((c>>2)&63));\n\t\t\to[widx++] = (128|((d>>6)&15)|((c&3)<<4));\n\t\t\to[widx++] = (128|(d&63));\n\t\t} else {\n\t\t\to[widx++] = (224|((c>>12)&15));\n\t\t\to[widx++] = (128|((c>>6)&63));\n\t\t\to[widx++] = (128|(c&63));\n\t\t}\n\t\tif(widx > L) {\n\t\t\tout.push(o.slice(0, widx));\n\t\t\twidx = 0;\n\t\t\to = new_raw_buf(65535);\n\t\t\tL = 65530;\n\t\t}\n\t}\n\tout.push(o.slice(0, widx));\n\treturn bconcat(out);\n}\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/*::\ndeclare type Block = any;\ndeclare type BufArray = {\n\tnewblk(sz:number):Block;\n\tnext(sz:number):Block;\n\tend():any;\n\tpush(buf:Block):void;\n};\n\ntype RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};\n\ntype EvertType = {[string]:string};\ntype EvertNumType = {[string]:number};\ntype EvertArrType = {[string]:Array};\n\ntype StringConv = {(string):string};\n\n*/\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nfunction _strrev(x/*:string*/)/*:string*/ { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = /*#__PURE__*/Math.pow(2,32);\nfunction pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\n/* yes, in 2022 this is still faster than string compare */\nfunction SSF_isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i || 0; 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; }\nvar days/*:Array >*/ = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months/*:Array >*/ = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction SSF_init_table(t/*:any*/) {\n\tif(!t) t = {};\n\tt[0]= 'General';\n\tt[1]= '0';\n\tt[2]= '0.00';\n\tt[3]= '#,##0';\n\tt[4]= '#,##0.00';\n\tt[9]= '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n\treturn t;\n}\n/* repeated to satiate webpack */\nvar table_fmt = {\n\t0: 'General',\n\t1: '0',\n\t2: '0.00',\n\t3: '#,##0',\n\t4: '#,##0.00',\n\t9: '0%',\n\t10: '0.00%',\n\t11: '0.00E+00',\n\t12: '# ?/?',\n\t13: '# ??/??',\n\t14: 'm/d/yy',\n\t15: 'd-mmm-yy',\n\t16: 'd-mmm',\n\t17: 'mmm-yy',\n\t18: 'h:mm AM/PM',\n\t19: 'h:mm:ss AM/PM',\n\t20: 'h:mm',\n\t21: 'h:mm:ss',\n\t22: 'm/d/yy h:mm',\n\t37: '#,##0 ;(#,##0)',\n\t38: '#,##0 ;[Red](#,##0)',\n\t39: '#,##0.00;(#,##0.00)',\n\t40: '#,##0.00;[Red](#,##0.00)',\n\t45: 'mm:ss',\n\t46: '[h]:mm:ss',\n\t47: 'mmss.0',\n\t48: '##0.0E+0',\n\t49: '@',\n\t56: '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"'\n};\n\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar SSF_default_map = {\n\t5: 37, 6: 38, 7: 39, 8: 40, // 5 -> 37 ... 8 -> 40\n\n\t23: 0, 24: 0, 25: 0, 26: 0, // 23 -> 0 ... 26 -> 0\n\n\t27: 14, 28: 14, 29: 14, 30: 14, 31: 14, // 27 -> 14 ... 31 -> 14\n\n\t50: 14, 51: 14, 52: 14, 53: 14, 54: 14, // 50 -> 14 ... 58 -> 14\n\t55: 14, 56: 14, 57: 14, 58: 14,\n\t59: 1, 60: 2, 61: 3, 62: 4, // 59 -> 1 ... 62 -> 4\n\n\t67: 9, 68: 10, // 67 -> 9 ... 68 -> 10\n\t69: 12, 70: 13, 71: 14, // 69 -> 12 ... 71 -> 14\n\t72: 14, 73: 15, 74: 16, 75: 17, // 72 -> 14 ... 75 -> 17\n\t76: 20, 77: 21, 78: 22, // 76 -> 20 ... 78 -> 22\n\t79: 45, 80: 46, 81: 47, // 79 -> 45 ... 81 -> 47\n\t82: 0 // 82 -> 0 ... 65536 -> 0 (omitted)\n};\n\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar SSF_default_str = {\n\t// 5 -- Currency, 0 decimal, black negative\n\t5: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t63: '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\n\t// 6 -- Currency, 0 decimal, red negative\n\t6: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t64: '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\n\t// 7 -- Currency, 2 decimal, black negative\n\t7: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t65: '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 8 -- Currency, 2 decimal, red negative\n\t8: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t66: '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\n\t// 41 -- Accounting, 0 decimal, No Symbol\n\t41: '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)',\n\n\t// 42 -- Accounting, 0 decimal, $ Symbol\n\t42: '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)',\n\n\t// 43 -- Accounting, 2 decimal, No Symbol\n\t43: '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)',\n\n\t// 44 -- Accounting, 2 decimal, $ Symbol\n\t44: '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)'\n};\n\nfunction SSF_frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array*/ {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction SSF_normalize_xl_unsafe(v/*:number*/)/*:number*/ {\n\tvar s = v.toPrecision(16);\n\tif(s.indexOf(\"e\") > -1) {\n\t\tvar m = s.slice(0, s.indexOf(\"e\"));\n\t\tm = m.indexOf(\".\") > -1 ? m.slice(0, (m.slice(0,2) == \"0.\" ? 17 : 16)) : (m.slice(0,15) + fill(\"0\", m.length - 15));\n\t\treturn m + s.slice(s.indexOf(\"e\"));\n\t}\n\tvar n = s.indexOf(\".\") > -1 ? s.slice(0, (s.slice(0,2) == \"0.\" ? 17 : 16)) : (s.slice(0,15) + fill(\"0\", s.length - 15));\n\treturn Number(n);\n}\n\nfunction SSF_parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {\n\tif(v > 2958465 || v < 0) return null;\n\tv = SSF_normalize_xl_unsafe(v);\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = SSF_fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\n/* exponent >= -9 and <= 9 */\nfunction SSF_strip_decimal(o/*:string*/)/*:string*/ {\n\treturn (o.indexOf(\".\") == -1) ? o : o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)$/, \"$1\");\n}\n\n/* General Exponential always shows 2 digits exp and trims the mantissa */\nfunction SSF_normalize_exp(o/*:string*/)/*:string*/ {\n\tif(o.indexOf(\"E\") == -1) return o;\n\treturn o.replace(/(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/,\"$1E\").replace(/(E[+-])(\\d)$/,\"$10$2\");\n}\n\n/* exponent >= -9 and <= 9 */\nfunction SSF_small_exp(v/*:number*/)/*:string*/ {\n\tvar w = (v<0?12:11);\n\tvar o = SSF_strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\to = v.toPrecision(10); if(o.length <= w) return o;\n\treturn v.toExponential(5);\n}\n\n/* exponent >= 11 or <= -10 likely exponential */\nfunction SSF_large_exp(v/*:number*/)/*:string*/ {\n\tvar o = SSF_strip_decimal(v.toFixed(11));\n\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n}\n\nfunction SSF_general_num(v/*:number*/)/*:string*/ {\n\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\telse if(Math.abs(V) <= 9) o = SSF_small_exp(v);\n\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\telse o = SSF_large_exp(v);\n\n\treturn SSF_strip_decimal(SSF_normalize_exp(o.toUpperCase()));\n}\n\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tThe longest 32-bit integer text is \"-2147483648\", exactly 11 chars\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction SSF_general(v/*:any*/, opts/*:any*/) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : SSF_general_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return SSF_format(14, datenum(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\n\nfunction SSF_fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if(date < 60) dow = (dow + 6) % 7;\n return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\nfunction SSF_write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n\t\t\t/*::if(!ss0) ss0 = 0; */\n\t\t\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+(ss0 == 0 ? Math.round(val.S+val.u) : val.S); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n\n\n/*jshint -W086 */\n/*jshint +W086 */\nfunction commaify(s/*:string*/)/*:string*/ {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar pct1 = /%/g;\nfunction write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\n\nfunction write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\n\nfunction write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn 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));\n}\nfunction write_num_f2(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\)[^)]*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str/*:string*/)/*:string*/ {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val/*:number*/, d/*:number*/)/*:number*/ {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val/*:number*/, d/*:number*/)/*:number*/ {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val/*:number*/)/*:string*/ {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(/*::(*/r/*::||[\"\"])*/[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\to = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\t\treturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri*/ {\n\tvar out/*:Array*/ = [];\n\tvar in_str = false/*, cc*/;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\n\nvar SSF_abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\nfunction fmt_is_date(fmt/*:string*/)/*:boolean*/ {\n\tvar i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': if(SSF_isgeneral(fmt, i)) i+= 6; i++; break;\n\t\t\tcase '\"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;\n\t\t\tcase '\\\\': i+=2; break;\n\t\t\tcase '_': i+=2; break;\n\t\t\tcase '@': ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") return true;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n\t\t\t\t++i; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.match(SSF_abstime)) return true;\n\t\t\t\tbreak;\n\t\t\tcase '.':\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\twhile(i < fmt.length && (\"0#?.,E+-%\".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!SSF_isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=SSF_parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? fmt.charAt(i+2) : c; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(SSF_abstime)) {\n\t\t\t\t\tif(dt==null) { dt=SSF_parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) { ss0=Math.max(ss0,ssm[0].length-1); bt = 4;}\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'e': lst=out[i].t; break;\n\t\t\tcase 'M': lst=out[i].t; if(bt < 2) bt = 2; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tvar _dt;\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\tcase 2:\n\t\tcase 3:\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tif(dt.H >= 24) { dt.H = 0; ++dt.D; _dt = SSF_parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tswitch(ss0) {\n\t\t\t\tcase 1: dt.u = Math.round(dt.u * 10)/10; break;\n\t\t\t\tcase 2: dt.u = Math.round(dt.u * 100)/100; break;\n\t\t\t\tcase 3: dt.u = Math.round(dt.u * 1000)/1000; break;\n\t\t\t}\n\t\t\tif(dt.u >= 1) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tif(dt.H >= 24) { dt.H = 0; ++dt.D; _dt = SSF_parse_date_code(dt.D); _dt.u = dt.u; _dt.S = dt.S; _dt.M = dt.M; _dt.H = dt.H; dt = _dt; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\n\t\t\t\t/*::if(!dt) throw \"unreachable\"; */\n\t\t\t\tout[i].v = SSF_write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = SSF_general(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\n\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\": if(v == thresh) return true; break;\n\t\tcase \">\": if(v > thresh) return true; break;\n\t\tcase \"<\": if(v < thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f/*:string*/, v/*:any*/) {\n\tvar fmt = SSF_split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(/\\[[=<>]/) != null || fmt[1].match(/\\[[=<>]/) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction SSF_format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table/*:any*/) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[SSF_default_map[fmt]]) || table_fmt[SSF_default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = SSF_default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(SSF_isgeneral(sfmt,0)) return SSF_general(v, o);\n\tif(v instanceof Date) v = datenum(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(SSF_isgeneral(f[1])) return SSF_general(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction SSF_load(fmt/*:string*/, idx/*:?number*/)/*:number*/ {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tfor(var i = 0; i < 0x0188; ++i) {\n/*::if(typeof idx != 'number') return 0x188; */\n\t\t\tif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tif(idx < 0) idx = 0x187;\n\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\ttable_fmt[idx] = fmt;\n\treturn idx;\n}\nfunction SSF_load_table(tbl/*:SSFTable*/)/*:void*/ {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) SSF_load(tbl[i], i);\n}\n\nfunction make_ssf() {\n\ttable_fmt = SSF_init_table();\n}\n\nvar SSF = {\n\tformat: SSF_format,\n\tload: SSF_load,\n\t_table: table_fmt,\n\tload_table: SSF_load_table,\n\tparse_date_code: SSF_parse_date_code,\n\tis_date: fmt_is_date,\n\tget_table: function get_table() { return SSF._table = table_fmt; }\n};\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n}/*:any*/);\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {\n\tvar fmt = typeof dateNF == \"number\" ? table_fmt[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\tdateNFregex.lastIndex = 0;\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array*/)/*:string*/ {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tdateNFregex.lastIndex = 0;\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\n/* table of bad formats written by third-party tools */\nvar bad_formats = {\n\t\"d.m\": \"d\\\\.m\" // Issue #2571 Google Sheets writes invalid format 'd.m', correct format is 'd\".\"m' or 'd\\\\.m'\n};\n\nfunction SSF__load(fmt, idx) {\n\treturn SSF_load(bad_formats[fmt] || fmt, idx);\n}\n\n/*::\ndeclare var ReadShift:any;\ndeclare var CheckField:any;\ndeclare var prep_blob:any;\ndeclare var __readUInt32LE:any;\ndeclare var __readInt32LE:any;\ndeclare var __toBuffer:any;\ndeclare var __utf16le:any;\ndeclare var bconcat:any;\ndeclare var s2a:any;\ndeclare var chr0:any;\ndeclare var chr1:any;\ndeclare var has_buf:boolean;\ndeclare var new_buf:any;\ndeclare var new_raw_buf:any;\ndeclare var new_unsafe_buf:any;\ndeclare var Buffer_from:any;\n*/\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/*::\ntype SectorEntry = {\n\tname?:string;\n\tnodes?:Array;\n\tdata:RawBytes;\n};\ntype SectorList = {\n\t[k:string|number]:SectorEntry;\n\tname:?string;\n\tfat_addrs:Array;\n\tssz:number;\n}\ntype CFBFiles = {[n:string]:CFBEntry};\n*/\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32 = /*#__PURE__*/(function() {\nvar CRC32 = {};\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table()/*:any*/ {\n\tvar c = 0, table/*:Array*/ = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T0 = signed_crc_table();\nfunction slice_by_16_tables(T) {\n\tvar c = 0, v = 0, n = 0, table/*:Array*/ = typeof Int32Array !== 'undefined' ? new Int32Array(4096) : new Array(4096) ;\n\n\tfor(n = 0; n != 256; ++n) table[n] = T[n];\n\tfor(n = 0; n != 256; ++n) {\n\t\tv = T[n];\n\t\tfor(c = 256 + n; c < 4096; c += 256) v = table[c] = (v >>> 8) ^ T[v & 0xFF];\n\t}\n\tvar out = [];\n\tfor(n = 1; n != 16; ++n) out[n - 1] = typeof Int32Array !== 'undefined' && typeof table.subarray == \"function\" ? table.subarray(n * 256, n * 256 + 256) : table.slice(n * 256, n * 256 + 256);\n\treturn out;\n}\nvar TT = slice_by_16_tables(T0);\nvar T1 = TT[0], T2 = TT[1], T3 = TT[2], T4 = TT[3], T5 = TT[4];\nvar T6 = TT[5], T7 = TT[6], T8 = TT[7], T9 = TT[8], Ta = TT[9];\nvar Tb = TT[10], Tc = TT[11], Td = TT[12], Te = TT[13], Tf = TT[14];\nfunction crc32_bstr(bstr/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1;\n\tfor(var i = 0, L = bstr.length; i < L;) C = (C>>>8) ^ T0[(C^bstr.charCodeAt(i++))&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_buf(B/*:Uint8Array|Array*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed/*:: ? 0 : 0 */ ^ -1, L = B.length - 15, i = 0;\n\tfor(; i < L;) C =\n\t\tTf[B[i++] ^ (C & 255)] ^\n\t\tTe[B[i++] ^ ((C >> 8) & 255)] ^\n\t\tTd[B[i++] ^ ((C >> 16) & 255)] ^\n\t\tTc[B[i++] ^ (C >>> 24)] ^\n\t\tTb[B[i++]] ^ Ta[B[i++]] ^ T9[B[i++]] ^ T8[B[i++]] ^\n\t\tT7[B[i++]] ^ T6[B[i++]] ^ T5[B[i++]] ^ T4[B[i++]] ^\n\t\tT3[B[i++]] ^ T2[B[i++]] ^ T1[B[i++]] ^ T0[B[i++]];\n\tL += 15;\n\twhile(i < L) C = (C>>>8) ^ T0[(C^B[i++])&0xFF];\n\treturn ~C;\n}\n\nfunction crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L = str.length, c = 0, d = 0; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T0[(C^c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T0[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T0[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T0[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn ~C;\n}\nCRC32.table = T0;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\nreturn CRC32;\n})();\n/* [MS-CFB] v20171201 */\nvar CFB = /*#__PURE__*/(function _CFB(){\nvar exports/*:CFBModule*/ = /*::(*/{}/*:: :any)*/;\nexports.version = '1.2.2';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l/*:string*/, r/*:string*/)/*:number*/ {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms/*:number*/ = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd/*:number*/ = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob/*:CFBlob*/)/*:any*/ {\n\tprep_blob(blob, 0);\n\tvar o = /*::(*/{}/*:: :any)*/;\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t} break;\n\t\t\t/* ZIP64 Extended Information Field */\n\t\t\tcase 0x0001: {\n\t\t\t\tvar sz1 = blob.read_shift(4), sz2 = blob.read_shift(4);\n\t\t\t\tp.usz = (sz2 * Math.pow(2,32) + sz1);\n\t\t\t\tsz1 = blob.read_shift(4); sz2 = blob.read_shift(4);\n\t\t\t\tp.csz = (sz2 * Math.pow(2,32) + sz1);\n\t\t\t\t// NOTE: volume fields are skipped\n\t\t\t} break;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs/*:: = require('fs'); */;\nfunction get_fs() { return fs || (fs = _fs); }\nfunction parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif((file[0] | 0x20) == 0x6d && (file[1]|0x20) == 0x69) return parse_mad(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs/*:Array*/ = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob/*:CFBlob*/ = /*::(*/file.slice(0,512)/*:: :any)*/;\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = /*::(*/file.slice(0,ssz)/*:: :any)*/; prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header/*:RawBytes*/ = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt/*:number*/ = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors/*:Array*/ = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list/*:SectorList*/ = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nif(dir_start < sector_list.length) sector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files/*:CFBFiles*/ = {}, Paths/*:Array*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver/*:number*/ = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array*/ {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors/*:Array*/ = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array*/, Paths/*:Array*/)/*:void*/ {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad/*:Array*/ = [], q/*:Array*/ = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0)/*:any*/);\n\treturn (bconcat(o).slice(0, entry.size)/*:any*/);\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array*/, ssz/*:number*/, fat_addrs)/*:void*/ {\n\tvar q/*:number*/ = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tif(cnt >= 1) sleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors/*:Array*/, start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/, chkd/*:?Array*/)/*:SectorEntry*/ {\n\tvar buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors/*:Array*/, dir_start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/)/*:SectorList*/ {\n\tvar sl = sectors.length, sector_list/*:SectorList*/ = ([]/*:any*/);\n\tvar chkd/*:Array*/ = [], buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]/*:Array*/);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr/*:number*/ = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}/*:SectorEntry*/);\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array*/, Paths/*:Array*/, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob/*:CFBlob*/ = /*::(*/sector.slice(i, i+128)/*:: :any)*/;\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o/*:CFBEntry*/ = ({\n\t\t\tname: name,\n\t\t\ttype: blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL: blob.read_shift(4, 'i'),\n\t\t\tR: blob.read_shift(4, 'i'),\n\t\t\tC: blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size)/*:any*/);\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename/*:string*/, options/*:CFBReadOpts*/) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {\n\tvar type = options && options.type;\n\tif(!type) {\n\t\tif(has_buf && Buffer.isBuffer(blob)) type = \"buffer\";\n\t}\n\tswitch(type || \"base64\") {\n\t\tcase \"file\": /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */return read_file(blob, options);\n\t\tcase \"base64\": /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */return parse(s2a(Base64_decode(blob)), options);\n\t\tcase \"binary\": /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */return parse(s2a(blob), options);\n\t}\n\treturn parse(/*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */blob, options);\n}\n\nfunction init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 }/*:any*/);\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }/*:any*/));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\t// Track which names exist\n\tvar fullPaths = Object.create ? Object.create(null) : {};\n\tvar data/*:Array<[string, CFBEntry]>*/ = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tfullPaths[cfb.FullPaths[i]] = true;\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = fullPaths[dad];\n\t\twhile(!s) {\n\t\t\twhile(dirname(dad) && !fullPaths[dirname(dad)]) dad = dirname(dad);\n\n\t\t\tdata.push([dad, ({\n\t\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\t\ttype: 1,\n\t\t\t\tclsid: HEADER_CLSID,\n\t\t\t\tct: now, mt: now,\n\t\t\t\tcontent: null\n\t\t\t}/*:any*/)]);\n\n\t\t\t// Add name to set\n\t\t\tfullPaths[dad] = true;\n\n\t\t\tdad = dirname(data[i][0]);\n\t\t\ts = fullPaths[dad];\n\t\t}\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name = filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar _opts = options || {};\n\t/* MAD is order-sensitive, skip rebuild and sort */\n\tif(_opts.fileType == 'mad') return write_mad(cfb, _opts);\n\trebuild_cfb(cfb);\n\tswitch(_opts.fileType) {\n\t\tcase 'zip': return write_zip(cfb, _opts);\n\t\t//case 'mad': return write_mad(cfb, _opts);\n\t}\n\tvar L = (function(cfb/*:CFBContainer*/)/*:Array*/{\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w/*:number*/)/*:void*/ {\n\t\tfor(T += w; i> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm/*:string*/ = (i === 0 && _opts.root) || file.name;\n\t\tif(_nm.length > 31) {\n\t\t\tconsole.error(\"Name \" + _nm + \" will be truncated to \" + _nm.slice(0,31));\n\t\t\t_nm = _nm.slice(0, 31);\n\t\t}\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 511) & -512;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size > 0 && file.size < 0x1000) {\n\t\t\tif (has_buf && Buffer.isBuffer(file.content)) {\n\t\t\t\tfile.content.copy(o, o.l, 0, file.size);\n\t\t\t\t// o is a 0-filled Buffer so just set next offset\n\t\t\t\to.l += (file.size + 63) & -64;\n\t\t\t} else {\n\t\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t\t}\n\t\t}\n\t}\n\tif (has_buf) {\n\t\to.l = o.length;\n\t} else {\n\t\t// When using Buffer, already 0-filled\n\t\twhile(o.l < o.length) o.write_shift(1, 0);\n\t}\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {\n\tvar UCFullPaths/*:Array*/ = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths/*:Array*/ = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k/*:boolean*/ = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath/*:string*/ = path.toUpperCase();\n\tvar w/*:number*/ = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*:CFBWriteOpts*/)/*:void*/ {\n\tget_fs();\n\tvar o = _write(cfb, options);\n\t/*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\tfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o/*:RawBytes*/)/*:string*/ {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type || \"buffer\") {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o/*:any*/)); return o;\n\t\tcase \"binary\": return typeof o == \"string\" ? o : a2s(o);\n\t\tcase \"base64\": return Base64_encode(typeof o == \"string\" ? o : a2s(o));\n\t\tcase \"buffer\": if(has_buf) return Buffer.isBuffer(o) ? o : Buffer_from(o);\n\t\t\t/* falls through */\n\t\tcase \"array\": return typeof o == \"string\" ? s2a(o) : o;\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [ 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 ];\n\n/* DST_ID = [ 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, 26, 27, 28, 29 ]; */\nvar DST_LN = [ 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 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* helpers for unaligned bit writes */\nfunction write_bits_3(buf, bl, v) { var w = bl & 7, h = bl >>> 3;\n\tif(w <= 5) buf[h] |= (v & 7) << w;\n\telse {\n\t\tbuf[h] |= (v << w) & 0xFF;\n\t\tbuf[h+1] = (v&7) >> (8-w);\n\t}\n\treturn bl + 3;\n}\n\nfunction write_bits_1(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv = (v&1) << w;\n\tbuf[h] |= v;\n\treturn bl + 1;\n}\nfunction write_bits_8(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v;\n\treturn bl + 8;\n}\nfunction write_bits_16(buf, bl, v) {\n\tvar w = bl & 7, h = bl >>> 3;\n\tv <<= w;\n\tbuf[h] |= v & 0xFF; v >>>= 8;\n\tbuf[h+1] = v & 0xFF;\n\tbuf[h+2] = v >>> 8;\n\treturn bl + 16;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz/*:number*/) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < L; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<*/ = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens/*:Array*/ = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();var _deflateRaw = /*#__PURE__*/(function _deflateRawIIFE() {\n\tvar DST_LN_RE = use_typed_arrays ? new Uint8Array(0x8000) : [];\n\tvar j = 0, k = 0;\n\tfor(; j < DST_LN.length - 1; ++j) {\n\t\tfor(; k < DST_LN[j+1]; ++k) DST_LN_RE[k] = j;\n\t}\n\tfor(;k < 32768; ++k) DST_LN_RE[k] = 29;\n\n\tvar LEN_LN_RE = use_typed_arrays ? new Uint8Array(0x103) : [];\n\tfor(j = 0, k = 0; j < LEN_LN.length - 1; ++j) {\n\t\tfor(; k < LEN_LN[j+1]; ++k) LEN_LN_RE[k] = j;\n\t}\n\n\tfunction write_stored(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t}\n\n\t/* Fixed Huffman */\n\tfunction write_huff_fixed(data, out) {\n\t\tvar bl = 0;\n\t\tvar boff = 0;\n\t\tvar addrs = use_typed_arrays ? new Uint16Array(0x8000) : [];\n\t\twhile(boff < data.length) {\n\t\t\tvar L = /* data.length - boff; */ Math.min(0xFFFF, data.length - boff);\n\n\t\t\t/* write a stored block for short data */\n\t\t\tif(L < 10) {\n\t\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length)); // jshint ignore:line\n\t\t\t\tif(bl & 7) bl += 8 - (bl & 7);\n\t\t\t\tout.l = (bl / 8) | 0;\n\t\t\t\tout.write_shift(2, L);\n\t\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t\t\tbl = out.l * 8;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tbl = write_bits_3(out, bl, +!!(boff + L == data.length) + 2); // jshint ignore:line\n\t\t\tvar hash = 0;\n\t\t\twhile(L-- > 0) {\n\t\t\t\tvar d = data[boff];\n\t\t\t\thash = ((hash << 5) ^ d) & 0x7FFF;\n\n\t\t\t\tvar match = -1, mlen = 0;\n\n\t\t\t\tif((match = addrs[hash])) {\n\t\t\t\t\tmatch |= boff & ~0x7FFF;\n\t\t\t\t\tif(match > boff) match -= 0x8000;\n\t\t\t\t\tif(match < boff) while(data[match + mlen] == data[boff + mlen] && mlen < 250) ++mlen;\n\t\t\t\t}\n\n\t\t\t\tif(mlen > 2) {\n\t\t\t\t\t/* Copy Token */\n\t\t\t\t\td = LEN_LN_RE[mlen];\n\t\t\t\t\tif(d <= 22) bl = write_bits_8(out, bl, bitswap8[d+1]>>1) - 1;\n\t\t\t\t\telse {\n\t\t\t\t\t\twrite_bits_8(out, bl, 3);\n\t\t\t\t\t\tbl += 5;\n\t\t\t\t\t\twrite_bits_8(out, bl, bitswap8[d-23]>>5);\n\t\t\t\t\t\tbl += 3;\n\t\t\t\t\t}\n\t\t\t\t\tvar len_eb = (d < 8) ? 0 : ((d - 4)>>2);\n\t\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, mlen - LEN_LN[d]);\n\t\t\t\t\t\tbl += len_eb;\n\t\t\t\t\t}\n\n\t\t\t\t\td = DST_LN_RE[boff - match];\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]>>3);\n\t\t\t\t\tbl -= 3;\n\n\t\t\t\t\tvar dst_eb = d < 4 ? 0 : (d-2)>>1;\n\t\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\t\twrite_bits_16(out, bl, boff - match - DST_LN[d]);\n\t\t\t\t\t\tbl += dst_eb;\n\t\t\t\t\t}\n\t\t\t\t\tfor(var q = 0; q < mlen; ++q) {\n\t\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t\thash = ((hash << 5) ^ data[boff]) & 0x7FFF;\n\t\t\t\t\t\t++boff;\n\t\t\t\t\t}\n\t\t\t\t\tL-= mlen - 1;\n\t\t\t\t} else {\n\t\t\t\t\t/* Literal Token */\n\t\t\t\t\tif(d <= 143) d = d + 48;\n\t\t\t\t\telse bl = write_bits_1(out, bl, 1);\n\t\t\t\t\tbl = write_bits_8(out, bl, bitswap8[d]);\n\t\t\t\t\taddrs[hash] = boff & 0x7FFF;\n\t\t\t\t\t++boff;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbl = write_bits_8(out, bl, 0) - 1;\n\t\t}\n\t\tout.l = ((bl + 7)/8)|0;\n\t\treturn out.l;\n\t}\n\treturn function _deflateRaw(data, out) {\n\t\tif(data.length < 8) return write_stored(data, out);\n\t\treturn write_huff_fixed(data, out);\n\t};\n})();\n\nfunction _deflate(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n}\n/* modified inflate function also moves original read head */\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff/*:number*/) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<*/ = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz/*:number*/) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(sz > 0) {\n\t\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\t\twhile(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\t}\n\t\t\tcontinue;\n\t\t} else if((header >> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt + 100); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\tif(usz) return [outbuf, (boff+7)>>>3];\n\treturn [outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tvar blob/*:CFBlob*/ = /*::(*/file/*:: :any)*/;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(/*::(*/blob.slice(blob.l+namelen, blob.l+namelen+efsz)/*:: :any)*/);\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\t/* ZIP64 lengths */\n\t\tif(EF && EF[0x0001]) {\n\t\t\tif((EF[0x0001]||{}).usz) usz = EF[0x0001].usz;\n\t\t\tif((EF[0x0001]||{}).csz) csz = EF[0x0001].csz;\n\t\t}\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*/, o/*:CFBContainer*/, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(/*::(*/blob.slice(blob.l, blob.l + efsz)/*:: :any)*/);\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif((ef[0x0001]||{}).usz) _usz = ef[0x0001].usz;\n\t\tif((ef[0x0001]||{}).csz) _csz = ef[0x0001].csz;\n\t\tif(EF) {\n\t\t\tif((EF[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t\t\tif((EF[0x0001]||{}).usz) _usz = ef[0x0001].usz;\n\t\t\tif((EF[0x0001]||{}).csz) _csz = ef[0x0001].csz;\n\t\t}\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break; // TODO: scan for magic number\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\t//var _crc32 = CRC32.buf(data, 0);\n\t//if((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o/*:CFBlob*/ = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = typeof fi.content == \"string\" ? CRC32.bstr(fi.content, 0) : CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);\n\n\t\tvar outbuf = typeof fi.content == \"string\" ? s2a(fi.content) : fi.content/*::||[]*/;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4, (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4, (flags & 8) ? 0 : /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: extra fields? */\n\n\t\t/* TODO: encryption header ? */\n\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out/*:any*/)), bconcat(cdirs), o]/*:any*/));\n}\nvar ContentTypeMap = ({\n\t\"htm\": \"text/html\",\n\t\"xml\": \"text/xml\",\n\n\t\"gif\": \"image/gif\",\n\t\"jpg\": \"image/jpeg\",\n\t\"png\": \"image/png\",\n\n\t\"mso\": \"application/x-mso\",\n\t\"thmx\": \"application/vnd.ms-officetheme\",\n\t\"sh33tj5\": \"application/octet-stream\"\n}/*:any*/);\n\nfunction get_content_type(fi/*:CFBEntry*/, fp/*:string*/)/*:string*/ {\n\tif(fi.ctype) return fi.ctype;\n\n\tvar ext = fi.name || \"\", m = ext.match(/\\.([^\\.]+)$/);\n\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\n\tif(fp) {\n\t\tm = (ext = fp).match(/[\\.\\\\]([^\\.\\\\])+$/);\n\t\tif(m && ContentTypeMap[m[1]]) return ContentTypeMap[m[1]];\n\t}\n\n\treturn \"application/octet-stream\";\n}\n\n/* 76 character chunks TODO: intertwine encoding */\nfunction write_base64_76(bstr/*:string*/)/*:string*/ {\n\tvar data = Base64_encode(bstr);\n\tvar o = [];\n\tfor(var i = 0; i < data.length; i+= 76) o.push(data.slice(i, i+76));\n\treturn o.join(\"\\r\\n\") + \"\\r\\n\";\n}\n\n/*\nRules for QP:\n\t- escape =## applies for all non-display characters and literal \"=\"\n\t- space or tab at end of line must be encoded\n\t- \\r\\n newlines can be preserved, but bare \\r and \\n must be escaped\n\t- lines must not exceed 76 characters, use soft breaks =\\r\\n\n\nTODO: Some files from word appear to write line extensions with bare equals:\n\n```\n*/ = [], split = encoded.split(\"\\r\\n\");\n\tfor(var si = 0; si < split.length; ++si) {\n\t\tvar str = split[si];\n\t\tif(str.length == 0) { o.push(\"\"); continue; }\n\t\tfor(var i = 0; i < str.length;) {\n\t\t\tvar end = 76;\n\t\t\tvar tmp = str.slice(i, i + end);\n\t\t\tif(tmp.charAt(end - 1) == \"=\") end --;\n\t\t\telse if(tmp.charAt(end - 2) == \"=\") end -= 2;\n\t\t\telse if(tmp.charAt(end - 3) == \"=\") end -= 3;\n\t\t\ttmp = str.slice(i, i + end);\n\t\t\ti += end;\n\t\t\tif(i < str.length) tmp += \"=\";\n\t\t\to.push(tmp);\n\t\t}\n\t}\n\n\treturn o.join(\"\\r\\n\");\n}\nfunction parse_quoted_printable(data/*:Array*/)/*:RawBytes*/ {\n\tvar o = [];\n\n\t/* unify long lines */\n\tfor(var di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\twhile(di <= data.length && line.charAt(line.length - 1) == \"=\") line = line.slice(0, line.length - 1) + data[++di];\n\t\to.push(line);\n\t}\n\n\t/* decode */\n\tfor(var oi = 0; oi < o.length; ++oi) o[oi] = o[oi].replace(/[=][0-9A-Fa-f]{2}/g, function($$) { return String.fromCharCode(parseInt($$.slice(1), 16)); });\n\treturn s2a(o.join(\"\\r\\n\"));\n}\n\n\nfunction parse_mime(cfb/*:CFBContainer*/, data/*:Array*/, root/*:string*/)/*:void*/ {\n\tvar fname = \"\", cte = \"\", ctype = \"\", fdata;\n\tvar di = 0;\n\tfor(;di < 10; ++di) {\n\t\tvar line = data[di];\n\t\tif(!line || line.match(/^\\s*$/)) break;\n\t\tvar m = line.match(/^([^:]*?):\\s*([^\\s].*)$/);\n\t\tif(m) switch(m[1].toLowerCase()) {\n\t\t\tcase \"content-location\": fname = m[2].trim(); break;\n\t\t\tcase \"content-type\": ctype = m[2].trim(); break;\n\t\t\tcase \"content-transfer-encoding\": cte = m[2].trim(); break;\n\t\t}\n\t}\n\t++di;\n\tswitch(cte.toLowerCase()) {\n\t\tcase 'base64': fdata = s2a(Base64_decode(data.slice(di).join(\"\"))); break;\n\t\tcase 'quoted-printable': fdata = parse_quoted_printable(data.slice(di)); break;\n\t\tdefault: throw new Error(\"Unsupported Content-Transfer-Encoding \" + cte);\n\t}\n\tvar file = cfb_add(cfb, fname.slice(root.length), fdata, {unsafe: true});\n\tif(ctype) file.ctype = ctype;\n}\n\nfunction parse_mad(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tif(a2s(file.slice(0,13)).toLowerCase() != \"mime-version:\") throw new Error(\"Unsupported MAD header\");\n\tvar root = (options && options.root || \"\");\n\t// $FlowIgnore\n\tvar data = (has_buf && Buffer.isBuffer(file) ? file.toString(\"binary\") : a2s(file)).split(\"\\r\\n\");\n\tvar di = 0, row = \"\";\n\n\t/* if root is not specified, scan for the common prefix */\n\tfor(di = 0; di < data.length; ++di) {\n\t\trow = data[di];\n\t\tif(!/^Content-Location:/i.test(row)) continue;\n\t\trow = row.slice(row.indexOf(\"file\"));\n\t\tif(!root) root = row.slice(0, row.lastIndexOf(\"/\") + 1);\n\t\tif(row.slice(0, root.length) == root) continue;\n\t\twhile(root.length > 0) {\n\t\t\troot = root.slice(0, root.length - 1);\n\t\t\troot = root.slice(0, root.lastIndexOf(\"/\") + 1);\n\t\t\tif(row.slice(0,root.length) == root) break;\n\t\t}\n\t}\n\n\tvar mboundary = (data[1] || \"\").match(/boundary=\"(.*?)\"/);\n\tif(!mboundary) throw new Error(\"MAD cannot find boundary\");\n\tvar boundary = \"--\" + (mboundary[1] || \"\");\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o);\n\tvar start_di, fcnt = 0;\n\tfor(di = 0; di < data.length; ++di) {\n\t\tvar line = data[di];\n\t\tif(line !== boundary && line !== boundary + \"--\") continue;\n\t\tif(fcnt++) parse_mime(o, data.slice(start_di, di), root);\n\t\tstart_di = di;\n\t}\n\treturn o;\n}\n\nfunction write_mad(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:string*/ {\n\tvar opts = options || {};\n\tvar boundary = opts.boundary || \"SheetJS\";\n\tboundary = '------=' + boundary;\n\n\tvar out = [\n\t\t'MIME-Version: 1.0',\n\t\t'Content-Type: multipart/related; boundary=\"' + boundary.slice(2) + '\"',\n\t\t'',\n\t\t'',\n\t\t''\n\t];\n\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tfor(var i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length);\n\t\tfi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\n\t\t/* Normalize filename */\n\t\tfp = fp.replace(/[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7E-\\xFF]/g, function(c) {\n\t\t\treturn \"_x\" + c.charCodeAt(0).toString(16) + \"_\";\n\t\t}).replace(/[\\u0080-\\uFFFF]/g, function(u) {\n\t\t\treturn \"_u\" + u.charCodeAt(0).toString(16) + \"_\";\n\t\t});\n\n\t\t/* Extract content as binary string */\n\t\tvar ca = fi.content;\n\t\t// $FlowIgnore\n\t\tvar cstr = has_buf && Buffer.isBuffer(ca) ? ca.toString(\"binary\") : a2s(ca);\n\n\t\t/* 4/5 of first 1024 chars ascii -> quoted printable, else base64 */\n\t\tvar dispcnt = 0, L = Math.min(1024, cstr.length), cc = 0;\n\t\tfor(var csl = 0; csl <= L; ++csl) if((cc=cstr.charCodeAt(csl)) >= 0x20 && cc < 0x80) ++dispcnt;\n\t\tvar qp = dispcnt >= L * 4 / 5;\n\n\t\tout.push(boundary);\n\t\tout.push('Content-Location: ' + (opts.root || 'file:///C:/SheetJS/') + fp);\n\t\tout.push('Content-Transfer-Encoding: ' + (qp ? 'quoted-printable' : 'base64'));\n\t\tout.push('Content-Type: ' + get_content_type(fi, fp));\n\t\tout.push('');\n\n\t\tout.push(qp ? write_quoted_printable(cstr) : write_base64_76(cstr));\n\t}\n\tout.push(boundary + '--\\r\\n');\n\treturn out.join(\"\\r\\n\");\n}\nfunction cfb_new(opts/*:?any*/)/*:CFBContainer*/ {\n\tvar o/*:CFBContainer*/ = ({}/*:any*/);\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBytes*/, opts/*:?any*/)/*:CFBEntry*/ {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath/*:string*/ = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2}/*:any*/);\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\n\t/*:: if(!file) throw new Error(\"unreachable\"); */\n\tfile.content = (content/*:any*/);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nvar _fs;\nfunction set_fs(fs) { _fs = fs; }\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tif(typeof Deno !== 'undefined') {\n\t\t/* in this spot, it's safe to assume typed arrays and TextEncoder/TextDecoder exist */\n\t\tif(enc && typeof payload == \"string\") switch(enc) {\n\t\t\tcase \"utf8\": payload = new TextEncoder(enc).encode(payload); break;\n\t\t\tcase \"binary\": payload = s2ab(payload); break;\n\t\t\t/* TODO: binary equivalent */\n\t\t\tdefault: throw new Error(\"Unsupported encoding \" + enc);\n\t\t}\n\t\treturn Deno.writeFileSync(fname, payload);\n\t}\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\n\t/*:: declare var IE_SaveFile: any; */\n\tif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\n\t\t/*:: declare var navigator: any; */\n\t\tif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n\t\t/*:: declare var saveAs: any; */\n\t\tif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\n\t\t\t/*:: declare var chrome: any; */\n\t\t\tif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true });\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\t\t\t\ta.download = fname; a.href = url; document.body.appendChild(a); a.click();\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */ document.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t} else if(typeof URL !== 'undefined' && !URL.createObjectURL && typeof chrome === 'object') {\n\t\t\t/* manifest v3 extensions -- no URL.createObjectURL */\n\t\t\tvar b64 = \"data:application/octet-stream;base64,\" + Base64_encode_arr(new Uint8Array(blobify(data)));\n\t\t\treturn chrome.downloads.download({ url: b64, filename: fname, saveAs: true });\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || e.message.indexOf(\"onstruct\") == -1) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path/*:string*/) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\tif(typeof Deno !== 'undefined') return Deno.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || e.message.indexOf(\"onstruct\") == -1) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o/*:any*/)/*:Array*/ {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj/*:any*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj/*:any*/)/*:EvertNumType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj/*:any*/)/*:EvertArrType*/ {\n\tvar o/*:EvertArrType*/ = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar dnthresh = /*#__PURE__*/Date.UTC(1899, 11, 30, 0, 0, 0); // -2209161600000\nvar dnthresh1 = /*#__PURE__*/Date.UTC(1899, 11, 31, 0, 0, 0); // -2209075200000\nvar dnthresh2 = /*#__PURE__*/Date.UTC(1904, 0, 1, 0, 0, 0); // -2209075200000\nfunction datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = /*#__PURE__*/v.getTime();\n\tvar res = (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n\tif(date1904) { res -= 1462; return res < -1402 ? res - 1 : res; }\n\treturn res < 60 ? res - 1 : res;\n}\nfunction numdate(v/*:number*/)/*:Date|number*/ {\n\tif(v >= 60 && v < 61) return v;\n\tvar out = new Date();\n\tout.setTime((v>60 ? v : (v+1)) * 24 * 60 * 60 * 1000 + dnthresh);\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\n/* Blame https://bugs.chromium.org/p/v8/issues/detail?id=7863 for the regexide */\nvar pdre1 = /^(\\d+):(\\d+)(:\\d+)?(\\.\\d+)?$/; // HH:MM[:SS[.UUU]]\nvar pdre2 = /^(\\d+)-(\\d+)-(\\d+)$/; // YYYY-mm-dd\nvar pdre3 = /^(\\d+)-(\\d+)-(\\d+)[T ](\\d+):(\\d+)(:\\d+)?(\\.\\d+)?$/; // YYYY-mm-dd(T or space)HH:MM[:SS[.UUU]], sans \"Z\"\n/* parses a date string as a UTC date */\nfunction parseDate(str/*:string*/, date1904/*:boolean*/)/*:Date*/ {\n\tif(str instanceof Date) return str;\n\tvar m = str.match(pdre1);\n\tif(m) return new Date((date1904 ? dnthresh2 : dnthresh1) + ((parseInt(m[1], 10)*60 + parseInt(m[2], 10))*60 + (m[3] ? parseInt(m[3].slice(1), 10) : 0))*1000 + (m[4] ? parseInt((m[4]+\"000\").slice(1,4), 10) : 0));\n\tm = str.match(pdre2);\n\tif(m) return new Date(Date.UTC(+m[1], +m[2]-1, +m[3], 0, 0, 0, 0));\n\t/* TODO: 1900-02-29T00:00:00.000 should return a flag to treat as a date code (affects xlml) */\n\tm = str.match(pdre3);\n\tif(m) return new Date(Date.UTC(+m[1], +m[2]-1, +m[3], +m[4], +m[5], ((m[6] && parseInt(m[6].slice(1), 10))|| 0), ((m[7] && parseInt((m[7] + \"0000\").slice(1,4), 10))||0)));\n\tvar d = new Date(str);\n\treturn d;\n}\n\nfunction cc2str(arr/*:Array*/, debomit)/*:string*/ {\n\tif(has_buf && Buffer.isBuffer(arr)) {\n\t\tif(debomit && buf_utf16le) {\n\t\t\t// TODO: temporary patch\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(arr.slice(2).toString(\"utf16le\"));\n\t\t\tif(arr[1] == 0xFE && arr[2] == 0xFF) return utf8write(utf16beread(arr.slice(2).toString(\"binary\")));\n\t\t}\n\t\treturn arr.toString(\"binary\");\n\t}\n\n\tif(typeof TextDecoder !== \"undefined\") try {\n\t\tif(debomit) {\n\t\t\tif(arr[0] == 0xFF && arr[1] == 0xFE) return utf8write(new TextDecoder(\"utf-16le\").decode(arr.slice(2)));\n\t\t\tif(arr[0] == 0xFE && arr[1] == 0xFF) return utf8write(new TextDecoder(\"utf-16be\").decode(arr.slice(2)));\n\t\t}\n\t\tvar rev = {\n\t\t\t\"\\u20ac\": \"\\x80\", \"\\u201a\": \"\\x82\", \"\\u0192\": \"\\x83\", \"\\u201e\": \"\\x84\",\n\t\t\t\"\\u2026\": \"\\x85\", \"\\u2020\": \"\\x86\", \"\\u2021\": \"\\x87\", \"\\u02c6\": \"\\x88\",\n\t\t\t\"\\u2030\": \"\\x89\", \"\\u0160\": \"\\x8a\", \"\\u2039\": \"\\x8b\", \"\\u0152\": \"\\x8c\",\n\t\t\t\"\\u017d\": \"\\x8e\", \"\\u2018\": \"\\x91\", \"\\u2019\": \"\\x92\", \"\\u201c\": \"\\x93\",\n\t\t\t\"\\u201d\": \"\\x94\", \"\\u2022\": \"\\x95\", \"\\u2013\": \"\\x96\", \"\\u2014\": \"\\x97\",\n\t\t\t\"\\u02dc\": \"\\x98\", \"\\u2122\": \"\\x99\", \"\\u0161\": \"\\x9a\", \"\\u203a\": \"\\x9b\",\n\t\t\t\"\\u0153\": \"\\x9c\", \"\\u017e\": \"\\x9e\", \"\\u0178\": \"\\x9f\"\n\t\t};\n\t\tif(Array.isArray(arr)) arr = new Uint8Array(arr);\n\t\treturn new TextDecoder(\"latin1\").decode(arr).replace(/[€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ]/g, function(c) { return rev[c] || c; });\n\t} catch(e) {}\n\n\tvar o = [], i = 0;\n\t// this cascade is for the browsers and runtimes of antiquity (and for modern runtimes that lack TextEncoder)\n\ttry {\n\t\tfor(i = 0; i < arr.length - 65536; i+=65536) o.push(String.fromCharCode.apply(0, arr.slice(i, i + 65536)));\n\t\to.push(String.fromCharCode.apply(0, arr.slice(i)));\n\t} catch(e) { try {\n\t\t\tfor(; i < arr.length - 16384; i+=16384) o.push(String.fromCharCode.apply(0, arr.slice(i, i + 16384)));\n\t\t\to.push(String.fromCharCode.apply(0, arr.slice(i)));\n\t\t} catch(e) {\n\t\t\tfor(; i != arr.length; ++i) o.push(String.fromCharCode(arr[i]));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction dup(o/*:any*/)/*:any*/ {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s/*:string*/)/*:number*/ {\n\tvar v/*:number*/ = Number(s);\n\tif(!isNaN(v)) return isFinite(v) ? v : NaN;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(]([^()]*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\n\n/* NOTE: Chrome rejects bare times like 1:23 PM */\nvar FDRE1 = /^(0?\\d|1[0-2])(?:|:([0-5]?\\d)(?:|(\\.\\d+)(?:|:([0-5]?\\d))|:([0-5]?\\d)(|\\.\\d+)))\\s+([ap])m?$/;\nvar FDRE2 = /^([01]?\\d|2[0-3])(?:|:([0-5]?\\d)(?:|(\\.\\d+)(?:|:([0-5]?\\d))|:([0-5]?\\d)(|\\.\\d+)))$/;\nvar FDISO = /^(\\d+)-(\\d+)-(\\d+)[T ](\\d+):(\\d+)(:\\d+)(\\.\\d+)?[Z]?$/; // YYYY-mm-dd(T or space)HH:MM:SS[.UUU][Z]\n\n/* TODO: 1904 adjustment */\nvar utc_append_works = new Date(\"6/9/69 00:00 UTC\").valueOf() == -17798400000;\nfunction fuzzytime1(M) /*:Date*/ {\n\tif(!M[2]) return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), 0, 0, 0));\n\tif(M[3]) {\n\t\t\tif(M[4]) return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], +M[4], parseFloat(M[3])*1000));\n\t\t\telse return new Date(Date.UTC(1899,11,31,(M[7] == \"p\" ? 12 : 0), +M[1], +M[2], parseFloat(M[3])*1000));\n\t}\n\telse if(M[5]) return new Date(Date.UTC(1899,11,31, (+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1000 : 0));\n\telse return new Date(Date.UTC(1899,11,31,(+M[1]%12) + (M[7] == \"p\" ? 12 : 0), +M[2], 0, 0));\n}\nfunction fuzzytime2(M) /*:Date*/ {\n\tif(!M[2]) return new Date(Date.UTC(1899,11,31,+M[1], 0, 0, 0));\n\tif(M[3]) {\n\t\t\tif(M[4]) return new Date(Date.UTC(1899,11,31,+M[1], +M[2], +M[4], parseFloat(M[3])*1000));\n\t\t\telse return new Date(Date.UTC(1899,11,31,0, +M[1], +M[2], parseFloat(M[3])*1000));\n\t}\n\telse if(M[5]) return new Date(Date.UTC(1899,11,31, +M[1], +M[2], +M[5], M[6] ? parseFloat(M[6]) * 1000 : 0));\n\telse return new Date(Date.UTC(1899,11,31,+M[1], +M[2], 0, 0));\n}\nvar lower_months = ['january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'];\nfunction fuzzydate(s/*:string*/)/*:Date*/ {\n\t// See issue 2863 -- this is technically not supported in Excel but is otherwise useful\n\tif(FDISO.test(s)) return s.indexOf(\"Z\") == -1 ? local_to_utc(new Date(s)) : new Date(s);\n\tvar lower = s.toLowerCase();\n\tvar lnos = lower.replace(/\\s+/g, \" \").trim();\n\tvar M = lnos.match(FDRE1);\n\tif(M) return fuzzytime1(M);\n\tM = lnos.match(FDRE2);\n\tif(M) return fuzzytime2(M);\n\tM = lnos.match(pdre3);\n\tif(M) return new Date(Date.UTC(+M[1], +M[2]-1, +M[3], +M[4], +M[5], ((M[6] && parseInt(M[6].slice(1), 10))|| 0), ((M[7] && parseInt((M[7] + \"0000\").slice(1,4), 10))||0)));\n\tvar o = new Date(utc_append_works && s.indexOf(\"UTC\") == -1 ? s + \" UTC\": s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tif(lower.match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) {\n\t\tlower = lower.replace(/[^a-z]/g,\"\").replace(/([^a-z]|^)[ap]m?([^a-z]|$)/,\"\");\n\t\tif(lower.length > 3 && lower_months.indexOf(lower) == -1) return n;\n\t} else if(lower.replace(/[ap]m?/, \"\").match(/[a-z]/)) return n;\n\tif(y < 0 || y > 8099 || s.match(/[^-0-9:,\\/\\\\\\ ]/)) return n;\n\treturn o;\n}\n\nvar split_regex = /*#__PURE__*/(function() {\n\tvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\n\treturn function split_regex(str/*:string*/, re, def/*:string*/)/*:Array*/ {\n\t\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\t\tvar p = str.split(re), o = [p[0]];\n\t\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\t\treturn o;\n\t};\n})();\n\nfunction utc_to_local(utc) {\n\treturn new Date(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate(), utc.getUTCHours(), utc.getUTCMinutes(), utc.getUTCSeconds(), utc.getUTCMilliseconds());\n}\nfunction local_to_utc(local) {\n\treturn new Date(Date.UTC(local.getFullYear(), local.getMonth(), local.getDate(), local.getHours(), local.getMinutes(), local.getSeconds(), local.getMilliseconds()));\n}\n\nfunction remove_doctype(str) {\n\tvar preamble = str.slice(0, 1024);\n\tvar si = preamble.indexOf(\"/g) --> str_match_ng(str, \"\") */\nfunction str_match_ng(str, s, e) {\n var out = [];\n\n var si = str.indexOf(s);\n while(si > -1) {\n var ei = str.indexOf(e, si + s.length);\n\t\tif(ei == -1) break;\n\n\t\tout.push(str.slice(si, ei + e.length));\n\t\tsi = str.indexOf(s, ei + e.length);\n\t}\n\n return out.length > 0 ? out : null;\n}\n\n/* str.replace(//g, \"\") --> str_remove_ng(str, \"\") */\nfunction str_remove_ng(str, s, e) {\n var out = [], last = 0;\n\n var si = str.indexOf(s);\n\tif(si == -1) return str;\n while(si > -1) {\n\t\tout.push(str.slice(last, si));\n var ei = str.indexOf(e, si + s.length);\n\t\tif(ei == -1) break;\n\n\t\tif((si = str.indexOf(s, (last = ei + e.length))) == -1) out.push(str.slice(last));\n\t}\n\n return out.join(\"\");\n}\n\n/* str.match(/]*?>([\\s\\S]*?)/) --> str_match_xml(str, \"tag\") */\nvar xml_boundary = { \" \": 1, \"\\t\": 1, \"\\r\": 1, \"\\n\": 1, \">\": 1 };\nfunction str_match_xml(str, tag) {\n\tvar si = str.indexOf('<' + tag), w = tag.length + 1, L = str.length;\n\twhile(si >= 0 && si <= L - w && !xml_boundary[str.charAt(si + w)]) si = str.indexOf('<' + tag, si+1);\n\tif(si === -1) return null;\n\tvar sf = str.indexOf(\">\", si + tag.length);\n\tif(sf === -1) return null;\n\tvar et = \"\";\n\tvar ei = str.indexOf(et, sf);\n\tif(ei == -1) return null;\n\treturn [str.slice(si, ei + et.length), str.slice(sf + 1, ei)];\n}\n\n/* str.match(/<(?:\\w+:)?tag\\b[^<>]*?>([\\s\\S]*?)<\\/(?:\\w+:)?tag>/) --> str_match_xml(str, \"tag\") */\nvar str_match_xml_ns = /*#__PURE__*/(function() {\n\tvar str_match_xml_ns_cache = {};\n\treturn function str_match_xml_ns(str, tag) {\n\t\tvar res = str_match_xml_ns_cache[tag];\n\t\tif(!res) str_match_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<(?:\\\\w+:)?'+tag+'\\\\b[^<>]*>', \"g\"),\n\t\t\tnew RegExp('', \"g\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m = res[0].exec(str);\n\t\tif(!m) return null;\n\t\tvar si = m.index;\n\t\tvar sf = res[0].lastIndex;\n\t\tres[1].lastIndex = res[0].lastIndex;\n\t\tm = res[1].exec(str);\n\t\tif(!m) return null;\n\t\tvar ei = m.index;\n\t\tvar ef = res[1].lastIndex;\n\t\treturn [str.slice(si, ef), str.slice(sf, ei)];\n\t};\n})();\n\n/* str.match(/<(?:\\w+:)?tag\\b[^<>]*?>([\\s\\S]*?)<\\/(?:\\w+:)?tag>/g) --> str_match_xml_ns_g(str, \"tag\") */\nvar str_match_xml_ns_g = /*#__PURE__*/(function() {\n\tvar str_match_xml_ns_cache = {};\n\treturn function str_match_xml_ns(str, tag) {\n\t\tvar out = [];\n\t\tvar res = str_match_xml_ns_cache[tag];\n\t\tif(!res) str_match_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<(?:\\\\w+:)?'+tag+'\\\\b[^<>]*>', \"g\"),\n\t\t\tnew RegExp('', \"g\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m;\n\t\twhile((m = res[0].exec(str))) {\n\t\t\tvar si = m.index;\n\t\t\tres[1].lastIndex = res[0].lastIndex;\n\t\t\tm = res[1].exec(str);\n\t\t\tif(!m) return null;\n\t\t\tvar ef = res[1].lastIndex;\n\t\t\tout.push(str.slice(si, ef));\n\t\t\tres[0].lastIndex = res[1].lastIndex;\n\t\t}\n\t\treturn out.length == 0 ? null : out;\n\t};\n})();\nvar str_remove_xml_ns_g = /*#__PURE__*/(function() {\n\tvar str_remove_xml_ns_cache = {};\n\treturn function str_remove_xml_ns_g(str, tag) {\n\t\tvar out = [];\n\t\tvar res = str_remove_xml_ns_cache[tag];\n\t\tif(!res) str_remove_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<(?:\\\\w+:)?'+tag+'\\\\b[^<>]*>', \"g\"),\n\t\t\tnew RegExp('', \"g\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m;\n\t\tvar si = 0, ef = 0;\n\t\twhile((m = res[0].exec(str))) {\n\t\t\tsi = m.index;\n\t\t\tout.push(str.slice(ef, si));\n\t\t\tef = si;\n\t\t\tres[1].lastIndex = res[0].lastIndex;\n\t\t\tm = res[1].exec(str);\n\t\t\tif(!m) return null;\n\t\t\tef = res[1].lastIndex;\n\t\t\tres[0].lastIndex = res[1].lastIndex;\n\t\t}\n\t\tout.push(str.slice(ef));\n\t\treturn out.length == 0 ? \"\" : out.join(\"\");\n\t};\n})();\n\n/* str.match(/<(?:\\w+:)?tag\\b[^>]*?>([\\s\\S]*?)<\\/(?:\\w+:)?tag>/gi) --> str_match_xml_ns_ig(str, \"tag\") */\nvar str_match_xml_ig = /*#__PURE__*/(function() {\n\tvar str_match_xml_ns_cache = {};\n\treturn function str_match_xml_ns(str, tag) {\n\t\tvar out = [];\n\t\tvar res = str_match_xml_ns_cache[tag];\n\t\tif(!res) str_match_xml_ns_cache[tag] = res = [\n\t\t\tnew RegExp('<'+tag+'\\\\b[^<>]*>', \"ig\"),\n\t\t\tnew RegExp('', \"ig\")\n\t\t];\n\t\tres[0].lastIndex = res[1].lastIndex = 0;\n\t\tvar m;\n\t\twhile((m = res[0].exec(str))) {\n\t\t\tvar si = m.index;\n\t\t\tres[1].lastIndex = res[0].lastIndex;\n\t\t\tm = res[1].exec(str);\n\t\t\tif(!m) return null;\n\t\t\tvar ef = res[1].lastIndex;\n\t\t\tout.push(str.slice(si, ef));\n\t\t\tres[0].lastIndex = res[1].lastIndex;\n\t\t}\n\t\treturn out.length == 0 ? null : out;\n\t};\n})();\nfunction getdatastr(data)/*:?string*/ {\n\tif(!data) return null;\n\tif(data.content && data.type) return cc2str(data.content, true);\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file/*:string*/) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase().replace(/[\\/]/g, '\\\\'), g = f.replace(/\\\\/g,'\\/');\n\tfor(var i=0; i\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex1=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?<>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\"<>\\s=]+))*\\s*[\\/\\?]?>/mg, tagregex2 = /<[^<>]*>/g;\nvar tagregex = /*#__PURE__*/XML_HEADER.match(tagregex1) ? tagregex1 : tagregex2;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {\n\tvar z = ({}/*:any*/);\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i].slice(1);\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'"': '\"',\n\t''': \"'\",\n\t'>': '>',\n\t'<': '<',\n\t'&': '&'\n};\nvar rencoding = /*#__PURE__*/evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml/*:StringConv*/ = /*#__PURE__*/(function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\tfunction raw_unescapexml(text/*:string*/)/*:string*/ {\n\t\tvar s = text + '', i = s.indexOf(\"-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn raw_unescapexml(s.slice(0, i)) + s.slice(i+9,j) + raw_unescapexml(s.slice(j+3));\n\t}\n\treturn function unescapexml(text/*:string*/, xlsx/*:boolean*/) {\n\t\tvar out = raw_unescapexml(text);\n\t\treturn xlsx ? out.replace(/\\r\\n/g, \"\\n\") : out;\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f\\uFFFE-\\uFFFF]/g;\nfunction escapexml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"
\").replace(htmlcharegex,function(s) { return \"&#x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"&#x\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr/*:StringConv*/ = /*#__PURE__*/(function() {\n\tvar entregex = /&#(\\d+);/g;\n\tfunction entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str/*:string*/)/*:string*/ { return str.replace(entregex,entrepl); };\n})();\nfunction xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\ \"); }\n\n/* note: xsd:boolean valid values: true / 1 / false / 0 */\nfunction parsexmlbool(value/*:any*/)/*:boolean*/ {\n\tswitch(value) {\n\t\tcase 1: case true: case '1': case 'true': return true;\n\t\tcase 0: case false: case '0': case 'false': return false;\n\t\t//default: throw new Error(\"Invalid xsd:boolean \" + value);\n\t}\n\treturn false;\n}\n\nfunction utf8reada(orig/*:string*/)/*:string*/ {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n}\n\nfunction utf8readb(data) {\n\tvar out = new_raw_buf(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\tfor(i = 0; i < data.length; i+=j) {\n\t\tj = 1;\n\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\telse { j = 4;\n\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t}\n\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t}\n\treturn out.slice(0,k).toString('ucs2');\n}\n\nfunction utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); }\n\nvar utf8corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\nvar utf8read = has_buf && (/*#__PURE__*/utf8readc(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readc || /*#__PURE__*/utf8readb(utf8corpus) == /*#__PURE__*/utf8reada(utf8corpus) && utf8readb) || utf8reada;\n\nvar utf8write/*:StringConv*/ = has_buf ? function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); } : function(orig/*:string*/)/*:string*/ {\n\tvar out/*:Array*/ = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\nvar htmldecode/*:{(s:string):string}*/ = /*#__PURE__*/(function() {\n\tvar entities/*:Array<[RegExp, string]>*/ = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']\n\t].map(function(x/*:[string, string]*/) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str/*:string*/)/*:string*/ {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/(^|[^\\t\\n\\r ])[\\t\\n\\r ]+$/,\"$1\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\b\\s+ tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^<>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^<\"'>]*)>([\\s\\S]*)*/ {\n\tvar h = parsexmltag(data);\n\n\tvar matches/*:Array*/ = str_match_xml_ns_g(data, h.baseType)||[];\n\tvar res/*:Array*/ = [];\n\tif(matches.length != h.size) {\n\t\tif(opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n\t\treturn res;\n\t}\n\tmatches.forEach(function(x/*:string*/) {\n\t\tvar v = x.replace(vtvregex,\"\").match(vtmregex);\n\t\tif(v) res.push({v:utf8read(v[2]), t:v[1]});\n\t});\n\treturn res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\nfunction writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f + (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + ''; }\n\nfunction wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '';}\n\nfunction write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx/*:?boolean*/)/*:string*/ {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/"/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nfunction xlml_normalize(d)/*:string*/ {\n\tif(has_buf &&/*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n/* UOS uses CJK in tags, ODS uses invalid XML */\nvar xlmlregex = /<([\\/]?)([^\\s?>:\\/\"]+)(?:\\s+[^<>=?\"'\\s]+=\"[^\"]*?\")*\\s*[\\/]?>/mg;\n\nvar XMLNS = ({\n\tCORE_PROPS: 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties',\n\tCUST_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\",\n\tEXT_PROPS: \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\",\n\tCT: 'http://schemas.openxmlformats.org/package/2006/content-types',\n\tRELS: 'http://schemas.openxmlformats.org/package/2006/relationships',\n\tTCMNT: 'http://schemas.microsoft.com/office/spreadsheetml/2018/threadedcomments',\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n}/*:any*/);\n\nvar XMLNS_main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o': 'urn:schemas-microsoft-com:office:office',\n\t'x': 'urn:schemas-microsoft-com:office:excel',\n\t'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv': 'http://macVmlSchemaUri',\n\t'v': 'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n}/*:any*/);\nfunction read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar ___toBuffer = function(bufs/*:Array >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0].map(function(x) { return Buffer.isBuffer(x) ? x : Buffer_from(x); })) : ___toBuffer(bufs);} : ___toBuffer;\n\nvar ___utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { var ss/*:Array*/=[]; for(var i=s; i*/=[]; for(var i=s; i 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpstr = ___lpstr;\n\nvar ___cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __cpstr = ___cpstr;\n\nvar ___lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar __lpwstr = ___lpwstr;\n\nvar ___lpp4 = function lpp4_(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __lpp4 = ___lpp4;\n\nvar ___8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = ___8lpp4;\n\nvar ___double = function(b/*:RawBytes|CFBlob*/, idx/*:number*/) { return read_double_le(b, idx);};\nvar __double = ___double;\n\nvar is_buf = function is_buf_a(a) { return Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n\nif(has_buf/*:: && typeof Buffer !== 'undefined'*/) {\n\t__lpstr = function lpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/ || !buf_utf16le) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a) || (typeof Uint8Array !== \"undefined\" && a instanceof Uint8Array); };\n}\n\n/* from js-xls */\nfunction cpdoit() {\n\t__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return $cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? $cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\nif(typeof $cptable !== 'undefined') cpdoit();\n\nvar __readUInt8 = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx]; };\nvar __readUInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {\n\tvar o=\"\", oI/*:: :number = 0*/, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this) && buf_utf16le) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof $cptable !== 'undefined') o = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 + __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 + __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof $cptable !== 'undefined') {\n\t\t\t\to = $cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/ {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\n\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\tfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs' || f == 'cpstr') {\n\t\tif(typeof $cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cpp = $cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cpp[0];\n\t\t\t}\n\t\t\tsize = val.length;\n\t\t} else if(typeof $cptable !== 'undefined' && f == 'cpstr') {\n\t\t\tcpp = $cptable.utils.encode(current_codepage, val);\n\t\t\t/* replace null bytes with _ when relevant */\n if(cpp.length == val.length) for(i = 0; i < val.length; ++i) if(cpp[i] == 0 && val.charCodeAt(i) != 0) cpp[i] = 0x5F;\n if(cpp.length == 2 * val.length) for(i = 0; i < val.length; ++i) if(cpp[2*i] == 0 && cpp[2*i+1] == 0 && val.charCodeAt(i) != 0) cpp[2*i] = 0x5F;\n\t\t\tfor(i = 0; i < cpp.length; ++i) this[this.l + i] = cpp[i];\n\t\t\tsize = cpp.length;\n\t\t} else {\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t\tsize = val.length;\n\t\t}\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tvar end/*:number*/ = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else /*:: if(typeof val === 'number') */ switch(t) {\n\t\tcase 1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase 3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase 4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase 8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos/*:number*/)/*:void*/ {\n\tblob.l = pos;\n\tblob.read_shift = /*::(*/ReadShift/*:: :any)*/;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += length; }\n\nfunction new_buf(sz/*:number*/)/*:Block*/ {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = R.f && R.f(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array()/*:BufArray*/ {\n\tvar bufs/*:Array*/ = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz/*:number*/)/*:Block*/ {\n\t\tvar o/*:Block*/ = (new_buf(sz)/*:any*/);\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf/*:Block*/ = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\t// workaround for new Buffer(3).slice(0,0) bug in bun 0.1.3\n\t\tif(curbuf.l) {\n\t\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\t}\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz/*:number*/)/*:Block*/ {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn bconcat(bufs);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs }/*:any*/);\n}\n\nfunction write_record(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/) {\n\tvar t/*:number*/ = +type, l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(/*:: length != null &&*/length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/)/*:CellAddress*/ {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts)/*:string*/ {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nfunction decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row/*:number*/)/*:string*/ { return \"\" + (row + 1); }\nfunction fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr/*:string*/)/*:Array*/ { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\nfunction decode_cell(cstr/*:string*/)/*:CellAddress*/ {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\nfunction encode_cell(cell/*:CellAddress*/)/*:string*/ {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range/*:string*/)/*:Range*/ {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\n/*# if only one arg, it is assumed to be a Range. If 2 args, both are cell addresses */\nfunction encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:string*/ {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\n/*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n\t\treturn encode_range(cs.s, cs.e);\n\t}\n/*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\tif(typeof cs !== 'string') cs = encode_cell((cs/*:any*/));\n\tif(typeof ce !== 'string') ce = encode_cell((ce/*:any*/));\n/*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n/*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\treturn cs == ce ? cs : cs + \":\" + ce;\n}\nfunction fix_range(a1/*:string*/)/*:string*/ {\n\tvar s = decode_range(a1);\n\treturn \"$\" + encode_col(s.s.c) + \"$\" + encode_row(s.s.r) + \":$\" + encode_col(s.e.c) + \"$\" + encode_row(s.e.r);\n}\n\n// List of invalid characters needs to be tested further\nfunction formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/.test(sname)) return \"'\" + sname.replace(/'/g, \"''\") + \"'\";\n\treturn sname;\n}\n\nfunction safe_decode_range(range/*:string*/)/*:Range*/ {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || cc != 10) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\t++i;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell/*:Cell*/, v/*:any*/) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF_format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF_format((cell.XF||{}).numFmtId||(q ? 14 : 0), q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(cell.t == \"e\") return BErr[cell.v] || cell.v;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_new(opts) {\n\tvar out = {};\n\tvar o = opts || {};\n\tif(o.dense) out[\"!data\"] = [];\n\treturn out;\n}\n\nfunction sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? (_ws[\"!data\"] != null) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws/*:Worksheet*/ = _ws || ({}/*:any*/);\n\tif(dense && !ws[\"!data\"]) ws[\"!data\"] = [];\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);\n\tif(ws[\"!ref\"]){\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = (ws[\"!ref\"] ? _range.e.r + 1 : 0);\n\t} else {\n\t\trange.s.c = range.e.c = range.s.r = range.e.r = 0;\n\t}\n\tvar row = [], seen = false;\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tvar __R = _R + R, __Rstr = \"\" + (__R + 1);\n\t\t//console.log(\"!!\", R, _R, __R);\n\t\tif(dense) {\n\t\t\tif(!ws[\"!data\"][__R]) ws[\"!data\"][__R] = [];\n\t\t\trow = ws[\"!data\"][__R];\n\t\t}\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell/*:Cell*/ = ({v: data[R][C] }/*:any*/);\n\t\t\tvar __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tseen = true;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) {\n\t\t\t\t\tif(cell.f) cell.t = 'n';\n\t\t\t\t\telse if(o.nullError) { cell.t = 'e'; cell.v = 0; }\n\t\t\t\t\telse if(!o.sheetStubs) continue;\n\t\t\t\t\telse cell.t = 'z';\n\t\t\t\t}\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\t\tif(!o.UTC) cell.v = local_to_utc(cell.v);\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF_format(cell.z, datenum(cell.v, o.date1904)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v, o.date1904); cell.w = SSF_format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(row[__C] && row[__C].z) cell.z = row[__C].z;\n\t\t\t\trow[__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_col(__C) + __Rstr/*:any*/;\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(seen && range.s.c < 10400000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_add_aoa(null, data, opts); }\n\nfunction parse_Int32LE(data) {\n\treturn data.read_shift(4, 'i');\n}\nfunction write_UInt32LE(x/*:number*/, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data/*::, length*/)/*:string*/ {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length/*:number*/)/*:XLString*/ {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str }/*:any*/);\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data)/*:any*/ {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell/*:any*/, o/*:?Block*/) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* Short XLSB Cell does not include column */\nfunction parse_XLSBShortCell(data)/*:any*/ {\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) <<16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c:-1, iStyleRef: iStyleRef };\n}\nfunction write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data)/*:number*/ {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, (b[0] & 0xFC), b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data/*:number*/, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data /*::, length*/)/*:Range*/ {\n\tvar cell/*:Range*/ = ({ s: {}, e: {} }/*:any*/);\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r/*:Range*/, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx/*:string*/) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data/*::, length*/) {\n\tif(data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n\treturn data.read_shift(8, 'f');\n}\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data/*::, length*/) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data/*::, length, opts*/) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m/*:number*/ = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n// Note: some tree shakers cannot handle VT_VECTOR | $CONST, hence extra vars\n//var VT_EMPTY = 0x0000;\n//var VT_NULL = 0x0001;\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003;\n//var VT_R4 = 0x0004;\n//var VT_R8 = 0x0005;\n//var VT_CY = 0x0006;\n//var VT_DATE = 0x0007;\n//var VT_BSTR = 0x0008;\n//var VT_ERROR = 0x000A;\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C;\n//var VT_DECIMAL = 0x000E;\n//var VT_I1 = 0x0010;\n//var VT_UI1 = 0x0011;\n//var VT_UI2 = 0x0012;\nvar VT_UI4 = 0x0013;\n//var VT_I8 = 0x0014;\n//var VT_UI8 = 0x0015;\n//var VT_INT = 0x0016;\n//var VT_UINT = 0x0017;\n//var VT_LPSTR = 0x001E;\n//var VT_LPWSTR = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041;\n//var VT_STREAM = 0x0042;\n//var VT_STORAGE = 0x0043;\n//var VT_STREAMED_Object = 0x0044;\n//var VT_STORED_Object = 0x0045;\n//var VT_BLOB_Object = 0x0046;\nvar VT_CF = 0x0047;\n//var VT_CLSID = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\n//var VT_VECTOR = 0x1000;\nvar VT_VECTOR_VARIANT = 0x100C;\nvar VT_VECTOR_LPSTR = 0x101E;\n//var VT_ARRAY = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n\t0x01: { n: 'CodePage', t: VT_I2 },\n\t0x02: { n: 'Category', t: VT_STRING },\n\t0x03: { n: 'PresentationFormat', t: VT_STRING },\n\t0x04: { n: 'ByteCount', t: VT_I4 },\n\t0x05: { n: 'LineCount', t: VT_I4 },\n\t0x06: { n: 'ParagraphCount', t: VT_I4 },\n\t0x07: { n: 'SlideCount', t: VT_I4 },\n\t0x08: { n: 'NoteCount', t: VT_I4 },\n\t0x09: { n: 'HiddenCount', t: VT_I4 },\n\t0x0a: { n: 'MultimediaClipCount', t: VT_I4 },\n\t0x0b: { n: 'ScaleCrop', t: VT_BOOL },\n\t0x0c: { n: 'HeadingPairs', t: VT_VECTOR_VARIANT /* VT_VECTOR | VT_VARIANT */ },\n\t0x0d: { n: 'TitlesOfParts', t: VT_VECTOR_LPSTR /* VT_VECTOR | VT_LPSTR */ },\n\t0x0e: { n: 'Manager', t: VT_STRING },\n\t0x0f: { n: 'Company', t: VT_STRING },\n\t0x10: { n: 'LinksUpToDate', t: VT_BOOL },\n\t0x11: { n: 'CharacterCount', t: VT_I4 },\n\t0x13: { n: 'SharedDoc', t: VT_BOOL },\n\t0x16: { n: 'HyperlinksChanged', t: VT_BOOL },\n\t0x17: { n: 'AppVersion', t: VT_I4, p: 'version' },\n\t0x18: { n: 'DigSig', t: VT_BLOB },\n\t0x1A: { n: 'ContentType', t: VT_STRING },\n\t0x1B: { n: 'ContentStatus', t: VT_STRING },\n\t0x1C: { n: 'Language', t: VT_STRING },\n\t0x1D: { n: 'Version', t: VT_STRING },\n\t0xFF: {},\n\t/* [MS-OLEPS] 2.18 */\n\t0x80000000: { n: 'Locale', t: VT_UI4 },\n\t0x80000003: { n: 'Behavior', t: VT_UI4 },\n\t0x72627262: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n\t0x01: { n: 'CodePage', t: VT_I2 },\n\t0x02: { n: 'Title', t: VT_STRING },\n\t0x03: { n: 'Subject', t: VT_STRING },\n\t0x04: { n: 'Author', t: VT_STRING },\n\t0x05: { n: 'Keywords', t: VT_STRING },\n\t0x06: { n: 'Comments', t: VT_STRING },\n\t0x07: { n: 'Template', t: VT_STRING },\n\t0x08: { n: 'LastAuthor', t: VT_STRING },\n\t0x09: { n: 'RevNumber', t: VT_STRING },\n\t0x0A: { n: 'EditTime', t: VT_FILETIME },\n\t0x0B: { n: 'LastPrinted', t: VT_FILETIME },\n\t0x0C: { n: 'CreatedDate', t: VT_FILETIME },\n\t0x0D: { n: 'ModifiedDate', t: VT_FILETIME },\n\t0x0E: { n: 'PageCount', t: VT_I4 },\n\t0x0F: { n: 'WordCount', t: VT_I4 },\n\t0x10: { n: 'CharCount', t: VT_I4 },\n\t0x11: { n: 'Thumbnail', t: VT_CF },\n\t0x12: { n: 'Application', t: VT_STRING },\n\t0x13: { n: 'DocSecurity', t: VT_I4 },\n\t0xFF: {},\n\t/* [MS-OLEPS] 2.18 */\n\t0x80000000: { n: 'Locale', t: VT_UI4 },\n\t0x80000003: { n: 'Behavior', t: VT_UI4 },\n\t0x72627262: {}\n};\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n\t0x0001: \"US\", // United States\n\t0x0002: \"CA\", // Canada\n\t0x0003: \"\", // Latin America (except Brazil)\n\t0x0007: \"RU\", // Russia\n\t0x0014: \"EG\", // Egypt\n\t0x001E: \"GR\", // Greece\n\t0x001F: \"NL\", // Netherlands\n\t0x0020: \"BE\", // Belgium\n\t0x0021: \"FR\", // France\n\t0x0022: \"ES\", // Spain\n\t0x0024: \"HU\", // Hungary\n\t0x0027: \"IT\", // Italy\n\t0x0029: \"CH\", // Switzerland\n\t0x002B: \"AT\", // Austria\n\t0x002C: \"GB\", // United Kingdom\n\t0x002D: \"DK\", // Denmark\n\t0x002E: \"SE\", // Sweden\n\t0x002F: \"NO\", // Norway\n\t0x0030: \"PL\", // Poland\n\t0x0031: \"DE\", // Germany\n\t0x0034: \"MX\", // Mexico\n\t0x0037: \"BR\", // Brazil\n\t0x003d: \"AU\", // Australia\n\t0x0040: \"NZ\", // New Zealand\n\t0x0042: \"TH\", // Thailand\n\t0x0051: \"JP\", // Japan\n\t0x0052: \"KR\", // Korea\n\t0x0054: \"VN\", // Viet Nam\n\t0x0056: \"CN\", // China\n\t0x005A: \"TR\", // Turkey\n\t0x0069: \"JS\", // Ramastan\n\t0x00D5: \"DZ\", // Algeria\n\t0x00D8: \"MA\", // Morocco\n\t0x00DA: \"LY\", // Libya\n\t0x015F: \"PT\", // Portugal\n\t0x0162: \"IS\", // Iceland\n\t0x0166: \"FI\", // Finland\n\t0x01A4: \"CZ\", // Czech Republic\n\t0x0376: \"TW\", // Taiwan\n\t0x03C1: \"LB\", // Lebanon\n\t0x03C2: \"JO\", // Jordan\n\t0x03C3: \"SY\", // Syria\n\t0x03C4: \"IQ\", // Iraq\n\t0x03C5: \"KW\", // Kuwait\n\t0x03C6: \"SA\", // Saudi Arabia\n\t0x03CB: \"AE\", // United Arab Emirates\n\t0x03CC: \"IL\", // Israel\n\t0x03CE: \"QA\", // Qatar\n\t0x03D5: \"IR\", // Iran\n\t0xFFFF: \"US\" // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = /*#__PURE__*/ rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0x000000, /* 0x40 icvForeground ?? */\n\t0xFFFFFF, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = /*#__PURE__*/dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n\t0x00: \"#NULL!\",\n\t0x07: \"#DIV/0!\",\n\t0x0F: \"#VALUE!\",\n\t0x17: \"#REF!\",\n\t0x1D: \"#NAME?\",\n\t0x24: \"#NUM!\",\n\t0x2A: \"#N/A\",\n\t0x2B: \"#GETTING_DATA\",\n\t0xFF: \"#WTF?\"\n};\n//var RBErr = evert_num(BErr);\nvar RBErr = {\n\t\"#NULL!\": 0x00,\n\t\"#DIV/0!\": 0x07,\n\t\"#VALUE!\": 0x0F,\n\t\"#REF!\": 0x17,\n\t\"#NAME?\": 0x1D,\n\t\"#NUM!\": 0x24,\n\t\"#N/A\": 0x2A,\n\t\"#GETTING_DATA\": 0x2B,\n\t\"#WTF?\": 0xFF\n};\n\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\n\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary */\n/* 14.2 Part Summary */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.ms-excel.sheet.binary.macroEnabled.main\": \"workbooks\",\n\t\"application/vnd.ms-excel.addin.macroEnabled.main+xml\": \"workbooks\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\": \"sheets\",\n\t\"application/vnd.ms-excel.worksheet\": \"sheets\",\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Chartsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\": \"charts\",\n\t\"application/vnd.ms-excel.chartsheet\": \"charts\",\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.macrosheet+xml\": \"macros\",\n\t\"application/vnd.ms-excel.macrosheet\": \"macros\",\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* Dialogsheet */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\": \"dialogs\",\n\t\"application/vnd.ms-excel.dialogsheet\": \"dialogs\",\n\n\t/* Shared Strings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\": \"strs\",\n\t\"application/vnd.ms-excel.sharedStrings\": \"strs\",\n\n\t/* Styles */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\": \"styles\",\n\t\"application/vnd.ms-excel.styles\": \"styles\",\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* Comments */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\": \"comments\",\n\t\"application/vnd.ms-excel.comments\": \"comments\",\n\t\"application/vnd.ms-excel.threadedcomments+xml\": \"threadedcomments\",\n\t\"application/vnd.ms-excel.person+xml\": \"people\",\n\n\t/* Metadata (Stock/Geography and Dynamic Array) */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"metadata\",\n\t\"application/vnd.ms-excel.sheetMetadata\": \"metadata\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"TODO\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n}/*:any*/);\n\nvar CT_LIST = {\n\tworkbooks: {\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t},\n\tstrs: { /* Shared Strings */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t},\n\tcomments: { /* Comments */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t},\n\tsheets: { /* Worksheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t},\n\tcharts: { /* Chartsheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t},\n\tdialogs: { /* Dialogsheet */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t},\n\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t},\n\tmetadata: { /* Metadata (Stock/Geography and Dynamic Array) */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\",\n\t\txlsb: \"application/vnd.ms-excel.sheetMetadata\"\n\t},\n\tstyles: { /* Styles */\n\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t}\n};\n\nfunction new_ct()/*:any*/ {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], threadedcomments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [], metadata: [], people:[],\n\t\tTODO:[], xmlns: \"\" }/*:any*/);\n}\n\nfunction parse_ct(data/*:?string*/) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase ' 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nfunction write_ct(ct, opts, raw)/*:string*/ {\n\tvar type2ct/*{[string]:Array}*/ = evert_arr(ct2type);\n\n\tvar o/*:Array*/ = [], v;\n\n\tif(!raw) {\n\t\to[o.length] = (XML_HEADER);\n\t\to[o.length] = writextag('Types', null, {\n\t\t\t'xmlns': XMLNS.CT,\n\t\t\t'xmlns:xsd': XMLNS.xsd,\n\t\t\t'xmlns:xsi': XMLNS.xsi\n\t\t});\n\t\to = o.concat([\n\t\t\t['xml', 'application/xml'],\n\t\t\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t\t\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t\t\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t\t\t/* from test files */\n\t\t\t['bmp', 'image/bmp'],\n\t\t\t['png', 'image/png'],\n\t\t\t['gif', 'image/gif'],\n\t\t\t['emf', 'image/x-emf'],\n\t\t\t['wmf', 'image/x-wmf'],\n\t\t\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t\t\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t\t\t['pdf', 'application/pdf'],\n\t\t\t['rels', 'application/vnd.openxmlformats-package.relationships+xml']\n\t\t].map(function(x) {\n\t\t\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n\t\t}));\n\t}\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType] || CT_LIST[w]['xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('threadedcomments');\n\tf3('drawings');\n\tf2('metadata');\n\tf3('people');\n\tif(!raw && o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tCMNT: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\",\n\tCORE_PROPS: \"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\",\n\tEXT_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties',\n\tCUST_PROPS: 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties',\n\tSST: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\",\n\tSTY: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\",\n\tTHEME: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\",\n\tCHART: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\",\n\tCHARTEX: \"http://schemas.microsoft.com/office/2014/relationships/chartEx\",\n\tCS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\",\n\tWS: [\n\t\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n\t],\n\tDS: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\",\n\tMS: \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\",\n\tIMG: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",\n\tDRAW: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",\n\tXLMETA: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sheetMetadata\",\n\tTCMNT: \"http://schemas.microsoft.com/office/2017/10/relationships/threadedComment\",\n\tPEOPLE: \"http://schemas.microsoft.com/office/2017/10/relationships/person\",\n\tCONN: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/connections\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}/*:any*/);\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file/*:string*/)/*:string*/ {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data/*:?string*/, currentFilePath/*:string*/) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nfunction add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/)/*:number*/ {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(!rels['!idx']) rels['!idx'] = 1;\n\tif(rId < 0) for(rId = rels['!idx']; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trels['!idx'] = rId + 1;\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if([RELS.HLINK, RELS.XPATH, RELS.XMISS].indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n var str = xlml_normalize(d);\n var Rn;\n var FEtag;\n while (Rn = xlmlregex.exec(str))\n switch (Rn[3]) {\n case \"manifest\":\n break;\n case \"file-entry\":\n FEtag = parsexmltag(Rn[0], false);\n if (FEtag.path == \"/\" && FEtag.type !== CT_ODS)\n throw new Error(\"This OpenDocument is not a spreadsheet\");\n break;\n case \"encryption-data\":\n case \"algorithm\":\n case \"start-key-generation\":\n case \"key-derivation\":\n throw new Error(\"Unsupported ODS Encryption\");\n default:\n if (opts && opts.WTF)\n throw Rn;\n }\n}\nfunction write_manifest(manifest) {\n var o = [XML_HEADER];\n o.push('\\n');\n o.push(' \\n');\n for (var i = 0; i < manifest.length; ++i)\n o.push(' \\n');\n o.push(\"\");\n return o.join(\"\");\n}\nfunction write_rdf_type(file, res, tag) {\n return [\n ' \\n',\n ' \\n',\n \" \\n\"\n ].join(\"\");\n}\nfunction write_rdf_has(base, file) {\n return [\n ' \\n',\n ' \\n',\n \" \\n\"\n ].join(\"\");\n}\nfunction write_rdf(rdf) {\n var o = [XML_HEADER];\n o.push('\\n');\n for (var i = 0; i != rdf.length; ++i) {\n o.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n o.push(write_rdf_has(\"\", rdf[i][0]));\n }\n o.push(write_rdf_type(\"\", \"Document\", \"pkg\"));\n o.push(\"\");\n return o.join(\"\");\n}\nfunction write_meta_ods(wb, opts) {\n return 'SheetJS ' + XLSX.version + \"\";\n}\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS/*:Array >*/ = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = str_match_xml(data, f[0]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, writextag('cp:coreProperties', null, {\n\t\t//'xmlns': XMLNS.CORE_PROPS,\n\t\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t\t'xmlns:dc': XMLNS.dc,\n\t\t'xmlns:dcterms': XMLNS.dcterms,\n\t\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t\t'xmlns:xsi': XMLNS.xsi\n\t})], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(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);\n\t\tif(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);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS/*:Array >*/ = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\", \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP/*:string|Array>*/, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (str_match_xml_ns(data, f[0])||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = str_match_xml(data, f[0]);\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nfunction write_ext_props(cp/*::, opts*/)/*:string*/ {\n\tvar o/*:Array*/ = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (writextag('Properties', null, {\n\t\t'xmlns': XMLNS.EXT_PROPS,\n\t\t'xmlns:vt': XMLNS.vt\n\t}));\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"\" + escapexml(s) + \"\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nvar custregex = /<[^<>]+>[^<]*/g;\nfunction parse_cust_props(data/*:string*/, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': name = null; break;\n\t\t\tdefault: if (x.indexOf('');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM;\n\nfunction xlml_set_prop(Props, tag/*:string*/, val) {\n\tif(!evert_XLMLDPM) evert_XLMLDPM = evert(XLMLDocPropsMap);\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o/*:Array*/ = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops/*::, opts*/) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o/*:Array*/ = [];\n\tif(Props) keys(Props).forEach(function(k) {\n\t\t/*:: if(!Props) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\n\t\t/*:: if(!Custprops) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time/*:string|Date*/) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad/*:?number*/) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\nfunction parse_VtVecLpwstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) {\n\t\tvar start = blob.l;\n\t\tret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,'');\n\t\tif((blob.l - start) & 0x02) blob.l += 2;\n\t}\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar start = blob.l;\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tif(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2;\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob);\n\t\tcase 0x101E /*VT_VECTOR|VT_LPSTR*/:\n\t\tcase 0x101F /*VT_VECTOR|VT_LPWSTR*/:\n\t\t\treturn t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type/*:number*/, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */ p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\n\t\t\t/*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n\t\t\tp = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tif(Props[i][0] == 0 && Props.length > i+1 && Props[i][1] == Props[i+1][1]) continue; // R9\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)/*:number*/);\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\\u0000])\\u0000+$/,\"$1\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/(^|[^\\u0000])\\u0000+$/,\"$1\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ];\nfunction guess_property_type(val/*:any*/)/*:number*/ {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1 || PseudoPropsPairs.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI/*:: || {}*/)[idx]/*:: || {} */;\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\n\t\t\t\t/*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n\t\t\t\tvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({}/*:any*/);\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier }/*:any*/);\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:string|number]:any}*/, entries2/*:?any*/, clsid2/*:?any*/) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"\" + z.t + \"\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob/*::, length, opts*/) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob/*::, length*/) {\n\tvar cAnti = blob.read_shift(2);\n\tvar preamble = \"\"; while(cAnti-- > 0) preamble += \"../\";\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return preamble + ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn preamble + unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob/*::, length*/) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\nfunction write_HyperlinkString(str/*:string*/, o) {\n\tif(!o) o = new_buf(6 + str.length * 2);\n\to.write_shift(4, 1 + str.length);\n\tfor(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length)/*:Hyperlink*/ {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tif((flags & 0x0002) && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n\tvar out = ({Target:target}/*:any*/);\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tif(Target.slice(0,7) == \"file://\") Target = Target.slice(7);\n\tvar hashidx = Target.indexOf(\"#\");\n\tvar F = hashidx > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\twrite_HyperlinkString(Target, out);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n\t\tout.write_shift(4, 2*(Pretarget.length + 1));\n\t\tfor(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t\tif(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): \"\", out);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length - 3 * P + 1);\n\t\tfor(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction 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]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob, length, opts)/*:Cell*/ {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ret = ({r:rw, c:col, ixfe:0}/*:any*/);\n\tif(opts && opts.biff == 2 || length == 7) {\n\t\t/* TODO: pass back flags */\n\t\tvar flags = blob.read_shift(1);\n\t\tret.ixfe = flags & 0x3F;\n\t\tblob.l += 2;\n\t\t/*\n\t\tvar ifntifmt = blob.read_shift(1);\n\t\tvar ifmt = ifntifmt & 0x3f, ifnt = ifntifmt >> 6;\n\t\tvar flags3 = blob.read_shift(1);\n\t\t*/\n\t} else ret.ixfe = blob.read_shift(2);\n\treturn ret;\n}\nfunction write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r/*:Range*/, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob/*::, length*/) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n\t0x00: parse_FtSkip, /* FtEnd */\n\t0x04: parse_FtSkip, /* FtMacro */\n\t0x05: parse_FtSkip, /* FtButton */\n\t0x06: parse_FtSkip, /* FtGmo */\n\t0x07: parse_FtCf, /* FtCf */\n\t0x08: parse_FtSkip, /* FtPioGrbit */\n\t0x09: parse_FtSkip, /* FtPictFmla */\n\t0x0A: parse_FtSkip, /* FtCbls */\n\t0x0B: parse_FtSkip, /* FtRbo */\n\t0x0C: parse_FtSkip, /* FtSbs */\n\t0x0D: parse_FtNts, /* FtNts */\n\t0x0E: parse_FtSkip, /* FtSbsFmla */\n\t0x0F: parse_FtSkip, /* FtGboData */\n\t0x10: parse_FtSkip, /* FtEdoData */\n\t0x11: parse_FtSkip, /* FtRboData */\n\t0x12: parse_FtSkip, /* FtCblsData */\n\t0x13: parse_FtSkip, /* FtLbsData */\n\t0x14: parse_FtSkip, /* FtCblsFmla */\n\t0x15: parse_FtCmo\n};\nfunction parse_FtArray(blob, length/*::, ot*/) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts[ft] = FtTab[ft](blob, tgt - blob.l);\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb/*:Workbook*/, t/*:number*/, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s/*:string*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar name = \"\";\n\tif(opts.biff == 4) {\n\t\tname = parse_ShortXLUnicodeString(blob, 0, opts);\n\t\tif(name.length === 0) name = \"Sheet1\";\n\t\treturn { name:name };\n\t}\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tname = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length)/*:SST*/ {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs/*:SST*/ = ([]/*:any*/);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\n\t/*::(*/o/*:: :any)*/.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({}/*:any*/);\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1(/*::opts*/) {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o/*:any*/ = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, length, opts);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:number*/ /*::, opts*/) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, length, opts);\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:number*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i/*:number*/, f/*:string*/, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\nfunction write_BIFF2Format(f/*:string*/) {\n\tvar o = new_buf(1 + f.length);\n\to.write_shift(1, f.length);\n\to.write_shift(f.length, f, \"sbcs\");\n\treturn o;\n}\nfunction write_BIFF4Format(f/*:string*/) {\n\tvar o = new_buf(3 + f.length);\n\to.l += 2;\n\to.write_shift(1, f.length);\n\to.write_shift(f.length, f, \"sbcs\");\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\tvar f = 0;\n\tif(data.numFmtId > 0 && b5) f |= 0x0400;\n\to.write_shift(4, f);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\nfunction parse_BIFF2XF(blob/*::, length, opts*/) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(1); blob.l++; o.flags = blob.read_shift(1);\n\to.numFmtId = o.flags & 0x3F; o.flags>>=6;\n\to.fStyle = 0;\n\to.data = {}; // TODO\n\treturn o;\n}\nfunction write_BIFF2XF(xf) {\n\tvar o = new_buf(4);\n\to.l+=2;\n\to.write_shift(1, xf.numFmtId);\n\to.l++;\n\treturn o;\n}\nfunction write_BIFF3XF(xf) {\n\tvar o = new_buf(12);\n\to.l++;\n\to.write_shift(1, xf.numFmtId);\n\to.l += 10;\n\treturn o;\n}\n/* TODO: check other fields */\nvar write_BIFF4XF = write_BIFF3XF;\nfunction parse_BIFF3XF(blob/*::, length, opts*/) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(1); o.numFmtId = blob.read_shift(1); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\to.data = {}; // TODO\n\treturn o;\n}\nfunction parse_BIFF4XF(blob/*::, length, opts*/) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(1); o.numFmtId = blob.read_shift(1); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\to.data = {}; // TODO\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts/*:Array*/) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opts, t/*:string*/) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opts*/) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t}/*:any*/);\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\t/*jshint -W018 */\n\tvar rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\t/*jshint +W018 */\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: legacy record filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\t/* see issue 2907 */\n\tif(!(opts.biff > 8) && (length == blob[blob.l] + (blob[blob.l+1] == 0x03 ? 1 : 0) + 1)) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 */\nfunction parse_NoteSh(blob, length, opts) {\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\tif(opts && (opts.biff < 8)) {\n\t\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\t\tif(row == 0xFFFF || row == -1) return; // TODO: test continuation\n\t\tvar cch = blob.read_shift(2);\n\t\tvar cmnt = blob.read_shift(Math.min(cch,2048), 'cpstr');\n\t\treturn [{r:row, c:col}, cmnt];\n\t}\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\nfunction write_NOTE_BIFF2(text/*:string*/, R/*:number*/, C/*:number*/, len/*?:number*/) {\n\tvar o = new_buf(6 + (len || text.length));\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, len || text.length);\n\to.write_shift(text.length, text, \"sbcs\");\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length)/*:Array*/ {\n\tvar merges/*:Array*/ = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges/*:Array*/) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = {\n0x08: function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n}\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts); // eslint-disable-line no-unused-vars\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob)/*:[string|number, string|number]*/ {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}/*:any*/);\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\nfunction write_ColInfo(col, idx) {\n\tvar o = new_buf(12);\n\to.write_shift(2, idx);\n\to.write_shift(2, idx);\n\to.write_shift(2, col.width * 256);\n\to.write_shift(2, 0);\n\tvar f = 0;\n\tif(col.hidden) f |= 1;\n\to.write_shift(1, f);\n\tf = col.level || 0;\n\to.write_shift(1, f);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n/*:number*/) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\nfunction write_BIFF2Cell(out, r/*:number*/, c/*:number*/, ixfe/*:number*/, ifmt/*:number*/) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(1, ixfe||0/* & 0x3F */);\n\tout.write_shift(1, ifmt||0/* & 0x3F */);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 5) opts.biff = 2;\n\tvar cell = parse_XLSCell(blob, 7, opts);\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 7, opts);\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/, ixfe, ifmt) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c, ixfe||0, ifmt||0);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 7, opts);\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/, ixfe/*:number*/, ifmt/*:number*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c, ixfe||0, ifmt||0);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\nfunction parse_BIFF2BOOLERR(blob, length, opts) {\n\tvar bestart = blob.l + 7;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tblob.l = bestart;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF4SheetInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(4);\n\tvar cch = blob.read_shift(1), name = blob.read_shift(cch, \"sbcs\");\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { flags: flags, name:name };\n}var DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\nvar DBF = /*#__PURE__*/(function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n\t0x01: 437, 0x02: 850,\n\t0x03: 1252, 0x04: 10000,\n\t0x64: 852, 0x65: 866,\n\t0x66: 865, 0x67: 861,\n\t0x68: 895, 0x69: 620,\n\t0x6A: 737, 0x6B: 857,\n\t0x78: 950, 0x79: 949,\n\t0x7A: 936, 0x7B: 932,\n\t0x7C: 874, 0x7D: 1255,\n\t0x7E: 1256, 0x96: 10007,\n\t0x97: 10029, 0x98: 10006,\n\t0xC8: 1250, 0xC9: 1251,\n\t0xCA: 1254, 0xCB: 1253,\n\n\t/* shapefile DBF extension */\n\t0x00: 20127, 0x08: 865,\n\t0x09: 437, 0x0A: 850,\n\t0x0B: 437, 0x0D: 437,\n\t0x0E: 850, 0x0F: 437,\n\t0x10: 850, 0x11: 437,\n\t0x12: 850, 0x13: 932,\n\t0x14: 850, 0x15: 437,\n\t0x16: 850, 0x17: 865,\n\t0x18: 437, 0x19: 437,\n\t0x1A: 850, 0x1B: 437,\n\t0x1C: 863, 0x1D: 850,\n\t0x1F: 852, 0x22: 852,\n\t0x23: 852, 0x24: 860,\n\t0x25: 850, 0x26: 866,\n\t0x37: 850, 0x40: 852,\n\t0x4D: 936, 0x4E: 949,\n\t0x4F: 950, 0x50: 874,\n\t0x57: 1252, 0x58: 1252,\n\t0x59: 1252, 0x6C: 863,\n\t0x86: 737, 0x87: 852,\n\t0x88: 857, 0xCC: 1257,\n\n\t0xFF: 16969\n};\nvar dbf_reverse_map = evert({\n\t0x01: 437, 0x02: 850,\n\t0x03: 1252, 0x04: 10000,\n\t0x64: 852, 0x65: 866,\n\t0x66: 865, 0x67: 861,\n\t0x68: 895, 0x69: 620,\n\t0x6A: 737, 0x6B: 857,\n\t0x78: 950, 0x79: 949,\n\t0x7A: 936, 0x7B: 932,\n\t0x7C: 874, 0x7D: 1255,\n\t0x7E: 1256, 0x96: 10007,\n\t0x97: 10029, 0x98: 10006,\n\t0xC8: 1250, 0xC9: 1251,\n\t0xCA: 1254, 0xCB: 1253,\n\t0x00: 20127\n});\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts)/*:AOA*/ {\n\tvar out/*:AOA*/ = [];\n\tvar d/*:Block*/ = (new_raw_buf(1)/*:any*/);\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64_decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = !!(ft & 0x88);\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: break; // dBASE II\n\t\tcase 0x03: break; // dBASE III\n\t\tcase 0x30: vfp = true; memo = true; break; // VFP\n\t\tcase 0x31: vfp = true; memo = true; break; // VFP with autoincrement\n\t\t// 0x43 dBASE IV SQL table files\n\t\t// 0x63 dBASE IV SQL system files\n\t\tcase 0x83: break; // dBASE III with memo\n\t\tcase 0x8B: break; // dBASE IV with memo\n\t\tcase 0x8C: l7 = true; break; // dBASE Level 7 with memo\n\t\t// case 0xCB dBASE IV SQL table files with memo\n\t\tcase 0xF5: break; // FoxPro 2.x with memo\n\t\t// case 0xFB FoxBASE\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\n\tvar nrow = 0, fpos = 0x0209;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\td.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(nrow > 1048576) nrow = 1e6;\n\n\tif(ft != 0x02) fpos = d.read_shift(2); // header length\n\tvar rlen = d.read_shift(2); // record length\n\n\tvar /*flags = 0,*/ current_cp = opts.codepage || 1252;\n\tif(ft != 0x02) { // 20 reserved bytes\n\t\td.l+=16;\n\t\t/*flags = */d.read_shift(1);\n\t\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t\t/* codepage present in FoxPro and dBASE Level 7 */\n\t\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\t\td.l+=1;\n\n\t\td.l+=2;\n\t}\n\tif(l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n/*:: type DBFField = { name:string; len:number; type:string; } */\n\tvar fields/*:Array*/ = [], field/*:DBFField*/ = ({}/*:any*/);\n\tvar hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0))));\n\tvar ww = l7 ? 32 : 11;\n\twhile(d.l < hend && d[d.l] != 0x0d) {\n\t\tfield = ({}/*:any*/);\n\t\tfield.name = (typeof $cptable !== \"undefined\" ? $cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)) : a2s(d.slice(d.l, d.l + ww))).replace(/[\\u0000\\r\\n][\\S\\s]*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // Double (VFP) / Binary (dBASE L7)\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General (FoxPro and dBASE L7)\n\t\t\tcase 'P': // Picture (FoxPro and dBASE L7)\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase '+': // Autoincrement (dBASE L7 only)\n\t\t\tcase '0': // _NullFlags (VFP only)\n\t\t\tcase '@': // Timestamp (dBASE L7 only)\n\t\t\tcase 'C': // Character (dBASE II)\n\t\t\tcase 'D': // Date (dBASE III)\n\t\t\tcase 'F': // Float (dBASE IV)\n\t\t\tcase 'I': // Long (VFP and dBASE L7)\n\t\t\tcase 'L': // Logical (dBASE II)\n\t\t\tcase 'M': // Memo (dBASE III)\n\t\t\tcase 'N': // Number (dBASE II)\n\t\t\tcase 'O': // Double (dBASE L7 only)\n\t\t\tcase 'T': // Datetime (VFP only)\n\t\t\tcase 'Y': // Currency (VFP only)\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\td.l = fpos;\n\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) {\n\t\t\t// TODO: record marked as deleted -- create a hidden row?\n\t\t\td.l+=rlen;\n\t\t\tcontinue;\n\t\t}\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = typeof $cptable !== \"undefined\" ? $cptable.utils.decode(current_cp, dd) : a2s(dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\t// NOTE: it is conventional to write ' / / ' for empty dates\n\t\t\t\t\tif(s.trim().length) out[R][C] = s.replace(/([^\\s])\\s+$/,\"$1\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) {\n\t\t\t\t\t\tout[R][C] = new Date(Date.UTC(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8), 0, 0, 0, 0));\n\t\t\t\t\t\tif(!(opts && opts.UTC)) { out[R][C] = utc_to_local(out[R][C]); }\n\t\t\t\t\t}\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.trim().toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase '': case '\\x00': case '?': break;\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N':\n\t\t\t\t\ts = s.replace(/\\u0000/g,\"\").trim();\n\t\t\t\t\t// NOTE: dBASE II interprets \" . \" as 0\n\t\t\t\t\tif(s && s != \".\") out[R][C] = +s || 0; break;\n\t\t\t\tcase '@':\n\t\t\t\t\t// NOTE: dBASE specs appear to be incorrect\n\t\t\t\t\tout[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T': {\n\t\t\t\t\tvar hi = dd.read_shift(4), lo = dd.read_shift(4);\n\t\t\t\t\tif(hi == 0 && lo == 0) break;\n\t\t\t\t\tout[R][C] = new Date((hi - 0x253D8C) * 0x5265C00 + lo);\n\t\t\t\t\tif(!(opts && opts.UTC)) out[R][C] = utc_to_local(out[R][C]);\n\t\t\t\t} break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4 + (dd.read_shift(4, 'i')/1e4)*Math.pow(2,32); break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\topts.DBF = fields;\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\tvar ws = aoa_to_sheet(dbf_to_aoa(buf, o), o);\n\tws[\"!cols\"] = o.DBF.map(function(field) { return {\n\t\twch: field.len,\n\t\tDBF: field\n\t};});\n\tdelete o.DBF;\n\treturn ws;\n}\n\nfunction dbf_to_workbook(buf, opts)/*:Workbook*/ {\n\ttry {\n\t\tvar o = sheet_to_workbook(dbf_to_sheet(buf, opts), opts);\n\t\to.bookType = \"dbf\";\n\t\treturn o;\n\t} catch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\tif(!ws[\"!ref\"]) throw new Error(\"Cannot export empty sheet to DBF\");\n\tvar o = opts || {};\n\tvar old_cp = current_codepage;\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa/*:AOA*/ = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1), cols = ws[\"!cols\"] || [];\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(((cols[i]||{}).DBF||{}).name) { headers[i] = cols[i].DBF.name; ++hcnt; continue; }\n\t\tif(headers[i] == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes/*:Array*/ = [];\n\tvar colwidths/*:Array*/ = [];\n\tvar coldecimals/*:Array*/ = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar guess = '', _guess = '', maxlen = 0;\n\t\tvar col/*:Array*/ = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\t/* TODO: cache the values instead of encoding twice */\n\t\t\tmaxlen = Math.max(maxlen, (typeof $cptable !== \"undefined\" && typeof col[j] == \"string\" ? $cptable.utils.encode(current_ansi, col[j]): String(col[j])).length);\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\t//if(guess == 'C') break;\n\t\t}\n\t\tif(maxlen > 250) maxlen = 250;\n\t\t_guess = ((cols[i]||{}).DBF||{}).type;\n\t\t/* TODO: more fine grained control over DBF type resolution */\n\t\tif(_guess == 'C') {\n\t\t\tif(cols[i].DBF.len > maxlen) maxlen = cols[i].DBF.len;\n\t\t}\n\t\tif(guess == 'B' && _guess == 'N') {\n\t\t\tguess = 'N';\n\t\t\tcoldecimals[i] = cols[i].DBF.dec;\n\t\t\tmaxlen = cols[i].DBF.len;\n\t\t}\n\t\tcolwidths[i] = guess == 'C' || _guess == 'N' ? maxlen : (_RLEN[guess] || 0);\n\t\trlen += colwidths[i];\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\tvar cp = +dbf_reverse_map[/*::String(*/current_codepage/*::)*/] || 0x03;\n\th.write_shift(4, 0x00000000 | (cp<<8));\n\tif(dbf_codepage_map[cp] != +o.codepage) {\n\t\tif(o.codepage) console.error(\"DBF Unsupported codepage \" + current_codepage + \", using 1252\");\n\t\tcurrent_codepage = 1252;\n\t}\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\t/* TODO: test how applications handle non-ASCII field names */\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, coldecimals[i] || 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += (colwidths[i] || _RLEN[coltypes[i]] || 0);\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j colwidths[j]) _n = _n.slice(0, colwidths[j]); // addresses decimal > width\n\t\t\t\t\tfor(hcnt=0; hcnt < colwidths[j]-_n.length; ++hcnt) rout.write_shift(1, 0x20);\n\t\t\t\t\trout.write_shift(1, _n, \"sbcs\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(!data[i][j]) rout.write_shift(8, \"00000000\", \"sbcs\");\n\t\t\t\t\telse {\n\t\t\t\t\t\trout.write_shift(4, (\"0000\"+data[i][j].getFullYear()).slice(-4), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+(data[i][j].getMonth()+1)).slice(-2), \"sbcs\");\n\t\t\t\t\t\trout.write_shift(2, (\"00\"+data[i][j].getDate()).slice(-2), \"sbcs\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'C':\n\t\t\t\t\tvar _l = rout.l;\n\t\t\t\t\tvar _s = String(data[i][j] != null ? data[i][j] : \"\").slice(0, colwidths[j]);\n\t\t\t\t\trout.write_shift(1, _s, \"cpstr\");\n\t\t\t\t\t_l += colwidths[j] - rout.l;\n\t\t\t\t\tfor(hcnt=0; hcnt < _l; ++hcnt) rout.write_shift(1, 0x20); break;\n\t\t\t}\n\t\t}\n\t\t// data\n\t}\n\tcurrent_codepage = old_cp;\n\tba.next(1).write_shift(1, 0x1A);\n\treturn ba.end();\n}\n\treturn {\n\t\tto_workbook: dbf_to_workbook,\n\t\tto_sheet: dbf_to_sheet,\n\t\tfrom_sheet: sheet_to_dbf\n\t};\n})();\n\nvar SYLK = /*#__PURE__*/(function() {\n\t/* TODO: stress test sequences */\n\tvar sylk_escapes = ({\n\t\tAA:'À', BA:'Á', CA:'Â', DA:195, HA:'Ä', JA:197,\n\t\tAE:'È', BE:'É', CE:'Ê', HE:'Ë',\n\t\tAI:'Ì', BI:'Í', CI:'Î', HI:'Ï',\n\t\tAO:'Ò', BO:'Ó', CO:'Ô', DO:213, HO:'Ö',\n\t\tAU:'Ù', BU:'Ú', CU:'Û', HU:'Ü',\n\t\tAa:'à', Ba:'á', Ca:'â', Da:227, Ha:'ä', Ja:229,\n\t\tAe:'è', Be:'é', Ce:'ê', He:'ë',\n\t\tAi:'ì', Bi:'í', Ci:'î', Hi:'ï',\n\t\tAo:'ò', Bo:'ó', Co:'ô', Do:245, Ho:'ö',\n\t\tAu:'ù', Bu:'ú', Cu:'û', Hu:'ü',\n\t\tKC:'Ç', Kc:'ç', q:'æ', z:'œ', a:'Æ', j:'Œ',\n\t\tDN:209, Dn:241, Hy:255,\n\t\tS:169, c:170, R:174, \"B \":180,\n\t\t0:176, 1:177, 2:178,\n\t\t3:179, 5:181, 6:182,\n\t\t7:183, Q:185, k:186, b:208, i:216, l:222, s:240, y:248,\n\t\t\"!\":161, '\"':162, \"#\":163, \"(\":164, \"%\":165, \"'\":167, \"H \":168,\n\t\t\"+\":171, \";\":187, \"<\":188, \"=\":189, \">\":190, \"?\":191, \"{\":223\n\t}/*:any*/);\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\").replace(\"{\", \"\\\\{\") + \"|\\\\|)\", \"gm\");\n\ttry {\n\t\tsylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\t} catch(e) {}\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* TODO: evert the escape map */\n\tvar encode_sylk_str = function($$) { return $$.replace(/\\n/g, \"\\x1b :\").replace(/\\r/g, \"\\x1b =\"); };\n\t/* https://oss.sheetjs.com/notes/sylk/ for more details */\n\tfunction sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr/*:AOA*/ = [];\n\t\tvar formats/*:Array*/ = [];\n\t\tvar next_cell_format/*:string|null*/ = null;\n\t\tvar sht = {}, rowinfo/*:Array*/ = [], colinfo/*:Array*/ = [], cw/*:Array*/ = [];\n\t\tvar Mval = 0, j;\n\t\tvar wb = { Workbook: { WBProps: {}, Names: [] } };\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': /* workbook options */\n\t\t\tfor(rj=1; rj= 5 or < 0\n\t\t\t\t\tif(d1904 >= 1 && d1904 <= 4) wb.Workbook.WBProps.date1904 = true;\n\t\t\t\t} break;\n\t\t\t} break;\n\t\t\tcase 'W': break; /* window */\n\t\t\tcase 'P':\n\t\t\t\tswitch(record[1].charAt(0)){\n\t\t\t\t\tcase 'P': formats.push(rstr.slice(3).replace(/;;/g, \";\")); break;\n\t\t\t\t} break;\n\t\t\tcase 'NN': { /* defined name */\n\t\t\t\tvar nn = {Sheet: 0};\n\t\t\t\tfor(rj=1; rj -1 && arr[_R][_C];\n\t\t\t\tif(!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n\t\t\t\tformula = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C});\n\t\t\t}\n\t\t\tif(formula) {\n\t\t\t\tif(!arr[R][C]) arr[R][C] = { t: 'n', f: formula };\n\t\t\t\telse arr[R][C].f = formula;\n\t\t\t}\n\t\t\tif(cmnt) {\n\t\t\t\tif(!arr[R][C]) arr[R][C] = { t: 'z' };\n\t\t\t\tarr[R][C].c = [{a:\"SheetJSYLK\", t: cmnt}];\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 'F': /* Format */\n\t\t\tvar F_seen = 0;\n\t\t\tfor(rj=1; rj 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\t// case 'K': // ??\n\t\t\t\t// case 'E': // ??\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tcolinfo.forEach(function(col) { process_col(col); });\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht, wb];\n\t}\n\n\tfunction sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1], wb = aoasht[2];\n\t\tvar _opts = dup(opts); _opts.date1904 = (((wb||{}).Workbook || {}).WBProps || {}).date1904;\n\t\tvar o = aoa_to_sheet(aoa, _opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\tvar outwb = sheet_to_workbook(o, opts);\n\t\tkeys(wb).forEach(function(k) { outwb[k] = wb[k]; });\n\t\toutwb.bookType = \"sylk\";\n\t\treturn outwb;\n\t}\n\n\tfunction write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || BErr[cell.v] || cell.v; break;\n\t\t\tcase 'd': o += datenum(parseDate(cell.v, date1904), date1904); break;\n\t\t\tcase 's': o += '\"' + (cell.v == null ? \"\" : String(cell.v)).replace(/\"/g,\"\").replace(/;/g, \";;\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cmnt_sylk(cmnt/*:Comment*/, R/*:number*/, C/*:number*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";A\";\n\t\t/* TODO: max length? */\n\t\to += encode_sylk_str(cmnt.map(function(c) { return c.t; }).join(\"\"));\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out/*:Array*/, rows/*:Array*/) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/, wb/*:?WorkBook*/)/*:string*/ {\n\t\tif(!opts) opts = {}; opts._formats = [\"General\"];\n\t\t/* TODO: codepage */\n\t\tvar preamble/*:Array*/ = [\"ID;PSheetJS;N;E\"], o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']||\"A1\"), cell/*:Cell*/;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar RS = \"\\r\\n\";\n\t\tvar d1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\n\t\tvar _lastfmt = \"General\";\n\t\tpreamble.push(\"P;PGeneral\");\n\t\t/* Excel has been inconsistent in comment placement */\n\t\tvar R = r.s.r, C = r.s.c, p = [];\n\t\tif(ws[\"!ref\"]) for(R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tif(dense && !ws[\"!data\"][R]) continue;\n\t\t\tp = [];\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcell = dense ? ws[\"!data\"][R][C] : ws[encode_col(C) + encode_row(R)];\n\t\t\t\tif(!cell || !cell.c) continue;\n\t\t\t\tp.push(write_ws_cmnt_sylk(cell.c, R, C));\n\t\t\t}\n\t\t\tif(p.length) o.push(p.join(RS));\n\t\t}\n\t\tif(ws[\"!ref\"]) for(R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tif(dense && !ws[\"!data\"][R]) continue;\n\t\t\tp = [];\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcell = dense ? ws[\"!data\"][R][C] : ws[encode_col(C) + encode_row(R)];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\tif((cell.z||(cell.t == \"d\" ? table_fmt[14] : \"General\")) != _lastfmt) {\n\t\t\t\t\tvar ifmt = opts._formats.indexOf(cell.z);\n\t\t\t\t\tif(ifmt == -1) { opts._formats.push(cell.z); ifmt = opts._formats.length - 1; preamble.push(\"P;P\" + cell.z.replace(/;/g, \";;\")); }\n\t\t\t\t\tp.push(\"F;P\" + ifmt + \";Y\" + (R+1) + \";X\" + (C+1));\n\t\t\t\t}\n\t\t\t\tp.push(write_ws_cell_sylk(cell, ws, R, C, opts, d1904));\n\t\t\t}\n\t\t\to.push(p.join(RS));\n\t\t}\n\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tif(ws[\"!ref\"]) preamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tpreamble.push(\"O;L;D;B\" + (d1904 ? \";V4\" : \"\") + \";K47;G100 0.001\");\n\n\t\tdelete opts._formats;\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = /*#__PURE__*/(function() {\n\tfunction dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64_decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri] || \"\";\n\t\t\twhile(((data.match(/[\"]/g)||[]).length & 1) && ri < records.length - 1) data += \"\\n\" + records[++ri];\n\t\t\tdata = data.trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) {\n\t\t\t\t\t\tarr[R][C] = parseDate(value);\n\t\t\t\t\t\tif(!(opts && opts.UTC)) { arr[R][C] = utc_to_local(arr[R][C]); }\n\t\t\t\t\t}\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tdata = data.replace(/\"\"/g, '\"');\n\t\t\t\t\tif(DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\t\tvar o = sheet_to_workbook(dif_to_sheet(str, opts), opts);\n\t\to.bookType = \"dif\";\n\t\treturn o;\n\t}\n\n\tfunction make_value(v/*:number*/, s/*:string*/)/*:string*/ { return \"0,\" + String(v) + \"\\r\\n\" + s; }\n\tfunction make_value_str(s/*:string*/)/*:string*/ { return \"1,0\\r\\n\\\"\" + s.replace(/\"/g,'\"\"') + '\"'; }\n\tfunction sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar _DIF_XL = DIF_XL;\n\t\tif(!ws[\"!ref\"]) throw new Error(\"Cannot export empty sheet to DIF\");\n\t\tvar r = safe_decode_range(ws['!ref']);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar o/*:Array*/ = [\n\t\t\t\"TABLE\\r\\n0,1\\r\\n\\\"sheetjs\\\"\\r\\n\",\n\t\t\t\"VECTORS\\r\\n0,\" + (r.e.r - r.s.r + 1) + \"\\r\\n\\\"\\\"\\r\\n\",\n\t\t\t\"TUPLES\\r\\n0,\" + (r.e.c - r.s.c + 1) + \"\\r\\n\\\"\\\"\\r\\n\",\n\t\t\t\"DATA\\r\\n0,0\\r\\n\\\"\\\"\\r\\n\"\n\t\t];\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar row = dense ? ws[\"!data\"][R] : [];\n\t\t\tvar p = \"-1,0\\r\\nBOT\\r\\n\";\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar cell/*:Cell*/ = dense ? (row && row[C]) : ws[encode_cell({r:R,c:C})];\n\t\t\t\tif(cell == null) { p +=(\"1,0\\r\\n\\\"\\\"\\r\\n\"); continue;}\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(_DIF_XL) {\n\t\t\t\t\t\t\tif(cell.w != null) p +=(\"0,\" + cell.w + \"\\r\\nV\");\n\t\t\t\t\t\t\telse if(cell.v != null) p +=(make_value(cell.v, \"V\")); // TODO: should this call SSF_format?\n\t\t\t\t\t\t\telse if(cell.f != null && !cell.F) p +=(make_value_str(\"=\" + cell.f));\n\t\t\t\t\t\t\telse p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif(cell.v == null) p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t\t\t\telse p +=(make_value(cell.v, \"V\"));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\tp +=(cell.v ? make_value(1, \"TRUE\") : make_value(0, \"FALSE\"));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's':\n\t\t\t\t\t\tp +=(make_value_str((!_DIF_XL || isNaN(+cell.v)) ? cell.v : '=\"' + cell.v + '\"'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tif(!cell.w) cell.w = SSF_format(cell.z || table_fmt[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\tif(_DIF_XL) p +=(make_value(cell.w, \"V\"));\n\t\t\t\t\t\telse p +=(make_value_str(cell.w));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: p +=(\"1,0\\r\\n\\\"\\\"\");\n\t\t\t\t}\n\t\t\t\tp += \"\\r\\n\";\n\t\t\t}\n\t\t\to.push(p);\n\t\t}\n\t\treturn o.join(\"\") + \"-1,0\\r\\nEOD\";\n\t}\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = /*#__PURE__*/(function() {\n\tfunction decode(s/*:string*/)/*:string*/ { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s/*:string*/)/*:string*/ { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o/*:Array*/ = [], oo/*:Array*/ = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF_format(cell.z || table_fmt[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = /*#__PURE__*/(function() {\n\tfunction set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:number*/, o/*:any*/) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {\n\t\tvar o = opts || {};\n\t\tvar arr/*:AOA*/ = ([]/*:any*/);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n\t\t0x2C: ',',\n\t\t0x09: \"\\t\",\n\t\t0x3B: ';',\n\t\t0x7C: '|'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n\t\t0x2C: 3,\n\t\t0x09: 2,\n\t\t0x3B: 1,\n\t\t0x7C: 0\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]] || 0x2C;\n\t}\n\n\tfunction dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws/*:Worksheet*/ = ({}/*:any*/);\n\t\tif(o.dense) ws[\"!data\"] = [];\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:0}}/*:any*/);\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t\telse sep = guess_sep(str.slice(0,1024));\n\t\t}\n\t\telse if(o && o.FS) sep = o.FS;\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);\n\t\tvar _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\t/* TODO: fuzzy parsers should pass back assumed number format */\n\t\t\tvar s = str.slice(start, end); if(s.slice(-1) == \"\\r\") s = s.slice(0, -1);\n\t\t\tvar cell = ({}/*:any*/);\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(o.cellText !== false) cell.w = s;\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 's'; cell.f = s.slice(1); cell.v = s; }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; cell.v = v; }\n\t\t\telse if(!isNaN((v = fuzzydate(s)).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || table_fmt[14];\n\t\t\t\tif(_re && s.match(_re)){ var news=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); v = parseDate(news); if(o && o.UTC === false) v = utc_to_local(v); }\n\t\t\t\telse if(o && o.UTC === false) v = utc_to_local(v);\n\t\t\t\telse if(o.cellText !== false && o.dateNF) cell.w = SSF_format(cell.z, v);\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = v; }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(v); }\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1; startcc = str.charCodeAt(start);\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: if(startcc === 0x22) instr = !instr; break;\n\t\t\tcase 0x0d:\n\t\t\t\tif(instr) break;\n\t\t\t\tif(str.charCodeAt(end+1) == 0x0a) ++end;\n\t\t\t\t/* falls through */\n\t\t\tcase sepcc: case 0x0a: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(opts.FS) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64_decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n\t\t\t\telse if(opts.codepage && typeof $cptable !== 'undefined') str = $cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if(opts.type != 'string' && opts.type != 'buffer' && opts.codepage == 65001) str = utf8read(str);\n\t\telse if((opts.type == 'binary') && typeof $cptable !== 'undefined' && opts.codepage) str = $cptable.utils.decode(opts.codepage, $cptable.utils.encode(28591,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar o/*:Array*/ = [];\n\t\tif(!ws[\"!ref\"]) return \"\";\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo/*:Array*/ = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\" \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif((e.message.indexOf(\"SYLK bad record ID\") == -1) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = /*#__PURE__*/(function() {\n\tfunction lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFFFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = R.f && R.f(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d/*:RawData*/, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64_decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\t/* NOTE: this list intentionally starts at 1 */\n\tvar LOTUS_DATE_FMTS = [\n\t\t\"mmmm\",\n\t\t\"dd-mmm-yyyy\",\n\t\t\"dd-mmm\",\n\t\t\"mmm-yyyy\",\n\t\t\"@\", // \"text\"?\n\t\t\"mm/dd\",\n\t\t\"hh:mm:ss AM/PM\", // 7\n\t\t\"hh:mm AM/PM\",\n\t\t\"mm/dd/yyyy\",\n\t\t\"mm/dd\",\n\t\t\"hh:mm:ss\",\n\t\t\"hh:mm\" // 12\n\t];\n\n\tfunction lotus_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ({}/*:any*/), n = \"Sheet1\", next_n = \"\", sidx = 0;\n\t\tvar sheets = {}, snames = [], realnames = [], sdata = [];\n\t\tif(o.dense) sdata = s[\"!data\"] = [];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\t\tvar lastcell = {};\n\n\t\tif(d[4] == 0x51 && d[5] == 0x50 && d[6] == 0x57) return qpw_to_workbook_buf(d, opts);\n\t\tif(d[2] == 0x00) {\n\t\t\tif(d[3] == 0x08 || d[3] == 0x09) {\n\t\t\t\tif(d.length >= 16 && d[14] == 0x05 && d[15] === 0x6c) throw new Error(\"Unsupported Works 3 for Mac file\");\n\t\t\t}\n\t\t}\n\n\t\tif(d[2] == 0x02) {\n\t\t\to.Enum = WK1Enum;\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0x00: /* BOF */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0xFF: /* BOF (works 3+) */\n\t\t\t\t\to.vers = val;\n\t\t\t\t\to.works = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0xCC: if(val) next_n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0xDE: next_n = val; break; /* SHEETNAMELP */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\tif((!o.qpro && !o.works || RT == 0x33) && val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);\n\t\t\t\t\tif(o.works || o.works2) val[1].v = val[1].v.replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif((val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || LOTUS_DATE_FMTS[(val[2] & 0x0F)-1] || table_fmt[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].v = numdate(val[1].v); val[1].t = typeof val[1].v == \"number\" ? 'n' : 'd'; }\n\t\t\t\t\t}\n\n\t\t\t\t\tif(o.qpro) {\n\t\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\t\ts = ({}/*:any*/); if(o.dense) sdata = s[\"!data\"] = [];\n\t\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\t\tsidx = val[3]; n = next_n || \"Sheet\" + (sidx + 1); next_n = \"\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar tmpcell = o.dense ? (sdata[val[0].r]||[])[val[0].c] : s[encode_cell(val[0])];\n\t\t\t\t\tif(tmpcell) {\n\t\t\t\t\t\ttmpcell.t = val[1].t; tmpcell.v = val[1].v;\n\t\t\t\t\t\tif(val[1].z != null) tmpcell.z = val[1].z;\n\t\t\t\t\t\tif(val[1].f != null) tmpcell.f = val[1].f;\n\t\t\t\t\t\tlastcell = tmpcell;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!sdata[val[0].r]) sdata[val[0].r] = [];\n\t\t\t\t\t\tsdata[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tlastcell = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x5405: o.works2 = true; break;\n\t\t\t\tcase 0x5402: {\n\t\t\t\t\t/* TODO: enumerate all extended number formats */\n\t\t\t\t\tif(val == 0x14a1) {\n\t\t\t\t\t\tlastcell.z = \"hh:mm:ss\";\n\t\t\t\t\t\tif(o.cellDates && lastcell.t == \"n\") {\n\t\t\t\t\t\t\tlastcell.v = numdate(lastcell.v); lastcell.t = typeof lastcell.v == \"number\" ? 'n' : 'd';\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t}}, o);\n\t\t} else if(d[2] == 0x1A || d[2] == 0x0E) {\n\t\t\to.Enum = WK3Enum;\n\t\t\tif(d[2] == 0x0E) { o.qpro = true; d.l = 0; }\n\t\t\tlotushopper(d, function(val, R, RT) { switch(RT) {\n\t\t\t\tcase 0xCC: n = val; break; /* SHEETNAMECS */\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tif(val[1].v.charCodeAt(0) < 0x30) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t// TODO: R9 appears to encode control codes this way -- verify against other versions\n\t\t\t\t\tval[1].v = val[1].v.replace(/\\x0F./g, function($$) { return String.fromCharCode($$.charCodeAt(1) - 0x20); }).replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t\ts = ({}/*:any*/); if(o.dense) sdata = s[\"!data\"] = [];\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!sdata[val[0].r]) sdata[val[0].r] = [];\n\t\t\t\t\t\tsdata[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x1B: /* XFORMAT */\n\t\t\t\t\tif(val[0x36b0]) realnames[val[0x36b0][0]] = val[0x36b0][1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0601: /* SHEETINFOQP */\n\t\t\t\t\trealnames[val[0]] = val[1]; if(val[0] == sidx) n = val[1]; break;\n\t\t\t\tdefault: break;\n\t\t\t}}, o);\n\t\t} else throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[next_n || n] = s;\n\t\tsnames.push(next_n || n);\n\t\tif(!realnames.length) return { SheetNames: snames, Sheets: sheets };\n\t\tvar osheets = {}, rnames = [];\n\t\t/* TODO: verify no collisions */\n\t\tfor(var i = 0; i < realnames.length; ++i) if(sheets[snames[i]]) {\n\t\t\trnames.push(realnames[i] || snames[i]);\n\t\t\tosheets[realnames[i]] = sheets[realnames[i]] || sheets[snames[i]];\n\t\t} else {\n\t\t\trnames.push(realnames[i]);\n\t\t\tosheets[realnames[i]] = ({ \"!ref\": \"A1\" });\n\t\t}\n\t\treturn { SheetNames: rnames, Sheets: osheets };\n\t}\n\n\tfunction sheet_to_wk1(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK1 to JS string\");\n\t\tvar ba = buf_array();\n\t\tif(!ws[\"!ref\"]) throw new Error(\"Cannot export empty sheet to WK1\");\n\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tvar cols = [];\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK1(0x0406));\n\t\twrite_biff_rec(ba, 0x06, write_RANGE(range));\n\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\tvar rr = encode_row(R);\n\t\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[cols[C] + rr];\n\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t/* TODO: formula records */\n\t\t\t\tswitch(cell.t) {\n\t\t\t\tcase \"n\":\n\t\t\t\t\tif((cell.v|0)==cell.v && cell.v >= -32768 && cell.v <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, cell));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, cell));\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"d\":\n\t\t\t\t\tvar dc = datenum(cell.v);\n\t\t\t\t\tif((dc|0)==dc && dc >= -32768 && dc <= 32767) write_biff_rec(ba, 0x0d, write_INTEGER(R, C, {t:\"n\", v:dc, z:cell.z || table_fmt[14]}));\n\t\t\t\t\telse write_biff_rec(ba, 0x0e, write_NUMBER(R, C, {t:\"n\", v:dc, z:cell.z || table_fmt[14]}));\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\twrite_biff_rec(ba, 0x0F, write_LABEL(R, C, str.slice(0, 239)));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\tfunction book_to_wk3(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\t\tvar o = opts || {};\n\t\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\t\tif(o.type == \"string\") throw new Error(\"Cannot write WK3 to JS string\");\n\t\tvar ba = buf_array();\n\n\t\twrite_biff_rec(ba, 0x00, write_BOF_WK3(wb));\n\n\t\tfor(var i = 0, cnt = 0; i < wb.SheetNames.length; ++i) if((wb.Sheets[wb.SheetNames[i]] || {})[\"!ref\"]) write_biff_rec(ba, 0x1b, write_XFORMAT_SHEETNAME(wb.SheetNames[i], cnt++));\n\n\t\tvar wsidx = 0;\n\t\tfor(i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\tvar range = safe_decode_range(ws[\"!ref\"]);\n\t\t\tvar dense = ws[\"!data\"] != null;\n\t\t\tvar cols = [];\n\t\t\tvar max_R = Math.min(range.e.r, 8191);\n\t\t\tfor(var R = range.s.r; R <= max_R; ++R) {\n\t\t\t\tvar rr = encode_row(R);\n\t\t\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\t\t\tvar ref = cols[C] + rr;\n\t\t\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\t\t\tif(!cell || cell.t == \"z\") continue;\n\t\t\t\t\t/* TODO: FORMULA19 NUMBER18 records */\n\t\t\t\t\tif(cell.t == \"n\") {\n\t\t\t\t\t\twrite_biff_rec(ba, 0x17, write_NUMBER_17(R, C, wsidx, cell.v));\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar str = format_cell(cell);\n\t\t\t\t\t\t/* TODO: max len? */\n\t\t\t\t\t\twrite_biff_rec(ba, 0x16, write_LABEL_16(R, C, wsidx, str.slice(0, 239)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t++wsidx;\n\t\t}\n\n\t\twrite_biff_rec(ba, 0x01);\n\t\treturn ba.end();\n\t}\n\n\n\tfunction write_BOF_WK1(v/*:number*/) {\n\t\tvar out = new_buf(2);\n\t\tout.write_shift(2, v);\n\t\treturn out;\n\t}\n\n\tfunction write_BOF_WK3(wb/*:Workbook*/) {\n\t\tvar out = new_buf(26);\n\t\tout.write_shift(2, 0x1000);\n\t\tout.write_shift(2, 0x0004);\n\t\tout.write_shift(4, 0x0000);\n\t\tvar rows = 0, cols = 0, wscnt = 0;\n\t\tfor(var i = 0; i < wb.SheetNames.length; ++i) {\n\t\t\tvar name = wb.SheetNames[i];\n\t\t\tvar ws = wb.Sheets[name];\n\t\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\t\t++wscnt;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tif(rows < range.e.r) rows = range.e.r;\n\t\t\tif(cols < range.e.c) cols = range.e.c;\n\t\t}\n\t\tif(rows > 8191) rows = 8191;\n\t\tout.write_shift(2, rows);\n\t\tout.write_shift(1, wscnt);\n\t\tout.write_shift(1, cols);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(2, 0x00);\n\t\tout.write_shift(1, 0x01);\n\t\tout.write_shift(1, 0x02);\n\t\tout.write_shift(4, 0);\n\t\tout.write_shift(4, 0);\n\t\treturn out;\n\t}\n\n\tfunction parse_RANGE(blob, length, opts) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\tif(length == 8 && opts.qpro) {\n\t\t\to.s.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.s.r = blob.read_shift(2);\n\t\t\to.e.c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to.e.r = blob.read_shift(2);\n\t\t\treturn o;\n\t\t}\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(length == 12 && opts.qpro) blob.l += 2;\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\tfunction write_RANGE(range) {\n\t\tvar out = new_buf(8);\n\t\tout.write_shift(2, range.s.c);\n\t\tout.write_shift(2, range.s.r);\n\t\tout.write_shift(2, range.e.c);\n\t\tout.write_shift(2, range.e.r);\n\t\treturn out;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\to[3] = blob.read_shift(1);\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else if(opts.works) { // TODO: verify with more complex works3-4 examples\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t\to[2] = blob.read_shift(2);\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction get_wk1_fmt(cell)/*:number*/ {\n\t\t/* TODO: some fuzzy matching on the number format */\n\t\tif(cell.z && fmt_is_date(cell.z)) {\n\t\t\treturn 0xf0 | (LOTUS_DATE_FMTS.indexOf(cell.z) + 1 || 2);\n\t\t}\n\t\treturn 0xFF;\n\t}\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif((opts.vers & 0xFFFE) == 0x5120) { // WQ1 / WQ2\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL(R, C, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(7 + s.length);\n\t\to.write_shift(1, 0xFF);\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, 0x27); // ??\n\t\tfor(var i = 0; i < o.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\tfunction parse_STRING(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\tfunction write_INTEGER(R, C, cell) {\n\t\tvar o = new_buf(7);\n\t\to.write_shift(1, get_wk1_fmt(cell));\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(2, cell.v, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\tfunction write_NUMBER(R, C, cell) {\n\t\tvar o = new_buf(13);\n\t\to.write_shift(1, get_wk1_fmt(cell));\n\t\to.write_shift(2, C);\n\t\to.write_shift(2, R);\n\t\to.write_shift(8, cell.v, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\twk1_fmla_to_csf(blob.slice(blob.l, blob.l + flen), o);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction wk1_parse_rc(B, V, col) {\n\t\tvar rel = V & 0x8000;\n\t\tV &= ~0x8000;\n\t\tV = (rel ? B : 0) + ((V >= 0x2000) ? V - 0x4000 : V);\n\t\treturn (rel ? \"\" : \"$\") + (col ? encode_col(V) : encode_row(V));\n\t}\n\t/* var oprec = [\n\t\t8, 8, 8, 8, 8, 8, 8, 8, 6, 4, 4, 5, 5, 7, 3, 3,\n\t\t3, 3, 3, 3, 1, 1, 2, 6, 8, 8, 8, 8, 8, 8, 8, 8\n\t]; */\n\t/* TODO: flesh out */\n\tvar FuncTab = {\n\t\t0x1F: [\"NA\", 0],\n\t\t// 0x20: [\"ERR\", 0],\n\t\t0x21: [\"ABS\", 1],\n\t\t0x22: [\"TRUNC\", 1],\n\t\t0x23: [\"SQRT\", 1],\n\t\t0x24: [\"LOG\", 1],\n\t\t0x25: [\"LN\", 1],\n\t\t0x26: [\"PI\", 0],\n\t\t0x27: [\"SIN\", 1],\n\t\t0x28: [\"COS\", 1],\n\t\t0x29: [\"TAN\", 1],\n\t\t0x2A: [\"ATAN2\", 2],\n\t\t0x2B: [\"ATAN\", 1],\n\t\t0x2C: [\"ASIN\", 1],\n\t\t0x2D: [\"ACOS\", 1],\n\t\t0x2E: [\"EXP\", 1],\n\t\t0x2F: [\"MOD\", 2],\n\t\t// 0x30\n\t\t0x31: [\"ISNA\", 1],\n\t\t0x32: [\"ISERR\", 1],\n\t\t0x33: [\"FALSE\", 0],\n\t\t0x34: [\"TRUE\", 0],\n\t\t0x35: [\"RAND\", 0],\n\t\t0x36: [\"DATE\", 3],\n\t\t// 0x37 NOW\n\t\t// 0x38 PMT\n\t\t// 0x39 PV\n\t\t// 0x3A FV\n\t\t// 0x3B IF\n\t\t// 0x3C DAY\n\t\t// 0x3D MONTH\n\t\t// 0x3E YEAR\n\t\t0x3F: [\"ROUND\", 2],\n\t\t0x40: [\"TIME\", 3],\n\t\t// 0x41 HOUR\n\t\t// 0x42 MINUTE\n\t\t// 0x43 SECOND\n\t\t0x44: [\"ISNUMBER\", 1],\n\t\t0x45: [\"ISTEXT\", 1],\n\t\t0x46: [\"LEN\", 1],\n\t\t0x47: [\"VALUE\", 1],\n\t\t// 0x48: [\"FIXED\", ?? 1],\n\t\t0x49: [\"MID\", 3],\n\t\t0x4A: [\"CHAR\", 1],\n\t\t// 0x4B\n\t\t// 0x4C FIND\n\t\t// 0x4D DATEVALUE\n\t\t// 0x4E TIMEVALUE\n\t\t// 0x4F CELL\n\t\t0x50: [\"SUM\", 69],\n\t\t0x51: [\"AVERAGEA\", 69],\n\t\t0x52: [\"COUNTA\", 69],\n\t\t0x53: [\"MINA\", 69],\n\t\t0x54: [\"MAXA\", 69],\n\t\t// 0x55 VLOOKUP\n\t\t// 0x56 NPV\n\t\t// 0x57 VAR\n\t\t// 0x58 STD\n\t\t// 0x59 IRR\n\t\t// 0x5A HLOOKUP\n\t\t// 0x5B DSUM\n\t\t// 0x5C DAVERAGE\n\t\t// 0x5D DCOUNTA\n\t\t// 0x5E DMIN\n\t\t// 0x5F DMAX\n\t\t// 0x60 DVARP\n\t\t// 0x61 DSTDEVP\n\t\t// 0x62 INDEX\n\t\t// 0x63 COLS\n\t\t// 0x64 ROWS\n\t\t// 0x65 REPEAT\n\t\t0x66: [\"UPPER\", 1],\n\t\t0x67: [\"LOWER\", 1],\n\t\t// 0x68 LEFT\n\t\t// 0x69 RIGHT\n\t\t// 0x6A REPLACE\n\t\t0x6B: [\"PROPER\", 1],\n\t\t// 0x6C CELL\n\t\t0x6D: [\"TRIM\", 1],\n\t\t// 0x6E CLEAN\n\t\t0x6F: [\"T\", 1]\n\t\t// 0x70 V\n\t};\n\tvar BinOpTab = [\n\t\t \"\", \"\", \"\", \"\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"\", \"+\", \"-\", \"*\", \"/\", \"^\", \"=\", \"<>\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t\"<=\", \">=\", \"<\", \">\", \"\", \"\", \"\", \"\", // eslint-disable-line no-mixed-spaces-and-tabs\n\t\t \"&\", \"\", \"\", \"\", \"\", \"\", \"\", \"\" // eslint-disable-line no-mixed-spaces-and-tabs\n\t];\n\n\tfunction wk1_fmla_to_csf(blob, o) {\n\t\tprep_blob(blob, 0);\n\t\tvar out = [], argc = 0, R = \"\", C = \"\", argL = \"\", argR = \"\";\n\t\twhile(blob.l < blob.length) {\n\t\t\tvar cc = blob[blob.l++];\n\t\t\tswitch(cc) {\n\t\t\t\tcase 0x00: out.push(blob.read_shift(8, 'f')); break;\n\t\t\t\tcase 0x01: {\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x02: {\n\t\t\t\t\tvar c = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tvar r = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tC = wk1_parse_rc(o[0].c, blob.read_shift(2), true);\n\t\t\t\t\tR = wk1_parse_rc(o[0].r, blob.read_shift(2), false);\n\t\t\t\t\tout.push(c + r + \":\" + C + R);\n\t\t\t\t} break;\n\t\t\t\tcase 0x03:\n\t\t\t\t\tif(blob.l < blob.length) { console.error(\"WK1 premature formula end\"); return; }\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x04: out.push(\"(\" + out.pop() + \")\"); break;\n\t\t\t\tcase 0x05: out.push(blob.read_shift(2)); break;\n\t\t\t\tcase 0x06: {\n\t\t\t\t\t/* TODO: text encoding */\n\t\t\t\t\tvar Z = \"\"; while((cc = blob[blob.l++])) Z += String.fromCharCode(cc);\n\t\t\t\t\tout.push('\"' + Z.replace(/\"/g, '\"\"') + '\"');\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x08: out.push(\"-\" + out.pop()); break;\n\t\t\t\tcase 0x17: out.push(\"+\" + out.pop()); break;\n\t\t\t\tcase 0x16: out.push(\"NOT(\" + out.pop() + \")\"); break;\n\n\t\t\t\tcase 0x14: case 0x15: {\n\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\tout.push([\"AND\", \"OR\"][cc - 0x14] + \"(\" + argL + \",\" + argR + \")\");\n\t\t\t\t} break;\n\n\t\t\t\tdefault:\n\t\t\t\t\tif(cc < 0x20 && BinOpTab[cc]) {\n\t\t\t\t\t\targR = out.pop(); argL = out.pop();\n\t\t\t\t\t\tout.push(argL + BinOpTab[cc] + argR);\n\t\t\t\t\t} else if(FuncTab[cc]) {\n\t\t\t\t\t\targc = FuncTab[cc][1];\n\t\t\t\t\t\tif(argc == 69) argc = blob[blob.l++];\n\t\t\t\t\t\tif(argc > out.length) { console.error(\"WK1 bad formula parse 0x\" + cc.toString(16) + \":|\" + out.join(\"|\") + \"|\"); return; }\n\t\t\t\t\t\tvar args = out.slice(-argc);\n\t\t\t\t\t\tout.length -= argc;\n\t\t\t\t\t\tout.push(FuncTab[cc][0] + \"(\" + args.join(\",\") + \")\");\n\t\t\t\t\t}\n\t\t\t\t\telse if(cc <= 0x07) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x18) return console.error(\"WK1 unsupported op \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x1E) return console.error(\"WK1 invalid opcode \" + cc.toString(16));\n\t\t\t\t\telse if(cc <= 0x73) return console.error(\"WK1 unsupported function opcode \" + cc.toString(16));\n\t\t\t\t\t// possible future functions ??\n\t\t\t\t\telse return console.error(\"WK1 unrecognized opcode \" + cc.toString(16));\n\t\t\t}\n\t\t}\n\t\tif(out.length == 1) o[1].f = \"\" + out[0];\n\t\telse console.error(\"WK1 bad formula parse |\" + out.join(\"|\") + \"|\");\n\t}\n\n\n\tfunction parse_cell_3(blob/*::, length*/) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\tfunction write_LABEL_16(R, C, wsidx, s) {\n\t\t/* TODO: encoding */\n\t\tvar o = new_buf(6 + s.length);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\to.write_shift(1, 0x27);\n\t\tfor(var i = 0; i < s.length; ++i) {\n\t\t\tvar cc = s.charCodeAt(i);\n\t\t\to.write_shift(1, cc >= 0x80 ? 0x5F : cc);\n\t\t}\n\t\to.write_shift(1, 0);\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 0: v = (v >> 3) * 5000; break;\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 3: v = (v >> 3) / 200; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 5: v = (v >> 3) / 20000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) {\n\t\t\tif(v1 === 0 && v2 === 0xC0000000) { o[1].t = \"e\"; o[1].v = 0x0F; } // ERR -> #VALUE!\n\t\t\telse if(v1 === 0 && v2 === 0xD0000000) { o[1].t = \"e\"; o[1].v = 0x2A; } // NA -> #N/A\n\t\t\telse o[1].v = 0;\n\t\t\treturn o;\n\t\t}\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (1 - s*2) * (v2 * Math.pow(2, e+32) + v1 * Math.pow(2, e));\n\t\treturn o;\n\t}\n\tfunction write_NUMBER_17(R, C, wsidx, v) {\n\t\tvar o = new_buf(14);\n\t\to.write_shift(2, R);\n\t\to.write_shift(1, wsidx);\n\t\to.write_shift(1, C);\n\t\tif(v == 0) {\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(4, 0);\n\t\t\to.write_shift(2, 0xFFFF);\n\t\t\treturn o;\n\t\t}\n\t\tvar s = 0, e = 0, v1 = 0, v2 = 0;\n\t\tif(v < 0) { s = 1; v = -v; }\n\t\te = Math.log2(v) | 0;\n\t\tv /= Math.pow(2, e-31);\n\t\tv2 = (v)>>>0;\n\t\tif((v2&0x80000000) == 0) { v/=2; ++e; v2 = v >>> 0; }\n\t\tv -= v2;\n\t\tv2 |= 0x80000000;\n\t\tv2 >>>= 0;\n\t\tv *= Math.pow(2, 32);\n\t\tv1 = v>>>0;\n\t\to.write_shift(4, v1);\n\t\to.write_shift(4, v2);\n\t\te += 0x3FFF + (s ? 0x8000 : 0);\n\t\to.write_shift(2, e);\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: WK3 formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 12);\n\t\tblob.l += length - 12; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETNAMECS(blob, length) {\n\t\treturn blob[blob.l + length - 1] == 0 ? blob.read_shift(length, 'cstr') : \"\";\n\t}\n\n\tfunction parse_SHEETNAMELP(blob, length) {\n\t\tvar len = blob[blob.l++];\n\t\tif(len > length - 1) len = length - 1;\n\t\tvar o = \"\"; while(o.length < len) o += String.fromCharCode(blob[blob.l++]);\n\t\treturn o;\n\t}\n\n\tfunction parse_SHEETINFOQP(blob, length, opts) {\n\t\tif(!opts.qpro || length < 21) return;\n\t\tvar id = blob.read_shift(1);\n\t\tblob.l += 17;\n\t\tblob.l += 1; //var len = blob.read_shift(1);\n\t\tblob.l += 2;\n\t\tvar nm = blob.read_shift(length - 21, 'cstr');\n\t\treturn [id, nm];\n\t}\n\n\tfunction parse_XFORMAT(blob, length) {\n\t\tvar o = {}, tgt = blob.l + length;\n\t\twhile(blob.l < tgt) {\n\t\t\tvar dt = blob.read_shift(2);\n\t\t\tif(dt == 0x36b0) {\n\t\t\t\to[dt] = [0, \"\"];\n\t\t\t\to[dt][0] = blob.read_shift(2);\n\t\t\t\twhile(blob[blob.l]) { o[dt][1] += String.fromCharCode(blob[blob.l]); blob.l++; } blob.l++;\n\t\t\t}\n\t\t\t// TODO: 0x3a99 ??\n\t\t}\n\t\treturn o;\n\t}\n\tfunction write_XFORMAT_SHEETNAME(name, wsidx) {\n\t\tvar out = new_buf(5 + name.length);\n\t\tout.write_shift(2, 0x36b0);\n\t\tout.write_shift(2, wsidx);\n\t\tfor(var i = 0; i < name.length; ++i) {\n\t\t\tvar cc = name.charCodeAt(i);\n\t\t\tout[out.l++] = cc > 0x7F ? 0x5F : cc;\n\t\t}\n\t\tout[out.l++] = 0;\n\t\treturn out;\n\t}\n\n\tvar WK1Enum = {\n\t\t0x0000: { n:\"BOF\", f:parseuint16 },\n\t\t0x0001: { n:\"EOF\" },\n\t\t0x0002: { n:\"CALCMODE\" },\n\t\t0x0003: { n:\"CALCORDER\" },\n\t\t0x0004: { n:\"SPLIT\" },\n\t\t0x0005: { n:\"SYNC\" },\n\t\t0x0006: { n:\"RANGE\", f:parse_RANGE },\n\t\t0x0007: { n:\"WINDOW1\" },\n\t\t0x0008: { n:\"COLW1\" },\n\t\t0x0009: { n:\"WINTWO\" },\n\t\t0x000A: { n:\"COLW2\" },\n\t\t0x000B: { n:\"NAME\" },\n\t\t0x000C: { n:\"BLANK\" },\n\t\t0x000D: { n:\"INTEGER\", f:parse_INTEGER },\n\t\t0x000E: { n:\"NUMBER\", f:parse_NUMBER },\n\t\t0x000F: { n:\"LABEL\", f:parse_LABEL },\n\t\t0x0010: { n:\"FORMULA\", f:parse_FORMULA },\n\t\t0x0018: { n:\"TABLE\" },\n\t\t0x0019: { n:\"ORANGE\" },\n\t\t0x001A: { n:\"PRANGE\" },\n\t\t0x001B: { n:\"SRANGE\" },\n\t\t0x001C: { n:\"FRANGE\" },\n\t\t0x001D: { n:\"KRANGE1\" },\n\t\t0x0020: { n:\"HRANGE\" },\n\t\t0x0023: { n:\"KRANGE2\" },\n\t\t0x0024: { n:\"PROTEC\" },\n\t\t0x0025: { n:\"FOOTER\" },\n\t\t0x0026: { n:\"HEADER\" },\n\t\t0x0027: { n:\"SETUP\" },\n\t\t0x0028: { n:\"MARGINS\" },\n\t\t0x0029: { n:\"LABELFMT\" },\n\t\t0x002A: { n:\"TITLES\" },\n\t\t0x002B: { n:\"SHEETJS\" },\n\t\t0x002D: { n:\"GRAPH\" },\n\t\t0x002E: { n:\"NGRAPH\" },\n\t\t0x002F: { n:\"CALCCOUNT\" },\n\t\t0x0030: { n:\"UNFORMATTED\" },\n\t\t0x0031: { n:\"CURSORW12\" },\n\t\t0x0032: { n:\"WINDOW\" },\n\t\t0x0033: { n:\"STRING\", f:parse_STRING },\n\t\t0x0037: { n:\"PASSWORD\" },\n\t\t0x0038: { n:\"LOCKED\" },\n\t\t0x003C: { n:\"QUERY\" },\n\t\t0x003D: { n:\"QUERYNAME\" },\n\t\t0x003E: { n:\"PRINT\" },\n\t\t0x003F: { n:\"PRINTNAME\" },\n\t\t0x0040: { n:\"GRAPH2\" },\n\t\t0x0041: { n:\"GRAPHNAME\" },\n\t\t0x0042: { n:\"ZOOM\" },\n\t\t0x0043: { n:\"SYMSPLIT\" },\n\t\t0x0044: { n:\"NSROWS\" },\n\t\t0x0045: { n:\"NSCOLS\" },\n\t\t0x0046: { n:\"RULER\" },\n\t\t0x0047: { n:\"NNAME\" },\n\t\t0x0048: { n:\"ACOMM\" },\n\t\t0x0049: { n:\"AMACRO\" },\n\t\t0x004A: { n:\"PARSE\" },\n\t\t// 0x0064\n\t\t0x0066: { n:\"PRANGES??\" },\n\t\t0x0067: { n:\"RRANGES??\" },\n\t\t0x0068: { n:\"FNAME??\" },\n\t\t0x0069: { n:\"MRANGES??\" },\n\t\t// 0x0096\n\t\t// 0x0099\n\t\t// 0x009A\n\t\t// 0x009B\n\t\t// 0x009C\n\t\t// 0x00C0\n\t\t// 0x00C7\n\t\t// 0x00C9\n\t\t0x00CC: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t// 0x00CD\n\t\t0x00DE: { n:\"SHEETNAMELP\", f:parse_SHEETNAMELP },\n\t\t0x00FF: { n:\"BOF\", f:parseuint16 },\n\t\t0x5402: { n:\"WKSNF\", f:parseuint16 },\n\t\t0xFFFF: { n:\"\" }\n\t};\n\n\tvar WK3Enum = {\n\t\t0x0000: { n:\"BOF\" },\n\t\t0x0001: { n:\"EOF\" },\n\t\t0x0002: { n:\"PASSWORD\" },\n\t\t0x0003: { n:\"CALCSET\" },\n\t\t0x0004: { n:\"WINDOWSET\" },\n\t\t0x0005: { n:\"SHEETCELLPTR\" },\n\t\t0x0006: { n:\"SHEETLAYOUT\" },\n\t\t0x0007: { n:\"COLUMNWIDTH\" },\n\t\t0x0008: { n:\"HIDDENCOLUMN\" },\n\t\t0x0009: { n:\"USERRANGE\" },\n\t\t0x000A: { n:\"SYSTEMRANGE\" },\n\t\t0x000B: { n:\"ZEROFORCE\" },\n\t\t0x000C: { n:\"SORTKEYDIR\" },\n\t\t0x000D: { n:\"FILESEAL\" },\n\t\t0x000E: { n:\"DATAFILLNUMS\" },\n\t\t0x000F: { n:\"PRINTMAIN\" },\n\t\t0x0010: { n:\"PRINTSTRING\" },\n\t\t0x0011: { n:\"GRAPHMAIN\" },\n\t\t0x0012: { n:\"GRAPHSTRING\" },\n\t\t0x0013: { n:\"??\" },\n\t\t0x0014: { n:\"ERRCELL\" },\n\t\t0x0015: { n:\"NACELL\" },\n\t\t0x0016: { n:\"LABEL16\", f:parse_LABEL_16},\n\t\t0x0017: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n\t\t0x0018: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n\t\t0x0019: { n:\"FORMULA19\", f:parse_FORMULA_19},\n\t\t0x001A: { n:\"FORMULA1A\" },\n\t\t0x001B: { n:\"XFORMAT\", f:parse_XFORMAT },\n\t\t0x001C: { n:\"DTLABELMISC\" },\n\t\t0x001D: { n:\"DTLABELCELL\" },\n\t\t0x001E: { n:\"GRAPHWINDOW\" },\n\t\t0x001F: { n:\"CPA\" },\n\t\t0x0020: { n:\"LPLAUTO\" },\n\t\t0x0021: { n:\"QUERY\" },\n\t\t0x0022: { n:\"HIDDENSHEET\" },\n\t\t0x0023: { n:\"??\" },\n\t\t0x0025: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n\t\t0x0026: { n:\"??\" },\n\t\t0x0027: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n\t\t0x0028: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n\t\t0x008E: { n:\"??\" },\n\t\t0x0093: { n:\"??\" },\n\t\t0x0096: { n:\"??\" },\n\t\t0x0097: { n:\"??\" },\n\t\t0x0098: { n:\"??\" },\n\t\t0x0099: { n:\"??\" },\n\t\t0x009A: { n:\"??\" },\n\t\t0x009B: { n:\"??\" },\n\t\t0x009C: { n:\"??\" },\n\t\t0x00A3: { n:\"??\" },\n\t\t0x00AE: { n:\"??\" },\n\t\t0x00AF: { n:\"??\" },\n\t\t0x00B0: { n:\"??\" },\n\t\t0x00B1: { n:\"??\" },\n\t\t0x00B8: { n:\"??\" },\n\t\t0x00B9: { n:\"??\" },\n\t\t0x00BA: { n:\"??\" },\n\t\t0x00BB: { n:\"??\" },\n\t\t0x00BC: { n:\"??\" },\n\t\t0x00C3: { n:\"??\" },\n\t\t0x00C9: { n:\"??\" },\n\t\t0x00CC: { n:\"SHEETNAMECS\", f:parse_SHEETNAMECS },\n\t\t0x00CD: { n:\"??\" },\n\t\t0x00CE: { n:\"??\" },\n\t\t0x00CF: { n:\"??\" },\n\t\t0x00D0: { n:\"??\" },\n\t\t0x0100: { n:\"??\" },\n\t\t0x0103: { n:\"??\" },\n\t\t0x0104: { n:\"??\" },\n\t\t0x0105: { n:\"??\" },\n\t\t0x0106: { n:\"??\" },\n\t\t0x0107: { n:\"??\" },\n\t\t0x0109: { n:\"??\" },\n\t\t0x010A: { n:\"??\" },\n\t\t0x010B: { n:\"??\" },\n\t\t0x010C: { n:\"??\" },\n\t\t0x010E: { n:\"??\" },\n\t\t0x010F: { n:\"??\" },\n\t\t0x0180: { n:\"??\" },\n\t\t0x0185: { n:\"??\" },\n\t\t0x0186: { n:\"??\" },\n\t\t0x0189: { n:\"??\" },\n\t\t0x018C: { n:\"??\" },\n\t\t0x0200: { n:\"??\" },\n\t\t0x0202: { n:\"??\" },\n\t\t0x0201: { n:\"??\" },\n\t\t0x0204: { n:\"??\" },\n\t\t0x0205: { n:\"??\" },\n\t\t0x0280: { n:\"??\" },\n\t\t0x0281: { n:\"??\" },\n\t\t0x0282: { n:\"??\" },\n\t\t0x0283: { n:\"??\" },\n\t\t0x0284: { n:\"??\" },\n\t\t0x0285: { n:\"??\" },\n\t\t0x0286: { n:\"??\" },\n\t\t0x0287: { n:\"??\" },\n\t\t0x0288: { n:\"??\" },\n\t\t0x0292: { n:\"??\" },\n\t\t0x0293: { n:\"??\" },\n\t\t0x0294: { n:\"??\" },\n\t\t0x0295: { n:\"??\" },\n\t\t0x0296: { n:\"??\" },\n\t\t0x0299: { n:\"??\" },\n\t\t0x029A: { n:\"??\" },\n\t\t0x0300: { n:\"??\" },\n\t\t0x0304: { n:\"??\" },\n\t\t0x0601: { n:\"SHEETINFOQP\", f:parse_SHEETINFOQP },\n\t\t0x0640: { n:\"??\" },\n\t\t0x0642: { n:\"??\" },\n\t\t0x0701: { n:\"??\" },\n\t\t0x0702: { n:\"??\" },\n\t\t0x0703: { n:\"??\" },\n\t\t0x0704: { n:\"??\" },\n\t\t0x0780: { n:\"??\" },\n\t\t0x0800: { n:\"??\" },\n\t\t0x0801: { n:\"??\" },\n\t\t0x0804: { n:\"??\" },\n\t\t0x0A80: { n:\"??\" },\n\t\t0x2AF6: { n:\"??\" },\n\t\t0x3231: { n:\"??\" },\n\t\t0x6E49: { n:\"??\" },\n\t\t0x6F44: { n:\"??\" },\n\t\t0xFFFF: { n:\"\" }\n\t};\n\n\t/* TODO: fill out and verify this table across QP versions */\n\tvar QPWNFTable = {\n\t\t0x05: \"dd-mmm-yy\",\n\t\t0x06: \"dd-mmm\",\n\t\t0x07: \"mmm-yy\",\n\t\t0x08: \"mm/dd/yy\", // Long Date Intl\n\t\t0x0A: \"hh:mm:ss AM/PM\",\n\t\t0x0B: \"hh:mm AM/PM\",\n\t\t0x0E: \"dd-mmm-yyyy\",\n\t\t0x0F: \"mmm-yyyy\",\n\n\t\t/* It is suspected that the the low nybble specifies decimal places */\n\t\t0x0022: \"0.00\",\n\t\t0x0032: \"0.00;[Red]0.00\",\n\t\t0x0042: \"0.00;\\(0.00\\)\",\n\t\t0x0052: \"0.00;[Red]\\(0.00\\)\",\n\t\t0x00A2: '\"$\"#,##0.00;\\\\(\"$\"#,##0.00\\\\)',\n\t\t0x0120: '0%',\n\t\t0x0130: '0E+00',\n\t\t0x0140: '# ?/?'\n\t};\n\n\tfunction parse_qpw_str(p) {\n\t\tvar cch = p.read_shift(2);\n\t\tvar flags = p.read_shift(1);\n\t\t/* TODO: find examples with nonzero flags */\n\t\tif(flags != 0) throw \"unsupported QPW string type \" + flags.toString(16);\n\t\treturn p.read_shift(cch, \"sbcs-cont\");\n\t}\n\n\t/* QPW uses a different set of record types */\n\tfunction qpw_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tprep_blob(d, 0);\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ({}/*:any*/); if(o.dense) s[\"!data\"] = [];\n\t\tvar SST = [], sname = \"\", formulae = [];\n\t\tvar range = {s:{r:-1,c:-1}, e:{r:-1,c:-1}};\n\t\tvar cnt = 0, type = 0, C = 0, R = 0;\n\t\tvar wb = { SheetNames: [], Sheets: {} };\n\t\tvar FMTS = [];\n\t\touter: while(d.l < d.length) {\n\t\t\tvar RT = d.read_shift(2), length = d.read_shift(2);\n\t\t\tvar p = d.slice(d.l, d.l + length);\n\t\t\tprep_blob(p, 0);\n\t\t\tswitch(RT) {\n\t\t\t\tcase 0x01: /* BOF */\n\t\t\t\t\tif(p.read_shift(4) != 0x39575051) throw \"Bad QPW9 BOF!\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x02: /* EOF */ break outer;\n\n\t\t\t\tcase 0x08: /* NF */ break; // TODO: this is tied to custom number formats\n\n\t\t\t\tcase 0x0A: /* FORMATS */ {\n\t\t\t\t\tvar fcnt = p.read_shift(4);\n\t\t\t\t\tvar step = ((p.length - p.l)/ fcnt)|0;\n\t\t\t\t\tfor(var ifmt = 0; ifmt < fcnt; ++ifmt) {\n\t\t\t\t\t\tvar end = p.l + step;\n\t\t\t\t\t\tvar fmt = {};\n\t\t\t\t\t\tp.l += 2;\n\t\t\t\t\t\tfmt.numFmtId = p.read_shift(2);\n\t\t\t\t\t\tif(QPWNFTable[fmt.numFmtId]) fmt.z = QPWNFTable[fmt.numFmtId];\n\t\t\t\t\t\tp.l = end;\n\t\t\t\t\t\tFMTS.push(fmt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\t/* TODO: The behavior here should be consistent with Numbers: QP Notebook ~ .TN.SheetArchive, QP Sheet ~ .TST.TableModelArchive */\n\t\t\t\tcase 0x0401: /* BON */ break;\n\t\t\t\tcase 0x0402: /* EON */ /* TODO: backfill missing sheets based on BON cnt */ break;\n\n\t\t\t\tcase 0x0407: { /* SST */\n\t\t\t\t\tp.l += 12;\n\t\t\t\t\twhile(p.l < p.length) {\n\t\t\t\t\t\tcnt = p.read_shift(2);\n\t\t\t\t\t\ttype = p.read_shift(1);\n\t\t\t\t\t\tSST.push(p.read_shift(cnt, 'cstr'));\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0408: { /* FORMULAE */\n\t\t\t\t\t//p.l += 12;\n\t\t\t\t\t//while(p.l < p.length) {\n\t\t\t\t\t//\tcnt = p.read_shift(2);\n\t\t\t\t\t//\tformulae.push(p.slice(p.l, p.l + cnt + 1)); p.l += cnt + 1;\n\t\t\t\t\t//}\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0601: { /* BOS */\n\t\t\t\t\tvar sidx = p.read_shift(2);\n\t\t\t\t\ts = ({}/*:any*/); if(o.dense) s[\"!data\"] = [];\n\t\t\t\t\trange.s.c = p.read_shift(2);\n\t\t\t\t\trange.e.c = p.read_shift(2);\n\t\t\t\t\trange.s.r = p.read_shift(4);\n\t\t\t\t\trange.e.r = p.read_shift(4);\n\t\t\t\t\tp.l += 4;\n\t\t\t\t\tif(p.l + 2 < p.length) {\n\t\t\t\t\t\tcnt = p.read_shift(2);\n\t\t\t\t\t\ttype = p.read_shift(1);\n\t\t\t\t\t\tsname = cnt == 0 ? \"\" : p.read_shift(cnt, 'cstr');\n\t\t\t\t\t}\n\t\t\t\t\tif(!sname) sname = encode_col(sidx);\n\t\t\t\t\t/* TODO: backfill empty sheets */\n\t\t\t\t} break;\n\t\t\t\tcase 0x0602: { /* EOS */\n\t\t\t\t\t/* NOTE: QP valid range A1:IV1000000 */\n\t\t\t\t\tif(range.s.c > 0xFF || range.s.r > 999999) break;\n\t\t\t\t\tif(range.e.c < range.s.c) range.e.c = range.s.c;\n\t\t\t\t\tif(range.e.r < range.s.r) range.e.r = range.s.r;\n\t\t\t\t\ts[\"!ref\"] = encode_range(range);\n\t\t\t\t\tbook_append_sheet(wb, s, sname); // TODO: a barrel roll\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0A01: { /* COL (like XLS Row, modulo the layout transposition) */\n\t\t\t\t\tC = p.read_shift(2);\n\t\t\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\t\t\tif(range.s.c > C) range.s.c = C;\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tif(range.s.r > R) range.s.r = R;\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0C01: { /* MulCells (like XLS MulRK, but takes advantage of common column data patterns) */\n\t\t\t\t\tR = p.read_shift(4), cnt = p.read_shift(4);\n\t\t\t\t\tif(range.s.r > R) range.s.r = R;\n\t\t\t\t\tif(range.e.r < R + cnt - 1) range.e.r = R + cnt - 1;\n\t\t\t\t\tvar CC = encode_col(C);\n\t\t\t\t\twhile(p.l < p.length) {\n\t\t\t\t\t\tvar cell = { t: \"z\" };\n\t\t\t\t\t\tvar flags = p.read_shift(1), fmtidx = -1;\n\t\t\t\t\t\tif(flags & 0x80) fmtidx = p.read_shift(2);\n\t\t\t\t\t\tvar mul = (flags & 0x40) ? p.read_shift(2) - 1: 0;\n\t\t\t\t\t\tswitch(flags & 0x1F) {\n\t\t\t\t\t\t\tcase 0: break;\n\t\t\t\t\t\t\tcase 1: break;\n\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: p.read_shift(2) }; break;\n\t\t\t\t\t\t\tcase 3: cell = { t: \"n\", v: p.read_shift(2, 'i') }; break;\n\t\t\t\t\t\t\tcase 4: cell = { t: \"n\", v: parse_RkNumber(p) }; break;\n\t\t\t\t\t\t\tcase 5: cell = { t: \"n\", v: p.read_shift(8, 'f') }; break;\n\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = p.read_shift(4) - 1] }; break;\n\t\t\t\t\t\t\tcase 8:\n\t\t\t\t\t\t\t\tcell = { t: \"n\", v: p.read_shift(8, 'f') };\n\t\t\t\t\t\t\t\tp.l += 2; /* cell.f = formulae[p.read_shift(4)]; */ p.l += 4;\n\t\t\t\t\t\t\t\tif(isNaN(cell.v)) cell = { t: \"e\", v: 0x0F }; // #VALUE!\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tdefault: throw \"Unrecognized QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(fmtidx != -1 && (FMTS[fmtidx - 1]||{}).z) cell.z = FMTS[fmtidx-1].z;\n\t\t\t\t\t\tvar delta = 0;\n\t\t\t\t\t\tif(flags & 0x20) switch(flags & 0x1F) {\n\t\t\t\t\t\t\tcase 2: delta = p.read_shift(2); break;\n\t\t\t\t\t\t\tcase 3: delta = p.read_shift(2, 'i'); break;\n\t\t\t\t\t\t\tcase 7: delta = p.read_shift(2); break;\n\t\t\t\t\t\t\tdefault: throw \"Unsupported delta for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(!(!o.sheetStubs && cell.t == \"z\")) {\n\t\t\t\t\t\t\tvar newcell = dup(cell);\n\t\t\t\t\t\t\tif(cell.t == \"n\" && cell.z && fmt_is_date(cell.z) && o.cellDates) {\n\t\t\t\t\t\t\t\tnewcell.v = numdate(cell.v); newcell.t = typeof newcell.v == \"number\" ? 'n' : 'd';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\t\t\ts[\"!data\"][R][C] = newcell;\n\t\t\t\t\t\t\t} else s[CC + encode_row(R)] = newcell;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t++R; --cnt;\n\t\t\t\t\t\twhile(mul-- > 0 && cnt >= 0) {\n\t\t\t\t\t\t\tif(flags & 0x20) switch(flags & 0x1F) {\n\t\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: (cell.v + delta) & 0xFFFF }; break;\n\t\t\t\t\t\t\t\tcase 3: cell = { t: \"n\", v: (cell.v + delta) & 0xFFFF }; if(cell.v > 0x7FFF) cell.v -= 0x10000; break;\n\t\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = (type + delta) >>> 0] }; break;\n\t\t\t\t\t\t\t\tdefault: throw \"Cannot apply delta for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t\t} else switch(flags & 0x1F) {\n\t\t\t\t\t\t\t\tcase 1: cell = { t: \"z\" }; break;\n\t\t\t\t\t\t\t\tcase 2: cell = { t: \"n\", v: p.read_shift(2) }; break;\n\t\t\t\t\t\t\t\tcase 7: cell = { t: \"s\", v: SST[type = p.read_shift(4) - 1] }; break;\n\t\t\t\t\t\t\t\tdefault: throw \"Cannot apply repeat for QPW cell type \" + (flags & 0x1F);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(fmtidx != -1);\n\t\t\t\t\t\t\tif(!(!o.sheetStubs && cell.t == \"z\")) {\n\t\t\t\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\t\t\t\ts[\"!data\"][R][C] = cell;\n\t\t\t\t\t\t\t\t} else s[CC + encode_row(R)] = cell;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t++R; --cnt;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x0C02: { /* String (result of string formula expression) */\n\t\t\t\t\tC = p.read_shift(2);\n\t\t\t\t\tR = p.read_shift(4);\n\t\t\t\t\tvar str = parse_qpw_str(p);\n\t\t\t\t\t/* TODO: QP10 record has an additional unknown character after the string */\n\t\t\t\t\tif(s[\"!data\"] != null) {\n\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\ts[\"!data\"][R][C] = { t:\"s\", v:str };\n\t\t\t\t\t} else s[encode_col(C) + encode_row(R)] = { t:\"s\", v:str };\n\t\t\t\t} break;\n\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t\td.l += length;\n\t\t}\n\t\treturn wb;\n\t}\n\n\treturn {\n\t\tsheet_to_wk1: sheet_to_wk1,\n\t\tbook_to_wk3: book_to_wk3,\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/<\\w*:/g,\"<\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '':\n\t\t\tcase '': font.shadow = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '':\n\t\t\tcase '': font.outline = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '':\n\t\t\tcase '': font.strike = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '':\n\t\t\tcase '': font.u = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '':\n\t\t\tcase '': font.b = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '':\n\t\t\tcase '': font.i = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.18 family ST_FontFamily */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme TODO */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = /*#__PURE__*/(function() {\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = str_match_xml_ns(r, \"t\")/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o/*:Cell*/ = ({t:'s', v:unescapexml(t[1])}/*:any*/);\n\t\tvar rpr = str_match_xml_ns(r, \"rPr\");\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of tags */\nvar rs_to_html = /*#__PURE__*/(function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style/*:Array*/ = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('');\n\n\t\tif(font.b) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.i) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.strike) { intro.push(\"\"); outro.push(\"\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"\"); }\n\n\t\toutro.push(\"\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms/*:[Array, string, Array]*/ = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'
') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t\\b[^<>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r\\b[^<>]*>/;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"), true);\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((str_remove_xml_ns_g(x, \"rPh\").match(sitregex)||[]).join(\"\").replace(tagregex,\"\")), true);\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data/*:string*/, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = str_match_xml_ns(data, \"sst\");\n\tif(sst) {\n\t\tss = sst[1].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[0].slice(0, sst[0].indexOf(\">\"))); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst/*:SST*/, opts)/*:string*/ {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS_main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s/*:XLString*/ = sst[i];\n\t\tvar sitag = \"\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"\" + escapexml(s.t) + \"\";\n\t\t}\n\t\tsitag += \"\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* BrtBeginSst */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* BrtSSTItem */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* BrtEndSst */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst/*::, opts*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x009F /* BrtBeginSst */, write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, 0x0013 /* BrtSSTItem */, write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, 0x00A0 /* BrtEndSst */);\n\treturn ba.end();\n}\nfunction _JS2ANSI(str/*:string*/)/*:Array*/ {\n\tif(typeof $cptable !== 'undefined') return $cptable.utils.encode(current_ansi, str);\n\tvar o/*:Array*/ = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length/*:?number*/) {\n\tvar o/*:any*/ = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\n\t/*:: if(length == null) return o; */\n\tif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps/*:Array<{t:number, v:string}>*/ = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob)/*:Array*/ {\n\tvar o/*:Array*/ = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length/*:number*/) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length/*:number*/) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob/*::, vers*/) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt(/*::blob, vers*/) { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob/*::, vers*/) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\t\t\tcase '': case '': break;\n\n\t\t\tcase '': break;\n\t\t\tcase ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob/*::, length*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = /*#__PURE__*/(function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar 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];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password/*:string*/) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password/*:string*/, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password/*:string*/) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) }/*:any*/);\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length/*:number*/, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length/*:number*/, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nfunction rtf_to_sheet(d, opts) {\n switch (opts.type) {\n case \"base64\":\n return rtf_to_sheet_str(Base64_decode(d), opts);\n case \"binary\":\n return rtf_to_sheet_str(d, opts);\n case \"buffer\":\n return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString(\"binary\") : a2s(d), opts);\n case \"array\":\n return rtf_to_sheet_str(cc2str(d), opts);\n }\n throw new Error(\"Unrecognized type \" + opts.type);\n}\nfunction rtf_to_sheet_str(str, opts) {\n var o = opts || {};\n var ws = {};\n var dense = o.dense;\n if (dense)\n ws[\"!data\"] = [];\n var rows = str_match_ng(str, \"\\\\trowd\", \"\\\\row\");\n if (!rows)\n throw new Error(\"RTF missing table\");\n var range = { s: { c: 0, r: 0 }, e: { c: 0, r: rows.length - 1 } };\n var row = [];\n rows.forEach(function(rowtf, R) {\n if (dense)\n row = ws[\"!data\"][R] = [];\n var rtfre = /\\\\[\\w\\-]+\\b/g;\n var last_index = 0;\n var res;\n var C = -1;\n var payload = [];\n while ((res = rtfre.exec(rowtf)) != null) {\n var data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n if (data.charCodeAt(0) == 32)\n data = data.slice(1);\n if (data.length)\n payload.push(data);\n switch (res[0]) {\n case \"\\\\cell\":\n ++C;\n if (payload.length) {\n var cell = { v: payload.join(\"\"), t: \"s\" };\n if (cell.v == \"TRUE\" || cell.v == \"FALSE\") {\n cell.v = cell.v == \"TRUE\";\n cell.t = \"b\";\n } else if (!isNaN(fuzzynum(cell.v))) {\n cell.t = \"n\";\n if (o.cellText !== false)\n cell.w = cell.v;\n cell.v = fuzzynum(cell.v);\n }\n if (dense)\n row[C] = cell;\n else\n ws[encode_cell({ r: R, c: C })] = cell;\n }\n payload = [];\n break;\n case \"\\\\par\":\n payload.push(\"\\n\");\n break;\n }\n last_index = rtfre.lastIndex;\n }\n if (C > range.e.c)\n range.e.c = C;\n });\n ws[\"!ref\"] = encode_range(range);\n return ws;\n}\nfunction rtf_to_workbook(d, opts) {\n var wb = sheet_to_workbook(rtf_to_sheet(d, opts), opts);\n wb.bookType = \"rtf\";\n return wb;\n}\nfunction sheet_to_rtf(ws, opts) {\n var o = [\"{\\\\rtf1\\\\ansi\"];\n if (!ws[\"!ref\"])\n return o[0] + \"}\";\n var r = safe_decode_range(ws[\"!ref\"]), cell;\n var dense = ws[\"!data\"] != null, row = [];\n for (var R = r.s.r; R <= r.e.r; ++R) {\n o.push(\"\\\\trowd\\\\trautofit1\");\n for (var C = r.s.c; C <= r.e.c; ++C)\n o.push(\"\\\\cellx\" + (C + 1));\n o.push(\"\\\\pard\\\\intbl\");\n if (dense)\n row = ws[\"!data\"][R] || [];\n for (C = r.s.c; C <= r.e.c; ++C) {\n var coord = encode_cell({ r: R, c: C });\n cell = dense ? row[C] : ws[coord];\n if (!cell || cell.v == null && (!cell.f || cell.F)) {\n o.push(\" \\\\cell\");\n continue;\n }\n o.push(\" \" + (cell.w || (format_cell(cell), cell.w) || \"\").replace(/[\\r\\n]/g, \"\\\\par \"));\n o.push(\"\\\\cell\");\n }\n o.push(\"\\\\pard\\\\intbl\\\\row\");\n }\n return o.join(\"\") + \"}\";\n}\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll/*:ColInfo*/) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '': case '':\n\t\t\t\tborder = /*::(*/{}/*:: :any)*/;\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '': case '':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '': break;\n\t\t\tcase '': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '': break;\n\t\t\tcase '': case '':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.2 b CT_BooleanProperty */\n\t\t\tcase '': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '': font.strike = 1; break;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty */\n\t\t\tcase '': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array*/ = (keys(table_fmt)/*:any*/);\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = table_fmt[k[i]];\n\tvar m = t.match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\t\t\tcase '0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF__load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {\n\tvar o = [\"\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '': case '':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(styles.NumberFmt && xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '': case '':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = true; break;\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= /*#__PURE__*/(function make_pstyx() {\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = remove_doctype(str_remove_ng(data, \"\"));\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=str_match_xml_ns(data, \"numFmts\"))) parse_numFmts(t[0], styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=str_match_xml_ns(data, \"fonts\"))) parse_fonts(t[0], styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=str_match_xml_ns(data, \"fills\"))) parse_fills(t[0], styles, themes, opts);\n\n\t/* 18.8.5 borders CT_Borders ? */\n\tif((t=str_match_xml_ns(data, \"borders\"))) parse_borders(t[0], styles, themes, opts);\n\n\t/* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8 cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=str_match_xml_ns(data, \"cellXfs\"))) parse_cellXfs(t[0], styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nfunction write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('styleSheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:vt': XMLNS.vt\n\t})], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length/*:number*/) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i/*:number*/, f/*:string*/, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length/*:number*/, opts) {\n\tvar out = ({}/*:any*/);\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font/*:any*/, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames/*:EvertNumType*/;\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tif(!rev_XLSBFillPTNames) rev_XLSBFillPTNames = (evert(XLSBFillPTNames)/*:any*/);\n\tvar fls/*:number*/ = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length/*:number*/) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]/*:any*/);\n\tfor(var y in table_fmt) styles.NumberFmt[y] = table_fmt[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* BrtFmt */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF__load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* BrtFont */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* BrtKnownFonts */ break;\n\t\t\tcase 0x002D: /* BrtFill */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* BrtBorder */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* BrtXF */\n\t\t\t\tif(state[state.length - 1] == 0x0269 /* BrtBeginCellXFs */) {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* BrtStyle */\n\t\t\tcase 0x01FB: /* BrtDXF */\n\t\t\tcase 0x023C: /* BrtMRUColor */\n\t\t\tcase 0x01DB: /* BrtIndexedColor */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* BrtDXF14 */\n\t\t\tcase 0x0836: /* BrtDXF15 */\n\t\t\tcase 0x046A: /* BrtSlicerStyleElement */\n\t\t\tcase 0x0200: /* BrtTableStyleElement */\n\t\t\tcase 0x082F: /* BrtTimelineStyleElement */\n\t\t\tcase 0x0C00: /* BrtUid */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* BrtFRTBegin */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* BrtFRTEnd */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* BrtACBegin */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* BrtACEnd */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF/*:?SSFTable*/) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0267 /* BrtBeginFmts */, write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, 0x002C /* BrtFmt */, write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, 0x0268 /* BrtEndFmts */);\n}\n\nfunction write_FONTS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0263 /* BrtBeginFonts */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002B /* BrtFont */, write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, 0x0264 /* BrtEndFonts */);\n}\n\nfunction write_FILLS_bin(ba/*::, data*/) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x025B /* BrtBeginFills */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, 0x002D /* BrtFill */, write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, 0x025C /* BrtEndFills */);\n}\n\nfunction write_BORDERS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, 0x0265 /* BrtBeginBorders */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002E /* BrtBorder */, write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, 0x0266 /* BrtEndBorders */);\n}\n\nfunction write_CELLSTYLEXFS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\twrite_record(ba, 0x0272 /* BrtBeginCellStyleXFs */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x002F /* BrtXF */, write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId: 0,\n\t\tfillId: 0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x0273 /* BrtEndCellStyleXFs */);\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, 0x0269 /* BrtBeginCellXFs */, write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, 0x002F /* BrtXF */, write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, 0x026A /* BrtEndCellXFs */);\n}\n\nfunction write_STYLES_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\twrite_record(ba, 0x026B /* BrtBeginStyles */, write_UInt32LE(cnt));\n\twrite_record(ba, 0x0030 /* BrtStyle */, write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, 0x026C /* BrtEndStyles */);\n}\n\nfunction write_DXFS_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01F9 /* BrtBeginDXFs */, write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, 0x01FA /* BrtEndDXFs */);\n}\n\nfunction write_TABLESTYLES_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, 0x01FC /* BrtBeginTableStyles */, write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, 0x01FD /* BrtEndTableStyles */);\n}\n\nfunction write_COLORPALETTE_bin(/*::ba, data*/) {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0116 /* BrtBeginStyleSheet */);\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, 0x0117 /* BrtEndStyleSheet */);\n\treturn ba.end();\n}\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'', '', '', '',\n\t'', '', '',\n\t'', '', '',\n\t'', ''\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.33 sysClr CT_SystemColor */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.4.1.1 accent1 (Accent 1) */\n\t\t\t/* 20.1.4.1.2 accent2 (Accent 2) */\n\t\t\t/* 20.1.4.1.3 accent3 (Accent 3) */\n\t\t\t/* 20.1.4.1.4 accent4 (Accent 4) */\n\t\t\t/* 20.1.4.1.5 accent5 (Accent 5) */\n\t\t\t/* 20.1.4.1.6 accent6 (Accent 6) */\n\t\t\t/* 20.1.4.1.9 dk1 (Dark 1) */\n\t\t\t/* 20.1.4.1.10 dk2 (Dark 2) */\n\t\t\t/* 20.1.4.1.15 folHlink (Followed Hyperlink) */\n\t\t\t/* 20.1.4.1.19 hlink (Hyperlink) */\n\t\t\t/* 20.1.4.1.22 lt1 (Light 1) */\n\t\t\t/* 20.1.4.1.23 lt2 (Light 2) */\n\t\t\tcase '':\n\t\t\tcase '':\n\t\t\tcase '':\n\t\t\tcase '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t/* clrScheme CT_ColorScheme */\n\tif(!(t=str_match_xml(data, \"a:clrScheme\"))) throw new Error('clrScheme not found in themeElements');\n\tparse_clrScheme(t, themes, opts);\n\n\t/* fontScheme CT_FontScheme */\n\tif(!(t=str_match_xml(data, \"a:fontScheme\"))) throw new Error('fontScheme not found in themeElements');\n\tparse_fontScheme(t, themes, opts);\n\n\t/* fmtScheme CT_StyleMatrix */\n\tif(!(t=str_match_xml(data, \"a:fmtScheme\"))) throw new Error('fmtScheme not found in themeElements');\n\tparse_fmtScheme(t, themes, opts);\n}\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data/*:string*/, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) data = write_theme();\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=str_match_xml(data, \"a:themeElements\"))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts)/*:string*/ {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = zip_read(data, {type: \"array\"}); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob/*::, length*/) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob/*::, length*/)/*:Array*/ {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext/*:AOA*/ = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\nfunction parse_BrtMdtinfo(data, length) {\n return {\n flags: data.read_shift(4),\n version: data.read_shift(4),\n name: parse_XLWideString(data, length - 8)\n };\n}\nfunction write_BrtMdtinfo(data) {\n var o = new_buf(12 + 2 * data.name.length);\n o.write_shift(4, data.flags);\n o.write_shift(4, data.version);\n write_XLWideString(data.name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtMdb(data) {\n var out = [];\n var cnt = data.read_shift(4);\n while (cnt-- > 0)\n out.push([data.read_shift(4), data.read_shift(4)]);\n return out;\n}\nfunction write_BrtMdb(mdb) {\n var o = new_buf(4 + 8 * mdb.length);\n o.write_shift(4, mdb.length);\n for (var i = 0; i < mdb.length; ++i) {\n o.write_shift(4, mdb[i][0]);\n o.write_shift(4, mdb[i][1]);\n }\n return o;\n}\nfunction write_BrtBeginEsfmd(cnt, name) {\n var o = new_buf(8 + 2 * name.length);\n o.write_shift(4, cnt);\n write_XLWideString(name, o);\n return o.slice(0, o.l);\n}\nfunction parse_BrtBeginEsmdb(data) {\n data.l += 4;\n return data.read_shift(4) != 0;\n}\nfunction write_BrtBeginEsmdb(cnt, cm) {\n var o = new_buf(8);\n o.write_shift(4, cnt);\n o.write_shift(4, cm ? 1 : 0);\n return o;\n}\nfunction parse_xlmeta_bin(data, name, _opts) {\n var out = { Types: [], Cell: [], Value: [] };\n var opts = _opts || {};\n var state = [];\n var pass = false;\n var metatype = 2;\n recordhopper(data, function(val, R, RT) {\n switch (RT) {\n case 335:\n out.Types.push({ name: val.name });\n break;\n case 51:\n val.forEach(function(r) {\n if (metatype == 1)\n out.Cell.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n else if (metatype == 0)\n out.Value.push({ type: out.Types[r[0] - 1].name, index: r[1] });\n });\n break;\n case 337:\n metatype = val ? 1 : 0;\n break;\n case 338:\n metatype = 2;\n break;\n case 35:\n state.push(RT);\n pass = true;\n break;\n case 36:\n state.pop();\n pass = false;\n break;\n default:\n if (R.T) {\n } else if (!pass || opts.WTF && state[state.length - 1] != 35)\n throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n }\n });\n return out;\n}\nfunction write_xlmeta_bin() {\n var ba = buf_array();\n write_record(ba, 332);\n write_record(ba, 334, write_UInt32LE(1));\n write_record(ba, 335, write_BrtMdtinfo({\n name: \"XLDAPR\",\n version: 12e4,\n flags: 3496657072\n }));\n write_record(ba, 336);\n write_record(ba, 339, write_BrtBeginEsfmd(1, \"XLDAPR\"));\n write_record(ba, 52);\n write_record(ba, 35, write_UInt32LE(514));\n write_record(ba, 4096, write_UInt32LE(0));\n write_record(ba, 4097, writeuint16(1));\n write_record(ba, 36);\n write_record(ba, 53);\n write_record(ba, 340);\n write_record(ba, 337, write_BrtBeginEsmdb(1, true));\n write_record(ba, 51, write_BrtMdb([[1, 0]]));\n write_record(ba, 338);\n write_record(ba, 333);\n return ba.end();\n}\nfunction parse_xlmeta_xml(data, name, opts) {\n var out = { Types: [], Cell: [], Value: [] };\n if (!data)\n return out;\n var pass = false;\n var metatype = 2;\n var lastmeta;\n data.replace(tagregex, function(x) {\n var y = parsexmltag(x);\n switch (strip_ns(y[0])) {\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n metatype = 2;\n break;\n case \"\":\n case \"\":\n case \"\":\n break;\n case \"\":\n pass = false;\n break;\n case \"\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n');\n return o.join(\"\");\n}\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data/*::, name, opts*/)/*:Array*/ {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.6.1 c CT_CalcCell 1 */\n\t\t\tcase ']*r:id=\"([^<>\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nfunction parse_vml(data/*:string*/, sheet, comments) {\n\tvar cidx = 0;\n\t(str_match_xml_ns_g(data, \"shape\")||[]).forEach(function(m) {\n\t\tvar type = \"\";\n\t\tvar hidden = true;\n\t\tvar aidx = -1;\n\t\tvar R = -1, C = -1;\n\t\tm.replace(tagregex, function(x/*:string*/, idx/*:number*/) {\n\t\t\tvar y = parsexmltag(x);\n\t\t\tswitch(strip_ns(y[0])) {\n\t\t\t\tcase '': hidden = false; break;\n\n\t\t\t\tcase '': aidx = idx + x.length; break;\n\t\t\t\tcase '': R = +m.slice(aidx, idx).trim(); break;\n\n\t\t\t\tcase '': aidx = idx + x.length; break;\n\t\t\t\tcase '': C = +m.slice(aidx, idx).trim(); break;\n\t\t\t}\n\t\t\treturn \"\";\n\t\t});\n\t\tswitch(type) {\n\t\tcase 'Note':\n\t\t\tvar cell = ws_get_cell_stub(sheet, ((R>=0 && C>=0) ? encode_cell({r:R,c:C}) : comments[cidx].ref));\n\t\t\tif(cell.c) {\n\t\t\t\tcell.c.hidden = hidden;\n\t\t\t}\n\t\t\t++cidx;\n\t\t\tbreak;\n\t\t}\n\n\t});\n}\n\n\n/* comment boxes */\nfunction write_vml(rId/*:number*/, comments, ws) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"})\n\t];\n\n\tvar _shapeid = 65536 * rId;\n\n\tvar _comments = comments || [];\n\tif(_comments.length > 0) o.push(writextag(\"v:shapetype\", [\n\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t].join(\"\"), {id:\"_x0000_t202\", coordsize:csize.join(\",\"), 'o:spt':202, path:bbox}));\n\n\t_comments.forEach(function(x) { ++_shapeid; o.push(write_vml_comment(x, _shapeid)); });\n\to.push('');\n\treturn o.join(\"\");\n}\n\nfunction write_vml_comment(x, _shapeid, ws)/*:string*/ {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = /*::(*/{'color2':\"#BEFF82\", 'type':\"gradient\"}/*:: :any)*/;\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"}/*:any*/);\n\n\treturn [\n\t'',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'
',\n\t\t'',\n\t\t\t'',\n\t\t\t'',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '',\n\t\t'',\n\t''\n\t].join(\"\");\n}\nfunction sheet_insert_comments(sheet/*:WorkSheet*/, comments/*:Array*/, threaded/*:boolean*/, people/*:?Array*/) {\n\tvar dense = sheet[\"!data\"] != null;\n\tvar cell/*:Cell*/;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(r.r < 0 || r.c < 0) return;\n\t\tif(dense) {\n\t\t\tif(!sheet[\"!data\"][r.r]) sheet[\"!data\"][r.r] = [];\n\t\t\tcell = sheet[\"!data\"][r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"}/*:any*/);\n\t\t\tif(dense) sheet[\"!data\"][r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tsheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o/*:Comment*/ = ({a: comment.author, t: comment.t, r: comment.r, T: threaded});\n\t\tif(comment.h) o.h = comment.h;\n\n\t\t/* threaded comments always override */\n\t\tfor(var i = cell.c.length - 1; i >= 0; --i) {\n\t\t\tif(!threaded && cell.c[i].T) return;\n\t\t\tif(threaded && !cell.c[i].T) cell.c.splice(i, 1);\n\t\t}\n\t\tif(threaded && people) for(i = 0; i < people.length; ++i) {\n\t\t\tif(o.a == people[i].id) { o.a = people[i].name || o.a; break; }\n\t\t}\n\t\tcell.c.push(o);\n\t});\n}\n/* 18.7 Comments */\nfunction parse_comments_xml(data/*:string*/, opts)/*:Array*/ {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors/*:Array*/ = [];\n\tvar commentList/*:Array*/ = [];\n\tvar authtag = str_match_xml_ns(data, \"authors\");\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^<>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = str_match_xml_ns(data, \"commentList\");\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^<>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment/*:RawComment*/ = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid }/*:any*/);\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = str_match_xml_ns(x, \"text\");\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"\") rt.t = rt.h = \"\";\n\t\tcomment.t = (rt.t||\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nfunction write_comments_xml(data/*::, opts*/) {\n\tvar o = [XML_HEADER, writextag('comments', null, { 'xmlns': XMLNS_main[0] })];\n\n\tvar iauthor/*:Array*/ = [];\n\to.push(\"\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) == -1) {\n\t\t\tiauthor.push(a);\n\t\t\to.push(\"\" + a + \"\");\n\t\t}\n\t\tif(w.T && w.ID && iauthor.indexOf(\"tc=\" + w.ID) == -1) {\n\t\t\tiauthor.push(\"tc=\" + w.ID);\n\t\t\to.push(\"\" + \"tc=\" + w.ID + \"\");\n\t\t}\n\t}); });\n\tif(iauthor.length == 0) { iauthor.push(\"SheetJ5\"); o.push(\"SheetJ5\"); }\n\to.push(\"\");\n\to.push(\"\");\n\tdata.forEach(function(d) {\n\t\t/* 18.7.3 CT_Comment */\n\t\tvar lastauthor = 0, ts = [], tcnt = 0;\n\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\td[1].forEach(function(c) {\n\t\t\tif(c.a) lastauthor = iauthor.indexOf(escapexml(c.a));\n\t\t\tif(c.T) ++tcnt;\n\t\t\tts.push(c.t == null ? \"\" : escapexml(c.t));\n\t\t});\n\t\tif(tcnt === 0) {\n\t\t\td[1].forEach(function(c) {\n\t\t\t\to.push('');\n\t\t\t\to.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n\t\t\t\to.push('');\n\t\t\t});\n\t\t} else {\n\t\t\tif(d[1][0] && d[1][0].T && d[1][0].ID) lastauthor = iauthor.indexOf(\"tc=\" + d[1][0].ID);\n\t\t\t/* based on Threaded Comments -> Comments projection */\n\t\t\to.push('');\n\t\t\tvar t = \"Comment:\\n \" + (ts[0]) + \"\\n\";\n\t\t\tfor(var i = 1; i < ts.length; ++i) t += \"Reply:\\n \" + ts[i] + \"\\n\";\n\t\t\to.push(writetag(\"t\", escapexml(t)));\n\t\t\to.push('');\n\t\t}\n\t});\n\to.push(\"\");\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.17 */\nfunction parse_tcmnt_xml(data/*:string*/, opts)/*:Array*/ {\n\tvar out = [];\n\tvar pass = false, comment = {}, tidx = 0;\n\tdata.replace(tagregex, function xml_tcmnt(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.205 threadedComment CT_ThreadedComment */\n\t\t\tcase '': if(comment.t != null) out.push(comment); break;\n\n\t\t\tcase '': case '': comment.t = data.slice(tidx, idx).replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\"); break;\n\n\t\t\t/* 2.6.206 mentions CT_ThreadedCommentMentions TODO */\n\t\t\tcase '': pass = true; break;\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 2.6.202 mention CT_Mention TODO */\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '
': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\n\nfunction write_tcmnt_xml(comments, people, opts) {\n\tvar o = [XML_HEADER, writextag('ThreadedComments', null, { 'xmlns': XMLNS.TCMNT }).replace(/[\\/]>/, \">\")];\n\tcomments.forEach(function(carr) {\n\t\tvar rootid = \"\";\n\t\t(carr[1] || []).forEach(function(c, idx) {\n\t\t\tif(!c.T) { delete c.ID; return; }\n\t\t\tif(c.a && people.indexOf(c.a) == -1) people.push(c.a);\n\t\t\tvar tcopts = {\n\t\t\t\tref: carr[0],\n\t\t\t\tid: \"{54EE7951-7262-4200-6969-\" + (\"000000000000\" + opts.tcid++).slice(-12) + \"}\"\n\t\t\t};\n\t\t\tif(idx == 0) rootid = tcopts.id;\n\t\t\telse tcopts.parentId = rootid;\n\t\t\tc.ID = tcopts.id;\n\t\t\tif(c.a) tcopts.personId = \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + people.indexOf(c.a)).slice(-12) + \"}\";\n\t\t\to.push(writextag('threadedComment', writetag('text', c.t||\"\"), tcopts));\n\t\t});\n\t});\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSX] 2.1.18 */\nfunction parse_people_xml(data/*:string*/, opts) {\n\tvar out = [];\n\tvar pass = false;\n\tdata.replace(tagregex, function xml_tcmnt(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 2.6.203 person CT_Person TODO: providers */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\tdefault: if(!pass && opts.WTF) throw new Error('unrecognized ' + y[0] + ' in threaded comments');\n\t\t}\n\t\treturn x;\n\t});\n\treturn out;\n}\nfunction write_people_xml(people/*, opts*/) {\n\tvar o = [XML_HEADER, writextag('personList', null, {\n\t\t'xmlns': XMLNS.TCMNT,\n\t\t'xmlns:x': XMLNS_main[0]\n\t}).replace(/[\\/]>/, \">\")];\n\tpeople.forEach(function(person, idx) {\n\t\to.push(writextag('person', null, {\n\t\t\tdisplayName: person,\n\t\t\tid: \"{54EE7950-7262-4200-6969-\" + (\"000000000000\" + idx).slice(-12) + \"}\",\n\t\t\tuserId: person,\n\t\t\tproviderId: \"None\"\n\t\t}));\n\t});\n\to.push(\"\");\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]/*:any*/), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts)/*:Array*/ {\n\tvar out/*:Array*/ = [];\n\tvar authors/*:Array*/ = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c/*:any*/).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data/*::, opts*/) {\n\tvar ba = buf_array();\n\tvar iauthor/*:Array*/ = [];\n\twrite_record(ba, 0x0274 /* BrtBeginComments */);\n\n\twrite_record(ba, 0x0276 /* BrtBeginCommentAuthors */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(c.a));\n\t\t\tif(c.T && c.ID && iauthor.indexOf(\"tc=\" + c.ID) == -1) {\n\t\t\t\tiauthor.push(\"tc=\" + c.ID);\n\t\t\t\twrite_record(ba, 0x0278 /* BrtCommentAuthor */, write_BrtCommentAuthor(\"tc=\" + c.ID));\n\t\t\t}\n\t\t});\n\t});\n\twrite_record(ba, 0x0277 /* BrtEndCommentAuthors */);\n\n\twrite_record(ba, 0x0279 /* BrtBeginCommentList */);\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tvar _ia = -1;\n\t\t\tif(c.ID) _ia = iauthor.indexOf(\"tc=\" + c.ID);\n\t\t\tif(_ia == -1 && comment[1][0].T && comment[1][0].ID) _ia = iauthor.indexOf(\"tc=\" + comment[1][0].ID);\n\t\t\tif(_ia == -1) _ia = iauthor.indexOf(c.a);\n\t\t\tc.iauthor = _ia;\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, 0x027B /* BrtBeginComment */, write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, 0x027D /* BrtCommentText */, write_BrtCommentText(c));\n\t\t\twrite_record(ba, 0x027C /* BrtEndComment */);\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, 0x027A /* BrtEndCommentList */);\n\n\twrite_record(ba, 0x0275 /* BrtEndComments */);\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb) {\n var newcfb = CFB.utils.cfb_new({ root: \"R\" });\n cfb.FullPaths.forEach(function(p, i) {\n if (p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/))\n return;\n var newpath = p.replace(/^[^\\/]*/, \"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n CFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n });\n return CFB.write(newcfb);\n}\nfunction fill_vba_xls(cfb, vba) {\n vba.FullPaths.forEach(function(p, i) {\n if (i == 0)\n return;\n var newpath = p.replace(/^[\\/]*[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n if (newpath.slice(-1) !== \"/\")\n CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n });\n}\nvar VBAFMTS = [\"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\"];\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\nfunction parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = /*#__PURE__*/(function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase/*:Cell*/ = ({r:0,c:0}/*:any*/);\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr/*:string*/, base/*:Cell*/)/*:string*/ {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])(\\$?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])(\\$?)(\\d{1,7})(?![_.\\(A-Za-z0-9])/g;\ntry {\n\tcrefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\n}catch(e){}\nvar a1_to_rc = /*#__PURE__*/(function(){\n\treturn function a1_to_rc(fstr/*:string*/, base/*:CellAddress*/) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = $4 == \"$\" ? (r+1) : (r == 0 ? \"\" : \"[\" + r + \"]\");\n\t\t\tvar C = $2 == \"$\" ? (c+1) : (c == 0 ? \"\" : \"[\" + c + \"]\");\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:string*/)/*:string*/ {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f/*:string*/)/*:boolean*/ {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f/*:string*/)/*:string*/ {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob/*::, length, opts*/) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob/*::, length, opts*/) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts)/*:Array*/ {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o/*:Array*/ = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob/*::, length*/) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff/*:number*/) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o/*:Array>*/ = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob/*::, length, opts*/) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob/*::, length, opts*/) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n\t0x01: { n:'PtgExp', f:parse_PtgExp },\n\t0x02: { n:'PtgTbl', f:parse_PtgTbl },\n\t0x03: { n:'PtgAdd', f:parseread1 },\n\t0x04: { n:'PtgSub', f:parseread1 },\n\t0x05: { n:'PtgMul', f:parseread1 },\n\t0x06: { n:'PtgDiv', f:parseread1 },\n\t0x07: { n:'PtgPower', f:parseread1 },\n\t0x08: { n:'PtgConcat', f:parseread1 },\n\t0x09: { n:'PtgLt', f:parseread1 },\n\t0x0A: { n:'PtgLe', f:parseread1 },\n\t0x0B: { n:'PtgEq', f:parseread1 },\n\t0x0C: { n:'PtgGe', f:parseread1 },\n\t0x0D: { n:'PtgGt', f:parseread1 },\n\t0x0E: { n:'PtgNe', f:parseread1 },\n\t0x0F: { n:'PtgIsect', f:parseread1 },\n\t0x10: { n:'PtgUnion', f:parseread1 },\n\t0x11: { n:'PtgRange', f:parseread1 },\n\t0x12: { n:'PtgUplus', f:parseread1 },\n\t0x13: { n:'PtgUminus', f:parseread1 },\n\t0x14: { n:'PtgPercent', f:parseread1 },\n\t0x15: { n:'PtgParen', f:parseread1 },\n\t0x16: { n:'PtgMissArg', f:parseread1 },\n\t0x17: { n:'PtgStr', f:parse_PtgStr },\n\t0x1A: { n:'PtgSheet', f:parse_PtgSheet },\n\t0x1B: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n\t0x1C: { n:'PtgErr', f:parse_PtgErr },\n\t0x1D: { n:'PtgBool', f:parse_PtgBool },\n\t0x1E: { n:'PtgInt', f:parse_PtgInt },\n\t0x1F: { n:'PtgNum', f:parse_PtgNum },\n\t0x20: { n:'PtgArray', f:parse_PtgArray },\n\t0x21: { n:'PtgFunc', f:parse_PtgFunc },\n\t0x22: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n\t0x23: { n:'PtgName', f:parse_PtgName },\n\t0x24: { n:'PtgRef', f:parse_PtgRef },\n\t0x25: { n:'PtgArea', f:parse_PtgArea },\n\t0x26: { n:'PtgMemArea', f:parse_PtgMemArea },\n\t0x27: { n:'PtgMemErr', f:parse_PtgMemErr },\n\t0x28: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n\t0x29: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n\t0x2A: { n:'PtgRefErr', f:parse_PtgRefErr },\n\t0x2B: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n\t0x2C: { n:'PtgRefN', f:parse_PtgRefN },\n\t0x2D: { n:'PtgAreaN', f:parse_PtgAreaN },\n\t0x2E: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n\t0x2F: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n\t0x39: { n:'PtgNameX', f:parse_PtgNameX },\n\t0x3A: { n:'PtgRef3d', f:parse_PtgRef3d },\n\t0x3B: { n:'PtgArea3d', f:parse_PtgArea3d },\n\t0x3C: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n\t0x3D: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n\t0xFF: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n\t0x40: 0x20, 0x60: 0x20,\n\t0x41: 0x21, 0x61: 0x21,\n\t0x42: 0x22, 0x62: 0x22,\n\t0x43: 0x23, 0x63: 0x23,\n\t0x44: 0x24, 0x64: 0x24,\n\t0x45: 0x25, 0x65: 0x25,\n\t0x46: 0x26, 0x66: 0x26,\n\t0x47: 0x27, 0x67: 0x27,\n\t0x48: 0x28, 0x68: 0x28,\n\t0x49: 0x29, 0x69: 0x29,\n\t0x4A: 0x2A, 0x6A: 0x2A,\n\t0x4B: 0x2B, 0x6B: 0x2B,\n\t0x4C: 0x2C, 0x6C: 0x2C,\n\t0x4D: 0x2D, 0x6D: 0x2D,\n\t0x4E: 0x2E, 0x6E: 0x2E,\n\t0x4F: 0x2F, 0x6F: 0x2F,\n\t0x58: 0x22, 0x78: 0x22,\n\t0x59: 0x39, 0x79: 0x39,\n\t0x5A: 0x3A, 0x7A: 0x3A,\n\t0x5B: 0x3B, 0x7B: 0x3B,\n\t0x5C: 0x3C, 0x7C: 0x3C,\n\t0x5D: 0x3D, 0x7D: 0x3D\n};\n\nvar Ptg18 = {\n\t0x01: { n:'PtgElfLel', f:parse_PtgElfLel },\n\t0x02: { n:'PtgElfRw', f:parse_PtgElfRw },\n\t0x03: { n:'PtgElfCol', f:parse_PtgElfCol },\n\t0x06: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n\t0x07: { n:'PtgElfColV', f:parse_PtgElfColV },\n\t0x0A: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n\t0x0B: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n\t0x0D: { n:'PtgElfColS', f:parse_PtgElfColS },\n\t0x0F: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n\t0x10: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n\t0x19: { n:'PtgList', f:parse_PtgList },\n\t0x1D: { n:'PtgSxName', f:parse_PtgSxName },\n\t0xFF: {}\n};\nvar Ptg19 = {\n\t0x00: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n\t0x01: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n\t0x02: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n\t0x04: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n\t0x08: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n\t0x10: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n\t0x20: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t0x21: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t0x40: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n\t0x41: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n\t0x80: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n\t0xFF: {}\n};\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id] || PtgTypes[PtgDupes[id]];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f/*:Array>*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r/*:Array*/ = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\n\t\t\t\t\t/*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n\t\t\t\t\tr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// TODO: explore space\nfunction make_3d_range(start, end) {\n\tvar s = start.lastIndexOf(\"!\"), e = end.lastIndexOf(\"!\");\n\tif(s == -1 && e == -1) return start + \":\" + end;\n\tif(s > 0 && e > 0 && start.slice(0, s).toLowerCase() == end.slice(0, e).toLowerCase()) return start + \":\" + end.slice(e+1);\n\tconsole.error(\"Cannot hydrate range\", start, end);\n\treturn start + \":\" + end;\n}\n\nfunction get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tvar ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n\treturn ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\nfunction stringify_formula(formula/*Array*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack/*:Array*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd': /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv': /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq': /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe': /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt': /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe': /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt': /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul': /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe': /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower': /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub': /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(make_3d_range(e2,e1));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\n\t\t\t\t/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\n\t\t\t\t/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]/*:any*/);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\t/* [MS-XLSB] 2.5.97.10 Ftab -- last verified 20220204 */\n\t\t\t\tif(name && name.slice(0,6) == \"_xlfn.\" && !opts.xlfn) name = name.slice(6);\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx/*:number*/ = (f[1][1]/*:any*/); nameidx = (f[1][2]/*:any*/); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||\"\").split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]/*:any*/),r:(f[1][0]/*:any*/)};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r}/*:any*/);\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t} else {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(/*::String(*/f[1]/*::)*/);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(/*::(*/f[1]/*:: :any)*/) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\tif(stack[0] == \"TRUE\") return true; if(stack[0] == \"FALSE\") return false;\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob/*::, length*/) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6, opts);\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, os/*:number*/) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n\n/* Writes a PtgNum or PtgInt */\nfunction write_XLSBFormulaNum(val/*:number*/) {\n\tif((val | 0) == val && val < Math.pow(2,16) && val >= 0) {\n\t\tvar oint = new_buf(11);\n\t\toint.write_shift(4, 3);\n\t\toint.write_shift(1, 0x1e);\n\t\toint.write_shift(2, val);\n\t\toint.write_shift(4, 0);\n\t\treturn oint;\n\t}\n\n\tvar num = new_buf(17);\n\tnum.write_shift(4, 11);\n\tnum.write_shift(1, 0x1f);\n\tnum.write_shift(8, val);\n\tnum.write_shift(4, 0);\n\treturn num;\n}\n/* Writes a PtgErr */\nfunction write_XLSBFormulaErr(val/*:number*/) {\n\tvar oint = new_buf(10);\n\toint.write_shift(4, 2);\n\toint.write_shift(1, 0x1C);\n\toint.write_shift(1, val);\n\toint.write_shift(4, 0);\n\treturn oint;\n}\n/* Writes a PtgBool */\nfunction write_XLSBFormulaBool(val/*:boolean*/) {\n\tvar oint = new_buf(10);\n\toint.write_shift(4, 2);\n\toint.write_shift(1, 0x1D);\n\toint.write_shift(1, val?1:0);\n\toint.write_shift(4, 0);\n\treturn oint;\n}\n\n/* Writes a PtgStr */\nfunction write_XLSBFormulaStr(val/*:string*/) {\n\tvar preamble = new_buf(7);\n\tpreamble.write_shift(4, 3 + 2 * val.length);\n\tpreamble.write_shift(1, 0x17);\n\tpreamble.write_shift(2, val.length);\n\n\tvar body = new_buf(2 * val.length);\n\tbody.write_shift(2 * val.length, val, \"utf16le\");\n\n\tvar postamble = new_buf(4);\n\tpostamble.write_shift(4, 0);\n\n\treturn bconcat([preamble, body, postamble]);\n}\n\n/* Writes a PtgRef */\nfunction write_XLSBFormulaRef(str) {\n\tvar cell = decode_cell(str);\n\tvar out = new_buf(15);\n\tout.write_shift(4, 7);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a PtgRef3d */\nfunction write_XLSBFormulaRef3D(str, wb) {\n\tvar lastbang = str.lastIndexOf(\"!\");\n\tvar sname = str.slice(0, lastbang);\n\tstr = str.slice(lastbang+1);\n\tvar cell = decode_cell(str);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\n\tvar out = new_buf(17);\n\tout.write_shift(4, 9);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a PtgRefErr3d */\nfunction write_XLSBFormulaRefErr3D(str, wb) {\n\tvar lastbang = str.lastIndexOf(\"!\");\n\tvar sname = str.slice(0, lastbang);\n\tstr = str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\n\tvar out = new_buf(17);\n\tout.write_shift(4, 9);\n\tout.write_shift(1, 0x1C | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, 0);\n\tout.write_shift(2, 0); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a single sheet range [PtgRef PtgRef PtgRange] */\nfunction write_XLSBFormulaRange(_str) {\n\tvar parts = _str.split(\":\"), str = parts[0];\n\n\tvar out = new_buf(23);\n\tout.write_shift(4, 15);\n\n\t/* start cell */\n\tstr = parts[0]; var cell = decode_cell(str);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\t/* end cell */\n\tstr = parts[1]; cell = decode_cell(str);\n\tout.write_shift(1, 0x04 | ((1)<<5));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\tout.write_shift(4, 0);\n\n\t/* PtgRange */\n\tout.write_shift(1, 0x11);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a range with explicit sheet name [PtgRef3D PtgRef3D PtgRange] */\nfunction write_XLSBFormulaRangeWS(_str, wb) {\n\tvar lastbang = _str.lastIndexOf(\"!\");\n\tvar sname = _str.slice(0, lastbang);\n\t_str = _str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\tvar parts = _str.split(\":\");\n\n\tvar out = new_buf(27);\n\tout.write_shift(4, 19);\n\n\t/* start cell */\n\tvar str = parts[0], cell = decode_cell(str);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\n\t/* end cell */\n\tstr = parts[1]; cell = decode_cell(str);\n\tout.write_shift(1, 0x1A | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, cell.r);\n\tout.write_shift(2, cell.c | ((str.charAt(0) == \"$\" ? 0 : 1)<<14) | ((str.match(/\\$\\d/) ? 0 : 1)<<15)); // <== ColRelShort\n\n\t/* PtgRange */\n\tout.write_shift(1, 0x11);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n/* Writes a range with explicit sheet name [PtgArea3d] */\nfunction write_XLSBFormulaArea3D(_str, wb) {\n\tvar lastbang = _str.lastIndexOf(\"!\");\n\tvar sname = _str.slice(0, lastbang);\n\t_str = _str.slice(lastbang+1);\n\tif(sname.charAt(0) == \"'\") sname = sname.slice(1, -1).replace(/''/g, \"'\");\n\tvar range = decode_range(_str);\n\n\tvar out = new_buf(23);\n\tout.write_shift(4, 15);\n\n\tout.write_shift(1, 0x1B | ((1)<<5));\n\tout.write_shift(2, 2 + wb.SheetNames.map(function(n) { return n.toLowerCase(); }).indexOf(sname.toLowerCase()));\n\tout.write_shift(4, range.s.r);\n\tout.write_shift(4, range.e.r);\n\tout.write_shift(2, range.s.c);\n\tout.write_shift(2, range.e.c);\n\n\tout.write_shift(4, 0);\n\n\treturn out;\n}\n\n\n/* General Formula */\nfunction write_XLSBFormula(val/*:string|number*/, wb) {\n\tif(typeof val == \"number\") return write_XLSBFormulaNum(val);\n\tif(typeof val == \"boolean\") return write_XLSBFormulaBool(val);\n\tif(/^#(DIV\\/0!|GETTING_DATA|N\\/A|NAME\\?|NULL!|NUM!|REF!|VALUE!)$/.test(val)) return write_XLSBFormulaErr(+RBErr[val]);\n\tif(val.match(/^\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRef(val);\n\tif(val.match(/^\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRange(val);\n\tif(val.match(/^#REF!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaArea3D(val, wb);\n\tif(val.match(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRef3D(val, wb);\n\tif(val.match(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5}):\\$?(?:[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D]|[A-Z]{1,2})\\$?(?:10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})$/)) return write_XLSBFormulaRangeWS(val, wb);\n\tif(/^(?:'[^\\\\\\/?*\\[\\]:]*'|[^'][^\\\\\\/?*\\[\\]:'`~!@#$%^()\\-=+{}|;,<.>]*)!#REF!$/.test(val)) return write_XLSBFormulaRefErr3D(val, wb);\n\tif(/^\".*\"$/.test(val)) return write_XLSBFormulaStr(val);\n\tif(/^[+-]\\d+$/.test(val)) return write_XLSBFormulaNum(parseInt(val, 10));\n\tthrow \"Formula |\" + val + \"| not supported for XLSB\";\n}\nvar write_XLSBNameParsedFormula = write_XLSBFormula;\nvar Cetab = {\n 0: \"BEEP\",\n 1: \"OPEN\",\n 2: \"OPEN.LINKS\",\n 3: \"CLOSE.ALL\",\n 4: \"SAVE\",\n 5: \"SAVE.AS\",\n 6: \"FILE.DELETE\",\n 7: \"PAGE.SETUP\",\n 8: \"PRINT\",\n 9: \"PRINTER.SETUP\",\n 10: \"QUIT\",\n 11: \"NEW.WINDOW\",\n 12: \"ARRANGE.ALL\",\n 13: \"WINDOW.SIZE\",\n 14: \"WINDOW.MOVE\",\n 15: \"FULL\",\n 16: \"CLOSE\",\n 17: \"RUN\",\n 22: \"SET.PRINT.AREA\",\n 23: \"SET.PRINT.TITLES\",\n 24: \"SET.PAGE.BREAK\",\n 25: \"REMOVE.PAGE.BREAK\",\n 26: \"FONT\",\n 27: \"DISPLAY\",\n 28: \"PROTECT.DOCUMENT\",\n 29: \"PRECISION\",\n 30: \"A1.R1C1\",\n 31: \"CALCULATE.NOW\",\n 32: \"CALCULATION\",\n 34: \"DATA.FIND\",\n 35: \"EXTRACT\",\n 36: \"DATA.DELETE\",\n 37: \"SET.DATABASE\",\n 38: \"SET.CRITERIA\",\n 39: \"SORT\",\n 40: \"DATA.SERIES\",\n 41: \"TABLE\",\n 42: \"FORMAT.NUMBER\",\n 43: \"ALIGNMENT\",\n 44: \"STYLE\",\n 45: \"BORDER\",\n 46: \"CELL.PROTECTION\",\n 47: \"COLUMN.WIDTH\",\n 48: \"UNDO\",\n 49: \"CUT\",\n 50: \"COPY\",\n 51: \"PASTE\",\n 52: \"CLEAR\",\n 53: \"PASTE.SPECIAL\",\n 54: \"EDIT.DELETE\",\n 55: \"INSERT\",\n 56: \"FILL.RIGHT\",\n 57: \"FILL.DOWN\",\n 61: \"DEFINE.NAME\",\n 62: \"CREATE.NAMES\",\n 63: \"FORMULA.GOTO\",\n 64: \"FORMULA.FIND\",\n 65: \"SELECT.LAST.CELL\",\n 66: \"SHOW.ACTIVE.CELL\",\n 67: \"GALLERY.AREA\",\n 68: \"GALLERY.BAR\",\n 69: \"GALLERY.COLUMN\",\n 70: \"GALLERY.LINE\",\n 71: \"GALLERY.PIE\",\n 72: \"GALLERY.SCATTER\",\n 73: \"COMBINATION\",\n 74: \"PREFERRED\",\n 75: \"ADD.OVERLAY\",\n 76: \"GRIDLINES\",\n 77: \"SET.PREFERRED\",\n 78: \"AXES\",\n 79: \"LEGEND\",\n 80: \"ATTACH.TEXT\",\n 81: \"ADD.ARROW\",\n 82: \"SELECT.CHART\",\n 83: \"SELECT.PLOT.AREA\",\n 84: \"PATTERNS\",\n 85: \"MAIN.CHART\",\n 86: \"OVERLAY\",\n 87: \"SCALE\",\n 88: \"FORMAT.LEGEND\",\n 89: \"FORMAT.TEXT\",\n 90: \"EDIT.REPEAT\",\n 91: \"PARSE\",\n 92: \"JUSTIFY\",\n 93: \"HIDE\",\n 94: \"UNHIDE\",\n 95: \"WORKSPACE\",\n 96: \"FORMULA\",\n 97: \"FORMULA.FILL\",\n 98: \"FORMULA.ARRAY\",\n 99: \"DATA.FIND.NEXT\",\n 100: \"DATA.FIND.PREV\",\n 101: \"FORMULA.FIND.NEXT\",\n 102: \"FORMULA.FIND.PREV\",\n 103: \"ACTIVATE\",\n 104: \"ACTIVATE.NEXT\",\n 105: \"ACTIVATE.PREV\",\n 106: \"UNLOCKED.NEXT\",\n 107: \"UNLOCKED.PREV\",\n 108: \"COPY.PICTURE\",\n 109: \"SELECT\",\n 110: \"DELETE.NAME\",\n 111: \"DELETE.FORMAT\",\n 112: \"VLINE\",\n 113: \"HLINE\",\n 114: \"VPAGE\",\n 115: \"HPAGE\",\n 116: \"VSCROLL\",\n 117: \"HSCROLL\",\n 118: \"ALERT\",\n 119: \"NEW\",\n 120: \"CANCEL.COPY\",\n 121: \"SHOW.CLIPBOARD\",\n 122: \"MESSAGE\",\n 124: \"PASTE.LINK\",\n 125: \"APP.ACTIVATE\",\n 126: \"DELETE.ARROW\",\n 127: \"ROW.HEIGHT\",\n 128: \"FORMAT.MOVE\",\n 129: \"FORMAT.SIZE\",\n 130: \"FORMULA.REPLACE\",\n 131: \"SEND.KEYS\",\n 132: \"SELECT.SPECIAL\",\n 133: \"APPLY.NAMES\",\n 134: \"REPLACE.FONT\",\n 135: \"FREEZE.PANES\",\n 136: \"SHOW.INFO\",\n 137: \"SPLIT\",\n 138: \"ON.WINDOW\",\n 139: \"ON.DATA\",\n 140: \"DISABLE.INPUT\",\n 142: \"OUTLINE\",\n 143: \"LIST.NAMES\",\n 144: \"FILE.CLOSE\",\n 145: \"SAVE.WORKBOOK\",\n 146: \"DATA.FORM\",\n 147: \"COPY.CHART\",\n 148: \"ON.TIME\",\n 149: \"WAIT\",\n 150: \"FORMAT.FONT\",\n 151: \"FILL.UP\",\n 152: \"FILL.LEFT\",\n 153: \"DELETE.OVERLAY\",\n 155: \"SHORT.MENUS\",\n 159: \"SET.UPDATE.STATUS\",\n 161: \"COLOR.PALETTE\",\n 162: \"DELETE.STYLE\",\n 163: \"WINDOW.RESTORE\",\n 164: \"WINDOW.MAXIMIZE\",\n 166: \"CHANGE.LINK\",\n 167: \"CALCULATE.DOCUMENT\",\n 168: \"ON.KEY\",\n 169: \"APP.RESTORE\",\n 170: \"APP.MOVE\",\n 171: \"APP.SIZE\",\n 172: \"APP.MINIMIZE\",\n 173: \"APP.MAXIMIZE\",\n 174: \"BRING.TO.FRONT\",\n 175: \"SEND.TO.BACK\",\n 185: \"MAIN.CHART.TYPE\",\n 186: \"OVERLAY.CHART.TYPE\",\n 187: \"SELECT.END\",\n 188: \"OPEN.MAIL\",\n 189: \"SEND.MAIL\",\n 190: \"STANDARD.FONT\",\n 191: \"CONSOLIDATE\",\n 192: \"SORT.SPECIAL\",\n 193: \"GALLERY.3D.AREA\",\n 194: \"GALLERY.3D.COLUMN\",\n 195: \"GALLERY.3D.LINE\",\n 196: \"GALLERY.3D.PIE\",\n 197: \"VIEW.3D\",\n 198: \"GOAL.SEEK\",\n 199: \"WORKGROUP\",\n 200: \"FILL.GROUP\",\n 201: \"UPDATE.LINK\",\n 202: \"PROMOTE\",\n 203: \"DEMOTE\",\n 204: \"SHOW.DETAIL\",\n 206: \"UNGROUP\",\n 207: \"OBJECT.PROPERTIES\",\n 208: \"SAVE.NEW.OBJECT\",\n 209: \"SHARE\",\n 210: \"SHARE.NAME\",\n 211: \"DUPLICATE\",\n 212: \"APPLY.STYLE\",\n 213: \"ASSIGN.TO.OBJECT\",\n 214: \"OBJECT.PROTECTION\",\n 215: \"HIDE.OBJECT\",\n 216: \"SET.EXTRACT\",\n 217: \"CREATE.PUBLISHER\",\n 218: \"SUBSCRIBE.TO\",\n 219: \"ATTRIBUTES\",\n 220: \"SHOW.TOOLBAR\",\n 222: \"PRINT.PREVIEW\",\n 223: \"EDIT.COLOR\",\n 224: \"SHOW.LEVELS\",\n 225: \"FORMAT.MAIN\",\n 226: \"FORMAT.OVERLAY\",\n 227: \"ON.RECALC\",\n 228: \"EDIT.SERIES\",\n 229: \"DEFINE.STYLE\",\n 240: \"LINE.PRINT\",\n 243: \"ENTER.DATA\",\n 249: \"GALLERY.RADAR\",\n 250: \"MERGE.STYLES\",\n 251: \"EDITION.OPTIONS\",\n 252: \"PASTE.PICTURE\",\n 253: \"PASTE.PICTURE.LINK\",\n 254: \"SPELLING\",\n 256: \"ZOOM\",\n 259: \"INSERT.OBJECT\",\n 260: \"WINDOW.MINIMIZE\",\n 265: \"SOUND.NOTE\",\n 266: \"SOUND.PLAY\",\n 267: \"FORMAT.SHAPE\",\n 268: \"EXTEND.POLYGON\",\n 269: \"FORMAT.AUTO\",\n 272: \"GALLERY.3D.BAR\",\n 273: \"GALLERY.3D.SURFACE\",\n 274: \"FILL.AUTO\",\n 276: \"CUSTOMIZE.TOOLBAR\",\n 277: \"ADD.TOOL\",\n 278: \"EDIT.OBJECT\",\n 279: \"ON.DOUBLECLICK\",\n 280: \"ON.ENTRY\",\n 281: \"WORKBOOK.ADD\",\n 282: \"WORKBOOK.MOVE\",\n 283: \"WORKBOOK.COPY\",\n 284: \"WORKBOOK.OPTIONS\",\n 285: \"SAVE.WORKSPACE\",\n 288: \"CHART.WIZARD\",\n 289: \"DELETE.TOOL\",\n 290: \"MOVE.TOOL\",\n 291: \"WORKBOOK.SELECT\",\n 292: \"WORKBOOK.ACTIVATE\",\n 293: \"ASSIGN.TO.TOOL\",\n 295: \"COPY.TOOL\",\n 296: \"RESET.TOOL\",\n 297: \"CONSTRAIN.NUMERIC\",\n 298: \"PASTE.TOOL\",\n 302: \"WORKBOOK.NEW\",\n 305: \"SCENARIO.CELLS\",\n 306: \"SCENARIO.DELETE\",\n 307: \"SCENARIO.ADD\",\n 308: \"SCENARIO.EDIT\",\n 309: \"SCENARIO.SHOW\",\n 310: \"SCENARIO.SHOW.NEXT\",\n 311: \"SCENARIO.SUMMARY\",\n 312: \"PIVOT.TABLE.WIZARD\",\n 313: \"PIVOT.FIELD.PROPERTIES\",\n 314: \"PIVOT.FIELD\",\n 315: \"PIVOT.ITEM\",\n 316: \"PIVOT.ADD.FIELDS\",\n 318: \"OPTIONS.CALCULATION\",\n 319: \"OPTIONS.EDIT\",\n 320: \"OPTIONS.VIEW\",\n 321: \"ADDIN.MANAGER\",\n 322: \"MENU.EDITOR\",\n 323: \"ATTACH.TOOLBARS\",\n 324: \"VBAActivate\",\n 325: \"OPTIONS.CHART\",\n 328: \"VBA.INSERT.FILE\",\n 330: \"VBA.PROCEDURE.DEFINITION\",\n 336: \"ROUTING.SLIP\",\n 338: \"ROUTE.DOCUMENT\",\n 339: \"MAIL.LOGON\",\n 342: \"INSERT.PICTURE\",\n 343: \"EDIT.TOOL\",\n 344: \"GALLERY.DOUGHNUT\",\n 350: \"CHART.TREND\",\n 352: \"PIVOT.ITEM.PROPERTIES\",\n 354: \"WORKBOOK.INSERT\",\n 355: \"OPTIONS.TRANSITION\",\n 356: \"OPTIONS.GENERAL\",\n 370: \"FILTER.ADVANCED\",\n 373: \"MAIL.ADD.MAILER\",\n 374: \"MAIL.DELETE.MAILER\",\n 375: \"MAIL.REPLY\",\n 376: \"MAIL.REPLY.ALL\",\n 377: \"MAIL.FORWARD\",\n 378: \"MAIL.NEXT.LETTER\",\n 379: \"DATA.LABEL\",\n 380: \"INSERT.TITLE\",\n 381: \"FONT.PROPERTIES\",\n 382: \"MACRO.OPTIONS\",\n 383: \"WORKBOOK.HIDE\",\n 384: \"WORKBOOK.UNHIDE\",\n 385: \"WORKBOOK.DELETE\",\n 386: \"WORKBOOK.NAME\",\n 388: \"GALLERY.CUSTOM\",\n 390: \"ADD.CHART.AUTOFORMAT\",\n 391: \"DELETE.CHART.AUTOFORMAT\",\n 392: \"CHART.ADD.DATA\",\n 393: \"AUTO.OUTLINE\",\n 394: \"TAB.ORDER\",\n 395: \"SHOW.DIALOG\",\n 396: \"SELECT.ALL\",\n 397: \"UNGROUP.SHEETS\",\n 398: \"SUBTOTAL.CREATE\",\n 399: \"SUBTOTAL.REMOVE\",\n 400: \"RENAME.OBJECT\",\n 412: \"WORKBOOK.SCROLL\",\n 413: \"WORKBOOK.NEXT\",\n 414: \"WORKBOOK.PREV\",\n 415: \"WORKBOOK.TAB.SPLIT\",\n 416: \"FULL.SCREEN\",\n 417: \"WORKBOOK.PROTECT\",\n 420: \"SCROLLBAR.PROPERTIES\",\n 421: \"PIVOT.SHOW.PAGES\",\n 422: \"TEXT.TO.COLUMNS\",\n 423: \"FORMAT.CHARTTYPE\",\n 424: \"LINK.FORMAT\",\n 425: \"TRACER.DISPLAY\",\n 430: \"TRACER.NAVIGATE\",\n 431: \"TRACER.CLEAR\",\n 432: \"TRACER.ERROR\",\n 433: \"PIVOT.FIELD.GROUP\",\n 434: \"PIVOT.FIELD.UNGROUP\",\n 435: \"CHECKBOX.PROPERTIES\",\n 436: \"LABEL.PROPERTIES\",\n 437: \"LISTBOX.PROPERTIES\",\n 438: \"EDITBOX.PROPERTIES\",\n 439: \"PIVOT.REFRESH\",\n 440: \"LINK.COMBO\",\n 441: \"OPEN.TEXT\",\n 442: \"HIDE.DIALOG\",\n 443: \"SET.DIALOG.FOCUS\",\n 444: \"ENABLE.OBJECT\",\n 445: \"PUSHBUTTON.PROPERTIES\",\n 446: \"SET.DIALOG.DEFAULT\",\n 447: \"FILTER\",\n 448: \"FILTER.SHOW.ALL\",\n 449: \"CLEAR.OUTLINE\",\n 450: \"FUNCTION.WIZARD\",\n 451: \"ADD.LIST.ITEM\",\n 452: \"SET.LIST.ITEM\",\n 453: \"REMOVE.LIST.ITEM\",\n 454: \"SELECT.LIST.ITEM\",\n 455: \"SET.CONTROL.VALUE\",\n 456: \"SAVE.COPY.AS\",\n 458: \"OPTIONS.LISTS.ADD\",\n 459: \"OPTIONS.LISTS.DELETE\",\n 460: \"SERIES.AXES\",\n 461: \"SERIES.X\",\n 462: \"SERIES.Y\",\n 463: \"ERRORBAR.X\",\n 464: \"ERRORBAR.Y\",\n 465: \"FORMAT.CHART\",\n 466: \"SERIES.ORDER\",\n 467: \"MAIL.LOGOFF\",\n 468: \"CLEAR.ROUTING.SLIP\",\n 469: \"APP.ACTIVATE.MICROSOFT\",\n 470: \"MAIL.EDIT.MAILER\",\n 471: \"ON.SHEET\",\n 472: \"STANDARD.WIDTH\",\n 473: \"SCENARIO.MERGE\",\n 474: \"SUMMARY.INFO\",\n 475: \"FIND.FILE\",\n 476: \"ACTIVE.CELL.FONT\",\n 477: \"ENABLE.TIPWIZARD\",\n 478: \"VBA.MAKE.ADDIN\",\n 480: \"INSERTDATATABLE\",\n 481: \"WORKGROUP.OPTIONS\",\n 482: \"MAIL.SEND.MAILER\",\n 485: \"AUTOCORRECT\",\n 489: \"POST.DOCUMENT\",\n 491: \"PICKLIST\",\n 493: \"VIEW.SHOW\",\n 494: \"VIEW.DEFINE\",\n 495: \"VIEW.DELETE\",\n 509: \"SHEET.BACKGROUND\",\n 510: \"INSERT.MAP.OBJECT\",\n 511: \"OPTIONS.MENONO\",\n 517: \"MSOCHECKS\",\n 518: \"NORMAL\",\n 519: \"LAYOUT\",\n 520: \"RM.PRINT.AREA\",\n 521: \"CLEAR.PRINT.AREA\",\n 522: \"ADD.PRINT.AREA\",\n 523: \"MOVE.BRK\",\n 545: \"HIDECURR.NOTE\",\n 546: \"HIDEALL.NOTES\",\n 547: \"DELETE.NOTE\",\n 548: \"TRAVERSE.NOTES\",\n 549: \"ACTIVATE.NOTES\",\n 620: \"PROTECT.REVISIONS\",\n 621: \"UNPROTECT.REVISIONS\",\n 647: \"OPTIONS.ME\",\n 653: \"WEB.PUBLISH\",\n 667: \"NEWWEBQUERY\",\n 673: \"PIVOT.TABLE.CHART\",\n 753: \"OPTIONS.SAVE\",\n 755: \"OPTIONS.SPELL\",\n 808: \"HIDEALL.INKANNOTS\"\n};\nvar Ftab = {\n 0: \"COUNT\",\n 1: \"IF\",\n 2: \"ISNA\",\n 3: \"ISERROR\",\n 4: \"SUM\",\n 5: \"AVERAGE\",\n 6: \"MIN\",\n 7: \"MAX\",\n 8: \"ROW\",\n 9: \"COLUMN\",\n 10: \"NA\",\n 11: \"NPV\",\n 12: \"STDEV\",\n 13: \"DOLLAR\",\n 14: \"FIXED\",\n 15: \"SIN\",\n 16: \"COS\",\n 17: \"TAN\",\n 18: \"ATAN\",\n 19: \"PI\",\n 20: \"SQRT\",\n 21: \"EXP\",\n 22: \"LN\",\n 23: \"LOG10\",\n 24: \"ABS\",\n 25: \"INT\",\n 26: \"SIGN\",\n 27: \"ROUND\",\n 28: \"LOOKUP\",\n 29: \"INDEX\",\n 30: \"REPT\",\n 31: \"MID\",\n 32: \"LEN\",\n 33: \"VALUE\",\n 34: \"TRUE\",\n 35: \"FALSE\",\n 36: \"AND\",\n 37: \"OR\",\n 38: \"NOT\",\n 39: \"MOD\",\n 40: \"DCOUNT\",\n 41: \"DSUM\",\n 42: \"DAVERAGE\",\n 43: \"DMIN\",\n 44: \"DMAX\",\n 45: \"DSTDEV\",\n 46: \"VAR\",\n 47: \"DVAR\",\n 48: \"TEXT\",\n 49: \"LINEST\",\n 50: \"TREND\",\n 51: \"LOGEST\",\n 52: \"GROWTH\",\n 53: \"GOTO\",\n 54: \"HALT\",\n 55: \"RETURN\",\n 56: \"PV\",\n 57: \"FV\",\n 58: \"NPER\",\n 59: \"PMT\",\n 60: \"RATE\",\n 61: \"MIRR\",\n 62: \"IRR\",\n 63: \"RAND\",\n 64: \"MATCH\",\n 65: \"DATE\",\n 66: \"TIME\",\n 67: \"DAY\",\n 68: \"MONTH\",\n 69: \"YEAR\",\n 70: \"WEEKDAY\",\n 71: \"HOUR\",\n 72: \"MINUTE\",\n 73: \"SECOND\",\n 74: \"NOW\",\n 75: \"AREAS\",\n 76: \"ROWS\",\n 77: \"COLUMNS\",\n 78: \"OFFSET\",\n 79: \"ABSREF\",\n 80: \"RELREF\",\n 81: \"ARGUMENT\",\n 82: \"SEARCH\",\n 83: \"TRANSPOSE\",\n 84: \"ERROR\",\n 85: \"STEP\",\n 86: \"TYPE\",\n 87: \"ECHO\",\n 88: \"SET.NAME\",\n 89: \"CALLER\",\n 90: \"DEREF\",\n 91: \"WINDOWS\",\n 92: \"SERIES\",\n 93: \"DOCUMENTS\",\n 94: \"ACTIVE.CELL\",\n 95: \"SELECTION\",\n 96: \"RESULT\",\n 97: \"ATAN2\",\n 98: \"ASIN\",\n 99: \"ACOS\",\n 100: \"CHOOSE\",\n 101: \"HLOOKUP\",\n 102: \"VLOOKUP\",\n 103: \"LINKS\",\n 104: \"INPUT\",\n 105: \"ISREF\",\n 106: \"GET.FORMULA\",\n 107: \"GET.NAME\",\n 108: \"SET.VALUE\",\n 109: \"LOG\",\n 110: \"EXEC\",\n 111: \"CHAR\",\n 112: \"LOWER\",\n 113: \"UPPER\",\n 114: \"PROPER\",\n 115: \"LEFT\",\n 116: \"RIGHT\",\n 117: \"EXACT\",\n 118: \"TRIM\",\n 119: \"REPLACE\",\n 120: \"SUBSTITUTE\",\n 121: \"CODE\",\n 122: \"NAMES\",\n 123: \"DIRECTORY\",\n 124: \"FIND\",\n 125: \"CELL\",\n 126: \"ISERR\",\n 127: \"ISTEXT\",\n 128: \"ISNUMBER\",\n 129: \"ISBLANK\",\n 130: \"T\",\n 131: \"N\",\n 132: \"FOPEN\",\n 133: \"FCLOSE\",\n 134: \"FSIZE\",\n 135: \"FREADLN\",\n 136: \"FREAD\",\n 137: \"FWRITELN\",\n 138: \"FWRITE\",\n 139: \"FPOS\",\n 140: \"DATEVALUE\",\n 141: \"TIMEVALUE\",\n 142: \"SLN\",\n 143: \"SYD\",\n 144: \"DDB\",\n 145: \"GET.DEF\",\n 146: \"REFTEXT\",\n 147: \"TEXTREF\",\n 148: \"INDIRECT\",\n 149: \"REGISTER\",\n 150: \"CALL\",\n 151: \"ADD.BAR\",\n 152: \"ADD.MENU\",\n 153: \"ADD.COMMAND\",\n 154: \"ENABLE.COMMAND\",\n 155: \"CHECK.COMMAND\",\n 156: \"RENAME.COMMAND\",\n 157: \"SHOW.BAR\",\n 158: \"DELETE.MENU\",\n 159: \"DELETE.COMMAND\",\n 160: \"GET.CHART.ITEM\",\n 161: \"DIALOG.BOX\",\n 162: \"CLEAN\",\n 163: \"MDETERM\",\n 164: \"MINVERSE\",\n 165: \"MMULT\",\n 166: \"FILES\",\n 167: \"IPMT\",\n 168: \"PPMT\",\n 169: \"COUNTA\",\n 170: \"CANCEL.KEY\",\n 171: \"FOR\",\n 172: \"WHILE\",\n 173: \"BREAK\",\n 174: \"NEXT\",\n 175: \"INITIATE\",\n 176: \"REQUEST\",\n 177: \"POKE\",\n 178: \"EXECUTE\",\n 179: \"TERMINATE\",\n 180: \"RESTART\",\n 181: \"HELP\",\n 182: \"GET.BAR\",\n 183: \"PRODUCT\",\n 184: \"FACT\",\n 185: \"GET.CELL\",\n 186: \"GET.WORKSPACE\",\n 187: \"GET.WINDOW\",\n 188: \"GET.DOCUMENT\",\n 189: \"DPRODUCT\",\n 190: \"ISNONTEXT\",\n 191: \"GET.NOTE\",\n 192: \"NOTE\",\n 193: \"STDEVP\",\n 194: \"VARP\",\n 195: \"DSTDEVP\",\n 196: \"DVARP\",\n 197: \"TRUNC\",\n 198: \"ISLOGICAL\",\n 199: \"DCOUNTA\",\n 200: \"DELETE.BAR\",\n 201: \"UNREGISTER\",\n 204: \"USDOLLAR\",\n 205: \"FINDB\",\n 206: \"SEARCHB\",\n 207: \"REPLACEB\",\n 208: \"LEFTB\",\n 209: \"RIGHTB\",\n 210: \"MIDB\",\n 211: \"LENB\",\n 212: \"ROUNDUP\",\n 213: \"ROUNDDOWN\",\n 214: \"ASC\",\n 215: \"DBCS\",\n 216: \"RANK\",\n 219: \"ADDRESS\",\n 220: \"DAYS360\",\n 221: \"TODAY\",\n 222: \"VDB\",\n 223: \"ELSE\",\n 224: \"ELSE.IF\",\n 225: \"END.IF\",\n 226: \"FOR.CELL\",\n 227: \"MEDIAN\",\n 228: \"SUMPRODUCT\",\n 229: \"SINH\",\n 230: \"COSH\",\n 231: \"TANH\",\n 232: \"ASINH\",\n 233: \"ACOSH\",\n 234: \"ATANH\",\n 235: \"DGET\",\n 236: \"CREATE.OBJECT\",\n 237: \"VOLATILE\",\n 238: \"LAST.ERROR\",\n 239: \"CUSTOM.UNDO\",\n 240: \"CUSTOM.REPEAT\",\n 241: \"FORMULA.CONVERT\",\n 242: \"GET.LINK.INFO\",\n 243: \"TEXT.BOX\",\n 244: \"INFO\",\n 245: \"GROUP\",\n 246: \"GET.OBJECT\",\n 247: \"DB\",\n 248: \"PAUSE\",\n 251: \"RESUME\",\n 252: \"FREQUENCY\",\n 253: \"ADD.TOOLBAR\",\n 254: \"DELETE.TOOLBAR\",\n 255: \"User\",\n 256: \"RESET.TOOLBAR\",\n 257: \"EVALUATE\",\n 258: \"GET.TOOLBAR\",\n 259: \"GET.TOOL\",\n 260: \"SPELLING.CHECK\",\n 261: \"ERROR.TYPE\",\n 262: \"APP.TITLE\",\n 263: \"WINDOW.TITLE\",\n 264: \"SAVE.TOOLBAR\",\n 265: \"ENABLE.TOOL\",\n 266: \"PRESS.TOOL\",\n 267: \"REGISTER.ID\",\n 268: \"GET.WORKBOOK\",\n 269: \"AVEDEV\",\n 270: \"BETADIST\",\n 271: \"GAMMALN\",\n 272: \"BETAINV\",\n 273: \"BINOMDIST\",\n 274: \"CHIDIST\",\n 275: \"CHIINV\",\n 276: \"COMBIN\",\n 277: \"CONFIDENCE\",\n 278: \"CRITBINOM\",\n 279: \"EVEN\",\n 280: \"EXPONDIST\",\n 281: \"FDIST\",\n 282: \"FINV\",\n 283: \"FISHER\",\n 284: \"FISHERINV\",\n 285: \"FLOOR\",\n 286: \"GAMMADIST\",\n 287: \"GAMMAINV\",\n 288: \"CEILING\",\n 289: \"HYPGEOMDIST\",\n 290: \"LOGNORMDIST\",\n 291: \"LOGINV\",\n 292: \"NEGBINOMDIST\",\n 293: \"NORMDIST\",\n 294: \"NORMSDIST\",\n 295: \"NORMINV\",\n 296: \"NORMSINV\",\n 297: \"STANDARDIZE\",\n 298: \"ODD\",\n 299: \"PERMUT\",\n 300: \"POISSON\",\n 301: \"TDIST\",\n 302: \"WEIBULL\",\n 303: \"SUMXMY2\",\n 304: \"SUMX2MY2\",\n 305: \"SUMX2PY2\",\n 306: \"CHITEST\",\n 307: \"CORREL\",\n 308: \"COVAR\",\n 309: \"FORECAST\",\n 310: \"FTEST\",\n 311: \"INTERCEPT\",\n 312: \"PEARSON\",\n 313: \"RSQ\",\n 314: \"STEYX\",\n 315: \"SLOPE\",\n 316: \"TTEST\",\n 317: \"PROB\",\n 318: \"DEVSQ\",\n 319: \"GEOMEAN\",\n 320: \"HARMEAN\",\n 321: \"SUMSQ\",\n 322: \"KURT\",\n 323: \"SKEW\",\n 324: \"ZTEST\",\n 325: \"LARGE\",\n 326: \"SMALL\",\n 327: \"QUARTILE\",\n 328: \"PERCENTILE\",\n 329: \"PERCENTRANK\",\n 330: \"MODE\",\n 331: \"TRIMMEAN\",\n 332: \"TINV\",\n 334: \"MOVIE.COMMAND\",\n 335: \"GET.MOVIE\",\n 336: \"CONCATENATE\",\n 337: \"POWER\",\n 338: \"PIVOT.ADD.DATA\",\n 339: \"GET.PIVOT.TABLE\",\n 340: \"GET.PIVOT.FIELD\",\n 341: \"GET.PIVOT.ITEM\",\n 342: \"RADIANS\",\n 343: \"DEGREES\",\n 344: \"SUBTOTAL\",\n 345: \"SUMIF\",\n 346: \"COUNTIF\",\n 347: \"COUNTBLANK\",\n 348: \"SCENARIO.GET\",\n 349: \"OPTIONS.LISTS.GET\",\n 350: \"ISPMT\",\n 351: \"DATEDIF\",\n 352: \"DATESTRING\",\n 353: \"NUMBERSTRING\",\n 354: \"ROMAN\",\n 355: \"OPEN.DIALOG\",\n 356: \"SAVE.DIALOG\",\n 357: \"VIEW.GET\",\n 358: \"GETPIVOTDATA\",\n 359: \"HYPERLINK\",\n 360: \"PHONETIC\",\n 361: \"AVERAGEA\",\n 362: \"MAXA\",\n 363: \"MINA\",\n 364: \"STDEVPA\",\n 365: \"VARPA\",\n 366: \"STDEVA\",\n 367: \"VARA\",\n 368: \"BAHTTEXT\",\n 369: \"THAIDAYOFWEEK\",\n 370: \"THAIDIGIT\",\n 371: \"THAIMONTHOFYEAR\",\n 372: \"THAINUMSOUND\",\n 373: \"THAINUMSTRING\",\n 374: \"THAISTRINGLENGTH\",\n 375: \"ISTHAIDIGIT\",\n 376: \"ROUNDBAHTDOWN\",\n 377: \"ROUNDBAHTUP\",\n 378: \"THAIYEAR\",\n 379: \"RTD\",\n 380: \"CUBEVALUE\",\n 381: \"CUBEMEMBER\",\n 382: \"CUBEMEMBERPROPERTY\",\n 383: \"CUBERANKEDMEMBER\",\n 384: \"HEX2BIN\",\n 385: \"HEX2DEC\",\n 386: \"HEX2OCT\",\n 387: \"DEC2BIN\",\n 388: \"DEC2HEX\",\n 389: \"DEC2OCT\",\n 390: \"OCT2BIN\",\n 391: \"OCT2HEX\",\n 392: \"OCT2DEC\",\n 393: \"BIN2DEC\",\n 394: \"BIN2OCT\",\n 395: \"BIN2HEX\",\n 396: \"IMSUB\",\n 397: \"IMDIV\",\n 398: \"IMPOWER\",\n 399: \"IMABS\",\n 400: \"IMSQRT\",\n 401: \"IMLN\",\n 402: \"IMLOG2\",\n 403: \"IMLOG10\",\n 404: \"IMSIN\",\n 405: \"IMCOS\",\n 406: \"IMEXP\",\n 407: \"IMARGUMENT\",\n 408: \"IMCONJUGATE\",\n 409: \"IMAGINARY\",\n 410: \"IMREAL\",\n 411: \"COMPLEX\",\n 412: \"IMSUM\",\n 413: \"IMPRODUCT\",\n 414: \"SERIESSUM\",\n 415: \"FACTDOUBLE\",\n 416: \"SQRTPI\",\n 417: \"QUOTIENT\",\n 418: \"DELTA\",\n 419: \"GESTEP\",\n 420: \"ISEVEN\",\n 421: \"ISODD\",\n 422: \"MROUND\",\n 423: \"ERF\",\n 424: \"ERFC\",\n 425: \"BESSELJ\",\n 426: \"BESSELK\",\n 427: \"BESSELY\",\n 428: \"BESSELI\",\n 429: \"XIRR\",\n 430: \"XNPV\",\n 431: \"PRICEMAT\",\n 432: \"YIELDMAT\",\n 433: \"INTRATE\",\n 434: \"RECEIVED\",\n 435: \"DISC\",\n 436: \"PRICEDISC\",\n 437: \"YIELDDISC\",\n 438: \"TBILLEQ\",\n 439: \"TBILLPRICE\",\n 440: \"TBILLYIELD\",\n 441: \"PRICE\",\n 442: \"YIELD\",\n 443: \"DOLLARDE\",\n 444: \"DOLLARFR\",\n 445: \"NOMINAL\",\n 446: \"EFFECT\",\n 447: \"CUMPRINC\",\n 448: \"CUMIPMT\",\n 449: \"EDATE\",\n 450: \"EOMONTH\",\n 451: \"YEARFRAC\",\n 452: \"COUPDAYBS\",\n 453: \"COUPDAYS\",\n 454: \"COUPDAYSNC\",\n 455: \"COUPNCD\",\n 456: \"COUPNUM\",\n 457: \"COUPPCD\",\n 458: \"DURATION\",\n 459: \"MDURATION\",\n 460: \"ODDLPRICE\",\n 461: \"ODDLYIELD\",\n 462: \"ODDFPRICE\",\n 463: \"ODDFYIELD\",\n 464: \"RANDBETWEEN\",\n 465: \"WEEKNUM\",\n 466: \"AMORDEGRC\",\n 467: \"AMORLINC\",\n 468: \"CONVERT\",\n 724: \"SHEETJS\",\n 469: \"ACCRINT\",\n 470: \"ACCRINTM\",\n 471: \"WORKDAY\",\n 472: \"NETWORKDAYS\",\n 473: \"GCD\",\n 474: \"MULTINOMIAL\",\n 475: \"LCM\",\n 476: \"FVSCHEDULE\",\n 477: \"CUBEKPIMEMBER\",\n 478: \"CUBESET\",\n 479: \"CUBESETCOUNT\",\n 480: \"IFERROR\",\n 481: \"COUNTIFS\",\n 482: \"SUMIFS\",\n 483: \"AVERAGEIF\",\n 484: \"AVERAGEIFS\"\n};\nvar FtabArgc = {\n 2: 1,\n 3: 1,\n 10: 0,\n 15: 1,\n 16: 1,\n 17: 1,\n 18: 1,\n 19: 0,\n 20: 1,\n 21: 1,\n 22: 1,\n 23: 1,\n 24: 1,\n 25: 1,\n 26: 1,\n 27: 2,\n 30: 2,\n 31: 3,\n 32: 1,\n 33: 1,\n 34: 0,\n 35: 0,\n 38: 1,\n 39: 2,\n 40: 3,\n 41: 3,\n 42: 3,\n 43: 3,\n 44: 3,\n 45: 3,\n 47: 3,\n 48: 2,\n 53: 1,\n 61: 3,\n 63: 0,\n 65: 3,\n 66: 3,\n 67: 1,\n 68: 1,\n 69: 1,\n 70: 1,\n 71: 1,\n 72: 1,\n 73: 1,\n 74: 0,\n 75: 1,\n 76: 1,\n 77: 1,\n 79: 2,\n 80: 2,\n 83: 1,\n 85: 0,\n 86: 1,\n 89: 0,\n 90: 1,\n 94: 0,\n 95: 0,\n 97: 2,\n 98: 1,\n 99: 1,\n 101: 3,\n 102: 3,\n 105: 1,\n 106: 1,\n 108: 2,\n 111: 1,\n 112: 1,\n 113: 1,\n 114: 1,\n 117: 2,\n 118: 1,\n 119: 4,\n 121: 1,\n 126: 1,\n 127: 1,\n 128: 1,\n 129: 1,\n 130: 1,\n 131: 1,\n 133: 1,\n 134: 1,\n 135: 1,\n 136: 2,\n 137: 2,\n 138: 2,\n 140: 1,\n 141: 1,\n 142: 3,\n 143: 4,\n 144: 4,\n 161: 1,\n 162: 1,\n 163: 1,\n 164: 1,\n 165: 2,\n 172: 1,\n 175: 2,\n 176: 2,\n 177: 3,\n 178: 2,\n 179: 1,\n 184: 1,\n 186: 1,\n 189: 3,\n 190: 1,\n 195: 3,\n 196: 3,\n 197: 1,\n 198: 1,\n 199: 3,\n 201: 1,\n 207: 4,\n 210: 3,\n 211: 1,\n 212: 2,\n 213: 2,\n 214: 1,\n 215: 1,\n 225: 0,\n 229: 1,\n 230: 1,\n 231: 1,\n 232: 1,\n 233: 1,\n 234: 1,\n 235: 3,\n 244: 1,\n 247: 4,\n 252: 2,\n 257: 1,\n 261: 1,\n 271: 1,\n 273: 4,\n 274: 2,\n 275: 2,\n 276: 2,\n 277: 3,\n 278: 3,\n 279: 1,\n 280: 3,\n 281: 3,\n 282: 3,\n 283: 1,\n 284: 1,\n 285: 2,\n 286: 4,\n 287: 3,\n 288: 2,\n 289: 4,\n 290: 3,\n 291: 3,\n 292: 3,\n 293: 4,\n 294: 1,\n 295: 3,\n 296: 1,\n 297: 3,\n 298: 1,\n 299: 2,\n 300: 3,\n 301: 3,\n 302: 4,\n 303: 2,\n 304: 2,\n 305: 2,\n 306: 2,\n 307: 2,\n 308: 2,\n 309: 3,\n 310: 2,\n 311: 2,\n 312: 2,\n 313: 2,\n 314: 2,\n 315: 2,\n 316: 4,\n 325: 2,\n 326: 2,\n 327: 2,\n 328: 2,\n 331: 2,\n 332: 2,\n 337: 2,\n 342: 1,\n 343: 1,\n 346: 2,\n 347: 1,\n 350: 4,\n 351: 3,\n 352: 1,\n 353: 2,\n 360: 1,\n 368: 1,\n 369: 1,\n 370: 1,\n 371: 1,\n 372: 1,\n 373: 1,\n 374: 1,\n 375: 1,\n 376: 1,\n 377: 1,\n 378: 1,\n 382: 3,\n 385: 1,\n 392: 1,\n 393: 1,\n 396: 2,\n 397: 2,\n 398: 2,\n 399: 1,\n 400: 1,\n 401: 1,\n 402: 1,\n 403: 1,\n 404: 1,\n 405: 1,\n 406: 1,\n 407: 1,\n 408: 1,\n 409: 1,\n 410: 1,\n 414: 4,\n 415: 1,\n 416: 1,\n 417: 2,\n 420: 1,\n 421: 1,\n 422: 2,\n 424: 1,\n 425: 2,\n 426: 2,\n 427: 2,\n 428: 2,\n 430: 3,\n 438: 3,\n 439: 3,\n 440: 3,\n 443: 2,\n 444: 2,\n 445: 2,\n 446: 2,\n 447: 6,\n 448: 6,\n 449: 2,\n 450: 2,\n 464: 2,\n 468: 3,\n 476: 2,\n 479: 1,\n 480: 2,\n 65535: 0\n};\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f/*:string*/)/*:string*/ {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\tf = f.replace(/\\$'([^']|'')+'/g, function($$) { return $$.slice(1); });\n\tf = f.replace(/\\$([^\\]\\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})?$/) ? $$ : $1; });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f/*:string*/)/*:string*/ {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {\n\tr = r.replace(/\\$'([^']|'')+'/g, function($$) { return $$.slice(1); });\n\tr = r.replace(/\\$([^\\]\\. #$]+)/g, function($$, $1) { return ($1).match(/^([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])?(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})?$/) ? $$ : $1; });\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r/*:string*/)/*:string*/ {\n\treturn r.replace(/!/,\".\").replace(/:/, \":.\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}/*:any*/); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C/*:number*/, col) {\n\tvar p = ({min:C+1,max:C+1}/*:any*/);\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\tif(col.level != null) { p.outlineLevel = p.level = col.level; }\n\treturn p;\n}\n\nfunction default_margins(margins/*:Margins*/, mode/*:?string*/) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left == null) margins.left = defs[0];\n\tif(margins.right == null) margins.right = defs[1];\n\tif(margins.top == null) margins.top = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles/*:Array*/, cell/*:Cell*/, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF__load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, themes, styles, date1904) {\n\ttry {\n\t\tif(opts.cellNF) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z' && !opts.cellStyles) return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif((!opts || opts.cellText !== false) && p.t !== 'z') try {\n\t\tif(table_fmt[fmtid] == null) SSF__load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v, !!date1904);\n\t\t\t\tif((dd|0) === dd) p.w = dd.toString(10);\n\t\t\t\telse p.w = SSF_general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF_general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF_format(fmtid,datenum(p.v, !!date1904),_ssfopts);\n\t\telse p.w = SSF_format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {\n\tvar d = safe_decode_range(s);\n\tif(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);\n}\nvar mergecregex = /<(?:\\w+:)?mergeCell ref=[\"'][A-Z0-9:]+['\"]\\s*[\\/]?>/g;\nvar hlinkregex = /<(?:\\w+:)?hyperlink [^<>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w+:)?col\\b[^<>]*[\\/]?>/g;\nvar afregex = /<(?:\\w+:)?autoFilter[^>]*/g;\nvar marginregex= /<(?:\\w+:)?pageMargins[^<>]*\\/>/g;\nvar sheetprregex = /<(?:\\w+:)?sheetPr\\b[^<>]*?\\/>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = ({}/*:any*/); if(opts.dense) s[\"!data\"] = [];\n\tvar refguess/*:Range*/ = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} }/*:any*/);\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch/*:?any*/ = str_match_xml_ns(data, \"sheetData\");\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\telse if((sheetPr = str_match_xml_ns(data1, \"sheetPr\"))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||\"\", s, wb, idx, styles, themes);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref && !(opts && opts.nodim)) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = str_match_xml_ns(data1, \"sheetViews\");\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns/*:Array*/ = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles, wb);\n\n\t/* 18.3.1.2 autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges/*:Array*/ = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\t/* legacyDrawing */\n\tvar m;\n\tif((m = data2.match(/legacyDrawing r:id=\"(.*?)\"/))) s['!legrel'] = m[1];\n\n\tif(opts && opts.nodim) refguess.s.c = refguess.s.r = 0;\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(rels['!id'][s['!legrel']]) s['!legdrawel'] = rels['!id'][s['!legrel']];\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges/*:Array*/)/*:string*/ {\n\tif(merges.length === 0) return \"\";\n\tvar o = '';\n\tfor(var i = 0; i != merges.length; ++i) o += '';\n\treturn o + '';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\nfunction parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tparse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = utf8write(escapexml(cname));\n\t}\n\n\tif(ws && ws[\"!outline\"]) {\n\t\tvar outlineprops = {summaryBelow:1, summaryRight:1};\n\t\tif(ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n\t\tif(ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n\t\tpayload = (payload||\"\") + writextag('outlinePr', null, outlineprops);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp)/*:string*/ {\n\t// algorithmName, hashValue, saltValue, spinCount\n\tvar o = ({sheet:1}/*:any*/);\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data/*:Array*/, rels) {\n\tvar dense = s[\"!data\"] != null;\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+unescapexml(val.location);\n\t\t} else {\n\t\t\tval.Target = \"#\" + unescapexml(val.location);\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_col(C) + encode_row(R);\n\t\t\tif(dense) {\n\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\tif(!s[\"!data\"][R][C]) s[\"!data\"][R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[\"!data\"][R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin)/*:string*/ {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tif(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0);\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols)/*:string*/ {\n\tvar o = [\"\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data/*:string*/) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref); break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^<>a-z][^<>]*)?\\/?>/g;\nfunction parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r/*:string*/, i/*:number*/) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;\n\t\t// $FlowIgnore\n\t\tif(tag.rightToLeft && parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {\n\tvar sview = ({workbookViewId:\"0\"}/*:any*/);\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts, idx, wb, date1904)/*:string*/ {\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\tif((cell.v === undefined || cell.t === \"z\" && !(opts||{}).sheetStubs) && typeof cell.f !== \"string\" && typeof cell.z == \"undefined\") return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n':\n\t\t\tif(isNaN(cell.v)) { cell.t = \"e\"; vv = BErr[cell.v = 0x24]; } // #NUM!\n\t\t\telse if(!isFinite(cell.v)) { cell.t = \"e\"; vv = BErr[cell.v = 0x07]; } // #DIV/0!\n\t\t\telse vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) {\n\t\t\t\tvar _vv = parseDate(cell.v, date1904);\n\t\t\t\tvv = _vv.toISOString();\n\t\t\t\tif(_vv.getUTCFullYear() < 1900) vv = vv.slice(vv.indexOf(\"T\") + 1).replace(\"Z\",\"\");\n\t\t\t} else {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v, date1904), date1904));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = table_fmt[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = (cell.t == \"z\" || cell.v == null)? \"\" : writetag('v', escapexml(vv)), o = ({r:ref}/*:any*/);\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\telse o.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) {\n\t\tcell.l.display = escapexml(vv);\n\t\tws['!links'].push([ref, cell.l]);\n\t}\n\tif(cell.D) o.cm = 1;\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = /*#__PURE__*/(function() {\n\tvar cellregex = /<(?:\\w+:)?c[ \\/>]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\nreturn function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, themes, styles, wb) {\n\tvar ri = 0, x = \"\", cells/*:Array*/ = [], cref/*:?Array*/ = [], idx=0, i=0, cc=0, d=\"\", p/*:any*/;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = [];\n\tvar dense = s[\"!data\"] != null;\n\tvar rows/*:Array*/ = [], rowobj = {}, rowrite = false;\n\tvar sheetStubs = !!opts.sheetStubs;\n\tvar date1904 = !!((wb||{}).WBProps||{}).date1904;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tvar rstarti = 0;\n\t\touta: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) {\n\t\t\tcase \">\" /*62*/:\n\t\t\t\tif(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != \"/\") { ++ri; break outa; }\n\t\t\t\tif(opts && opts.cellStyles) {\n\t\t\t\t\t// TODO: avoid duplication\n\t\t\t\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\t\t\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\t\t\t\trowobj = {}; rowrite = false;\n\t\t\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\t\t\tif(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }\n\t\t\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"<\" /*60*/: rstarti = ri; break;\n\t\t}\n\t\tif(rstarti >= ri) break;\n\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(!opts.nodim) {\n\t\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\t\t}\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden && parsexmlbool(tag.hidden)) { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"}/*:any*/);\n\n\t\t\tif((cref=str_match_xml_ns(d, \"v\"))!= null && /*::cref != null && */cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=str_match_xml_ns(d, \"f\"))!= null /*:: && cref != null*/) {\n\t\t\t\t\tif(cref[1] == \"\") {\n\t\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\t\tp.f=unescapexml(utf8read(cref[1]), true);\n\t\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t\t} else if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? unescapexml(utf8read(p.v), true) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = str_match_xml_ns(d, \"is\");\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, date1904);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, date1904), date1904); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles, date1904);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && fmt_is_date(table_fmt[fmtid])) { p.v = numdate(p.v + (date1904 ? 1462 : 0)); p.t = typeof p.v == \"number\" ? 'n' : 'd'; }\n\t\t\tif(tag.cm && opts.xlmeta) {\n\t\t\t\tvar cm = (opts.xlmeta.Cell||[])[+tag.cm-1];\n\t\t\t\tif(cm && cm.type == 'XLDAPR') p.D = true;\n\t\t\t}\n\t\t\tvar _r;\n\t\t\tif(opts.nodim) {\n\t\t\t\t_r = decode_cell(tag.r);\n\t\t\t\tif(guess.s.r > _r.r) guess.s.r = _r.r;\n\t\t\t\tif(guess.e.r < _r.r) guess.e.r = _r.r;\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\t_r = decode_cell(tag.r);\n\t\t\t\tif(!s[\"!data\"][_r.r]) s[\"!data\"][_r.r] = [];\n\t\t\t\ts[\"!data\"][_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*//*::, rels*/)/*:string*/ {\n\tvar o/*:Array*/ = [], r/*:Array*/ = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols/*:Array*/ = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = ws[\"!data\"] != null;\n\tvar params = ({r:rr}/*:any*/), row/*:RowInfo*/, height = -1;\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[\"!data\"][R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb, date1904)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr}/*:any*/);\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1}/*:any*/);\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nfunction write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, writextag('worksheet', null, {\n\t\t'xmlns': XMLNS_main[0],\n\t\t'xmlns:r': XMLNS.r\n\t})];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = (''); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect']) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(/*::(*/ws['!links']/*::||[])*/.length > 0) {\n\t\to[o.length] = \"\";\n\t\t/*::(*/ws['!links']/*::||[])*/.forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]}/*:any*/);\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#[\\s\\S]*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\trel.display = l[1].display;\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({}/*:any*/);\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R/*:number*/, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = dense ? (ws[\"!data\"][caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 0x0000 /* BrtRowHdr */, o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo(/*::data, length*/) {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\tvar f = data[data.l]; ++data.l;\n\tz.above = !(f & 0x40);\n\tz.left = !(f & 0x80);\n\t/* TODO: pull flags */\n\tdata.l += 18;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, outl, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tvar f = 0xC0;\n\tif(outl) {\n\t\tif(outl.above) f &= ~0x40;\n\t\tif(outl.left) f &= ~0x80;\n\t}\n\to.write_shift(1, f);\n\tfor(var i = 1; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\nfunction parse_BrtShortBlank(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\treturn [cell];\n}\nfunction write_BrtShortBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(4);\n\treturn write_XLSBShortCell(ncell, o);\n}\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\nfunction parse_BrtShortBool(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtShortBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(5);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtCellError(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v);\n\treturn o;\n}\nfunction parse_BrtShortError(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtShortError(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v);\n\to.write_shift(2, 0);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\nfunction parse_BrtShortIsst(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtShortIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortReal(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortRk(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtCellRString */\nfunction parse_BrtCellRString(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RichStr(data);\n\treturn [cell, value, 'is'];\n}\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tvar data = cell.v == null ? \"\" : String(cell.v);\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(data, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction parse_BrtShortSt(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtShortSt(cell, ncell, o) {\n\tvar data = cell.v == null ? \"\" : String(cell.v);\n\tif(o == null) o = new_buf(8 + 4 * data.length);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_XLWideString(data, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length/*::, opts*/) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display}/*:any*/);\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C/*:number*/, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {\n\tvar margins = ({}/*:any*/);\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins/*:Margins*/, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins/*:any*/)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data/*::, length, opts*/) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\", false], // fObjects\n\t\t[\"scenarios\", false], // fScenarios\n\t\t[\"formatCells\", true], // fFormatCells\n\t\t[\"formatColumns\", true], // fFormatColumns\n\t\t[\"formatRows\", true], // fFormatRows\n\t\t[\"insertColumns\", true], // fInsertColumns\n\t\t[\"insertRows\", true], // fInsertRows\n\t\t[\"insertHyperlinks\", true], // fInsertHyperlinks\n\t\t[\"deleteColumns\", true], // fDeleteColumns\n\t\t[\"deleteRows\", true], // fDeleteRows\n\t\t[\"selectLockedCells\", false], // fSelLockedCells\n\t\t[\"sort\", true], // fSort\n\t\t[\"autoFilter\", true], // fAutoFilter\n\t\t[\"pivotTables\", true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false] // fSelUnlockedCells\n\t].forEach(function(n) {\n\t\t/*:: if(o == null) throw \"unreachable\"; */\n\t\tif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s/*:Worksheet*/ = ({}); if(opts.dense) s[\"!data\"] = [];\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state/*:Array*/ = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell/*:Cell*/;\n\tvar merges/*:Array*/ = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || /*::(*/wb/*:: :any)*/.supbooks || ([[]]/*:any*/);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtShortReal\", f:parse_BrtShortReal };\n\n\tvar cm, vm;\n\tvar date1904 = 1462 * +!!((wb||{}).WBProps||{}).date1904;\n\n\trecordhopper(data, function ws_parse(val, RR, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\tcase 0x000D: /* 'BrtShortRk' */\n\t\t\tcase 0x000E: /* 'BrtShortError' */\n\t\t\tcase 0x000F: /* 'BrtShortBool' */\n\t\t\tcase 0x0010: /* 'BrtShortReal' */\n\t\t\tcase 0x0011: /* 'BrtShortSt' */\n\t\t\tcase 0x0012: /* 'BrtShortIsst' */\n\t\t\tcase 0x003E: /* 'BrtCellRString' */\n\t\t\t\tp = ({t:val[2]}/*:any*/);\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t\tcase 'is': p.t = 's'; p.v = val[1].t; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles, date1904>0);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[\"!data\"][R]) s[\"!data\"][R] = []; s[\"!data\"][R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && fmt_is_date(table_fmt[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF_parse_date_code(p.v + date1904); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }\n\t\t\t\t}\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\tcase 0x000C: /* 'BrtShortBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:void 0}/*:any*/);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[\"!data\"][R]) s[\"!data\"][R] = []; s[\"!data\"][R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(cm) {\n\t\t\t\t\tif(cm.type == 'XLDAPR') p.D = true;\n\t\t\t\t\tcm = void 0;\n\t\t\t\t}\n\t\t\t\tif(vm) vm = void 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x0031: { /* 'BrtCellMeta' */\n\t\t\t\tcm = ((opts.xlmeta||{}).Cell||[])[val-1];\n\t\t\t} break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[\"!data\"][R]) s[\"!data\"][R] = [];\n\t\t\t\t\t\tif(!s[\"!data\"][R][C]) s[\"!data\"][R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[\"!data\"][R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_col(C) + encode_row(R);\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[\"!data\"][R][C] : s[encode_col(C) + rr])/*:any*/);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[\"!data\"][R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\t\tif(val) s[\"!legrel\"] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tif(val.above || val.left) s['!outline'] = { above: val.above, left: val.left };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(RR.T){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\tif(rels['!id'][s['!legrel']]) s['!legdrawel'] = rels['!id'][s['!legrel']];\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ws/*:Worksheet*/, last_seen/*:boolean*/, date1904/*:boolean*/)/*:boolean*/ {\n\tvar o/*:any*/ = ({r:R, c:C}/*:any*/);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tif(cell.v === undefined) return false;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || table_fmt[14];\n\t\t\tcell.v = datenum(parseDate(cell.v, date1904), date1904); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v == null ? \"\" : String(cell.v)/*:any*/), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\tif(last_seen) write_record(ba, 0x0012 /* BrtShortIsst */, write_BrtShortIsst(cell, o));\n\t\t\t\telse write_record(ba, 0x0007 /* BrtCellIsst */, write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\tif(last_seen) write_record(ba, 0x0011 /* BrtShortSt */, write_BrtShortSt(cell, o));\n\t\t\t\telse write_record(ba, 0x0006 /* BrtCellSt */, write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn true;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000D /* BrtShortRk */, write_BrtShortRk(cell, o));\n\t\t\t\telse write_record(ba, 0x0002 /* BrtCellRk */, write_BrtCellRk(cell, o));\n\t\t\t} else if(isNaN(cell.v)) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:\"e\", v: 0x24}, o)); // #NUM!\n\t\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:\"e\", v: 0x24}, o)); // #NUM!\n\t\t\t} else if(!isFinite(cell.v)) {\n\t\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError({t:\"e\", v: 0x07}, o)); // #DIV/0!\n\t\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError({t:\"e\", v: 0x07}, o)); // #DIV/0!\n\t\t\t} else {\n\t\t\t\tif(last_seen) write_record(ba, 0x0010 /* BrtShortReal */, write_BrtShortReal(cell, o));\n\t\t\t\telse write_record(ba, 0x0005 /* BrtCellReal */, write_BrtCellReal(cell, o));\n\t\t\t} return true;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\tif(last_seen) write_record(ba, 0x000F /* BrtShortBool */, write_BrtShortBool(cell, o));\n\t\t\telse write_record(ba, 0x0004 /* BrtCellBool */, write_BrtCellBool(cell, o));\n\t\t\treturn true;\n\t\tcase 'e':\n\t\t\to.t = \"e\";\n\t\t\tif(last_seen) write_record(ba, 0x000E /* BrtShortError */, write_BrtShortError(cell, o));\n\t\t\telse write_record(ba, 0x0003 /* BrtCellError */, write_BrtCellError(cell, o));\n\t\t\treturn true;\n\t}\n\tif(last_seen) write_record(ba, 0x000C /* BrtShortBlank */, write_BrtShortBlank(cell, o));\n\telse write_record(ba, 0x0001 /* BrtCellBlank */, write_BrtCellBlank(cell, o));\n\treturn true;\n}\n\nfunction write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts, wb/*:Workbook*/) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols/*:Array*/ = [];\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\twrite_record(ba, 0x0091 /* BrtBeginSheetData */);\n\tvar dense = ws[\"!data\"] != null;\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tvar last_seen = false;\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\tif(!cell) { last_seen = false; continue; }\n\t\t\t/* write cell */\n\t\t\tlast_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen, date1904);\n\t\t}\n\t}\n\twrite_record(ba, 0x0092 /* BrtEndSheetData */);\n}\n\nfunction write_MERGECELLS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 0x00B1 /* BrtBeginMergeCells */, write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 0x00B0 /* BrtMergeCell */, write_BrtMergeCell(m)); });\n\twrite_record(ba, 0x00B2 /* BrtEndMergeCells */);\n}\n\nfunction write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:Workbook*/) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 0x0186 /* BrtBeginColInfos */);\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 0x003C /* 'BrtColInfo' */, write_BrtColInfo(i, m)); });\n\twrite_record(ba, 0x0187 /* BrtEndColInfos */);\n}\n\nfunction write_IGNOREECS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 0x0288 /* BrtBeginCellIgnoreECs */);\n\twrite_record(ba, 0x0289 /* BrtCellIgnoreEC */, write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 0x028A /* BrtEndCellIgnoreECs */);\n}\n\nfunction write_HLINKS(ba, ws/*:Worksheet*/, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#[\\s\\S]*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, 0x01EE /* BrtHLink */, write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, 0x0227 /* BrtLegacyDrawing */, write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref); break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: formula_quote_sheet_name(wb.SheetNames[idx]) + \"!\" + fix_range(ref) });\n\n\twrite_record(ba, 0x00A1 /* BrtBeginAFilter */, write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, 0x00A2 /* BrtEndAFilter */);\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, 0x0085 /* BrtBeginWsViews */);\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, 0x0089 /* BrtBeginWsView */, write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, 0x008A /* BrtEndWsView */);\n\t}\n\t/* *FRT */\n\twrite_record(ba, 0x0086 /* BrtEndWsViews */);\n}\n\nfunction write_WSFMTINFO(/*::ba, ws*/) {\n\t/* [ACWSFMTINFO] */\n\t// write_record(ba, 0x01E5 /* BrtWsFmtInfo */, write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, 0x0217 /* BrtSheetProtection */, write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c/*:string*/ = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n\tif(wb.vbaraw || ws['!outline']) write_record(ba, 0x0093 /* BrtWsProp */, write_BrtWsProp(c, ws['!outline']));\n\twrite_record(ba, 0x0094 /* BrtWsDim */, write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, 0x01DC /* BrtMargins */, write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n\treturn ba.end();\n}\nfunction parse_Cache(data/*:string*/)/*:[Array, string, ?string]*/ {\n\tvar col/*:Array*/ = [];\n\tvar num = data.match(/^/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/\\/]*>([^<])<\\/c:v><\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/\\/]*>([^<]*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((str_match_xml(data, \"c:formatCode\") || [\"\",\"General\"])[1]);\n\n\t(str_match_ng(data, \"\", \"\")||[]).forEach(function(F) { f = F.replace(/<[^<>]*>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, csheet) {\n\tvar cs/*:Worksheet*/ = ((csheet || {\"!type\":\"chart\"})/*:any*/);\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(str_match_ng(data, \"\", \"\")||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tif(cs[\"!data\"]) {\n\t\t\t\tif(!cs[\"!data\"][i]) cs[\"!data\"][i] = [];\n\t\t\t\tcs[\"!data\"][i][C] = {t:'n', v:n, z:cache[1] };\n\t\t\t} else cs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"}/*:any*/);\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\n//function write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n//\tvar o = [XML_HEADER, writextag('chartsheet', null, {\n//\t\t'xmlns': XMLNS_main[0],\n//\t\t'xmlns:r': XMLNS.r\n//\t})];\n//\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n//\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n//\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n//\treturn o.join(\"\");\n//}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length/*:number*/) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T > 0) state.push(RT);\n\t\t\t\telse if(R.T < 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\n//function write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {\n//\tvar ba = buf_array();\n//\twrite_record(ba, 0x0081 /* BrtBeginSheet */);\n//\t/* [BrtCsProp] */\n//\t/* CSVIEWS */\n//\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n//\t/* [USERCSVIEWS] */\n//\t/* [BrtMargins] */\n//\t/* [BrtCsPageSetup] */\n//\t/* [HEADERFOOTER] */\n//\t/* BrtDrawing */\n//\t/* [BrtLegacyDrawing] */\n//\t/* [BrtLegacyDrawingHF] */\n//\t/* [BrtBkHim] */\n//\t/* [WEBPUBITEMS] */\n//\t/* FRTCHARTSHEET */\n//\twrite_record(ba, 0x0082 /* BrtEndSheet */);\n//\treturn ba.end();\n//}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery', false, \"bool\"],\n\t['autoCompressPictures', true, \"bool\"],\n\t['backupFile', false, \"bool\"],\n\t['checkCompatibility', false, \"bool\"],\n\t['CodeName', ''],\n\t['date1904', false, \"bool\"],\n\t['defaultThemeVersion', 0, \"int\"],\n\t['filterPrivacy', false, \"bool\"],\n\t['hidePivotFieldList', false, \"bool\"],\n\t['promptedSolutions', false, \"bool\"],\n\t['publishItems', false, \"bool\"],\n\t['refreshAllConnections', false, \"bool\"],\n\t['saveExternalLinkValues', true, \"bool\"],\n\t['showBorderUnselectedTables', true, \"bool\"],\n\t['showInkAnnotation', true, \"bool\"],\n\t['showObjects', 'all'],\n\t['showPivotChartFilter', false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab', 0, \"int\"],\n\t['autoFilterDateGrouping', true, \"bool\"],\n\t['firstSheet', 0, \"int\"],\n\t['minimized', false, \"bool\"],\n\t['showHorizontalScroll', true, \"bool\"],\n\t['showSheetTabs', true, \"bool\"],\n\t['showVerticalScroll', true, \"bool\"],\n\t['tabRatio', 600, \"int\"],\n\t['visibility', 'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2 (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb/*:Workbook*/)/*:string*/ {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = /*#__PURE__*/\":][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {\n\ttry {\n\t\tif(n == \"\") throw new Error(\"Sheet name cannot be blank\");\n\t\tif(n.length > 31) throw new Error(\"Sheet name cannot exceed 31 chars\");\n\t\tif(n.charCodeAt(0) == 0x27 || n.charCodeAt(n.length - 1) == 0x27) throw new Error(\"Sheet name cannot start or end with apostrophe (')\");\n\t\tif(n.toLowerCase() == \"history\") throw new Error(\"Sheet name cannot be 'History'\");\n\t\tbadchars.forEach(function(c) {\n\t\t\tif(n.indexOf(c) == -1) return;\n\t\t\tthrow new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t});\n\t} catch(e) { if(safe) return false; throw e; }\n\treturn true;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\twb.SheetNames.forEach(function(n, i) {\n\t\tvar ws = wb.Sheets[n];\n\t\tif(!ws || !ws[\"!autofilter\"]) return;\n\t\tvar DN;\n\t\tif(!wb.Workbook) wb.Workbook = {};\n\t\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\t\twb.Workbook.Names.forEach(function(dn) { if(dn.Name == \"_xlnm._FilterDatabase\" && dn.Sheet == i) DN = dn; });\n\t\tvar nn = formula_quote_sheet_name(n) + \"!\" + fix_range(ws[\"!autofilter\"].ref);\n\t\tif(DN) DN.Ref = nn;\n\t\telse wb.Workbook.Names.push({Name: \"_xlnm._FilterDatabase\", Sheet: i, Ref: nn});\n\t});\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts)/*:WorkbookFile*/ {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = /*::(*/{ AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" }/*::)*/;\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.1 bookViews CT_BookViews ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.30 workbookView CT_BookView + */\n\t\t\tcase '': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '': case '': break; // aggregate sheet\n\t\t\t/* 18.2.19 sheet CT_Sheet + */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '': break;\n\t\t\t/* 18.2.14 functionGroup CT_FunctionGroup + */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.8 externalReference CT_ExternalReference + */\n\t\t\tcase '': break;\n\t\t\tcase '': case '': pass=false; break;\n\t\t\t/* 18.2.5 definedName CT_DefinedName + */\n\t\t\tcase '': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.2 calcPr CT_CalcPr ? */\n\t\t\tcase '': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '': pass=true; break;\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase ' 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr/*:any*/ = ({codeName:\"ThisWorkbook\"}/*:any*/);\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\n\t\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]/*:any*/);\n\t\t});\n\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\tif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '';\n\t\to[o.length] = \"\";\n\t}\n\n\to[o.length] = \"\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}/*:any*/);\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d/*:any*/ = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length/*:number*/) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length)/*:WBProps*/ {\n\tvar o/*:WBProps*/ = ({}/*:any*/);\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data/*:?WBProps*/, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.date1904) flags |= 0x01;\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tvar flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula;\n\tvar comment = \"\";\n\ttry {\n\t\tformula = parse_XLSBNameParsedFormula(data, 0, opts);\n\t\ttry {\n\t\t\tcomment = parse_XLNullableWideString(data);\n\t\t} catch(e){}\n\t} catch(e) { console.error(\"Could not parse defined name \" + name); }\n\tif(flags & 0x20) name = \"_xlnm.\" + name;\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula, Flags: flags}/*:any*/);\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\nfunction write_BrtName(name, wb) {\n\tvar o = new_buf(9);\n\tvar flags = 0;\n\tvar dname = name.Name;\n\tif(XLSLblBuiltIn.indexOf(dname) > -1) { flags |= 0x20; dname = dname.slice(6); }\n\to.write_shift(4, flags); // flags\n\to.write_shift(1, 0); // chKey\n\to.write_shift(4, name.Sheet == null ? 0xFFFFFFFF : name.Sheet);\n\n\tvar arr = [\n\t\to,\n\t\twrite_XLWideString(dname),\n\t\twrite_XLSBNameParsedFormula(name.Ref, wb)\n\t];\n\tif(name.Comment) arr.push(write_XLNullableWideString(name.Comment));\n\telse {\n\t\tvar x = new_buf(4);\n\t\tx.write_shift(4, 0xFFFFFFFF);\n\t\tarr.push(x);\n\t}\n\n\t// if macro (flags & 0x0F):\n\t// write_shift(4, 0xFFFFFFFF);\n\t// write_XLNullableWideString(description)\n\t// write_XLNullableWideString(helpTopic)\n\t// write_shift(4, 0xFFFFFFFF);\n\n\treturn bconcat(arr);\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts)/*:WorkbookFile*/ {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]/*:any*/);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ };\n\n\trecordhopper(data, function hopper_wb(val, R, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = val.Ptg ? stringify_formula(val.Ptg, null, null, supbooks, opts) : \"#REF!\";\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x008F: /* 'BrtBeginBundleShs' */\n\t\t\tcase 0x0298: /* 'BrtBeginFnGroup' */\n\t\t\tcase 0x0161: /* 'BrtBeginExternals' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(RT); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif(R.T){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != 0x0025 /* BrtACBegin */ && state[state.length-1] != 0x0023 /* BrtFRTBegin */)) throw new Error(\"Unexpected record 0x\" + RT.toString(16));\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb/*:any*/).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb/*::, opts*/) {\n\twrite_record(ba, 0x008F /* BrtBeginBundleShs */);\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, 0x009C /* BrtBundleSh */, write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, 0x0090 /* BrtEndBundleShs */);\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4, 28800);\n\to.write_shift(4, 17600);\n\to.write_shift(4, 500);\n\to.write_shift(4, idx);\n\to.write_shift(4, idx);\n\tvar flags = 0x78;\n\to.write_shift(1, flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb/*::, opts*/) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, 0x0087 /* BrtBeginBookViews */);\n\twrite_record(ba, 0x009E /* BrtBookView */, write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, 0x0088 /* BrtEndBookViews */);\n}\n\nfunction write_BRTNAMES(ba, wb) {\n\tif(!wb.Workbook || !wb.Workbook.Names) return;\n\twb.Workbook.Names.forEach(function(name) { try {\n\t\tif(name.Flags & 0x0e) return; // TODO: macro name write\n\t\twrite_record(ba, 0x0027 /* BrtName */, write_BrtName(name, wb));\n\t} catch(e) {\n\t\tconsole.error(\"Could not serialize defined name \" + JSON.stringify(name));\n\t} });\n}\n\nfunction write_SELF_EXTERNS_xlsb(wb) {\n\tvar L = wb.SheetNames.length;\n\tvar o = new_buf(12 * L + 28);\n\to.write_shift(4, L + 2);\n\to.write_shift(4, 0); o.write_shift(4, -2); o.write_shift(4, -2); // workbook-level reference\n\to.write_shift(4, 0); o.write_shift(4, -1); o.write_shift(4, -1); // #REF!...\n\tfor(var i = 0; i < L; ++i) {\n\t\to.write_shift(4, 0); o.write_shift(4, i); o.write_shift(4, i);\n\t}\n\treturn o;\n}\nfunction write_EXTERNALS_xlsb(ba, wb) {\n\twrite_record(ba, 0x0161 /* BrtBeginExternals */);\n\twrite_record(ba, 0x0165 /* BrtSupSelf */);\n\twrite_record(ba, 0x016A /* BrtExternSheet */, write_SELF_EXTERNS_xlsb(wb, 0));\n\twrite_record(ba, 0x0162 /* BrtEndExternals */);\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, 0x0083 /* BrtBeginBook */);\n\twrite_record(ba, 0x0080 /* BrtFileVersion */, write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, 0x0099 /* BrtWbProp */, write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\twrite_EXTERNALS_xlsb(ba, wb);\n\tif((wb.Workbook||{}).Names) write_BRTNAMES(ba, wb);\n\t/* write_record(ba, 0x009D BrtCalcProp, write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, 0x009B BrtFileRecover, write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, 0x0084 /* BrtEndBook */);\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data/*:any*/), opts);\n\treturn parse_wb_xml((data/*:any*/), opts);\n}\n\nfunction parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name/*:string*/, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data/*:any*/), themes, opts);\n\treturn parse_sty_xml((data/*:any*/), themes, opts);\n}\n\nfunction parse_sst(data, name/*:string*/, opts)/*:SST*/ {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data/*:any*/), opts);\n\treturn parse_sst_xml((data/*:any*/), opts);\n}\n\nfunction parse_cmnt(data, name/*:string*/, opts)/*:Array*/ {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data/*:any*/), opts);\n\treturn parse_comments_xml((data/*:any*/), opts);\n}\n\nfunction parse_cc(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data/*:any*/), name, opts);\n\treturn parse_cc_xml((data/*:any*/), name, opts);\n}\n\nfunction parse_xlink(data, rel, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data/*:any*/), rel, name, opts);\n\treturn parse_xlink_xml((data/*:any*/), rel, name, opts);\n}\n\nfunction parse_xlmeta(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlmeta_bin((data/*:any*/), name, opts);\n\treturn parse_xlmeta_xml((data/*:any*/), name, opts);\n}\nvar attregexg2=/\\b((?:\\w+:)?[\\w]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/\\b((?:\\w+:)?[\\w]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z/*:any*/ = ([]/*:any*/); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag/*:string*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*: {[string]:string}*/;\n\nfunction xlml_format(format, value, date1904)/*:string*/ {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF_general(value);\n\treturn SSF_format(fmt, value, {date1904: !!date1904});\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val/*:string*/) {\n\tvar oval/*:any*/ = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell/*:Cell*/, nf, o, date1904) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = cell.v.toString(10);\n\t\t\t\telse cell.w = SSF_general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF_general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v, date1904);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && fmt_is_date(z)) {\n\t\t\tvar _d = SSF_parse_date_code(cell.v + (date1904 ? 1462 : 0)); if(_d) { cell.t = 'd'; cell.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, arrayf, o, date1904) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tvar ssid = styles[sid];\n\t\tif(ssid.nf) nf = ssid.nf;\n\t\tif(ssid.Interior) interiors.push(ssid.Interior);\n\t\tif(!ssid.Parent) break;\n\t\tsid = ssid.Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<[^<>]*>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = datenum(parseDate(xml, date1904), date1904);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o, date1904);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_prefix_dname(dname) {\n\treturn XLSLblBuiltIn.indexOf(\"_xlnm.\" + dname) > -1 ? \"_xlnm.\" + dname : dname;\n}\n\nfunction xlml_clean_comment(comment/*:any*/) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\n/* TODO: Everything */\nfunction parse_xlml_xml(d, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tmake_ssf();\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof $cptable !== 'undefined') str = $cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\topening = opening.replace(/\".*?\"/g, \"\");\n\tif((opening.indexOf(\">\") & 1023) > Math.min((opening.indexOf(\",\") & 1023), (opening.indexOf(\";\")&1023))) { var _o = dup(opts); _o.type = \"string\"; return PRN.to_workbook(str, _o); }\n\tif(opening.indexOf(\"= 0) ishtml = true; });\n\tif(ishtml) return html_to_workbook(str, opts);\n\n\tXLMLFormatMap = ({\n\t\t\"General Number\": \"General\",\n\t\t\"General Date\": table_fmt[22],\n\t\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\t\"Medium Date\": table_fmt[15],\n\t\t\"Short Date\": table_fmt[14],\n\t\t\"Long Time\": table_fmt[19],\n\t\t\"Medium Time\": table_fmt[18],\n\t\t\"Short Time\": table_fmt[20],\n\t\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\t\"Fixed\": table_fmt[2],\n\t\t\"Standard\": table_fmt[4],\n\t\t\"Percent\": table_fmt[10],\n\t\t\"Scientific\": table_fmt[11],\n\t\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n\t}/*:any*/);\n\n\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames/*:Array*/ = [], cursheet/*:Worksheet*/ = ({}), sheetname = \"\"; if(opts.dense) cursheet[\"!data\"] = [];\n\tvar cell = ({}/*:any*/), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag(''), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess/*:Range*/ = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges/*:Array*/ = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar rowinfo/*:Array*/ = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false} }/*:any*/), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str_remove_ng(str, \"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts, Workbook.WBProps.date1904);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== void 0) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[\"!data\"][r]) cursheet[\"!data\"][r] = [];\n\t\t\t\t\t\tcursheet[\"!data\"][r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:unescapexml(cell.HRef)}/*:any*/);\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tif(cc > c || rr > r) merges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\t/*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n\t\t\t\t\tfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[\"!data\"][cmd]) cursheet[\"!data\"][cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[\"!data\"][cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = ({}); if(opts.dense) cursheet[\"!data\"] = [];\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(table_fmt[ssfidx] == null) { SSF__load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName/*:DefinedName*/ = ({\n\t\t\t\tName: xlml_prefix_dname(_NamedRange.Name),\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t}/*:any*/);\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\n\t\t\t/*:: if(Workbook.Names) */Workbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(!parsexmlbool(tmp[\"ShowAlways\"]||\"0\")) comments.hidden = true;\n\t\t\t\tcomment = ({a:tmp.Author}/*:any*/);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tcase 'null' /*case 'Null'*/: break;\n\n\t\tdefault:\n\t\t\t/* FODS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\n\t\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\t\tWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'hidehorizontalscrollbar' /*case 'HideHorizontalScrollBar'*/: break;\n\t\t\t\t\tcase 'hideverticalscrollbar' /*case 'HideVerticalScrollBar'*/: break;\n\t\t\t\t\tcase 'hideworkbooktabs' /*case 'HideWorkbookTabs'*/: break;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].header = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tif(!isNaN(+parsexmltag(Rn[0]).Margin)) cursheet['!margins'].footer = +parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Top)) cursheet['!margins'].top = +pagemargins.Top;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Left)) cursheet['!margins'].left = +pagemargins.Left;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Right)) cursheet['!margins'].right = +pagemargins.Right;\n\t\t\t\t\t\tif(!isNaN(+pagemargins.Bottom)) cursheet['!margins'].bottom = +pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'printerrors' /*case 'PrintErrors'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].above = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].left = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = dup(table_fmt);\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\tout.bookType = \"xlml\";\n\treturn out;\n}\n\nfunction parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64_decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n\t/*:: throw new Error(\"unsupported type \" + opts.type); */\n}\n\n/* TODO */\nfunction write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml(wb/*::, opts*/)/*:string*/ {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\tif((((wb||{}).Workbook||{}).WBProps||{}).date1904) return '';\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts)/*:string*/ {\n\t/* Styles */\n\tvar styles/*:Array*/ = [''];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload/*:Array*/ = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(table_fmt[xf.numFmtId])}));\n\n\t\tvar o = /*::(*/{\"ss:ID\": \"s\" + (21+id)}/*:: :any)*/;\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name.slice(0,6) == \"_xlnm.\" ? n.Name.slice(6) : n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb/*::, opts*/)/*:string*/ {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tvar o/*:Array*/ = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments/*:Array*/)/*:string*/ {\n\t/* TODO: test multiple comments */\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\tvar p = {};\n\t\tif(c.a) p[\"ss:Author\"] = c.a;\n\t\tif(!comments.hidden) p[\"ss:ShowAlways\"] = \"1\";\n\t\treturn writextag(\"Comment\", d, p);\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number*/, wb, addr)/*:string*/{\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || table_fmt[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('' + _v + '');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R/*:number*/, row)/*:string*/ {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws['!ref']) return \"\";\n\tvar range/*:Range*/ = safe_decode_range(ws['!ref']);\n\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\tvar o/*:Array*/ = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k/*:any*/ = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_col(C) + encode_row(R), cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t/*:string*/ = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"
\" + t + \"
\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\tif(ws[\"!autofilter\"]) o.push('');\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts)/*:string*/ {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = dup(table_fmt);\n\tif(wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d/*:Array*/ = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj/*:CFBEntry*/) {\n\tvar v = {};\n\tvar o = obj.content;\n\t/*:: if(o == null) return; */\n\n\t/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m/*:number*/ = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue 0x003c\n\t- 2.4.59 ContinueBigName 0x043c\n\t- 2.4.60 ContinueFrt 0x0812\n\t- 2.4.61 ContinueFrt11 0x0875\n\t- 2.4.62 ContinueFrt12 0x087f\n*/\nvar CONTINUE_RT = [ 0x003c, 0x043c, 0x0812, 0x0875, 0x087f ];\nfunction slurp(RecordType, R, blob, length/*:number*/, opts)/*:any*/ {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(RecordType) {\n\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809/* BOF */: case 0x002F /* FilePass */: case 0x0195 /* FileLock */: case 0x00E1 /* InterfaceHdr */: case 0x0196 /* RRDInfo */: case 0x0138 /* RRDHead */: case 0x0194 /* UsrExcl */: case 0x000a /* EOF */:\n\t\tbreak;\n\tcase 0x0085 /* BoundSheet8 */:\n\t\tbreak;\n\tdefault:\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar nextrt = __readUInt16LE(blob,blob.l), next = XLSRecordEnum[nextrt];\n\tvar start = 0;\n\twhile(next != null && CONTINUE_RT.indexOf(nextrt) > -1) {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(nextrt == 0x0812 /* ContinueFrt */) start += 4;\n\t\telse if(nextrt == 0x0875 || nextrt == 0x087f) {\n\t\t\tstart += 12;\n\t\t}\n\t\td = blob.slice(start,blob.l+4+l);\n\t\tbufs.push(d);\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[nextrt = __readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs)/*:any*/);\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\tif(b.length < length) throw \"XLS Record 0x\" + RecordType.toString(16) + \" Truncated: \" + b.length + \" < \" + length;\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boolean*/) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF && p.z == null) p.z = table_fmt[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = p.v.toString(10);\n\t\t\t\telse p.w = SSF_general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF_general(p.v);\n\t\t}\n\t\telse p.w = SSF_format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && fmt_is_date(table_fmt[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF_parse_date_code(p.v + (date1904 ? 1462 : 0)); if(_d) { p.t = 'd'; p.v = new Date(Date.UTC(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u)); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t)/*:Cell*/ {\n\treturn ({v:val, ixfe:ixfe, t:t}/*:any*/);\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {\n\tvar wb = ({opts:{}}/*:any*/);\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out/*:Worksheet*/ = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\tvar Directory = {};\n\tvar range/*:Range*/ = ({}/*:any*/);\n\tvar last_formula = null;\n\tvar sst/*:SST*/ = ([]/*:any*/);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc/*:Cell*/, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar temp_val/*:Cell*/;\n\tvar country;\n\tvar XFs = []; /* XF records */\n\tvar palette/*:Array<[number, number, number]>*/ = [];\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }/*:any*/), wsprops = {};\n\tvar biff4w = false;\n\tvar get_rgb = function getrgb(icv/*:number*/)/*:[number, number, number]*/ {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(line/*:any*/, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({}/*:any*/);\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell/*:any*/, line/*:any*/, options/*:any*/) {\n\t\tif(!biff4w && file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[\"!data\"][cell.r]) out[\"!data\"][cell.r] = [];\n\t\t\t\tout[\"!data\"][cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t}/*:any*/);\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges/*:Array*/ = [];\n\tvar objects = [];\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\tvar supbooks = ([]/*:any*/); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_RT = 0;\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable/*:Array*/ = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl/*:?DefinedName*/;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_RT === 0x000a /* EOF */) break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(RecordType) == -1 /* BOF */) break;\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_RT === 0x0085 /* BoundSheet8 */ && RecordType !== 0x0085 /* R.n !== 'BoundSheet8' */) break;\n\t\t\t}\n\t\t\tlast_RT = RecordType;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){\n\t\t\t\t\tblob.l += 10; length -= 10;\n\t\t\t\t} // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val/*:any*/ = ({}/*:any*/);\n\t\t\tif(RecordType === 0x000a /* EOF */) val = /*::(*/R.f(blob, length, opts)/*:: :any)*/;\n\t\t\telse val = /*::(*/slurp(RecordType, R, blob, length, opts)/*:: :any)*/;\n\t\t\t/*:: val = (val:any); */\n\t\t\tif(file_depth == 0 && [0x0009, 0x0209, 0x0409, 0x0809].indexOf(last_RT) === -1 /* BOF */) continue;\n\t\t\tswitch(RecordType) {\n\t\t\t\tcase 0x0022 /* Date1904 */:\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\twb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 0x0086 /* WriteProtect */: wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 0x002f /* FilePass */:\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x005c /* WriteAccess */: opts.lastuser = val; break;\n\t\t\t\tcase 0x0042 /* CodePage */:\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval = 1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x013d /* RRTabId */: opts.rrtabid = val; break;\n\t\t\t\tcase 0x0019 /* WinProtect */: opts.winlocked = val; break;\n\t\t\t\tcase 0x01b7 /* RefreshAll */: wb.opts[\"RefreshAll\"] = val; break;\n\t\t\t\tcase 0x000c /* CalcCount */: wb.opts[\"CalcCount\"] = val; break;\n\t\t\t\tcase 0x0010 /* CalcDelta */: wb.opts[\"CalcDelta\"] = val; break;\n\t\t\t\tcase 0x0011 /* CalcIter */: wb.opts[\"CalcIter\"] = val; break;\n\t\t\t\tcase 0x000d /* CalcMode */: wb.opts[\"CalcMode\"] = val; break;\n\t\t\t\tcase 0x000e /* CalcPrecision */: wb.opts[\"CalcPrecision\"] = val; break;\n\t\t\t\tcase 0x005f /* CalcSaveRecalc */: wb.opts[\"CalcSaveRecalc\"] = val; break;\n\t\t\t\tcase 0x000f /* CalcRefMode */: opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 0x08a3 /* ForceFullCalculation */: wb.opts.FullCalc = val; break;\n\t\t\t\tcase 0x0081 /* WsBool */:\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tif(!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n\t\t\t\t\tif(!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 0x0043: /* BIFF2XF */ case 0x0243: /* BIFF3XF */ case 0x0443: /* BIFF4XF */\n\t\t\t\tcase 0x00e0 /* XF */:\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 0x01ae /* SupBook */:\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0023: case 0x0223 /* ExternName */:\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0018: case 0x0218 /* Lbl */:\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t}/*:DefinedName*/);\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0016 /* ExternCount */: opts.ExternCount = val; break;\n\t\t\t\tcase 0x0017 /* ExternSheet */:\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 0x0894 /* NameCmt */:\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0012 /* Protect */: out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 0x0013 /* Password */: if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 0x0085 /* BoundSheet8 */: {\n\t\t\t\t\tDirectory[opts.biff == 4 ? opts.snames.length : val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 0x000a /* EOF */: {\n\t\t\t\t\tif(--file_depth ? !biff4w : biff4w) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\t\t\t\t} break;\n\t\t\t\tcase 0x0009: case 0x0209: case 0x0409: case 0x0809 /* BOF */: {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n\t\t\t\t\t\t0x0009: 2,\n\t\t\t\t\t\t0x0209: 3,\n\t\t\t\t\t\t0x0409: 4\n\t\t\t\t\t}[RecordType] || {\n\t\t\t\t\t\t0x0200: 2,\n\t\t\t\t\t\t0x0300: 3,\n\t\t\t\t\t\t0x0400: 4,\n\t\t\t\t\t\t0x0500: 5,\n\t\t\t\t\t\t0x0600: 8,\n\t\t\t\t\t\t0x0002: 2,\n\t\t\t\t\t\t0x0007: 2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\topts.biffguess = val.BIFFVer == 0;\n\t\t\t\t\tif(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); }\n\t\t\t\t\tif(opts.biff == 4 && val.dt & 0x100) biff4w = true;\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++ && !biff4w) break;\n\t\t\t\t\tout = ({}/*:any*/); if(options.dense) out[\"!data\"] = [];\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\t\t\t\t\tif(opts.biff == 4 && biff4w) {\n\t\t\t\t\t\tcur_sheet = (Directory[opts.snames.indexOf(cur_sheet)+1] || {name:\"\"}).name;\n\t\t\t\t\t} else if(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\t\t\t\tcase 0x0203 /* Number */: case 0x0003 /* BIFF2NUM */: case 0x0002 /* BIFF2INT */: {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[\"!data\"][val.r]||[])[val.c]: out[encode_col(val.c) + encode_row(val.r)]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x0005: case 0x0205 /* BoolErr */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x027e /* RK */: {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00bd /* MulRk */: {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0006: case 0x0206: case 0x0406 /* Formula */: {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[\"!data\"][_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x0007: case 0x0207 /* String */: {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 0x0021: case 0x0221 /* Array */: {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[\"!data\"][val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x04bc /* ShrFmla */: {\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fd /* LabelSst */:\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0201 /* Blank */: if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 0x00be /* MulBlank */: if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x00d6 /* RString */:\n\t\t\t\tcase 0x0204 /* Label */: case 0x0004 /* BIFF2STR */:\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = (temp_val.XF && temp_val.XF.numFmtId) && BIFF2FmtTable[temp_val.XF.numFmtId] || BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 0x0000: case 0x0200 /* Dimensions */: {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 0x00fc /* SST */: {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 0x041e /* Format */: { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff >= 3 && opts.biff <= 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(table_fmt[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF__load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF__load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 0x001e /* BIFF2FORMAT */: {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(table_fmt[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF__load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 0x00e5 /* MergeCells */: merges = merges.concat(val); break;\n\n\t\t\t\tcase 0x005d /* Obj */: objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 0x01b6 /* TxO */: opts.lastobj.TxO = val; break;\n\t\t\t\tcase 0x007f /* ImData */: opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 0x01b8 /* HLink */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0800 /* HLinkTooltip */: {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[\"!data\"][rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x001c /* Note */: {\n\t\t\t\t\t/* TODO: comment continuation (row == -1 / 0xFFFF) */\n\t\t\t\t\tcc = options.dense ? (out[\"!data\"][val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[\"!data\"][val[0].r]) out[\"!data\"][val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[\"!data\"][val[0].r][val[0].c] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) cmnt = {a:\"SheetJ5\", t:val[1]};\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\t\tif(val[3] != null && !(val[3] & 0x02)) cc.c.hidden = true;\n\t\t\t\t\t}\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\t\t\t\tcase 0x087d /* XFExt */: update_xfext(XFs[val.ixfe], val.ext); break;\n\t\t\t\tcase 0x007d /* ColInfo */: {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0208 /* Row */: {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 0x0026 /* LeftMargin */:\n\t\t\t\tcase 0x0027 /* RightMargin */:\n\t\t\t\tcase 0x0028 /* TopMargin */:\n\t\t\t\tcase 0x0029 /* BottomMargin */:\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][({0x26: \"left\", 0x27:\"right\", 0x28:\"top\", 0x29:\"bottom\"})[RecordType]] = val;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x00a1 /* Setup */: // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x023e /* Window2 */: // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x0092 /* Palette */: palette = val; break;\n\t\t\t\tcase 0x0896 /* Theme */: themes = val; break;\n\t\t\t\tcase 0x008c /* Country */: country = val; break;\n\t\t\t\tcase 0x01ba /* CodeName */: {\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\tif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t}\n\t\t} else {\n\t\t\tif(!R) console.error(\"Missing Info for XLS Record 0x\" + RecordType.toString(16));\n\t\t\tblob.l += length;\n\t\t}\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(!wb.SheetNames.length && Preamble[\"!ref\"]) {\n\t\twb.SheetNames.push(\"Sheet1\");\n\t\t/*jshint -W069 */\n\t\tif(wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n\t\t/*jshint +W069 */\n\t} else wb.Preamble=Preamble;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Strings = sst;\n\twb.SSF = dup(table_fmt);\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb/*:CFBContainer*/, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '/!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '/!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tvar DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, \"n\");\n\tvar SummaryRE/*:{[key:string]:string}*/ = evert_key(SummaryPIDSI, \"n\");\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1 || PseudoPropsPairs.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj/*:?CFBEntry*/, WB/*:?any*/;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64_decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb}/*:any*/);\n}\nvar /*::CompObjP, */WorkbookP/*:: :Workbook = XLSX.utils.book_new(); */;\n\nvar _data/*:?any*/;\nif(CompObj) /*::CompObjP = */parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({}/*:any*/);\nelse/*:: if(cfb instanceof CFBContainer) */ {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Works 4 for Mac */\n\telse if((_data=CFB.find(cfb, 'MN0')) && _data.content) throw new Error(\"Unsupported Works 4 for Mac file\");\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(/*::((*/cfb/*:: :any):CFBContainer)*/, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContainer*/ {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n\t0x0000: { /* n:\"BrtRowHdr\", */ f:parse_BrtRowHdr },\n\t0x0001: { /* n:\"BrtCellBlank\", */ f:parse_BrtCellBlank },\n\t0x0002: { /* n:\"BrtCellRk\", */ f:parse_BrtCellRk },\n\t0x0003: { /* n:\"BrtCellError\", */ f:parse_BrtCellError },\n\t0x0004: { /* n:\"BrtCellBool\", */ f:parse_BrtCellBool },\n\t0x0005: { /* n:\"BrtCellReal\", */ f:parse_BrtCellReal },\n\t0x0006: { /* n:\"BrtCellSt\", */ f:parse_BrtCellSt },\n\t0x0007: { /* n:\"BrtCellIsst\", */ f:parse_BrtCellIsst },\n\t0x0008: { /* n:\"BrtFmlaString\", */ f:parse_BrtFmlaString },\n\t0x0009: { /* n:\"BrtFmlaNum\", */ f:parse_BrtFmlaNum },\n\t0x000A: { /* n:\"BrtFmlaBool\", */ f:parse_BrtFmlaBool },\n\t0x000B: { /* n:\"BrtFmlaError\", */ f:parse_BrtFmlaError },\n\t0x000C: { /* n:\"BrtShortBlank\", */ f:parse_BrtShortBlank },\n\t0x000D: { /* n:\"BrtShortRk\", */ f:parse_BrtShortRk },\n\t0x000E: { /* n:\"BrtShortError\", */ f:parse_BrtShortError },\n\t0x000F: { /* n:\"BrtShortBool\", */ f:parse_BrtShortBool },\n\t0x0010: { /* n:\"BrtShortReal\", */ f:parse_BrtShortReal },\n\t0x0011: { /* n:\"BrtShortSt\", */ f:parse_BrtShortSt },\n\t0x0012: { /* n:\"BrtShortIsst\", */ f:parse_BrtShortIsst },\n\t0x0013: { /* n:\"BrtSSTItem\", */ f:parse_RichStr },\n\t0x0014: { /* n:\"BrtPCDIMissing\" */ },\n\t0x0015: { /* n:\"BrtPCDINumber\" */ },\n\t0x0016: { /* n:\"BrtPCDIBoolean\" */ },\n\t0x0017: { /* n:\"BrtPCDIError\" */ },\n\t0x0018: { /* n:\"BrtPCDIString\" */ },\n\t0x0019: { /* n:\"BrtPCDIDatetime\" */ },\n\t0x001A: { /* n:\"BrtPCDIIndex\" */ },\n\t0x001B: { /* n:\"BrtPCDIAMissing\" */ },\n\t0x001C: { /* n:\"BrtPCDIANumber\" */ },\n\t0x001D: { /* n:\"BrtPCDIABoolean\" */ },\n\t0x001E: { /* n:\"BrtPCDIAError\" */ },\n\t0x001F: { /* n:\"BrtPCDIAString\" */ },\n\t0x0020: { /* n:\"BrtPCDIADatetime\" */ },\n\t0x0021: { /* n:\"BrtPCRRecord\" */ },\n\t0x0022: { /* n:\"BrtPCRRecordDt\" */ },\n\t0x0023: { /* n:\"BrtFRTBegin\", */ T:1 },\n\t0x0024: { /* n:\"BrtFRTEnd\", */ T:-1 },\n\t0x0025: { /* n:\"BrtACBegin\", */ T:1 },\n\t0x0026: { /* n:\"BrtACEnd\", */ T:-1 },\n\t0x0027: { /* n:\"BrtName\", */ f:parse_BrtName },\n\t0x0028: { /* n:\"BrtIndexRowBlock\" */ },\n\t0x002A: { /* n:\"BrtIndexBlock\" */ },\n\t0x002B: { /* n:\"BrtFont\", */ f:parse_BrtFont },\n\t0x002C: { /* n:\"BrtFmt\", */ f:parse_BrtFmt },\n\t0x002D: { /* n:\"BrtFill\", */ f:parse_BrtFill },\n\t0x002E: { /* n:\"BrtBorder\", */ f:parse_BrtBorder },\n\t0x002F: { /* n:\"BrtXF\", */ f:parse_BrtXF },\n\t0x0030: { /* n:\"BrtStyle\" */ },\n\t0x0031: { /* n:\"BrtCellMeta\", */ f:parse_Int32LE },\n\t0x0032: { /* n:\"BrtValueMeta\" */ },\n\t0x0033: { /* n:\"BrtMdb\" */ f:parse_BrtMdb },\n\t0x0034: { /* n:\"BrtBeginFmd\", */ T:1 },\n\t0x0035: { /* n:\"BrtEndFmd\", */ T:-1 },\n\t0x0036: { /* n:\"BrtBeginMdx\", */ T:1 },\n\t0x0037: { /* n:\"BrtEndMdx\", */ T:-1 },\n\t0x0038: { /* n:\"BrtBeginMdxTuple\", */ T:1 },\n\t0x0039: { /* n:\"BrtEndMdxTuple\", */ T:-1 },\n\t0x003A: { /* n:\"BrtMdxMbrIstr\" */ },\n\t0x003B: { /* n:\"BrtStr\" */ },\n\t0x003C: { /* n:\"BrtColInfo\", */ f:parse_ColInfo },\n\t0x003E: { /* n:\"BrtCellRString\", */ f:parse_BrtCellRString },\n\t0x003F: { /* n:\"BrtCalcChainItem$\", */ f:parse_BrtCalcChainItem$ },\n\t0x0040: { /* n:\"BrtDVal\", */ f:parse_BrtDVal },\n\t0x0041: { /* n:\"BrtSxvcellNum\" */ },\n\t0x0042: { /* n:\"BrtSxvcellStr\" */ },\n\t0x0043: { /* n:\"BrtSxvcellBool\" */ },\n\t0x0044: { /* n:\"BrtSxvcellErr\" */ },\n\t0x0045: { /* n:\"BrtSxvcellDate\" */ },\n\t0x0046: { /* n:\"BrtSxvcellNil\" */ },\n\t0x0080: { /* n:\"BrtFileVersion\" */ },\n\t0x0081: { /* n:\"BrtBeginSheet\", */ T:1 },\n\t0x0082: { /* n:\"BrtEndSheet\", */ T:-1 },\n\t0x0083: { /* n:\"BrtBeginBook\", */ T:1, f:parsenoop, p:0 },\n\t0x0084: { /* n:\"BrtEndBook\", */ T:-1 },\n\t0x0085: { /* n:\"BrtBeginWsViews\", */ T:1 },\n\t0x0086: { /* n:\"BrtEndWsViews\", */ T:-1 },\n\t0x0087: { /* n:\"BrtBeginBookViews\", */ T:1 },\n\t0x0088: { /* n:\"BrtEndBookViews\", */ T:-1 },\n\t0x0089: { /* n:\"BrtBeginWsView\", */ T:1, f:parse_BrtBeginWsView },\n\t0x008A: { /* n:\"BrtEndWsView\", */ T:-1 },\n\t0x008B: { /* n:\"BrtBeginCsViews\", */ T:1 },\n\t0x008C: { /* n:\"BrtEndCsViews\", */ T:-1 },\n\t0x008D: { /* n:\"BrtBeginCsView\", */ T:1 },\n\t0x008E: { /* n:\"BrtEndCsView\", */ T:-1 },\n\t0x008F: { /* n:\"BrtBeginBundleShs\", */ T:1 },\n\t0x0090: { /* n:\"BrtEndBundleShs\", */ T:-1 },\n\t0x0091: { /* n:\"BrtBeginSheetData\", */ T:1 },\n\t0x0092: { /* n:\"BrtEndSheetData\", */ T:-1 },\n\t0x0093: { /* n:\"BrtWsProp\", */ f:parse_BrtWsProp },\n\t0x0094: { /* n:\"BrtWsDim\", */ f:parse_BrtWsDim, p:16 },\n\t0x0097: { /* n:\"BrtPane\", */ f:parse_BrtPane },\n\t0x0098: { /* n:\"BrtSel\" */ },\n\t0x0099: { /* n:\"BrtWbProp\", */ f:parse_BrtWbProp },\n\t0x009A: { /* n:\"BrtWbFactoid\" */ },\n\t0x009B: { /* n:\"BrtFileRecover\" */ },\n\t0x009C: { /* n:\"BrtBundleSh\", */ f:parse_BrtBundleSh },\n\t0x009D: { /* n:\"BrtCalcProp\" */ },\n\t0x009E: { /* n:\"BrtBookView\" */ },\n\t0x009F: { /* n:\"BrtBeginSst\", */ T:1, f:parse_BrtBeginSst },\n\t0x00A0: { /* n:\"BrtEndSst\", */ T:-1 },\n\t0x00A1: { /* n:\"BrtBeginAFilter\", */ T:1, f:parse_UncheckedRfX },\n\t0x00A2: { /* n:\"BrtEndAFilter\", */ T:-1 },\n\t0x00A3: { /* n:\"BrtBeginFilterColumn\", */ T:1 },\n\t0x00A4: { /* n:\"BrtEndFilterColumn\", */ T:-1 },\n\t0x00A5: { /* n:\"BrtBeginFilters\", */ T:1 },\n\t0x00A6: { /* n:\"BrtEndFilters\", */ T:-1 },\n\t0x00A7: { /* n:\"BrtFilter\" */ },\n\t0x00A8: { /* n:\"BrtColorFilter\" */ },\n\t0x00A9: { /* n:\"BrtIconFilter\" */ },\n\t0x00AA: { /* n:\"BrtTop10Filter\" */ },\n\t0x00AB: { /* n:\"BrtDynamicFilter\" */ },\n\t0x00AC: { /* n:\"BrtBeginCustomFilters\", */ T:1 },\n\t0x00AD: { /* n:\"BrtEndCustomFilters\", */ T:-1 },\n\t0x00AE: { /* n:\"BrtCustomFilter\" */ },\n\t0x00AF: { /* n:\"BrtAFilterDateGroupItem\" */ },\n\t0x00B0: { /* n:\"BrtMergeCell\", */ f:parse_BrtMergeCell },\n\t0x00B1: { /* n:\"BrtBeginMergeCells\", */ T:1 },\n\t0x00B2: { /* n:\"BrtEndMergeCells\", */ T:-1 },\n\t0x00B3: { /* n:\"BrtBeginPivotCacheDef\", */ T:1 },\n\t0x00B4: { /* n:\"BrtEndPivotCacheDef\", */ T:-1 },\n\t0x00B5: { /* n:\"BrtBeginPCDFields\", */ T:1 },\n\t0x00B6: { /* n:\"BrtEndPCDFields\", */ T:-1 },\n\t0x00B7: { /* n:\"BrtBeginPCDField\", */ T:1 },\n\t0x00B8: { /* n:\"BrtEndPCDField\", */ T:-1 },\n\t0x00B9: { /* n:\"BrtBeginPCDSource\", */ T:1 },\n\t0x00BA: { /* n:\"BrtEndPCDSource\", */ T:-1 },\n\t0x00BB: { /* n:\"BrtBeginPCDSRange\", */ T:1 },\n\t0x00BC: { /* n:\"BrtEndPCDSRange\", */ T:-1 },\n\t0x00BD: { /* n:\"BrtBeginPCDFAtbl\", */ T:1 },\n\t0x00BE: { /* n:\"BrtEndPCDFAtbl\", */ T:-1 },\n\t0x00BF: { /* n:\"BrtBeginPCDIRun\", */ T:1 },\n\t0x00C0: { /* n:\"BrtEndPCDIRun\", */ T:-1 },\n\t0x00C1: { /* n:\"BrtBeginPivotCacheRecords\", */ T:1 },\n\t0x00C2: { /* n:\"BrtEndPivotCacheRecords\", */ T:-1 },\n\t0x00C3: { /* n:\"BrtBeginPCDHierarchies\", */ T:1 },\n\t0x00C4: { /* n:\"BrtEndPCDHierarchies\", */ T:-1 },\n\t0x00C5: { /* n:\"BrtBeginPCDHierarchy\", */ T:1 },\n\t0x00C6: { /* n:\"BrtEndPCDHierarchy\", */ T:-1 },\n\t0x00C7: { /* n:\"BrtBeginPCDHFieldsUsage\", */ T:1 },\n\t0x00C8: { /* n:\"BrtEndPCDHFieldsUsage\", */ T:-1 },\n\t0x00C9: { /* n:\"BrtBeginExtConnection\", */ T:1 },\n\t0x00CA: { /* n:\"BrtEndExtConnection\", */ T:-1 },\n\t0x00CB: { /* n:\"BrtBeginECDbProps\", */ T:1 },\n\t0x00CC: { /* n:\"BrtEndECDbProps\", */ T:-1 },\n\t0x00CD: { /* n:\"BrtBeginECOlapProps\", */ T:1 },\n\t0x00CE: { /* n:\"BrtEndECOlapProps\", */ T:-1 },\n\t0x00CF: { /* n:\"BrtBeginPCDSConsol\", */ T:1 },\n\t0x00D0: { /* n:\"BrtEndPCDSConsol\", */ T:-1 },\n\t0x00D1: { /* n:\"BrtBeginPCDSCPages\", */ T:1 },\n\t0x00D2: { /* n:\"BrtEndPCDSCPages\", */ T:-1 },\n\t0x00D3: { /* n:\"BrtBeginPCDSCPage\", */ T:1 },\n\t0x00D4: { /* n:\"BrtEndPCDSCPage\", */ T:-1 },\n\t0x00D5: { /* n:\"BrtBeginPCDSCPItem\", */ T:1 },\n\t0x00D6: { /* n:\"BrtEndPCDSCPItem\", */ T:-1 },\n\t0x00D7: { /* n:\"BrtBeginPCDSCSets\", */ T:1 },\n\t0x00D8: { /* n:\"BrtEndPCDSCSets\", */ T:-1 },\n\t0x00D9: { /* n:\"BrtBeginPCDSCSet\", */ T:1 },\n\t0x00DA: { /* n:\"BrtEndPCDSCSet\", */ T:-1 },\n\t0x00DB: { /* n:\"BrtBeginPCDFGroup\", */ T:1 },\n\t0x00DC: { /* n:\"BrtEndPCDFGroup\", */ T:-1 },\n\t0x00DD: { /* n:\"BrtBeginPCDFGItems\", */ T:1 },\n\t0x00DE: { /* n:\"BrtEndPCDFGItems\", */ T:-1 },\n\t0x00DF: { /* n:\"BrtBeginPCDFGRange\", */ T:1 },\n\t0x00E0: { /* n:\"BrtEndPCDFGRange\", */ T:-1 },\n\t0x00E1: { /* n:\"BrtBeginPCDFGDiscrete\", */ T:1 },\n\t0x00E2: { /* n:\"BrtEndPCDFGDiscrete\", */ T:-1 },\n\t0x00E3: { /* n:\"BrtBeginPCDSDTupleCache\", */ T:1 },\n\t0x00E4: { /* n:\"BrtEndPCDSDTupleCache\", */ T:-1 },\n\t0x00E5: { /* n:\"BrtBeginPCDSDTCEntries\", */ T:1 },\n\t0x00E6: { /* n:\"BrtEndPCDSDTCEntries\", */ T:-1 },\n\t0x00E7: { /* n:\"BrtBeginPCDSDTCEMembers\", */ T:1 },\n\t0x00E8: { /* n:\"BrtEndPCDSDTCEMembers\", */ T:-1 },\n\t0x00E9: { /* n:\"BrtBeginPCDSDTCEMember\", */ T:1 },\n\t0x00EA: { /* n:\"BrtEndPCDSDTCEMember\", */ T:-1 },\n\t0x00EB: { /* n:\"BrtBeginPCDSDTCQueries\", */ T:1 },\n\t0x00EC: { /* n:\"BrtEndPCDSDTCQueries\", */ T:-1 },\n\t0x00ED: { /* n:\"BrtBeginPCDSDTCQuery\", */ T:1 },\n\t0x00EE: { /* n:\"BrtEndPCDSDTCQuery\", */ T:-1 },\n\t0x00EF: { /* n:\"BrtBeginPCDSDTCSets\", */ T:1 },\n\t0x00F0: { /* n:\"BrtEndPCDSDTCSets\", */ T:-1 },\n\t0x00F1: { /* n:\"BrtBeginPCDSDTCSet\", */ T:1 },\n\t0x00F2: { /* n:\"BrtEndPCDSDTCSet\", */ T:-1 },\n\t0x00F3: { /* n:\"BrtBeginPCDCalcItems\", */ T:1 },\n\t0x00F4: { /* n:\"BrtEndPCDCalcItems\", */ T:-1 },\n\t0x00F5: { /* n:\"BrtBeginPCDCalcItem\", */ T:1 },\n\t0x00F6: { /* n:\"BrtEndPCDCalcItem\", */ T:-1 },\n\t0x00F7: { /* n:\"BrtBeginPRule\", */ T:1 },\n\t0x00F8: { /* n:\"BrtEndPRule\", */ T:-1 },\n\t0x00F9: { /* n:\"BrtBeginPRFilters\", */ T:1 },\n\t0x00FA: { /* n:\"BrtEndPRFilters\", */ T:-1 },\n\t0x00FB: { /* n:\"BrtBeginPRFilter\", */ T:1 },\n\t0x00FC: { /* n:\"BrtEndPRFilter\", */ T:-1 },\n\t0x00FD: { /* n:\"BrtBeginPNames\", */ T:1 },\n\t0x00FE: { /* n:\"BrtEndPNames\", */ T:-1 },\n\t0x00FF: { /* n:\"BrtBeginPName\", */ T:1 },\n\t0x0100: { /* n:\"BrtEndPName\", */ T:-1 },\n\t0x0101: { /* n:\"BrtBeginPNPairs\", */ T:1 },\n\t0x0102: { /* n:\"BrtEndPNPairs\", */ T:-1 },\n\t0x0103: { /* n:\"BrtBeginPNPair\", */ T:1 },\n\t0x0104: { /* n:\"BrtEndPNPair\", */ T:-1 },\n\t0x0105: { /* n:\"BrtBeginECWebProps\", */ T:1 },\n\t0x0106: { /* n:\"BrtEndECWebProps\", */ T:-1 },\n\t0x0107: { /* n:\"BrtBeginEcWpTables\", */ T:1 },\n\t0x0108: { /* n:\"BrtEndECWPTables\", */ T:-1 },\n\t0x0109: { /* n:\"BrtBeginECParams\", */ T:1 },\n\t0x010A: { /* n:\"BrtEndECParams\", */ T:-1 },\n\t0x010B: { /* n:\"BrtBeginECParam\", */ T:1 },\n\t0x010C: { /* n:\"BrtEndECParam\", */ T:-1 },\n\t0x010D: { /* n:\"BrtBeginPCDKPIs\", */ T:1 },\n\t0x010E: { /* n:\"BrtEndPCDKPIs\", */ T:-1 },\n\t0x010F: { /* n:\"BrtBeginPCDKPI\", */ T:1 },\n\t0x0110: { /* n:\"BrtEndPCDKPI\", */ T:-1 },\n\t0x0111: { /* n:\"BrtBeginDims\", */ T:1 },\n\t0x0112: { /* n:\"BrtEndDims\", */ T:-1 },\n\t0x0113: { /* n:\"BrtBeginDim\", */ T:1 },\n\t0x0114: { /* n:\"BrtEndDim\", */ T:-1 },\n\t0x0115: { /* n:\"BrtIndexPartEnd\" */ },\n\t0x0116: { /* n:\"BrtBeginStyleSheet\", */ T:1 },\n\t0x0117: { /* n:\"BrtEndStyleSheet\", */ T:-1 },\n\t0x0118: { /* n:\"BrtBeginSXView\", */ T:1 },\n\t0x0119: { /* n:\"BrtEndSXVI\", */ T:-1 },\n\t0x011A: { /* n:\"BrtBeginSXVI\", */ T:1 },\n\t0x011B: { /* n:\"BrtBeginSXVIs\", */ T:1 },\n\t0x011C: { /* n:\"BrtEndSXVIs\", */ T:-1 },\n\t0x011D: { /* n:\"BrtBeginSXVD\", */ T:1 },\n\t0x011E: { /* n:\"BrtEndSXVD\", */ T:-1 },\n\t0x011F: { /* n:\"BrtBeginSXVDs\", */ T:1 },\n\t0x0120: { /* n:\"BrtEndSXVDs\", */ T:-1 },\n\t0x0121: { /* n:\"BrtBeginSXPI\", */ T:1 },\n\t0x0122: { /* n:\"BrtEndSXPI\", */ T:-1 },\n\t0x0123: { /* n:\"BrtBeginSXPIs\", */ T:1 },\n\t0x0124: { /* n:\"BrtEndSXPIs\", */ T:-1 },\n\t0x0125: { /* n:\"BrtBeginSXDI\", */ T:1 },\n\t0x0126: { /* n:\"BrtEndSXDI\", */ T:-1 },\n\t0x0127: { /* n:\"BrtBeginSXDIs\", */ T:1 },\n\t0x0128: { /* n:\"BrtEndSXDIs\", */ T:-1 },\n\t0x0129: { /* n:\"BrtBeginSXLI\", */ T:1 },\n\t0x012A: { /* n:\"BrtEndSXLI\", */ T:-1 },\n\t0x012B: { /* n:\"BrtBeginSXLIRws\", */ T:1 },\n\t0x012C: { /* n:\"BrtEndSXLIRws\", */ T:-1 },\n\t0x012D: { /* n:\"BrtBeginSXLICols\", */ T:1 },\n\t0x012E: { /* n:\"BrtEndSXLICols\", */ T:-1 },\n\t0x012F: { /* n:\"BrtBeginSXFormat\", */ T:1 },\n\t0x0130: { /* n:\"BrtEndSXFormat\", */ T:-1 },\n\t0x0131: { /* n:\"BrtBeginSXFormats\", */ T:1 },\n\t0x0132: { /* n:\"BrtEndSxFormats\", */ T:-1 },\n\t0x0133: { /* n:\"BrtBeginSxSelect\", */ T:1 },\n\t0x0134: { /* n:\"BrtEndSxSelect\", */ T:-1 },\n\t0x0135: { /* n:\"BrtBeginISXVDRws\", */ T:1 },\n\t0x0136: { /* n:\"BrtEndISXVDRws\", */ T:-1 },\n\t0x0137: { /* n:\"BrtBeginISXVDCols\", */ T:1 },\n\t0x0138: { /* n:\"BrtEndISXVDCols\", */ T:-1 },\n\t0x0139: { /* n:\"BrtEndSXLocation\", */ T:-1 },\n\t0x013A: { /* n:\"BrtBeginSXLocation\", */ T:1 },\n\t0x013B: { /* n:\"BrtEndSXView\", */ T:-1 },\n\t0x013C: { /* n:\"BrtBeginSXTHs\", */ T:1 },\n\t0x013D: { /* n:\"BrtEndSXTHs\", */ T:-1 },\n\t0x013E: { /* n:\"BrtBeginSXTH\", */ T:1 },\n\t0x013F: { /* n:\"BrtEndSXTH\", */ T:-1 },\n\t0x0140: { /* n:\"BrtBeginISXTHRws\", */ T:1 },\n\t0x0141: { /* n:\"BrtEndISXTHRws\", */ T:-1 },\n\t0x0142: { /* n:\"BrtBeginISXTHCols\", */ T:1 },\n\t0x0143: { /* n:\"BrtEndISXTHCols\", */ T:-1 },\n\t0x0144: { /* n:\"BrtBeginSXTDMPS\", */ T:1 },\n\t0x0145: { /* n:\"BrtEndSXTDMPs\", */ T:-1 },\n\t0x0146: { /* n:\"BrtBeginSXTDMP\", */ T:1 },\n\t0x0147: { /* n:\"BrtEndSXTDMP\", */ T:-1 },\n\t0x0148: { /* n:\"BrtBeginSXTHItems\", */ T:1 },\n\t0x0149: { /* n:\"BrtEndSXTHItems\", */ T:-1 },\n\t0x014A: { /* n:\"BrtBeginSXTHItem\", */ T:1 },\n\t0x014B: { /* n:\"BrtEndSXTHItem\", */ T:-1 },\n\t0x014C: { /* n:\"BrtBeginMetadata\", */ T:1 },\n\t0x014D: { /* n:\"BrtEndMetadata\", */ T:-1 },\n\t0x014E: { /* n:\"BrtBeginEsmdtinfo\", */ T:1 },\n\t0x014F: { /* n:\"BrtMdtinfo\", */ f:parse_BrtMdtinfo },\n\t0x0150: { /* n:\"BrtEndEsmdtinfo\", */ T:-1 },\n\t0x0151: { /* n:\"BrtBeginEsmdb\", */ f:parse_BrtBeginEsmdb, T:1 },\n\t0x0152: { /* n:\"BrtEndEsmdb\", */ T:-1 },\n\t0x0153: { /* n:\"BrtBeginEsfmd\", */ T:1 },\n\t0x0154: { /* n:\"BrtEndEsfmd\", */ T:-1 },\n\t0x0155: { /* n:\"BrtBeginSingleCells\", */ T:1 },\n\t0x0156: { /* n:\"BrtEndSingleCells\", */ T:-1 },\n\t0x0157: { /* n:\"BrtBeginList\", */ T:1 },\n\t0x0158: { /* n:\"BrtEndList\", */ T:-1 },\n\t0x0159: { /* n:\"BrtBeginListCols\", */ T:1 },\n\t0x015A: { /* n:\"BrtEndListCols\", */ T:-1 },\n\t0x015B: { /* n:\"BrtBeginListCol\", */ T:1 },\n\t0x015C: { /* n:\"BrtEndListCol\", */ T:-1 },\n\t0x015D: { /* n:\"BrtBeginListXmlCPr\", */ T:1 },\n\t0x015E: { /* n:\"BrtEndListXmlCPr\", */ T:-1 },\n\t0x015F: { /* n:\"BrtListCCFmla\" */ },\n\t0x0160: { /* n:\"BrtListTrFmla\" */ },\n\t0x0161: { /* n:\"BrtBeginExternals\", */ T:1 },\n\t0x0162: { /* n:\"BrtEndExternals\", */ T:-1 },\n\t0x0163: { /* n:\"BrtSupBookSrc\", */ f:parse_RelID},\n\t0x0165: { /* n:\"BrtSupSelf\" */ },\n\t0x0166: { /* n:\"BrtSupSame\" */ },\n\t0x0167: { /* n:\"BrtSupTabs\" */ },\n\t0x0168: { /* n:\"BrtBeginSupBook\", */ T:1 },\n\t0x0169: { /* n:\"BrtPlaceholderName\" */ },\n\t0x016A: { /* n:\"BrtExternSheet\", */ f:parse_ExternSheet },\n\t0x016B: { /* n:\"BrtExternTableStart\" */ },\n\t0x016C: { /* n:\"BrtExternTableEnd\" */ },\n\t0x016E: { /* n:\"BrtExternRowHdr\" */ },\n\t0x016F: { /* n:\"BrtExternCellBlank\" */ },\n\t0x0170: { /* n:\"BrtExternCellReal\" */ },\n\t0x0171: { /* n:\"BrtExternCellBool\" */ },\n\t0x0172: { /* n:\"BrtExternCellError\" */ },\n\t0x0173: { /* n:\"BrtExternCellString\" */ },\n\t0x0174: { /* n:\"BrtBeginEsmdx\", */ T:1 },\n\t0x0175: { /* n:\"BrtEndEsmdx\", */ T:-1 },\n\t0x0176: { /* n:\"BrtBeginMdxSet\", */ T:1 },\n\t0x0177: { /* n:\"BrtEndMdxSet\", */ T:-1 },\n\t0x0178: { /* n:\"BrtBeginMdxMbrProp\", */ T:1 },\n\t0x0179: { /* n:\"BrtEndMdxMbrProp\", */ T:-1 },\n\t0x017A: { /* n:\"BrtBeginMdxKPI\", */ T:1 },\n\t0x017B: { /* n:\"BrtEndMdxKPI\", */ T:-1 },\n\t0x017C: { /* n:\"BrtBeginEsstr\", */ T:1 },\n\t0x017D: { /* n:\"BrtEndEsstr\", */ T:-1 },\n\t0x017E: { /* n:\"BrtBeginPRFItem\", */ T:1 },\n\t0x017F: { /* n:\"BrtEndPRFItem\", */ T:-1 },\n\t0x0180: { /* n:\"BrtBeginPivotCacheIDs\", */ T:1 },\n\t0x0181: { /* n:\"BrtEndPivotCacheIDs\", */ T:-1 },\n\t0x0182: { /* n:\"BrtBeginPivotCacheID\", */ T:1 },\n\t0x0183: { /* n:\"BrtEndPivotCacheID\", */ T:-1 },\n\t0x0184: { /* n:\"BrtBeginISXVIs\", */ T:1 },\n\t0x0185: { /* n:\"BrtEndISXVIs\", */ T:-1 },\n\t0x0186: { /* n:\"BrtBeginColInfos\", */ T:1 },\n\t0x0187: { /* n:\"BrtEndColInfos\", */ T:-1 },\n\t0x0188: { /* n:\"BrtBeginRwBrk\", */ T:1 },\n\t0x0189: { /* n:\"BrtEndRwBrk\", */ T:-1 },\n\t0x018A: { /* n:\"BrtBeginColBrk\", */ T:1 },\n\t0x018B: { /* n:\"BrtEndColBrk\", */ T:-1 },\n\t0x018C: { /* n:\"BrtBrk\" */ },\n\t0x018D: { /* n:\"BrtUserBookView\" */ },\n\t0x018E: { /* n:\"BrtInfo\" */ },\n\t0x018F: { /* n:\"BrtCUsr\" */ },\n\t0x0190: { /* n:\"BrtUsr\" */ },\n\t0x0191: { /* n:\"BrtBeginUsers\", */ T:1 },\n\t0x0193: { /* n:\"BrtEOF\" */ },\n\t0x0194: { /* n:\"BrtUCR\" */ },\n\t0x0195: { /* n:\"BrtRRInsDel\" */ },\n\t0x0196: { /* n:\"BrtRREndInsDel\" */ },\n\t0x0197: { /* n:\"BrtRRMove\" */ },\n\t0x0198: { /* n:\"BrtRREndMove\" */ },\n\t0x0199: { /* n:\"BrtRRChgCell\" */ },\n\t0x019A: { /* n:\"BrtRREndChgCell\" */ },\n\t0x019B: { /* n:\"BrtRRHeader\" */ },\n\t0x019C: { /* n:\"BrtRRUserView\" */ },\n\t0x019D: { /* n:\"BrtRRRenSheet\" */ },\n\t0x019E: { /* n:\"BrtRRInsertSh\" */ },\n\t0x019F: { /* n:\"BrtRRDefName\" */ },\n\t0x01A0: { /* n:\"BrtRRNote\" */ },\n\t0x01A1: { /* n:\"BrtRRConflict\" */ },\n\t0x01A2: { /* n:\"BrtRRTQSIF\" */ },\n\t0x01A3: { /* n:\"BrtRRFormat\" */ },\n\t0x01A4: { /* n:\"BrtRREndFormat\" */ },\n\t0x01A5: { /* n:\"BrtRRAutoFmt\" */ },\n\t0x01A6: { /* n:\"BrtBeginUserShViews\", */ T:1 },\n\t0x01A7: { /* n:\"BrtBeginUserShView\", */ T:1 },\n\t0x01A8: { /* n:\"BrtEndUserShView\", */ T:-1 },\n\t0x01A9: { /* n:\"BrtEndUserShViews\", */ T:-1 },\n\t0x01AA: { /* n:\"BrtArrFmla\", */ f:parse_BrtArrFmla },\n\t0x01AB: { /* n:\"BrtShrFmla\", */ f:parse_BrtShrFmla },\n\t0x01AC: { /* n:\"BrtTable\" */ },\n\t0x01AD: { /* n:\"BrtBeginExtConnections\", */ T:1 },\n\t0x01AE: { /* n:\"BrtEndExtConnections\", */ T:-1 },\n\t0x01AF: { /* n:\"BrtBeginPCDCalcMems\", */ T:1 },\n\t0x01B0: { /* n:\"BrtEndPCDCalcMems\", */ T:-1 },\n\t0x01B1: { /* n:\"BrtBeginPCDCalcMem\", */ T:1 },\n\t0x01B2: { /* n:\"BrtEndPCDCalcMem\", */ T:-1 },\n\t0x01B3: { /* n:\"BrtBeginPCDHGLevels\", */ T:1 },\n\t0x01B4: { /* n:\"BrtEndPCDHGLevels\", */ T:-1 },\n\t0x01B5: { /* n:\"BrtBeginPCDHGLevel\", */ T:1 },\n\t0x01B6: { /* n:\"BrtEndPCDHGLevel\", */ T:-1 },\n\t0x01B7: { /* n:\"BrtBeginPCDHGLGroups\", */ T:1 },\n\t0x01B8: { /* n:\"BrtEndPCDHGLGroups\", */ T:-1 },\n\t0x01B9: { /* n:\"BrtBeginPCDHGLGroup\", */ T:1 },\n\t0x01BA: { /* n:\"BrtEndPCDHGLGroup\", */ T:-1 },\n\t0x01BB: { /* n:\"BrtBeginPCDHGLGMembers\", */ T:1 },\n\t0x01BC: { /* n:\"BrtEndPCDHGLGMembers\", */ T:-1 },\n\t0x01BD: { /* n:\"BrtBeginPCDHGLGMember\", */ T:1 },\n\t0x01BE: { /* n:\"BrtEndPCDHGLGMember\", */ T:-1 },\n\t0x01BF: { /* n:\"BrtBeginQSI\", */ T:1 },\n\t0x01C0: { /* n:\"BrtEndQSI\", */ T:-1 },\n\t0x01C1: { /* n:\"BrtBeginQSIR\", */ T:1 },\n\t0x01C2: { /* n:\"BrtEndQSIR\", */ T:-1 },\n\t0x01C3: { /* n:\"BrtBeginDeletedNames\", */ T:1 },\n\t0x01C4: { /* n:\"BrtEndDeletedNames\", */ T:-1 },\n\t0x01C5: { /* n:\"BrtBeginDeletedName\", */ T:1 },\n\t0x01C6: { /* n:\"BrtEndDeletedName\", */ T:-1 },\n\t0x01C7: { /* n:\"BrtBeginQSIFs\", */ T:1 },\n\t0x01C8: { /* n:\"BrtEndQSIFs\", */ T:-1 },\n\t0x01C9: { /* n:\"BrtBeginQSIF\", */ T:1 },\n\t0x01CA: { /* n:\"BrtEndQSIF\", */ T:-1 },\n\t0x01CB: { /* n:\"BrtBeginAutoSortScope\", */ T:1 },\n\t0x01CC: { /* n:\"BrtEndAutoSortScope\", */ T:-1 },\n\t0x01CD: { /* n:\"BrtBeginConditionalFormatting\", */ T:1 },\n\t0x01CE: { /* n:\"BrtEndConditionalFormatting\", */ T:-1 },\n\t0x01CF: { /* n:\"BrtBeginCFRule\", */ T:1 },\n\t0x01D0: { /* n:\"BrtEndCFRule\", */ T:-1 },\n\t0x01D1: { /* n:\"BrtBeginIconSet\", */ T:1 },\n\t0x01D2: { /* n:\"BrtEndIconSet\", */ T:-1 },\n\t0x01D3: { /* n:\"BrtBeginDatabar\", */ T:1 },\n\t0x01D4: { /* n:\"BrtEndDatabar\", */ T:-1 },\n\t0x01D5: { /* n:\"BrtBeginColorScale\", */ T:1 },\n\t0x01D6: { /* n:\"BrtEndColorScale\", */ T:-1 },\n\t0x01D7: { /* n:\"BrtCFVO\" */ },\n\t0x01D8: { /* n:\"BrtExternValueMeta\" */ },\n\t0x01D9: { /* n:\"BrtBeginColorPalette\", */ T:1 },\n\t0x01DA: { /* n:\"BrtEndColorPalette\", */ T:-1 },\n\t0x01DB: { /* n:\"BrtIndexedColor\" */ },\n\t0x01DC: { /* n:\"BrtMargins\", */ f:parse_BrtMargins },\n\t0x01DD: { /* n:\"BrtPrintOptions\" */ },\n\t0x01DE: { /* n:\"BrtPageSetup\" */ },\n\t0x01DF: { /* n:\"BrtBeginHeaderFooter\", */ T:1 },\n\t0x01E0: { /* n:\"BrtEndHeaderFooter\", */ T:-1 },\n\t0x01E1: { /* n:\"BrtBeginSXCrtFormat\", */ T:1 },\n\t0x01E2: { /* n:\"BrtEndSXCrtFormat\", */ T:-1 },\n\t0x01E3: { /* n:\"BrtBeginSXCrtFormats\", */ T:1 },\n\t0x01E4: { /* n:\"BrtEndSXCrtFormats\", */ T:-1 },\n\t0x01E5: { /* n:\"BrtWsFmtInfo\", */ f:parse_BrtWsFmtInfo },\n\t0x01E6: { /* n:\"BrtBeginMgs\", */ T:1 },\n\t0x01E7: { /* n:\"BrtEndMGs\", */ T:-1 },\n\t0x01E8: { /* n:\"BrtBeginMGMaps\", */ T:1 },\n\t0x01E9: { /* n:\"BrtEndMGMaps\", */ T:-1 },\n\t0x01EA: { /* n:\"BrtBeginMG\", */ T:1 },\n\t0x01EB: { /* n:\"BrtEndMG\", */ T:-1 },\n\t0x01EC: { /* n:\"BrtBeginMap\", */ T:1 },\n\t0x01ED: { /* n:\"BrtEndMap\", */ T:-1 },\n\t0x01EE: { /* n:\"BrtHLink\", */ f:parse_BrtHLink },\n\t0x01EF: { /* n:\"BrtBeginDCon\", */ T:1 },\n\t0x01F0: { /* n:\"BrtEndDCon\", */ T:-1 },\n\t0x01F1: { /* n:\"BrtBeginDRefs\", */ T:1 },\n\t0x01F2: { /* n:\"BrtEndDRefs\", */ T:-1 },\n\t0x01F3: { /* n:\"BrtDRef\" */ },\n\t0x01F4: { /* n:\"BrtBeginScenMan\", */ T:1 },\n\t0x01F5: { /* n:\"BrtEndScenMan\", */ T:-1 },\n\t0x01F6: { /* n:\"BrtBeginSct\", */ T:1 },\n\t0x01F7: { /* n:\"BrtEndSct\", */ T:-1 },\n\t0x01F8: { /* n:\"BrtSlc\" */ },\n\t0x01F9: { /* n:\"BrtBeginDXFs\", */ T:1 },\n\t0x01FA: { /* n:\"BrtEndDXFs\", */ T:-1 },\n\t0x01FB: { /* n:\"BrtDXF\" */ },\n\t0x01FC: { /* n:\"BrtBeginTableStyles\", */ T:1 },\n\t0x01FD: { /* n:\"BrtEndTableStyles\", */ T:-1 },\n\t0x01FE: { /* n:\"BrtBeginTableStyle\", */ T:1 },\n\t0x01FF: { /* n:\"BrtEndTableStyle\", */ T:-1 },\n\t0x0200: { /* n:\"BrtTableStyleElement\" */ },\n\t0x0201: { /* n:\"BrtTableStyleClient\" */ },\n\t0x0202: { /* n:\"BrtBeginVolDeps\", */ T:1 },\n\t0x0203: { /* n:\"BrtEndVolDeps\", */ T:-1 },\n\t0x0204: { /* n:\"BrtBeginVolType\", */ T:1 },\n\t0x0205: { /* n:\"BrtEndVolType\", */ T:-1 },\n\t0x0206: { /* n:\"BrtBeginVolMain\", */ T:1 },\n\t0x0207: { /* n:\"BrtEndVolMain\", */ T:-1 },\n\t0x0208: { /* n:\"BrtBeginVolTopic\", */ T:1 },\n\t0x0209: { /* n:\"BrtEndVolTopic\", */ T:-1 },\n\t0x020A: { /* n:\"BrtVolSubtopic\" */ },\n\t0x020B: { /* n:\"BrtVolRef\" */ },\n\t0x020C: { /* n:\"BrtVolNum\" */ },\n\t0x020D: { /* n:\"BrtVolErr\" */ },\n\t0x020E: { /* n:\"BrtVolStr\" */ },\n\t0x020F: { /* n:\"BrtVolBool\" */ },\n\t0x0210: { /* n:\"BrtBeginCalcChain$\", */ T:1 },\n\t0x0211: { /* n:\"BrtEndCalcChain$\", */ T:-1 },\n\t0x0212: { /* n:\"BrtBeginSortState\", */ T:1 },\n\t0x0213: { /* n:\"BrtEndSortState\", */ T:-1 },\n\t0x0214: { /* n:\"BrtBeginSortCond\", */ T:1 },\n\t0x0215: { /* n:\"BrtEndSortCond\", */ T:-1 },\n\t0x0216: { /* n:\"BrtBookProtection\" */ },\n\t0x0217: { /* n:\"BrtSheetProtection\" */ },\n\t0x0218: { /* n:\"BrtRangeProtection\" */ },\n\t0x0219: { /* n:\"BrtPhoneticInfo\" */ },\n\t0x021A: { /* n:\"BrtBeginECTxtWiz\", */ T:1 },\n\t0x021B: { /* n:\"BrtEndECTxtWiz\", */ T:-1 },\n\t0x021C: { /* n:\"BrtBeginECTWFldInfoLst\", */ T:1 },\n\t0x021D: { /* n:\"BrtEndECTWFldInfoLst\", */ T:-1 },\n\t0x021E: { /* n:\"BrtBeginECTwFldInfo\", */ T:1 },\n\t0x0224: { /* n:\"BrtFileSharing\" */ },\n\t0x0225: { /* n:\"BrtOleSize\" */ },\n\t0x0226: { /* n:\"BrtDrawing\", */ f:parse_RelID },\n\t0x0227: { /* n:\"BrtLegacyDrawing\", */ f:parse_XLNullableWideString },\n\t0x0228: { /* n:\"BrtLegacyDrawingHF\" */ },\n\t0x0229: { /* n:\"BrtWebOpt\" */ },\n\t0x022A: { /* n:\"BrtBeginWebPubItems\", */ T:1 },\n\t0x022B: { /* n:\"BrtEndWebPubItems\", */ T:-1 },\n\t0x022C: { /* n:\"BrtBeginWebPubItem\", */ T:1 },\n\t0x022D: { /* n:\"BrtEndWebPubItem\", */ T:-1 },\n\t0x022E: { /* n:\"BrtBeginSXCondFmt\", */ T:1 },\n\t0x022F: { /* n:\"BrtEndSXCondFmt\", */ T:-1 },\n\t0x0230: { /* n:\"BrtBeginSXCondFmts\", */ T:1 },\n\t0x0231: { /* n:\"BrtEndSXCondFmts\", */ T:-1 },\n\t0x0232: { /* n:\"BrtBkHim\" */ },\n\t0x0234: { /* n:\"BrtColor\" */ },\n\t0x0235: { /* n:\"BrtBeginIndexedColors\", */ T:1 },\n\t0x0236: { /* n:\"BrtEndIndexedColors\", */ T:-1 },\n\t0x0239: { /* n:\"BrtBeginMRUColors\", */ T:1 },\n\t0x023A: { /* n:\"BrtEndMRUColors\", */ T:-1 },\n\t0x023C: { /* n:\"BrtMRUColor\" */ },\n\t0x023D: { /* n:\"BrtBeginDVals\", */ T:1 },\n\t0x023E: { /* n:\"BrtEndDVals\", */ T:-1 },\n\t0x0241: { /* n:\"BrtSupNameStart\" */ },\n\t0x0242: { /* n:\"BrtSupNameValueStart\" */ },\n\t0x0243: { /* n:\"BrtSupNameValueEnd\" */ },\n\t0x0244: { /* n:\"BrtSupNameNum\" */ },\n\t0x0245: { /* n:\"BrtSupNameErr\" */ },\n\t0x0246: { /* n:\"BrtSupNameSt\" */ },\n\t0x0247: { /* n:\"BrtSupNameNil\" */ },\n\t0x0248: { /* n:\"BrtSupNameBool\" */ },\n\t0x0249: { /* n:\"BrtSupNameFmla\" */ },\n\t0x024A: { /* n:\"BrtSupNameBits\" */ },\n\t0x024B: { /* n:\"BrtSupNameEnd\" */ },\n\t0x024C: { /* n:\"BrtEndSupBook\", */ T:-1 },\n\t0x024D: { /* n:\"BrtCellSmartTagProperty\" */ },\n\t0x024E: { /* n:\"BrtBeginCellSmartTag\", */ T:1 },\n\t0x024F: { /* n:\"BrtEndCellSmartTag\", */ T:-1 },\n\t0x0250: { /* n:\"BrtBeginCellSmartTags\", */ T:1 },\n\t0x0251: { /* n:\"BrtEndCellSmartTags\", */ T:-1 },\n\t0x0252: { /* n:\"BrtBeginSmartTags\", */ T:1 },\n\t0x0253: { /* n:\"BrtEndSmartTags\", */ T:-1 },\n\t0x0254: { /* n:\"BrtSmartTagType\" */ },\n\t0x0255: { /* n:\"BrtBeginSmartTagTypes\", */ T:1 },\n\t0x0256: { /* n:\"BrtEndSmartTagTypes\", */ T:-1 },\n\t0x0257: { /* n:\"BrtBeginSXFilters\", */ T:1 },\n\t0x0258: { /* n:\"BrtEndSXFilters\", */ T:-1 },\n\t0x0259: { /* n:\"BrtBeginSXFILTER\", */ T:1 },\n\t0x025A: { /* n:\"BrtEndSXFilter\", */ T:-1 },\n\t0x025B: { /* n:\"BrtBeginFills\", */ T:1 },\n\t0x025C: { /* n:\"BrtEndFills\", */ T:-1 },\n\t0x025D: { /* n:\"BrtBeginCellWatches\", */ T:1 },\n\t0x025E: { /* n:\"BrtEndCellWatches\", */ T:-1 },\n\t0x025F: { /* n:\"BrtCellWatch\" */ },\n\t0x0260: { /* n:\"BrtBeginCRErrs\", */ T:1 },\n\t0x0261: { /* n:\"BrtEndCRErrs\", */ T:-1 },\n\t0x0262: { /* n:\"BrtCrashRecErr\" */ },\n\t0x0263: { /* n:\"BrtBeginFonts\", */ T:1 },\n\t0x0264: { /* n:\"BrtEndFonts\", */ T:-1 },\n\t0x0265: { /* n:\"BrtBeginBorders\", */ T:1 },\n\t0x0266: { /* n:\"BrtEndBorders\", */ T:-1 },\n\t0x0267: { /* n:\"BrtBeginFmts\", */ T:1 },\n\t0x0268: { /* n:\"BrtEndFmts\", */ T:-1 },\n\t0x0269: { /* n:\"BrtBeginCellXFs\", */ T:1 },\n\t0x026A: { /* n:\"BrtEndCellXFs\", */ T:-1 },\n\t0x026B: { /* n:\"BrtBeginStyles\", */ T:1 },\n\t0x026C: { /* n:\"BrtEndStyles\", */ T:-1 },\n\t0x0271: { /* n:\"BrtBigName\" */ },\n\t0x0272: { /* n:\"BrtBeginCellStyleXFs\", */ T:1 },\n\t0x0273: { /* n:\"BrtEndCellStyleXFs\", */ T:-1 },\n\t0x0274: { /* n:\"BrtBeginComments\", */ T:1 },\n\t0x0275: { /* n:\"BrtEndComments\", */ T:-1 },\n\t0x0276: { /* n:\"BrtBeginCommentAuthors\", */ T:1 },\n\t0x0277: { /* n:\"BrtEndCommentAuthors\", */ T:-1 },\n\t0x0278: { /* n:\"BrtCommentAuthor\", */ f:parse_BrtCommentAuthor },\n\t0x0279: { /* n:\"BrtBeginCommentList\", */ T:1 },\n\t0x027A: { /* n:\"BrtEndCommentList\", */ T:-1 },\n\t0x027B: { /* n:\"BrtBeginComment\", */ T:1, f:parse_BrtBeginComment},\n\t0x027C: { /* n:\"BrtEndComment\", */ T:-1 },\n\t0x027D: { /* n:\"BrtCommentText\", */ f:parse_BrtCommentText },\n\t0x027E: { /* n:\"BrtBeginOleObjects\", */ T:1 },\n\t0x027F: { /* n:\"BrtOleObject\" */ },\n\t0x0280: { /* n:\"BrtEndOleObjects\", */ T:-1 },\n\t0x0281: { /* n:\"BrtBeginSxrules\", */ T:1 },\n\t0x0282: { /* n:\"BrtEndSxRules\", */ T:-1 },\n\t0x0283: { /* n:\"BrtBeginActiveXControls\", */ T:1 },\n\t0x0284: { /* n:\"BrtActiveX\" */ },\n\t0x0285: { /* n:\"BrtEndActiveXControls\", */ T:-1 },\n\t0x0286: { /* n:\"BrtBeginPCDSDTCEMembersSortBy\", */ T:1 },\n\t0x0288: { /* n:\"BrtBeginCellIgnoreECs\", */ T:1 },\n\t0x0289: { /* n:\"BrtCellIgnoreEC\" */ },\n\t0x028A: { /* n:\"BrtEndCellIgnoreECs\", */ T:-1 },\n\t0x028B: { /* n:\"BrtCsProp\", */ f:parse_BrtCsProp },\n\t0x028C: { /* n:\"BrtCsPageSetup\" */ },\n\t0x028D: { /* n:\"BrtBeginUserCsViews\", */ T:1 },\n\t0x028E: { /* n:\"BrtEndUserCsViews\", */ T:-1 },\n\t0x028F: { /* n:\"BrtBeginUserCsView\", */ T:1 },\n\t0x0290: { /* n:\"BrtEndUserCsView\", */ T:-1 },\n\t0x0291: { /* n:\"BrtBeginPcdSFCIEntries\", */ T:1 },\n\t0x0292: { /* n:\"BrtEndPCDSFCIEntries\", */ T:-1 },\n\t0x0293: { /* n:\"BrtPCDSFCIEntry\" */ },\n\t0x0294: { /* n:\"BrtBeginListParts\", */ T:1 },\n\t0x0295: { /* n:\"BrtListPart\" */ },\n\t0x0296: { /* n:\"BrtEndListParts\", */ T:-1 },\n\t0x0297: { /* n:\"BrtSheetCalcProp\" */ },\n\t0x0298: { /* n:\"BrtBeginFnGroup\", */ T:1 },\n\t0x0299: { /* n:\"BrtFnGroup\" */ },\n\t0x029A: { /* n:\"BrtEndFnGroup\", */ T:-1 },\n\t0x029B: { /* n:\"BrtSupAddin\" */ },\n\t0x029C: { /* n:\"BrtSXTDMPOrder\" */ },\n\t0x029D: { /* n:\"BrtCsProtection\" */ },\n\t0x029F: { /* n:\"BrtBeginWsSortMap\", */ T:1 },\n\t0x02A0: { /* n:\"BrtEndWsSortMap\", */ T:-1 },\n\t0x02A1: { /* n:\"BrtBeginRRSort\", */ T:1 },\n\t0x02A2: { /* n:\"BrtEndRRSort\", */ T:-1 },\n\t0x02A3: { /* n:\"BrtRRSortItem\" */ },\n\t0x02A4: { /* n:\"BrtFileSharingIso\" */ },\n\t0x02A5: { /* n:\"BrtBookProtectionIso\" */ },\n\t0x02A6: { /* n:\"BrtSheetProtectionIso\" */ },\n\t0x02A7: { /* n:\"BrtCsProtectionIso\" */ },\n\t0x02A8: { /* n:\"BrtRangeProtectionIso\" */ },\n\t0x02A9: { /* n:\"BrtDValList\" */ },\n\t0x0400: { /* n:\"BrtRwDescent\" */ },\n\t0x0401: { /* n:\"BrtKnownFonts\" */ },\n\t0x0402: { /* n:\"BrtBeginSXTupleSet\", */ T:1 },\n\t0x0403: { /* n:\"BrtEndSXTupleSet\", */ T:-1 },\n\t0x0404: { /* n:\"BrtBeginSXTupleSetHeader\", */ T:1 },\n\t0x0405: { /* n:\"BrtEndSXTupleSetHeader\", */ T:-1 },\n\t0x0406: { /* n:\"BrtSXTupleSetHeaderItem\" */ },\n\t0x0407: { /* n:\"BrtBeginSXTupleSetData\", */ T:1 },\n\t0x0408: { /* n:\"BrtEndSXTupleSetData\", */ T:-1 },\n\t0x0409: { /* n:\"BrtBeginSXTupleSetRow\", */ T:1 },\n\t0x040A: { /* n:\"BrtEndSXTupleSetRow\", */ T:-1 },\n\t0x040B: { /* n:\"BrtSXTupleSetRowItem\" */ },\n\t0x040C: { /* n:\"BrtNameExt\" */ },\n\t0x040D: { /* n:\"BrtPCDH14\" */ },\n\t0x040E: { /* n:\"BrtBeginPCDCalcMem14\", */ T:1 },\n\t0x040F: { /* n:\"BrtEndPCDCalcMem14\", */ T:-1 },\n\t0x0410: { /* n:\"BrtSXTH14\" */ },\n\t0x0411: { /* n:\"BrtBeginSparklineGroup\", */ T:1 },\n\t0x0412: { /* n:\"BrtEndSparklineGroup\", */ T:-1 },\n\t0x0413: { /* n:\"BrtSparkline\" */ },\n\t0x0414: { /* n:\"BrtSXDI14\" */ },\n\t0x0415: { /* n:\"BrtWsFmtInfoEx14\" */ },\n\t0x0416: { /* n:\"BrtBeginConditionalFormatting14\", */ T:1 },\n\t0x0417: { /* n:\"BrtEndConditionalFormatting14\", */ T:-1 },\n\t0x0418: { /* n:\"BrtBeginCFRule14\", */ T:1 },\n\t0x0419: { /* n:\"BrtEndCFRule14\", */ T:-1 },\n\t0x041A: { /* n:\"BrtCFVO14\" */ },\n\t0x041B: { /* n:\"BrtBeginDatabar14\", */ T:1 },\n\t0x041C: { /* n:\"BrtBeginIconSet14\", */ T:1 },\n\t0x041D: { /* n:\"BrtDVal14\", */ f: parse_BrtDVal14 },\n\t0x041E: { /* n:\"BrtBeginDVals14\", */ T:1 },\n\t0x041F: { /* n:\"BrtColor14\" */ },\n\t0x0420: { /* n:\"BrtBeginSparklines\", */ T:1 },\n\t0x0421: { /* n:\"BrtEndSparklines\", */ T:-1 },\n\t0x0422: { /* n:\"BrtBeginSparklineGroups\", */ T:1 },\n\t0x0423: { /* n:\"BrtEndSparklineGroups\", */ T:-1 },\n\t0x0425: { /* n:\"BrtSXVD14\" */ },\n\t0x0426: { /* n:\"BrtBeginSXView14\", */ T:1 },\n\t0x0427: { /* n:\"BrtEndSXView14\", */ T:-1 },\n\t0x0428: { /* n:\"BrtBeginSXView16\", */ T:1 },\n\t0x0429: { /* n:\"BrtEndSXView16\", */ T:-1 },\n\t0x042A: { /* n:\"BrtBeginPCD14\", */ T:1 },\n\t0x042B: { /* n:\"BrtEndPCD14\", */ T:-1 },\n\t0x042C: { /* n:\"BrtBeginExtConn14\", */ T:1 },\n\t0x042D: { /* n:\"BrtEndExtConn14\", */ T:-1 },\n\t0x042E: { /* n:\"BrtBeginSlicerCacheIDs\", */ T:1 },\n\t0x042F: { /* n:\"BrtEndSlicerCacheIDs\", */ T:-1 },\n\t0x0430: { /* n:\"BrtBeginSlicerCacheID\", */ T:1 },\n\t0x0431: { /* n:\"BrtEndSlicerCacheID\", */ T:-1 },\n\t0x0433: { /* n:\"BrtBeginSlicerCache\", */ T:1 },\n\t0x0434: { /* n:\"BrtEndSlicerCache\", */ T:-1 },\n\t0x0435: { /* n:\"BrtBeginSlicerCacheDef\", */ T:1 },\n\t0x0436: { /* n:\"BrtEndSlicerCacheDef\", */ T:-1 },\n\t0x0437: { /* n:\"BrtBeginSlicersEx\", */ T:1 },\n\t0x0438: { /* n:\"BrtEndSlicersEx\", */ T:-1 },\n\t0x0439: { /* n:\"BrtBeginSlicerEx\", */ T:1 },\n\t0x043A: { /* n:\"BrtEndSlicerEx\", */ T:-1 },\n\t0x043B: { /* n:\"BrtBeginSlicer\", */ T:1 },\n\t0x043C: { /* n:\"BrtEndSlicer\", */ T:-1 },\n\t0x043D: { /* n:\"BrtSlicerCachePivotTables\" */ },\n\t0x043E: { /* n:\"BrtBeginSlicerCacheOlapImpl\", */ T:1 },\n\t0x043F: { /* n:\"BrtEndSlicerCacheOlapImpl\", */ T:-1 },\n\t0x0440: { /* n:\"BrtBeginSlicerCacheLevelsData\", */ T:1 },\n\t0x0441: { /* n:\"BrtEndSlicerCacheLevelsData\", */ T:-1 },\n\t0x0442: { /* n:\"BrtBeginSlicerCacheLevelData\", */ T:1 },\n\t0x0443: { /* n:\"BrtEndSlicerCacheLevelData\", */ T:-1 },\n\t0x0444: { /* n:\"BrtBeginSlicerCacheSiRanges\", */ T:1 },\n\t0x0445: { /* n:\"BrtEndSlicerCacheSiRanges\", */ T:-1 },\n\t0x0446: { /* n:\"BrtBeginSlicerCacheSiRange\", */ T:1 },\n\t0x0447: { /* n:\"BrtEndSlicerCacheSiRange\", */ T:-1 },\n\t0x0448: { /* n:\"BrtSlicerCacheOlapItem\" */ },\n\t0x0449: { /* n:\"BrtBeginSlicerCacheSelections\", */ T:1 },\n\t0x044A: { /* n:\"BrtSlicerCacheSelection\" */ },\n\t0x044B: { /* n:\"BrtEndSlicerCacheSelections\", */ T:-1 },\n\t0x044C: { /* n:\"BrtBeginSlicerCacheNative\", */ T:1 },\n\t0x044D: { /* n:\"BrtEndSlicerCacheNative\", */ T:-1 },\n\t0x044E: { /* n:\"BrtSlicerCacheNativeItem\" */ },\n\t0x044F: { /* n:\"BrtRangeProtection14\" */ },\n\t0x0450: { /* n:\"BrtRangeProtectionIso14\" */ },\n\t0x0451: { /* n:\"BrtCellIgnoreEC14\" */ },\n\t0x0457: { /* n:\"BrtList14\" */ },\n\t0x0458: { /* n:\"BrtCFIcon\" */ },\n\t0x0459: { /* n:\"BrtBeginSlicerCachesPivotCacheIDs\", */ T:1 },\n\t0x045A: { /* n:\"BrtEndSlicerCachesPivotCacheIDs\", */ T:-1 },\n\t0x045B: { /* n:\"BrtBeginSlicers\", */ T:1 },\n\t0x045C: { /* n:\"BrtEndSlicers\", */ T:-1 },\n\t0x045D: { /* n:\"BrtWbProp14\" */ },\n\t0x045E: { /* n:\"BrtBeginSXEdit\", */ T:1 },\n\t0x045F: { /* n:\"BrtEndSXEdit\", */ T:-1 },\n\t0x0460: { /* n:\"BrtBeginSXEdits\", */ T:1 },\n\t0x0461: { /* n:\"BrtEndSXEdits\", */ T:-1 },\n\t0x0462: { /* n:\"BrtBeginSXChange\", */ T:1 },\n\t0x0463: { /* n:\"BrtEndSXChange\", */ T:-1 },\n\t0x0464: { /* n:\"BrtBeginSXChanges\", */ T:1 },\n\t0x0465: { /* n:\"BrtEndSXChanges\", */ T:-1 },\n\t0x0466: { /* n:\"BrtSXTupleItems\" */ },\n\t0x0468: { /* n:\"BrtBeginSlicerStyle\", */ T:1 },\n\t0x0469: { /* n:\"BrtEndSlicerStyle\", */ T:-1 },\n\t0x046A: { /* n:\"BrtSlicerStyleElement\" */ },\n\t0x046B: { /* n:\"BrtBeginStyleSheetExt14\", */ T:1 },\n\t0x046C: { /* n:\"BrtEndStyleSheetExt14\", */ T:-1 },\n\t0x046D: { /* n:\"BrtBeginSlicerCachesPivotCacheID\", */ T:1 },\n\t0x046E: { /* n:\"BrtEndSlicerCachesPivotCacheID\", */ T:-1 },\n\t0x046F: { /* n:\"BrtBeginConditionalFormattings\", */ T:1 },\n\t0x0470: { /* n:\"BrtEndConditionalFormattings\", */ T:-1 },\n\t0x0471: { /* n:\"BrtBeginPCDCalcMemExt\", */ T:1 },\n\t0x0472: { /* n:\"BrtEndPCDCalcMemExt\", */ T:-1 },\n\t0x0473: { /* n:\"BrtBeginPCDCalcMemsExt\", */ T:1 },\n\t0x0474: { /* n:\"BrtEndPCDCalcMemsExt\", */ T:-1 },\n\t0x0475: { /* n:\"BrtPCDField14\" */ },\n\t0x0476: { /* n:\"BrtBeginSlicerStyles\", */ T:1 },\n\t0x0477: { /* n:\"BrtEndSlicerStyles\", */ T:-1 },\n\t0x0478: { /* n:\"BrtBeginSlicerStyleElements\", */ T:1 },\n\t0x0479: { /* n:\"BrtEndSlicerStyleElements\", */ T:-1 },\n\t0x047A: { /* n:\"BrtCFRuleExt\" */ },\n\t0x047B: { /* n:\"BrtBeginSXCondFmt14\", */ T:1 },\n\t0x047C: { /* n:\"BrtEndSXCondFmt14\", */ T:-1 },\n\t0x047D: { /* n:\"BrtBeginSXCondFmts14\", */ T:1 },\n\t0x047E: { /* n:\"BrtEndSXCondFmts14\", */ T:-1 },\n\t0x0480: { /* n:\"BrtBeginSortCond14\", */ T:1 },\n\t0x0481: { /* n:\"BrtEndSortCond14\", */ T:-1 },\n\t0x0482: { /* n:\"BrtEndDVals14\", */ T:-1 },\n\t0x0483: { /* n:\"BrtEndIconSet14\", */ T:-1 },\n\t0x0484: { /* n:\"BrtEndDatabar14\", */ T:-1 },\n\t0x0485: { /* n:\"BrtBeginColorScale14\", */ T:1 },\n\t0x0486: { /* n:\"BrtEndColorScale14\", */ T:-1 },\n\t0x0487: { /* n:\"BrtBeginSxrules14\", */ T:1 },\n\t0x0488: { /* n:\"BrtEndSxrules14\", */ T:-1 },\n\t0x0489: { /* n:\"BrtBeginPRule14\", */ T:1 },\n\t0x048A: { /* n:\"BrtEndPRule14\", */ T:-1 },\n\t0x048B: { /* n:\"BrtBeginPRFilters14\", */ T:1 },\n\t0x048C: { /* n:\"BrtEndPRFilters14\", */ T:-1 },\n\t0x048D: { /* n:\"BrtBeginPRFilter14\", */ T:1 },\n\t0x048E: { /* n:\"BrtEndPRFilter14\", */ T:-1 },\n\t0x048F: { /* n:\"BrtBeginPRFItem14\", */ T:1 },\n\t0x0490: { /* n:\"BrtEndPRFItem14\", */ T:-1 },\n\t0x0491: { /* n:\"BrtBeginCellIgnoreECs14\", */ T:1 },\n\t0x0492: { /* n:\"BrtEndCellIgnoreECs14\", */ T:-1 },\n\t0x0493: { /* n:\"BrtDxf14\" */ },\n\t0x0494: { /* n:\"BrtBeginDxF14s\", */ T:1 },\n\t0x0495: { /* n:\"BrtEndDxf14s\", */ T:-1 },\n\t0x0499: { /* n:\"BrtFilter14\" */ },\n\t0x049A: { /* n:\"BrtBeginCustomFilters14\", */ T:1 },\n\t0x049C: { /* n:\"BrtCustomFilter14\" */ },\n\t0x049D: { /* n:\"BrtIconFilter14\" */ },\n\t0x049E: { /* n:\"BrtPivotCacheConnectionName\" */ },\n\t0x0800: { /* n:\"BrtBeginDecoupledPivotCacheIDs\", */ T:1 },\n\t0x0801: { /* n:\"BrtEndDecoupledPivotCacheIDs\", */ T:-1 },\n\t0x0802: { /* n:\"BrtDecoupledPivotCacheID\" */ },\n\t0x0803: { /* n:\"BrtBeginPivotTableRefs\", */ T:1 },\n\t0x0804: { /* n:\"BrtEndPivotTableRefs\", */ T:-1 },\n\t0x0805: { /* n:\"BrtPivotTableRef\" */ },\n\t0x0806: { /* n:\"BrtSlicerCacheBookPivotTables\" */ },\n\t0x0807: { /* n:\"BrtBeginSxvcells\", */ T:1 },\n\t0x0808: { /* n:\"BrtEndSxvcells\", */ T:-1 },\n\t0x0809: { /* n:\"BrtBeginSxRow\", */ T:1 },\n\t0x080A: { /* n:\"BrtEndSxRow\", */ T:-1 },\n\t0x080C: { /* n:\"BrtPcdCalcMem15\" */ },\n\t0x0813: { /* n:\"BrtQsi15\" */ },\n\t0x0814: { /* n:\"BrtBeginWebExtensions\", */ T:1 },\n\t0x0815: { /* n:\"BrtEndWebExtensions\", */ T:-1 },\n\t0x0816: { /* n:\"BrtWebExtension\" */ },\n\t0x0817: { /* n:\"BrtAbsPath15\" */ },\n\t0x0818: { /* n:\"BrtBeginPivotTableUISettings\", */ T:1 },\n\t0x0819: { /* n:\"BrtEndPivotTableUISettings\", */ T:-1 },\n\t0x081B: { /* n:\"BrtTableSlicerCacheIDs\" */ },\n\t0x081C: { /* n:\"BrtTableSlicerCacheID\" */ },\n\t0x081D: { /* n:\"BrtBeginTableSlicerCache\", */ T:1 },\n\t0x081E: { /* n:\"BrtEndTableSlicerCache\", */ T:-1 },\n\t0x081F: { /* n:\"BrtSxFilter15\" */ },\n\t0x0820: { /* n:\"BrtBeginTimelineCachePivotCacheIDs\", */ T:1 },\n\t0x0821: { /* n:\"BrtEndTimelineCachePivotCacheIDs\", */ T:-1 },\n\t0x0822: { /* n:\"BrtTimelineCachePivotCacheID\" */ },\n\t0x0823: { /* n:\"BrtBeginTimelineCacheIDs\", */ T:1 },\n\t0x0824: { /* n:\"BrtEndTimelineCacheIDs\", */ T:-1 },\n\t0x0825: { /* n:\"BrtBeginTimelineCacheID\", */ T:1 },\n\t0x0826: { /* n:\"BrtEndTimelineCacheID\", */ T:-1 },\n\t0x0827: { /* n:\"BrtBeginTimelinesEx\", */ T:1 },\n\t0x0828: { /* n:\"BrtEndTimelinesEx\", */ T:-1 },\n\t0x0829: { /* n:\"BrtBeginTimelineEx\", */ T:1 },\n\t0x082A: { /* n:\"BrtEndTimelineEx\", */ T:-1 },\n\t0x082B: { /* n:\"BrtWorkBookPr15\" */ },\n\t0x082C: { /* n:\"BrtPCDH15\" */ },\n\t0x082D: { /* n:\"BrtBeginTimelineStyle\", */ T:1 },\n\t0x082E: { /* n:\"BrtEndTimelineStyle\", */ T:-1 },\n\t0x082F: { /* n:\"BrtTimelineStyleElement\" */ },\n\t0x0830: { /* n:\"BrtBeginTimelineStylesheetExt15\", */ T:1 },\n\t0x0831: { /* n:\"BrtEndTimelineStylesheetExt15\", */ T:-1 },\n\t0x0832: { /* n:\"BrtBeginTimelineStyles\", */ T:1 },\n\t0x0833: { /* n:\"BrtEndTimelineStyles\", */ T:-1 },\n\t0x0834: { /* n:\"BrtBeginTimelineStyleElements\", */ T:1 },\n\t0x0835: { /* n:\"BrtEndTimelineStyleElements\", */ T:-1 },\n\t0x0836: { /* n:\"BrtDxf15\" */ },\n\t0x0837: { /* n:\"BrtBeginDxfs15\", */ T:1 },\n\t0x0838: { /* n:\"BrtEndDxfs15\", */ T:-1 },\n\t0x0839: { /* n:\"BrtSlicerCacheHideItemsWithNoData\" */ },\n\t0x083A: { /* n:\"BrtBeginItemUniqueNames\", */ T:1 },\n\t0x083B: { /* n:\"BrtEndItemUniqueNames\", */ T:-1 },\n\t0x083C: { /* n:\"BrtItemUniqueName\" */ },\n\t0x083D: { /* n:\"BrtBeginExtConn15\", */ T:1 },\n\t0x083E: { /* n:\"BrtEndExtConn15\", */ T:-1 },\n\t0x083F: { /* n:\"BrtBeginOledbPr15\", */ T:1 },\n\t0x0840: { /* n:\"BrtEndOledbPr15\", */ T:-1 },\n\t0x0841: { /* n:\"BrtBeginDataFeedPr15\", */ T:1 },\n\t0x0842: { /* n:\"BrtEndDataFeedPr15\", */ T:-1 },\n\t0x0843: { /* n:\"BrtTextPr15\" */ },\n\t0x0844: { /* n:\"BrtRangePr15\" */ },\n\t0x0845: { /* n:\"BrtDbCommand15\" */ },\n\t0x0846: { /* n:\"BrtBeginDbTables15\", */ T:1 },\n\t0x0847: { /* n:\"BrtEndDbTables15\", */ T:-1 },\n\t0x0848: { /* n:\"BrtDbTable15\" */ },\n\t0x0849: { /* n:\"BrtBeginDataModel\", */ T:1 },\n\t0x084A: { /* n:\"BrtEndDataModel\", */ T:-1 },\n\t0x084B: { /* n:\"BrtBeginModelTables\", */ T:1 },\n\t0x084C: { /* n:\"BrtEndModelTables\", */ T:-1 },\n\t0x084D: { /* n:\"BrtModelTable\" */ },\n\t0x084E: { /* n:\"BrtBeginModelRelationships\", */ T:1 },\n\t0x084F: { /* n:\"BrtEndModelRelationships\", */ T:-1 },\n\t0x0850: { /* n:\"BrtModelRelationship\" */ },\n\t0x0851: { /* n:\"BrtBeginECTxtWiz15\", */ T:1 },\n\t0x0852: { /* n:\"BrtEndECTxtWiz15\", */ T:-1 },\n\t0x0853: { /* n:\"BrtBeginECTWFldInfoLst15\", */ T:1 },\n\t0x0854: { /* n:\"BrtEndECTWFldInfoLst15\", */ T:-1 },\n\t0x0855: { /* n:\"BrtBeginECTWFldInfo15\", */ T:1 },\n\t0x0856: { /* n:\"BrtFieldListActiveItem\" */ },\n\t0x0857: { /* n:\"BrtPivotCacheIdVersion\" */ },\n\t0x0858: { /* n:\"BrtSXDI15\" */ },\n\t0x0859: { /* n:\"BrtBeginModelTimeGroupings\", */ T:1 },\n\t0x085A: { /* n:\"BrtEndModelTimeGroupings\", */ T:-1 },\n\t0x085B: { /* n:\"BrtBeginModelTimeGrouping\", */ T:1 },\n\t0x085C: { /* n:\"BrtEndModelTimeGrouping\", */ T:-1 },\n\t0x085D: { /* n:\"BrtModelTimeGroupingCalcCol\" */ },\n\t0x0C00: { /* n:\"BrtUid\" */ },\n\t0x0C01: { /* n:\"BrtRevisionPtr\" */ },\n\t0x1000: { /* n:\"BrtBeginDynamicArrayPr\", */ T:1 },\n\t0x1001: { /* n:\"BrtEndDynamicArrayPr\", */ T:-1 },\n\t0x138A: { /* n:\"BrtBeginRichValueBlock\", */ T:1 },\n\t0x138B: { /* n:\"BrtEndRichValueBlock\", */ T:-1 },\n\t0x13D9: { /* n:\"BrtBeginRichFilters\", */ T:1 },\n\t0x13DA: { /* n:\"BrtEndRichFilters\", */ T:-1 },\n\t0x13DB: { /* n:\"BrtRichFilter\" */ },\n\t0x13DC: { /* n:\"BrtBeginRichFilterColumn\", */ T:1 },\n\t0x13DD: { /* n:\"BrtEndRichFilterColumn\", */ T:-1 },\n\t0x13DE: { /* n:\"BrtBeginCustomRichFilters\", */ T:1 },\n\t0x13DF: { /* n:\"BrtEndCustomRichFilters\", */ T:-1 },\n\t0x13E0: { /* n:\"BrtCustomRichFilter\" */ },\n\t0x13E1: { /* n:\"BrtTop10RichFilter\" */ },\n\t0x13E2: { /* n:\"BrtDynamicRichFilter\" */ },\n\t0x13E4: { /* n:\"BrtBeginRichSortCondition\", */ T:1 },\n\t0x13E5: { /* n:\"BrtEndRichSortCondition\", */ T:-1 },\n\t0x13E6: { /* n:\"BrtRichFilterDateGroupItem\" */ },\n\t0x13E7: { /* n:\"BrtBeginCalcFeatures\", */ T:1 },\n\t0x13E8: { /* n:\"BrtEndCalcFeatures\", */ T:-1 },\n\t0x13E9: { /* n:\"BrtCalcFeature\" */ },\n\t0x13EB: { /* n:\"BrtExternalLinksPr\" */ },\n\t0xFFFF: { n:\"\" }\n};\n\n/* [MS-XLS] 2.3 Record Enumeration (and other sources) */\nvar XLSRecordEnum = {\n\t/* [MS-XLS] 2.3 Record Enumeration 2021-08-17 */\n\t0x0006: { /* n:\"Formula\", */ f:parse_Formula },\n\t0x000a: { /* n:\"EOF\", */ f:parsenoop2 },\n\t0x000c: { /* n:\"CalcCount\", */ f:parseuint16 }, //\n\t0x000d: { /* n:\"CalcMode\", */ f:parseuint16 }, //\n\t0x000e: { /* n:\"CalcPrecision\", */ f:parsebool }, //\n\t0x000f: { /* n:\"CalcRefMode\", */ f:parsebool }, //\n\t0x0010: { /* n:\"CalcDelta\", */ f:parse_Xnum }, //\n\t0x0011: { /* n:\"CalcIter\", */ f:parsebool }, //\n\t0x0012: { /* n:\"Protect\", */ f:parsebool },\n\t0x0013: { /* n:\"Password\", */ f:parseuint16 },\n\t0x0014: { /* n:\"Header\", */ f:parse_XLHeaderFooter },\n\t0x0015: { /* n:\"Footer\", */ f:parse_XLHeaderFooter },\n\t0x0017: { /* n:\"ExternSheet\", */ f:parse_ExternSheet },\n\t0x0018: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t0x0019: { /* n:\"WinProtect\", */ f:parsebool },\n\t0x001a: { /* n:\"VerticalPageBreaks\", */ },\n\t0x001b: { /* n:\"HorizontalPageBreaks\", */ },\n\t0x001c: { /* n:\"Note\", */ f:parse_Note },\n\t0x001d: { /* n:\"Selection\", */ },\n\t0x0022: { /* n:\"Date1904\", */ f:parsebool },\n\t0x0023: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t0x0026: { /* n:\"LeftMargin\", */ f:parse_Xnum }, // *\n\t0x0027: { /* n:\"RightMargin\", */ f:parse_Xnum }, // *\n\t0x0028: { /* n:\"TopMargin\", */ f:parse_Xnum }, // *\n\t0x0029: { /* n:\"BottomMargin\", */ f:parse_Xnum }, // *\n\t0x002a: { /* n:\"PrintRowCol\", */ f:parsebool },\n\t0x002b: { /* n:\"PrintGrid\", */ f:parsebool },\n\t0x002f: { /* n:\"FilePass\", */ f:parse_FilePass },\n\t0x0031: { /* n:\"Font\", */ f:parse_Font },\n\t0x0033: { /* n:\"PrintSize\", */ f:parseuint16 },\n\t0x003c: { /* n:\"Continue\", */ },\n\t0x003d: { /* n:\"Window1\", */ f:parse_Window1 },\n\t0x0040: { /* n:\"Backup\", */ f:parsebool },\n\t0x0041: { /* n:\"Pane\", */ f:parse_Pane },\n\t0x0042: { /* n:\"CodePage\", */ f:parseuint16 },\n\t0x004d: { /* n:\"Pls\", */ },\n\t0x0050: { /* n:\"DCon\", */ },\n\t0x0051: { /* n:\"DConRef\", */ },\n\t0x0052: { /* n:\"DConName\", */ },\n\t0x0055: { /* n:\"DefColWidth\", */ f:parseuint16 },\n\t0x0059: { /* n:\"XCT\", */ },\n\t0x005a: { /* n:\"CRN\", */ },\n\t0x005b: { /* n:\"FileSharing\", */ },\n\t0x005c: { /* n:\"WriteAccess\", */ f:parse_WriteAccess },\n\t0x005d: { /* n:\"Obj\", */ f:parse_Obj },\n\t0x005e: { /* n:\"Uncalced\", */ },\n\t0x005f: { /* n:\"CalcSaveRecalc\", */ f:parsebool }, //\n\t0x0060: { /* n:\"Template\", */ },\n\t0x0061: { /* n:\"Intl\", */ },\n\t0x0063: { /* n:\"ObjProtect\", */ f:parsebool },\n\t0x007d: { /* n:\"ColInfo\", */ f:parse_ColInfo },\n\t0x0080: { /* n:\"Guts\", */ f:parse_Guts },\n\t0x0081: { /* n:\"WsBool\", */ f:parse_WsBool },\n\t0x0082: { /* n:\"GridSet\", */ f:parseuint16 },\n\t0x0083: { /* n:\"HCenter\", */ f:parsebool },\n\t0x0084: { /* n:\"VCenter\", */ f:parsebool },\n\t0x0085: { /* n:\"BoundSheet8\", */ f:parse_BoundSheet8 },\n\t0x0086: { /* n:\"WriteProtect\", */ },\n\t0x008c: { /* n:\"Country\", */ f:parse_Country },\n\t0x008d: { /* n:\"HideObj\", */ f:parseuint16 },\n\t0x0090: { /* n:\"Sort\", */ },\n\t0x0092: { /* n:\"Palette\", */ f:parse_Palette },\n\t0x0097: { /* n:\"Sync\", */ },\n\t0x0098: { /* n:\"LPr\", */ },\n\t0x0099: { /* n:\"DxGCol\", */ },\n\t0x009a: { /* n:\"FnGroupName\", */ },\n\t0x009b: { /* n:\"FilterMode\", */ },\n\t0x009c: { /* n:\"BuiltInFnGroupCount\", */ f:parseuint16 },\n\t0x009d: { /* n:\"AutoFilterInfo\", */ },\n\t0x009e: { /* n:\"AutoFilter\", */ },\n\t0x00a0: { /* n:\"Scl\", */ f:parse_Scl },\n\t0x00a1: { /* n:\"Setup\", */ f:parse_Setup },\n\t0x00ae: { /* n:\"ScenMan\", */ },\n\t0x00af: { /* n:\"SCENARIO\", */ },\n\t0x00b0: { /* n:\"SxView\", */ },\n\t0x00b1: { /* n:\"Sxvd\", */ },\n\t0x00b2: { /* n:\"SXVI\", */ },\n\t0x00b4: { /* n:\"SxIvd\", */ },\n\t0x00b5: { /* n:\"SXLI\", */ },\n\t0x00b6: { /* n:\"SXPI\", */ },\n\t0x00b8: { /* n:\"DocRoute\", */ },\n\t0x00b9: { /* n:\"RecipName\", */ },\n\t0x00bd: { /* n:\"MulRk\", */ f:parse_MulRk },\n\t0x00be: { /* n:\"MulBlank\", */ f:parse_MulBlank },\n\t0x00c1: { /* n:\"Mms\", */ f:parsenoop2 },\n\t0x00c5: { /* n:\"SXDI\", */ },\n\t0x00c6: { /* n:\"SXDB\", */ },\n\t0x00c7: { /* n:\"SXFDB\", */ },\n\t0x00c8: { /* n:\"SXDBB\", */ },\n\t0x00c9: { /* n:\"SXNum\", */ },\n\t0x00ca: { /* n:\"SxBool\", */ f:parsebool },\n\t0x00cb: { /* n:\"SxErr\", */ },\n\t0x00cc: { /* n:\"SXInt\", */ },\n\t0x00cd: { /* n:\"SXString\", */ },\n\t0x00ce: { /* n:\"SXDtr\", */ },\n\t0x00cf: { /* n:\"SxNil\", */ },\n\t0x00d0: { /* n:\"SXTbl\", */ },\n\t0x00d1: { /* n:\"SXTBRGIITM\", */ },\n\t0x00d2: { /* n:\"SxTbpg\", */ },\n\t0x00d3: { /* n:\"ObProj\", */ },\n\t0x00d5: { /* n:\"SXStreamID\", */ },\n\t0x00d7: { /* n:\"DBCell\", */ },\n\t0x00d8: { /* n:\"SXRng\", */ },\n\t0x00d9: { /* n:\"SxIsxoper\", */ },\n\t0x00da: { /* n:\"BookBool\", */ f:parseuint16 },\n\t0x00dc: { /* n:\"DbOrParamQry\", */ },\n\t0x00dd: { /* n:\"ScenarioProtect\", */ f:parsebool },\n\t0x00de: { /* n:\"OleObjectSize\", */ },\n\t0x00e0: { /* n:\"XF\", */ f:parse_XF },\n\t0x00e1: { /* n:\"InterfaceHdr\", */ f:parse_InterfaceHdr },\n\t0x00e2: { /* n:\"InterfaceEnd\", */ f:parsenoop2 },\n\t0x00e3: { /* n:\"SXVS\", */ },\n\t0x00e5: { /* n:\"MergeCells\", */ f:parse_MergeCells },\n\t0x00e9: { /* n:\"BkHim\", */ },\n\t0x00eb: { /* n:\"MsoDrawingGroup\", */ },\n\t0x00ec: { /* n:\"MsoDrawing\", */ },\n\t0x00ed: { /* n:\"MsoDrawingSelection\", */ },\n\t0x00ef: { /* n:\"PhoneticInfo\", */ },\n\t0x00f0: { /* n:\"SxRule\", */ },\n\t0x00f1: { /* n:\"SXEx\", */ },\n\t0x00f2: { /* n:\"SxFilt\", */ },\n\t0x00f4: { /* n:\"SxDXF\", */ },\n\t0x00f5: { /* n:\"SxItm\", */ },\n\t0x00f6: { /* n:\"SxName\", */ },\n\t0x00f7: { /* n:\"SxSelect\", */ },\n\t0x00f8: { /* n:\"SXPair\", */ },\n\t0x00f9: { /* n:\"SxFmla\", */ },\n\t0x00fb: { /* n:\"SxFormat\", */ },\n\t0x00fc: { /* n:\"SST\", */ f:parse_SST },\n\t0x00fd: { /* n:\"LabelSst\", */ f:parse_LabelSst },\n\t0x00ff: { /* n:\"ExtSST\", */ f:parse_ExtSST },\n\t0x0100: { /* n:\"SXVDEx\", */ },\n\t0x0103: { /* n:\"SXFormula\", */ },\n\t0x0122: { /* n:\"SXDBEx\", */ },\n\t0x0137: { /* n:\"RRDInsDel\", */ },\n\t0x0138: { /* n:\"RRDHead\", */ },\n\t0x013b: { /* n:\"RRDChgCell\", */ },\n\t0x013d: { /* n:\"RRTabId\", */ f:parseuint16a },\n\t0x013e: { /* n:\"RRDRenSheet\", */ },\n\t0x013f: { /* n:\"RRSort\", */ },\n\t0x0140: { /* n:\"RRDMove\", */ },\n\t0x014a: { /* n:\"RRFormat\", */ },\n\t0x014b: { /* n:\"RRAutoFmt\", */ },\n\t0x014d: { /* n:\"RRInsertSh\", */ },\n\t0x014e: { /* n:\"RRDMoveBegin\", */ },\n\t0x014f: { /* n:\"RRDMoveEnd\", */ },\n\t0x0150: { /* n:\"RRDInsDelBegin\", */ },\n\t0x0151: { /* n:\"RRDInsDelEnd\", */ },\n\t0x0152: { /* n:\"RRDConflict\", */ },\n\t0x0153: { /* n:\"RRDDefName\", */ },\n\t0x0154: { /* n:\"RRDRstEtxp\", */ },\n\t0x015f: { /* n:\"LRng\", */ },\n\t0x0160: { /* n:\"UsesELFs\", */ f:parsebool },\n\t0x0161: { /* n:\"DSF\", */ f:parsenoop2 },\n\t0x0191: { /* n:\"CUsr\", */ },\n\t0x0192: { /* n:\"CbUsr\", */ },\n\t0x0193: { /* n:\"UsrInfo\", */ },\n\t0x0194: { /* n:\"UsrExcl\", */ },\n\t0x0195: { /* n:\"FileLock\", */ },\n\t0x0196: { /* n:\"RRDInfo\", */ },\n\t0x0197: { /* n:\"BCUsrs\", */ },\n\t0x0198: { /* n:\"UsrChk\", */ },\n\t0x01a9: { /* n:\"UserBView\", */ },\n\t0x01aa: { /* n:\"UserSViewBegin\", */ },\n\t0x01ab: { /* n:\"UserSViewEnd\", */ },\n\t0x01ac: { /* n:\"RRDUserView\", */ },\n\t0x01ad: { /* n:\"Qsi\", */ },\n\t0x01ae: { /* n:\"SupBook\", */ f:parse_SupBook },\n\t0x01af: { /* n:\"Prot4Rev\", */ f:parsebool },\n\t0x01b0: { /* n:\"CondFmt\", */ },\n\t0x01b1: { /* n:\"CF\", */ },\n\t0x01b2: { /* n:\"DVal\", */ },\n\t0x01b5: { /* n:\"DConBin\", */ },\n\t0x01b6: { /* n:\"TxO\", */ f:parse_TxO },\n\t0x01b7: { /* n:\"RefreshAll\", */ f:parsebool }, //\n\t0x01b8: { /* n:\"HLink\", */ f:parse_HLink },\n\t0x01b9: { /* n:\"Lel\", */ },\n\t0x01ba: { /* n:\"CodeName\", */ f:parse_XLUnicodeString },\n\t0x01bb: { /* n:\"SXFDBType\", */ },\n\t0x01bc: { /* n:\"Prot4RevPass\", */ f:parseuint16 },\n\t0x01bd: { /* n:\"ObNoMacros\", */ },\n\t0x01be: { /* n:\"Dv\", */ },\n\t0x01c0: { /* n:\"Excel9File\", */ f:parsenoop2 },\n\t0x01c1: { /* n:\"RecalcId\", */ f:parse_RecalcId, r:2},\n\t0x01c2: { /* n:\"EntExU2\", */ f:parsenoop2 },\n\t0x0200: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t0x0201: { /* n:\"Blank\", */ f:parse_Blank },\n\t0x0203: { /* n:\"Number\", */ f:parse_Number },\n\t0x0204: { /* n:\"Label\", */ f:parse_Label },\n\t0x0205: { /* n:\"BoolErr\", */ f:parse_BoolErr },\n\t0x0207: { /* n:\"String\", */ f:parse_String },\n\t0x0208: { /* n:\"Row\", */ f:parse_Row },\n\t0x020b: { /* n:\"Index\", */ },\n\t0x0221: { /* n:\"Array\", */ f:parse_Array },\n\t0x0225: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t0x0236: { /* n:\"Table\", */ },\n\t0x023e: { /* n:\"Window2\", */ f:parse_Window2 },\n\t0x027e: { /* n:\"RK\", */ f:parse_RK },\n\t0x0293: { /* n:\"Style\", */ },\n\t0x0418: { /* n:\"BigName\", */ },\n\t0x041e: { /* n:\"Format\", */ f:parse_Format },\n\t0x043c: { /* n:\"ContinueBigName\", */ },\n\t0x04bc: { /* n:\"ShrFmla\", */ f:parse_ShrFmla },\n\t0x0800: { /* n:\"HLinkTooltip\", */ f:parse_HLinkTooltip },\n\t0x0801: { /* n:\"WebPub\", */ },\n\t0x0802: { /* n:\"QsiSXTag\", */ },\n\t0x0803: { /* n:\"DBQueryExt\", */ },\n\t0x0804: { /* n:\"ExtString\", */ },\n\t0x0805: { /* n:\"TxtQry\", */ },\n\t0x0806: { /* n:\"Qsir\", */ },\n\t0x0807: { /* n:\"Qsif\", */ },\n\t0x0808: { /* n:\"RRDTQSIF\", */ },\n\t0x0809: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x080a: { /* n:\"OleDbConn\", */ },\n\t0x080b: { /* n:\"WOpt\", */ },\n\t0x080c: { /* n:\"SXViewEx\", */ },\n\t0x080d: { /* n:\"SXTH\", */ },\n\t0x080e: { /* n:\"SXPIEx\", */ },\n\t0x080f: { /* n:\"SXVDTEx\", */ },\n\t0x0810: { /* n:\"SXViewEx9\", */ },\n\t0x0812: { /* n:\"ContinueFrt\", */ },\n\t0x0813: { /* n:\"RealTimeData\", */ },\n\t0x0850: { /* n:\"ChartFrtInfo\", */ },\n\t0x0851: { /* n:\"FrtWrapper\", */ },\n\t0x0852: { /* n:\"StartBlock\", */ },\n\t0x0853: { /* n:\"EndBlock\", */ },\n\t0x0854: { /* n:\"StartObject\", */ },\n\t0x0855: { /* n:\"EndObject\", */ },\n\t0x0856: { /* n:\"CatLab\", */ },\n\t0x0857: { /* n:\"YMult\", */ },\n\t0x0858: { /* n:\"SXViewLink\", */ },\n\t0x0859: { /* n:\"PivotChartBits\", */ },\n\t0x085a: { /* n:\"FrtFontList\", */ },\n\t0x0862: { /* n:\"SheetExt\", */ },\n\t0x0863: { /* n:\"BookExt\", */ r:12},\n\t0x0864: { /* n:\"SXAddl\", */ },\n\t0x0865: { /* n:\"CrErr\", */ },\n\t0x0866: { /* n:\"HFPicture\", */ },\n\t0x0867: { /* n:\"FeatHdr\", */ f:parsenoop2 },\n\t0x0868: { /* n:\"Feat\", */ },\n\t0x086a: { /* n:\"DataLabExt\", */ },\n\t0x086b: { /* n:\"DataLabExtContents\", */ },\n\t0x086c: { /* n:\"CellWatch\", */ },\n\t0x0871: { /* n:\"FeatHdr11\", */ },\n\t0x0872: { /* n:\"Feature11\", */ },\n\t0x0874: { /* n:\"DropDownObjIds\", */ },\n\t0x0875: { /* n:\"ContinueFrt11\", */ },\n\t0x0876: { /* n:\"DConn\", */ },\n\t0x0877: { /* n:\"List12\", */ },\n\t0x0878: { /* n:\"Feature12\", */ },\n\t0x0879: { /* n:\"CondFmt12\", */ },\n\t0x087a: { /* n:\"CF12\", */ },\n\t0x087b: { /* n:\"CFEx\", */ },\n\t0x087c: { /* n:\"XFCRC\", */ f:parse_XFCRC, r:12 },\n\t0x087d: { /* n:\"XFExt\", */ f:parse_XFExt, r:12 },\n\t0x087e: { /* n:\"AutoFilter12\", */ },\n\t0x087f: { /* n:\"ContinueFrt12\", */ },\n\t0x0884: { /* n:\"MDTInfo\", */ },\n\t0x0885: { /* n:\"MDXStr\", */ },\n\t0x0886: { /* n:\"MDXTuple\", */ },\n\t0x0887: { /* n:\"MDXSet\", */ },\n\t0x0888: { /* n:\"MDXProp\", */ },\n\t0x0889: { /* n:\"MDXKPI\", */ },\n\t0x088a: { /* n:\"MDB\", */ },\n\t0x088b: { /* n:\"PLV\", */ },\n\t0x088c: { /* n:\"Compat12\", */ f:parsebool, r:12 },\n\t0x088d: { /* n:\"DXF\", */ },\n\t0x088e: { /* n:\"TableStyles\", */ r:12 },\n\t0x088f: { /* n:\"TableStyle\", */ },\n\t0x0890: { /* n:\"TableStyleElement\", */ },\n\t0x0892: { /* n:\"StyleExt\", */ },\n\t0x0893: { /* n:\"NamePublish\", */ },\n\t0x0894: { /* n:\"NameCmt\", */ f:parse_NameCmt, r:12 },\n\t0x0895: { /* n:\"SortData\", */ },\n\t0x0896: { /* n:\"Theme\", */ f:parse_Theme, r:12 },\n\t0x0897: { /* n:\"GUIDTypeLib\", */ },\n\t0x0898: { /* n:\"FnGrp12\", */ },\n\t0x0899: { /* n:\"NameFnGrp12\", */ },\n\t0x089a: { /* n:\"MTRSettings\", */ f:parse_MTRSettings, r:12 },\n\t0x089b: { /* n:\"CompressPictures\", */ f:parsenoop2 },\n\t0x089c: { /* n:\"HeaderFooter\", */ },\n\t0x089d: { /* n:\"CrtLayout12\", */ },\n\t0x089e: { /* n:\"CrtMlFrt\", */ },\n\t0x089f: { /* n:\"CrtMlFrtContinue\", */ },\n\t0x08a3: { /* n:\"ForceFullCalculation\", */ f:parse_ForceFullCalculation },\n\t0x08a4: { /* n:\"ShapePropsStream\", */ },\n\t0x08a5: { /* n:\"TextPropsStream\", */ },\n\t0x08a6: { /* n:\"RichTextStream\", */ },\n\t0x08a7: { /* n:\"CrtLayout12A\", */ },\n\t0x1001: { /* n:\"Units\", */ },\n\t0x1002: { /* n:\"Chart\", */ },\n\t0x1003: { /* n:\"Series\", */ },\n\t0x1006: { /* n:\"DataFormat\", */ },\n\t0x1007: { /* n:\"LineFormat\", */ },\n\t0x1009: { /* n:\"MarkerFormat\", */ },\n\t0x100a: { /* n:\"AreaFormat\", */ },\n\t0x100b: { /* n:\"PieFormat\", */ },\n\t0x100c: { /* n:\"AttachedLabel\", */ },\n\t0x100d: { /* n:\"SeriesText\", */ },\n\t0x1014: { /* n:\"ChartFormat\", */ },\n\t0x1015: { /* n:\"Legend\", */ },\n\t0x1016: { /* n:\"SeriesList\", */ },\n\t0x1017: { /* n:\"Bar\", */ },\n\t0x1018: { /* n:\"Line\", */ },\n\t0x1019: { /* n:\"Pie\", */ },\n\t0x101a: { /* n:\"Area\", */ },\n\t0x101b: { /* n:\"Scatter\", */ },\n\t0x101c: { /* n:\"CrtLine\", */ },\n\t0x101d: { /* n:\"Axis\", */ },\n\t0x101e: { /* n:\"Tick\", */ },\n\t0x101f: { /* n:\"ValueRange\", */ },\n\t0x1020: { /* n:\"CatSerRange\", */ },\n\t0x1021: { /* n:\"AxisLine\", */ },\n\t0x1022: { /* n:\"CrtLink\", */ },\n\t0x1024: { /* n:\"DefaultText\", */ },\n\t0x1025: { /* n:\"Text\", */ },\n\t0x1026: { /* n:\"FontX\", */ f:parseuint16 },\n\t0x1027: { /* n:\"ObjectLink\", */ },\n\t0x1032: { /* n:\"Frame\", */ },\n\t0x1033: { /* n:\"Begin\", */ },\n\t0x1034: { /* n:\"End\", */ },\n\t0x1035: { /* n:\"PlotArea\", */ },\n\t0x103a: { /* n:\"Chart3d\", */ },\n\t0x103c: { /* n:\"PicF\", */ },\n\t0x103d: { /* n:\"DropBar\", */ },\n\t0x103e: { /* n:\"Radar\", */ },\n\t0x103f: { /* n:\"Surf\", */ },\n\t0x1040: { /* n:\"RadarArea\", */ },\n\t0x1041: { /* n:\"AxisParent\", */ },\n\t0x1043: { /* n:\"LegendException\", */ },\n\t0x1044: { /* n:\"ShtProps\", */ f:parse_ShtProps },\n\t0x1045: { /* n:\"SerToCrt\", */ },\n\t0x1046: { /* n:\"AxesUsed\", */ },\n\t0x1048: { /* n:\"SBaseRef\", */ },\n\t0x104a: { /* n:\"SerParent\", */ },\n\t0x104b: { /* n:\"SerAuxTrend\", */ },\n\t0x104e: { /* n:\"IFmtRecord\", */ },\n\t0x104f: { /* n:\"Pos\", */ },\n\t0x1050: { /* n:\"AlRuns\", */ },\n\t0x1051: { /* n:\"BRAI\", */ },\n\t0x105b: { /* n:\"SerAuxErrBar\", */ },\n\t0x105c: { /* n:\"ClrtClient\", */ f:parse_ClrtClient },\n\t0x105d: { /* n:\"SerFmt\", */ },\n\t0x105f: { /* n:\"Chart3DBarShape\", */ },\n\t0x1060: { /* n:\"Fbi\", */ },\n\t0x1061: { /* n:\"BopPop\", */ },\n\t0x1062: { /* n:\"AxcExt\", */ },\n\t0x1063: { /* n:\"Dat\", */ },\n\t0x1064: { /* n:\"PlotGrowth\", */ },\n\t0x1065: { /* n:\"SIIndex\", */ },\n\t0x1066: { /* n:\"GelFrame\", */ },\n\t0x1067: { /* n:\"BopPopCustom\", */ },\n\t0x1068: { /* n:\"Fbi2\", */ },\n\n\t0x0000: { /* n:\"Dimensions\", */ f:parse_Dimensions },\n\t0x0001: { /* n:\"BIFF2BLANK\", */ },\n\t0x0002: { /* n:\"BIFF2INT\", */ f:parse_BIFF2INT },\n\t0x0003: { /* n:\"BIFF2NUM\", */ f:parse_BIFF2NUM },\n\t0x0004: { /* n:\"BIFF2STR\", */ f:parse_BIFF2STR },\n\t0x0005: { /* n:\"BIFF2BOOLERR\", */ f:parse_BIFF2BOOLERR },\n\t0x0007: { /* n:\"String\", */ f:parse_BIFF2STRING },\n\t0x0008: { /* n:\"BIFF2ROW\", */ },\n\t0x0009: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x000b: { /* n:\"Index\", */ },\n\t0x0016: { /* n:\"ExternCount\", */ f:parseuint16 },\n\t0x001e: { /* n:\"BIFF2FORMAT\", */ f:parse_BIFF2Format },\n\t0x001f: { /* n:\"BIFF2FMTCNT\", */ }, /* 16-bit cnt of BIFF2FORMAT records */\n\t0x0020: { /* n:\"BIFF2COLINFO\", */ },\n\t0x0021: { /* n:\"Array\", */ f:parse_Array },\n\t0x0024: { /* n:\"COLWIDTH\", */ },\n\t0x0025: { /* n:\"DefaultRowHeight\", */ f:parse_DefaultRowHeight },\n\t// 0x002c ??\n\t// 0x002d ??\n\t// 0x002e ??\n\t// 0x0030 FONTCOUNT: number of fonts\n\t0x0032: { /* n:\"BIFF2FONTXTRA\", */ f:parse_BIFF2FONTXTRA },\n\t// 0x0035: INFOOPTS\n\t// 0x0036: TABLE (BIFF2 only)\n\t// 0x0037: TABLE2 (BIFF2 only)\n\t// 0x0038: WNDESK\n\t// 0x0039 ??\n\t// 0x003a: BEGINPREF\n\t// 0x003b: ENDPREF\n\t0x003e: { /* n:\"BIFF2WINDOW2\", */ },\n\t// 0x003f ??\n\t// 0x0046: SHOWSCROLL\n\t// 0x0047: SHOWFORMULA\n\t// 0x0048: STATUSBAR\n\t// 0x0049: SHORTMENUS\n\t// 0x004A:\n\t// 0x004B:\n\t// 0x004C:\n\t// 0x004E:\n\t// 0x004F:\n\t// 0x0058: TOOLBAR (BIFF3)\n\n\t/* - - - */\n\t0x0034: { /* n:\"DDEObjName\", */ },\n\t0x0043: { /* n:\"BIFF2XF\", */ f:parse_BIFF2XF },\n\t0x0044: { /* n:\"BIFF2XFINDEX\", */ f:parseuint16 },\n\t0x0045: { /* n:\"BIFF2FONTCLR\", */ },\n\t0x0056: { /* n:\"BIFF4FMTCNT\", */ }, /* 16-bit cnt, similar to BIFF2 */\n\t0x007e: { /* n:\"RK\", */ }, /* Not necessarily same as 0x027e */\n\t0x007f: { /* n:\"ImData\", */ f:parse_ImData },\n\t0x0087: { /* n:\"Addin\", */ },\n\t0x0088: { /* n:\"Edg\", */ },\n\t0x0089: { /* n:\"Pub\", */ },\n\t// 0x8A\n\t// 0x8B LH: alternate menu key flag (BIFF3/4)\n\t// 0x8E\n\t0x008F: { /* n:\"BIFF4SheetInfo\", */ f:parse_BIFF4SheetInfo },\n\t0x0091: { /* n:\"Sub\", */ },\n\t// 0x93 STYLE\n\t0x0094: { /* n:\"LHRecord\", */ },\n\t0x0095: { /* n:\"LHNGraph\", */ },\n\t0x0096: { /* n:\"Sound\", */ },\n\t// 0xA2 FNPROTO: function prototypes (BIFF4)\n\t// 0xA3\n\t// 0xA8\n\t0x00a9: { /* n:\"CoordList\", */ },\n\t0x00ab: { /* n:\"GCW\", */ },\n\t0x00bc: { /* n:\"ShrFmla\", */ }, /* Not necessarily same as 0x04bc */\n\t0x00bf: { /* n:\"ToolbarHdr\", */ },\n\t0x00c0: { /* n:\"ToolbarEnd\", */ },\n\t0x00c2: { /* n:\"AddMenu\", */ },\n\t0x00c3: { /* n:\"DelMenu\", */ },\n\t0x00d6: { /* n:\"RString\", */ f:parse_RString },\n\t0x00df: { /* n:\"UDDesc\", */ },\n\t0x00ea: { /* n:\"TabIdConf\", */ },\n\t0x0162: { /* n:\"XL5Modify\", */ },\n\t0x01a5: { /* n:\"FileSharing2\", */ },\n\t0x0206: { /* n:\"Formula\", */ f:parse_Formula },\n\t0x0209: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x0218: { /* n:\"Lbl\", */ f:parse_Lbl },\n\t0x0223: { /* n:\"ExternName\", */ f:parse_ExternName },\n\t0x0231: { /* n:\"Font\", */ },\n\t0x0243: { /* n:\"BIFF3XF\", */ f:parse_BIFF3XF },\n\t0x0406: { /* n:\"Formula\", */ f:parse_Formula },\n\t0x0409: { /* n:\"BOF\", */ f:parse_BOF },\n\t0x0443: { /* n:\"BIFF4XF\", */ f:parse_BIFF4XF },\n\t0x086d: { /* n:\"FeatInfo\", */ },\n\t0x0873: { /* n:\"FeatInfo11\", */ },\n\t0x0881: { /* n:\"SXAddl12\", */ },\n\t0x08c0: { /* n:\"AutoWebPub\", */ },\n\t0x08c1: { /* n:\"ListObj\", */ },\n\t0x08c2: { /* n:\"ListField\", */ },\n\t0x08c3: { /* n:\"ListDV\", */ },\n\t0x08c4: { /* n:\"ListCondFmt\", */ },\n\t0x08c5: { /* n:\"ListCF\", */ },\n\t0x08c6: { /* n:\"FMQry\", */ },\n\t0x08c7: { /* n:\"FMSQry\", */ },\n\t0x08c8: { /* n:\"PLV\", */ },\n\t0x08c9: { /* n:\"LnExt\", */ },\n\t0x08ca: { /* n:\"MkrExt\", */ },\n\t0x08cb: { /* n:\"CrtCoopt\", */ },\n\t0x08d6: { /* n:\"FRTArchId$\", */ r:12 },\n\n\t/* --- multiplan 4 records --- */\n\t0x0065: { /* n:\"\", */ }, // one per window\n\t0x0066: { /* n:\"\", */ }, // calc settings\n\t0x0069: { /* n:\"\", */ }, // print header\n\t0x006a: { /* n:\"\", */ }, // print footer\n\t0x006b: { /* n:\"\", */ }, // print settings\n\t0x006d: { /* n:\"\", */ }, // one per window\n\t0x0070: { /* n:\"\", */ }, // includes default col width\n\t0x0072: { /* n:\"\", */ }, // includes selected cell\n\n\t0x7262: {}\n};\n\nfunction write_biff_rec(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar t/*:number*/ = type;\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(/*:: len != null &&*/len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba/*:BufArray*/, type/*:number*/, payload, length/*:?number*/)/*:void*/ {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t = type;\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\twrite_Bes(val, t || 'b', out);\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_comments_biff2(ba/*:BufArray*/, comments/*:Array<[Comment[], number, number]>*/) {\n\tcomments.forEach(function(data) {\n\t\tvar text = data[0].map(function(cc) { return cc.t; }).join(\"\");\n\t\t// TODO: should '\\n' be translated to '\\r' to correct for Excel 5.0 bug when exporting to BIFF2/3 ?\n\t\tif(text.length <= 2048) return write_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text, data[1], data[2]));\n\t\twrite_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text.slice(0, 2048), data[1], data[2], text.length));\n\t\tfor(var i = 2048; i < text.length; i += 2048)\n\t\t\twrite_biff_rec(ba, 0x001C, write_NOTE_BIFF2(text.slice(i, Math.min(i+2048, text.length)), -1, -1, Math.min(2048, text.length - i)));\n\t});\n}\n\n/* TODO: BIFF3/4 use different records -- see comments*/\nfunction write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, date1904/*:boolean*/) {\n\tvar ifmt = 0;\n\tif(cell.z != null) {\n\t\tifmt = opts._BIFF2FmtTable.indexOf(cell.z);\n\t\tif(ifmt == -1) { opts._BIFF2FmtTable.push(cell.z); ifmt = opts._BIFF2FmtTable.length - 1; }\n\t}\n\tvar ixfe = 0;\n\tif(cell.z != null) {\n\t\tfor(; ixfe < opts.cellXfs.length; ++ixfe) if(opts.cellXfs[ixfe].numFmtId == ifmt) break;\n\t\tif(ixfe == opts.cellXfs.length) opts.cellXfs.push({numFmtId: ifmt});\n\t}\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v, date1904), date1904) : cell.v;\n\t\t\tif(opts.biff == 2 && (v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\t// 0x027E (RK) in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v, ixfe, ifmt));\n\t\t\telse if(isNaN(v))\n\t\t\t\t// 0x0205 in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x24, \"e\")); // #NUM!\n\t\t\telse if(!isFinite(v))\n\t\t\t\t// 0x0205 in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, 0x07, \"e\")); // #DIV/0!\n\t\t\telse\n\t\t\t\t// 0x0203 in BIFF3/4\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v, ixfe, ifmt));\n\t\t\treturn;\n\t\tcase 'b': case 'e':\n\t\t\t// 0x0205 in BIFF3/4\n\t\t\twrite_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\t// 0x0204 in BIFF3/4\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, cell.v == null ? \"\" : String(cell.v).slice(0,255)));\n\t\t\treturn;\n\t}\n\t// 0x0201 in BIFF3/4\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*/, opts, wb/*:Workbook*/) {\n\tvar dense = ws[\"!data\"] != null;\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), rr = \"\", cols/*:Array*/ = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t}\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\tvar row = [], comments = [];\n\t/* TODO: 0x0000 / 0x0200 dimensions? */\n\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tif(dense) row = ws[\"!data\"][R] || [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar cell = dense ? row[C] : ws[cols[C] + rr];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts, date1904);\n\t\t\tif(cell.c) comments.push([cell.c, R, C]);\n\t\t}\n\t}\n\n\t/* ... 0x12 0x19 0x13 (Password) */\n\twrite_comments_biff2(ba, comments);\n\t/* 0x3d (Window1) ... */\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i*/ = [\"General\"]; o._Fonts = [];\n\tvar body = buf_array();\n\twrite_ws_biff2(body, wb.Sheets[wb.SheetNames[idx]], idx, o, wb);\n\n\to._BIFF2FmtTable.forEach(function(f) {\n\t\tif(o.biff <= 3) write_biff_rec(ba, 0x001E, write_BIFF2Format(f));\n\t\telse write_biff_rec(ba, 0x041E, write_BIFF4Format(f));\n\t});\n\to.cellXfs.forEach(function(xf) {\n\t\tswitch(o.biff) {\n\t\t\tcase 2: write_biff_rec(ba, 0x0043, write_BIFF2XF(xf)); break;\n\t\t\tcase 3: write_biff_rec(ba, 0x0243, write_BIFF3XF(xf)); break;\n\t\t\tcase 4: write_biff_rec(ba, 0x0443, write_BIFF4XF(xf)); break;\n\t\t}\n\t});\n\tdelete o._BIFF2FmtTable; delete o.cellXfs; delete o._Fonts;\n\n\tba.push(body.end());\n\twrite_biff_rec(ba, 0x000A);\n\treturn ba.end();\n}\n\nvar b8oid = 1, b8ocnts/*:Array<[number, number, number]>*/ = [];\nfunction write_MsoDrawingGroup() {\n\tvar buf = new_buf(82 + 8 * b8ocnts.length);\n\t/* [MS-ODRAW] 2.2.12 OfficeArtDggContainer */\n\tbuf.write_shift(2, 0x0F);\n\tbuf.write_shift(2, 0xF000);\n\tbuf.write_shift(4, 74 + 8 * b8ocnts.length);\n\t/* 2.2.48 OfficeArtFDGGBlock */\n\t{\n\t\tbuf.write_shift(2, 0);\n\t\tbuf.write_shift(2, 0xF006);\n\t\tbuf.write_shift(4, 16 + 8 * b8ocnts.length);\n\t\t/* 2.2.47 OfficeArtFDGG */\n\t\t{\n\t\t\tbuf.write_shift(4, b8oid);\n\t\t\tbuf.write_shift(4, b8ocnts.length+1);\n\t\t\tvar acc = 0; for(var i = 0; i < b8ocnts.length; ++i) acc += (b8ocnts[i] && b8ocnts[i][1] || 0); buf.write_shift(4, acc);\n\t\t\tbuf.write_shift(4, b8ocnts.length);\n\t\t}\n\t\t/* 2.2.46 OfficeArtIDCL + */\n\t\tb8ocnts.forEach(function(b8) {\n\t\t\tbuf.write_shift(4, b8[0]);\n\t\t\tbuf.write_shift(4, b8[2]);\n\t\t});\n\t}\n\t/* 2.2.9 OfficeArtFOPT */\n\t{\n\t\tbuf.write_shift(2, 0x33); // 0x03 | (3 << 4)\n\t\tbuf.write_shift(2, 0xF00B);\n\t\tbuf.write_shift(4, 0x12); // 3 * 6\n\t\t/* 2.3.21.15 Text Boolean Properties */\n\t\tbuf.write_shift(2, 0xBF); buf.write_shift(4, 0x00080008);\n\t\t/* 2.3.7.2 fillColor */\n\t\tbuf.write_shift(2, 0x0181); buf.write_shift(4, 0x08000041);\n\t\t/* 2.3.8.1 lineColor */\n\t\tbuf.write_shift(2, 0x01C0); buf.write_shift(4, 0x08000040);\n\t}\n\t/* 2.2.45 OfficeArtSplitMenuColorContainer */\n\t{\n\t\tbuf.write_shift(2, 0x40);\n\t\tbuf.write_shift(2, 0xF11E);\n\t\tbuf.write_shift(4, 16);\n\t\tbuf.write_shift(4, 0x0800000D);\n\t\tbuf.write_shift(4, 0x0800000C);\n\t\tbuf.write_shift(4, 0x08000017);\n\t\tbuf.write_shift(4, 0x100000F7);\n\t}\n\treturn buf;\n}\nfunction write_comments_biff8(ba/*:BufArray*/, comments/*:Array<[Comment[], number, number]>*/) {\n\tvar notes/*:Array*/ = [], sz = 0, pl = buf_array(), baseid = b8oid;\n\tvar _oasc;\n\tcomments.forEach(function(c, ci) {\n\t\tvar author = \"\";\n\t\tvar text = c[0].map(function(t) { if(t.a && !author) author = t.a; return t.t; }).join(\"\");\n\t\t++b8oid;\n\n\t\t/* 2.2.14 OfficeArtSpContainer */\n\t\t{\n\t\t\tvar oasc = new_buf(0x96);\n\t\t\toasc.write_shift(2, 0x0F);\n\t\t\toasc.write_shift(2, 0xF004);\n\t\t\toasc.write_shift(4, 0x96);\n\t\t\t/* 2.2.40 OfficeArtFSP */\n\t\t\t{\n\t\t\t\toasc.write_shift(2, 0xca2); // 0x02 | (0xca << 4)\n\t\t\t\toasc.write_shift(2, 0xF00A);\n\t\t\t\toasc.write_shift(4, 8);\n\t\t\t\toasc.write_shift(4, b8oid);\n\t\t\t\toasc.write_shift(4, 0xA00);\n\t\t\t}\n\t\t\t/* 2.2.9 OfficeArtFOPT */\n\t\t\t{\n\t\t\t\toasc.write_shift(2, 0xE3); // 0x03 | (14 << 4)\n\t\t\t\toasc.write_shift(2, 0xF00B);\n\t\t\t\toasc.write_shift(4, 0x54); // 14 * 6\n\t\t\t\t/* 2.3.21.1 ITxid */\n\t\t\t\toasc.write_shift(2, 0x80); oasc.write_shift(4, 0);\n\t\t\t\t/* 2.3.21.12 txdir */\n\t\t\t\toasc.write_shift(2, 0x8B); oasc.write_shift(4, 0x02);\n\t\t\t\t/* 2.3.21.15 Text Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0xBF); oasc.write_shift(4, 0x00080008);\n\t\t\t\t/* 2.3.6.30 cxk */\n\t\t\t\toasc.write_shift(2, 0x0158); oasc.l += 4;\n\t\t\t\t/* 2.3.7.2 fillColor */\n\t\t\t\toasc.write_shift(2, 0x0181); oasc.write_shift(4, 0x08000050);\n\t\t\t\t/* 2.3.7.4 fillBackColor */\n\t\t\t\toasc.write_shift(2, 0x0183); oasc.write_shift(4, 0x08000050);\n\t\t\t\t/* 2.3.7.6 fillCrMod */\n\t\t\t\toasc.write_shift(2, 0x0185); oasc.write_shift(4, 0x100000F4);\n\t\t\t\t/* 2.3.7.43 Fill Style Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0x01BF); oasc.write_shift(4, 0x00100010);\n\t\t\t\t/* 2.3.8.1 lineColor */\n\t\t\t\toasc.write_shift(2, 0x01C0); oasc.write_shift(4, 0x08000051);\n\t\t\t\t/* 2.3.8.4 lineCrMod */\n\t\t\t\toasc.write_shift(2, 0x01C3); oasc.write_shift(4, 0x100000F4);\n\t\t\t\t/* 2.3.13.2 shadowColor */\n\t\t\t\toasc.write_shift(2, 0x0201); oasc.write_shift(4, 0x08000051);\n\t\t\t\t/* 2.3.13.4 shadowCrMod */\n\t\t\t\toasc.write_shift(2, 0x0203); oasc.write_shift(4, 0x100000F4);\n\t\t\t\t/* 2.3.13.23 Shadow Style Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0x023F); oasc.write_shift(4, 0x00030001);\n\t\t\t\t/* 2.3.4.44 Group Shape Boolean Properties */\n\t\t\t\toasc.write_shift(2, 0x03BF); oasc.write_shift(4, 0x00020000 | (c[0].hidden ? 2 : 0));\n\t\t\t}\n\t\t\t/* [MS-XLS] 2.5.193 OfficeArtClientAnchorSheet */\n\t\t\t{\n\t\t\t\toasc.l += 2;\n\t\t\t\toasc.write_shift(2, 0xF010);\n\t\t\t\toasc.write_shift(4, 0x12);\n\t\t\t\toasc.write_shift(2, 0x3); // do not move or size with cells\n\t\t\t\toasc.write_shift(2, c[2] + 2); oasc.l += 2;\n\t\t\t\toasc.write_shift(2, c[1] + 1); oasc.l += 2;\n\t\t\t\toasc.write_shift(2, c[2] + 4); oasc.l += 2;\n\t\t\t\toasc.write_shift(2, c[1] + 5); oasc.l += 2;\n\t\t\t}\n\t\t\t/* [MS-XLS] 2.5.194 OfficeArtClientData */\n\t\t\t{\n\t\t\t\toasc.l += 2;\n\t\t\t\toasc.write_shift(2, 0xF011);\n\t\t\t\toasc.l += 4;\n\t\t\t}\n\t\t\toasc.l = 0x96;\n\t\t\tif(ci == 0) /* write_biff_rec(pl, 0x003C, oasc); */ _oasc = oasc;\n\t\t\telse write_biff_rec(pl, 0x00EC, oasc);\n\t\t}\n\t\tsz += 0x96;\n\n\t\t/* [MS-XLS] 2.4.181 Obj */\n\t\t{\n\t\t\tvar obj = new_buf(52); // 22 + 26 + 4\n\t\t\t/* [MS-XLS] 2.5.143 FtCmo */\n\t\t\tobj.write_shift(2, 0x15);\n\t\t\tobj.write_shift(2, 0x12);\n\t\t\tobj.write_shift(2, 0x19);\n\t\t\tobj.write_shift(2, b8oid);\n\t\t\tobj.write_shift(2, 0);\n\t\t\tobj.l = 22;\n\t\t\t/* [MS-XLS] 2.5.149 FtNts */\n\t\t\tobj.write_shift(2, 0x0D);\n\t\t\tobj.write_shift(2, 0x16);\n\t\t\tobj.write_shift(4, 0x62726272);\n\t\t\tobj.write_shift(4, 0x95374305);\n\t\t\tobj.write_shift(4, 0x80301328);\n\t\t\tobj.write_shift(4, 0x69696904 + b8oid*256);\n\t\t\tobj.write_shift(2,0);\n\t\t\tobj.write_shift(4,0);\n\t\t\t// reserved\n\t\t\tobj.l += 4;\n\t\t\twrite_biff_rec(pl, 0x005D, obj);\n\t\t}\n\n\t\t/* [MS-XLS] 2.5.195 OfficeArtClientTextbox */\n\t\t{\n\t\t\tvar oact = new_buf(8);\n\t\t\toact.l += 2;\n\t\t\toact.write_shift(2, 0xF00D);\n\t\t\toact.l += 4;\n\t\t\twrite_biff_rec(pl, 0x00EC, oact);\n\t\t}\n\t\tsz += 8;\n\n\t\t/* [MS-XLS] 2.4.329 TxO */\n\t\t{\n\t\t\tvar txo = new_buf(18);\n\t\t\ttxo.write_shift(2, 0x12);\n\t\t\ttxo.l += 8;\n\t\t\ttxo.write_shift(2, text.length);\n\t\t\ttxo.write_shift(2, 0x10);\n\t\t\ttxo.l += 4;\n\t\t\twrite_biff_rec(pl, 0x01b6, txo);\n\t\t\t/* text continue record TODO: switch to wide strings */\n\t\t\t{\n\t\t\t\tvar cont = new_buf(1 + text.length);\n\t\t\t\tcont.write_shift(1, 0);\n\t\t\t\tcont.write_shift(text.length, text, \"sbcs\");\n\t\t\t\twrite_biff_rec(pl, 0x003C, cont);\n\t\t\t}\n\t\t\t/* formatting continue records */\n\t\t\t{\n\t\t\t\tvar conf = new_buf(0x10);\n\t\t\t\tconf.l += 8;\n\t\t\t\tconf.write_shift(2, text.length);\n\t\t\t\tconf.l += 6;\n\t\t\t\twrite_biff_rec(pl, 0x003C, conf);\n\t\t\t}\n\t\t}\n\n\t\t/* 2.4.179 Note */\n\t\t{\n\t\t\tvar notesh = new_buf(12 + author.length);\n\t\t\tnotesh.write_shift(2, c[1]);\n\t\t\tnotesh.write_shift(2, c[2]);\n\t\t\tnotesh.write_shift(2, 0 | (c[0].hidden ? 0 : 2));\n\t\t\tnotesh.write_shift(2, b8oid);\n\t\t\tnotesh.write_shift(2, author.length);\n\t\t\tnotesh.write_shift(1, 0);\n\t\t\tnotesh.write_shift(author.length, author, \"sbcs\");\n\t\t\tnotesh.l ++;\n\t\t\tnotes.push(notesh);\n\t\t}\n\t});\n\t/* [MS-ODRAW] 2.2.13 OfficeArtDgContainer */\n\t{\n\t\tvar hdr = new_buf(80);\n\t\thdr.write_shift(2, 0x0F);\n\t\thdr.write_shift(2, 0xF002);\n\t\thdr.write_shift(4, sz + hdr.length - 8);\n\t\t/* [MS-ODRAW] 2.2.49 OfficeArtFDG */\n\t\t{\n\t\t\thdr.write_shift(2, 0x10);\n\t\t\thdr.write_shift(2, 0xF008);\n\t\t\thdr.write_shift(4, 0x08);\n\t\t\thdr.write_shift(4, comments.length + 1);\n\t\t\thdr.write_shift(4, b8oid);\n\t\t}\n\t\t/* [MS-ODRAW] 2.2.16 OfficeArtSpgrContainer */\n\t\t{\n\t\t\thdr.write_shift(2, 0x0f);\n\t\t\thdr.write_shift(2, 0xF003);\n\t\t\thdr.write_shift(4, sz + 0x30);\n\t\t\t/* [MS-ODRAW] 2.2.14 OfficeArtSpContainer */\n\t\t\t{\n\t\t\t\thdr.write_shift(2, 0x0f);\n\t\t\t\thdr.write_shift(2, 0xF004);\n\t\t\t\thdr.write_shift(4, 0x28);\n\t\t\t\t/* [MS-ODRAW] 2.2.38 OfficeArtFSPGR */\n\t\t\t\t{\n\t\t\t\t\thdr.write_shift(2, 0x01);\n\t\t\t\t\thdr.write_shift(2, 0xF009);\n\t\t\t\t\thdr.write_shift(4, 0x10);\n\t\t\t\t\thdr.l += 16;\n\t\t\t\t}\n\t\t\t\t/* [MS-ODRAW] 2.2.40 OfficeArtFSP */\n\t\t\t\t{\n\t\t\t\t\thdr.write_shift(2, 0x02);\n\t\t\t\t\thdr.write_shift(2, 0xF00A);\n\t\t\t\t\thdr.write_shift(4, 0x08);\n\t\t\t\t\thdr.write_shift(4, baseid);\n\t\t\t\t\thdr.write_shift(4, 0x05);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\twrite_biff_rec(ba, 0x00EC, /* hdr */ _oasc ? bconcat([hdr, _oasc]) : hdr);\n\t}\n\tba.push(pl.end());\n\tnotes.forEach(function(n) { write_biff_rec(ba, 0x001C, n); });\n\tb8ocnts.push([baseid, comments.length + 1, b8oid]);\n\t++b8oid;\n}\n\nfunction write_FONTS_biff8(ba, data, opts) {\n\twrite_biff_rec(ba, 0x0031 /* Font */, write_Font({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Arial\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}, opts));\n}\n\n\nfunction write_FMTS_biff8(ba, NF/*:?SSFTable*/, opts) {\n\tif(!NF) return;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_biff_rec(ba, 0x041E /* Format */, write_Format(i, NF[i], opts));\n\t});\n}\n\nfunction write_FEAT(ba, ws) {\n\t/* [MS-XLS] 2.4.112 */\n\tvar o = new_buf(19);\n\to.write_shift(4, 0x867); o.write_shift(4, 0); o.write_shift(4, 0);\n\to.write_shift(2, 3); o.write_shift(1, 1); o.write_shift(4, 0);\n\twrite_biff_rec(ba, 0x0867 /* FeatHdr */, o);\n\t/* [MS-XLS] 2.4.111 */\n\to = new_buf(39);\n\to.write_shift(4, 0x868); o.write_shift(4, 0); o.write_shift(4, 0);\n\to.write_shift(2, 3); o.write_shift(1, 0); o.write_shift(4, 0);\n\to.write_shift(2, 1); o.write_shift(4, 4); o.write_shift(2, 0);\n\twrite_Ref8U(safe_decode_range(ws['!ref']||\"A1\"), o);\n\to.write_shift(4, 4);\n\twrite_biff_rec(ba, 0x0868 /* Feat */, o);\n}\n\nfunction write_CELLXFS_biff8(ba, opts) {\n\tfor(var i = 0; i < 16; ++i) write_biff_rec(ba, 0x00e0 /* XF */, write_XF({numFmtId:0, style:true}, 0, opts));\n\topts.cellXfs.forEach(function(c) {\n\t\twrite_biff_rec(ba, 0x00e0 /* XF */, write_XF(c, 0, opts));\n\t});\n}\n\nfunction write_ws_biff8_hlinks(ba/*:BufArray*/, ws) {\n\tfor(var R=0; R*/ = [];\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\");\n\tvar MAX_ROWS = b8 ? 65536 : 16384;\n\tif(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, 0x000d /* CalcMode */, writeuint16(1));\n\twrite_biff_rec(ba, 0x000c /* CalcCount */, writeuint16(100));\n\twrite_biff_rec(ba, 0x000f /* CalcRefMode */, writebool(true));\n\twrite_biff_rec(ba, 0x0011 /* CalcIter */, writebool(false));\n\twrite_biff_rec(ba, 0x0010 /* CalcDelta */, write_Xnum(0.001));\n\twrite_biff_rec(ba, 0x005f /* CalcSaveRecalc */, writebool(true));\n\twrite_biff_rec(ba, 0x002a /* PrintRowCol */, writebool(false));\n\twrite_biff_rec(ba, 0x002b /* PrintGrid */, writebool(false));\n\twrite_biff_rec(ba, 0x0082 /* GridSet */, writeuint16(1));\n\twrite_biff_rec(ba, 0x0080 /* Guts */, write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, 0x0083 /* HCenter */, writebool(false));\n\twrite_biff_rec(ba, 0x0084 /* VCenter */, writebool(false));\n\t/* ... */\n\tif(b8) write_ws_cols_biff8(ba, ws[\"!cols\"]);\n\t/* ... */\n\twrite_biff_rec(ba, 0x0200 /* Dimensions */, write_Dimensions(range, opts));\n\t/* ... */\n\n\tvar date1904 = (((wb||{}).Workbook||{}).WBProps||{}).date1904;\n\tif(b8) ws['!links'] = [];\n\tfor(var C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tvar comments = [];\n\tvar row = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tif(dense) row = ws[\"!data\"][R] || [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? row[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts, date1904);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t\tif(cell.c) comments.push([cell.c, R, C]);\n\t\t}\n\t}\n\tvar cname/*:string*/ = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8) write_comments_biff8(ba, comments); else write_comments_biff2(ba, comments);\n\t/* ... */\n\tif(b8) write_biff_rec(ba, 0x023e /* Window2 */, write_Window2((_WB.Views||[])[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, 0x00e5 /* MergeCells */, write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, 0x000a /* EOF */);\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {\n\tvar A = buf_array();\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheets/*:Array*/ = (_WB.Sheets||[]);\n\tvar _wb/*:WBProps*/ = /*::((*/_WB.WBProps||{/*::CodeName:\"ThisWorkbook\"*/}/*:: ):any)*/;\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, 0x0087 /* Addin */);\n\twrite_biff_rec(A, 0x00e1 /* InterfaceHdr */, b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, 0x00c1 /* Mms */, writezeroes(2));\n\tif(b5) write_biff_rec(A, 0x00bf /* ToolbarHdr */);\n\tif(b5) write_biff_rec(A, 0x00c0 /* ToolbarEnd */);\n\twrite_biff_rec(A, 0x00e2 /* InterfaceEnd */);\n\twrite_biff_rec(A, 0x005c /* WriteAccess */, write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, 0x0042 /* CodePage */, writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, 0x0161 /* DSF */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01c0 /* Excel9File */);\n\twrite_biff_rec(A, 0x013d /* RRTabId */, write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, 0x00d3 /* ObProj */);\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname/*:string*/ = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, 0x01ba /* CodeName */, write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, 0x009c /* BuiltInFnGroupCount */, writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, 0x0019 /* WinProtect */, writebool(false));\n\twrite_biff_rec(A, 0x0012 /* Protect */, writebool(false));\n\twrite_biff_rec(A, 0x0013 /* Password */, writeuint16(0));\n\tif(b8) write_biff_rec(A, 0x01af /* Prot4Rev */, writebool(false));\n\tif(b8) write_biff_rec(A, 0x01bc /* Prot4RevPass */, writeuint16(0));\n\twrite_biff_rec(A, 0x003d /* Window1 */, write_Window1(opts));\n\twrite_biff_rec(A, 0x0040 /* Backup */, writebool(false));\n\twrite_biff_rec(A, 0x008d /* HideObj */, writeuint16(0));\n\twrite_biff_rec(A, 0x0022 /* Date1904 */, writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, 0x000e /* CalcPrecision */, writebool(true));\n\tif(b8) write_biff_rec(A, 0x01b7 /* RefreshAll */, writebool(false));\n\twrite_biff_rec(A, 0x00DA /* BookBool */, writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, 0x0160 /* UsesELFs */, writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, 0x008C /* Country */, write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture */\n\n\t/* BIFF8: MsoDrawingGroup [*Continue] */\n\tif(b8 && b8ocnts.length) write_biff_rec(C, 0x00EB /* MsoDrawingGroup */, write_MsoDrawingGroup());\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, 0x00FC /* SST */, write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, 0x000A /* EOF */);\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet/*:WBWSProp*/ = _sheets[j] || ({}/*:any*/);\n\t\twrite_biff_rec(B, 0x0085 /* BoundSheet8 */, write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn bconcat(out);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\tb8oid = 1; b8ocnts = [];\n\to.Strings = /*::((*/[]/*:: :any):SST)*/; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn bconcat(bufs);\n}\n\nfunction write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tfor(var i = 0; i <= wb.SheetNames.length; ++i) {\n\t\tvar ws = wb.Sheets[wb.SheetNames[i]];\n\t\tif(!ws || !ws[\"!ref\"]) continue;\n\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\tif(range.e.c > 255) { // note: 255 is IV\n\t\t\tif(typeof console != \"undefined\" && console.error) console.error(\"Worksheet '\" + wb.SheetNames[i] + \"' extends beyond column IV (255). Data may be lost.\");\n\t\t}\n\t}\n\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nfunction html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar dense = (opts.dense != null) ? opts.dense : DENSE;\n\tvar ws/*:Worksheet*/ = ({}/*:any*/); if(dense) ws[\"!data\"] = [];\n\tstr = str_remove_ng(str, \"\");\n\tvar mtch/*:any*/ = str.match(/\");\n\tvar mtch2/*:any*/ = str.match(/<\\/table/i);\n\tvar i/*:number*/ = mtch.index, j/*:number*/ = mtch2 && mtch2.index || str.length;\n\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n\tvar R = -1, C = 0, RS = 0, CS = 0;\n\tvar range/*:Range*/ = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\tvar merges/*:Array*/ = [];\n\tfor(i = 0; i < rows.length; ++i) {\n\t\tvar row = rows[i].trim();\n\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\tif(hd == \"/i);\n\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\tvar cell = cells[j].trim();\n\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar _merge/*:Range*/ = merges[midx];\n\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t}\n\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\tvar _t/*:string*/ = tag.t || tag[\"data-t\"] || \"\";\n\t\t\t/* TODO: generate stub cells */\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tm = htmldecode(m);\n\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\tvar o/*:Cell*/ = {t:'s', v:m};\n\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\to = ({t:'d', v:parseDate(m)}/*:any*/);\n\t\t\t\tif(opts.UTC === false) o.v = utc_to_local(o.v);\n\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t}\n\t\t\tif(o.cellText !== false) o.w = m;\n\t\t\tif(dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = o; }\n\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\tC += CS;\n\t\t}\n\t}\n\tws['!ref'] = encode_range(range);\n\tif(merges.length) ws[\"!merges\"] = merges;\n\treturn ws;\n}\nfunction make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar M/*:Array*/ = (ws['!merges'] ||[]);\n\tvar oo/*:Array*/ = [];\n\tvar sp = ({}/*:any*/);\n\tvar dense = ws[\"!data\"] != null;\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar RS = 0, CS = 0;\n\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t}\n\t\tif(RS < 0) continue;\n\t\tvar coord = encode_col(C) + encode_row(R);\n\t\tvar cell = dense ? (ws[\"!data\"][R]||[])[C] : ws[coord];\n\t\t/* TODO: html entities */\n\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\tsp = ({}/*:any*/);\n\t\tif(RS > 1) sp.rowspan = RS;\n\t\tif(CS > 1) sp.colspan = CS;\n\t\tif(o.editable) w = '' + w + '';\n\t\telse if(cell) {\n\t\t\tsp[\"data-t\"] = cell && cell.t || 'z';\n\t\t\t// note: data-v is unaffected by the timezone interpretation\n\t\t\tif(cell.v != null) sp[\"data-v\"] = escapehtml(cell.v instanceof Date ? cell.v.toISOString() : cell.v);\n\t\t\tif(cell.z != null) sp[\"data-z\"] = cell.z;\n\t\t\tif(cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '' + w + '';\n\t\t}\n\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\too.push(writextag('td', w, sp));\n\t}\n\tvar preamble = \"\";\n\treturn preamble + oo.join(\"\") + \"\";\n}\n\nvar HTML_BEGIN = 'SheetJS Table Export';\nvar HTML_END = '';\n\nfunction html_to_workbook(str/*:string*/, opts)/*:Workbook*/ {\n\tvar mtch = str_match_xml_ig(str, \"table\");\n\tif(!mtch || mtch.length == 0) throw new Error(\"Invalid HTML: could not find
\");\n\tif(mtch.length == 1) {\n\t\tvar w = sheet_to_workbook(html_to_sheet(mtch[0], opts), opts);\n\t\tw.bookType = \"html\";\n\t\treturn w;\n\t}\n\tvar wb = book_new();\n\tmtch.forEach(function(s, idx) { book_append_sheet(wb, html_to_sheet(s, opts), \"Sheet\" + (idx+1)); });\n\twb.bookType = \"html\";\n\treturn wb;\n}\n\nfunction make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\treturn out.join(\"\") + '';\n}\n\nfunction sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:?Workbook*/)/*:string*/ {\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tvar out/*:Array*/ = [header];\n\tvar r = decode_range(ws['!ref'] || \"A1\");\n\tout.push(make_html_preamble(ws, r, o));\n\tif(ws[\"!ref\"]) for(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\tout.push(\"
\" + footer);\n\treturn out.join(\"\");\n}\n\nfunction sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar rows/*:HTMLCollection*/ = table.rows;\n\tif(!rows) {\n\t\t/* not an HTML TABLE */\n\t\tthrow \"Unsupported origin when \" + table.tagName + \" is not a TABLE\";\n\t}\n\n\tvar opts = _opts || {};\n\tvar dense = ws[\"!data\"] != null;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range/*:Range*/ = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range/*:Range*/ = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges/*:Array*/ = [], midx = 0;\n\tvar rowinfo/*:Array*/ = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row/*:HTMLTableRowElement*/ = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts/*:HTMLCollection*/ = (row.cells);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt/*:HTMLTableCellElement*/ = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v/*:?string*/ = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z/*:?string*/ = elt.getAttribute('data-z') || elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m/*:Range*/ = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o/*:Cell*/ = {t:'s', v:v};\n\t\t\tvar _t/*:string*/ = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)}/*:any*/);\n\t\t\t\t\tif(opts.UTC) o.v = local_to_utc(o.v);\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\t\to.z = opts.dateNF || table_fmt[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\t/* The first link is used. Links are assumed to be fully specified.\n\t\t\t * TODO: The right way to process relative links is to make a new */\n\t\t\tvar l = \"\", Aelts = elt.getElementsByTagName(\"A\");\n\t\t\tif(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti)\tif(Aelts[Aelti].hasAttribute(\"href\")) {\n\t\t\t\tl = Aelts[Aelti].getAttribute(\"href\"); if(l.charAt(0) != \"#\") break;\n\t\t\t}\n\t\t\tif(l && l.charAt(0) != \"#\" &&\tl.slice(0, 11).toLowerCase() != 'javascript:') o.l = ({ Target: l });\n\t\t\tif(dense) { if(!ws[\"!data\"][R + or_R]) ws[\"!data\"][R + or_R] = []; ws[\"!data\"][R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tvar ws/*:Worksheet*/ = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = [];\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {\n\tvar o = sheet_to_workbook(parse_dom_table(table, opts), opts);\n\t//o.bookType = \"dom\"; // TODO: define a type for this\n\treturn o;\n}\n\nfunction is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {\n\tvar display/*:string*/ = '';\n\tvar get_computed_style/*:?function*/ = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style && element.style.display;\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element/*:HTMLElement*/)/*:?function*/ {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nfunction parse_text_p(text/*:string*//*::, tag*/)/*:Array*/ {\n\t/* 6.1.2 White Space Characters */\n\tvar fixed = text\n\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t.replace(//g,\" \")\n\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t.replace(//g,\"\\n\");\n\tvar v = unescapexml(fixed.replace(/<[^<>]*>/g,\"\"));\n\n\treturn [v];\n}\n\n/* Note: ODS can stick styles in content.xml or styles.xml, FODS blurs lines */\nfunction parse_ods_styles(d/*:string*/, _opts, _nfm) {\n\tvar number_format_map = _nfm || {};\n\tvar str = xlml_normalize(d);\n\txlmlregex.lastIndex = 0;\n\tstr = remove_doctype(str_remove_ng(str, \"\"));\n\tvar Rn, NFtag, NF = \"\", tNF = \"\", y, etpos = 0, tidx = -1, infmt = false, payload = \"\";\n\twhile((Rn = xlmlregex.exec(str))) {\n\t\tswitch((Rn[3]=Rn[3].replace(/_[\\s\\S]*$/,\"\"))) {\n\t\t/* Number Format Definitions */\n\t\tcase 'number-style': // 16.29.2\n\t\tcase 'currency-style': // 16.29.8\n\t\tcase 'percentage-style': // 16.29.10\n\t\tcase 'date-style': // 16.29.11\n\t\tcase 'time-style': // 16.29.19\n\t\tcase 'text-style': // 16.29.26\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tinfmt = false;\n\t\t\t\tif(NFtag['truncate-on-overflow'] == \"false\") {\n\t\t\t\t\tif(NF.match(/h/)) NF = NF.replace(/h+/, \"[$&]\");\n\t\t\t\t\telse if(NF.match(/m/)) NF = NF.replace(/m+/, \"[$&]\");\n\t\t\t\t\telse if(NF.match(/s/)) NF = NF.replace(/s+/, \"[$&]\");\n\t\t\t\t}\n\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\tNF = \"\";\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tinfmt = true;\n\t\t\t\tNF = \"\";\n\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t} break;\n\n\t\t// LibreOffice bug https://bugs.documentfoundation.org/show_bug.cgi?id=149484\n\t\tcase 'boolean-style': // 16.29.24\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tinfmt = false;\n\t\t\t\tnumber_format_map[NFtag.name] = \"General\";\n\t\t\t\tNF = \"\";\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tinfmt = true;\n\t\t\t\tNF = \"\";\n\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t} break;\n\n\t\t/* Number Format Elements */\n\t\tcase 'boolean': // 16.29.25\n\t\t\tNF += \"General\"; // ODF spec is unfortunately underspecified here\n\t\t\tbreak;\n\n\t\tcase 'text': // 16.29.27\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tpayload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);\n\t\t\t\t// NOTE: Excel has a different interpretation of \"%%\" and friends\n\t\t\t\tif(payload == \"%\" && NFtag[0] == ' 16.29.12\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"d\"; break;\n\t\t\t\tcase \"long\": NF += \"dd\"; break;\n\t\t\t\tdefault: NF += \"dd\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'day-of-week': { // 16.29.16\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"ddd\"; break;\n\t\t\t\tcase \"long\": NF += \"dddd\"; break;\n\t\t\t\tdefault: NF += \"ddd\"; break;\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'era': { // 16.29.15 TODO: proper mapping\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"ee\"; break;\n\t\t\t\tcase \"long\": NF += \"eeee\"; break;\n\t\t\t\tdefault: NF += \"eeee\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'hours': { // 16.29.20\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"h\"; break;\n\t\t\t\tcase \"long\": NF += \"hh\"; break;\n\t\t\t\tdefault: NF += \"hh\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'minutes': { // 16.29.21\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"m\"; break;\n\t\t\t\tcase \"long\": NF += \"mm\"; break;\n\t\t\t\tdefault: NF += \"mm\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'month': { // 16.29.13\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(y[\"textual\"]) NF += \"mm\";\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"m\"; break;\n\t\t\t\tcase \"long\": NF += \"mm\"; break;\n\t\t\t\tdefault: NF += \"m\"; break;\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'seconds': { // 16.29.22\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"s\"; break;\n\t\t\t\tcase \"long\": NF += \"ss\"; break;\n\t\t\t\tdefault: NF += \"ss\"; break; // TODO: error condition\n\t\t\t}\n\t\t\tif(y[\"decimal-places\"]) NF += \".\" + fill(\"0\", +y[\"decimal-places\"]);\n\t\t} break;\n\n\t\tcase 'year': { // 16.29.14\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch(y[\"style\"]) {\n\t\t\t\tcase \"short\": NF += \"yy\"; break;\n\t\t\t\tcase \"long\": NF += \"yyyy\"; break;\n\t\t\t\tdefault: NF += \"yy\"; break; // TODO: error condition\n\t\t\t}\n\t\t} break;\n\n\t\tcase 'am-pm': // 16.29.23\n\t\t\tNF += \"AM/PM\"; // LO autocorrects A/P -> AM/PM\n\t\t\tbreak;\n\n\t\tcase 'week-of-year': // 16.29.17\n\t\tcase 'quarter': // 16.29.18\n\t\t\tconsole.error(\"Excel does not support ODS format token \" + Rn[3]);\n\t\t\tbreak;\n\n\t\tcase 'fill-character': // 16.29.5\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tpayload = str.slice(tidx, xlmlregex.lastIndex - Rn[0].length);\n\t\t\t\t// NOTE: Excel has a different interpretation of \"%%\" and friends\n\t\t\t\tNF += '\"' + payload.replace(/\"/g, '\"\"') + '\"*';\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t} break;\n\n\t\tcase 'scientific-number': // 16.29.6\n\t\t\t// TODO: find a mapping for all parameters\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tNF += \"0.\" + fill(\"0\", +y[\"min-decimal-places\"] || +y[\"decimal-places\"] || 2) + fill(\"?\", +y[\"decimal-places\"] - +y[\"min-decimal-places\"] || 0) + \"E\" + (parsexmlbool(y[\"forced-exponent-sign\"]) ? \"+\" : \"\") + fill(\"0\", +y[\"min-exponent-digits\"] || 2);\n\t\t\tbreak;\n\n\t\tcase 'fraction': // 16.29.7\n\t\t\t// TODO: find a mapping for all parameters\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(!+y[\"min-integer-digits\"]) NF += \"#\";\n\t\t\telse NF += fill(\"0\", +y[\"min-integer-digits\"]);\n\t\t\tNF += \" \";\n\t\t\tNF += fill(\"?\", +y[\"min-numerator-digits\"] || 1);\n\t\t\tNF += \"/\";\n\t\t\tif(+y[\"denominator-value\"]) NF += y[\"denominator-value\"];\n\t\t\telse NF += fill(\"?\", +y[\"min-denominator-digits\"] || 1);\n\t\t\tbreak;\n\n\t\tcase 'currency-symbol': // 16.29.9\n\t\t\t// TODO: localization with [$-...]\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tNF += '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"';\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t} else NF += \"$\";\n\t\t\tbreak;\n\n\t\tcase 'text-properties': // 16.29.29\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tswitch((y[\"color\"]||\"\").toLowerCase().replace(\"#\", \"\")) {\n\t\t\t\tcase \"ff0000\": case \"red\": NF = \"[Red]\" + NF; break;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'text-content': // 16.29.28\n\t\t\tNF += \"@\";\n\t\t\tbreak;\n\n\t\tcase 'map': // 16.3\n\t\t\t// TODO: handle more complex maps\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\tif(unescapexml(y[\"condition\"]) == \"value()>=0\") NF = number_format_map[y[\"apply-style-name\"]] + \";\" + NF;\n\t\t\telse console.error(\"ODS number format may be incorrect: \" + y[\"condition\"]);\n\t\t\tbreak;\n\n\t\tcase 'number': // 16.29.3\n\t\t\t// TODO: handle all the attributes\n\t\t\tif(Rn[1]==='/') break;\n\t\t\ty = parsexmltag(Rn[0], false);\n\t\t\ttNF = \"\";\n\t\t\ttNF += fill(\"0\", +y[\"min-integer-digits\"] || 1);\n\t\t\tif(parsexmlbool(y[\"grouping\"])) tNF = commaify(fill(\"#\", Math.max(0, 4 - tNF.length)) + tNF);\n\t\t\tif(+y[\"min-decimal-places\"] || +y[\"decimal-places\"]) tNF += \".\";\n\t\t\tif(+y[\"min-decimal-places\"]) tNF += fill(\"0\", +y[\"min-decimal-places\"] || 1);\n\t\t\tif(+y[\"decimal-places\"] - (+y[\"min-decimal-places\"]||0)) tNF += fill(\"0\", +y[\"decimal-places\"] - (+y[\"min-decimal-places\"]||0)); // TODO: should this be \"#\" ?\n\t\t\tNF += tNF;\n\t\t\tbreak;\n\n\t\tcase 'embedded-text': // 16.29.4\n\t\t\t// TODO: verify interplay with grouping et al\n\t\t\tif(Rn[1]==='/') {\n\t\t\t\tif(etpos == 0) NF += '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"';\n\t\t\t\telse NF = NF.slice(0, etpos) + '\"' + str.slice(tidx, xlmlregex.lastIndex - Rn[0].length).replace(/\"/g, '\"\"') + '\"' + NF.slice(etpos);\n\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\ttidx = xlmlregex.lastIndex;\n\t\t\t\tetpos = -+parsexmltag(Rn[0], false)[\"position\"] || 0;\n\t\t\t} break;\n\n\t}}\n\treturn number_format_map;\n}\n\nfunction parse_content_xml(d/*:string*/, _opts, _nfm)/*:Workbook*/ {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state/*:Array*/ = [], tmp;\n\t\tvar tag/*:: = {}*/;\n\t\tvar nfidx, NF = \"\", pidx = 0;\n\t\tvar sheetag/*:: = {name:\"\", '名称':\"\"}*/;\n\t\tvar rowtag/*:: = {'行号':\"\"}*/;\n\t\tvar Sheets = {}, SheetNames/*:Array*/ = [];\n\t\tvar ws = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = [];\n\t\tvar Rn, q/*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/;\n\t\tvar ctag = ({value:\"\"}/*:any*/);\n\t\tvar textp = \"\", textpidx = 0, textptag/*:: = {}*/, oldtextp = \"\", oldtextpidx = 0;\n\t\tvar textR = [], oldtextR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = _nfm || {}, styles = {};\n\t\tvar merges/*:Array*/ = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo/*:Array*/ = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\t\tvar WB = {Names:[], WBProps:{}};\n\t\tvar atag = ({}/*:any*/);\n\t\tvar _Ref/*:[string, string]*/ = [\"\", \"\"];\n\t\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = remove_doctype(str_remove_ng(str, \"\"));\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_[\\s\\S]*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\telse ws['!ref'] = \"A1:A1\";\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = ({}/*:any*/); if(opts.dense) ws[\"!data\"] = []; merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[\"!data\"][R]) ws[\"!data\"][R] = []; ws[\"!data\"][R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif(ctag[\"style-name\"] && styles[ctag[\"style-name\"]]) q.z = styles[ctag[\"style-name\"]];\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[\"!data\"][R]) ws[\"!data\"][R] = [];\n\t\t\t\t\t\t\tws[\"!data\"][R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_col(C) + encode_row(R)] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\ttextp = oldtextp = \"\"; textpidx = oldtextpidx = 0; textR = []; oldtextR = [];\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({}/*:any*/);\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag[\"style-name\"] && styles[ctag[\"style-name\"]]) q.z = styles[ctag[\"style-name\"]];\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type TODO: verify ODS and UOS */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']) || (+ctag['boolean-value'] >= 1); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value);\n\t\t\t\t\t\t\tif(opts.cellDates && q.z && fmt_is_date(q.z)) { q.v = numdate(q.v + (WB.WBProps.date1904 ? 1462 : 0)); q.t = typeof q.v == \"number\" ? 'n' : 'd'; }\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value'], WB.WBProps.date1904);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v, WB.WBProps.date1904); }\n\t\t\t\t\t\t\tif(!q.z) q.z = 'm/d/yy'; break;\n\t\t\t\t\t\t/* NOTE: for `time`, Excel ODS export incorrectly uses durations relative to 1900 epoch even if 1904 is specified */\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400;\n\t\t\t\t\t\t\tif(opts.cellDates) { q.v = numdate(q.v); q.t = typeof q.v == \"number\" ? 'n' : 'd'; }\n\t\t\t\t\t\t\tif(!q.z) q.z = 'HH:MM:SS'; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[\"!data\"][R + rpt]) ws[\"!data\"][R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[\"!data\"][R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[\"!data\"][R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {/*:: t:\"\", v:null, z:null, w:\"\",c:[]*/};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({}/*:any*/);\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\tcase 'master-styles': // 3.15.4 -- relevant for FODS\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) /*::(*/comment/*:: :any)*/.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t\ttextp = oldtextp; textpidx = oldtextpidx; textR = oldtextR;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\t\tvar annotag = parsexmltag(Rn[0], true);\n\t\t\t\t\t/* office:display TODO: check if there is a global override */\n\t\t\t\t\tif(!(annotag[\"display\"] && parsexmlbool(annotag[\"display\"]))) comments.hidden = true;\n\t\t\t\t\toldtextp = textp; oldtextpidx = textpidx; oldtextR = textR;\n\t\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\t}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // \n\t\t\tcase 'currency-symbol': // \n\t\t\tcase 'fill-character': // 16.29.5 \n\t\t\t\tbreak;\n\n\t\t\tcase 'text-style': // 16.27.25 \n\t\t\tcase 'boolean-style': // 16.27.23 \n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'currency-style': // 16.29.8 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tvar xlmlidx = xlmlregex.lastIndex;\n\t\t\t\t\tparse_ods_styles(str.slice(nfidx, xlmlregex.lastIndex), _opts, number_format_map);\n\t\t\t\t\txlmlregex.lastIndex = xlmlidx;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tnfidx = xlmlregex.lastIndex - Rn[0].length;\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': { // 16.2 \n\t\t\t\tvar styletag = parsexmltag(Rn[0], false);\n\t\t\t\tif(styletag[\"family\"] == \"table-cell\" && number_format_map[styletag[\"data-style-name\"]]) styles[styletag[\"name\"]] = number_format_map[styletag[\"data-style-name\"]];\n\t\t\t} break;\n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tbreak;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tbreak;\n\n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}/*:any*/);\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27 \n\t\t\tcase 'embedded-text': break; // 16.27.4 \n\n\t\t\tcase 'body': case '电子表格': break; // 3.3 16.9.6 19.726.3\n\n\t\t\tcase 'forms': break; // 12.25.2 13.2\n\t\t\tcase 'table-column': break; // 9.1.6 \n\t\t\tcase 'table-header-rows': break; // 9.1.7 \n\t\t\tcase 'table-rows': break; // 9.1.12 \n\t\t\t/* TODO: outline levels */\n\t\t\tcase 'table-column-group': break; // 9.1.10 \n\t\t\tcase 'table-header-columns': break; // 9.1.11 \n\t\t\tcase 'table-columns': break; // 9.1.12 \n\n\t\t\tcase 'null-date': // 9.4.2 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\tswitch(tag[\"date-value\"]) {\n\t\t\t\t\tcase \"1904-01-01\": WB.WBProps.date1904 = true; break;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'graphic-properties': break; // 17.21 \n\t\t\tcase 'calculation-settings': break; // 9.4.1 \n\t\t\tcase 'named-expressions': break; // 9.4.11 \n\t\t\tcase 'label-range': break; // 9.4.9 \n\t\t\tcase 'label-ranges': break; // 9.4.10 \n\t\t\tcase 'named-expression': break; // 9.4.13 \n\t\t\tcase 'sort': break; // 9.4.19 \n\t\t\tcase 'sort-by': break; // 9.4.20 \n\t\t\tcase 'sort-groups': break; // 9.4.22 \n\n\t\t\tcase 'tab': break; // 6.1.4 \n\t\t\tcase 'line-break': break; // 6.1.5 \n\t\t\tcase 'span': break; // 6.1.7 \n\t\t\tcase 'p': case '文本串': // 5.1.3 \n\t\t\t\tif(['master-styles'].indexOf(state[state.length-1][0]) > -1) break;\n\t\t\t\tif(Rn[1]==='/' && (!ctag || !ctag['string-value'])) {\n\t\t\t\t\tvar ptp = parse_text_p(str.slice(textpidx,Rn.index), textptag);\n\t\t\t\t\ttextp = (textp.length > 0 ? textp + \"\\n\" : \"\") + ptp[0];\n\t\t\t\t} else if(Rn[0].slice(-2) == \"/>\") {\n\t\t\t\t\t/* TODO: is self-closing 文本串 valid? */\n\t\t\t\t\ttextp += \"\\n\";\n\t\t\t\t} else { textptag = parsexmltag(Rn[0], false); textpidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak; // \n\t\t\tcase 's': break; // \n\n\t\t\tcase 'database-range': // 9.4.15 \n\t\t\t\tif(Rn[1]==='/') break;\n\t\t\t\ttry {\n\t\t\t\t\t_Ref = ods_to_csf_3D(parsexmltag(Rn[0])['target-range-address']);\n\t\t\t\t\tSheets[_Ref[0]]['!autofilter'] = { ref:_Ref[1] };\n\t\t\t\t} catch(e) {/* empty */}\n\t\t\t\tbreak;\n\n\t\t\tcase 'date': break; // <*:date>\n\n\t\t\tcase 'object': break; // 10.4.6.2 \n\t\t\tcase 'title': case '标题': break; // <*:title> OR \n\t\t\tcase 'desc': break; // <*:desc>\n\t\t\tcase 'binary-data': break; // 10.4.5 TODO: b64 blob\n\n\t\t\t/* 9.2 Advanced Tables */\n\t\t\tcase 'table-source': break; // 9.2.6\n\t\t\tcase 'scenario': break; // 9.2.6\n\n\t\t\tcase 'iteration': break; // 9.4.3 \n\t\t\tcase 'content-validations': break; // 9.4.4 \n\n\t\t\t/* 9.5 Filters */\n\t\t\tcase 'filter': break; // 9.5.2 \n\t\t\tcase 'filter-and': break; // 9.5.3 \n\t\t\tcase 'filter-or': break; // 9.5.4 \n\t\t\tcase 'filter-condition': break; // 9.5.5 \n\t\t\tcase 'filter-set-item': break; // 9.5.6 \n\n\t\t\tcase 'list-level-style-bullet': break; // 16.31 \n\t\t\tcase 'page-count': break; // TODO \n\t\t\tcase 'time': break; // TODO \n\n\t\t\t/* 9.3 Advanced Table Cells */\n\t\t\tcase 'cell-range-source': break; // 9.3.1 \n\t\t\tcase 'property': break; // 13.8 \n\n\t\t\tcase 'a': // 6.1.8 hyperlink\n\t\t\t\tif(Rn[1]!== '/') {\n\t\t\t\t\tatag = parsexmltag(Rn[0], false);\n\t\t\t\t\tif(!atag.href) break;\n\t\t\t\t\tatag.Target = unescapexml(atag.href); delete atag.href;\n\t\t\t\t\tif(atag.Target.charAt(0) == \"#\" && atag.Target.indexOf(\".\") > -1) {\n\t\t\t\t\t\t_Ref = ods_to_csf_3D(atag.Target.slice(1));\n\t\t\t\t\t\tatag.Target = \"#\" + _Ref[0] + \"!\" + _Ref[1];\n\t\t\t\t\t} else if(atag.Target.match(/^\\.\\.[\\\\\\/]/)) atag.Target = atag.Target.slice(3);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\t/* non-standard */\n\t\t\tcase 'table-protection': break;\n\t\t\tcase 'data-pilot-grand-total': break; // ',\n\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t\t'',\n\t\t\t'',\n\t\t''\n\t].join(\"\");\n\n\tvar payload = '' + master_styles + '';\n\n\treturn function wso(/*::wb, opts*/) {\n\t\treturn XML_HEADER + payload;\n\t};\n})();\n\n// TODO: find out if anyone actually read the spec. LO has some wild errors\nfunction write_number_format_ods(nf/*:string*/, nfidx/*:string*/)/*:string*/ {\n\tvar type = \"number\", payload = \"\", nopts = { \"style:name\": nfidx }, c = \"\", i = 0;\n\tnf = nf.replace(/\"[$]\"/g, \"$\");\n\t/* TODO: replace with an actual parser based on a real grammar */\n\tj: {\n\t\t// TODO: support style maps\n\t\tif(nf.indexOf(\";\") > -1) {\n\t\t\tconsole.error(\"Unsupported ODS Style Map exported. Using first branch of \" + nf);\n\t\t\tnf = nf.slice(0, nf.indexOf(\";\"));\n\t\t}\n\n\t\tif(nf == \"@\") { type = \"text\"; payload = \"\"; break j; }\n\n\t\t/* currency flag */\n\t\tif(nf.indexOf(/\\$/) > -1) { type = \"currency\"; }\n\n\t\t/* opening string literal */\n\t\tif(nf[i] == '\"') {\n\t\t\tc = \"\";\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tif(nf[i+1] == \"*\") {\n\t\t\t\ti++;\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t} else {\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t}\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\n\t\t/* fractions */\n\t\tvar t = nf.match(/# (\\?+)\\/(\\?+)/);\n\t\tif(t) { payload += writextag(\"number:fraction\", null, {\"number:min-integer-digits\":0, \"number:min-numerator-digits\": t[1].length, \"number:max-denominator-value\": Math.max(+(t[1].replace(/./g, \"9\")), +(t[2].replace(/./g, \"9\"))) }); break j; }\n\t\tif((t=nf.match(/# (\\?+)\\/(\\d+)/))) { payload += writextag(\"number:fraction\", null, {\"number:min-integer-digits\":0, \"number:min-numerator-digits\": t[1].length, \"number:denominator-value\": +t[2]}); break j; }\n\n\t\t/* percentages */\n\t\tif((t=nf.match(/\\b(\\d+)(|\\.\\d+)%/))) { type = \"percentage\"; payload += writextag(\"number:number\", null, {\"number:decimal-places\": t[2] && t.length - 1 || 0, \"number:min-decimal-places\": t[2] && t.length - 1 || 0, \"number:min-integer-digits\": t[1].length }) + \"%\"; break j; }\n\n\t\t/* datetime */\n\t\tvar has_time = false;\n\t\tif([\"y\",\"m\",\"d\"].indexOf(nf[0]) > -1) {\n\t\t\ttype = \"date\";\n\t\t\tk: for(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {\n\t\t\t\tcase \"h\": case \"s\": has_time = true; --i; break k;\n\t\t\t\tcase \"m\":\n\t\t\t\t\tl: for(var h = i+1; h < nf.length; ++h) switch(nf[h]) {\n\t\t\t\t\t\tcase \"y\": case \"d\": break l;\n\t\t\t\t\t\tcase \"h\": case \"s\": has_time = true; --i; break k;\n\t\t\t\t\t}\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase \"y\": case \"d\":\n\t\t\t\t\twhile((nf[++i]||\"\").toLowerCase() == c[0]) c += c[0]; --i;\n\t\t\t\t\tswitch(c) {\n\t\t\t\t\t\tcase \"y\": case \"yy\": payload += \"\"; break;\n\t\t\t\t\t\tcase \"yyy\": case \"yyyy\": payload += ''; break;\n\t\t\t\t\t\tcase \"mmmmm\": console.error(\"ODS has no equivalent of format |mmmmm|\");\n\t\t\t\t\t\t\t/* falls through */\n\t\t\t\t\t\tcase \"m\": case \"mm\": case \"mmm\": case \"mmmm\":\n\t\t\t\t\t\t\tpayload += '= 3 ? \"true\" : \"false\") + '\"/>';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"d\": case \"dd\": payload += ''; break;\n\t\t\t\t\t\tcase \"ddd\": case \"dddd\": payload += ''; break;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\"':\n\t\t\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\t\t\tpayload += '' + escapexml(c.slice(1).replace(/\"\"/g, '\"')) + '';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\\\\': c = nf[++i];\n\t\t\t\t\tpayload += '' + escapexml(c) + ''; break;\n\t\t\t\tcase '/': case ':': payload += '' + escapexml(c) + ''; break;\n\t\t\t\tdefault: console.error(\"unrecognized character \" + c + \" in ODF format \" + nf);\n\t\t\t}\n\t\t\tif(!has_time) break j;\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\t\tif(nf.match(/^\\[?[hms]/)) {\n\t\t\tif(type == \"number\") type = \"time\";\n\t\t\tif(nf.match(/\\[/)) {\n\t\t\t\tnf = nf.replace(/[\\[\\]]/g, \"\");\n\t\t\t\tnopts['number:truncate-on-overflow'] = \"false\";\n\t\t\t}\n\t\t\tfor(; i < nf.length; ++i) switch((c = nf[i].toLowerCase())) {\n\t\t\t\tcase \"h\": case \"m\": case \"s\":\n\t\t\t\t\twhile((nf[++i]||\"\").toLowerCase() == c[0]) c += c[0]; --i;\n\t\t\t\t\tswitch(c) {\n\t\t\t\t\t\tcase \"h\": case \"hh\": payload += ''; break;\n\t\t\t\t\t\tcase \"m\": case \"mm\": payload += ''; break;\n\t\t\t\t\t\tcase \"s\": case \"ss\":\n\t\t\t\t\t\t\tif(nf[i+1] == \".\") do { c += nf[i+1]; ++i; } while(nf[i+1] == \"0\");\n\t\t\t\t\t\t\tpayload += ''; break;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase '\"':\n\t\t\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\t\t\tpayload += '' + escapexml(c.slice(1).replace(/\"\"/g, '\"')) + '';\n\t\t\t\t\tbreak;\n\t\t\t\tcase '/': case ':': payload += '' + escapexml(c) + ''; break;\n\t\t\t\tcase \"a\":\n\t\t\t\t\tif(nf.slice(i, i+3).toLowerCase() == \"a/p\") { payload += ''; i += 2; break; } // Note: ODF does not support A/P\n\t\t\t\t\tif(nf.slice(i, i+5).toLowerCase() == \"am/pm\") { payload += ''; i += 4; break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: console.error(\"unrecognized character \" + c + \" in ODF format \" + nf);\n\t\t\t}\n\t\t\tbreak j;\n\t\t}\n\n\t\t/* currency flag */\n\t\tif(nf.indexOf(/\\$/) > -1) { type = \"currency\"; }\n\n\t\t/* should be in a char loop */\n\t\tif(nf[0] == \"$\") { payload += '$'; nf = nf.slice(1); i = 0; }\n\t\ti = 0; if(nf[i] == '\"') {\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tif(nf[i+1] == \"*\") {\n\t\t\t\ti++;\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t} else {\n\t\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t\t}\n\t\t\tnf = nf.slice(i+1); i = 0;\n\t\t}\n\n\t\t/* number TODO: interstitial text e.g. 000)000-0000 */\n\t\tvar np = nf.match(/([#0][0#,]*)(\\.[0#]*|)(E[+]?0*|)/i);\n\t\tif(!np || !np[0]) console.error(\"Could not find numeric part of \" + nf);\n\t\telse {\n\t\t\tvar base = np[1].replace(/,/g, \"\");\n\t\t\tpayload += ' -1 ? ' number:grouping=\"true\"' : \"\") +\n\t\t\t\t(np[2] && ' number:decimal-places=\"' + (np[2].length - 1) + '\"' || ' number:decimal-places=\"0\"') +\n\t\t\t\t(np[3] && np[3].indexOf(\"+\") > -1 ? ' number:forced-exponent-sign=\"true\"' : \"\" ) +\n\t\t\t\t(np[3] ? ' number:min-exponent-digits=\"' + np[3].match(/0+/)[0].length + '\"' : \"\" ) +\n\t\t\t\t'>' +\n\t\t\t\t/* TODO: interstitial text placeholders */\n\t\t\t\t'';\n\t\t\ti = np.index + np[0].length;\n\t\t}\n\n\t\t/* residual text */\n\t\tif(nf[i] == '\"') {\n\t\t\tc = \"\";\n\t\t\twhile(nf[++i] != '\"' || nf[++i] == '\"') c += nf[i]; --i;\n\t\t\tpayload += '' + escapexml(c.replace(/\"\"/g, '\"')) + '';\n\t\t}\n\t}\n\n\tif(!payload) { console.error(\"Could not generate ODS number format for |\" + nf + \"|\"); return \"\"; }\n\treturn writextag(\"number:\" + type + \"-style\", payload, nopts);\n}\n\nfunction write_names_ods(Names, SheetNames, idx) {\n\t//var scoped = Names.filter(function(name) { return name.Sheet == (idx == -1 ? null : idx); });\n\tvar scoped = []; for(var namei = 0; namei < Names.length; ++namei) {\n\t\tvar name = Names[namei];\n\t\tif(!name) continue;\n\t\tif(name.Sheet == (idx == -1 ? null : idx)) scoped.push(name);\n\t}\n\tif(!scoped.length) return \"\";\n\treturn \" \\n\" + scoped.map(function(name) {\n\t\tvar odsref = (idx == -1 ? \"$\" : \"\") + csf_to_ods_3D(name.Ref);\n\t\treturn \" \" + writextag(\"table:named-range\", null, {\n\t\t\t\"table:name\": name.Name,\n\t\t\t\"table:cell-range-address\": odsref,\n\t\t\t\"table:base-cell-address\": odsref.replace(/[\\.][^\\.]*$/, \".$A$1\")\n\t\t});\n\t}).join(\"\\n\") + \"\\n \\n\";\n}\nvar write_content_ods/*:{(wb:any, opts:any):string}*/ = /* @__PURE__ */(function() {\n\t/* 6.1.2 White Space Characters */\n\tvar write_text_p = function(text/*:string*/, span)/*:string*/ {\n\t\treturn escapexml(text)\n\t\t\t.replace(/ +/g, function($$){return '';})\n\t\t\t.replace(/\\t/g, \"\")\n\t\t\t.replace(/\\n/g, span ? \"\": \"\")\n\t\t\t.replace(/^ /, \"\").replace(/ $/, \"\");\n\t};\n\n\tvar null_cell_xml = ' \\n';\n\tvar write_ws = function(ws, wb/*:Workbook*/, i/*:number*/, opts, nfs, date1904)/*:string*/ {\n\t\t/* Section 9 Tables */\n\t\tvar o/*:Array*/ = [];\n\t\to.push(' \\n');\n\t\tvar R=0,C=0, range = decode_range(ws['!ref']||\"A1\");\n\t\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\t\tvar dense = ws[\"!data\"] != null;\n\t\tif(ws[\"!cols\"]) {\n\t\t\tfor(C = 0; C <= range.e.c; ++C) o.push(' \\n');\n\t\t}\n\t\tvar H = \"\", ROWS = ws[\"!rows\"]||[];\n\t\tfor(R = 0; R < range.s.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t}\n\t\tfor(; R <= range.e.r; ++R) {\n\t\t\tH = ROWS[R] ? ' table:style-name=\"ro' + ROWS[R].ods + '\"' : \"\";\n\t\t\to.push(' \\n');\n\t\t\tfor(C=0; C < range.s.c; ++C) o.push(null_cell_xml);\n\t\t\tfor(; C <= range.e.c; ++C) {\n\t\t\t\tvar skip = false, ct = {}, textp = \"\";\n\t\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\t\tct['table:number-columns-spanned'] = (marr[mi].e.c - marr[mi].s.c + 1);\n\t\t\t\t\tct['table:number-rows-spanned'] = (marr[mi].e.r - marr[mi].s.r + 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(skip) { o.push(' \\n'); continue; }\n\t\t\t\tvar ref = encode_cell({r:R, c:C}), cell = dense ? (ws[\"!data\"][R]||[])[C]: ws[ref];\n\t\t\t\tif(cell && cell.f) {\n\t\t\t\t\tct['table:formula'] = escapexml(csf_to_ods_formula(cell.f));\n\t\t\t\t\tif(cell.F) {\n\t\t\t\t\t\tif(cell.F.slice(0, ref.length) == ref) {\n\t\t\t\t\t\t\tvar _Fref = decode_range(cell.F);\n\t\t\t\t\t\t\tct['table:number-matrix-columns-spanned'] = (_Fref.e.c - _Fref.s.c + 1);\n\t\t\t\t\t\t\tct['table:number-matrix-rows-spanned'] = (_Fref.e.r - _Fref.s.r + 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(!cell) { o.push(null_cell_xml); continue; }\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\ttextp = (cell.v ? 'TRUE' : 'FALSE');\n\t\t\t\t\t\tct['office:value-type'] = \"boolean\";\n\t\t\t\t\t\tct['office:boolean-value'] = (cell.v ? 'true' : 'false');\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\ttextp = (cell.w||String(cell.v||0));\n\t\t\t\t\t\tct['office:value-type'] = \"float\";\n\t\t\t\t\t\tct['office:value'] = (cell.v||0);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 's': case 'str':\n\t\t\t\t\t\ttextp = cell.v == null ? \"\" : cell.v;\n\t\t\t\t\t\tct['office:value-type'] = \"string\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\ttextp = (cell.w||(parseDate(cell.v, date1904).toISOString()));\n\t\t\t\t\t\tct['office:value-type'] = \"date\";\n\t\t\t\t\t\tct['office:date-value'] = (parseDate(cell.v, date1904).toISOString());\n\t\t\t\t\t\tct['table:style-name'] = \"ce1\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t//case 'e': // TODO: translate to ODS errors\n\t\t\t\t\tdefault: o.push(null_cell_xml); continue; // TODO: empty cell with comments\n\t\t\t\t}\n\t\t\t\tvar text_p = write_text_p(textp);\n\t\t\t\tif(cell.l && cell.l.Target) {\n\t\t\t\t\tvar _tgt = cell.l.Target;\n\t\t\t\t\t_tgt = _tgt.charAt(0) == \"#\" ? \"#\" + csf_to_ods_3D(_tgt.slice(1)) : _tgt;\n\t\t\t\t\t// TODO: choose correct parent path format based on link delimiters\n\t\t\t\t\tif(_tgt.charAt(0) != \"#\" && !_tgt.match(/^\\w+:/)) _tgt = '../' + _tgt;\n\t\t\t\t\ttext_p = writextag('text:a', text_p, {'xlink:href': _tgt.replace(/&/g, \"&\")});\n\t\t\t\t}\n\t\t\t\tif(nfs[cell.z]) ct[\"table:style-name\"] = \"ce\" + nfs[cell.z].slice(1);\n\t\t\t\tvar payload = writextag('text:p', text_p, {});\n\t\t\t\tif(cell.c) {\n\t\t\t\t\tvar acreator = \"\", apayload = \"\", aprops = {};\n\t\t\t\t\tfor(var ci = 0; ci < cell.c.length; ++ci) {\n\t\t\t\t\t\tif(!acreator && cell.c[ci].a) acreator = cell.c[ci].a;\n\t\t\t\t\t\tapayload += \"\" + write_text_p(cell.c[ci].t) + \"\";\n\t\t\t\t\t}\n\t\t\t\t\tif(!cell.c.hidden) aprops[\"office:display\"] = true;\n\t\t\t\t\tpayload = writextag('office:annotation', apayload, aprops) + payload;\n\t\t\t\t}\n\t\t\t\to.push(' ' + writextag('table:table-cell', payload, ct) + '\\n');\n\t\t\t}\n\t\t\to.push(' \\n');\n\t\t}\n\t\tif((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, i));\n\t\to.push(' \\n');\n\t\treturn o.join(\"\");\n\t};\n\n\tvar write_automatic_styles_ods = function(o/*:Array*/, wb) {\n\t\to.push(' \\n');\n\n\t\t/* column styles */\n\t\tvar cidx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!cols\"]) {\n\t\t\t\tfor(var C = 0; C < ws[\"!cols\"].length; ++C) if(ws[\"!cols\"][C]) {\n\t\t\t\t\tvar colobj = ws[\"!cols\"][C];\n\t\t\t\t\tif(colobj.width == null && colobj.wpx == null && colobj.wch == null) continue;\n\t\t\t\t\tprocess_col(colobj);\n\t\t\t\t\tcolobj.ods = cidx;\n\t\t\t\t\tvar w = ws[\"!cols\"][C].wpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++cidx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* row styles */\n\t\tvar ridx = 0;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tif(ws[\"!rows\"]) {\n\t\t\t\tfor(var R = 0; R < ws[\"!rows\"].length; ++R) if(ws[\"!rows\"][R]) {\n\t\t\t\t\tws[\"!rows\"][R].ods = ridx;\n\t\t\t\t\tvar h = ws[\"!rows\"][R].hpx + \"px\";\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\to.push(' \\n');\n\t\t\t\t\t++ridx;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t/* table */\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' /\\n');\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\n\t\t/* number formats, table cells, text */\n\t\tvar nfs = {};\n\t\tvar nfi = 69;\n\t\twb.SheetNames.map(function(n) { return wb.Sheets[n]; }).forEach(function(ws) {\n\t\t\tif(!ws) return;\n\t\t\tvar dense = (ws[\"!data\"] != null);\n\t\t\tif(!ws[\"!ref\"]) return;\n\t\t\tvar range = decode_range(ws[\"!ref\"]);\n\t\t\tfor(var R = 0; R <= range.e.r; ++R) for(var C = 0; C <= range.e.c; ++C) {\n\t\t\t\tvar c = dense ? (ws[\"!data\"][R]||[])[C] : ws[encode_cell({r:R,c:C})];\n\t\t\t\tif(!c || !c.z || c.z.toLowerCase() == \"general\") continue;\n\t\t\t\tif(!nfs[c.z]) {\n\t\t\t\t\tvar out = write_number_format_ods(c.z, \"N\" + nfi);\n\t\t\t\t\tif(out) { nfs[c.z] = \"N\" + nfi; ++nfi; o.push(out + \"\\n\"); }\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t\to.push(' \\n');\n\t\tkeys(nfs).forEach(function(nf) {\n\t\t\to.push('\\n');\n\t\t});\n\n\t\t/* page-layout */\n\n\t\to.push(' \\n');\n\t\treturn nfs;\n\t};\n\n\treturn function wcx(wb, opts) {\n\t\tvar o = [XML_HEADER];\n\t\t/* 3.1.3.2 */\n\t\tvar attr = wxt_helper({\n\t\t\t'xmlns:office': \"urn:oasis:names:tc:opendocument:xmlns:office:1.0\",\n\t\t\t'xmlns:table': \"urn:oasis:names:tc:opendocument:xmlns:table:1.0\",\n\t\t\t'xmlns:style': \"urn:oasis:names:tc:opendocument:xmlns:style:1.0\",\n\t\t\t'xmlns:text': \"urn:oasis:names:tc:opendocument:xmlns:text:1.0\",\n\t\t\t'xmlns:draw': \"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\",\n\t\t\t'xmlns:fo': \"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\",\n\t\t\t'xmlns:xlink': \"http://www.w3.org/1999/xlink\",\n\t\t\t'xmlns:dc': \"http://purl.org/dc/elements/1.1/\",\n\t\t\t'xmlns:meta': \"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\",\n\t\t\t'xmlns:number': \"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\",\n\t\t\t'xmlns:presentation': \"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0\",\n\t\t\t'xmlns:svg': \"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\",\n\t\t\t'xmlns:chart': \"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\",\n\t\t\t'xmlns:dr3d': \"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\",\n\t\t\t'xmlns:math': \"http://www.w3.org/1998/Math/MathML\",\n\t\t\t'xmlns:form': \"urn:oasis:names:tc:opendocument:xmlns:form:1.0\",\n\t\t\t'xmlns:script': \"urn:oasis:names:tc:opendocument:xmlns:script:1.0\",\n\t\t\t'xmlns:ooo': \"http://openoffice.org/2004/office\",\n\t\t\t'xmlns:ooow': \"http://openoffice.org/2004/writer\",\n\t\t\t'xmlns:oooc': \"http://openoffice.org/2004/calc\",\n\t\t\t'xmlns:dom': \"http://www.w3.org/2001/xml-events\",\n\t\t\t'xmlns:xforms': \"http://www.w3.org/2002/xforms\",\n\t\t\t'xmlns:xsd': \"http://www.w3.org/2001/XMLSchema\",\n\t\t\t'xmlns:xsi': \"http://www.w3.org/2001/XMLSchema-instance\",\n\t\t\t'xmlns:sheet': \"urn:oasis:names:tc:opendocument:sh33tjs:1.0\",\n\t\t\t'xmlns:rpt': \"http://openoffice.org/2005/report\",\n\t\t\t'xmlns:of': \"urn:oasis:names:tc:opendocument:xmlns:of:1.2\",\n\t\t\t'xmlns:xhtml': \"http://www.w3.org/1999/xhtml\",\n\t\t\t'xmlns:grddl': \"http://www.w3.org/2003/g/data-view#\",\n\t\t\t'xmlns:tableooo': \"http://openoffice.org/2009/table\",\n\t\t\t'xmlns:drawooo': \"http://openoffice.org/2010/draw\",\n\t\t\t'xmlns:calcext': \"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0\",\n\t\t\t'xmlns:loext': \"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0\",\n\t\t\t'xmlns:field': \"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0\",\n\t\t\t'xmlns:formx': \"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0\",\n\t\t\t'xmlns:css3t': \"http://www.w3.org/TR/css3-text/\",\n\t\t\t'office:version': \"1.2\"\n\t\t});\n\n\t\tvar fods = wxt_helper({\n\t\t\t'xmlns:config': \"urn:oasis:names:tc:opendocument:xmlns:config:1.0\",\n\t\t\t'office:mimetype': \"application/vnd.oasis.opendocument.spreadsheet\"\n\t\t});\n\n\t\tif(opts.bookType == \"fods\") {\n\t\t\to.push('\\n');\n\t\t\to.push(write_meta_ods().replace(/]*?>/, \"\").replace(/<\\/office:document-meta>/, \"\") + \"\\n\");\n\t\t\t// TODO: settings (equiv of settings.xml for ODS)\n\t\t} else o.push('\\n');\n\t\t// o.push(' \\n');\n\t\tvar nfs = write_automatic_styles_ods(o, wb);\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(((wb.Workbook||{}).WBProps||{}).date1904) o.push(' \\n \\n \\n');\n\t\tfor(var i = 0; i != wb.SheetNames.length; ++i) o.push(write_ws(wb.Sheets[wb.SheetNames[i]], wb, i, opts, nfs, ((wb.Workbook||{}).WBProps||{}).date1904));\n\t\tif((wb.Workbook||{}).Names) o.push(write_names_ods(wb.Workbook.Names, wb.SheetNames, -1));\n\t\to.push(' \\n');\n\t\to.push(' \\n');\n\t\tif(opts.bookType == \"fods\") o.push('');\n\t\telse o.push('');\n\t\treturn o.join(\"\");\n\t};\n})();\n\nfunction write_ods(wb/*:any*/, opts/*:any*/) {\n\tif(opts.bookType == \"fods\") return write_content_ods(wb, opts);\n\n\tvar zip = zip_new();\n\tvar f = \"\";\n\n\tvar manifest/*:Array >*/ = [];\n\tvar rdf/*:Array<[string, string]>*/ = [];\n\n\t/* Part 3 Section 3.3 MIME Media Type */\n\tf = \"mimetype\";\n\tzip_add_file(zip, f, \"application/vnd.oasis.opendocument.spreadsheet\");\n\n\t/* Part 1 Section 2.2 Documents */\n\tf = \"content.xml\";\n\tzip_add_file(zip, f, write_content_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"ContentFile\"]);\n\n\t/* TODO: these are hard-coded styles to satiate excel */\n\tf = \"styles.xml\";\n\tzip_add_file(zip, f, write_styles_ods(wb, opts));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"StylesFile\"]);\n\n\t/* TODO: this is hard-coded to satiate excel */\n\tf = \"meta.xml\";\n\tzip_add_file(zip, f, XML_HEADER + write_meta_ods(/*::wb, opts*/));\n\tmanifest.push([f, \"text/xml\"]);\n\trdf.push([f, \"MetadataFile\"]);\n\n\t/* Part 3 Section 6 Metadata Manifest File */\n\tf = \"manifest.rdf\";\n\tzip_add_file(zip, f, write_rdf(rdf/*, opts*/));\n\tmanifest.push([f, \"application/rdf+xml\"]);\n\n\t/* Part 3 Section 4 Manifest File */\n\tf = \"META-INF/manifest.xml\";\n\tzip_add_file(zip, f, write_manifest(manifest/*, opts*/));\n\n\treturn zip;\n}\n\n/*! sheetjs (C) 2013-present SheetJS -- http://sheetjs.com */\nvar subarray = function() {\n try {\n if (typeof Uint8Array == \"undefined\")\n return \"slice\";\n if (typeof Uint8Array.prototype.subarray == \"undefined\")\n return \"slice\";\n if (typeof Buffer !== \"undefined\") {\n if (typeof Buffer.prototype.subarray == \"undefined\")\n return \"slice\";\n if ((typeof Buffer.from == \"function\" ? Buffer.from([72, 62]) : new Buffer([72, 62])) instanceof Uint8Array)\n return \"subarray\";\n return \"slice\";\n }\n return \"subarray\";\n } catch (e) {\n return \"slice\";\n }\n}();\nfunction u8_to_dataview(array) {\n return new DataView(array.buffer, array.byteOffset, array.byteLength);\n}\nfunction u8str(u8) {\n return typeof TextDecoder != \"undefined\" ? new TextDecoder().decode(u8) : utf8read(a2s(u8));\n}\nfunction stru8(str) {\n return typeof TextEncoder != \"undefined\" ? new TextEncoder().encode(str) : s2a(utf8write(str));\n}\nfunction u8concat(u8a) {\n var len = 0;\n for (var i = 0; i < u8a.length; ++i)\n len += u8a[i].length;\n var out = new Uint8Array(len);\n var off = 0;\n for (i = 0; i < u8a.length; ++i) {\n var u8 = u8a[i], L = u8.length;\n if (L < 250) {\n for (var j = 0; j < L; ++j)\n out[off++] = u8[j];\n } else {\n out.set(u8, off);\n off += L;\n }\n }\n return out;\n}\nfunction popcnt(x) {\n x -= x >> 1 & 1431655765;\n x = (x & 858993459) + (x >> 2 & 858993459);\n return (x + (x >> 4) & 252645135) * 16843009 >>> 24;\n}\nfunction readDecimal128LE(buf, offset) {\n var exp = (buf[offset + 15] & 127) << 7 | buf[offset + 14] >> 1;\n var mantissa = buf[offset + 14] & 1;\n for (var j = offset + 13; j >= offset; --j)\n mantissa = mantissa * 256 + buf[j];\n return (buf[offset + 15] & 128 ? -mantissa : mantissa) * Math.pow(10, exp - 6176);\n}\nfunction writeDecimal128LE(buf, offset, value) {\n var exp = Math.floor(value == 0 ? 0 : Math.LOG10E * Math.log(Math.abs(value))) + 6176 - 16;\n var mantissa = value / Math.pow(10, exp - 6176);\n buf[offset + 15] |= exp >> 7;\n buf[offset + 14] |= (exp & 127) << 1;\n for (var i = 0; mantissa >= 1; ++i, mantissa /= 256)\n buf[offset + i] = mantissa & 255;\n buf[offset + 15] |= value >= 0 ? 0 : 128;\n}\nfunction parse_varint49(buf, ptr) {\n var l = ptr.l;\n var usz = buf[l] & 127;\n varint:\n if (buf[l++] >= 128) {\n usz |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n usz |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 28);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 35);\n ++l;\n if (buf[l++] < 128)\n break varint;\n usz += (buf[l] & 127) * Math.pow(2, 42);\n ++l;\n if (buf[l++] < 128)\n break varint;\n }\n ptr.l = l;\n return usz;\n}\nfunction write_varint49(v) {\n var usz = new Uint8Array(7);\n usz[0] = v & 127;\n var L = 1;\n sz:\n if (v > 127) {\n usz[L - 1] |= 128;\n usz[L] = v >> 7 & 127;\n ++L;\n if (v <= 16383)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 14 & 127;\n ++L;\n if (v <= 2097151)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v >> 21 & 127;\n ++L;\n if (v <= 268435455)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 256 >>> 21 & 127;\n ++L;\n if (v <= 34359738367)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 65536 >>> 21 & 127;\n ++L;\n if (v <= 4398046511103)\n break sz;\n usz[L - 1] |= 128;\n usz[L] = v / 16777216 >>> 21 & 127;\n ++L;\n }\n return usz[subarray](0, L);\n}\nfunction parse_packed_varints(buf) {\n var ptr = { l: 0 };\n var out = [];\n while (ptr.l < buf.length)\n out.push(parse_varint49(buf, ptr));\n return out;\n}\nfunction write_packed_varints(nums) {\n return u8concat(nums.map(function(x) {\n return write_varint49(x);\n }));\n}\nfunction varint_to_i32(buf) {\n var l = 0, i32 = buf[l] & 127;\n if (buf[l++] < 128)\n return i32;\n i32 |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n return i32;\n i32 |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n return i32;\n i32 |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n return i32;\n i32 |= (buf[l] & 15) << 28;\n return i32;\n}\nfunction varint_to_u64(buf) {\n var l = 0, lo = buf[l] & 127, hi = 0;\n varint:\n if (buf[l++] >= 128) {\n lo |= (buf[l] & 127) << 7;\n if (buf[l++] < 128)\n break varint;\n lo |= (buf[l] & 127) << 14;\n if (buf[l++] < 128)\n break varint;\n lo |= (buf[l] & 127) << 21;\n if (buf[l++] < 128)\n break varint;\n lo |= (buf[l] & 127) << 28;\n hi = buf[l] >> 4 & 7;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 3;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 10;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 17;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 24;\n if (buf[l++] < 128)\n break varint;\n hi |= (buf[l] & 127) << 31;\n }\n return [lo >>> 0, hi >>> 0];\n}\nfunction parse_shallow(buf) {\n var out = [], ptr = { l: 0 };\n while (ptr.l < buf.length) {\n var off = ptr.l;\n var num = parse_varint49(buf, ptr);\n var type = num & 7;\n num = num / 8 | 0;\n var data;\n var l = ptr.l;\n switch (type) {\n case 0:\n {\n while (buf[l++] >= 128)\n ;\n data = buf[subarray](ptr.l, l);\n ptr.l = l;\n }\n break;\n case 1:\n {\n data = buf[subarray](l, l + 8);\n ptr.l = l + 8;\n }\n break;\n case 2:\n {\n var len = parse_varint49(buf, ptr);\n data = buf[subarray](ptr.l, ptr.l + len);\n ptr.l += len;\n }\n break;\n case 5:\n {\n data = buf[subarray](l, l + 4);\n ptr.l = l + 4;\n }\n break;\n default:\n throw new Error(\"PB Type \".concat(type, \" for Field \").concat(num, \" at offset \").concat(off));\n }\n var v = { data: data, type: type };\n if (out[num] == null)\n out[num] = [];\n out[num].push(v);\n }\n return out;\n}\nfunction write_shallow(proto) {\n var out = [];\n proto.forEach(function(field, idx) {\n if (idx == 0)\n return;\n field.forEach(function(item) {\n if (!item.data)\n return;\n out.push(write_varint49(idx * 8 + item.type));\n if (item.type == 2)\n out.push(write_varint49(item.data.length));\n out.push(item.data);\n });\n });\n return u8concat(out);\n}\nfunction mappa(data, cb) {\n return (data == null ? void 0 : data.map(function(d) {\n return cb(d.data);\n })) || [];\n}\nfunction parse_iwa_file(buf) {\n var _a;\n var out = [], ptr = { l: 0 };\n while (ptr.l < buf.length) {\n var len = parse_varint49(buf, ptr);\n var ai = parse_shallow(buf[subarray](ptr.l, ptr.l + len));\n ptr.l += len;\n var res = {\n id: varint_to_i32(ai[1][0].data),\n messages: []\n };\n ai[2].forEach(function(b) {\n var mi = parse_shallow(b.data);\n var fl = varint_to_i32(mi[3][0].data);\n res.messages.push({\n meta: mi,\n data: buf[subarray](ptr.l, ptr.l + fl)\n });\n ptr.l += fl;\n });\n if ((_a = ai[3]) == null ? void 0 : _a[0])\n res.merge = varint_to_i32(ai[3][0].data) >>> 0 > 0;\n out.push(res);\n }\n return out;\n}\nfunction write_iwa_file(ias) {\n var bufs = [];\n ias.forEach(function(ia) {\n var ai = [\n [],\n [{ data: write_varint49(ia.id), type: 0 }],\n []\n ];\n if (ia.merge != null)\n ai[3] = [{ data: write_varint49(+!!ia.merge), type: 0 }];\n var midata = [];\n ia.messages.forEach(function(mi) {\n midata.push(mi.data);\n mi.meta[3] = [{ type: 0, data: write_varint49(mi.data.length) }];\n ai[2].push({ data: write_shallow(mi.meta), type: 2 });\n });\n var aipayload = write_shallow(ai);\n bufs.push(write_varint49(aipayload.length));\n bufs.push(aipayload);\n midata.forEach(function(mid) {\n return bufs.push(mid);\n });\n });\n return u8concat(bufs);\n}\nfunction parse_snappy_chunk(type, buf) {\n if (type != 0)\n throw new Error(\"Unexpected Snappy chunk type \".concat(type));\n var ptr = { l: 0 };\n var usz = parse_varint49(buf, ptr);\n var chunks = [];\n var l = ptr.l;\n while (l < buf.length) {\n var tag = buf[l] & 3;\n if (tag == 0) {\n var len = buf[l++] >> 2;\n if (len < 60)\n ++len;\n else {\n var c = len - 59;\n len = buf[l];\n if (c > 1)\n len |= buf[l + 1] << 8;\n if (c > 2)\n len |= buf[l + 2] << 16;\n if (c > 3)\n len |= buf[l + 3] << 24;\n len >>>= 0;\n len++;\n l += c;\n }\n chunks.push(buf[subarray](l, l + len));\n l += len;\n continue;\n } else {\n var offset = 0, length = 0;\n if (tag == 1) {\n length = (buf[l] >> 2 & 7) + 4;\n offset = (buf[l++] & 224) << 3;\n offset |= buf[l++];\n } else {\n length = (buf[l++] >> 2) + 1;\n if (tag == 2) {\n offset = buf[l] | buf[l + 1] << 8;\n l += 2;\n } else {\n offset = (buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16 | buf[l + 3] << 24) >>> 0;\n l += 4;\n }\n }\n if (offset == 0)\n throw new Error(\"Invalid offset 0\");\n var j = chunks.length - 1, off = offset;\n while (j >= 0 && off >= chunks[j].length) {\n off -= chunks[j].length;\n --j;\n }\n if (j < 0) {\n if (off == 0)\n off = chunks[j = 0].length;\n else\n throw new Error(\"Invalid offset beyond length\");\n }\n if (length < off)\n chunks.push(chunks[j][subarray](chunks[j].length - off, chunks[j].length - off + length));\n else {\n if (off > 0) {\n chunks.push(chunks[j][subarray](chunks[j].length - off));\n length -= off;\n }\n ++j;\n while (length >= chunks[j].length) {\n chunks.push(chunks[j]);\n length -= chunks[j].length;\n ++j;\n }\n if (length)\n chunks.push(chunks[j][subarray](0, length));\n }\n if (chunks.length > 25)\n chunks = [u8concat(chunks)];\n }\n }\n var clen = 0;\n for (var u8i = 0; u8i < chunks.length; ++u8i)\n clen += chunks[u8i].length;\n if (clen != usz)\n throw new Error(\"Unexpected length: \".concat(clen, \" != \").concat(usz));\n return chunks;\n}\nfunction decompress_iwa_file(buf) {\n if (Array.isArray(buf))\n buf = new Uint8Array(buf);\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var t = buf[l++];\n var len = buf[l] | buf[l + 1] << 8 | buf[l + 2] << 16;\n l += 3;\n out.push.apply(out, parse_snappy_chunk(t, buf[subarray](l, l + len)));\n l += len;\n }\n if (l !== buf.length)\n throw new Error(\"data is not a valid framed stream!\");\n return out.length == 1 ? out[0] : u8concat(out);\n}\nfunction compress_iwa_file(buf) {\n var out = [];\n var l = 0;\n while (l < buf.length) {\n var c = Math.min(buf.length - l, 268435455);\n var frame = new Uint8Array(4);\n out.push(frame);\n var usz = write_varint49(c);\n var L = usz.length;\n out.push(usz);\n if (c <= 60) {\n L++;\n out.push(new Uint8Array([c - 1 << 2]));\n } else if (c <= 256) {\n L += 2;\n out.push(new Uint8Array([240, c - 1 & 255]));\n } else if (c <= 65536) {\n L += 3;\n out.push(new Uint8Array([244, c - 1 & 255, c - 1 >> 8 & 255]));\n } else if (c <= 16777216) {\n L += 4;\n out.push(new Uint8Array([248, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255]));\n } else if (c <= 4294967296) {\n L += 5;\n out.push(new Uint8Array([252, c - 1 & 255, c - 1 >> 8 & 255, c - 1 >> 16 & 255, c - 1 >>> 24 & 255]));\n }\n out.push(buf[subarray](l, l + c));\n L += c;\n frame[0] = 0;\n frame[1] = L & 255;\n frame[2] = L >> 8 & 255;\n frame[3] = L >> 16 & 255;\n l += c;\n }\n return u8concat(out);\n}\nvar numbers_lut_new = function() {\n return { sst: [], rsst: [], ofmt: [], nfmt: [], fmla: [], ferr: [], cmnt: [] };\n};\nfunction numbers_format_cell(cell, t, flags, ofmt, nfmt) {\n var _a, _b, _c, _d;\n var ctype = t & 255, ver = t >> 8;\n var fmt = ver >= 5 ? nfmt : ofmt;\n dur:\n if (flags & (ver > 4 ? 8 : 4) && cell.t == \"n\" && ctype == 7) {\n var dstyle = ((_a = fmt[7]) == null ? void 0 : _a[0]) ? varint_to_i32(fmt[7][0].data) : -1;\n if (dstyle == -1)\n break dur;\n var dmin = ((_b = fmt[15]) == null ? void 0 : _b[0]) ? varint_to_i32(fmt[15][0].data) : -1;\n var dmax = ((_c = fmt[16]) == null ? void 0 : _c[0]) ? varint_to_i32(fmt[16][0].data) : -1;\n var auto = ((_d = fmt[40]) == null ? void 0 : _d[0]) ? varint_to_i32(fmt[40][0].data) : -1;\n var d = cell.v, dd = d;\n autodur:\n if (auto) {\n if (d == 0) {\n dmin = dmax = 2;\n break autodur;\n }\n if (d >= 604800)\n dmin = 1;\n else if (d >= 86400)\n dmin = 2;\n else if (d >= 3600)\n dmin = 4;\n else if (d >= 60)\n dmin = 8;\n else if (d >= 1)\n dmin = 16;\n else\n dmin = 32;\n if (Math.floor(d) != d)\n dmax = 32;\n else if (d % 60)\n dmax = 16;\n else if (d % 3600)\n dmax = 8;\n else if (d % 86400)\n dmax = 4;\n else if (d % 604800)\n dmax = 2;\n if (dmax < dmin)\n dmax = dmin;\n }\n if (dmin == -1 || dmax == -1)\n break dur;\n var dstr = [], zstr = [];\n if (dmin == 1) {\n dd = d / 604800;\n if (dmax == 1) {\n zstr.push('d\"d\"');\n } else {\n dd |= 0;\n d -= 604800 * dd;\n }\n dstr.push(dd + (dstyle == 2 ? \" week\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"w\" : \"\"));\n }\n if (dmin <= 2 && dmax >= 2) {\n dd = d / 86400;\n if (dmax > 2) {\n dd |= 0;\n d -= 86400 * dd;\n }\n zstr.push('d\"d\"');\n dstr.push(dd + (dstyle == 2 ? \" day\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"d\" : \"\"));\n }\n if (dmin <= 4 && dmax >= 4) {\n dd = d / 3600;\n if (dmax > 4) {\n dd |= 0;\n d -= 3600 * dd;\n }\n zstr.push((dmin >= 4 ? \"[h]\" : \"h\") + '\"h\"');\n dstr.push(dd + (dstyle == 2 ? \" hour\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"h\" : \"\"));\n }\n if (dmin <= 8 && dmax >= 8) {\n dd = d / 60;\n if (dmax > 8) {\n dd |= 0;\n d -= 60 * dd;\n }\n zstr.push((dmin >= 8 ? \"[m]\" : \"m\") + '\"m\"');\n if (dstyle == 0)\n dstr.push((dmin == 8 && dmax == 8 || dd >= 10 ? \"\" : \"0\") + dd);\n else\n dstr.push(dd + (dstyle == 2 ? \" minute\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"m\" : \"\"));\n }\n if (dmin <= 16 && dmax >= 16) {\n dd = d;\n if (dmax > 16) {\n dd |= 0;\n d -= dd;\n }\n zstr.push((dmin >= 16 ? \"[s]\" : \"s\") + '\"s\"');\n if (dstyle == 0)\n dstr.push((dmax == 16 && dmin == 16 || dd >= 10 ? \"\" : \"0\") + dd);\n else\n dstr.push(dd + (dstyle == 2 ? \" second\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"s\" : \"\"));\n }\n if (dmax >= 32) {\n dd = Math.round(1e3 * d);\n if (dmin < 32)\n zstr.push('.000\"ms\"');\n if (dstyle == 0)\n dstr.push((dd >= 100 ? \"\" : dd >= 10 ? \"0\" : \"00\") + dd);\n else\n dstr.push(dd + (dstyle == 2 ? \" millisecond\" + (dd == 1 ? \"\" : \"s\") : dstyle == 1 ? \"ms\" : \"\"));\n }\n cell.w = dstr.join(dstyle == 0 ? \":\" : \" \");\n cell.z = zstr.join(dstyle == 0 ? '\":\"' : \" \");\n if (dstyle == 0)\n cell.w = cell.w.replace(/:(\\d\\d\\d)$/, \".$1\");\n }\n}\nfunction parse_old_storage(buf, lut, v, opts) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(4, true);\n var ridx = -1, sidx = -1, zidx = -1, ieee = NaN, dc = 0, dt = new Date(Date.UTC(2001, 0, 1));\n var doff = v > 1 ? 12 : 8;\n if (flags & 2) {\n zidx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(flags & (v > 1 ? 3468 : 396)) * 4;\n if (flags & 512) {\n ridx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(flags & (v > 1 ? 12288 : 4096)) * 4;\n if (flags & 16) {\n sidx = dv.getUint32(doff, true);\n doff += 4;\n }\n if (flags & 32) {\n ieee = dv.getFloat64(doff, true);\n doff += 8;\n }\n if (flags & 64) {\n dt.setTime(dt.getTime() + (dc = dv.getFloat64(doff, true)) * 1e3);\n doff += 8;\n }\n if (v > 1) {\n flags = dv.getUint32(8, true) >>> 16;\n if (flags & 255) {\n if (zidx == -1)\n zidx = dv.getUint32(doff, true);\n doff += 4;\n }\n }\n var ret;\n var t = buf[v >= 4 ? 1 : 2];\n switch (t) {\n case 0:\n return void 0;\n case 2:\n ret = { t: \"n\", v: ieee };\n break;\n case 3:\n ret = { t: \"s\", v: lut.sst[sidx] };\n break;\n case 5:\n {\n if (opts == null ? void 0 : opts.cellDates)\n ret = { t: \"d\", v: dt };\n else\n ret = { t: \"n\", v: dc / 86400 + 35430, z: table_fmt[14] };\n }\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n {\n if (ridx > -1) {\n var rts = lut.rsst[ridx];\n ret = { t: \"s\", v: rts.v };\n if (rts.l)\n ret.l = { Target: rts.l };\n } else\n throw new Error(\"Unsupported cell type \".concat(buf[subarray](0, 4)));\n }\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf[subarray](0, 4)));\n }\n if (zidx > -1)\n numbers_format_cell(ret, t | v << 8, flags, lut.ofmt[zidx], lut.nfmt[zidx]);\n if (t == 7)\n ret.v /= 86400;\n return ret;\n}\nfunction parse_new_storage(buf, lut, opts) {\n var dv = u8_to_dataview(buf);\n var flags = dv.getUint32(4, true);\n var fields = dv.getUint32(8, true);\n var doff = 12;\n var ridx = -1, sidx = -1, zidx = -1, d128 = NaN, ieee = NaN, dc = 0, dt = new Date(Date.UTC(2001, 0, 1)), eidx = -1, fidx = -1;\n if (fields & 1) {\n d128 = readDecimal128LE(buf, doff);\n doff += 16;\n }\n if (fields & 2) {\n ieee = dv.getFloat64(doff, true);\n doff += 8;\n }\n if (fields & 4) {\n dt.setTime(dt.getTime() + (dc = dv.getFloat64(doff, true)) * 1e3);\n doff += 8;\n }\n if (fields & 8) {\n sidx = dv.getUint32(doff, true);\n doff += 4;\n }\n if (fields & 16) {\n ridx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(fields & 480) * 4;\n if (fields & 512) {\n fidx = dv.getUint32(doff, true);\n doff += 4;\n }\n doff += popcnt(fields & 1024) * 4;\n if (fields & 2048) {\n eidx = dv.getUint32(doff, true);\n doff += 4;\n }\n var ret;\n var t = buf[1];\n switch (t) {\n case 0:\n ret = { t: \"z\" };\n break;\n case 2:\n ret = { t: \"n\", v: d128 };\n break;\n case 3:\n ret = { t: \"s\", v: lut.sst[sidx] };\n break;\n case 5:\n {\n if (opts == null ? void 0 : opts.cellDates)\n ret = { t: \"d\", v: dt };\n else\n ret = { t: \"n\", v: dc / 86400 + 35430, z: table_fmt[14] };\n }\n break;\n case 6:\n ret = { t: \"b\", v: ieee > 0 };\n break;\n case 7:\n ret = { t: \"n\", v: ieee };\n break;\n case 8:\n ret = { t: \"e\", v: 0 };\n break;\n case 9:\n {\n if (ridx > -1) {\n var rts = lut.rsst[ridx];\n ret = { t: \"s\", v: rts.v };\n if (rts.l)\n ret.l = { Target: rts.l };\n } else\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(fields & 31, \" : \").concat(buf[subarray](0, 4)));\n }\n break;\n case 10:\n ret = { t: \"n\", v: d128 };\n break;\n default:\n throw new Error(\"Unsupported cell type \".concat(buf[1], \" : \").concat(fields & 31, \" : \").concat(buf[subarray](0, 4)));\n }\n doff += popcnt(fields & 4096) * 4;\n if (fields & 516096) {\n if (zidx == -1)\n zidx = dv.getUint32(doff, true);\n doff += 4;\n }\n if (fields & 524288) {\n var cmntidx = dv.getUint32(doff, true);\n doff += 4;\n if (lut.cmnt[cmntidx])\n ret.c = iwa_to_s5s_comment(lut.cmnt[cmntidx]);\n }\n if (zidx > -1)\n numbers_format_cell(ret, t | 5 << 8, fields >> 13, lut.ofmt[zidx], lut.nfmt[zidx]);\n if (t == 7)\n ret.v /= 86400;\n return ret;\n}\nfunction write_new_storage(cell, lut) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0;\n out[0] = 5;\n switch (cell.t) {\n case \"n\":\n if (cell.z && fmt_is_date(cell.z)) {\n out[1] = 5;\n dv.setFloat64(l, (numdate(cell.v + 1462).getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);\n fields |= 4;\n l += 8;\n break;\n } else {\n out[1] = 2;\n writeDecimal128LE(out, l, cell.v);\n fields |= 1;\n l += 16;\n }\n break;\n case \"b\":\n out[1] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n fields |= 2;\n l += 8;\n break;\n case \"s\":\n {\n var s = cell.v == null ? \"\" : String(cell.v);\n if (cell.l) {\n var irsst = lut.rsst.findIndex(function(v) {\n var _a;\n return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);\n });\n if (irsst == -1)\n lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };\n out[1] = 9;\n dv.setUint32(l, irsst, true);\n fields |= 16;\n l += 4;\n } else {\n var isst = lut.sst.indexOf(s);\n if (isst == -1)\n lut.sst[isst = lut.sst.length] = s;\n out[1] = 3;\n dv.setUint32(l, isst, true);\n fields |= 8;\n l += 4;\n }\n }\n break;\n case \"d\":\n out[1] = 5;\n dv.setFloat64(l, (cell.v.getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);\n fields |= 4;\n l += 8;\n break;\n case \"z\":\n out[1] = 0;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n if (cell.c) {\n lut.cmnt.push(s5s_to_iwa_comment(cell.c));\n dv.setUint32(l, lut.cmnt.length - 1, true);\n fields |= 524288;\n l += 4;\n }\n dv.setUint32(8, fields, true);\n return out[subarray](0, l);\n}\nfunction write_old_storage(cell, lut) {\n var out = new Uint8Array(32), dv = u8_to_dataview(out), l = 12, fields = 0, s = \"\";\n out[0] = 4;\n switch (cell.t) {\n case \"n\":\n break;\n case \"b\":\n break;\n case \"s\":\n {\n s = cell.v == null ? \"\" : String(cell.v);\n if (cell.l) {\n var irsst = lut.rsst.findIndex(function(v) {\n var _a;\n return v.v == s && v.l == ((_a = cell.l) == null ? void 0 : _a.Target);\n });\n if (irsst == -1)\n lut.rsst[irsst = lut.rsst.length] = { v: s, l: cell.l.Target };\n out[1] = 9;\n dv.setUint32(l, irsst, true);\n fields |= 512;\n l += 4;\n } else {\n }\n }\n break;\n case \"d\":\n break;\n case \"e\":\n break;\n case \"z\":\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n if (cell.c) {\n dv.setUint32(l, lut.cmnt.length - 1, true);\n fields |= 4096;\n l += 4;\n }\n switch (cell.t) {\n case \"n\":\n out[1] = 2;\n dv.setFloat64(l, cell.v, true);\n fields |= 32;\n l += 8;\n break;\n case \"b\":\n out[1] = 6;\n dv.setFloat64(l, cell.v ? 1 : 0, true);\n fields |= 32;\n l += 8;\n break;\n case \"s\":\n {\n s = cell.v == null ? \"\" : String(cell.v);\n if (cell.l) {\n } else {\n var isst = lut.sst.indexOf(s);\n if (isst == -1)\n lut.sst[isst = lut.sst.length] = s;\n out[1] = 3;\n dv.setUint32(l, isst, true);\n fields |= 16;\n l += 4;\n }\n }\n break;\n case \"d\":\n out[1] = 5;\n dv.setFloat64(l, (cell.v.getTime() - Date.UTC(2001, 0, 1)) / 1e3, true);\n fields |= 64;\n l += 8;\n break;\n case \"z\":\n out[1] = 0;\n break;\n default:\n throw \"unsupported cell type \" + cell.t;\n }\n dv.setUint32(8, fields, true);\n return out[subarray](0, l);\n}\nfunction parse_cell_storage(buf, lut, opts) {\n switch (buf[0]) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n return parse_old_storage(buf, lut, buf[0], opts);\n case 5:\n return parse_new_storage(buf, lut, opts);\n default:\n throw new Error(\"Unsupported payload version \".concat(buf[0]));\n }\n}\nfunction parse_TSP_Reference(buf) {\n var pb = parse_shallow(buf);\n return varint_to_i32(pb[1][0].data);\n}\nfunction write_TSP_Reference(idx) {\n return write_shallow([\n [],\n [{ type: 0, data: write_varint49(idx) }]\n ]);\n}\nfunction numbers_add_oref(iwa, ref) {\n var _a;\n var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];\n var orefidx = orefs.indexOf(ref);\n if (orefidx == -1) {\n orefs.push(ref);\n iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs) }];\n }\n}\nfunction numbers_del_oref(iwa, ref) {\n var _a;\n var orefs = ((_a = iwa.messages[0].meta[5]) == null ? void 0 : _a[0]) ? parse_packed_varints(iwa.messages[0].meta[5][0].data) : [];\n iwa.messages[0].meta[5] = [{ type: 2, data: write_packed_varints(orefs.filter(function(r) {\n return r != ref;\n })) }];\n}\nfunction parse_TST_TableDataList(M, root) {\n var pb = parse_shallow(root.data);\n var type = varint_to_i32(pb[1][0].data);\n var entries = pb[3];\n var data = [];\n (entries || []).forEach(function(entry) {\n var _a, _b;\n var le = parse_shallow(entry.data);\n if (!le[1])\n return;\n var key = varint_to_i32(le[1][0].data) >>> 0;\n switch (type) {\n case 1:\n data[key] = u8str(le[3][0].data);\n break;\n case 8:\n {\n var rt = M[parse_TSP_Reference(le[9][0].data)][0];\n var rtp = parse_shallow(rt.data);\n var rtpref = M[parse_TSP_Reference(rtp[1][0].data)][0];\n var mtype = varint_to_i32(rtpref.meta[1][0].data);\n if (mtype != 2001)\n throw new Error(\"2000 unexpected reference to \".concat(mtype));\n var tswpsa = parse_shallow(rtpref.data);\n var richtext = { v: tswpsa[3].map(function(x) {\n return u8str(x.data);\n }).join(\"\") };\n data[key] = richtext;\n sfields:\n if ((_a = tswpsa == null ? void 0 : tswpsa[11]) == null ? void 0 : _a[0]) {\n var smartfields = (_b = parse_shallow(tswpsa[11][0].data)) == null ? void 0 : _b[1];\n if (!smartfields)\n break sfields;\n smartfields.forEach(function(sf) {\n var _a2, _b2, _c;\n var attr = parse_shallow(sf.data);\n if ((_a2 = attr[2]) == null ? void 0 : _a2[0]) {\n var obj = M[parse_TSP_Reference((_b2 = attr[2]) == null ? void 0 : _b2[0].data)][0];\n var objtype = varint_to_i32(obj.meta[1][0].data);\n switch (objtype) {\n case 2032:\n var hlink = parse_shallow(obj.data);\n if (((_c = hlink == null ? void 0 : hlink[2]) == null ? void 0 : _c[0]) && !richtext.l)\n richtext.l = u8str(hlink[2][0].data);\n break;\n case 2039:\n break;\n default:\n console.log(\"unrecognized ObjectAttribute type \".concat(objtype));\n }\n }\n });\n }\n }\n break;\n case 2:\n data[key] = parse_shallow(le[6][0].data);\n break;\n case 3:\n data[key] = parse_shallow(le[5][0].data);\n break;\n case 10:\n {\n var cs = M[parse_TSP_Reference(le[10][0].data)][0];\n data[key] = parse_TSD_CommentStorageArchive(M, cs.data);\n }\n break;\n default:\n throw type;\n }\n });\n return data;\n}\nfunction parse_TST_TileRowInfo(u8, type) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;\n var pb = parse_shallow(u8);\n var R = varint_to_i32(pb[1][0].data) >>> 0;\n var cnt = varint_to_i32(pb[2][0].data) >>> 0;\n var wide_offsets = ((_b = (_a = pb[8]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data) && varint_to_i32(pb[8][0].data) > 0 || false;\n var used_storage_u8, used_storage;\n if (((_d = (_c = pb[7]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) && type != 0) {\n used_storage_u8 = (_f = (_e = pb[7]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data;\n used_storage = (_h = (_g = pb[6]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data;\n } else if (((_j = (_i = pb[4]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data) && type != 1) {\n used_storage_u8 = (_l = (_k = pb[4]) == null ? void 0 : _k[0]) == null ? void 0 : _l.data;\n used_storage = (_n = (_m = pb[3]) == null ? void 0 : _m[0]) == null ? void 0 : _n.data;\n } else\n throw \"NUMBERS Tile missing \".concat(type, \" cell storage\");\n var width = wide_offsets ? 4 : 1;\n var used_storage_offsets = u8_to_dataview(used_storage_u8);\n var offsets = [];\n for (var C = 0; C < used_storage_u8.length / 2; ++C) {\n var off = used_storage_offsets.getUint16(C * 2, true);\n if (off < 65535)\n offsets.push([C, off]);\n }\n if (offsets.length != cnt)\n throw \"Expected \".concat(cnt, \" cells, found \").concat(offsets.length);\n var cells = [];\n for (C = 0; C < offsets.length - 1; ++C)\n cells[offsets[C][0]] = used_storage[subarray](offsets[C][1] * width, offsets[C + 1][1] * width);\n if (offsets.length >= 1)\n cells[offsets[offsets.length - 1][0]] = used_storage[subarray](offsets[offsets.length - 1][1] * width);\n return { R: R, cells: cells };\n}\nfunction parse_TST_Tile(M, root) {\n var _a;\n var pb = parse_shallow(root.data);\n var storage = -1;\n if ((_a = pb == null ? void 0 : pb[7]) == null ? void 0 : _a[0]) {\n if (varint_to_i32(pb[7][0].data) >>> 0)\n storage = 1;\n else\n storage = 0;\n }\n var ri = mappa(pb[5], function(u8) {\n return parse_TST_TileRowInfo(u8, storage);\n });\n return {\n nrows: varint_to_i32(pb[4][0].data) >>> 0,\n data: ri.reduce(function(acc, x) {\n if (!acc[x.R])\n acc[x.R] = [];\n x.cells.forEach(function(cell, C) {\n if (acc[x.R][C])\n throw new Error(\"Duplicate cell r=\".concat(x.R, \" c=\").concat(C));\n acc[x.R][C] = cell;\n });\n return acc;\n }, [])\n };\n}\nfunction parse_TSD_CommentStorageArchive(M, data) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n var out = { t: \"\", a: \"\" };\n var csp = parse_shallow(data);\n if ((_b = (_a = csp == null ? void 0 : csp[1]) == null ? void 0 : _a[0]) == null ? void 0 : _b.data)\n out.t = u8str((_d = (_c = csp == null ? void 0 : csp[1]) == null ? void 0 : _c[0]) == null ? void 0 : _d.data) || \"\";\n if ((_f = (_e = csp == null ? void 0 : csp[3]) == null ? void 0 : _e[0]) == null ? void 0 : _f.data) {\n var as = M[parse_TSP_Reference((_h = (_g = csp == null ? void 0 : csp[3]) == null ? void 0 : _g[0]) == null ? void 0 : _h.data)][0];\n var asp = parse_shallow(as.data);\n if ((_j = (_i = asp[1]) == null ? void 0 : _i[0]) == null ? void 0 : _j.data)\n out.a = u8str(asp[1][0].data);\n }\n if (csp == null ? void 0 : csp[4]) {\n out.replies = [];\n csp[4].forEach(function(pi) {\n var cs = M[parse_TSP_Reference(pi.data)][0];\n out.replies.push(parse_TSD_CommentStorageArchive(M, cs.data));\n });\n }\n return out;\n}\nfunction iwa_to_s5s_comment(iwa) {\n var out = [];\n out.push({ t: iwa.t || \"\", a: iwa.a, T: iwa.replies && iwa.replies.length > 0 });\n if (iwa.replies)\n iwa.replies.forEach(function(reply) {\n out.push({ t: reply.t || \"\", a: reply.a, T: true });\n });\n return out;\n}\nfunction s5s_to_iwa_comment(s5s) {\n var out = { a: \"\", t: \"\", replies: [] };\n for (var i = 0; i < s5s.length; ++i) {\n if (i == 0) {\n out.a = s5s[i].a;\n out.t = s5s[i].t;\n } else {\n out.replies.push({ a: s5s[i].a, t: s5s[i].t });\n }\n }\n return out;\n}\nfunction parse_TST_TableModelArchive(M, root, ws, opts) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n var pb = parse_shallow(root.data);\n var range = { s: { r: 0, c: 0 }, e: { r: 0, c: 0 } };\n range.e.r = (varint_to_i32(pb[6][0].data) >>> 0) - 1;\n if (range.e.r < 0)\n throw new Error(\"Invalid row varint \".concat(pb[6][0].data));\n range.e.c = (varint_to_i32(pb[7][0].data) >>> 0) - 1;\n if (range.e.c < 0)\n throw new Error(\"Invalid col varint \".concat(pb[7][0].data));\n ws[\"!ref\"] = encode_range(range);\n var dense = ws[\"!data\"] != null, dws = ws;\n var store = parse_shallow(pb[4][0].data);\n var lut = numbers_lut_new();\n if ((_a = store[4]) == null ? void 0 : _a[0])\n lut.sst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[4][0].data)][0]);\n if ((_b = store[6]) == null ? void 0 : _b[0])\n lut.fmla = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[6][0].data)][0]);\n if ((_c = store[11]) == null ? void 0 : _c[0])\n lut.ofmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[11][0].data)][0]);\n if ((_d = store[12]) == null ? void 0 : _d[0])\n lut.ferr = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[12][0].data)][0]);\n if ((_e = store[17]) == null ? void 0 : _e[0])\n lut.rsst = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[17][0].data)][0]);\n if ((_f = store[19]) == null ? void 0 : _f[0])\n lut.cmnt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[19][0].data)][0]);\n if ((_g = store[22]) == null ? void 0 : _g[0])\n lut.nfmt = parse_TST_TableDataList(M, M[parse_TSP_Reference(store[22][0].data)][0]);\n var tile = parse_shallow(store[3][0].data);\n var _R = 0;\n if (!((_h = store[9]) == null ? void 0 : _h[0]))\n throw \"NUMBERS file missing row tree\";\n var rtt = parse_shallow(store[9][0].data)[1].map(function(p) {\n return parse_shallow(p.data);\n });\n rtt.forEach(function(kv) {\n _R = varint_to_i32(kv[1][0].data);\n var tidx = varint_to_i32(kv[2][0].data);\n var t = tile[1][tidx];\n if (!t)\n throw \"NUMBERS missing tile \" + tidx;\n var tl = parse_shallow(t.data);\n var ref2 = M[parse_TSP_Reference(tl[2][0].data)][0];\n var mtype2 = varint_to_i32(ref2.meta[1][0].data);\n if (mtype2 != 6002)\n throw new Error(\"6001 unexpected reference to \".concat(mtype2));\n var _tile = parse_TST_Tile(M, ref2);\n _tile.data.forEach(function(row, R) {\n row.forEach(function(buf, C) {\n var res = parse_cell_storage(buf, lut, opts);\n if (res) {\n if (dense) {\n if (!dws[\"!data\"][_R + R])\n dws[\"!data\"][_R + R] = [];\n dws[\"!data\"][_R + R][C] = res;\n } else {\n ws[encode_col(C) + encode_row(_R + R)] = res;\n }\n }\n });\n });\n _R += _tile.nrows;\n });\n if ((_i = store[13]) == null ? void 0 : _i[0]) {\n var ref = M[parse_TSP_Reference(store[13][0].data)][0];\n var mtype = varint_to_i32(ref.meta[1][0].data);\n if (mtype != 6144)\n throw new Error(\"Expected merge type 6144, found \".concat(mtype));\n ws[\"!merges\"] = (_j = parse_shallow(ref.data)) == null ? void 0 : _j[1].map(function(pi) {\n var merge = parse_shallow(pi.data);\n var origin = u8_to_dataview(parse_shallow(merge[1][0].data)[1][0].data), size = u8_to_dataview(parse_shallow(merge[2][0].data)[1][0].data);\n return {\n s: { r: origin.getUint16(0, true), c: origin.getUint16(2, true) },\n e: {\n r: origin.getUint16(0, true) + size.getUint16(0, true) - 1,\n c: origin.getUint16(2, true) + size.getUint16(2, true) - 1\n }\n };\n });\n }\n}\nfunction parse_TST_TableInfoArchive(M, root, opts) {\n var pb = parse_shallow(root.data);\n var out = { \"!ref\": \"A1\" };\n if (opts == null ? void 0 : opts.dense)\n out[\"!data\"] = [];\n var tableref = M[parse_TSP_Reference(pb[2][0].data)];\n var mtype = varint_to_i32(tableref[0].meta[1][0].data);\n if (mtype != 6001)\n throw new Error(\"6000 unexpected reference to \".concat(mtype));\n parse_TST_TableModelArchive(M, tableref[0], out, opts);\n return out;\n}\nfunction parse_TN_SheetArchive(M, root, opts) {\n var _a;\n var pb = parse_shallow(root.data);\n var out = {\n name: ((_a = pb[1]) == null ? void 0 : _a[0]) ? u8str(pb[1][0].data) : \"\",\n sheets: []\n };\n var shapeoffs = mappa(pb[2], parse_TSP_Reference);\n shapeoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 6e3)\n out.sheets.push(parse_TST_TableInfoArchive(M, m, opts));\n });\n });\n return out;\n}\nfunction parse_TN_DocumentArchive(M, root, opts) {\n var _a;\n var out = book_new();\n out.Workbook = { WBProps: { date1904: true } };\n var pb = parse_shallow(root.data);\n if ((_a = pb[2]) == null ? void 0 : _a[0])\n throw new Error(\"Keynote presentations are not supported\");\n var sheetoffs = mappa(pb[1], parse_TSP_Reference);\n sheetoffs.forEach(function(off) {\n M[off].forEach(function(m) {\n var mtype = varint_to_i32(m.meta[1][0].data);\n if (mtype == 2) {\n var root2 = parse_TN_SheetArchive(M, m, opts);\n root2.sheets.forEach(function(sheet, idx) {\n book_append_sheet(out, sheet, idx == 0 ? root2.name : root2.name + \"_\" + idx, true);\n });\n }\n });\n });\n if (out.SheetNames.length == 0)\n throw new Error(\"Empty NUMBERS file\");\n out.bookType = \"numbers\";\n return out;\n}\nfunction parse_numbers_iwa(cfb, opts) {\n var _a, _b, _c, _d, _e, _f, _g;\n var M = {}, indices = [];\n cfb.FullPaths.forEach(function(p) {\n if (p.match(/\\.iwpv2/))\n throw new Error(\"Unsupported password protection\");\n });\n cfb.FileIndex.forEach(function(s) {\n if (!s.name.match(/\\.iwa$/))\n return;\n if (s.content[0] != 0)\n return;\n var o;\n try {\n o = decompress_iwa_file(s.content);\n } catch (e) {\n return console.log(\"?? \" + s.content.length + \" \" + (e.message || e));\n }\n var packets;\n try {\n packets = parse_iwa_file(o);\n } catch (e) {\n return console.log(\"## \" + (e.message || e));\n }\n packets.forEach(function(packet) {\n M[packet.id] = packet.messages;\n indices.push(packet.id);\n });\n });\n if (!indices.length)\n throw new Error(\"File has no messages\");\n if (((_c = (_b = (_a = M == null ? void 0 : M[1]) == null ? void 0 : _a[0].meta) == null ? void 0 : _b[1]) == null ? void 0 : _c[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1e4)\n throw new Error(\"Pages documents are not supported\");\n var docroot = ((_g = (_f = (_e = (_d = M == null ? void 0 : M[1]) == null ? void 0 : _d[0]) == null ? void 0 : _e.meta) == null ? void 0 : _f[1]) == null ? void 0 : _g[0].data) && varint_to_i32(M[1][0].meta[1][0].data) == 1 && M[1][0];\n if (!docroot)\n indices.forEach(function(idx) {\n M[idx].forEach(function(iwam) {\n var mtype = varint_to_i32(iwam.meta[1][0].data) >>> 0;\n if (mtype == 1) {\n if (!docroot)\n docroot = iwam;\n else\n throw new Error(\"Document has multiple roots\");\n }\n });\n });\n if (!docroot)\n throw new Error(\"Cannot find Document root\");\n return parse_TN_DocumentArchive(M, docroot, opts);\n}\nfunction write_TST_TileRowInfo(data, lut, wide) {\n var _a, _b, _c;\n var tri = [\n [],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 2, data: new Uint8Array([]) }],\n [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {\n return 255;\n })) }],\n [{ type: 0, data: write_varint49(5) }],\n [{ type: 2, data: new Uint8Array([]) }],\n [{ type: 2, data: new Uint8Array(Array.from({ length: 510 }, function() {\n return 255;\n })) }],\n [{ type: 0, data: write_varint49(1) }]\n ];\n if (!((_a = tri[6]) == null ? void 0 : _a[0]) || !((_b = tri[7]) == null ? void 0 : _b[0]))\n throw \"Mutation only works on post-BNC storages!\";\n var cnt = 0;\n if (tri[7][0].data.length < 2 * data.length) {\n var new_7 = new Uint8Array(2 * data.length);\n new_7.set(tri[7][0].data);\n tri[7][0].data = new_7;\n }\n if (tri[4][0].data.length < 2 * data.length) {\n var new_4 = new Uint8Array(2 * data.length);\n new_4.set(tri[4][0].data);\n tri[4][0].data = new_4;\n }\n var dv = u8_to_dataview(tri[7][0].data), last_offset = 0, cell_storage = [];\n var _dv = u8_to_dataview(tri[4][0].data), _last_offset = 0, _cell_storage = [];\n var width = wide ? 4 : 1;\n for (var C = 0; C < data.length; ++C) {\n if (data[C] == null || data[C].t == \"z\" && !((_c = data[C].c) == null ? void 0 : _c.length) || data[C].t == \"e\") {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535);\n continue;\n }\n dv.setUint16(C * 2, last_offset / width, true);\n _dv.setUint16(C * 2, _last_offset / width, true);\n var celload, _celload;\n switch (data[C].t) {\n case \"d\":\n if (data[C].v instanceof Date) {\n celload = write_new_storage(data[C], lut);\n _celload = write_old_storage(data[C], lut);\n break;\n }\n celload = write_new_storage(data[C], lut);\n _celload = write_old_storage(data[C], lut);\n break;\n case \"s\":\n case \"n\":\n case \"b\":\n case \"z\":\n celload = write_new_storage(data[C], lut);\n _celload = write_old_storage(data[C], lut);\n break;\n default:\n throw new Error(\"Unsupported value \" + data[C]);\n }\n cell_storage.push(celload);\n last_offset += celload.length;\n {\n _cell_storage.push(_celload);\n _last_offset += _celload.length;\n }\n ++cnt;\n }\n tri[2][0].data = write_varint49(cnt);\n tri[5][0].data = write_varint49(5);\n for (; C < tri[7][0].data.length / 2; ++C) {\n dv.setUint16(C * 2, 65535, true);\n _dv.setUint16(C * 2, 65535, true);\n }\n tri[6][0].data = u8concat(cell_storage);\n tri[3][0].data = u8concat(_cell_storage);\n tri[8] = [{ type: 0, data: write_varint49(wide ? 1 : 0) }];\n return tri;\n}\nfunction write_iwam(type, payload) {\n return {\n meta: [\n [],\n [{ type: 0, data: write_varint49(type) }]\n ],\n data: payload\n };\n}\nfunction get_unique_msgid(dep, dependents) {\n if (!dependents.last)\n dependents.last = 927262;\n for (var i = dependents.last; i < 2e6; ++i)\n if (!dependents[i]) {\n dependents[dependents.last = i] = dep;\n return i;\n }\n throw new Error(\"Too many messages\");\n}\nfunction build_numbers_deps(cfb) {\n var dependents = {};\n var indices = [];\n cfb.FileIndex.map(function(fi, idx) {\n return [fi, cfb.FullPaths[idx]];\n }).forEach(function(row) {\n var fi = row[0], fp = row[1];\n if (fi.type != 2)\n return;\n if (!fi.name.match(/\\.iwa/))\n return;\n if (fi.content[0] != 0)\n return;\n parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(packet) {\n indices.push(packet.id);\n dependents[packet.id] = { deps: [], location: fp, type: varint_to_i32(packet.messages[0].meta[1][0].data) };\n });\n });\n cfb.FileIndex.forEach(function(fi) {\n if (!fi.name.match(/\\.iwa/))\n return;\n if (fi.content[0] != 0)\n return;\n parse_iwa_file(decompress_iwa_file(fi.content)).forEach(function(ia) {\n ia.messages.forEach(function(mess) {\n [5, 6].forEach(function(f) {\n if (!mess.meta[f])\n return;\n mess.meta[f].forEach(function(x) {\n dependents[ia.id].deps.push(varint_to_i32(x.data));\n });\n });\n });\n });\n });\n return dependents;\n}\nfunction write_TSP_Color_RGB(r, g, b) {\n return write_shallow([\n [],\n [{ type: 0, data: write_varint49(1) }],\n [],\n [{ type: 5, data: new Uint8Array(Float32Array.from([r / 255]).buffer) }],\n [{ type: 5, data: new Uint8Array(Float32Array.from([g / 255]).buffer) }],\n [{ type: 5, data: new Uint8Array(Float32Array.from([b / 255]).buffer) }],\n [{ type: 5, data: new Uint8Array(Float32Array.from([1]).buffer) }],\n [],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(1) }]\n ]);\n}\nfunction get_author_color(n) {\n switch (n) {\n case 0:\n return write_TSP_Color_RGB(99, 222, 171);\n case 1:\n return write_TSP_Color_RGB(162, 197, 240);\n case 2:\n return write_TSP_Color_RGB(255, 189, 189);\n }\n return write_TSP_Color_RGB(Math.random() * 255, Math.random() * 255, Math.random() * 255);\n}\nfunction write_numbers_iwa(wb, opts) {\n if (!opts || !opts.numbers)\n throw new Error(\"Must pass a `numbers` option -- check the README\");\n var cfb = CFB.read(opts.numbers, { type: \"base64\" });\n var deps = build_numbers_deps(cfb);\n var docroot = numbers_iwa_find(cfb, deps, 1);\n if (docroot == null)\n throw \"Could not find message \".concat(1, \" in Numbers template\");\n var sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);\n if (sheetrefs.length > 1)\n throw new Error(\"Template NUMBERS file must have exactly one sheet\");\n wb.SheetNames.forEach(function(name, idx) {\n if (idx >= 1) {\n numbers_add_ws(cfb, deps, idx + 1);\n docroot = numbers_iwa_find(cfb, deps, 1);\n sheetrefs = mappa(parse_shallow(docroot.messages[0].data)[1], parse_TSP_Reference);\n }\n write_numbers_ws(cfb, deps, wb.Sheets[name], name, idx, sheetrefs[idx]);\n });\n return cfb;\n}\nfunction numbers_iwa_doit(cfb, deps, id, cb) {\n var entry = CFB.find(cfb, deps[id].location);\n if (!entry)\n throw \"Could not find \".concat(deps[id].location, \" in Numbers template\");\n var x = parse_iwa_file(decompress_iwa_file(entry.content));\n var ainfo = x.find(function(packet) {\n return packet.id == id;\n });\n cb(ainfo, x);\n entry.content = compress_iwa_file(write_iwa_file(x));\n entry.size = entry.content.length;\n}\nfunction numbers_iwa_find(cfb, deps, id) {\n var entry = CFB.find(cfb, deps[id].location);\n if (!entry)\n throw \"Could not find \".concat(deps[id].location, \" in Numbers template\");\n var x = parse_iwa_file(decompress_iwa_file(entry.content));\n var ainfo = x.find(function(packet) {\n return packet.id == id;\n });\n return ainfo;\n}\nfunction numbers_add_meta(mlist, newid, newloc) {\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newid) }],\n [{ type: 2, data: stru8(newloc.replace(/-[\\s\\S]*$/, \"\")) }],\n [{ type: 2, data: stru8(newloc) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newid + 1, varint_to_i32(mlist[1][0].data))) }];\n}\nfunction numbers_add_msg(cfb, type, msg, path, deps, id) {\n if (!id)\n id = get_unique_msgid({ deps: [], location: \"\", type: type }, deps);\n var loc = \"\".concat(path, \"-\").concat(id, \".iwa\");\n deps[id].location = \"Root Entry\" + loc;\n CFB.utils.cfb_add(cfb, loc, compress_iwa_file(write_iwa_file([{\n id: id,\n messages: [write_iwam(type, write_shallow(msg))]\n }])));\n var newloc = loc.replace(/^[\\/]/, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_add_meta(mlist, id || 0, newloc);\n ai.messages[0].data = write_shallow(mlist);\n });\n return id;\n}\nfunction numbers_meta_add_dep(mlist, deps, id, dep) {\n var loc = deps[id].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n var parentidx = mlist[3].findIndex(function(m) {\n var _a, _b;\n var mm = parse_shallow(m.data);\n if ((_a = mm[3]) == null ? void 0 : _a[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n (Array.isArray(dep) ? dep : [dep]).forEach(function(dep2) {\n parent[6].push({\n type: 2,\n data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(dep2) }]\n ])\n });\n });\n mlist[3][parentidx].data = write_shallow(parent);\n}\nfunction numbers_meta_del_dep(mlist, deps, id, dep) {\n var loc = deps[id].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n var parentidx = mlist[3].findIndex(function(m) {\n var _a, _b;\n var mm = parse_shallow(m.data);\n if ((_a = mm[3]) == null ? void 0 : _a[0])\n return u8str(mm[3][0].data) == loc;\n if (((_b = mm[2]) == null ? void 0 : _b[0]) && u8str(mm[2][0].data) == loc)\n return true;\n return false;\n });\n var parent = parse_shallow(mlist[3][parentidx].data);\n if (!parent[6])\n parent[6] = [];\n parent[6] = parent[6].filter(function(m) {\n return varint_to_i32(parse_shallow(m.data)[1][0].data) != dep;\n });\n mlist[3][parentidx].data = write_shallow(parent);\n}\nfunction numbers_add_ws(cfb, deps, wsidx) {\n var sheetref = -1, newsheetref = -1;\n var remap = {};\n numbers_iwa_doit(cfb, deps, 1, function(docroot, arch) {\n var doc = parse_shallow(docroot.messages[0].data);\n sheetref = parse_TSP_Reference(parse_shallow(docroot.messages[0].data)[1][0].data);\n newsheetref = get_unique_msgid({ deps: [1], location: deps[sheetref].location, type: 2 }, deps);\n remap[sheetref] = newsheetref;\n numbers_add_oref(docroot, newsheetref);\n doc[1].push({ type: 2, data: write_TSP_Reference(newsheetref) });\n var sheet = numbers_iwa_find(cfb, deps, sheetref);\n sheet.id = newsheetref;\n if (deps[1].location == deps[newsheetref].location)\n arch.push(sheet);\n else\n numbers_iwa_doit(cfb, deps, newsheetref, function(_, x) {\n return x.push(sheet);\n });\n docroot.messages[0].data = write_shallow(doc);\n });\n var tiaref = -1;\n numbers_iwa_doit(cfb, deps, newsheetref, function(sheetroot, arch) {\n var sa = parse_shallow(sheetroot.messages[0].data);\n for (var i = 3; i <= 69; ++i)\n delete sa[i];\n var drawables = mappa(sa[2], parse_TSP_Reference);\n drawables.forEach(function(n) {\n return numbers_del_oref(sheetroot, n);\n });\n tiaref = get_unique_msgid({ deps: [newsheetref], location: deps[drawables[0]].location, type: deps[drawables[0]].type }, deps);\n numbers_add_oref(sheetroot, tiaref);\n remap[drawables[0]] = tiaref;\n sa[2] = [{ type: 2, data: write_TSP_Reference(tiaref) }];\n var tia = numbers_iwa_find(cfb, deps, drawables[0]);\n tia.id = tiaref;\n if (deps[drawables[0]].location == deps[newsheetref].location)\n arch.push(tia);\n else {\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, newsheetref, tiaref);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_iwa_doit(cfb, deps, tiaref, function(_, x) {\n return x.push(tia);\n });\n }\n sheetroot.messages[0].data = write_shallow(sa);\n });\n var tmaref = -1;\n numbers_iwa_doit(cfb, deps, tiaref, function(tiaroot, arch) {\n var tia = parse_shallow(tiaroot.messages[0].data);\n var da = parse_shallow(tia[1][0].data);\n for (var i = 3; i <= 69; ++i)\n delete da[i];\n var dap = parse_TSP_Reference(da[2][0].data);\n da[2][0].data = write_TSP_Reference(remap[dap]);\n tia[1][0].data = write_shallow(da);\n var oldtmaref = parse_TSP_Reference(tia[2][0].data);\n numbers_del_oref(tiaroot, oldtmaref);\n tmaref = get_unique_msgid({ deps: [tiaref], location: deps[oldtmaref].location, type: deps[oldtmaref].type }, deps);\n numbers_add_oref(tiaroot, tmaref);\n remap[oldtmaref] = tmaref;\n tia[2][0].data = write_TSP_Reference(tmaref);\n var tma = numbers_iwa_find(cfb, deps, oldtmaref);\n tma.id = tmaref;\n if (deps[tiaref].location == deps[tmaref].location)\n arch.push(tma);\n else\n numbers_iwa_doit(cfb, deps, tmaref, function(_, x) {\n return x.push(tma);\n });\n tiaroot.messages[0].data = write_shallow(tia);\n });\n numbers_iwa_doit(cfb, deps, tmaref, function(tmaroot, arch) {\n var _a, _b;\n var tma = parse_shallow(tmaroot.messages[0].data);\n var uuid = u8str(tma[1][0].data), new_uuid = uuid.replace(/-[A-Z0-9]*/, \"-\".concat((\"0000\" + wsidx.toString(16)).slice(-4)));\n tma[1][0].data = stru8(new_uuid);\n [12, 13, 29, 31, 32, 33, 39, 44, 47, 81, 82, 84].forEach(function(n) {\n return delete tma[n];\n });\n if (tma[45]) {\n var srrta = parse_shallow(tma[45][0].data);\n var ref = parse_TSP_Reference(srrta[1][0].data);\n numbers_del_oref(tmaroot, ref);\n delete tma[45];\n }\n if (tma[70]) {\n var hsoa = parse_shallow(tma[70][0].data);\n (_a = hsoa[2]) == null ? void 0 : _a.forEach(function(item) {\n var hsa = parse_shallow(item.data);\n [2, 3].map(function(n) {\n return hsa[n][0];\n }).forEach(function(hseadata) {\n var hsea = parse_shallow(hseadata.data);\n if (!hsea[8])\n return;\n var ref2 = parse_TSP_Reference(hsea[8][0].data);\n numbers_del_oref(tmaroot, ref2);\n });\n });\n delete tma[70];\n }\n [\n 46,\n 30,\n 34,\n 35,\n 36,\n 38,\n 48,\n 49,\n 60,\n 61,\n 62,\n 63,\n 64,\n 71,\n 72,\n 73,\n 74,\n 75,\n 85,\n 86,\n 87,\n 88,\n 89\n ].forEach(function(n) {\n if (!tma[n])\n return;\n var ref2 = parse_TSP_Reference(tma[n][0].data);\n delete tma[n];\n numbers_del_oref(tmaroot, ref2);\n });\n var store = parse_shallow(tma[4][0].data);\n {\n [2, 4, 5, 6, 11, 12, 13, 15, 16, 17, 18, 19, 20, 21, 22].forEach(function(n) {\n var _a2;\n if (!((_a2 = store[n]) == null ? void 0 : _a2[0]))\n return;\n var oldref = parse_TSP_Reference(store[n][0].data);\n var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);\n numbers_del_oref(tmaroot, oldref);\n numbers_add_oref(tmaroot, newref);\n remap[oldref] = newref;\n var msg = numbers_iwa_find(cfb, deps, oldref);\n msg.id = newref;\n if (deps[oldref].location == deps[tmaref].location)\n arch.push(msg);\n else {\n deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());\n if (deps[newref].location == deps[oldref].location)\n deps[newref].location = deps[newref].location.replace(/\\.iwa/, \"-\".concat(newref, \".iwa\"));\n CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));\n var newloc = deps[newref].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_add_meta(mlist, newref, newloc);\n numbers_meta_add_dep(mlist, deps, tmaref, newref);\n ai.messages[0].data = write_shallow(mlist);\n });\n }\n store[n][0].data = write_TSP_Reference(newref);\n });\n var row_headers = parse_shallow(store[1][0].data);\n {\n (_b = row_headers[2]) == null ? void 0 : _b.forEach(function(tspref) {\n var oldref = parse_TSP_Reference(tspref.data);\n var newref = get_unique_msgid({ deps: [tmaref], location: deps[oldref].location, type: deps[oldref].type }, deps);\n numbers_del_oref(tmaroot, oldref);\n numbers_add_oref(tmaroot, newref);\n remap[oldref] = newref;\n var msg = numbers_iwa_find(cfb, deps, oldref);\n msg.id = newref;\n if (deps[oldref].location == deps[tmaref].location) {\n arch.push(msg);\n } else {\n deps[newref].location = deps[oldref].location.replace(oldref.toString(), newref.toString());\n if (deps[newref].location == deps[oldref].location)\n deps[newref].location = deps[newref].location.replace(/\\.iwa/, \"-\".concat(newref, \".iwa\"));\n CFB.utils.cfb_add(cfb, deps[newref].location, compress_iwa_file(write_iwa_file([msg])));\n var newloc = deps[newref].location.replace(/^Root Entry\\//, \"\").replace(/^Index\\//, \"\").replace(/\\.iwa$/, \"\");\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_add_meta(mlist, newref, newloc);\n numbers_meta_add_dep(mlist, deps, tmaref, newref);\n ai.messages[0].data = write_shallow(mlist);\n });\n }\n tspref.data = write_TSP_Reference(newref);\n });\n }\n store[1][0].data = write_shallow(row_headers);\n var tiles = parse_shallow(store[3][0].data);\n {\n tiles[1].forEach(function(t) {\n var tst = parse_shallow(t.data);\n var oldtileref = parse_TSP_Reference(tst[2][0].data);\n var newtileref = remap[oldtileref];\n if (!remap[oldtileref]) {\n newtileref = get_unique_msgid({ deps: [tmaref], location: \"\", type: deps[oldtileref].type }, deps);\n deps[newtileref].location = \"Root Entry/Index/Tables/Tile-\".concat(newtileref, \".iwa\");\n remap[oldtileref] = newtileref;\n var oldtile = numbers_iwa_find(cfb, deps, oldtileref);\n oldtile.id = newtileref;\n numbers_del_oref(tmaroot, oldtileref);\n numbers_add_oref(tmaroot, newtileref);\n CFB.utils.cfb_add(cfb, \"/Index/Tables/Tile-\".concat(newtileref, \".iwa\"), compress_iwa_file(write_iwa_file([oldtile])));\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newtileref) }],\n [{ type: 2, data: stru8(\"Tables/Tile\") }],\n [{ type: 2, data: stru8(\"Tables/Tile-\".concat(newtileref)) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileref + 1, varint_to_i32(mlist[1][0].data))) }];\n numbers_meta_add_dep(mlist, deps, tmaref, newtileref);\n ai.messages[0].data = write_shallow(mlist);\n });\n }\n tst[2][0].data = write_TSP_Reference(newtileref);\n t.data = write_shallow(tst);\n });\n }\n store[3][0].data = write_shallow(tiles);\n }\n tma[4][0].data = write_shallow(store);\n tmaroot.messages[0].data = write_shallow(tma);\n });\n}\nfunction write_numbers_ws(cfb, deps, ws, wsname, sheetidx, rootref) {\n var drawables = [];\n numbers_iwa_doit(cfb, deps, rootref, function(docroot) {\n var sheetref = parse_shallow(docroot.messages[0].data);\n {\n sheetref[1] = [{ type: 2, data: stru8(wsname) }];\n drawables = mappa(sheetref[2], parse_TSP_Reference);\n }\n docroot.messages[0].data = write_shallow(sheetref);\n });\n var tia = numbers_iwa_find(cfb, deps, drawables[0]);\n var tmaref = parse_TSP_Reference(parse_shallow(tia.messages[0].data)[2][0].data);\n numbers_iwa_doit(cfb, deps, tmaref, function(docroot, x) {\n return write_numbers_tma(cfb, deps, ws, docroot, x, tmaref);\n });\n}\nvar USE_WIDE_ROWS = true;\nfunction write_numbers_tma(cfb, deps, ws, tmaroot, tmafile, tmaref) {\n if (!ws[\"!ref\"])\n throw new Error(\"Cannot export empty sheet to NUMBERS\");\n var range = decode_range(ws[\"!ref\"]);\n range.s.r = range.s.c = 0;\n var trunc = false;\n if (range.e.c > 999) {\n trunc = true;\n range.e.c = 999;\n }\n if (range.e.r > 999999) {\n trunc = true;\n range.e.r = 999999;\n }\n if (trunc)\n console.error(\"Truncating to \".concat(encode_range(range)));\n var data = [];\n if (ws[\"!data\"])\n data = ws[\"!data\"];\n else {\n var colstr = [];\n for (var _C = 0; _C <= range.e.c; ++_C)\n colstr[_C] = encode_col(_C);\n for (var R_ = 0; R_ <= range.e.r; ++R_) {\n data[R_] = [];\n var _R = \"\" + (R_ + 1);\n for (_C = 0; _C <= range.e.c; ++_C) {\n var _cell = ws[colstr[_C] + _R];\n if (!_cell)\n continue;\n data[R_][_C] = _cell;\n }\n }\n }\n var LUT = {\n cmnt: [{ a: \"~54ee77S~\", t: \"... the people who are crazy enough to think they can change the world, are the ones who do.\" }],\n ferr: [],\n fmla: [],\n nfmt: [],\n ofmt: [],\n rsst: [{ v: \"~54ee77S~\", l: \"https://sheetjs.com/\" }],\n sst: [\"~Sh33tJ5~\"]\n };\n var pb = parse_shallow(tmaroot.messages[0].data);\n {\n pb[6][0].data = write_varint49(range.e.r + 1);\n pb[7][0].data = write_varint49(range.e.c + 1);\n delete pb[46];\n var store = parse_shallow(pb[4][0].data);\n {\n var row_header_ref = parse_TSP_Reference(parse_shallow(store[1][0].data)[2][0].data);\n numbers_iwa_doit(cfb, deps, row_header_ref, function(rowhead, _x) {\n var _a;\n var base_bucket = parse_shallow(rowhead.messages[0].data);\n if ((_a = base_bucket == null ? void 0 : base_bucket[2]) == null ? void 0 : _a[0])\n for (var R2 = 0; R2 < data.length; ++R2) {\n var _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(R2);\n _bucket[4][0].data = write_varint49(data[R2].length);\n base_bucket[2][R2] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n rowhead.messages[0].data = write_shallow(base_bucket);\n });\n var col_header_ref = parse_TSP_Reference(store[2][0].data);\n numbers_iwa_doit(cfb, deps, col_header_ref, function(colhead, _x) {\n var base_bucket = parse_shallow(colhead.messages[0].data);\n for (var C = 0; C <= range.e.c; ++C) {\n var _bucket = parse_shallow(base_bucket[2][0].data);\n _bucket[1][0].data = write_varint49(C);\n _bucket[4][0].data = write_varint49(range.e.r + 1);\n base_bucket[2][C] = { type: base_bucket[2][0].type, data: write_shallow(_bucket) };\n }\n colhead.messages[0].data = write_shallow(base_bucket);\n });\n var rbtree = parse_shallow(store[9][0].data);\n rbtree[1] = [];\n var tilestore = parse_shallow(store[3][0].data);\n {\n var tstride = 256;\n tilestore[2] = [{ type: 0, data: write_varint49(tstride) }];\n var tileref = parse_TSP_Reference(parse_shallow(tilestore[1][0].data)[2][0].data);\n var save_token = function() {\n var metadata = numbers_iwa_find(cfb, deps, 2);\n var mlist = parse_shallow(metadata.messages[0].data);\n var mlst = mlist[3].filter(function(m) {\n return varint_to_i32(parse_shallow(m.data)[1][0].data) == tileref;\n });\n return (mlst == null ? void 0 : mlst.length) ? varint_to_i32(parse_shallow(mlst[0].data)[12][0].data) : 0;\n }();\n {\n CFB.utils.cfb_del(cfb, deps[tileref].location);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3] = mlist[3].filter(function(m) {\n return varint_to_i32(parse_shallow(m.data)[1][0].data) != tileref;\n });\n numbers_meta_del_dep(mlist, deps, tmaref, tileref);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_del_oref(tmaroot, tileref);\n }\n tilestore[1] = [];\n var ntiles = Math.ceil((range.e.r + 1) / tstride);\n for (var tidx = 0; tidx < ntiles; ++tidx) {\n var newtileid = get_unique_msgid({\n deps: [],\n location: \"\",\n type: 6002\n }, deps);\n deps[newtileid].location = \"Root Entry/Index/Tables/Tile-\".concat(newtileid, \".iwa\");\n var tiledata = [\n [],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 0, data: write_varint49(Math.min(range.e.r + 1, (tidx + 1) * tstride)) }],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 0, data: write_varint49(Math.min((tidx + 1) * tstride, range.e.r + 1) - tidx * tstride) }],\n [],\n [{ type: 0, data: write_varint49(5) }],\n [{ type: 0, data: write_varint49(1) }],\n [{ type: 0, data: write_varint49(USE_WIDE_ROWS ? 1 : 0) }]\n ];\n for (var R = tidx * tstride; R <= Math.min(range.e.r, (tidx + 1) * tstride - 1); ++R) {\n var tilerow = write_TST_TileRowInfo(data[R], LUT, USE_WIDE_ROWS);\n tilerow[1][0].data = write_varint49(R - tidx * tstride);\n tiledata[5].push({ data: write_shallow(tilerow), type: 2 });\n }\n tilestore[1].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(tidx) }],\n [{ type: 2, data: write_TSP_Reference(newtileid) }]\n ]) });\n var newtile = {\n id: newtileid,\n messages: [write_iwam(6002, write_shallow(tiledata))]\n };\n var tilecontent = compress_iwa_file(write_iwa_file([newtile]));\n CFB.utils.cfb_add(cfb, \"/Index/Tables/Tile-\".concat(newtileid, \".iwa\"), tilecontent);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n mlist[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(newtileid) }],\n [{ type: 2, data: stru8(\"Tables/Tile\") }],\n [{ type: 2, data: stru8(\"Tables/Tile-\".concat(newtileid)) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [{ type: 2, data: new Uint8Array([2, 0, 0]) }],\n [],\n [],\n [],\n [],\n [{ type: 0, data: write_varint49(0) }],\n [],\n [{ type: 0, data: write_varint49(save_token) }]\n ]) });\n mlist[1] = [{ type: 0, data: write_varint49(Math.max(newtileid + 1, varint_to_i32(mlist[1][0].data))) }];\n numbers_meta_add_dep(mlist, deps, tmaref, newtileid);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_add_oref(tmaroot, newtileid);\n rbtree[1].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(tidx * tstride) }],\n [{ type: 0, data: write_varint49(tidx) }]\n ]) });\n }\n }\n store[3][0].data = write_shallow(tilestore);\n store[9][0].data = write_shallow(rbtree);\n store[10] = [{ type: 2, data: new Uint8Array([]) }];\n if (ws[\"!merges\"]) {\n var mergeid = get_unique_msgid({\n type: 6144,\n deps: [tmaref],\n location: deps[tmaref].location\n }, deps);\n tmafile.push({\n id: mergeid,\n messages: [write_iwam(6144, write_shallow([\n [],\n ws[\"!merges\"].map(function(m) {\n return { type: 2, data: write_shallow([\n [],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 5, data: new Uint8Array(new Uint16Array([m.s.r, m.s.c]).buffer) }]\n ]) }],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 5, data: new Uint8Array(new Uint16Array([m.e.r - m.s.r + 1, m.e.c - m.s.c + 1]).buffer) }]\n ]) }]\n ]) };\n })\n ]))]\n });\n store[13] = [{ type: 2, data: write_TSP_Reference(mergeid) }];\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, tmaref, mergeid);\n ai.messages[0].data = write_shallow(mlist);\n });\n numbers_add_oref(tmaroot, mergeid);\n } else\n delete store[13];\n var sstref = parse_TSP_Reference(store[4][0].data);\n numbers_iwa_doit(cfb, deps, sstref, function(sstroot) {\n var sstdata = parse_shallow(sstroot.messages[0].data);\n {\n sstdata[3] = [];\n LUT.sst.forEach(function(str, i) {\n if (i == 0)\n return;\n sstdata[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(i) }],\n [{ type: 0, data: write_varint49(1) }],\n [{ type: 2, data: stru8(str) }]\n ]) });\n });\n }\n sstroot.messages[0].data = write_shallow(sstdata);\n });\n var rsstref = parse_TSP_Reference(store[17][0].data);\n numbers_iwa_doit(cfb, deps, rsstref, function(rsstroot) {\n var rsstdata = parse_shallow(rsstroot.messages[0].data);\n rsstdata[3] = [];\n var style_indices = [\n 904980,\n 903835,\n 903815,\n 903845\n ];\n LUT.rsst.forEach(function(rsst, i) {\n if (i == 0)\n return;\n var tswpsa = [\n [],\n [{ type: 0, data: new Uint8Array([5]) }],\n [],\n [{ type: 2, data: stru8(rsst.v) }]\n ];\n tswpsa[10] = [{ type: 0, data: new Uint8Array([1]) }];\n tswpsa[19] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 18, 2, 101, 110]) }];\n tswpsa[5] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 155, 149, 55]) }];\n tswpsa[2] = [{ type: 2, data: new Uint8Array([8, 148, 158, 55]) }];\n tswpsa[6] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];\n tswpsa[7] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 135, 149, 55]) }];\n tswpsa[8] = [{ type: 2, data: new Uint8Array([10, 8, 8, 0, 18, 4, 8, 165, 149, 55]) }];\n tswpsa[14] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];\n tswpsa[24] = [{ type: 2, data: new Uint8Array([10, 6, 8, 0, 16, 0, 24, 0]) }];\n var tswpsaid = get_unique_msgid({ deps: [], location: \"\", type: 2001 }, deps);\n var tswpsarefs = [];\n if (rsst.l) {\n var newhlinkid = numbers_add_msg(cfb, 2032, [\n [],\n [],\n [{ type: 2, data: stru8(rsst.l) }]\n ], \"/Index/Tables/DataList\", deps);\n tswpsa[11] = [];\n var smartfield = [[], []];\n if (!smartfield[1])\n smartfield[1] = [];\n smartfield[1].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(0) }],\n [{ type: 2, data: write_TSP_Reference(newhlinkid) }]\n ]) });\n tswpsa[11][0] = { type: 2, data: write_shallow(smartfield) };\n tswpsarefs.push(newhlinkid);\n }\n numbers_add_msg(cfb, 2001, tswpsa, \"/Index/Tables/DataList\", deps, tswpsaid);\n numbers_iwa_doit(cfb, deps, tswpsaid, function(iwa) {\n style_indices.forEach(function(ref) {\n return numbers_add_oref(iwa, ref);\n });\n tswpsarefs.forEach(function(ref) {\n return numbers_add_oref(iwa, ref);\n });\n });\n var rtpaid = numbers_add_msg(cfb, 6218, [\n [],\n [{ type: 2, data: write_TSP_Reference(tswpsaid) }],\n [],\n [{ type: 2, data: new Uint8Array([13, 255, 255, 255, 0, 18, 10, 16, 255, 255, 1, 24, 255, 255, 255, 255, 7]) }]\n ], \"/Index/Tables/DataList\", deps);\n numbers_iwa_doit(cfb, deps, rtpaid, function(iwa) {\n return numbers_add_oref(iwa, tswpsaid);\n });\n rsstdata[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(i) }],\n [{ type: 0, data: write_varint49(1) }],\n [],\n [],\n [],\n [],\n [],\n [],\n [{ type: 2, data: write_TSP_Reference(rtpaid) }]\n ]) });\n numbers_add_oref(rsstroot, rtpaid);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, rsstref, rtpaid);\n numbers_meta_add_dep(mlist, deps, rtpaid, tswpsaid);\n numbers_meta_add_dep(mlist, deps, tswpsaid, tswpsarefs);\n numbers_meta_add_dep(mlist, deps, tswpsaid, style_indices);\n ai.messages[0].data = write_shallow(mlist);\n });\n });\n rsstroot.messages[0].data = write_shallow(rsstdata);\n });\n if (LUT.cmnt.length > 1) {\n var cmntref = parse_TSP_Reference(store[19][0].data);\n var authors = {}, iauthor = 0;\n numbers_iwa_doit(cfb, deps, cmntref, function(cmntroot) {\n var cmntdata = parse_shallow(cmntroot.messages[0].data);\n {\n cmntdata[3] = [];\n LUT.cmnt.forEach(function(cc, i) {\n if (i == 0)\n return;\n var replies = [];\n if (cc.replies)\n cc.replies.forEach(function(c) {\n if (!authors[c.a || \"\"])\n authors[c.a || \"\"] = numbers_add_msg(cfb, 212, [\n [],\n [{ type: 2, data: stru8(c.a || \"\") }],\n [{ type: 2, data: get_author_color(++iauthor) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ], \"/Index/Tables/DataList\", deps);\n var aaaid2 = authors[c.a || \"\"];\n var csaid2 = numbers_add_msg(cfb, 3056, [\n [],\n [{ type: 2, data: stru8(c.t || \"\") }],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]\n ]) }],\n [{ type: 2, data: write_TSP_Reference(aaaid2) }]\n ], \"/Index/Tables/DataList\", deps);\n numbers_iwa_doit(cfb, deps, csaid2, function(iwa) {\n return numbers_add_oref(iwa, aaaid2);\n });\n replies.push(csaid2);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, csaid2, aaaid2);\n ai.messages[0].data = write_shallow(mlist);\n });\n });\n if (!authors[cc.a || \"\"])\n authors[cc.a || \"\"] = numbers_add_msg(cfb, 212, [\n [],\n [{ type: 2, data: stru8(cc.a || \"\") }],\n [{ type: 2, data: get_author_color(++iauthor) }],\n [],\n [{ type: 0, data: write_varint49(0) }]\n ], \"/Index/Tables/DataList\", deps);\n var aaaid = authors[cc.a || \"\"];\n var csaid = numbers_add_msg(cfb, 3056, [\n [],\n [{ type: 2, data: stru8(cc.t || \"\") }],\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 1, data: new Uint8Array([0, 0, 0, 128, 116, 109, 182, 65]) }]\n ]) }],\n [{ type: 2, data: write_TSP_Reference(aaaid) }],\n replies.map(function(r) {\n return { type: 2, data: write_TSP_Reference(r) };\n }),\n [{ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(i) }],\n [{ type: 0, data: write_varint49(0) }]\n ]) }]\n ], \"/Index/Tables/DataList\", deps);\n numbers_iwa_doit(cfb, deps, csaid, function(iwa) {\n numbers_add_oref(iwa, aaaid);\n replies.forEach(function(r) {\n return numbers_add_oref(iwa, r);\n });\n });\n cmntdata[3].push({ type: 2, data: write_shallow([\n [],\n [{ type: 0, data: write_varint49(i) }],\n [{ type: 0, data: write_varint49(1) }],\n [],\n [],\n [],\n [],\n [],\n [],\n [],\n [{ type: 2, data: write_TSP_Reference(csaid) }]\n ]) });\n numbers_add_oref(cmntroot, csaid);\n numbers_iwa_doit(cfb, deps, 2, function(ai) {\n var mlist = parse_shallow(ai.messages[0].data);\n numbers_meta_add_dep(mlist, deps, cmntref, csaid);\n numbers_meta_add_dep(mlist, deps, csaid, aaaid);\n if (replies.length)\n numbers_meta_add_dep(mlist, deps, csaid, replies);\n ai.messages[0].data = write_shallow(mlist);\n });\n });\n }\n cmntdata[2][0].data = write_varint49(LUT.cmnt.length + 1);\n cmntroot.messages[0].data = write_shallow(cmntdata);\n });\n }\n }\n pb[4][0].data = write_shallow(store);\n }\n tmaroot.messages[0].data = write_shallow(pb);\n}\nfunction fix_opts_func(defaults/*:Array >*/)/*:{(o:any):void}*/ {\n\treturn function fix_opts(opts) {\n\t\tfor(var i = 0; i != defaults.length; ++i) {\n\t\t\tvar d = defaults[i];\n\t\t\tif(opts[d[0]] === undefined) opts[d[0]] = d[1];\n\t\t\tif(d[2] === 'n') opts[d[0]] = Number(opts[d[0]]);\n\t\t}\n\t};\n}\n\nfunction fix_read_opts(opts) {\nfix_opts_func([\n\t['cellNF', false], /* emit cell number format string as .z */\n\t['cellHTML', true], /* emit html string as .h */\n\t['cellFormula', true], /* emit formulae as .f */\n\t['cellStyles', false], /* emits style/theme as .s */\n\t['cellText', true], /* emit formatted text as .w */\n\t['cellDates', false], /* emit date cells with type `d` */\n\n\t['sheetStubs', false], /* emit empty cells */\n\t['sheetRows', 0, 'n'], /* read n rows (0 = read all rows) */\n\n\t['bookDeps', false], /* parse calculation chains */\n\t['bookSheets', false], /* only try to get sheet names (no Sheets) */\n\t['bookProps', false], /* only try to get properties (no Sheets) */\n\t['bookFiles', false], /* include raw file structure (keys, files, cfb) */\n\t['bookVBA', false], /* include vba raw data (vbaraw) */\n\n\t['password',''], /* password */\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\n\nfunction fix_write_opts(opts) {\nfix_opts_func([\n\t['cellDates', false], /* write date cells with type `d` */\n\n\t['bookSST', false], /* Generate Shared String Table */\n\n\t['bookType', 'xlsx'], /* Type of workbook (xlsx/m/b) */\n\n\t['compression', false], /* Use file compression */\n\n\t['WTF', false] /* WTF mode (throws errors) */\n])(opts);\n}\nfunction get_sheet_type(n/*:string*/)/*:string*/ {\n\tif(RELS.WS.indexOf(n) > -1) return \"sheet\";\n\tif(RELS.CS && n == RELS.CS) return \"chart\";\n\tif(RELS.DS && n == RELS.DS) return \"dialog\";\n\tif(RELS.MS && n == RELS.MS) return \"macro\";\n\treturn (n && n.length) ? n : \"sheet\";\n}\nfunction safe_parse_wbrels(wbrels, sheets) {\n\tif(!wbrels) return 0;\n\ttry {\n\t\twbrels = sheets.map(function pwbr(w) { if(!w.id) w.id = w.strRelID; return [w.name, wbrels['!id'][w.id].Target, get_sheet_type(wbrels['!id'][w.id].Type)]; });\n\t} catch(e) { return null; }\n\treturn !wbrels || wbrels.length === 0 ? null : wbrels;\n}\n\nfunction parse_sheet_legacy_drawing(sheet, type, zip, path, idx, opts, wb, comments) {\n\tif(!sheet || !sheet['!legdrawel']) return;\n\tvar dfile = resolve_path(sheet['!legdrawel'].Target, path);\n\tvar draw = getzipstr(zip, dfile, true);\n\tif(draw) parse_vml(utf8read(draw), sheet, comments||[]);\n}\n\nfunction safe_parse_sheet(zip, path/*:string*/, relsPath/*:string*/, sheet, idx/*:number*/, sheetRels, sheets, stype/*:string*/, opts, wb, themes, styles) {\n\ttry {\n\t\tsheetRels[sheet]=parse_rels(getzipstr(zip, relsPath, true), path);\n\t\tvar data = getzipdata(zip, path);\n\t\tvar _ws;\n\t\tswitch(stype) {\n\t\t\tcase 'sheet': _ws = parse_ws(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'chart': _ws = parse_cs(data, path, idx, opts, sheetRels[sheet], wb, themes, styles);\n\t\t\t\tif(!_ws || !_ws['!drawel']) break;\n\t\t\t\tvar dfile = resolve_path(_ws['!drawel'].Target, path);\n\t\t\t\tvar drelsp = get_rels_path(dfile);\n\t\t\t\tvar draw = parse_drawing(getzipstr(zip, dfile, true), parse_rels(getzipstr(zip, drelsp, true), dfile));\n\t\t\t\tvar chartp = resolve_path(draw, dfile);\n\t\t\t\tvar crelsp = get_rels_path(chartp);\n\t\t\t\t_ws = parse_chart(getzipstr(zip, chartp, true), chartp, opts, parse_rels(getzipstr(zip, crelsp, true), chartp), wb, _ws);\n\t\t\t\tbreak;\n\t\t\tcase 'macro': _ws = parse_ms(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tcase 'dialog': _ws = parse_ds(data, path, idx, opts, sheetRels[sheet], wb, themes, styles); break;\n\t\t\tdefault: throw new Error(\"Unrecognized sheet type \" + stype);\n\t\t}\n\t\tsheets[sheet] = _ws;\n\n\t\t/* scan rels for comments and threaded comments */\n\t\tvar comments = [], tcomments = [];\n\t\tif(sheetRels && sheetRels[sheet]) keys(sheetRels[sheet]).forEach(function(n) {\n\t\t\tvar dfile = \"\";\n\t\t\tif(sheetRels[sheet][n].Type == RELS.CMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\tcomments = parse_cmnt(getzipdata(zip, dfile, true), dfile, opts);\n\t\t\t\tif(!comments || !comments.length) return;\n\t\t\t\tsheet_insert_comments(_ws, comments, false);\n\t\t\t}\n\t\t\tif(sheetRels[sheet][n].Type == RELS.TCMNT) {\n\t\t\t\tdfile = resolve_path(sheetRels[sheet][n].Target, path);\n\t\t\t\ttcomments = tcomments.concat(parse_tcmnt_xml(getzipdata(zip, dfile, true), opts));\n\t\t\t}\n\t\t});\n\t\tif(tcomments && tcomments.length) sheet_insert_comments(_ws, tcomments, true, opts.people || []);\n\t\tparse_sheet_legacy_drawing(_ws, stype, zip, path, idx, opts, wb, comments);\n\t} catch(e) { if(opts.WTF) throw e; }\n}\n\nfunction strip_front_slash(x/*:string*/)/*:string*/ { return x.charAt(0) == '/' ? x.slice(1) : x; }\n\nfunction parse_zip(zip/*:ZIP*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tmake_ssf();\n\topts = opts || {};\n\tfix_read_opts(opts);\n\n\t/* OpenDocument Part 3 Section 2.2.1 OpenDocument Package */\n\tif(safegetzipfile(zip, 'META-INF/manifest.xml')) return parse_ods(zip, opts);\n\t/* UOC */\n\tif(safegetzipfile(zip, 'objectdata.xml')) return parse_ods(zip, opts);\n\t/* Numbers */\n\tif(safegetzipfile(zip, 'Index/Document.iwa')) {\n\t\tif(typeof Uint8Array == \"undefined\") throw new Error('NUMBERS file parsing requires Uint8Array support');\n\t\tif(typeof parse_numbers_iwa != \"undefined\") {\n\t\t\tif(zip.FileIndex) return parse_numbers_iwa(zip, opts);\n\t\t\tvar _zip = CFB.utils.cfb_new();\n\t\t\tzipentries(zip).forEach(function(e) { zip_add_file(_zip, e, getzipbin(zip, e)); });\n\t\t\treturn parse_numbers_iwa(_zip, opts);\n\t\t}\n\t\tthrow new Error('Unsupported NUMBERS file');\n\t}\n\tif(!safegetzipfile(zip, '[Content_Types].xml')) {\n\t\tif(safegetzipfile(zip, 'index.xml.gz')) throw new Error('Unsupported NUMBERS 08 file');\n\t\tif(safegetzipfile(zip, 'index.xml')) throw new Error('Unsupported NUMBERS 09 file');\n\t\tvar index_zip = CFB.find(zip, 'Index.zip');\n\t\tif(index_zip) {\n\t\t\topts = dup(opts);\n\t\t\tdelete opts.type;\n\t\t\tif(typeof index_zip.content == \"string\") opts.type = \"binary\";\n\t\t\t// TODO: Bun buffer bug\n\t\t\tif(typeof Bun !== \"undefined\" && Buffer.isBuffer(index_zip.content)) return readSync(new Uint8Array(index_zip.content), opts);\n\t\t\treturn readSync(index_zip.content, opts);\n\t\t}\n\t\tthrow new Error('Unsupported ZIP file');\n\t}\n\n\tvar entries = zipentries(zip);\n\tvar dir = parse_ct((getzipstr(zip, '[Content_Types].xml')/*:?any*/));\n\tvar xlsb = false;\n\tvar sheets, binname;\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.xml\";\n\t\tif(getzipdata(zip,binname, true)) dir.workbooks.push(binname);\n\t}\n\tif(dir.workbooks.length === 0) {\n\t\tbinname = \"xl/workbook.bin\";\n\t\tif(!getzipdata(zip,binname,true)) throw new Error(\"Could not find workbook\");\n\t\tdir.workbooks.push(binname);\n\t\txlsb = true;\n\t}\n\tif(dir.workbooks[0].slice(-3) == \"bin\") xlsb = true;\n\n\tvar themes = ({}/*:any*/);\n\tvar styles = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) {\n\t\tstrs = [];\n\t\tif(dir.sst) try { strs=parse_sst(getzipdata(zip, strip_front_slash(dir.sst)), dir.sst, opts); } catch(e) { if(opts.WTF) throw e; }\n\n\t\tif(opts.cellStyles && dir.themes.length) themes = parse_theme_xml(getzipstr(zip, dir.themes[0].replace(/^\\//,''), true)||\"\", opts);\n\n\t\tif(dir.style) styles = parse_sty(getzipdata(zip, strip_front_slash(dir.style)), dir.style, themes, opts);\n\t}\n\n\t/*var externbooks = */dir.links.map(function(link) {\n\t\ttry {\n\t\t\tvar rels = parse_rels(getzipstr(zip, get_rels_path(strip_front_slash(link))), link);\n\t\t\treturn parse_xlink(getzipdata(zip, strip_front_slash(link)), rels, link, opts);\n\t\t} catch(e) {}\n\t});\n\n\tvar wb = parse_wb(getzipdata(zip, strip_front_slash(dir.workbooks[0])), dir.workbooks[0], opts);\n\n\tvar props = {}, propdata = \"\";\n\n\tif(dir.coreprops.length) {\n\t\tpropdata = getzipdata(zip, strip_front_slash(dir.coreprops[0]), true);\n\t\tif(propdata) props = parse_core_props(propdata);\n\t\tif(dir.extprops.length !== 0) {\n\t\t\tpropdata = getzipdata(zip, strip_front_slash(dir.extprops[0]), true);\n\t\t\tif(propdata) parse_ext_props(propdata, props, opts);\n\t\t}\n\t}\n\n\tvar custprops = {};\n\tif(!opts.bookSheets || opts.bookProps) {\n\t\tif (dir.custprops.length !== 0) {\n\t\t\tpropdata = getzipstr(zip, strip_front_slash(dir.custprops[0]), true);\n\t\t\tif(propdata) custprops = parse_cust_props(propdata, opts);\n\t\t}\n\t}\n\n\tvar out = ({}/*:any*/);\n\tif(opts.bookSheets || opts.bookProps) {\n\t\tif(wb.Sheets) sheets = wb.Sheets.map(function pluck(x){ return x.name; });\n\t\telse if(props.Worksheets && props.SheetNames.length > 0) sheets=props.SheetNames;\n\t\tif(opts.bookProps) { out.Props = props; out.Custprops = custprops; }\n\t\tif(opts.bookSheets && typeof sheets !== 'undefined') out.SheetNames = sheets;\n\t\tif(opts.bookSheets ? out.SheetNames : opts.bookProps) return out;\n\t}\n\tsheets = {};\n\n\tvar deps = {};\n\tif(opts.bookDeps && dir.calcchain) deps=parse_cc(getzipdata(zip, strip_front_slash(dir.calcchain)),dir.calcchain,opts);\n\n\tvar i=0;\n\tvar sheetRels = ({}/*:any*/);\n\tvar path, relsPath;\n\n\t{\n\t\tvar wbsheets = wb.Sheets;\n\t\tprops.Worksheets = wbsheets.length;\n\t\tprops.SheetNames = [];\n\t\tfor(var j = 0; j != wbsheets.length; ++j) {\n\t\t\tprops.SheetNames[j] = wbsheets[j].name;\n\t\t}\n\t}\n\n\tvar wbext = xlsb ? \"bin\" : \"xml\";\n\tvar wbrelsi = dir.workbooks[0].lastIndexOf(\"/\");\n\tvar wbrelsfile = (dir.workbooks[0].slice(0, wbrelsi+1) + \"_rels/\" + dir.workbooks[0].slice(wbrelsi+1) + \".rels\").replace(/^\\//,\"\");\n\tif(!safegetzipfile(zip, wbrelsfile)) wbrelsfile = 'xl/_rels/workbook.' + wbext + '.rels';\n\tvar wbrels = parse_rels(getzipstr(zip, wbrelsfile, true), wbrelsfile.replace(/_rels.*/, \"s5s\"));\n\n\tif((dir.metadata || []).length >= 1) {\n\t\t/* TODO: MDX and other types of metadata */\n\t\topts.xlmeta = parse_xlmeta(getzipdata(zip, strip_front_slash(dir.metadata[0])),dir.metadata[0],opts);\n\t}\n\n\tif((dir.people || []).length >= 1) {\n\t\topts.people = parse_people_xml(getzipdata(zip, strip_front_slash(dir.people[0])),opts);\n\t}\n\n\tif(wbrels) wbrels = safe_parse_wbrels(wbrels, wb.Sheets);\n\n\t/* Numbers iOS hack */\n\tvar nmode = (getzipdata(zip,\"xl/worksheets/sheet.xml\",true))?1:0;\n\twsloop: for(i = 0; i != props.Worksheets; ++i) {\n\t\tvar stype = \"sheet\";\n\t\tif(wbrels && wbrels[i]) {\n\t\t\tpath = 'xl/' + (wbrels[i][1]).replace(/[\\/]?xl\\//, \"\");\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrels[i][1];\n\t\t\tif(!safegetzipfile(zip, path)) path = wbrelsfile.replace(/_rels\\/[\\S\\s]*$/,\"\") + wbrels[i][1];\n\t\t\tstype = wbrels[i][2];\n\t\t} else {\n\t\t\tpath = 'xl/worksheets/sheet'+(i+1-nmode)+\".\" + wbext;\n\t\t\tpath = path.replace(/sheet0\\./,\"sheet.\");\n\t\t}\n\t\trelsPath = path.replace(/^(.*)(\\/)([^\\/]*)$/, \"$1/_rels/$3.rels\");\n\t\tif(opts && opts.sheets != null) switch(typeof opts.sheets) {\n\t\t\tcase \"number\": if(i != opts.sheets) continue wsloop; break;\n\t\t\tcase \"string\": if(props.SheetNames[i].toLowerCase() != opts.sheets.toLowerCase()) continue wsloop; break;\n\t\t\tdefault: if(Array.isArray && Array.isArray(opts.sheets)) {\n\t\t\t\tvar snjseen = false;\n\t\t\t\tfor(var snj = 0; snj != opts.sheets.length; ++snj) {\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"number\" && opts.sheets[snj] == i) snjseen=1;\n\t\t\t\t\tif(typeof opts.sheets[snj] == \"string\" && opts.sheets[snj].toLowerCase() == props.SheetNames[i].toLowerCase()) snjseen = 1;\n\t\t\t\t}\n\t\t\t\tif(!snjseen) continue wsloop;\n\t\t\t}\n\t\t}\n\t\tsafe_parse_sheet(zip, path, relsPath, props.SheetNames[i], i, sheetRels, sheets, stype, opts, wb, themes, styles);\n\t}\n\n\tout = ({\n\t\tDirectory: dir,\n\t\tWorkbook: wb,\n\t\tProps: props,\n\t\tCustprops: custprops,\n\t\tDeps: deps,\n\t\tSheets: sheets,\n\t\tSheetNames: props.SheetNames,\n\t\tStrings: strs,\n\t\tStyles: styles,\n\t\tThemes: themes,\n\t\tSSF: dup(table_fmt)\n\t}/*:any*/);\n\tif(opts && opts.bookFiles) {\n\t\tif(zip.files) {\n\t\t\tout.keys = entries;\n\t\t\tout.files = zip.files;\n\t\t} else {\n\t\t\tout.keys = [];\n\t\t\tout.files = {};\n\t\t\tzip.FullPaths.forEach(function(p, idx) {\n\t\t\t\tp = p.replace(/^Root Entry[\\/]/, \"\");\n\t\t\t\tout.keys.push(p);\n\t\t\t\tout.files[p] = zip.FileIndex[idx];\n\t\t\t});\n\t\t}\n\t}\n\tif(opts && opts.bookVBA) {\n\t\tif(dir.vba.length > 0) out.vbaraw = getzipdata(zip,strip_front_slash(dir.vba[0]),true);\n\t\telse if(dir.defaults && dir.defaults.bin === CT_VBA) out.vbaraw = getzipdata(zip, 'xl/vbaProject.bin',true);\n\t}\n\t// TODO: pass back content types metadata for xlsm/xlsx resolution\n\tout.bookType = xlsb ? \"xlsb\" : \"xlsx\";\n\treturn out;\n}\n\n/* [MS-OFFCRYPTO] 2.1.1 */\nfunction parse_xlsxcfb(cfb, _opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tvar f = 'Workbook', data = CFB.find(cfb, f);\n\ttry {\n\tf = '/!DataSpaces/Version';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var version = */parse_DataSpaceVersionInfo(data.content);\n\n\t/* 2.3.4.1 */\n\tf = '/!DataSpaces/DataSpaceMap';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar dsm = parse_DataSpaceMap(data.content);\n\tif(dsm.length !== 1 || dsm[0].comps.length !== 1 || dsm[0].comps[0].t !== 0 || dsm[0].name !== \"StrongEncryptionDataSpace\" || dsm[0].comps[0].v !== \"EncryptedPackage\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.2 */\n\tf = '/!DataSpaces/DataSpaceInfo/StrongEncryptionDataSpace';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar seds = parse_DataSpaceDefinition(data.content);\n\tif(seds.length != 1 || seds[0] != \"StrongEncryptionTransform\")\n\t\tthrow new Error(\"ECMA-376 Encrypted file bad \" + f);\n\n\t/* 2.3.4.3 */\n\tf = '/!DataSpaces/TransformInfo/StrongEncryptionTransform/!Primary';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\t/*var hdr = */parse_Primary(data.content);\n\t} catch(e) {}\n\n\tf = '/EncryptionInfo';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\tvar einfo = parse_EncryptionInfo(data.content);\n\n\t/* 2.3.4.4 */\n\tf = '/EncryptedPackage';\n\tdata = CFB.find(cfb, f); if(!data || !data.content) throw new Error(\"ECMA-376 Encrypted file missing \" + f);\n\n/*global decrypt_agile */\n/*:: declare var decrypt_agile:any; */\n\tif(einfo[0] == 0x04 && typeof decrypt_agile !== 'undefined') return decrypt_agile(einfo[1], data.content, opts.password || \"\", opts);\n/*global decrypt_std76 */\n/*:: declare var decrypt_std76:any; */\n\tif(einfo[0] == 0x02 && typeof decrypt_std76 !== 'undefined') return decrypt_std76(einfo[1], data.content, opts.password || \"\", opts);\n\tthrow new Error(\"File is password-protected\");\n}\n\nfunction write_zip_xlsb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"bin\";\n\tvar vbafmt = true;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_bin(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".xml\";\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".xml\", RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_bin(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_bin(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_bin(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tvar ww = write_theme(wb.Themes, opts);\n\tzip_add_file(zip, f, ww);\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_bin(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_bin());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction write_zip_xlsx(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = dup(table_fmt);\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(); SSF_load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t}\n\topts.rels = {}; opts.wbrels = {};\n\topts.Strings = /*::((*/[]/*:: :any):SST)*/; opts.Strings.Count = 0; opts.Strings.Unique = 0;\n\tif(browser_has_Map) opts.revStrings = new Map();\n\telse { opts.revStrings = {}; opts.revStrings.foo = []; delete opts.revStrings.foo; }\n\tvar wbext = \"xml\";\n\tvar vbafmt = VBAFMTS.indexOf(opts.bookType) > -1;\n\tvar ct = new_ct();\n\tfix_write_opts(opts = opts || {});\n\tvar zip = zip_new();\n\tvar f = \"\", rId = 0;\n\n\topts.cellXfs = [];\n\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tf = \"docProps/core.xml\";\n\tzip_add_file(zip, f, write_core_props(wb.Props, opts));\n\tct.coreprops.push(f);\n\tadd_rels(opts.rels, 2, f, RELS.CORE_PROPS);\n\n\t/*::if(!wb.Props) throw \"unreachable\"; */\n\tf = \"docProps/app.xml\";\n\tif(wb.Props && wb.Props.SheetNames){/* empty */}\n\telse if(!wb.Workbook || !wb.Workbook.Sheets) wb.Props.SheetNames = wb.SheetNames;\n\telse {\n\t\tvar _sn = [];\n\t\tfor(var _i = 0; _i < wb.SheetNames.length; ++_i)\n\t\t\tif((wb.Workbook.Sheets[_i]||{}).Hidden != 2) _sn.push(wb.SheetNames[_i]);\n\t\twb.Props.SheetNames = _sn;\n\t}\n\twb.Props.Worksheets = wb.Props.SheetNames.length;\n\tzip_add_file(zip, f, write_ext_props(wb.Props, opts));\n\tct.extprops.push(f);\n\tadd_rels(opts.rels, 3, f, RELS.EXT_PROPS);\n\n\tif(wb.Custprops !== wb.Props && keys(wb.Custprops||{}).length > 0) {\n\t\tf = \"docProps/custom.xml\";\n\t\tzip_add_file(zip, f, write_cust_props(wb.Custprops, opts));\n\t\tct.custprops.push(f);\n\t\tadd_rels(opts.rels, 4, f, RELS.CUST_PROPS);\n\t}\n\n\tvar people = [\"SheetJ5\"];\n\topts.tcid = 0;\n\n\tfor(rId=1;rId <= wb.SheetNames.length; ++rId) {\n\t\tvar wsrels = {'!id':{}};\n\t\tvar ws = wb.Sheets[wb.SheetNames[rId-1]];\n\t\tvar _type = (ws || {})[\"!type\"] || \"sheet\";\n\t\tswitch(_type) {\n\t\tcase \"chart\":\n\t\t\t/* falls through */\n\t\tdefault:\n\t\t\tf = \"xl/worksheets/sheet\" + rId + \".\" + wbext;\n\t\t\tzip_add_file(zip, f, write_ws_xml(rId-1, opts, wb, wsrels));\n\t\t\tct.sheets.push(f);\n\t\t\tadd_rels(opts.wbrels, -1, \"worksheets/sheet\" + rId + \".\" + wbext, RELS.WS[0]);\n\t\t}\n\n\t\tif(ws) {\n\t\t\tvar comments = ws['!comments'];\n\t\t\tvar need_vml = false;\n\t\t\tvar cf = \"\";\n\t\t\tif(comments && comments.length > 0) {\n\t\t\t\tvar needtc = false;\n\t\t\t\tcomments.forEach(function(carr) {\n\t\t\t\t\tcarr[1].forEach(function(c) { if(c.T == true) needtc = true; });\n\t\t\t\t});\n\t\t\t\tif(needtc) {\n\t\t\t\t\tcf = \"xl/threadedComments/threadedComment\" + rId + \".xml\";\n\t\t\t\t\tzip_add_file(zip, cf, write_tcmnt_xml(comments, people, opts));\n\t\t\t\t\tct.threadedcomments.push(cf);\n\t\t\t\t\tadd_rels(wsrels, -1, \"../threadedComments/threadedComment\" + rId + \".xml\", RELS.TCMNT);\n\t\t\t\t}\n\n\t\t\t\tcf = \"xl/comments\" + rId + \".\" + wbext;\n\t\t\t\tzip_add_file(zip, cf, write_comments_xml(comments, opts));\n\t\t\t\tct.comments.push(cf);\n\t\t\t\tadd_rels(wsrels, -1, \"../comments\" + rId + \".\" + wbext, RELS.CMNT);\n\t\t\t\tneed_vml = true;\n\t\t\t}\n\t\t\tif(ws['!legacy']) {\n\t\t\t\tif(need_vml) zip_add_file(zip, \"xl/drawings/vmlDrawing\" + (rId) + \".vml\", write_vml(rId, ws['!comments']));\n\t\t\t}\n\t\t\tdelete ws['!comments'];\n\t\t\tdelete ws['!legacy'];\n\t\t}\n\n\t\tif(wsrels['!id'].rId1) zip_add_file(zip, get_rels_path(f), write_rels(wsrels));\n\t}\n\n\tif(opts.Strings != null && opts.Strings.length > 0) {\n\t\tf = \"xl/sharedStrings.\" + wbext;\n\t\tzip_add_file(zip, f, write_sst_xml(opts.Strings, opts));\n\t\tct.strs.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"sharedStrings.\" + wbext, RELS.SST);\n\t}\n\n\tf = \"xl/workbook.\" + wbext;\n\tzip_add_file(zip, f, write_wb_xml(wb, opts));\n\tct.workbooks.push(f);\n\tadd_rels(opts.rels, 1, f, RELS.WB);\n\n\t/* TODO: something more intelligent with themes */\n\n\tf = \"xl/theme/theme1.xml\";\n\tzip_add_file(zip, f, write_theme(wb.Themes, opts));\n\tct.themes.push(f);\n\tadd_rels(opts.wbrels, -1, \"theme/theme1.xml\", RELS.THEME);\n\n\t/* TODO: something more intelligent with styles */\n\n\tf = \"xl/styles.\" + wbext;\n\tzip_add_file(zip, f, write_sty_xml(wb, opts));\n\tct.styles.push(f);\n\tadd_rels(opts.wbrels, -1, \"styles.\" + wbext, RELS.STY);\n\n\tif(wb.vbaraw && vbafmt) {\n\t\tf = \"xl/vbaProject.bin\";\n\t\tzip_add_file(zip, f, wb.vbaraw);\n\t\tct.vba.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"vbaProject.bin\", RELS.VBA);\n\t}\n\n\tf = \"xl/metadata.\" + wbext;\n\tzip_add_file(zip, f, write_xlmeta_xml());\n\tct.metadata.push(f);\n\tadd_rels(opts.wbrels, -1, \"metadata.\" + wbext, RELS.XLMETA);\n\n\tif(people.length > 1) {\n\t\tf = \"xl/persons/person.xml\";\n\t\tzip_add_file(zip, f, write_people_xml(people, opts));\n\t\tct.people.push(f);\n\t\tadd_rels(opts.wbrels, -1, \"persons/person.xml\", RELS.PEOPLE);\n\t}\n\n\tzip_add_file(zip, \"[Content_Types].xml\", write_ct(ct, opts));\n\tzip_add_file(zip, '_rels/.rels', write_rels(opts.rels));\n\tzip_add_file(zip, 'xl/_rels/workbook.' + wbext + '.rels', write_rels(opts.wbrels));\n\n\tdelete opts.revssf; delete opts.ssf;\n\treturn zip;\n}\n\nfunction firstbyte(f/*:RawData*/,o/*:?TypeOpts*/)/*:Array*/ {\n\tvar x = \"\";\n\tswitch((o||{}).type || \"base64\") {\n\t\tcase 'buffer': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tcase 'base64': x = Base64_decode(f.slice(0,12)); break;\n\t\tcase 'binary': x = f; break;\n\t\tcase 'array': return [f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7]];\n\t\tdefault: throw new Error(\"Unrecognized type \" + (o && o.type || \"undefined\"));\n\t}\n\treturn [x.charCodeAt(0), x.charCodeAt(1), x.charCodeAt(2), x.charCodeAt(3), x.charCodeAt(4), x.charCodeAt(5), x.charCodeAt(6), x.charCodeAt(7)];\n}\n\nfunction read_cfb(cfb/*:CFBContainer*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tif(CFB.find(cfb, \"EncryptedPackage\")) return parse_xlsxcfb(cfb, opts);\n\treturn parse_xlscfb(cfb, opts);\n}\n\nfunction read_zip(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar zip, d = data;\n\tvar o = opts||{};\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tzip = zip_read(d, o);\n\treturn parse_zip(zip, o);\n}\n\nfunction read_plaintext(data/*:string*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar i = 0;\n\tmain: while(i < data.length) switch(data.charCodeAt(i)) {\n\t\tcase 0x0A: case 0x0D: case 0x20: ++i; break;\n\t\tcase 0x3C: return parse_xlml(data.slice(i),o);\n\t\tdefault: break main;\n\t}\n\treturn PRN.to_workbook(data, o);\n}\n\nfunction read_plaintext_raw(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar str = \"\", bytes = firstbyte(data, o);\n\tswitch(o.type) {\n\t\tcase 'base64': str = Base64_decode(data); break;\n\t\tcase 'binary': str = data; break;\n\t\tcase 'buffer': str = data.toString('binary'); break;\n\t\tcase 'array': str = cc2str(data); break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str);\n\to.type = \"binary\";\n\treturn read_plaintext(str, o);\n}\n\nfunction read_utf16(data/*:RawData*/, o/*:ParseOpts*/)/*:Workbook*/ {\n\tvar d = data;\n\tif(o.type == 'base64') d = Base64_decode(d);\n\tif(typeof ArrayBuffer !== \"undefined\" && data instanceof ArrayBuffer) d = new Uint8Array(data);\n\td = typeof $cptable !== \"undefined\" ? $cptable.utils.decode(1200, d.slice(2), 'str') : (\n\t\t(has_buf && Buffer.isBuffer(data)) ? data.slice(2).toString(\"utf16le\") :\n\t\t(typeof Uint8Array !== \"undefined\" && d instanceof Uint8Array) ? (\n\t\t\ttypeof TextDecoder !== \"undefined\" ? new TextDecoder(\"utf-16le\").decode(d.slice(2)) : utf16lereadu(d.slice(2))\n\t\t) : utf16leread(d.slice(2))\n\t);\n\to.type = \"binary\";\n\treturn read_plaintext(d, o);\n}\n\nfunction bstrify(data/*:string*/)/*:string*/ {\n\treturn !data.match(/[^\\x00-\\x7F]/) ? data : utf8write(data);\n}\n\nfunction read_prn(data, d, o, str) {\n\tif(str) { o.type = \"string\"; return PRN.to_workbook(data, o); }\n\treturn PRN.to_workbook(d, o);\n}\n\nfunction readSync(data/*:RawData*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\treset_cp();\n\tvar o = opts||{};\n\tif(o.codepage && typeof $cptable === \"undefined\") console.error(\"Codepage tables are not loaded. Non-ASCII characters may not give expected results\");\n\tif(typeof ArrayBuffer !== 'undefined' && data instanceof ArrayBuffer) return readSync(new Uint8Array(data), (o = dup(o), o.type = \"array\", o));\n\tif(typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && !o.type) o.type = typeof Deno !== \"undefined\" ? \"buffer\" : \"array\";\n\tvar d = data, n = [0,0,0,0], str = false;\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\t_ssfopts = {};\n\tif(o.dateNF) _ssfopts.dateNF = o.dateNF;\n\tif(!o.type) o.type = (has_buf && Buffer.isBuffer(data)) ? \"buffer\" : \"base64\";\n\tif(o.type == \"file\") { o.type = has_buf ? \"buffer\" : \"binary\"; d = read_binary(data); if(typeof Uint8Array !== 'undefined' && !has_buf) o.type = \"array\"; }\n\tif(o.type == \"string\") { str = true; o.type = \"binary\"; o.codepage = 65001; d = bstrify(data); }\n\tif(o.type == 'array' && typeof Uint8Array !== 'undefined' && data instanceof Uint8Array && typeof ArrayBuffer !== 'undefined') {\n\t\t// $FlowIgnore\n\t\tvar ab=new ArrayBuffer(3), vu=new Uint8Array(ab); vu.foo=\"bar\";\n\t\t// $FlowIgnore\n\t\tif(!vu.foo) {o=dup(o); o.type='array'; return readSync(ab2a(d), o);}\n\t}\n\tswitch((n = firstbyte(d, o))[0]) {\n\t\tcase 0xD0: if(n[1] === 0xCF && n[2] === 0x11 && n[3] === 0xE0 && n[4] === 0xA1 && n[5] === 0xB1 && n[6] === 0x1A && n[7] === 0xE1) return read_cfb(CFB.read(d, o), o); break;\n\t\tcase 0x09: if(n[1] <= 0x08) return parse_xlscfb(d, o); break;\n\t\tcase 0x3C: return parse_xlml(d, o);\n\t\tcase 0x49:\n\t\t\tif(n[1] === 0x49 && n[2] === 0x2a && n[3] === 0x00) throw new Error(\"TIFF Image File is not a spreadsheet\");\n\t\t\tif(n[1] === 0x44) return read_wb_ID(d, o);\n\t\t\tbreak;\n\t\tcase 0x54: if(n[1] === 0x41 && n[2] === 0x42 && n[3] === 0x4C) return DIF.to_workbook(d, o); break;\n\t\tcase 0x50: return (n[1] === 0x4B && n[2] < 0x09 && n[3] < 0x09) ? read_zip(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xEF: return n[3] === 0x3C ? parse_xlml(d, o) : read_prn(data, d, o, str);\n\t\tcase 0xFF:\n\t\t\tif(n[1] === 0xFE) { return read_utf16(d, o); }\n\t\t\telse if(n[1] === 0x00 && n[2] === 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\tbreak;\n\t\tcase 0x00:\n\t\t\tif(n[1] === 0x00) {\n\t\t\t\tif(n[2] >= 0x02 && n[3] === 0x00) return WK_.to_workbook(d, o);\n\t\t\t\tif(n[2] === 0x00 && (n[3] === 0x08 || n[3] === 0x09)) return WK_.to_workbook(d, o);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 0x03: case 0x83: case 0x8B: case 0x8C: return DBF.to_workbook(d, o);\n\t\tcase 0x7B: if(n[1] === 0x5C && n[2] === 0x72 && n[3] === 0x74) return rtf_to_workbook(d, o); break;\n\t\tcase 0x0A: case 0x0D: case 0x20: return read_plaintext_raw(d, o);\n\t\tcase 0x89: if(n[1] === 0x50 && n[2] === 0x4E && n[3] === 0x47) throw new Error(\"PNG Image File is not a spreadsheet\"); break;\n\t\tcase 0x08: if(n[1] === 0xE7) throw new Error(\"Unsupported Multiplan 1.x file!\"); break;\n\t\tcase 0x0C:\n\t\t\tif(n[1] === 0xEC) throw new Error(\"Unsupported Multiplan 2.x file!\");\n\t\t\tif(n[1] === 0xED) throw new Error(\"Unsupported Multiplan 3.x file!\");\n\t\t\tbreak;\n\t}\n\tif(DBF_SUPPORTED_VERSIONS.indexOf(n[0]) > -1 && n[2] <= 12 && n[3] <= 31) return DBF.to_workbook(d, o);\n\treturn read_prn(data, d, o, str);\n}\n\nfunction readFileSync(filename/*:string*/, opts/*:?ParseOpts*/)/*:Workbook*/ {\n\tvar o = opts||{}; o.type = 'file';\n\treturn readSync(filename, o);\n}\nfunction write_cfb_ctr(cfb/*:CFBContainer*/, o/*:WriteOpts*/)/*:any*/ {\n\tswitch(o.type) {\n\t\tcase \"base64\": case \"binary\": break;\n\t\tcase \"buffer\": case \"array\": o.type = \"\"; break;\n\t\tcase \"file\": return write_dl(o.file, CFB.write(cfb, {type:has_buf ? 'buffer' : \"\"}));\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\treturn CFB.write(cfb, o);\n}\n\nfunction write_zip(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:ZIP*/ {\n\tswitch(opts.bookType) {\n\t\tcase \"ods\": return write_ods(wb, opts);\n\t\tcase \"numbers\": return write_numbers_iwa(wb, opts);\n\t\tcase \"xlsb\": return write_zip_xlsb(wb, opts);\n\t\tdefault: return write_zip_xlsx(wb, opts);\n\t}\n}\n\n/*:: declare var encrypt_agile:any; */\nfunction write_zip_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_typeXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = dup(opts||{});\n\tvar z = write_zip_xlsx(wb, o);\n\treturn write_zip_denouement(z, o);\n}\nfunction write_zip_denouement(z/*:any*/, o/*:?WriteOpts*/)/*:any*/ {\n\tvar oopts = {};\n\tvar ftype = has_buf ? \"nodebuffer\" : (typeof Uint8Array !== \"undefined\" ? \"array\" : \"string\");\n\tif(o.compression) oopts.compression = 'DEFLATE';\n\tif(o.password) oopts.type = ftype;\n\telse switch(o.type) {\n\t\tcase \"base64\": oopts.type = \"base64\"; break;\n\t\tcase \"binary\": oopts.type = \"string\"; break;\n\t\tcase \"string\": throw new Error(\"'string' output type invalid for '\" + o.bookType + \"' files\");\n\t\tcase \"buffer\":\n\t\tcase \"file\": oopts.type = ftype; break;\n\t\tdefault: throw new Error(\"Unrecognized type \" + o.type);\n\t}\n\tvar out = z.FullPaths ? CFB.write(z, {fileType:\"zip\", type: /*::(*/{\"nodebuffer\": \"buffer\", \"string\": \"binary\"}/*:: :any)*/[oopts.type] || oopts.type, compression: !!o.compression}) : z.generate(oopts);\n\tif(typeof Deno !== \"undefined\") {\n\t\tif(typeof out == \"string\") {\n\t\t\tif(o.type == \"binary\" || o.type == \"base64\") return out;\n\t\t\tout = new Uint8Array(s2ab(out));\n\t\t}\n\t}\n/*jshint -W083 */\n\tif(o.password && typeof encrypt_agile !== 'undefined') return write_cfb_ctr(encrypt_agile(out, o.password), o); // eslint-disable-line no-undef\n/*jshint +W083 */\n\tif(o.type === \"file\") return write_dl(o.file, out);\n\treturn o.type == \"string\" ? utf8read(/*::(*/out/*:: :any)*/) : out;\n}\n\nfunction write_cfb_type(wb/*:Workbook*/, opts/*:?WriteOpts*/)/*:any*/ {\n\tvar o = opts||{};\n\tvar cfb/*:CFBContainer*/ = write_xlscfb(wb, o);\n\treturn write_cfb_ctr(cfb, o);\n}\n\nfunction write_string_type(out/*:string*/, opts/*:WriteOpts*/, bom/*:?string*/)/*:any*/ {\n\tif(!bom) bom = \"\";\n\tvar o = bom + out;\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode(utf8write(o));\n\t\tcase \"binary\": return utf8write(o);\n\t\tcase \"string\": return out;\n\t\tcase \"file\": return write_dl(opts.file, o, 'utf8');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(o, 'utf8');\n\t\t\telse if(typeof TextEncoder !== \"undefined\") return new TextEncoder().encode(o);\n\t\t\telse return write_string_type(o, {type:'binary'}).split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\nfunction write_stxt_type(out/*:string*/, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"base64\": return Base64_encode_pass(out);\n\t\tcase \"binary\": return out;\n\t\tcase \"string\": return out; /* override in sheet_to_txt */\n\t\tcase \"file\": return write_dl(opts.file, out, 'binary');\n\t\tcase \"buffer\": {\n\t\t\tif(has_buf) return Buffer_from(out, 'binary');\n\t\t\telse return out.split(\"\").map(function(c) { return c.charCodeAt(0); });\n\t\t}\n\t}\n\tthrow new Error(\"Unrecognized type \" + opts.type);\n}\n\n/* TODO: test consistency */\nfunction write_binary_type(out, opts/*:WriteOpts*/)/*:any*/ {\n\tswitch(opts.type) {\n\t\tcase \"string\":\n\t\tcase \"base64\":\n\t\tcase \"binary\":\n\t\t\tvar bstr = \"\";\n\t\t\t// $FlowIgnore\n\t\t\tfor(var i = 0; i < out.length; ++i) bstr += String.fromCharCode(out[i]);\n\t\t\treturn opts.type == 'base64' ? Base64_encode(bstr) : opts.type == 'string' ? utf8read(bstr) : bstr;\n\t\tcase \"file\": return write_dl(opts.file, out);\n\t\tcase \"buffer\": return out;\n\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t}\n}\n\nfunction writeSyncXLSX(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSyncXLSX(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\treturn write_zip_typeXLSX(wb, o);\n}\n\nfunction writeSync(wb/*:Workbook*/, opts/*:?WriteOpts*/) {\n\treset_cp();\n\tcheck_wb(wb);\n\tvar o = dup(opts||{});\n\tif(o.cellStyles) { o.cellNF = true; o.sheetStubs = true; }\n\tif(o.type == \"array\") { o.type = \"binary\"; var out/*:string*/ = (writeSync(wb, o)/*:any*/); o.type = \"array\"; return s2ab(out); }\n\tvar idx = 0;\n\tif(o.sheet) {\n\t\tif(typeof o.sheet == \"number\") idx = o.sheet;\n\t\telse idx = wb.SheetNames.indexOf(o.sheet);\n\t\tif(!wb.SheetNames[idx]) throw new Error(\"Sheet not found: \" + o.sheet + \" : \" + (typeof o.sheet));\n\t}\n\tswitch(o.bookType || 'xlsb') {\n\t\tcase 'xml':\n\t\tcase 'xlml': return write_string_type(write_xlml(wb, o), o);\n\t\tcase 'slk':\n\t\tcase 'sylk': return write_string_type(SYLK.from_sheet(wb.Sheets[wb.SheetNames[idx]], o, wb), o);\n\t\tcase 'htm':\n\t\tcase 'html': return write_string_type(sheet_to_html(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'txt': return write_stxt_type(sheet_to_txt(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'csv': return write_string_type(sheet_to_csv(wb.Sheets[wb.SheetNames[idx]], o), o, \"\\ufeff\");\n\t\tcase 'dif': return write_string_type(DIF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'dbf': return write_binary_type(DBF.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'prn': return write_string_type(PRN.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'rtf': return write_string_type(sheet_to_rtf(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'eth': return write_string_type(ETH.from_sheet(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'fods': return write_string_type(write_ods(wb, o), o);\n\t\tcase 'wk1': return write_binary_type(WK_.sheet_to_wk1(wb.Sheets[wb.SheetNames[idx]], o), o);\n\t\tcase 'wk3': return write_binary_type(WK_.book_to_wk3(wb, o), o);\n\t\tcase 'biff2': if(!o.biff) o.biff = 2; /* falls through */\n\t\tcase 'biff3': if(!o.biff) o.biff = 3; /* falls through */\n\t\tcase 'biff4': if(!o.biff) o.biff = 4; return write_binary_type(write_biff_buf(wb, o), o);\n\t\tcase 'biff5': if(!o.biff) o.biff = 5; /* falls through */\n\t\tcase 'biff8':\n\t\tcase 'xla':\n\t\tcase 'xls': if(!o.biff) o.biff = 8; return write_cfb_type(wb, o);\n\t\tcase 'xlsx':\n\t\tcase 'xlsm':\n\t\tcase 'xlam':\n\t\tcase 'xlsb':\n\t\tcase 'numbers':\n\t\tcase 'ods': return write_zip_type(wb, o);\n\t\tdefault: throw new Error (\"Unrecognized bookType |\" + o.bookType + \"|\");\n\t}\n}\n\nfunction resolve_book_type(o/*:WriteFileOpts*/) {\n\tif(o.bookType) return;\n\tvar _BT = {\n\t\t\"xls\": \"biff8\",\n\t\t\"htm\": \"html\",\n\t\t\"slk\": \"sylk\",\n\t\t\"socialcalc\": \"eth\",\n\t\t\"Sh33tJS\": \"WTF\"\n\t};\n\tvar ext = o.file.slice(o.file.lastIndexOf(\".\")).toLowerCase();\n\tif(ext.match(/^\\.[a-z]+$/)) o.bookType = ext.slice(1);\n\to.bookType = _BT[o.bookType] || o.bookType;\n}\n\nfunction writeFileSync(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSync(wb, o);\n}\n\nfunction writeFileSyncXLSX(wb/*:Workbook*/, filename/*:string*/, opts/*:?WriteFileOpts*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\treturn writeSyncXLSX(wb, o);\n}\n\n\nfunction writeFileAsync(filename/*:string*/, wb/*:Workbook*/, opts/*:?WriteFileOpts*/, cb/*:?(e?:ErrnoError)=>void*/) {\n\tvar o = opts||{}; o.type = 'file';\n\to.file = filename;\n\tresolve_book_type(o);\n\to.type = 'buffer';\n\tvar _cb = cb; if(!(_cb instanceof Function)) _cb = (opts/*:any*/);\n\treturn _fs.writeFile(filename, writeSync(wb, o), _cb);\n}\n/*::\ntype MJRObject = {\n\trow: any;\n\tisempty: boolean;\n};\n*/\nfunction make_json_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, header/*:number*/, hdr/*:Array*/, o/*:Sheet2JSONOpts*/)/*:MJRObject*/ {\n\tvar rr = encode_row(R);\n\tvar defval = o.defval, raw = o.raw || !Object.prototype.hasOwnProperty.call(o, \"raw\");\n\tvar isempty = true, dense = (sheet[\"!data\"] != null);\n\tvar row/*:any*/ = (header === 1) ? [] : {};\n\tif(header !== 1) {\n\t\tif(Object.defineProperty) try { Object.defineProperty(row, '__rowNum__', {value:R, enumerable:false}); } catch(e) { row.__rowNum__ = R; }\n\t\telse row.__rowNum__ = R;\n\t}\n\tif(!dense || sheet[\"!data\"][R]) for (var C = r.s.c; C <= r.e.c; ++C) {\n\t\tvar val = dense ? (sheet[\"!data\"][R]||[])[C] : sheet[cols[C] + rr];\n\t\tif(val == null || val.t === undefined) {\n\t\t\tif(defval === undefined) continue;\n\t\t\tif(hdr[C] != null) { row[hdr[C]] = defval; }\n\t\t\tcontinue;\n\t\t}\n\t\tvar v = val.v;\n\t\tswitch(val.t){\n\t\t\tcase 'z': if(v == null) break; continue;\n\t\t\tcase 'e': v = (v == 0 ? null : void 0); break;\n\t\t\tcase 's': case 'b':\n\t\t\tcase 'n': if(!val.z || !fmt_is_date(val.z)) break;\n\t\t\tv = numdate(v); // TODO: date1904 setting should also be stored in worksheet object\n\t\t\tif(typeof v == \"number\") break;\n\t\t\t/* falls through */\n\t\t\tcase 'd': if(!(o && (o.UTC||(o.raw === false)))) v = utc_to_local(new Date(v)); break;\n\t\t\tdefault: throw new Error('unrecognized type ' + val.t);\n\t\t}\n\t\tif(hdr[C] != null) {\n\t\t\tif(v == null) {\n\t\t\t\tif(val.t == \"e\" && v === null) row[hdr[C]] = null;\n\t\t\t\telse if(defval !== undefined) row[hdr[C]] = defval;\n\t\t\t\telse if(raw && v === null) row[hdr[C]] = null;\n\t\t\t\telse continue;\n\t\t\t} else {\n\t\t\t\trow[hdr[C]] = (val.t === 'n' && typeof o.rawNumbers === 'boolean' ? o.rawNumbers : raw) ? v : format_cell(val, v, o);\n\t\t\t}\n\t\t\tif(v != null) isempty = false;\n\t\t}\n\t}\n\treturn { row: row, isempty: isempty };\n}\n\n\nfunction sheet_to_json(sheet/*:Worksheet*/, opts/*:?Sheet2JSONOpts*/) {\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\telse if(o.header == null) header = 0;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar out/*:Array*/ = [];\n\tvar outi = 0, counter = 0;\n\tvar dense = sheet[\"!data\"] != null;\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[\"!data\"][R]) sheet[\"!data\"][R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[\"!data\"][R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tfor (R = r.s.r + offset; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, o);\n\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) out[outi++] = row.row;\n\t}\n\tout.length = outi;\n\treturn out;\n}\n\nvar qreg = /\"/g;\nfunction make_csv_row(sheet/*:Worksheet*/, r/*:Range*/, R/*:number*/, cols/*:Array*/, fs/*:number*/, rs/*:number*/, FS/*:string*/, o/*:Sheet2CSVOpts*/)/*:?string*/ {\n\tvar isempty = true;\n\tvar row/*:Array*/ = [], txt = \"\", rr = encode_row(R);\n\tvar dense = sheet[\"!data\"] != null;\n\tvar datarow = dense && sheet[\"!data\"][R] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\tif (!cols[C]) continue;\n\t\tvar val = dense ? datarow[C]: sheet[cols[C] + rr];\n\t\tif(val == null) txt = \"\";\n\t\telse if(val.v != null) {\n\t\t\tisempty = false;\n\t\t\ttxt = ''+(o.rawNumbers && val.t == \"n\" ? val.v : format_cell(val, null, o));\n\t\t\tfor(var i = 0, cc = 0; i !== txt.length; ++i) if((cc = txt.charCodeAt(i)) === fs || cc === rs || cc === 34 || o.forceQuotes) {txt = \"\\\"\" + txt.replace(qreg, '\"\"') + \"\\\"\"; break; }\n\t\t\tif(txt == \"ID\") txt = '\"ID\"';\n\t\t} else if(val.f != null && !val.F) {\n\t\t\tisempty = false;\n\t\t\ttxt = '=' + val.f; if(txt.indexOf(\",\") >= 0) txt = '\"' + txt.replace(qreg, '\"\"') + '\"';\n\t\t} else txt = \"\";\n\t\t/* NOTE: Excel CSV does not support array formulae */\n\t\trow.push(txt);\n\t}\n\tif(o.strip) while(row[row.length - 1] === \"\") --row.length;\n\tif(o.blankrows === false && isempty) return null;\n\treturn row.join(FS);\n}\n\nfunction sheet_to_csv(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/)/*:string*/ {\n\tvar out/*:Array*/ = [];\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) return \"\";\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar row = \"\", cols/*:Array*/ = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar w = 0;\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\tif ((rowinfo[R]||{}).hidden) continue;\n\t\trow = make_csv_row(sheet, r, R, cols, fs, rs, FS, o);\n\t\tif(row == null) { continue; }\n\t\tif(row || (o.blankrows !== false)) out.push((w++ ? RS : \"\") + row);\n\t}\n\treturn out.join(\"\");\n}\n\nfunction sheet_to_txt(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tif(!opts) opts = {}; opts.FS = \"\\t\"; opts.RS = \"\\n\";\n\tvar s = sheet_to_csv(sheet, opts);\n\tif(typeof $cptable == 'undefined' || opts.type == 'string') return s;\n\tvar o = $cptable.utils.encode(1200, s, 'str');\n\treturn String.fromCharCode(255) + String.fromCharCode(254) + o;\n}\n\nfunction sheet_to_formulae(sheet/*:Worksheet*/)/*:Array*/ {\n\tvar y = \"\", x, val=\"\";\n\tif(sheet == null || sheet[\"!ref\"] == null) return [];\n\tvar r = safe_decode_range(sheet['!ref']), rr = \"\", cols/*:Array*/ = [], C;\n\tvar cmds/*:Array*/ = [];\n\tvar dense = sheet[\"!data\"] != null;\n\tfor(C = r.s.c; C <= r.e.c; ++C) cols[C] = encode_col(C);\n\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\ty = cols[C] + rr;\n\t\t\tx = dense ? (sheet[\"!data\"][R]||[])[C] : sheet[y];\n\t\t\tval = \"\";\n\t\t\tif(x === undefined) continue;\n\t\t\telse if(x.F != null) {\n\t\t\t\ty = x.F;\n\t\t\t\tif(!x.f) continue;\n\t\t\t\tval = x.f;\n\t\t\t\tif(y.indexOf(\":\") == -1) y = y + \":\" + y;\n\t\t\t}\n\t\t\tif(x.f != null) val = x.f;\n\t\t\telse if(x.t == 'z') continue;\n\t\t\telse if(x.t == 'n' && x.v != null) val = \"\" + x.v;\n\t\t\telse if(x.t == 'b') val = x.v ? \"TRUE\" : \"FALSE\";\n\t\t\telse if(x.w !== undefined) val = \"'\" + x.w;\n\t\t\telse if(x.v === undefined) continue;\n\t\t\telse if(x.t == 's') val = \"'\" + x.v;\n\t\t\telse val = \"\"+x.v;\n\t\t\tcmds[cmds.length] = y + \"=\" + val;\n\t\t}\n\t}\n\treturn cmds;\n}\n\nfunction sheet_add_json(_ws/*:?Worksheet*/, js/*:Array*/, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? (_ws[\"!data\"] != null) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar offset = +!o.skipHeader;\n\tvar ws/*:Worksheet*/ = _ws || ({});\n\tif(!_ws && dense) ws[\"!data\"] = [];\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t}\n\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:_C, r:_R + js.length - 1 + offset}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) { _R = _range.e.r + 1; range.e.r = _R + js.length - 1 + offset; }\n\t} else {\n\t\tif(_R == -1) { _R = 0; range.e.r = js.length - 1 + offset; }\n\t}\n\tvar hdr/*:Array*/ = o.header || [], C = 0;\n\tvar ROW = [];\n\tjs.forEach(function (JS, R/*:number*/) {\n\t\tif(dense && !ws[\"!data\"][_R + R + offset]) ws[\"!data\"][_R + R + offset] = [];\n\t\tif(dense) ROW = ws[\"!data\"][_R + R + offset];\n\t\tkeys(JS).forEach(function(k) {\n\t\t\tif((C=hdr.indexOf(k)) == -1) hdr[C=hdr.length] = k;\n\t\t\tvar v = JS[k];\n\t\t\tvar t = 'z';\n\t\t\tvar z = \"\";\n\t\t\tvar ref = dense ? \"\" : (encode_col(_C + C) + encode_row(_R + R + offset));\n\t\t\tvar cell/*:Cell*/ = dense ? ROW[_C + C] : ws[ref];\n\t\t\tif(v && typeof v === 'object' && !(v instanceof Date)){\n\t\t\t\tif(dense) ROW[_C + C] = v;\n\t\t\t\telse ws[ref] = v;\n\t\t\t} else {\n\t\t\t\tif(typeof v == 'number') t = 'n';\n\t\t\t\telse if(typeof v == 'boolean') t = 'b';\n\t\t\t\telse if(typeof v == 'string') t = 's';\n\t\t\t\telse if(v instanceof Date) {\n\t\t\t\t\tt = 'd';\n\t\t\t\t\tif(!o.UTC) v = local_to_utc(v);\n\t\t\t\t\tif(!o.cellDates) { t = 'n'; v = datenum(v); }\n\t\t\t\t\tz = (cell != null && cell.z && fmt_is_date(cell.z)) ? cell.z : (o.dateNF || table_fmt[14]);\n\t\t\t\t}\n\t\t\t\telse if(v === null && o.nullError) { t = 'e'; v = 0; }\n\t\t\t\tif(!cell) {\n\t\t\t\t\tif(!dense) ws[ref] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\t\telse ROW[_C + C] = cell = ({t:t, v:v}/*:any*/);\n\t\t\t\t} else {\n\t\t\t\t\tcell.t = t; cell.v = v;\n\t\t\t\t\tdelete cell.w; delete cell.R;\n\t\t\t\t\tif(z) cell.z = z;\n\t\t\t\t}\n\t\t\t\tif(z) cell.z = z;\n\t\t\t}\n\t\t});\n\t});\n\trange.e.c = Math.max(range.e.c, _C + hdr.length - 1);\n\tvar __R = encode_row(_R);\n\tif(dense && !ws[\"!data\"][_R]) ws[\"!data\"][_R] = [];\n\tif(offset) for(C = 0; C < hdr.length; ++C) {\n\t\tif(dense) ws[\"!data\"][_R][C + _C] = {t:'s', v:hdr[C]};\n\t\telse ws[encode_col(C + _C) + __R] = {t:'s', v:hdr[C]};\n\t}\n\tws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction json_to_sheet(js/*:Array*/, opts)/*:Worksheet*/ { return sheet_add_json(null, js, opts); }\n\n/* get cell, creating a stub if necessary */\nfunction ws_get_cell_stub(ws/*:Worksheet*/, R, C/*:?number*/)/*:Cell*/ {\n\t/* A1 cell address */\n\tif(typeof R == \"string\") {\n\t\tif(ws[\"!data\"] != null) {\n\t\t\tvar RC = decode_cell(R);\n\t\t\tif(!ws[\"!data\"][RC.r]) ws[\"!data\"][RC.r] = [];\n\t\t\treturn ws[\"!data\"][RC.r][RC.c] || (ws[\"!data\"][RC.r][RC.c] = {t:'z'});\n\t\t}\n\t\treturn ws[R] || (ws[R] = {t:'z'});\n\t}\n\t/* cell address object */\n\tif(typeof R != \"number\") return ws_get_cell_stub(ws, encode_cell(R));\n\t/* R and C are 0-based indices */\n\treturn ws_get_cell_stub(ws, encode_col(C||0) + encode_row(R));\n}\n\n/* find sheet index for given name / validate index */\nfunction wb_sheet_idx(wb/*:Workbook*/, sh/*:number|string*/) {\n\tif(typeof sh == \"number\") {\n\t\tif(sh >= 0 && wb.SheetNames.length > sh) return sh;\n\t\tthrow new Error(\"Cannot find sheet # \" + sh);\n\t} else if(typeof sh == \"string\") {\n\t\tvar idx = wb.SheetNames.indexOf(sh);\n\t\tif(idx > -1) return idx;\n\t\tthrow new Error(\"Cannot find sheet name |\" + sh + \"|\");\n\t} else throw new Error(\"Cannot find sheet |\" + sh + \"|\");\n}\n\n/* simple blank or single-sheet workbook object */\nfunction book_new(ws/*:?Worksheet*/, wsname/*:?string*/)/*:Workbook*/ {\n\tvar wb = { SheetNames: [], Sheets: {} };\n\tif(ws) book_append_sheet(wb, ws, wsname || \"Sheet1\");\n\treturn wb;\n}\n\n/* add a worksheet to the end of a given workbook */\nfunction book_append_sheet(wb/*:Workbook*/, ws/*:Worksheet*/, name/*:?string*/, roll/*:?boolean*/)/*:string*/ {\n\tvar i = 1;\n\tif(!name) for(; i <= 0xFFFF; ++i, name = undefined) if(wb.SheetNames.indexOf(name = \"Sheet\" + i) == -1) break;\n\tif(!name || wb.SheetNames.length >= 0xFFFF) throw new Error(\"Too many worksheets\");\n\tif(roll && wb.SheetNames.indexOf(name) >= 0 && name.length < 32) {\n\t\tvar m = name.match(/\\d+$/); // at this point, name length is capped at 32\n\t\ti = m && +m[0] || 0;\n\t\tvar root = m && name.slice(0, m.index) || name;\n\t\tfor(++i; i <= 0xFFFF; ++i) if(wb.SheetNames.indexOf(name = root + i) == -1) break;\n\t}\n\tcheck_ws_name(name);\n\tif(wb.SheetNames.indexOf(name) >= 0) throw new Error(\"Worksheet with name |\" + name + \"| already exists!\");\n\n\twb.SheetNames.push(name);\n\twb.Sheets[name] = ws;\n\treturn name;\n}\n\n/* set sheet visibility (visible/hidden/very hidden) */\nfunction book_set_sheet_visibility(wb/*:Workbook*/, sh/*:number|string*/, vis/*:number*/) {\n\tif(!wb.Workbook) wb.Workbook = {};\n\tif(!wb.Workbook.Sheets) wb.Workbook.Sheets = [];\n\n\tvar idx = wb_sheet_idx(wb, sh);\n\t// $FlowIgnore\n\tif(!wb.Workbook.Sheets[idx]) wb.Workbook.Sheets[idx] = {};\n\n\tswitch(vis) {\n\t\tcase 0: case 1: case 2: break;\n\t\tdefault: throw new Error(\"Bad sheet visibility setting \" + vis);\n\t}\n\t// $FlowIgnore\n\twb.Workbook.Sheets[idx].Hidden = vis;\n}\n\n/* set number format */\nfunction cell_set_number_format(cell/*:Cell*/, fmt/*:string|number*/) {\n\tcell.z = fmt;\n\treturn cell;\n}\n\n/* set cell hyperlink */\nfunction cell_set_hyperlink(cell/*:Cell*/, target/*:string*/, tooltip/*:?string*/) {\n\tif(!target) {\n\t\tdelete cell.l;\n\t} else {\n\t\tcell.l = ({ Target: target }/*:Hyperlink*/);\n\t\tif(tooltip) cell.l.Tooltip = tooltip;\n\t}\n\treturn cell;\n}\nfunction cell_set_internal_link(cell/*:Cell*/, range/*:string*/, tooltip/*:?string*/) { return cell_set_hyperlink(cell, \"#\" + range, tooltip); }\n\n/* add to cell comments */\nfunction cell_add_comment(cell/*:Cell*/, text/*:string*/, author/*:?string*/) {\n\tif(!cell.c) cell.c = [];\n\tcell.c.push({t:text, a:author||\"SheetJS\"});\n}\n\n/* set array formula and flush related cells */\nfunction sheet_set_array_formula(ws/*:Worksheet*/, range, formula/*:string*/, dynamic/*:boolean*/) {\n\tvar rng = typeof range != \"string\" ? range : safe_decode_range(range);\n\tvar rngstr = typeof range == \"string\" ? range : encode_range(range);\n\tfor(var R = rng.s.r; R <= rng.e.r; ++R) for(var C = rng.s.c; C <= rng.e.c; ++C) {\n\t\tvar cell = ws_get_cell_stub(ws, R, C);\n\t\tcell.t = 'n';\n\t\tcell.F = rngstr;\n\t\tdelete cell.v;\n\t\tif(R == rng.s.r && C == rng.s.c) {\n\t\t\tcell.f = formula;\n\t\t\tif(dynamic) cell.D = true;\n\t\t}\n\t}\n\tvar wsr = decode_range(ws[\"!ref\"]);\n\tif(wsr.s.r > rng.s.r) wsr.s.r = rng.s.r;\n\tif(wsr.s.c > rng.s.c) wsr.s.c = rng.s.c;\n\tif(wsr.e.r < rng.e.r) wsr.e.r = rng.e.r;\n\tif(wsr.e.c < rng.e.c) wsr.e.c = rng.e.c;\n\tws[\"!ref\"] = encode_range(wsr);\n\treturn ws;\n}\n\nvar utils/*:any*/ = {\n\tencode_col: encode_col,\n\tencode_row: encode_row,\n\tencode_cell: encode_cell,\n\tencode_range: encode_range,\n\tdecode_col: decode_col,\n\tdecode_row: decode_row,\n\tsplit_cell: split_cell,\n\tdecode_cell: decode_cell,\n\tdecode_range: decode_range,\n\tformat_cell: format_cell,\n\tsheet_new: sheet_new,\n\tsheet_add_aoa: sheet_add_aoa,\n\tsheet_add_json: sheet_add_json,\n\tsheet_add_dom: sheet_add_dom,\n\taoa_to_sheet: aoa_to_sheet,\n\tjson_to_sheet: json_to_sheet,\n\ttable_to_sheet: parse_dom_table,\n\ttable_to_book: table_to_book,\n\tsheet_to_csv: sheet_to_csv,\n\tsheet_to_txt: sheet_to_txt,\n\tsheet_to_json: sheet_to_json,\n\tsheet_to_html: sheet_to_html,\n\tsheet_to_formulae: sheet_to_formulae,\n\tsheet_to_row_object_array: sheet_to_json,\n\tsheet_get_cell: ws_get_cell_stub,\n\tbook_new: book_new,\n\tbook_append_sheet: book_append_sheet,\n\tbook_set_sheet_visibility: book_set_sheet_visibility,\n\tcell_set_number_format: cell_set_number_format,\n\tcell_set_hyperlink: cell_set_hyperlink,\n\tcell_set_internal_link: cell_set_internal_link,\n\tcell_add_comment: cell_add_comment,\n\tsheet_set_array_formula: sheet_set_array_formula,\n\tconsts: {\n\t\tSHEET_VISIBLE: 0,\n\t\tSHEET_HIDDEN: 1,\n\t\tSHEET_VERY_HIDDEN: 2\n\t}\n};\n\nvar _Readable;\nfunction set_readable(R) { _Readable = R; }\n\nfunction write_csv_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable();\n\tvar o = opts == null ? {} : opts;\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar r = safe_decode_range(sheet[\"!ref\"]);\n\tvar FS = o.FS !== undefined ? o.FS : \",\", fs = FS.charCodeAt(0);\n\tvar RS = o.RS !== undefined ? o.RS : \"\\n\", rs = RS.charCodeAt(0);\n\tvar row/*:?string*/ = \"\", cols/*:Array*/ = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(var C = r.s.c; C <= r.e.c; ++C) if (!((colinfo[C]||{}).hidden)) cols[C] = encode_col(C);\n\tvar R = r.s.r;\n\tvar BOM = false, w = 0;\n\tstream._read = function() {\n\t\tif(!BOM) { BOM = true; return stream.push(\"\\uFEFF\"); }\n\t\twhile(R <= r.e.r) {\n\t\t\t++R;\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\trow = make_csv_row(sheet, r, R-1, cols, fs, rs, FS, o);\n\t\t\tif(row != null) {\n\t\t\t\tif(row || (o.blankrows !== false)) return stream.push((w++ ? RS : \"\") + row);\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nfunction write_html_stream(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*/) {\n\tvar stream = _Readable();\n\n\tvar o = opts || {};\n\tvar header = o.header != null ? o.header : HTML_BEGIN;\n\tvar footer = o.footer != null ? o.footer : HTML_END;\n\tstream.push(header);\n\tvar r = decode_range(ws['!ref']);\n\tstream.push(make_html_preamble(ws, r, o));\n\tvar R = r.s.r;\n\tvar end = false;\n\tstream._read = function() {\n\t\tif(R > r.e.r) {\n\t\t\tif(!end) { end = true; stream.push(\"\" + footer); }\n\t\t\treturn stream.push(null);\n\t\t}\n\t\twhile(R <= r.e.r) {\n\t\t\tstream.push(make_html_row(ws, r, R, o));\n\t\t\t++R;\n\t\t\tbreak;\n\t\t}\n\t};\n\treturn stream;\n}\n\nfunction write_json_stream(sheet/*:Worksheet*/, opts/*:?Sheet2CSVOpts*/) {\n\tvar stream = _Readable({objectMode:true});\n\n\tif(sheet == null || sheet[\"!ref\"] == null) { stream.push(null); return stream; }\n\tvar val = {t:'n',v:0}, header = 0, offset = 1, hdr/*:Array*/ = [], v=0, vv=\"\";\n\tvar r = {s:{r:0,c:0},e:{r:0,c:0}};\n\tvar o = opts || {};\n\tvar range = o.range != null ? o.range : sheet[\"!ref\"];\n\tif(o.header === 1) header = 1;\n\telse if(o.header === \"A\") header = 2;\n\telse if(Array.isArray(o.header)) header = 3;\n\tswitch(typeof range) {\n\t\tcase 'string': r = safe_decode_range(range); break;\n\t\tcase 'number': r = safe_decode_range(sheet[\"!ref\"]); r.s.r = range; break;\n\t\tdefault: r = range;\n\t}\n\tif(header > 0) offset = 0;\n\tvar rr = encode_row(r.s.r);\n\tvar cols/*:Array*/ = [];\n\tvar counter = 0;\n\tvar dense = sheet[\"!data\"] != null;\n\tvar R = r.s.r, C = 0;\n\tvar header_cnt = {};\n\tif(dense && !sheet[\"!data\"][R]) sheet[\"!data\"][R] = [];\n\tvar colinfo/*:Array*/ = o.skipHidden && sheet[\"!cols\"] || [];\n\tvar rowinfo/*:Array*/ = o.skipHidden && sheet[\"!rows\"] || [];\n\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\tif(((colinfo[C]||{}).hidden)) continue;\n\t\tcols[C] = encode_col(C);\n\t\tval = dense ? sheet[\"!data\"][R][C] : sheet[cols[C] + rr];\n\t\tswitch(header) {\n\t\t\tcase 1: hdr[C] = C - r.s.c; break;\n\t\t\tcase 2: hdr[C] = cols[C]; break;\n\t\t\tcase 3: hdr[C] = o.header[C - r.s.c]; break;\n\t\t\tdefault:\n\t\t\t\tif(val == null) val = {w: \"__EMPTY\", t: \"s\"};\n\t\t\t\tvv = v = format_cell(val, null, o);\n\t\t\t\tcounter = header_cnt[v] || 0;\n\t\t\t\tif(!counter) header_cnt[v] = 1;\n\t\t\t\telse {\n\t\t\t\t\tdo { vv = v + \"_\" + (counter++); } while(header_cnt[vv]); header_cnt[v] = counter;\n\t\t\t\t\theader_cnt[vv] = 1;\n\t\t\t\t}\n\t\t\t\thdr[C] = vv;\n\t\t}\n\t}\n\tR = r.s.r + offset;\n\tstream._read = function() {\n\t\twhile(R <= r.e.r) {\n\t\t\tif ((rowinfo[R-1]||{}).hidden) continue;\n\t\t\tvar row = make_json_row(sheet, r, R, cols, header, hdr, o);\n\t\t\t++R;\n\t\t\tif((row.isempty === false) || (header === 1 ? o.blankrows !== false : !!o.blankrows)) {\n\t\t\t\tstream.push(row.row);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\treturn stream.push(null);\n\t};\n\treturn stream;\n}\n\nvar __stream = {\n\tto_json: write_json_stream,\n\tto_html: write_html_stream,\n\tto_csv: write_csv_stream,\n\tset_readable: set_readable\n};\nexport const version = XLSX.version;\nexport {\n\tparse_xlscfb,\n\tparse_zip,\n\treadSync as read,\n\treadFileSync as readFile,\n\treadFileSync,\n\twriteSync as write,\n\twriteFileSync as writeFile,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteSyncXLSX as writeXLSX,\n\twriteFileSyncXLSX as writeFileXLSX,\n\tutils,\n\tset_fs,\n\tset_cptable,\n\t__stream as stream,\n\tSSF,\n\tCFB\n};\nexport default {\n\tparse_xlscfb,\n\tparse_zip,\n\tread: readSync,\n\treadFile: readFileSync,\n\treadFileSync,\n\twrite: writeSync,\n\twriteFile: writeFileSync,\n\twriteFileSync,\n\twriteFileAsync,\n\twriteXLSX: writeSyncXLSX,\n\twriteFileXLSX: writeFileSyncXLSX,\n\tutils,\n\tset_fs,\n\tset_cptable,\n\tstream: __stream,\n\tSSF,\n\tCFB\n}\n"],"names":["$cptable","XLSX","current_codepage","current_ansi","VALID_ANSI","CS2CP","set_ansi","cp","indexOf","set_cp","reset_cp","char_codes","data","o","i","len","length","charCodeAt","utf16leread","String","fromCharCode","join","utf16beread","debom","c1","c2","slice","_getchar","x","_getansi","set_cptable","cptable","utils","decode","cpdoit","DENSE","Base64_map","Base64_encode","input","c3","e1","e2","e3","e4","isNaN","charAt","Base64_decode","replace","has_buf","Buffer","process","versions","node","Buffer_from","nbfs","from","e","buf","enc","bind","buf_utf16le","toString","new_raw_buf","alloc","Uint8Array","Array","new_unsafe_buf","allocUnsafe","s2a","s","split","map","s2ab","ArrayBuffer","view","a2s","isArray","c","ab2a","Error","bconcat","bufs","concat","isBuffer","maxlen","set","apply","call","chr0","chr1","_strrev","pad0","v","d","t","fill","pad_","rpad_","p2_32","Math","pow","pad0r","round","pad0r1","pad0r2","SSF_isgeneral","days","months","table_fmt","SSF_default_map","SSF_default_str","SSF_frac","D","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","A","floor","q","SSF_parse_date_code","opts","b2","date","toPrecision","m","n","Number","SSF_normalize_xl_unsafe","time","dow","dout","out","T","u","y","H","M","S","abs","date1904","Date","setDate","getDate","getFullYear","getMonth","getDay","SSF_fix_hijri","SSF_strip_decimal","SSF_general_num","V","log","LOG10E","w","toFixed","toExponential","SSF_small_exp","substr","SSF_large_exp","SSF_normalize_exp","toUpperCase","SSF_general","SSF_format","datenum","SSF_write_date","type","fmt","val","ss0","ss","tt","outl","commaify","j","pct1","write_num_exp","idx","match","period","ee","fakee","$$","$1","$2","$3","frac1","dec1","closeparen","phone","hashq","str","cc","rnd","dd","dec","_frac","write_num_flt","ffmt","write_num","write_num_cm","sfmt","mul","write_num_pct","r","ri","ff","aval","sign","den","parseInt","rr","base","myn","myd","write_num_f1","carry","oa","min","max","lres","rres","flr","write_num_exp2","write_num_int","write_num_cm2","write_num_pct2","write_num_f2","lastIndexOf","SSF_abstime","fmt_is_date","cfregex2","chkcond","thresh","parseFloat","dateNF","table","f","in_str","SSF_split_fmt","l","lat","m1","m2","choose_fmt","flen","dt","lst","hr","toLowerCase","ssm","_dt","bt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","eval_fmt","SSF_load","undefined","SSF_load_table","tbl","make_ssf","SSF","format","load","_table","load_table","parse_date_code","is_date","get_table","SSFImplicit","dateNFregex","bad_formats","SSF__load","_fs","CRC32","T0","Int32Array","signed_crc_table","TT","subarray","slice_by_16_tables","T1","T2","T3","T4","T5","T6","T7","T8","T9","Ta","Tb","Tc","Td","Te","Tf","bstr","seed","C","L","CFB","fs","exports","dirname","p","filename","write_dos_date","hms","getHours","getMinutes","getSeconds","write_shift","ymd","parse_extra_field","blob","prep_blob","flags","read_shift","sz","tgt","mtime","atime","ctime","mt","sz1","sz2","usz","csz","get_fs","parse","file","options","parse_zip","root","di","row","test","mboundary","boundary","FileIndex","FullPaths","init_cfb","start_di","fcnt","line","parse_mime","parse_mad","mver","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","ssz","fat_addrs","mv","chk","HEADER_SIGNATURE","check_get_mver","header","shift","check_shifts","dir_cnt","sectors","nsectors","ceil","sectorify","sleuth_fat","sector_list","sl","chkd","buf_chain","modulus","k","seen","push","addr","__readInt32LE","nodes","__toBuffer","make_sector_list","name","ENDOFCHAIN","Paths","files","mini","minifat_store","pl","sector","namelen","__utf16le","color","R","clsid","state","start","size","ct","read_date","storage","get_sector_list","content","get_mfat_entry","read_directory","FI","FP","dad","build_full_paths","raw","entry","payload","MSSZ","new_buf","cnt","offset","__readUInt32LE","cfb","CLSID","nm","find","rebuild_cfb","seed_cfb","gc","_file","pop","now","fullPaths","Object","create","HEADER_CLSID","sort","Z","namecmp","elt","_write","_opts","fileType","fp","fi","ca","cstr","dispcnt","csl","qp","get_content_type","write_quoted_printable","write_base64_76","write_mad","cdirs","method","compression","start_cd","crcs","sz_cd","namebuf","outbuf","_zlib","deflateRawSync","_deflate","write_zip","mini_size","fat_size","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","console","error","copy","version","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","CLEN_ORDER","LEN_LN","DST_LN","use_typed_arrays","bitswap8","bit_swap_n","b","rev","read_bits_2","bl","h","read_bits_3","read_bits_5","read_bits_7","read_bits_n","write_bits_3","write_bits_1","write_bits_8","write_bits_16","realloc","a","zero_fill_array","build_tree","clens","cmap","MAX","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","_deflateRaw","DST_LN_RE","LEN_LN_RE","boff","write_stored","addrs","hash","mlen","len_eb","dst_eb","write_huff_fixed","off","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","read_bits_4","next_code","hcodes","h1","h2","_inflate","woff","OL","max_len_1","max_len_2","bits","code","dst","inflate","warn_or_throw","wrn","msg","efsz","fcsz","EF","parse_local_file","meth","setMilliseconds","setFullYear","setMonth","setHours","setMinutes","setSeconds","parse_dos_date","_csz","_usz","ef","InflRaw","InflateRaw","_processChunk","_finishFlushFlag","bytesRead","_inflateRawSync","cfb_add","unsafe","ContentTypeMap","ctype","ext","text","encoded","si","end","tmp","fdata","fname","cte","trim","oi","parse_quoted_printable","fpath","cfb_gc","path","UCFullPaths","UCPaths","UCPath","read","readFileSync","read_file","write","writeFileSync","writeFile","cfb_new","cfb_del","splice","cfb_mov","old_name","new_name","ReadShift","CheckField","use_zlib","zlib","message","_inflateRaw","set_fs","blobify","a2u","write_dl","Deno","TextEncoder","encode","utf8write","IE_SaveFile","Blob","navigator","msSaveBlob","saveAs","URL","document","createElement","createObjectURL","url","chrome","downloads","download","revokeObjectURL","setTimeout","href","body","appendChild","click","removeChild","b64","Base64_encode_arr","$","File","Folder","open","encoding","close","keys","ks","o2","prototype","hasOwnProperty","evert_key","obj","key","K","evert","evert_num","dnthresh","UTC","dnthresh1","dnthresh2","res","getTime","numdate","setTime","parse_isodur","sec","pdre1","pdre2","pdre3","parseDate","cc2str","arr","debomit","TextDecoder","dup","JSON","stringify","fuzzynum","isFinite","NaN","wt","FDRE1","FDRE2","FDISO","utc_append_works","valueOf","lower_months","fuzzydate","local_to_utc","lower","lnos","fuzzytime1","fuzzytime2","getYear","split_regex","safe_split_regex","re","def","utc_to_local","utc","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","local","getMilliseconds","remove_doctype","index","str_match_ng","ei","str_remove_ng","last","xml_boundary","str_match_xml","tag","sf","et","str_match_xml_ns","str_match_xml_ns_cache","RegExp","lastIndex","exec","str_match_xml_ns_g","str_remove_xml_ns_g","str_remove_xml_ns_cache","str_match_xml_ig","getdatastr","asNodeBuffer","asBinary","_data","getContent","getdatabin","safegetzipfile","zip","g","getzipfile","getzipdata","safe","getzipstr","getzipbin","zipentries","zip_add_file","widx","ridx","utf8decode","zip_new","zip_read","resolve_path","result","target","step","XML_HEADER","attregexg","tagregex1","tagregex","nsregex","nsregex2","parsexmltag","skip_root","skip_LC","z","eq","quot","strip_ns","encodings","rencoding","unescapexml","encregex","coderegex","raw_unescapexml","xlsx","decregex","charegex","escapexml","escapexmltag","htmlcharegex","escapehtml","xlml_fixstr","entregex","entrepl","parsexmlbool","value","utf8reada","orig","utf8readb","ww","utf8readc","utf8corpus","utf8read","htmldecode","entities","vtvregex","vtmregex","parseVector","matches","baseType","WTF","forEach","wtregex","writetag","wxt_helper","writextag","write_w3cdtf","toISOString","xlml_normalize","xlmlregex","XMLNS","CORE_PROPS","CUST_PROPS","EXT_PROPS","CT","RELS","TCMNT","XMLNS_main","XLMLNS","___toBuffer","___utf16le","__readUInt16LE","___hexlify","__hexlify","___utf8","__readUInt8","__utf8","___lpstr","__lpstr","___cpstr","__cpstr","___lpwstr","__lpwstr","___lpp4","__lpp4","___8lpp4","__8lpp4","___double","Infinity","read_double_le","__double","is_buf","readUInt32LE","readDoubleLE","__readInt16LE","__readInt32BE","oI","oR","loc","oo","this","lens","__writeUInt32LE","__writeInt32LE","__writeUInt16LE","WriteShift","cpp","bs","av","LN2","write_double_le","hexstr","fld","pos","parsenoop","recordhopper","cb","tmpbyte","cntbyte","RT","XLSBRecordEnum","buf_array","blksz","newblk","curbuf","endbuf","next","_bufs","write_record","ba","shift_cell_xls","cell","cRel","rRel","biff","shift_range_xls","range","encode_cell_xls","encode_cell","encode_range_xls","encode_row","encode_col","decode_row","rowstr","decode_col","colstr","col","decode_cell","decode_range","encode_range","cs","ce","fix_range","a1","formula_quote_sheet_name","sname","safe_decode_range","format_cell","BErr","XF","numFmtId","safe_format_cell","sheet_to_workbook","sheet","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","dense","ws","_R","_C","origin","_origin","_range","__R","__Rstr","__C","nullError","sheetStubs","cellDates","cell_ref","aoa_to_sheet","write_UInt32LE","parse_XLWideString","cchCharacters","write_XLWideString","_null","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","parse_BrtCommentText","parse_XLSBCell","iStyleRef","write_XLSBCell","parse_XLSBShortCell","write_XLSBShortCell","parse_XLSBCodeName","write_XLSBCodeName","parse_XLNullableWideString","write_XLNullableWideString","parse_XLNameWideString","parse_RelID","write_RelID","parse_RkNumber","fX100","fInt","RK","write_RkNumber","d100","parse_RfX","parse_UncheckedRfX","write_UncheckedRfX","parse_Xnum","write_Xnum","write_BrtColor","auto","theme","nTS","tint","rgb","parse_ClipboardFormatOrString","VT_I2","VT_I4","VT_VARIANT","VT_STRING","VT_USTR","VT_CUSTOM","DocSummaryPIDDSI","SummaryPIDSI","CountryEnum","XLSFillPattern","rgbify","XLSIcv","RBErr","XLSLblBuiltIn","ct2type","CT_LIST","workbooks","xlsm","xlsb","xlam","xltx","strs","comments","charts","dialogs","macros","metadata","styles","write_ct","type2ct","evert_arr","xsd","xsi","f1","bookType","f2","f3","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","CMNT","SST","STY","THEME","CHART","CHARTEX","CS","WS","DS","MS","IMG","DRAW","XLMETA","PEOPLE","CONN","VBA","get_rels_path","parse_rels","currentFilePath","rels","rel","Type","Target","Id","TargetMode","canonictarget","write_rels","rid","add_rels","rId","relobj","targetmode","CT_ODS","write_rdf_type","write_meta_ods","wb","parse_core_props","cur","cp_doit","write_core_props","dc","dcterms","dcmitype","Props","CreatedDate","ModifiedDate","PseudoPropsPairs","load_props_pairs","HP","TOP","props","hp","parts","Worksheets","NamedRanges","DefinedNames","Chartsheets","ChartNames","write_ext_props","W","Application","vt","custregex","write_cust_props","pid","write_vt","evert_XLMLDPM","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","LastPrinted","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","xlml_set_prop","parse_FILETIME","dwLowDateTime","dwHighDateTime","parse_lpstr","pad","parse_lpwstr","parse_VtStringBase","stringType","parse_VtString","parse_VtHeadingPair","headingString","parse_TypedPropertyValue","parse_dictionary","CodePage","dict","parse_BLOB","bytes","ret","Size","parse_ClipboardData","parse_VtUnalignedString","cElements","parse_VtVecHeadingPairValue","parse_VtVecLpwstrValue","parse_VtVecUnalignedLpstrValue","write_TypedPropertyValue","write_FILETIME","parse_PropertySet","PIDSI","start_addr","NumProps","Dictionary","DictObj","PropID","Offset","PropH","fail","piddsi","oldpos","parsebool","XLSPSSkip","guess_property_type","write_PropertySet","entries","RE","hdr","piao","prop","pr","pio","unshift","pinfo","parse_PropertySetStream","NumSets","FMTID0","FMTID1","Offset0","Offset1","SystemIdentifier","PSet1","PSet0","rval","FMTID","write_PropertySetStream","entries2","clsid2","ps0","ps1","parsenoop2","writebool","parseuint16","writeuint16","parseuint16a","parslurp","parse_Bes","write_Bes","parse_ShortXLUnicodeString","cch","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","width","cRun","write_XLUnicodeRichExtendedString","xlstr","otext","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","write_XLUnicodeString","parse_HyperlinkString","write_HyperlinkString","write_Hyperlink","hl","hashidx","F","Pretarget","parse_LongRGBA","parse_LongRGB","parse_XLSCell","ixfe","write_XLSCell","parse_XTI","parse_RkRec","parse_Ref8U","rwFirst","rwLast","write_Ref8U","parse_RefU","parse_Ref","parse_FtCmo","ot","id","parse_FtSkip","FtTab","cf","fSharedNote","parse_BOF","BIFFVer","write_BOF","write_BoundSheet8","hs","parse_DefaultRowHeight","miyRw","Unsynced","DyZero","ExAsc","ExDsc","write_Format","b5","parse_BIFF2Format","parse_Dimensions","write_XF","ixfeP","style","write_BIFF3XF","xf","write_BIFF4XF","write_BoolErr","os","parse_XLHeaderFooter","parse_ExternName","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","sbcch","udfName","parse_AddinUdf","Name","parse_Lbl","chKey","cce","itab","npflen","rgce","rgcb","parse_Rgce","parse_RgbExtra","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_Array","ref","parse_ArrayParsedFormula","write_NOTE_BIFF2","parse_BIFF5OT","cchName","write_HLink","O","write_HLinkTooltip","Tooltip","parse_ColInfo","cellStyles","colFirst","colLast","coldx","level","parse_Blank","parse_Scl","parse_String","write_BIFF2Cell","ifmt","DBF_SUPPORTED_VERSIONS","DBF","dbf_codepage_map","dbf_reverse_map","dbf_to_sheet","ft","memo","vfp","l7","nrow","fpos","rlen","current_cp","codepage","fields","field","hend","hi","lo","sheetRows","dbf_to_aoa","wch","_RLEN","to_workbook","to_sheet","from_sheet","old_cp","aoa","sheet_to_json","headers","cols","hcnt","coltypes","colwidths","coldecimals","guess","_guess","hf","_f","hb","rout","_n","_l","_s","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","sylk_char_regex","sylk_char_fn","_","decode_sylk_char","newcc","sylk_to_aoa_str","records","rj","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","Workbook","WBProps","Names","rstr","record","d1904","nn","Sheet","Ref","rc_to_a1","C_seen_K","C_seen_X","C_seen_S","C_seen_E","formula","cell_t","cmnt","cellText","shrbase","shift_formula_str","F_seen","hidden","hpt","hpx","pt2px","process_col","write_ws_cell_sylk","a1_to_rc","write_ws_cmnt_sylk","aoasht","sylk_to_aoa","outwb","_formats","preamble","RS","rec","wpx","width2px","px2char","rows","px2pt","write_ws_rows_sylk","DIF","dif_to_aoa_str","dif_to_sheet","dif_to_aoa","make_value","make_value_str","ETH","eth_to_sheet","eth_to_aoa","sep","meta","sheet_to_eth_data","coord","PRN","set_text_arr","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","FS","sepcc","startcc","_re","finish_cell","news","Y","datestr","timestr","dateNF_fix","cellNF","outer","prn_to_sheet","firstbyte","lines","prn_to_aoa_str","prn_to_sheet_str","WK_","lotushopper","Enum","WK1Enum","LOTUS_DATE_FMTS","lotus_to_workbook_buf","next_n","sidx","snames","realnames","sdata","refguess","lastcell","FMTS","QPWNFTable","book_append_sheet","CC","fmtidx","delta","newcell","parse_qpw_str","qpw_to_workbook_buf","vers","qpro","works","works2","tmpcell","WK3Enum","osheets","rnames","parse_cell","get_wk1_fmt","write_LABEL","write_INTEGER","write_NUMBER","wk1_parse_rc","FuncTab","BinOpTab","parse_cell_3","write_LABEL_16","wsidx","parse_NUMBER_17","v1","v2","write_NUMBER_17","log2","parse_NUMBER_27","parse_SHEETNAMECS","write_XFORMAT_SHEETNAME","argc","argL","argR","args","wk1_fmla_to_csf","sheet_to_wk1","write_biff_rec","write_RANGE","max_R","book_to_wk3","wscnt","write_BOF_WK3","parse_rs","parse_r","rpr","font","pass","shadow","outline","strike","uval","family","valign","parse_rpr","rregex","rend","rs","filter","rs_to_html","nlregex","r_to_html","terms","intro","outro","align","parse_rpr2","sitregex","sirregex","parse_si","html","cellHTML","sstr1","sstr2","straywsregex","write_BrtSSTItem","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_DataSpaceMapEntry","comps","parse_EncryptionHeader","Flags","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_EncInfoStd","parse_EncInfoExt","parse_EncInfoAgl","KeyData","xml","encryptedHmacKey","encryptedHmacValue","encs","uri","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordDecoded","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","XorRor","byte1","byte2","Byte","password","Temp","PasswordLastChar","PadIndex","XorKey","CurrentElement","Char","CreateXorKey_Method1","Index","ObfuscationArray","rtf_to_sheet_str","rowtf","rtfre","last_index","rgb2Hex","rgb_tint","hex","hsl","G","H6","L2","rgb2HSL","X","h6","hsl2RGB","DEF_MDW","MAX_MDW","MIN_MDW","MDW","px","char2width","chr","cycle_width","collw","find_mdw_colw","_MDW","coll","customWidth","PPI","pt","XLMLPatternTypeMap","cellXF_uint","cellXF_bool","parse_sty_xml","themes","NumberFmt","formatCode","parse_numFmts","Fonts","bold","italic","underline","condense","extend","vertAlign","scheme","indexed","icv","themeElements","clrScheme","parse_fonts","Fills","patternType","bgColor","fgColor","parse_fills","Borders","border","diagonalUp","diagonalDown","parse_borders","CellXf","alignment","vertical","horizontal","textRotation","indent","wrapText","parse_cellXfs","write_BrtFmt","rev_XLSBFillPTNames","XLSBFillPTNames","parse_BrtFill","write_BrtFill","fls","write_BrtXF","write_Blxf","parse_BrtBorder","write_sty_bin","NF","write_FMTS_bin","grbit","write_FontFlags","sss","charset","write_BrtFont","write_FONTS_bin","write_FILLS_bin","write_BORDERS_bin","fontId","fillId","borderId","write_CELLSTYLEXFS_bin","write_CELLXFS_bin","cellXfs","xfId","builtinId","write_STYLES_bin","write_DXFS_bin","write_TABLESTYLES_bin","XLSXThemeClrScheme","parse_theme_xml","write_theme","lastClr","parse_clrScheme","parse_themeElements","Themes","themeXLSX","parse_ExtProp","extType","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_ColorTheme","parse_FullColorExt","parse_XFExtGradient","write_vml","csize","bbox","_shapeid","_comments","joinstyle","gradientshapeok","coordsize","fillopts","angle","fillparm","fillxml","fillcolor","strokecolor","on","write_vml_comment","sheet_insert_comments","threaded","people","comment","author","write_comments_xml","iauthor","ID","lastauthor","ts","tcnt","write_tcmnt_xml","carr","rootid","tcopts","tcid","parentId","personId","write_people_xml","person","displayName","userId","providerId","parse_BrtCommentAuthor","write_BrtCommentAuthor","write_comments_bin","_ia","write_BrtBeginComment","run","write_StrRun","CT_VBA","VBAFMTS","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","shift_formula_xlsx","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_PtgAttrBaxcel","bitSemi","parse_PtgAttrSpaceType","parse_SerAr","parse_PtgExtraMem","count","parse_PtgExtraArray","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfLel","PtgListRT","PtgTypes","iftab","FtabArgc","Ftab","cparams","tab","parsetab","Cetab","nameindex","rl","parse_RgceLocRel_BIFF2","cl","parse_RgceLocRel","area","parse_RgceAreaRel","ixti","parse_PtgNameX_BIFF5","PtgDupes","Ptg18","coltype","rt","Ptg19","bitIf","bitGoto","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","get_ixti_raw","supbooks","XTI","SID","get_ixti","ixtiraw","stringify_formula","stack","nameidx","last_sp","sp","fflen","func","lbl","names","xlfn","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","_left","parse_SharedParsedFormula","parse_Formula","parse_FormulaValue","cbf","parse_XLSCellParsedFormula","shared","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","write_XLSBFormulaNum","oint","num","write_XLSBNameParsedFormula","write_XLSBFormulaBool","write_XLSBFormulaErr","_str","write_XLSBFormulaRange","lastbang","write_XLSBFormulaArea3D","write_XLSBFormulaRef3D","write_XLSBFormulaRangeWS","write_XLSBFormulaRefErr3D","postamble","write_XLSBFormulaStr","ods_to_csf_formula","ods_to_csf_3D","csf_to_ods_3D","_ssfopts","browser_has_Map","Map","get_sst_id","sst","has","revarr","get","Count","Unique","col_obj_w","outlineLevel","default_margins","margins","mode","defs","left","right","top","bottom","footer","get_cell_style","revssf","ssf","applyNumberFormat","safe_format","fmtid","fillid","raw_rgb","check_ws","mergecregex","hlinkregex","dimregex","colregex","afregex","marginregex","sheetprregex","parse_ws_xml_sheetpr","sheetPr","codeName","CodeName","sheetprot_deffalse","sheetprot_deftrue","sviewregex","write_ws_xml_cell","oldt","oldv","_vv","bookSST","Strings","revStrings","display","cm","parse_ws_xml_data","cellregex","rowregex","refregex","sstr","ftag","cells","cref","tagr","tagc","do_format","rowobj","rowrite","marr","marrlen","xlen","rstarti","outa","ht","nodim","rslice","cellFormula","___f","_tag","xlmeta","Cell","_r","write_ws_xml","rdata","_drawing","needed","vbaraw","cname","outlineprops","summaryBelow","summaryRight","above","write_ws_xml_sheetpr","sview","workbookViewId","Views","rightToLeft","RTL","write_ws_xml_sheetviews","sheetFormat","defaultRowHeight","baseColWidth","outlineLevelRow","params","height","_cell","customHeight","write_ws_xml_data","write_ws_xml_protection","write_ws_xml_autofilter","merges","margin","relc","location","tooltip","ignoreEC","numberStoredAsText","sqref","write_row_header","ncolspan","lcs","caddr","first","write_BrtRowHdr","parse_BrtWsDim","write_BrtWsDim","write_BrtCellError","ncell","write_BrtShortError","parse_BrtShortReal","parse_BrtMergeCell","write_BrtMergeCell","BrtMarginKeys","write_ws_bin_cell","last_seen","write_BrtShortIsst","write_BrtCellIsst","write_BrtShortSt","write_BrtCellSt","write_BrtShortRk","write_BrtCellRk","write_BrtShortReal","write_BrtCellReal","write_BrtShortBool","write_BrtCellBool","write_BrtShortBlank","write_BrtCellBlank","write_ws_bin","write_BrtWsProp","write_BrtBeginWsView","write_WSVIEWS2","write_BrtColInfo","write_COLINFOS","cap","write_CELLTABLE","write_SHEETPROTECT","write_AUTOFILTER","write_MERGECELLS","locidx","write_BrtHLink","write_HLINKS","write_IGNOREECS","write_LEGACYDRAWING","WBPropsDef","WBViewDef","SheetDef","CalcPrDef","push_defaults_array","defaults","push_defaults","parse_wb_defaults","CalcPr","WBView","badchars","check_ws_name","check_wb","N","codes","cn","dn","wbnsregex","parse_BrtFRTArchID$","ArchID","write_wb_bin","write_BrtFileVersion","filterPrivacy","write_BrtWbProp","vistab","Hidden","write_BOOKVIEWS","iTabID","strRelID","write_BrtBundleSh","write_BUNDLESHS","write_SELF_EXTERNS_xlsb","write_EXTERNALS_xlsb","dname","Comment","write_BrtName","write_BRTNAMES","parse_ws","ai","af","vm","seencol","RR","aii","_d","relId","Rel","rfx","tmpref","parse_ws_bin","data1","data2","mtch","parse_ws_xml_sheetpr2","parse_ws_xml_dim","svs","zoomScale","zoom","parse_ws_xml_sheetviews","columns","coli","colm","colM","parse_ws_xml_cols","afilter","parse_ws_xml_autofilter","_merge","hlink","rng","parse_ws_xml_hlinks","parse_ws_xml","XLMLFormatMap","attregexg2","attregex2","xlml_parsexmltag","words","xlml_parsexmltagobj","xlml_set_custprop","Custprops","oval","process_style_xlml","stag","Interior","I","Pattern","parse_xlml_data","csty","nf","sid","StyleID","interiors","ssid","Parent","xlml_format","safe_format_xlml","Formula","ArrayRange","xlml_clean_comment","parse_xlml_xml","Rn","opening","ishtml","_o","html_to_sheet","book_new","html_to_workbook","sheetnames","cursheet","sheetname","dtag","didx","fidx","pidx","cstys","wsprops","raw_Rn3","HRef","HRefScreenTip","MergeAcross","MergeDown","cma","cmd","AutoFitHeight","Height","Format","ssfidx","Width","_col","Span","_NamedRange","_DefinedName","RefersTo","AutoFilter","Range","parse_fods","Margin","pagemargins","Top","Left","Right","Bottom","bookSheets","bookProps","parse_xlml","fix_read_opts","write_name_xlml","write_ws_xlml_cell","attr","mi","_v","write_ws_xlml_row","write_ws_xlml","write_ws_xlml_names","skip","write_ws_xlml_table","objects","scenarios","selectLockedCells","selectUnlockedCells","xmlns","write_ws_xlml_wsopts","write_xlml","xlml_write_docprops","BLACKLIST","xlml_write_custprops","write_props_xlml","write_wb_xlml","write_sty_xlml","write_names_xlml","CONTINUE_RT","slurp","RecordType","insitu","nextrt","XLSRecordEnum","ll","safe_format_xf","make_cell","PSCLSID","SI","DSI","UDI","parse_xlscfb","CompObj","WorkbookP","AnsiUserType","AnsiClipboardFormat","parse_ClipboardFormatOrAnsiString","Reserved1","UnicodeClipboardFormat","parse_ClipboardFormatOrUnicodeString","Reserved2","parse_compobj","rngC","rngR","temp_val","country","Directory","last_formula","cur_sheet","Preamble","last_cell","XFs","palette","biff4w","get_rgb","addcell","file_depth","xfd","icvFore","icvBack","process_cell_style","afi","rrtabid","lastuser","winlocked","wtf","last_lbl","last_RT","BIFF2Fmt","BIFF2FmtTable","FilterDatabases","seen_codepage","Date1904","WriteProtect","cpval","CalcRefMode","FullCalc","fDialog","fBelow","fRight","ExternCount","tmpri","biffguess","fakebs8","rknum","rkrec","_fr","_fc","_fe","_arraystart","isst","_j","_ixfe","b4idx","b2idx","cmo","lastobj","TxO","ImData","noteobj","xfe","Encryption","Metadata","Country","parse_workbook","bookVBA","newcfb","newpath","make_vba_xls","DocSummary","Summary","HeadingPairs","TitlesOfParts","parse_xls_props","bookFiles","Ptg","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","parse_FontFlags","bCharSet","xColorType","bR","bG","bB","parse_BrtColor","ixfeParent","defaultThemeVersion","strName","autoCompressPictures","backupFile","checkCompatibility","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","fAlwaysCalc","idObj","parse_NoteSh","Info","Data","EncryptionVersionInfo","EncryptedVerifier","EncryptedVerifierHash","parse_RC4Header","EncryptionHeader","EncryptionVerifier","parse_RC4CryptoHeader","parse_FilePassHeader","XorArrayIndex","XorArray","verificationBytes","verifier","Value","crypto_DecryptData_Method1","parse_XORObfuscation","dyHeight","fl","Pos","Dim","CurTab","FirstTab","Selected","TabRatio","UserName","fts","parse_BIFF5Obj","parse_FtArray","ccv","rw","rkrecs","lastcol","ixfes","fStyle","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","fsxButton","parse_CellStyleXF","cmcs","ucnt","extsst","dsst","ctab","virtPath","rgst","texts","accel","parse_ControlInfo","cchText","sVer","targetFrameName","moniker","oleMoniker","guid","fileTime","Loc","extra","parse_URLMoniker","cAnti","ansiPath","parse_FileMoniker","parse_HyperlinkMoniker","parse_Hyperlink","xnum","cUse","wzTooltip","cxfs","crc","cexts","cchComment","themeXML","parse_frtHeader","bestart","env","lcb","write_BIFF2BERR","write_comments_biff2","write_ws_biff2_cell","_BIFF2FmtTable","write_BIFF2INT","write_BIFF2NUM","b8oid","b8ocnts","write_ws_biff8_cell","bf","o1","write_FormulaValue","o3","write_Formula","write_Number","write_LabelSst","b8","write_Label","write_ws_biff8","guts","_WB","_sheet","MAX_ROWS","write_ColInfo","write_ws_cols_biff8","write_Dimensions","_oasc","notes","baseid","ci","oasc","oact","txo","cont","conf","notesh","write_comments_biff8","write_Window2","write_MergeCells","HL","write_ws_biff8_hlinks","write_FEAT","write_biff8_global","_sheets","_wb","writezeroes","write_WriteAccess","write_RRTabId","safe1904","write_Font","write_FONTS_biff8","write_FMTS_biff8","write_CELLXFS_biff8","write_Country","acc","write_MsoDrawingGroup","write_biff_continue","write_SST","blen","write_biff_buf","fix_write_opts","write_biff8_buf","_Fonts","write_ws_biff2","write_BIFF2Format","write_BIFF4Format","write_BIFF2XF","write_biff2_buf","mtch2","hd","midx","colspan","rowspan","_t","make_html_row","editable","HTML_BEGIN","HTML_END","make_html_preamble","sheet_to_html","sheet_add_dom","tagName","or_R","or_C","is_dom_element_hidden","elts","hasAttribute","getAttribute","innerHTML","Aelts","getElementsByTagName","Aelti","parse_dom_table","element","get_computed_style","ownerDocument","defaultView","getComputedStyle","get_get_computed_style_function","getPropertyValue","parse_ods_styles","_nfm","number_format_map","NFtag","tNF","etpos","tidx","parse_content_xml","nfidx","sheetag","rowtag","fixed","ctag","textp","textpidx","oldtextp","oldtextpidx","textR","oldtextR","row_ol","mrange","rowpeat","colpeat","atag","_Ref","creator","creatoridx","isstub","intable","rptR","rpt","annotag","xlmlidx","styletag","nrange","ptp","parse_ods","FEtag","parse_manifest","Styles","write_styles_ods","master_styles","write_number_format_ods","nopts","has_time","np","write_names_ods","scoped","namei","odsref","write_content_ods","write_text_p","span","null_cell_xml","write_ws","nfs","ods","ROWS","_Fref","text_p","_tgt","acreator","apayload","aprops","fods","cidx","colobj","nfi","write_automatic_styles_ods","write_ods","manifest","rdf","write_rdf","write_manifest","u8_to_dataview","array","DataView","buffer","byteOffset","byteLength","u8str","u8","stru8","u8concat","u8a","popcnt","parse_varint49","ptr","varint","write_varint49","parse_packed_varints","write_packed_varints","nums","varint_to_i32","i32","parse_shallow","write_shallow","proto","item","mappa","parse_iwa_file","_a","messages","merge","write_iwa_file","ias","ia","midata","aipayload","mid","parse_snappy_chunk","chunks","clen","u8i","decompress_iwa_file","compress_iwa_file","frame","numbers_lut_new","rsst","ofmt","nfmt","fmla","ferr","numbers_format_cell","_b","_c","ver","dur","dstyle","dmin","dmax","autodur","dstr","zstr","write_new_storage","lut","dv","setFloat64","exp","mantissa","writeDecimal128LE","irsst","findIndex","setUint32","s5s","replies","s5s_to_iwa_comment","write_old_storage","parse_cell_storage","getUint32","zidx","ieee","doff","getFloat64","rts","parse_old_storage","d128","readDecimal128LE","iwa","cmntidx","reply","parse_new_storage","parse_TSP_Reference","write_TSP_Reference","numbers_add_oref","orefs","numbers_del_oref","parse_TST_TableDataList","pb","le","rtp","rtpref","mtype","tswpsa","richtext","sfields","smartfields","_a2","_b2","objtype","parse_TSD_CommentStorageArchive","_e","_g","_h","_i","csp","asp","pi","parse_TST_TableInfoArchive","tableref","dws","store","tile","kv","tl","ref2","mtype2","_tile","_k","_m","used_storage_u8","used_storage","wide_offsets","used_storage_offsets","offsets","getUint16","parse_TST_TileRowInfo","nrows","reduce","parse_TST_Tile","parse_TST_TableModelArchive","parse_numbers_iwa","indices","packets","packet","docroot","iwam","root2","parse_TN_SheetArchive","parse_TN_DocumentArchive","write_TST_TileRowInfo","wide","tri","new_7","new_4","last_offset","cell_storage","_dv","_last_offset","_cell_storage","setUint16","celload","_celload","write_iwam","get_unique_msgid","dep","dependents","write_TSP_Color_RGB","Float32Array","get_author_color","random","numbers_iwa_doit","deps","numbers_iwa_find","numbers_add_meta","mlist","newid","newloc","numbers_add_msg","numbers_meta_add_dep","parentidx","mm","parent","dep2","USE_WIDE_ROWS","fix_opts_func","safe_parse_sheet","relsPath","sheetRels","stype","parse_cs_bin","parse_cs_xml","parse_cs","dfile","drelsp","draw","parse_drawing","chartp","crelsp","csheet","nc","cache","parse_Cache","parse_chart","parse_ds","tcomments","authors","parse_comments_bin","commentList","authtag","cmnttag","authorId","textMatch","parse_comments_xml","parse_cmnt","parse_tcmnt_xml","aidx","ObjectType","ws_get_cell_stub","parse_vml","parse_sheet_legacy_drawing","strip_front_slash","_zip","index_zip","Bun","readSync","binname","dir","threadedcomments","links","coreprops","extprops","custprops","calcchains","vba","drawings","TODO","ctext","Extension","ContentType","PartName","calcchain","parse_ct","parse_sst_bin","uniqueCount","parse_sst_xml","parse_sst","parse_sty_bin","parse_sty","link","parse_xlink_bin","parse_xlink","parse_wb_bin","dnstart","localSheetId","parse_wb_xml","parse_wb","propdata","parse_ext_props","toks","warn","parse_cust_props","bookDeps","parse_cc_bin","parse_cc_xml","wbsheets","wbext","wbrelsi","wbrelsfile","wbrels","Types","metatype","parse_xlmeta_bin","lastmeta","parse_xlmeta_xml","parse_xlmeta","displayname","parse_people_xml","safe_parse_wbrels","nmode","wsloop","snjseen","snj","Deps","bin","parse_xlsxcfb","U","dsm","parse_DataSpaceMap","seds","parse_DataSpaceDefinition","parse_TransformInfoHeader","ename","cmode","parse_Primary","einfo","parse_EncryptionInfo","decrypt_agile","decrypt_std76","write_zip_xlsx","foo","vbafmt","_sn","wsrels","need_vml","needtc","rId1","sitag","write_sst_xml","write_names","workbookPr","sheetId","write_wb_xml","write_numFmts","write_cellXfs","write_sty_xml","read_plaintext","main","read_prn","infile","read_binary","bstrify","ab","vu","read_cfb","OLD_WTF","read_wb_ID","read_zip","utf16lereadu","read_utf16","rtf_to_sheet","rtf_to_workbook","read_plaintext_raw","write_cfb_ctr","numbers","mess","build_numbers_deps","sheetrefs","sheetref","newsheetref","remap","arch","doc","tiaref","sheetroot","sa","drawables","tia","tmaref","tiaroot","da","dap","oldtmaref","tma","tmaroot","new_uuid","hsa","hseadata","hsea","oldref","newref","row_headers","tspref","tiles","tst","oldtileref","newtileref","oldtile","numbers_add_ws","wsname","sheetidx","rootref","tmafile","trunc","R_","LUT","row_header_ref","rowhead","_x","base_bucket","R2","_bucket","col_header_ref","colhead","rbtree","tilestore","tstride","mlst","tileref","save_token","numbers_meta_del_dep","ntiles","newtileid","tiledata","tilerow","tilecontent","mergeid","sstref","sstroot","sstdata","rsstref","rsstroot","rsstdata","style_indices","tswpsaid","tswpsarefs","newhlinkid","smartfield","rtpaid","cmntref","cmntroot","cmntdata","aaaid2","csaid2","aaaid","csaid","write_numbers_tma","write_numbers_ws","write_numbers_iwa","write_BrtBeginSst","write_sst_bin","write_BrtBeginEsfmd","write_BrtBeginEsmdb","mdb","write_BrtMdb","write_zip_xlsb","write_zip_denouement","oopts","ftype","generate","encrypt_agile","write_string_type","bom","write_binary_type","writeSyncXLSX","write_zip_typeXLSX","writeSync","Base64_encode_pass","write_stxt_type","sheet_to_txt","sheet_to_csv","sheet_to_rtf","wbpath","Keys","DSEntries","SEntries","CEntries","DocSummaryRE","SummaryRE","CEntries2","write_xls_props","fill_vba_xls","write_xlscfb","write_cfb_type","write_zip_type","resolve_book_type","writeFileSyncXLSX","writeFileAsync","_cb","Function","make_json_row","defval","isempty","defineProperty","enumerable","__rowNum__","rawNumbers","outi","counter","header_cnt","skipHidden","blankrows","qreg","make_csv_row","txt","datarow","forceQuotes","strip","sheet_add_json","js","skipHeader","ROW","JS","RC","roll","cell_set_hyperlink","_Readable","split_cell","sheet_new","json_to_sheet","table_to_sheet","table_to_book","sheet_to_formulae","cmds","sheet_to_row_object_array","sheet_get_cell","book_set_sheet_visibility","sh","vis","wb_sheet_idx","cell_set_number_format","cell_set_internal_link","cell_add_comment","sheet_set_array_formula","dynamic","rngstr","wsr","SHEET_VISIBLE","SHEET_HIDDEN","SHEET_VERY_HIDDEN","__stream","to_json","stream","objectMode","_read","to_html","to_csv","BOM","set_readable","readFile","writeXLSX","writeFileXLSX"],"sourceRoot":""} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/README.md b/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/index.css b/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/index.html b/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/index.html new file mode 100644 index 00000000..0de41ad6 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - flow-arc-horizontal + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/index.js b/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/index.js new file mode 100644 index 00000000..cda80751 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-arc-horizontal/index.js @@ -0,0 +1,110 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/flow-charts/arc-diagram/ +var series = root.container.children.push(am5flow.ArcDiagram.new(root, { + sourceIdField: "from", + targetIdField: "to", + valueField: "value", + orientation: "horizontal" +})); + + +// Configure labels +// https://www.amcharts.com/docs/v5/charts/flow-charts/arc-diagram/#Labels +series.nodes.labels.template.setAll({ + fontSize: "0.85em", + paddingLeft: 20, + paddingRight: 20 +}); + +// Selectively position/rotate labels if they fit within node circle +series.nodes.labels.template.adapters.add("x", function (x, target) { + var dataItem = target.dataItem; + if (dataItem) { + if (dataItem.get("circle").get("radius") > 30) { + target.set("centerX", am5.p50); + target.set("rotation", 0); + } + else { + target.set("centerX", 0); + target.set("rotation", 90); + } + } + return x; +}); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/flow-charts/#Setting_data +series.data.setAll([ + { "from": "Monica", "to": "Rachel", "value": 4 }, + { "from": "Monica", "to": "Chandler", "value": 63 }, + { "from": "Monica", "to": "Ross", "value": 16 }, + { "from": "Monica", "to": "Joey", "value": 9 }, + { "from": "Monica", "to": "Phoebe", "value": 3 }, + { "from": "Monica", "to": "Paul the wine guy", "value": 1 }, + { "from": "Monica", "to": "Mr Geller", "value": 6 }, + { "from": "Monica", "to": "Mrs Geller", "value": 5 }, + { "from": "Monica", "to": "Pete", "value": 10 }, + { "from": "Monica", "to": "Chip", "value": 1 }, + { "from": "Monica", "to": "Timothy (Burke)", "value": 1 }, + { "from": "Monica", "to": "Emily", "value": 1 }, + { "from": "Monica", "to": "Dr. Roger", "value": 3 }, + { "from": "Rachel", "to": "Chandler", "value": 7 }, + { "from": "Rachel", "to": "Ross", "value": 80 }, + { "from": "Rachel", "to": "Joey", "value": 30 }, + { "from": "Rachel", "to": "Phoebe", "value": 6 }, + { "from": "Rachel", "to": "Tag", "value": 4 }, + { "from": "Rachel", "to": "Melissa", "value": 1 }, + { "from": "Rachel", "to": "Gavin", "value": 2 }, + { "from": "Chandler", "to": "Joey", "value": 1 }, + { "from": "Chandler", "to": "Phoebe", "value": 7 }, + { "from": "Chandler", "to": "Janice", "value": 11 }, + { "from": "Chandler", "to": "Joanna", "value": 5 }, + { "from": "Chandler", "to": "Kathy", "value": 7 }, + { "from": "Chandler", "to": "Mr Bing", "value": 1 }, + { "from": "Ross", "to": "Joey", "value": 3 }, + { "from": "Ross", "to": "Phoebe", "value": 18 }, + { "from": "Ross", "to": "Carol", "value": 10 }, + { "from": "Ross", "to": "Mrs Geller", "value": 8 }, + { "from": "Ross", "to": "Ben", "value": 6 }, + { "from": "Ross", "to": "Emily", "value": 12 }, + { "from": "Ross", "to": "Jill", "value": 1 }, + { "from": "Ross", "to": "Elizabeth", "value": 8 }, + { "from": "Ross", "to": "Aunt Millie", "value": 2 }, + { "from": "Ross", "to": "Mona", "value": 11 }, + { "from": "Ross", "to": "Emma", "value": 7 }, + { "from": "Ross", "to": "Charlie", "value": 10 }, + { "from": "Joey", "to": "Phoebe", "value": 6 }, + { "from": "Joey", "to": "Janine", "value": 9 }, + { "from": "Joey", "to": "Erin", "value": 1 }, + { "from": "Joey", "to": "Cecilia", "value": 3 }, + { "from": "Joey", "to": "Charlie", "value": 3 }, + { "from": "Phoebe", "to": "David", "value": 14 }, + { "from": "Phoebe", "to": "Roger", "value": 1 }, + { "from": "Phoebe", "to": "Duncan", "value": 1 }, + { "from": "Phoebe", "to": "Rob Dohnen", "value": 2 }, + { "from": "Phoebe", "to": "Sergei", "value": 1 }, + { "from": "Phoebe", "to": "Vince", "value": 2 }, + { "from": "Phoebe", "to": "Mike", "value": 18 }, + { "from": "Carol", "to": "Ben", "value": 1 }, + { "from": "Carol", "to": "Susan", "value": 1 }, + { "from": "Mr Geller", "to": "Mrs Geller", "value": 3 }, + { "from": "Frank", "to": "Alice", "value": 5 } +]); + + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/README.md b/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/index.css b/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/index.html b/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/index.html new file mode 100644 index 00000000..3f7010f1 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - flow-arc-vertical + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/index.js b/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/index.js new file mode 100644 index 00000000..42b3f1dc --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-arc-vertical/index.js @@ -0,0 +1,84 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/flow-charts/arc-diagram/ +var series = root.container.children.push(am5flow.ArcDiagram.new(root, { + sourceIdField: "from", + targetIdField: "to", + valueField: "value", + orientation: "vertical" +})); + +// Configure labels +// https://www.amcharts.com/docs/v5/charts/flow-charts/arc-diagram/#Labels +series.nodes.labels.template.setAll({ + fontSize: "0.85em", + paddingLeft: 20, + paddingRight: 20, + width: 160 +}); + + +// Animated bullets +series.bullets.push(function(_root, _series, dataItem) { + var bullet = am5.Bullet.new(root, { + locationY: Math.random(), + sprite: am5.Circle.new(root, { + radius: 2, + fill: dataItem.get("source").get("fill") + }) + }); + + bullet.animate({ + key: "locationY", + to: 1, + from: 0, + duration: Math.random() * 1000 + 2000, + loops: Infinity + }); + + return bullet; +}); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/flow-charts/#Setting_data +series.data.setAll([ + { "from": "Monica", "to": "Rachel", "value": 4 }, + { "from": "Monica", "to": "Chandler", "value": 63 }, + { "from": "Monica", "to": "Ross", "value": 16 }, + { "from": "Monica", "to": "Joey", "value": 9 }, + { "from": "Rachel", "to": "Chandler", "value": 7 }, + { "from": "Rachel", "to": "Ross", "value": 80 }, + { "from": "Rachel", "to": "Joey", "value": 30 }, + { "from": "Rachel", "to": "Phoebe", "value": 6 }, + { "from": "Chandler", "to": "Phoebe", "value": 7 }, + { "from": "Chandler", "to": "Janice", "value": 11 }, + { "from": "Chandler", "to": "Joanna", "value": 5 }, + { "from": "Chandler", "to": "Kathy", "value": 7 }, + { "from": "Monica", "to": "Pete", "value": 10 }, + { "from": "Ross", "to": "Joey", "value": 3 }, + { "from": "Ross", "to": "Phoebe", "value": 18 }, + { "from": "Ross", "to": "Carol", "value": 10 }, + { "from": "Ross", "to": "Mrs Geller", "value": 8 }, + { "from": "Ross", "to": "Emily", "value": 12 }, + { "from": "Ross", "to": "Elizabeth", "value": 8 }, + { "from": "Ross", "to": "Mona", "value": 11 }, + { "from": "Joey", "to": "Phoebe", "value": 6 }, + { "from": "Phoebe", "to": "David", "value": 14 }, + { "from": "Phoebe", "to": "Mike", "value": 18 } +]); + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/README.md b/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/index.css b/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/index.html b/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/index.html new file mode 100644 index 00000000..3678fbc6 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - flow-chord-directed + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/index.js b/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/index.js new file mode 100644 index 00000000..3821af5d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord-directed/index.js @@ -0,0 +1,149 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/flow-charts/ +var series = root.container.children.push(am5flow.ChordDirected.new(root, { + startAngle: 80, + padAngle: 1, + linkHeadRadius: null, + sourceIdField: "from", + targetIdField: "to", + valueField: "value" +})); + +series.nodes.labels.template.setAll({ + textType: "radial", + centerX: 0, + fontSize: 9 +}); + +series.links.template.set("fillStyle", "source"); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/flow-charts/#Setting_data +series.data.setAll([ + { "from": "Monica", "to": "Rachel", "value": 4 }, + { "from": "Monica", "to": "Chandler", "value": 113 }, + { "from": "Monica", "to": "Ross", "value": 16 }, + { "from": "Monica", "to": "Joey", "value": 9 }, + { "from": "Monica", "to": "Phoebe", "value": 3 }, + { "from": "Monica", "to": "Paul the wine guy", "value": 1 }, + { "from": "Monica", "to": "Mr Geller", "value": 6 }, + { "from": "Monica", "to": "Mrs Geller", "value": 5 }, + { "from": "Monica", "to": "Aunt Lilian", "value": 1 }, + { "from": "Monica", "to": "Nana", "value": 1 }, + { "from": "Monica", "to": "Young Ethan", "value": 5 }, + { "from": "Monica", "to": "Ben", "value": 3 }, + { "from": "Monica", "to": "Fun Bobby", "value": 3 }, + { "from": "Monica", "to": "Richard", "value": 16 }, + { "from": "Monica", "to": "Mrs Green", "value": 1 }, + { "from": "Monica", "to": "Paolo2", "value": 1 }, + { "from": "Monica", "to": "Pete", "value": 10 }, + { "from": "Monica", "to": "Chip", "value": 1 }, + { "from": "Monica", "to": "Timothy (Burke)", "value": 1 }, + { "from": "Monica", "to": "Emily", "value": 1 }, + { "from": "Monica", "to": "Dr. Roger", "value": 3 }, + { "from": "Rachel", "to": "Chandler", "value": 7 }, + { "from": "Rachel", "to": "Ross", "value": 80 }, + { "from": "Rachel", "to": "Joey", "value": 30 }, + { "from": "Rachel", "to": "Phoebe", "value": 6 }, + { "from": "Rachel", "to": "Paolo", "value": 5 }, + { "from": "Rachel", "to": "Mr Geller", "value": 2 }, + { "from": "Rachel", "to": "Mrs Geller", "value": 1 }, + { "from": "Rachel", "to": "Barry", "value": 1 }, + { "from": "Rachel", "to": "Dr Green", "value": 3 }, + { "from": "Rachel", "to": "Mark3", "value": 1 }, + { "from": "Rachel", "to": "Josh", "value": 2 }, + { "from": "Rachel", "to": "Gunther", "value": 1 }, + { "from": "Rachel", "to": "Joshua", "value": 3 }, + { "from": "Rachel", "to": "Danny", "value": 1 }, + { "from": "Rachel", "to": "Mr. Zelner", "value": 1 }, + { "from": "Rachel", "to": "Paul Stevens", "value": 3 }, + { "from": "Rachel", "to": "Tag", "value": 4 }, + { "from": "Rachel", "to": "Melissa", "value": 1 }, + { "from": "Rachel", "to": "Gavin", "value": 2 }, + { "from": "Chandler", "to": "Joey", "value": 1 }, + { "from": "Chandler", "to": "Phoebe", "value": 7 }, + { "from": "Chandler", "to": "Aurora", "value": 2 }, + { "from": "Chandler", "to": "Jill Goodacre", "value": 1 }, + { "from": "Chandler", "to": "Janice", "value": 11 }, + { "from": "Chandler", "to": "Mrs Bing", "value": 3 }, + { "from": "Chandler", "to": "Nina", "value": 1 }, + { "from": "Chandler", "to": "Susie", "value": 5 }, + { "from": "Chandler", "to": "Mary Theresa", "value": 1 }, + { "from": "Chandler", "to": "Ginger", "value": 2 }, + { "from": "Chandler", "to": "Joanna", "value": 5 }, + { "from": "Chandler", "to": "Kathy", "value": 7 }, + { "from": "Chandler", "to": "Mr Bing", "value": 1 }, + { "from": "Ross", "to": "Joey", "value": 3 }, + { "from": "Ross", "to": "Phoebe", "value": 18 }, + { "from": "Ross", "to": "Carol", "value": 10 }, + { "from": "Ross", "to": "Mrs Geller", "value": 8 }, + { "from": "Ross", "to": "Aunt Lilian", "value": 1 }, + { "from": "Ross", "to": "Mrs Bing", "value": 3 }, + { "from": "Ross", "to": "Celia", "value": 2 }, + { "from": "Ross", "to": "Julie", "value": 6 }, + { "from": "Ross", "to": "Ben", "value": 6 }, + { "from": "Ross", "to": "Mrs Green", "value": 2 }, + { "from": "Ross", "to": "Chloe", "value": 1 }, + { "from": "Ross", "to": "Bonnie", "value": 4 }, + { "from": "Ross", "to": "Messy Girl (Cheryl)", "value": 5 }, + { "from": "Ross", "to": "Emily", "value": 12 }, + { "from": "Ross", "to": "Jill", "value": 1 }, + { "from": "Ross", "to": "Elizabeth", "value": 8 }, + { "from": "Ross", "to": "Aunt Millie", "value": 2 }, + { "from": "Ross", "to": "Mona", "value": 11 }, + { "from": "Ross", "to": "Emma", "value": 7 }, + { "from": "Ross", "to": "Charlie", "value": 10 }, + { "from": "Joey", "to": "Phoebe", "value": 6 }, + { "from": "Joey", "to": "Janice", "value": 1 }, + { "from": "Joey", "to": "Lorraine", "value": 2 }, + { "from": "Joey", "to": "Melanie", "value": 2 }, + { "from": "Joey", "to": "Erica", "value": 2 }, + { "from": "Joey", "to": "Mrs Green", "value": 1 }, + { "from": "Joey", "to": "Kate", "value": 4 }, + { "from": "Joey", "to": "Lauren", "value": 2 }, + { "from": "Joey", "to": "Estelle", "value": 1 }, + { "from": "Joey", "to": "Kathy", "value": 2 }, + { "from": "Joey", "to": "Emily", "value": 4 }, + { "from": "Joey", "to": "Katie", "value": 2 }, + { "from": "Joey", "to": "Janine", "value": 9 }, + { "from": "Joey", "to": "Erin", "value": 1 }, + { "from": "Joey", "to": "Cecilia", "value": 3 }, + { "from": "Joey", "to": "Charlie", "value": 3 }, + { "from": "Phoebe", "to": "David", "value": 14 }, + { "from": "Phoebe", "to": "Roger", "value": 1 }, + { "from": "Phoebe", "to": "Duncan", "value": 1 }, + { "from": "Phoebe", "to": "Rob Dohnen", "value": 2 }, + { "from": "Phoebe", "to": "Ryan", "value": 5 }, + { "from": "Phoebe", "to": "Malcom", "value": 1 }, + { "from": "Phoebe", "to": "Robert", "value": 1 }, + { "from": "Phoebe", "to": "Sergei", "value": 1 }, + { "from": "Phoebe", "to": "Vince", "value": 2 }, + { "from": "Phoebe", "to": "Jason", "value": 1 }, + { "from": "Phoebe", "to": "Rick", "value": 2 }, + { "from": "Phoebe", "to": "Gunther", "value": 1 }, + { "from": "Phoebe", "to": "Gary", "value": 7 }, + { "from": "Phoebe", "to": "Jake", "value": 2 }, + { "from": "Phoebe", "to": "Eric", "value": 3 }, + { "from": "Phoebe", "to": "Mike", "value": 18 }, + { "from": "Carol", "to": "Ben", "value": 1 }, + { "from": "Carol", "to": "Susan", "value": 1 }, + { "from": "Mr Geller", "to": "Mrs Geller", "value": 3 }, + { "from": "Frank", "to": "Alice", "value": 5 } +]); + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/README.md b/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/index.css b/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/index.html b/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/index.html new file mode 100644 index 00000000..ffb583bc --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - flow-chord-non-ribbon + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/index.js b/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/index.js new file mode 100644 index 00000000..25d008fc --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord-non-ribbon/index.js @@ -0,0 +1,84 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/flow-charts/ +var series = root.container.children.push(am5flow.ChordNonRibbon.new(root, { + sourceIdField: "from", + targetIdField: "to", + valueField: "value" +})); + +series.nodes.get("colors").set("step", 2); + +series.bullets.push(function (_root, _series, dataItem) { + var bullet = am5.Bullet.new(root, { + locationY: Math.random(), + sprite: am5.Circle.new(root, { + radius: 5, + fill: dataItem.get("source").get("fill") + }) + }); + + bullet.animate({ + key: "locationY", + to: 1, + from: 0, + duration: Math.random() * 1000 + 2000, + loops: Infinity, + easing: am5.ease.yoyo(am5.ease.cubic) + }); + + return bullet; +}); + +series.nodes.labels.template.setAll({ + textType: "regular", + fill: root.interfaceColors.get("background"), + fontSize: "1.1em", + radius: -5 +}); + +series.nodes.labels.template.states.create("disabled", { fill: am5.color(0xffffff) }); + +series.nodes.bullets.push(function(_root, _series, dataItem) { + var sprite = am5.Circle.new(root, { + radius: 20, + fill: dataItem.get("fill") + }); + + sprite.states.create("hidden", { fill: root.interfaceColors.get("disabled") }) + + return am5.Bullet.new(root, { + sprite: sprite + }); +}); + +series.children.moveValue(series.bulletsContainer, 0); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/flow-charts/#Setting_data +series.data.setAll([ + { from: "A", to: "D", value: 10 }, + { from: "B", to: "D", value: 8 }, + { from: "B", to: "E", value: 4 }, + { from: "B", to: "C", value: 2 }, + { from: "C", to: "E", value: 14 }, + { from: "E", to: "D", value: 8 }, + { from: "C", to: "A", value: 4 }, + { from: "G", to: "A", value: 7 } +]); + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord/README.md b/src/main/resources/static/js/amcharts5/examples/flow-chord/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord/index.css b/src/main/resources/static/js/amcharts5/examples/flow-chord/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord/index.html b/src/main/resources/static/js/amcharts5/examples/flow-chord/index.html new file mode 100644 index 00000000..76008eb5 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - flow-chord + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-chord/index.js b/src/main/resources/static/js/amcharts5/examples/flow-chord/index.js new file mode 100644 index 00000000..0094a33c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-chord/index.js @@ -0,0 +1,54 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/flow-charts/ +var series = root.container.children.push(am5flow.Chord.new(root, { + sourceIdField: "source", + targetIdField: "target", + valueField: "value" +})); +series.nodes.get("colors").set("step", 2); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/flow-charts/#Setting_data +series.data.setAll([ + { source: "Berlin", target: "Amsterdam", value: 14 }, + { source: "Berlin", target: "London", value: 33 }, + { source: "Berlin", target: "Paris", value: 13 }, + { source: "Berlin", target: "Madrid", value: 36 }, + + { source: "Amsterdam", target: "Berlin", value: 42 }, + { source: "Amsterdam", target: "London", value: 20 }, + { source: "Amsterdam", target: "Paris", value: 19 }, + { source: "Amsterdam", target: "Madrid", value: 11 }, + + { source: "London", target: "Amsterdam", value: 9 }, + { source: "London", target: "Berlin", value: 38 }, + { source: "London", target: "Paris", value: 41 }, + { source: "London", target: "Madrid", value: 16 }, + + { source: "Paris", target: "Amsterdam", value: 12 }, + { source: "Paris", target: "London", value: 16 }, + { source: "Paris", target: "Berlin", value: 21 }, + { source: "Paris", target: "Madrid", value: 8 }, + + { source: "Madrid", target: "Amsterdam", value: 22 }, + { source: "Madrid", target: "London", value: 25 }, + { source: "Madrid", target: "Paris", value: 19 }, + { source: "Madrid", target: "Berlin", value: 7 } +]); + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-sankey/README.md b/src/main/resources/static/js/amcharts5/examples/flow-sankey/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-sankey/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-sankey/index.css b/src/main/resources/static/js/amcharts5/examples/flow-sankey/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-sankey/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-sankey/index.html b/src/main/resources/static/js/amcharts5/examples/flow-sankey/index.html new file mode 100644 index 00000000..4c1e8b33 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-sankey/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - flow-sankey + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/flow-sankey/index.js b/src/main/resources/static/js/amcharts5/examples/flow-sankey/index.js new file mode 100644 index 00000000..97413653 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/flow-sankey/index.js @@ -0,0 +1,43 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/flow-charts/ +var series = root.container.children.push(am5flow.Sankey.new(root, { + sourceIdField: "from", + targetIdField: "to", + valueField: "value", + paddingRight: 50 +})); + +series.nodes.get("colors").set("step", 2); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/flow-charts/#Setting_data +series.data.setAll([ + { from: "A", to: "D", value: 10 }, + { from: "B", to: "D", value: 8 }, + { from: "B", to: "E", value: 4 }, + { from: "C", to: "E", value: 3 }, + { from: "D", to: "G", value: 5 }, + { from: "D", to: "I", value: 2 }, + { from: "D", to: "H", value: 3 }, + { from: "E", to: "H", value: 6 }, + { from: "G", to: "J", value: 5 }, + { from: "I", to: "J", value: 1 }, + { from: "H", to: "J", value: 9 } +]); + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/README.md b/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/index.css b/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/index.html b/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/index.html new file mode 100644 index 00000000..8d218e89 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/index.html @@ -0,0 +1,17 @@ + + + + + amCharts 5 Example - gantt-multilevel + + + +
+ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/index.js b/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/index.js new file mode 100644 index 00000000..7ef08f35 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt-multilevel/index.js @@ -0,0 +1,85 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + +// Create Gantt chart +// https://www.amcharts.com/docs/v5/charts/gantt/ +var gantt = root.container.children.push(am5gantt.Gantt.new(root, {})); + +// Set category data +// https://www.amcharts.com/docs/v5/charts/gantt/#Category_data +gantt.yAxis.data.setAll([{ + name: "Idea", + id: "gantt_0" +}, { + name: "Kick-off", + id: "gantt_1" +}, { + name: "Planning", + id: "gantt_2" +}, { + name: "Development", + id: "gantt_3" +}, { + name: "Testing", + id: "gantt_4" +}, { + name: "Finalization", + id: "gantt_5" +}, { + name: "Release", + id: "gantt_6" +}]); + +// Set series data +// https://www.amcharts.com/docs/v5/charts/gantt/#Series_data +gantt.series.data.setAll([{ + start: 1758142800000, + duration: 0, + progress: 1, + id: "gantt_0", + linkTo: ["gantt_1"] +}, { + start: 1758142800000, + duration: 2, + progress: 1, + id: "gantt_1", + linkTo: ["gantt_2"] +}, { + start: 1758488400000, + duration: 2, + progress: 0.2, + id: "gantt_2", + linkTo: ["gantt_3"] +}, { + start: 1758661200000, + duration: 1, + progress: 0.8, + id: "gantt_3", + linkTo: ["gantt_4"] +}, { + start: 1758747600000, + duration: 3, + progress: 0, + id: "gantt_4", + linkTo: ["gantt_5"] +}, { + start: 1759179600000, + duration: 0, + progress: 0, + id: "gantt_5", + linkTo: ["gantt_6"] +}, { + start: 1759179600000, + duration: 4, + progress: 0, + id: "gantt_6" +}]); + +gantt.appear(); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt-simple/README.md b/src/main/resources/static/js/amcharts5/examples/gantt-simple/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt-simple/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt-simple/index.css b/src/main/resources/static/js/amcharts5/examples/gantt-simple/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt-simple/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt-simple/index.html b/src/main/resources/static/js/amcharts5/examples/gantt-simple/index.html new file mode 100644 index 00000000..e7e29a14 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt-simple/index.html @@ -0,0 +1,17 @@ + + + + + amCharts 5 Example - gantt-simple + + + +
+ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt-simple/index.js b/src/main/resources/static/js/amcharts5/examples/gantt-simple/index.js new file mode 100644 index 00000000..de20ec87 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt-simple/index.js @@ -0,0 +1,85 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + +// Create Gantt chart +// https://www.amcharts.com/docs/v5/charts/gantt/ +var gantt = root.container.children.push(am5gantt.Gantt.new(root, {})); + +// Set category data +// https://www.amcharts.com/docs/v5/charts/gantt/#Category_data +gantt.yAxis.data.setAll([{ + name: "Idea", + id: "gantt_0" +}, { + name: "Kick-off", + id: "gantt_1" +}, { + name: "Planning", + id: "gantt_2" +}, { + name: "Development", + id: "gantt_3" +}, { + name: "Testing", + id: "gantt_4" +}, { + name: "Finalization", + id: "gantt_5" +}, { + name: "Release", + id: "gantt_6" +}]); + +// Set series data +// https://www.amcharts.com/docs/v5/charts/gantt/#Series_data +gantt.series.data.setAll([{ + start: 1758142800000, + duration: 0, + progress: 0, + id: "gantt_0", + linkTo: ["gantt_1"] +}, { + start: 1758142800000, + duration: 2, + progress: 0, + id: "gantt_1", + linkTo: ["gantt_2"] +}, { + start: 1758488400000, + duration: 2, + progress: 0, + id: "gantt_2", + linkTo: ["gantt_3"] +}, { + start: 1758661200000, + duration: 1, + progress: 0, + id: "gantt_3", + linkTo: ["gantt_4"] +}, { + start: 1758747600000, + duration: 3, + progress: 0, + id: "gantt_4", + linkTo: ["gantt_5"] +}, { + start: 1759179600000, + duration: 0, + progress: 0, + id: "gantt_5", + linkTo: ["gantt_6"] +}, { + start: 1759179600000, + duration: 4, + progress: 0, + id: "gantt_6" +}]); + +gantt.appear(); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt/README.md b/src/main/resources/static/js/amcharts5/examples/gantt/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt/index.css b/src/main/resources/static/js/amcharts5/examples/gantt/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt/index.html b/src/main/resources/static/js/amcharts5/examples/gantt/index.html new file mode 100644 index 00000000..22fdce95 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt/index.html @@ -0,0 +1,17 @@ + + + + + amCharts 5 Example - gantt + + + +
+ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gantt/index.js b/src/main/resources/static/js/amcharts5/examples/gantt/index.js new file mode 100644 index 00000000..61627ea6 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gantt/index.js @@ -0,0 +1,223 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + +// Create Gantt chart +// https://www.amcharts.com/docs/v5/charts/gantt/ +var gantt = root.container.children.push(am5gantt.Gantt.new(root, {})); + +// Default data +var categoryData = [{ + name: "Start", + id: "gantt_0" +}, { + name: "Design", + id: "gantt_1" +}, { + name: "Review", + id: "gantt_2", + parentId: "gantt_1", +}, { + name: "User tests", + id: "gantt_3", + parentId: "gantt_1", +}, { + name: "Programming", + id: "gantt_4" +}, { + name: "Task delegation", + id: "gantt_5", + parentId: "gantt_4", +}, { + name: "Coding", + id: "gantt_6", + parentId: "gantt_4", +}, { + name: "Testing", + id: "gantt_7", + parentId: "gantt_4", +}, { + name: "Deploying", + id: "gantt_8", + parentId: "gantt_4", +}, { + name: "Testing", + id: "gantt_9" +}, { + name: "Phase 1", + id: "gantt_10", + parentId: "gantt_9", +}, { + name: "Phase 2", + id: "gantt_11", + parentId: "gantt_9", +}, { + name: "Phase 3", + id: "gantt_12", + parentId: "gantt_9", +}, { + name: "End", + id: "gantt_15" +}]; + +var seriesData = [{ + start: 1758229200000, + duration: 0, + progress: 0, + id: "gantt_0", + linkTo: ["gantt_1"] +}, { + "category": "gantt_1", + progress: 0, + id: "gantt_1", + linkTo: ["gantt_4"] +}, { + "category": "gantt_2", + start: 1758488400000, + duration: 1, + progress: 1, + id: "gantt_2", + linkTo: ["gantt_3"] +}, { + "category": "gantt_3", + start: 1758574800000, + duration: 1, + progress: 1, + id: "gantt_3", + linkTo: [] +}, { + "category": "gantt_4", + progress: 0, + id: "gantt_4", + linkTo: ["gantt_9"] +}, { + "category": "gantt_5", + start: 1758747600000, + duration: 1, + progress: 1, + id: "gantt_5", + linkTo: ["gantt_6"] +}, { + "category": "gantt_6", + start: 1758834000000, + duration: 2, + progress: 0.4956235693230202, + id: "gantt_6", + linkTo: ["gantt_7"] +}, { + "category": "gantt_7", + start: 1759179600000, + duration: 1, + progress: 0, + id: "gantt_7", + linkTo: ["gantt_8"] +}, { + "category": "gantt_8", + start: 1759266000000, + duration: 2, + progress: 0, + id: "gantt_8" +}, { + "category": "gantt_9", + progress: 0, + id: "gantt_9", + linkTo: ["gantt_15"] +}, { + "category": "gantt_10", + start: 1759438800000, + duration: 1, + progress: 0, + id: "gantt_10", + linkTo: ["gantt_11"] +}, { + "category": "gantt_11", + start: 1759698000000, + duration: 1, + progress: 0, + id: "gantt_11", + linkTo: ["gantt_12"] +}, { + "category": "gantt_12", + start: 1759784400000, + duration: 2, + progress: 0, + id: "gantt_12" +}, { + start: 1760302800000, + duration: 0, + progress: 0, + id: "gantt_15" +}]; + +var markedDates = [1758661200000, 1759352400000]; + + +// Check if we have user-saved data in local storage +function loadGanttData() { + if (localStorage.getItem("am_gantt_data")) { + return JSON.parse(localStorage.getItem("am_gantt_data")); + } + return {}; +} + +function saveGanttData(gantt_data) { + localStorage.setItem("am_gantt_data", JSON.stringify(gantt_data)); + console.log("Data saved to localStorage"); +} + +function saveGanttMarkedDates() { + var gantt_data = loadGanttData(); + gantt_data.markedDates = gantt.xAxisMinor.axisRanges.values.map(function (range) { + return range.get("value"); + }); + saveGanttData(gantt_data); +} + +var gantt_data = loadGanttData(); + +if (gantt_data.categoryData) { + categoryData = gantt_data.categoryData; +} +if (gantt_data.seriesData) { + seriesData = gantt_data.seriesData; +} +if (gantt_data.markedDates) { + markedDates = gantt_data.markedDates; +} + +// Create axis ranges for marked dates +am5.array.each(markedDates, function (value) { + gantt.markDate(value); +}); + + +// Set data on axis and series +// https://www.amcharts.com/docs/v5/charts/gantt/#Category_data +// https://www.amcharts.com/docs/v5/charts/gantt/#Series_data +gantt.yAxis.data.setAll(categoryData); +gantt.series.data.setAll(seriesData); + +// Set up saving of data +gantt.events.onDebounced("valueschanged", function (ev) { + gantt_data.categoryData = gantt.yAxis.data.values; + gantt_data.seriesData = gantt.series.data.values; + saveGanttData(gantt_data); +}, 500); + +gantt.events.on("datemarked", function (ev) { + console.log("Date marked: " + ev.date + " (" + new Date(ev.date) + ") in " + ev.dataItem.get(name)); + saveGanttMarkedDates(); +}); + +gantt.events.on("dateunmarked", function (ev) { + console.log("Date unmarked: " + ev.date + " (" + new Date(ev.date) + ") in " + ev.dataItem.get(name)); + saveGanttMarkedDates(); +}); + +gantt.appear(); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gauge-bands/README.md b/src/main/resources/static/js/amcharts5/examples/gauge-bands/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gauge-bands/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gauge-bands/index.css b/src/main/resources/static/js/amcharts5/examples/gauge-bands/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gauge-bands/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gauge-bands/index.html b/src/main/resources/static/js/amcharts5/examples/gauge-bands/index.html new file mode 100644 index 00000000..ca1c11ac --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gauge-bands/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - gauge-bands + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gauge-bands/index.js b/src/main/resources/static/js/amcharts5/examples/gauge-bands/index.js new file mode 100644 index 00000000..1f0bad05 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gauge-bands/index.js @@ -0,0 +1,162 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/radar-chart/ +var chart = root.container.children.push(am5radar.RadarChart.new(root, { + panX: false, + panY: false, + startAngle: 160, + endAngle: 380 +})); + + +// Create axis and its renderer +// https://www.amcharts.com/docs/v5/charts/radar-chart/gauge-charts/#Axes +var axisRenderer = am5radar.AxisRendererCircular.new(root, { + innerRadius: -40 +}); + +axisRenderer.grid.template.setAll({ + stroke: root.interfaceColors.get("background"), + visible: true, + strokeOpacity: 0.8, + strokeWidth: 2, + crisp: false +}); + +var xAxis = chart.xAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation: 0, + min: -40, + max: 100, + strictMinMax: true, + renderer: axisRenderer +})); + + +// Add clock hand +// https://www.amcharts.com/docs/v5/charts/radar-chart/gauge-charts/#Clock_hands +var axisDataItem = xAxis.makeDataItem({}); + +var clockHand = am5radar.ClockHand.new(root, { + pinRadius: am5.percent(20), + radius: am5.percent(100), + bottomWidth: 40 +}) + +var bullet = axisDataItem.set("bullet", am5xy.AxisBullet.new(root, { + sprite: clockHand +})); + +xAxis.createAxisRange(axisDataItem); + +var label = chart.radarContainer.children.push(am5.Label.new(root, { + fill: am5.color(0xffffff), + centerX: am5.percent(50), + textAlign: "center", + centerY: am5.percent(50), + fontSize: "3em" +})); + +axisDataItem.set("value", 50); +bullet.get("sprite").on("rotation", function () { + var value = axisDataItem.get("value"); + var text = Math.round(axisDataItem.get("value")).toString(); + var fill = am5.color(0x000000); + xAxis.axisRanges.each(function (axisRange) { + if (value >= axisRange.get("value") && value <= axisRange.get("endValue")) { + fill = axisRange.get("axisFill").get("fill"); + } + }) + + label.set("text", Math.round(value).toString()); + + clockHand.pin.animate({ key: "fill", to: fill, duration: 500, easing: am5.ease.out(am5.ease.cubic) }) + clockHand.hand.animate({ key: "fill", to: fill, duration: 500, easing: am5.ease.out(am5.ease.cubic) }) +}); + +setInterval(function () { + axisDataItem.animate({ + key: "value", + to: Math.round(Math.random() * 140 - 40), + duration: 500, + easing: am5.ease.out(am5.ease.cubic) + }); +}, 2000) + +chart.bulletsContainer.set("mask", undefined); + + +// Create axis ranges bands +// https://www.amcharts.com/docs/v5/charts/radar-chart/gauge-charts/#Bands +var bandsData = [{ + title: "Unsustainable", + color: "#ee1f25", + lowScore: -40, + highScore: -20 +}, { + title: "Volatile", + color: "#f04922", + lowScore: -20, + highScore: 0 +}, { + title: "Foundational", + color: "#fdae19", + lowScore: 0, + highScore: 20 +}, { + title: "Developing", + color: "#f3eb0c", + lowScore: 20, + highScore: 40 +}, { + title: "Maturing", + color: "#b0d136", + lowScore: 40, + highScore: 60 +}, { + title: "Sustainable", + color: "#54b947", + lowScore: 60, + highScore: 80 +}, { + title: "High Performing", + color: "#0f9747", + lowScore: 80, + highScore: 100 +}]; + +am5.array.each(bandsData, function (data) { + var axisRange = xAxis.createAxisRange(xAxis.makeDataItem({ + above: true, + value: data.lowScore, + endValue: data.highScore + })); + + axisRange.get("axisFill").setAll({ + visible: true, + fill: am5.color(data.color), + fillOpacity: 0.8 + }); + + axisRange.get("label").setAll({ + text: data.title, + inside: true, + radius: 15, + fontSize: "0.9em", + fill: root.interfaceColors.get("background") + }); +}); + + +// Make stuff animate on load +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gauge/README.md b/src/main/resources/static/js/amcharts5/examples/gauge/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gauge/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gauge/index.css b/src/main/resources/static/js/amcharts5/examples/gauge/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gauge/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gauge/index.html b/src/main/resources/static/js/amcharts5/examples/gauge/index.html new file mode 100644 index 00000000..fa80d5f7 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gauge/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - gauge + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/gauge/index.js b/src/main/resources/static/js/amcharts5/examples/gauge/index.js new file mode 100644 index 00000000..ba2bd575 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/gauge/index.js @@ -0,0 +1,65 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/radar-chart/ +var chart = root.container.children.push(am5radar.RadarChart.new(root, { + panX: false, + panY: false, + startAngle: 180, + endAngle: 360 +})); + + +// Create axis and its renderer +// https://www.amcharts.com/docs/v5/charts/radar-chart/gauge-charts/#Axes +var axisRenderer = am5radar.AxisRendererCircular.new(root, { + innerRadius: -10, + strokeOpacity: 0.1 +}); + +var xAxis = chart.xAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation: 0, + min: 0, + max: 100, + strictMinMax: true, + renderer: axisRenderer +})); + + +// Add clock hand +// https://www.amcharts.com/docs/v5/charts/radar-chart/gauge-charts/#Clock_hands +var axisDataItem = xAxis.makeDataItem({}); +axisDataItem.set("value", 0); + +var bullet = axisDataItem.set("bullet", am5xy.AxisBullet.new(root, { + sprite: am5radar.ClockHand.new(root, { + radius: am5.percent(99) + }) +})); + +xAxis.createAxisRange(axisDataItem); + +axisDataItem.get("grid").set("visible", false); + +setInterval(function () { + axisDataItem.animate({ + key: "value", + to: Math.round(Math.random() * 100), + duration: 800, + easing: am5.ease.out(am5.ease.cubic) + }); +}, 2000); + + +// Make stuff animate on load +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/README.md b/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/index.css b/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/index.html b/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/index.html new file mode 100644 index 00000000..6087a45f --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - hierarchy-force-directed + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/index.js b/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/index.js new file mode 100644 index 00000000..0745713d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-force-directed/index.js @@ -0,0 +1,80 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create wrapper container +var container = root.container.children.push(am5.Container.new(root, { + width: am5.percent(100), + height: am5.percent(100), + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Adding +var series = container.children.push(am5hierarchy.ForceDirected.new(root, { + singleBranchOnly: false, + downDepth: 1, + initialDepth: 2, + valueField: "value", + categoryField: "name", + childDataField: "children" +})); + + +// Generate and set data +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Setting_data +var maxLevels = 2; +var maxNodes = 3; +var maxValue = 100; + +var data = { + name: "Root", + children: [] +} +generateLevel(data, "", 0); + +series.data.setAll([data]); +series.set("selectedDataItem", series.dataItems[0]); + +function generateLevel(data, name, level) { + for (var i = 0; i < Math.ceil(maxNodes * Math.random()) + 1; i++) { + var nodeName = name + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i]; + var child; + if (level < maxLevels) { + child = { + name: nodeName + level + } + + if (level > 0 && Math.random() < 0.5) { + child.value = Math.round(Math.random() * maxValue); + } + else { + child.children = []; + generateLevel(child, nodeName + i, level + 1) + } + } + else { + child = { + name: name + i, + value: Math.round(Math.random() * maxValue) + } + } + data.children.push(child); + } + + level++; + return data; +} + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/README.md b/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/index.css b/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/index.html b/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/index.html new file mode 100644 index 00000000..4bd7e4cf --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - hierarchy-pack + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/index.js b/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/index.js new file mode 100644 index 00000000..c348ffa4 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-pack/index.js @@ -0,0 +1,80 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create wrapper container +var container = root.container.children.push(am5.Container.new(root, { + width: am5.percent(100), + height: am5.percent(100), + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Adding +var series = container.children.push(am5hierarchy.Pack.new(root, { + singleBranchOnly: false, + downDepth: 1, + initialDepth: 10, + valueField: "value", + categoryField: "name", + childDataField: "children" +})); + + +// Generate and set data +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Setting_data +var maxLevels = 2; +var maxNodes = 3; +var maxValue = 100; + +var data = { + name: "Root", + children: [] +} +generateLevel(data, "", 0); + +series.data.setAll([data]); +series.set("selectedDataItem", series.dataItems[0]); + +function generateLevel(data, name, level) { + for (var i = 0; i < Math.ceil(maxNodes * Math.random()) + 1; i++) { + var nodeName = name + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i]; + var child; + if (level < maxLevels) { + child = { + name: nodeName + level + } + + if (level > 0 && Math.random() < 0.5) { + child.value = Math.round(Math.random() * maxValue); + } + else { + child.children = []; + generateLevel(child, nodeName + i, level + 1) + } + } + else { + child = { + name: name + i, + value: Math.round(Math.random() * maxValue) + } + } + data.children.push(child); + } + + level++; + return data; +} + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/README.md b/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/index.css b/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/index.html b/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/index.html new file mode 100644 index 00000000..48a3b56d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - hierarchy-partition + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/index.js b/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/index.js new file mode 100644 index 00000000..04835f2c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-partition/index.js @@ -0,0 +1,81 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create wrapper container +var container = root.container.children.push(am5.Container.new(root, { + width: am5.percent(100), + height: am5.percent(100), + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Adding +var series = container.children.push(am5hierarchy.Partition.new(root, { + singleBranchOnly: false, + orientation: "vertical", + downDepth: 1, + initialDepth: 10, + valueField: "value", + categoryField: "name", + childDataField: "children" +})); + + +// Generate and set data +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Setting_data +var maxLevels = 2; +var maxNodes = 3; +var maxValue = 100; + +var data = { + name: "Root", + children: [] +} +generateLevel(data, "", 0); + +series.data.setAll([data]); +series.set("selectedDataItem", series.dataItems[0]); + +function generateLevel(data, name, level) { + for (var i = 0; i < Math.ceil(maxNodes * Math.random()) + 1; i++) { + var nodeName = name + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i]; + var child; + if (level < maxLevels) { + child = { + name: nodeName + level + } + + if (level > 0 && Math.random() < 0.5) { + child.value = Math.round(Math.random() * maxValue); + } + else { + child.children = []; + generateLevel(child, nodeName + i, level + 1) + } + } + else { + child = { + name: name + i, + value: Math.round(Math.random() * maxValue) + } + } + data.children.push(child); + } + + level++; + return data; +} + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/README.md b/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/index.css b/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/index.html b/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/index.html new file mode 100644 index 00000000..08d686ba --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - hierarchy-sunburst + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/index.js b/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/index.js new file mode 100644 index 00000000..59d9e079 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-sunburst/index.js @@ -0,0 +1,80 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create wrapper container +var container = root.container.children.push(am5.Container.new(root, { + width: am5.percent(100), + height: am5.percent(100), + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Adding +var series = container.children.push(am5hierarchy.Sunburst.new(root, { + singleBranchOnly: true, + downDepth: 10, + initialDepth: 10, + valueField: "value", + categoryField: "name", + childDataField: "children" +})); + + +// Generate and set data +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Setting_data +var maxLevels = 2; +var maxNodes = 3; +var maxValue = 100; + +var data = { + name: "Root", + children: [] +} +generateLevel(data, "", 0); + +series.data.setAll([data]); +series.set("selectedDataItem", series.dataItems[0]); + +function generateLevel(data, name, level) { + for (var i = 0; i < Math.ceil(maxNodes * Math.random()) + 1; i++) { + var nodeName = name + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i]; + var child; + if (level < maxLevels) { + child = { + name: nodeName + level + } + + if (level > 0 && Math.random() < 0.5) { + child.value = Math.round(Math.random() * maxValue); + } + else { + child.children = []; + generateLevel(child, nodeName + i, level + 1) + } + } + else { + child = { + name: name + i, + value: Math.round(Math.random() * maxValue) + } + } + data.children.push(child); + } + + level++; + return data; +} + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/README.md b/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/index.css b/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/index.html b/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/index.html new file mode 100644 index 00000000..6d28b604 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - hierarchy-tree + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/index.js b/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/index.js new file mode 100644 index 00000000..0259384d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-tree/index.js @@ -0,0 +1,80 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create wrapper container +var container = root.container.children.push(am5.Container.new(root, { + width: am5.percent(100), + height: am5.percent(100), + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Adding +var series = container.children.push(am5hierarchy.Tree.new(root, { + singleBranchOnly: false, + downDepth: 1, + initialDepth: 10, + valueField: "value", + categoryField: "name", + childDataField: "children" +})); + + +// Generate and set data +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Setting_data +var maxLevels = 3; +var maxNodes = 3; +var maxValue = 100; + +var data = { + name: "Root", + children: [] +} +generateLevel(data, "", 0); + +series.data.setAll([data]); +series.set("selectedDataItem", series.dataItems[0]); + +function generateLevel(data, name, level) { + for (var i = 0; i < Math.ceil(maxNodes * Math.random()) + 1; i++) { + var nodeName = name + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i]; + var child; + if (level < maxLevels) { + child = { + name: nodeName + level + } + + if (level > 0 && Math.random() < 0.5) { + child.value = Math.round(Math.random() * maxValue); + } + else { + child.children = []; + generateLevel(child, nodeName + i, level + 1) + } + } + else { + child = { + name: name + i, + value: Math.round(Math.random() * maxValue) + } + } + data.children.push(child); + } + + level++; + return data; +} + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/README.md b/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/index.css b/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/index.html b/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/index.html new file mode 100644 index 00000000..7e6131c4 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - hierarchy-treemap + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/index.js b/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/index.js new file mode 100644 index 00000000..188dc122 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-treemap/index.js @@ -0,0 +1,87 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create wrapper container +var container = root.container.children.push(am5.Container.new(root, { + width: am5.percent(100), + height: am5.percent(100), + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Adding +var series = container.children.push(am5hierarchy.Treemap.new(root, { + singleBranchOnly: false, + downDepth: 1, + upDepth: 1, + initialDepth: 1, + valueField: "value", + categoryField: "name", + childDataField: "children" +})); + + +// Generate and set data +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Setting_data +var maxLevels = 2; +var maxNodes = 6; +var maxValue = 100; + +var data = { + name: "Root", + children: [] +} +generateLevel(data, "", 0); + +series.data.setAll([data]); +series.set("selectedDataItem", series.dataItems[0]); + +container.children.moveValue( + am5hierarchy.BreadcrumbBar.new(root, { + series: series + }), 0 +); + +function generateLevel(data, name, level) { + for (var i = 0; i < Math.ceil(maxNodes * Math.random()) + 1; i++) { + var nodeName = name + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[i]; + var child; + if (level < maxLevels) { + child = { + name: nodeName + level + } + + if (level > 0 && Math.random() < 0.5) { + child.value = Math.round(Math.random() * maxValue); + } + else { + child.children = []; + generateLevel(child, nodeName + i, level + 1) + } + } + else { + child = { + name: name + i, + value: Math.round(Math.random() * maxValue) + } + } + data.children.push(child); + } + + level++; + return data; +} + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/README.md b/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/index.css b/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/index.html b/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/index.html new file mode 100644 index 00000000..6126d5e9 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - hierarchy-voronoi-treemap + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/index.js b/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/index.js new file mode 100644 index 00000000..8d27df4a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/hierarchy-voronoi-treemap/index.js @@ -0,0 +1,1293 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Create custom theme... +var myTheme = am5.Theme.new(root); + +// ... no stroke and fill on zero level +myTheme.rule("Polygon", ["hierarchy", "node", "shape", "depth0"]).setAll({ + strokeOpacity: 0, + fillOpacity: 0 +}); + +// ... thick stroke and full opacity on first level +myTheme.rule("Polygon", ["hierarchy", "node", "shape", "depth1"]).setAll({ + strokeWidth: 5, + fillOpacity: 1, + stroke: am5.color(0x000000) +}); + +// ... no fill and thin stroke on second level +myTheme.rule("Polygon", ["hierarchy", "node", "shape", "depth2"]).setAll({ + fillOpacity: 0, + strokeWidth: 1, + stroke: am5.color(0x000000) +}); + +// ... by default last lever is not clickable, but we change it here, so, add pointer on the last level +myTheme.rule("HierarchyNode", ["last"]).setAll({ + cursorOverStyle: "pointer" +}); + +// ... set global settings for all labels +myTheme.rule("Label", ["node"]).setAll({ + fontSize: 11, + minScale: 0.7 +}); + +// ... hide label of zero level +myTheme.rule("Label", ["node", "depth0"]).setAll({ + forceHidden: true +}); + +// ... hide label of first level +myTheme.rule("Label", ["node", "depth1"]).setAll({ + forceHidden: true +}); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root), + myTheme +]); + + +// Prepare data +var data = { + "children": [ + { + "name": "Africa", + "children": [ + { + "id": "DZ", + "name": "Algeria", + "population": 40400000 + }, + { + "id": "AO", + "name": "Angola", + "population": 25868000 + }, + { + "id": "BJ", + "name": "Benin", + "population": 10653654 + }, + { + "id": "BW", + "name": "Botswana", + "population": 2141206 + }, + { + "id": "BF", + "name": "Burkina Faso", + "population": 19034397 + }, + { + "id": "BI", + "name": "Burundi", + "population": 10114505 + }, + { + "id": "CV", + "name": "Cabo Verde", + "population": 531239 + }, + { + "id": "CM", + "name": "Cameroon", + "population": 22709892 + }, + { + "id": "CF", + "name": "Central African Republic", + "population": 4998000 + }, + { + "id": "TD", + "name": "Chad", + "population": 14497000 + }, + { + "id": "KM", + "name": "Comoros", + "population": 806153 + }, + { + "id": "CG", + "name": "Congo (Brazzaville)", + "population": 4741000 + }, + { + "id": "CD", + "name": "Congo (Kinshasa)", + "population": 85026000 + }, + { + "id": "DJ", + "name": "Djibouti", + "population": 900000 + }, + { + "id": "EG", + "name": "Egypt", + "population": 91251890 + }, + { + "id": "GQ", + "name": "Equatorial Guinea", + "population": 1222442 + }, + { + "id": "ER", + "name": "Eritrea", + "population": 4474690 + }, + { + "id": "SZ", + "name": "Eswatini", + "population": 1136191 + }, + { + "id": "ET", + "name": "Ethiopia", + "population": 102403196 + }, + { + "id": "GA", + "name": "Gabon", + "population": 1802278 + }, + { + "id": "GM", + "name": "Gambia", + "population": 1882450 + }, + { + "id": "GH", + "name": "Ghana", + "population": 27670174 + }, + { + "id": "GN", + "name": "Guinea", + "population": 12947000 + }, + { + "id": "GW", + "name": "Guinea-Bissau", + "population": 1547777 + }, + { + "id": "KE", + "name": "Kenya", + "population": 47251000 + }, + { + "id": "LS", + "name": "Lesotho", + "population": 2263010 + }, + { + "id": "LR", + "name": "Liberia", + "population": 4615000 + }, + { + "id": "LY", + "name": "Libya", + "population": 6385000 + }, + { + "id": "MG", + "name": "Madagascar", + "population": 22434363 + }, + { + "id": "MW", + "name": "Malawi", + "population": 18622104 + }, + { + "id": "ML", + "name": "Mali", + "population": 17994837 + }, + { + "id": "MR", + "name": "Mauritania", + "population": 4420184 + }, + { + "id": "MU", + "name": "Mauritius", + "population": 1262879 + }, + { + "id": "MA", + "name": "Morocco", + "population": 34224455 + }, + { + "id": "MZ", + "name": "Mozambique", + "population": 28829476 + }, + { + "id": "NA", + "name": "Namibia", + "population": 2324004 + }, + { + "id": "NE", + "name": "Niger", + "population": 21477348 + }, + { + "id": "NG", + "name": "Nigeria", + "population": 186988000 + }, + { + "id": "RW", + "name": "Rwanda", + "population": 11553188 + }, + { + "id": "ST", + "name": "São Tomé and Príncipe", + "population": 187356 + }, + { + "id": "SN", + "name": "Senegal", + "population": 14799859 + }, + { + "id": "SC", + "name": "Seychelles", + "population": 91400 + }, + { + "id": "SL", + "name": "Sierra Leone", + "population": 7075641 + }, + { + "id": "SO", + "name": "Somalia", + "population": 11079000 + }, + { + "id": "ZA", + "name": "South Africa", + "population": 55653654 + }, + { + "id": "SS", + "name": "South Sudan", + "population": 12131000 + }, + { + "id": "SD", + "name": "Sudan", + "population": 39598700 + }, + { + "id": "TZ", + "name": "Tanzania", + "population": 55155000 + }, + { + "id": "TG", + "name": "Togo", + "population": 7606374 + }, + { + "id": "TN", + "name": "Tunisia", + "population": 11154400 + }, + { + "id": "UG", + "name": "Uganda", + "population": 39570125 + }, + { + "id": "EH", + "name": "Western Sahara", + "population": 510713 + }, + { + "id": "ZM", + "name": "Zambia", + "population": 15933883 + }, + { + "id": "ZW", + "name": "Zimbabwe", + "population": 14240168 + } + ] + }, + { + "name": "Asia", + "children": [ + { + "id": "AF", + "name": "Afghanistan", + "population": 27657145 + }, + { + "id": "AM", + "name": "Armenia", + "population": 2994400 + }, + { + "id": "AZ", + "name": "Azerbaijan", + "population": 9730500 + }, + { + "id": "BH", + "name": "Bahrain", + "population": 1404900 + }, + { + "id": "BD", + "name": "Bangladesh", + "population": 161006790 + }, + { + "id": "BT", + "name": "Bhutan", + "population": 775620 + }, + { + "id": "BN", + "name": "Brunei", + "population": 408786 + }, + { + "id": "KH", + "name": "Cambodia", + "population": 15626444 + }, + { + "id": "CN", + "name": "China", + "population": 1373540000 + }, + { + "id": "GE", + "name": "Georgia", + "population": 3720400 + }, + { + "id": "IN", + "name": "India", + "population": 1324171354 + }, + { + "id": "ID", + "name": "Indonesia", + "population": 261115456 + }, + { + "id": "IR", + "name": "Iran", + "population": 79369900 + }, + { + "id": "IQ", + "name": "Iraq", + "population": 37883543 + }, + { + "id": "IL", + "name": "Israel", + "population": 8547100 + }, + { + "id": "JP", + "name": "Japan", + "population": 126672000 + }, + { + "id": "JO", + "name": "Jordan", + "population": 9531712 + }, + { + "id": "KZ", + "name": "Kazakhstan", + "population": 17753200 + }, + { + "id": "KW", + "name": "Kuwait", + "population": 4137309 + }, + { + "id": "KG", + "name": "Kyrgyzstan", + "population": 6045117 + }, + { + "id": "LA", + "name": "Laos", + "population": 6492400 + }, + { + "id": "LB", + "name": "Lebanon", + "population": 6006668 + }, + { + "id": "MY", + "name": "Malaysia", + "population": 31187265 + }, + { + "id": "MV", + "name": "Maldives", + "population": 427756 + }, + { + "id": "MN", + "name": "Mongolia", + "population": 3086918 + }, + { + "id": "MM", + "name": "Myanmar", + "population": 51419420 + }, + { + "id": "NP", + "name": "Nepal", + "population": 28431500 + }, + { + "id": "KP", + "name": "North Korea", + "population": 25000000 + }, + { + "id": "OM", + "name": "Oman", + "population": 4420133 + }, + { + "id": "PK", + "name": "Pakistan", + "population": 193203476 + }, + { + "id": "PH", + "name": "Philippines", + "population": 103320222 + }, + { + "id": "QA", + "name": "Qatar", + "population": 2587564 + }, + { + "id": "RU", + "name": "Russia", + "population": 146599183 + }, + { + "id": "SA", + "name": "Saudi Arabia", + "population": 32248200 + }, + { + "id": "SG", + "name": "Singapore", + "population": 5607000 + }, + { + "id": "KR", + "name": "South Korea", + "population": 50982212 + }, + { + "id": "LK", + "name": "Sri Lanka", + "population": 20950000 + }, + { + "id": "SY", + "name": "Syria", + "population": 18564000 + }, + { + "id": "TW", + "name": "Taiwan", + "population": 23503349 + }, + { + "id": "TJ", + "name": "Tajikistan", + "population": 8593600 + }, + { + "id": "TH", + "name": "Thailand", + "population": 65327652 + }, + { + "id": "TR", + "name": "Turkey", + "population": 78741053 + }, + { + "id": "TM", + "name": "Turkmenistan", + "population": 4751120 + }, + { + "id": "AE", + "name": "United Arab Emirates", + "population": 9856000 + }, + { + "id": "UZ", + "name": "Uzbekistan", + "population": 31910641 + }, + { + "id": "VN", + "name": "Vietnam", + "population": 92700000 + }, + { + "id": "YE", + "name": "Yemen", + "population": 27478000 + } + ] + }, + { + "name": "Europe", + "children": [ + { + "id": "AL", + "name": "Albania", + "population": 2876591 + }, + { + "id": "AD", + "name": "Andorra", + "population": 78014 + }, + { + "id": "AT", + "name": "Austria", + "population": 8735453 + }, + { + "id": "BY", + "name": "Belarus", + "population": 9500000 + }, + { + "id": "BE", + "name": "Belgium", + "population": 11319511 + }, + { + "id": "BA", + "name": "Bosnia and Herzegovina", + "population": 3531159 + }, + { + "id": "BG", + "name": "Bulgaria", + "population": 7153784 + }, + { + "id": "HR", + "name": "Croatia", + "population": 4190669 + }, + { + "id": "CY", + "name": "Cyprus", + "population": 847000 + }, + { + "id": "CZ", + "name": "Czech Republic", + "population": 10558524 + }, + { + "id": "DK", + "name": "Denmark", + "population": 5717014 + }, + { + "id": "EE", + "name": "Estonia", + "population": 1315819 + }, + { + "id": "FO", + "name": "Faroe Islands", + "population": 49188 + }, + { + "id": "FI", + "name": "Finland", + "population": 5491817 + }, + { + "id": "FR", + "name": "France", + "population": 66710000 + }, + { + "id": "DE", + "name": "Germany", + "population": 82667685 + }, + { + "id": "GI", + "name": "Gibraltar", + "population": 33140 + }, + { + "id": "GR", + "name": "Greece", + "population": 10858018 + }, + { + "id": "GG", + "name": "Guernsey", + "population": 62999 + }, + { + "id": "HU", + "name": "Hungary", + "population": 9823000 + }, + { + "id": "IS", + "name": "Iceland", + "population": 334300 + }, + { + "id": "IE", + "name": "Ireland", + "population": 6378000 + }, + { + "id": "IM", + "name": "Isle of Man", + "population": 84497 + }, + { + "id": "IT", + "name": "Italy", + "population": 60665551 + }, + { + "id": "JE", + "name": "Jersey", + "population": 100800 + }, + { + "id": "LV", + "name": "Latvia", + "population": 1961600 + }, + { + "id": "LI", + "name": "Liechtenstein", + "population": 37623 + }, + { + "id": "LT", + "name": "Lithuania", + "population": 2932367 + }, + { + "id": "LU", + "name": "Luxembourg", + "population": 576200 + }, + { + "id": "MK", + "name": "Macedonia", + "population": 2058539 + }, + { + "id": "MT", + "name": "Malta", + "population": 429344 + }, + { + "id": "MD", + "name": "Moldova", + "population": 3553100 + }, + { + "id": "MC", + "name": "Monaco", + "population": 38400 + }, + { + "id": "ME", + "name": "Montenegro", + "population": 621810 + }, + { + "id": "NL", + "name": "Netherlands", + "population": 17019800 + }, + { + "id": "NO", + "name": "Norway", + "population": 5223256 + }, + { + "id": "PL", + "name": "Poland", + "population": 38437239 + }, + { + "id": "PT", + "name": "Portugal", + "population": 10374822 + }, + { + "id": "RO", + "name": "Romania", + "population": 19861408 + }, + { + "id": "RU", + "name": "Russia", + "population": 146599183 + }, + { + "id": "SM", + "name": "San Marino", + "population": 33005 + }, + { + "id": "RS", + "name": "Serbia", + "population": 7076372 + }, + { + "id": "SK", + "name": "Slovakia", + "population": 5426252 + }, + { + "id": "SI", + "name": "Slovenia", + "population": 2064188 + }, + { + "id": "ES", + "name": "Spain", + "population": 46438422 + }, + { + "id": "SJ", + "name": "Svalbard and Jan Mayen", + "population": 3200 + }, + { + "id": "SE", + "name": "Sweden", + "population": 9851017 + }, + { + "id": "CH", + "name": "Switzerland", + "population": 8372098 + }, + { + "id": "UA", + "name": "Ukraine", + "population": 42692393 + }, + { + "id": "GB", + "name": "United Kingdom", + "population": 65110000 + }, + { + "id": "VA", + "name": "Vatican City", + "population": 451 + } + ] + }, + { + "name": "North America", + "children": [ + { + "id": "AI", + "name": "Anguilla", + "population": 13452 + }, + { + "id": "AG", + "name": "Antigua and Barbuda", + "population": 86295 + }, + { + "id": "BS", + "name": "Bahamas", + "population": 378040 + }, + { + "id": "BB", + "name": "Barbados", + "population": 285000 + }, + { + "id": "BZ", + "name": "Belize", + "population": 360346 + }, + { + "id": "BM", + "name": "Bermuda", + "population": 61954 + }, + { + "id": "CA", + "name": "Canada", + "population": 36155487 + }, + { + "id": "KY", + "name": "Cayman Islands", + "population": 58238 + }, + { + "id": "CR", + "name": "Costa Rica", + "population": 4999441 + }, + { + "id": "CU", + "name": "Cuba", + "population": 11239004 + }, + { + "id": "DM", + "name": "Dominica", + "population": 71293 + }, + { + "id": "DO", + "name": "Dominican Republic", + "population": 10075045 + }, + { + "id": "SV", + "name": "El Salvador", + "population": 6520675 + }, + { + "id": "GL", + "name": "Greenland", + "population": 55877 + }, + { + "id": "GD", + "name": "Grenada", + "population": 103328 + }, + { + "id": "GT", + "name": "Guatemala", + "population": 16176133 + }, + { + "id": "HT", + "name": "Haiti", + "population": 11078033 + }, + { + "id": "HN", + "name": "Honduras", + "population": 8576532 + }, + { + "id": "JM", + "name": "Jamaica", + "population": 2723246 + }, + { + "id": "MX", + "name": "Mexico", + "population": 122273473 + }, + { + "id": "MS", + "name": "Montserrat", + "population": 4922 + }, + { + "id": "NI", + "name": "Nicaragua", + "population": 6262703 + }, + { + "id": "PA", + "name": "Panama", + "population": 3814672 + }, + { + "id": "PR", + "name": "Puerto Rico", + "population": 3474182 + }, + { + "id": "KN", + "name": "Saint Kitts and Nevis", + "population": 46204 + }, + { + "id": "LC", + "name": "Saint Lucia", + "population": 186000 + }, + { + "id": "PM", + "name": "Saint Pierre and Miquelon", + "population": 6069 + }, + { + "id": "VC", + "name": "Saint Vincent and the Grenadines", + "population": 109991 + }, + { + "id": "TT", + "name": "Trinidad and Tobago", + "population": 1228691 + }, + { + "id": "TC", + "name": "Turks and Caicos Islands", + "population": 31458 + }, + { + "id": "US", + "name": "United States", + "population": 326766748 + }, + { + "id": "VI", + "name": "U.S. Virgin Islands", + "population": 106235 + } + ] + }, + { + "name": "South America", + "children": [ + { + "id": "AR", + "name": "Argentina", + "population": 43847430 + }, + { + "id": "BO", + "name": "Bolivia", + "population": 11051600 + }, + { + "id": "BR", + "name": "Brazil", + "population": 209288278 + }, + { + "id": "CL", + "name": "Chile", + "population": 18191900 + }, + { + "id": "CO", + "name": "Colombia", + "population": 49065615 + }, + { + "id": "EC", + "name": "Ecuador", + "population": 16624858 + }, + { + "id": "FK", + "name": "Falkland Islands", + "population": 2563 + }, + { + "id": "GF", + "name": "French Guiana", + "population": 269352 + }, + { + "id": "GY", + "name": "Guyana", + "population": 777859 + }, + { + "id": "PY", + "name": "Paraguay", + "population": 6811297 + }, + { + "id": "PE", + "name": "Peru", + "population": 32165485 + }, + { + "id": "SR", + "name": "Suriname", + "population": 542975 + }, + { + "id": "UY", + "name": "Uruguay", + "population": 3456750 + }, + { + "id": "VE", + "name": "Venezuela", + "population": 31977065 + } + ] + }, + { + "name": "Oceania", + "children": [ + { + "id": "AS", + "name": "American Samoa", + "population": 55641 + }, + { + "id": "AU", + "name": "Australia", + "population": 24450561 + }, + { + "id": "CK", + "name": "Cook Islands", + "population": 17380 + }, + { + "id": "FJ", + "name": "Fiji", + "population": 905502 + }, + { + "id": "PF", + "name": "French Polynesia", + "population": 271800 + }, + { + "id": "GU", + "name": "Guam", + "population": 168564 + }, + { + "id": "KI", + "name": "Kiribati", + "population": 113400 + }, + { + "id": "MH", + "name": "Marshall Islands", + "population": 53127 + }, + { + "id": "FM", + "name": "Micronesia", + "population": 105544 + }, + { + "id": "NR", + "name": "Nauru", + "population": 10084 + }, + { + "id": "NC", + "name": "New Caledonia", + "population": 268767 + }, + { + "id": "NZ", + "name": "New Zealand", + "population": 4693200 + }, + { + "id": "NU", + "name": "Niue", + "population": 1618 + }, + { + "id": "NF", + "name": "Norfolk Island", + "population": 2302 + }, + { + "id": "MP", + "name": "Northern Mariana Islands", + "population": 56940 + }, + { + "id": "PW", + "name": "Palau", + "population": 21729 + }, + { + "id": "PG", + "name": "Papua New Guinea", + "population": 8251162 + }, + { + "id": "PN", + "name": "Pitcairn Islands", + "population": 56 + }, + { + "id": "WS", + "name": "Samoa", + "population": 196440 + }, + { + "id": "SB", + "name": "Solomon Islands", + "population": 611343 + }, + { + "id": "TK", + "name": "Tokelau", + "population": 1411 + }, + { + "id": "TO", + "name": "Tonga", + "population": 108020 + }, + { + "id": "TV", + "name": "Tuvalu", + "population": 11323 + }, + { + "id": "VU", + "name": "Vanuatu", + "population": 276244 + }, + { + "id": "WF", + "name": "Wallis and Futuna", + "population": 11750 + } + ] + } + ] +} + +// Group small countries into Others +am5.array.each(data.children, function (continent) { + var others = { + name: "Others", + id: "Others", + population: 0 + }; + + for (var i = continent.children.length - 1; i >= 0; i--) { + var country = continent.children[i]; + if (country.population < 5000000) { + others.population += country.population + am5.array.remove(continent.children, country); + } + } + continent.children.push(others); +}); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Adding +var series = root.container.children.push(am5hierarchy.VoronoiTreemap.new(root, { + paddingLeft: 5, + paddingRight: 5, + paddingTop: 5, + paddingBottom: 5, + singleBranchOnly: true, + downDepth: 2, + upDepth: 0, + initialDepth: 2, + valueField: "population", + categoryField: "name", + childDataField: "children", + idField: "name", + type: "polygon", + cornerCount: 120 +})); + +// Show full name if polygon is big and only the id if its small +series.labels.template.adapters.add("x", function (x, target) { + var dataItem = target.dataItem ; + if (dataItem) { + var polygon = dataItem.get("polygon"); + if (polygon) { + var minX = polygon.getPrivate("minX", 0); + var maxX = polygon.getPrivate("maxX", 0); + var dataContext = dataItem.dataContext ; + + if (dataContext) { + if (maxX - minX < 50) { + target.set("text", dataContext.id); + } + else { + target.set("text", dataContext.name); + } + } + } + } + return x; +}); + +// WQhen last level node is clicked, zoom to parent +series.nodes.template.events.on("click", function (e) { + var dataItem = e.target.dataItem ; + if (dataItem) { + if (!dataItem.get("children")) { + series.selectDataItem(dataItem.get("parent")); + } + } +}); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Setting_data +series.data.setAll([data]); + + +// Select root node +// https://www.amcharts.com/docs/v5/charts/hierarchy/#Pre_selected_branch +series.set("selectedDataItem", series.dataItems[0]); + + +// Make stuff animate on load +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/json-pie/README.md b/src/main/resources/static/js/amcharts5/examples/json-pie/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/json-pie/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/json-pie/index.css b/src/main/resources/static/js/amcharts5/examples/json-pie/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/json-pie/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/json-pie/index.html b/src/main/resources/static/js/amcharts5/examples/json-pie/index.html new file mode 100644 index 00000000..44a8d723 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/json-pie/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - json-pie + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/json-pie/index.js b/src/main/resources/static/js/amcharts5/examples/json-pie/index.js new file mode 100644 index 00000000..f6d5cc85 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/json-pie/index.js @@ -0,0 +1,71 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + +// Parse chart config +// https://www.amcharts.com/docs/v5/concepts/serializing/ +am5plugins_json.JsonParser.new(root).parse({ + refs: [{ + data: [{ + country: "France", + sales: 100000 + }, { + country: "Spain", + sales: 160000 + }, { + country: "United Kingdom", + sales: 80000 + }], + }, { + series: { + type: "PieSeries", + settings: { + name: "Series", + valueField: "sales", + categoryField: "country" + }, + properties: { + data: "#data" + } + }, + }], + type: "PieChart", + settings: { + layout: "vertical", + }, + properties: { + series: [ + "#series" + ] + }, + children: [{ + type: "Legend", + settings: { + centerX: { + type: "Percent", + value: 50 + }, + x: { + type: "Percent", + value: 50 + }, + layout: "horizontal" + }, + properties: { + data: "#series.dataItems" + } + }] +}, { + parent: root.container +}).then(function (chart) { + // Make stuff animate on load + // https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation + chart.series.getIndex(0).appear(1000); + chart.appear(1000, 100); +}); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/json-xy/README.md b/src/main/resources/static/js/amcharts5/examples/json-xy/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/json-xy/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/json-xy/index.css b/src/main/resources/static/js/amcharts5/examples/json-xy/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/json-xy/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/json-xy/index.html b/src/main/resources/static/js/amcharts5/examples/json-xy/index.html new file mode 100644 index 00000000..0d842766 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/json-xy/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - json-xy + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/json-xy/index.js b/src/main/resources/static/js/amcharts5/examples/json-xy/index.js new file mode 100644 index 00000000..5647d01c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/json-xy/index.js @@ -0,0 +1,221 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + +// Specify date fields, so that they are formatted accordingly in tooltips +// https://www.amcharts.com/docs/v5/concepts/formatters/data-placeholders/#Formatting_placeholders +root.dateFormatter.setAll({ + dateFields: ["valueX"] +}); + +// Parse chart config +// https://www.amcharts.com/docs/v5/concepts/serializing/ +am5plugins_json.JsonParser.new(root).parse({ + refs: { + data: [ + { + "date": 1652425200000, + "value": 92 + }, + { + "date": 1652511600000, + "value": 95 + }, + { + "date": 1652598000000, + "value": 100 + }, + { + "date": 1652684400000, + "value": 100 + }, + { + "date": 1652770800000, + "value": 96 + }, + { + "date": 1652857200000, + "value": 97 + }, + { + "date": 1652943600000, + "value": 94 + }, + { + "date": 1653030000000, + "value": 89 + }, + { + "date": 1653116400000, + "value": 89 + }, + { + "date": 1653202800000, + "value": 87 + }, + { + "date": 1653289200000, + "value": 84 + }, + { + "date": 1653375600000, + "value": 81 + }, + { + "date": 1653462000000, + "value": 85 + }, + { + "date": 1653548400000, + "value": 89 + }, + { + "date": 1653634800000, + "value": 86 + }, + { + "date": 1653721200000, + "value": 90 + }, + { + "date": 1653807600000, + "value": 93 + }, + { + "date": 1653894000000, + "value": 94 + }, + { + "date": 1653980400000, + "value": 94 + }, + { + "date": 1654066800000, + "value": 96 + } + ], + xAxis: { + type: "DateAxis", + settings: { + maxDeviation: 0.5, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: { + type: "AxisRendererX", + settings: { + minorGridEnabled:true, + pan: "zoom" + }, + properties: { + grid: { + properties: { + template: { + settings: { + strokeOpacity: 0.2 + } + } + } + } + } + }, + tooltip: { + type: "Tooltip", + }, + } + }, + yAxis: { + type: "ValueAxis", + settings: { + maxDeviation: 1, + renderer: { + type: "AxisRendererY", + settings: { + pan: "zoom" + }, + }, + } + }, + }, + type: "XYChart", + settings: { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + cursor: { + type: "XYCursor", + settings: { + behavior: "zoomX" + }, + properties: { + lineY: { + settings: { + visible: false + }, + }, + }, + }, + scrollbarX: { + type: "Scrollbar", + settings: { + orientation: "horizontal" + } + }, + }, + properties: { + xAxes: [ + "#xAxis", + ], + yAxes: [ + "#yAxis", + ], + series: [ + { + type: "LineSeries", + settings: { + name: "Series", + xAxis: "#xAxis", + yAxis: "#yAxis", + valueYField: "value", + valueXField: "date", + tooltip: { + type: "Tooltip", + settings: { + labelText: "{valueX}: {valueY}" + } + }, + }, + properties: { + data: "#data", + bullets: [{ + type: "Bullet", + settings: { + sprite: { + type: "Circle", + settings: { + radius: 5, + fill: "@series.get('fill')" + } + } + } + }] + } + }, + ], + }, +}, { + parent: root.container +}).then(function (chart) { + // Make stuff animate on load + // https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation + chart.series.getIndex(0).appear(1000); + chart.appear(1000, 100); +}); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/README.md b/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/index.css b/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/index.html b/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/index.html new file mode 100644 index 00000000..80fd41bb --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - map-animating-along-lines + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/index.js b/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/index.js new file mode 100644 index 00000000..d0e810f6 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-animating-along-lines/index.js @@ -0,0 +1,201 @@ +/** + * --------------------------------------- + * This demo was created using amCharts 5. + * + * For more information visit: + * https://www.amcharts.com/ + * + * Documentation is available at: + * https://www.amcharts.com/docs/v5/ + * --------------------------------------- + */ + +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([am5themes_Animated.new(root)]); + +// Create the map chart +// https://www.amcharts.com/docs/v5/charts/map-chart/ +var chart = root.container.children.push( + am5map.MapChart.new(root, { + panX: "rotateX", + panY: "rotateY", + projection: am5map.geoMercator() + }) +); + +var cont = chart.children.push( + am5.Container.new(root, { + layout: root.horizontalLayout, + x: 20, + y: 40 + }) +); + +// Add labels and controls +cont.children.push( + am5.Label.new(root, { + centerY: am5.p50, + text: "Map" + }) +); + +var switchButton = cont.children.push( + am5.Button.new(root, { + themeTags: ["switch"], + centerY: am5.p50, + icon: am5.Circle.new(root, { + themeTags: ["icon"] + }) + }) +); + +switchButton.on("active", function () { + if (!switchButton.get("active")) { + chart.set("projection", am5map.geoMercator()); + backgroundSeries.mapPolygons.template.set("fillOpacity", 0); + } else { + chart.set("projection", am5map.geoOrthographic()); + backgroundSeries.mapPolygons.template.set("fillOpacity", 0.1); + } +}); + +cont.children.push( + am5.Label.new(root, { + centerY: am5.p50, + text: "Globe" + }) +); + +// Create series for background fill +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/#Background_polygon +var backgroundSeries = chart.series.push(am5map.MapPolygonSeries.new(root, {})); +backgroundSeries.mapPolygons.template.setAll({ + fill: root.interfaceColors.get("alternativeBackground"), + fillOpacity: 0, + strokeOpacity: 0 +}); + +// Add background polygon +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/#Background_polygon +backgroundSeries.data.push({ + geometry: am5map.getGeoRectangle(90, 180, -90, -180) +}); + +// Create main polygon series for countries +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/ +var polygonSeries = chart.series.push( + am5map.MapPolygonSeries.new(root, { + geoJSON: am5geodata_worldLow + }) +); + +// graticule series +var graticuleSeries = chart.series.push(am5map.GraticuleSeries.new(root, {})); +graticuleSeries.mapLines.template.setAll({ + stroke: root.interfaceColors.get("alternativeBackground"), + strokeOpacity: 0.08 +}); + + +// Create line series for trajectory lines +// https://www.amcharts.com/docs/v5/charts/map-chart/map-line-series/ +var lineSeries = chart.series.push(am5map.MapLineSeries.new(root, {})); +lineSeries.mapLines.template.setAll({ + stroke: root.interfaceColors.get("alternativeBackground"), + strokeOpacity: 0.3 +}); + +// Create point series for markers +// https://www.amcharts.com/docs/v5/charts/map-chart/map-point-series/ +var pointSeries = chart.series.push(am5map.MapPointSeries.new(root, {})); + +pointSeries.bullets.push(function () { + var circle = am5.Circle.new(root, { + radius: 7, + tooltipText: "Drag me!", + cursorOverStyle: "pointer", + tooltipY: 0, + fill: am5.color(0xffba00), + stroke: root.interfaceColors.get("background"), + strokeWidth: 2, + draggable: true + }); + + circle.events.on("dragged", function (event) { + var dataItem = event.target.dataItem; + var projection = chart.get("projection"); + var geoPoint = chart.invert({ x: circle.x(), y: circle.y() }); + + dataItem.setAll({ + longitude: geoPoint.longitude, + latitude: geoPoint.latitude + }); + }); + + return am5.Bullet.new(root, { + sprite: circle + }); +}); + +var paris = addCity({ latitude: 48.8567, longitude: 2.351 }, "Paris"); +var toronto = addCity({ latitude: 43.8163, longitude: -79.4287 }, "Toronto"); +var la = addCity({ latitude: 34.3, longitude: -118.15 }, "Los Angeles"); +var havana = addCity({ latitude: 23, longitude: -82 }, "Havana"); + +var lineDataItem = lineSeries.pushDataItem({ + pointsToConnect: [paris, toronto, la, havana] +}); + +var planeSeries = chart.series.push(am5map.MapPointSeries.new(root, {})); + +var plane = am5.Graphics.new(root, { + svgPath: + "m2,106h28l24,30h72l-44,-133h35l80,132h98c21,0 21,34 0,34l-98,0 -80,134h-35l43,-133h-71l-24,30h-28l15,-47", + scale: 0.06, + centerY: am5.p50, + centerX: am5.p50, + fill: am5.color(0x000000) +}); + +planeSeries.bullets.push(function () { + var container = am5.Container.new(root, {}); + container.children.push(plane); + return am5.Bullet.new(root, { sprite: container }); +}); + +var planeDataItem = planeSeries.pushDataItem({ + lineDataItem: lineDataItem, + positionOnLine: 0, + autoRotate: true +}); + +planeDataItem.animate({ + key: "positionOnLine", + to: 1, + duration: 10000, + loops: Infinity, + easing: am5.ease.yoyo(am5.ease.linear) +}); + +planeDataItem.on("positionOnLine", function (value) { + if (value >= 0.99) { + plane.set("rotation", 180); + } else if (value <= 0.01) { + plane.set("rotation", 0); + } +}); + +function addCity(coords, title) { + return pointSeries.pushDataItem({ + latitude: coords.latitude, + longitude: coords.longitude + }); +} + +// Make stuff animate on load +chart.appear(1000, 100); diff --git a/src/main/resources/static/js/amcharts5/examples/map-clustered-points/README.md b/src/main/resources/static/js/amcharts5/examples/map-clustered-points/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-clustered-points/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-clustered-points/index.css b/src/main/resources/static/js/amcharts5/examples/map-clustered-points/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-clustered-points/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-clustered-points/index.html b/src/main/resources/static/js/amcharts5/examples/map-clustered-points/index.html new file mode 100644 index 00000000..1c009937 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-clustered-points/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - map-clustered-points + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-clustered-points/index.js b/src/main/resources/static/js/amcharts5/examples/map-clustered-points/index.js new file mode 100644 index 00000000..070d6e4b --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-clustered-points/index.js @@ -0,0 +1,286 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + +// Create the map chart +// https://www.amcharts.com/docs/v5/charts/map-chart/ +var chart = root.container.children.push( + am5map.MapChart.new(root, { + panX: "rotateX", + panY: "translateY", + projection: am5map.geoMercator(), + }) +); + +chart.set("zoomControl", am5map.ZoomControl.new(root, { +})); + + +// Create main polygon series for countries +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/ +var polygonSeries = chart.series.push( + am5map.MapPolygonSeries.new(root, { + geoJSON: am5geodata_worldLow, + exclude: ["AQ"] + }) +); + +polygonSeries.mapPolygons.template.setAll({ + fill:am5.color(0xdadada) +}); + + +// Create point series for markers +// https://www.amcharts.com/docs/v5/charts/map-chart/map-point-series/ +var pointSeries = chart.series.push(am5map.ClusteredPointSeries.new(root, {})); + + +// Set clustered bullet +// https://www.amcharts.com/docs/v5/charts/map-chart/clustered-point-series/#Group_bullet +pointSeries.set("clusteredBullet", function (root) { + var container = am5.Container.new(root, { + cursorOverStyle:"pointer" + }); + + var circle1 = container.children.push(am5.Circle.new(root, { + radius: 8, + tooltipY: 0, + fill: am5.color(0xff8c00) + })); + + var circle2 = container.children.push(am5.Circle.new(root, { + radius: 12, + fillOpacity: 0.3, + tooltipY: 0, + fill: am5.color(0xff8c00) + })); + + var circle3 = container.children.push(am5.Circle.new(root, { + radius: 16, + fillOpacity: 0.3, + tooltipY: 0, + fill: am5.color(0xff8c00) + })); + + var label = container.children.push(am5.Label.new(root, { + centerX: am5.p50, + centerY: am5.p50, + fill: am5.color(0xffffff), + populateText: true, + fontSize: "8", + text: "{value}" + })); + + container.events.on("click", function (e) { + pointSeries.zoomToCluster(e.target.dataItem); + }); + + return am5.Bullet.new(root, { + sprite: container + }); +}); + +// Create regular bullets +pointSeries.bullets.push(function () { + var circle = am5.Circle.new(root, { + radius: 6, + tooltipY: 0, + fill: am5.color(0xff8c00), + tooltipText: "{title}" + }); + + return am5.Bullet.new(root, { + sprite: circle + }); +}); + + +// Set data +var cities = [ + { title: "Vienna", latitude: 48.2092, longitude: 16.3728 }, + { title: "Minsk", latitude: 53.9678, longitude: 27.5766 }, + { title: "Brussels", latitude: 50.8371, longitude: 4.3676 }, + { title: "Sarajevo", latitude: 43.8608, longitude: 18.4214 }, + { title: "Sofia", latitude: 42.7105, longitude: 23.3238 }, + { title: "Zagreb", latitude: 45.815, longitude: 15.9785 }, + { title: "Pristina", latitude: 42.666667, longitude: 21.166667 }, + { title: "Prague", latitude: 50.0878, longitude: 14.4205 }, + { title: "Copenhagen", latitude: 55.6763, longitude: 12.5681 }, + { title: "Tallinn", latitude: 59.4389, longitude: 24.7545 }, + { title: "Helsinki", latitude: 60.1699, longitude: 24.9384 }, + { title: "Paris", latitude: 48.8567, longitude: 2.351 }, + { title: "Berlin", latitude: 52.5235, longitude: 13.4115 }, + { title: "Athens", latitude: 37.9792, longitude: 23.7166 }, + { title: "Budapest", latitude: 47.4984, longitude: 19.0408 }, + { title: "Reykjavik", latitude: 64.1353, longitude: -21.8952 }, + { title: "Dublin", latitude: 53.3441, longitude: -6.2675 }, + { title: "Rome", latitude: 41.8955, longitude: 12.4823 }, + { title: "Riga", latitude: 56.9465, longitude: 24.1049 }, + { title: "Vaduz", latitude: 47.1411, longitude: 9.5215 }, + { title: "Vilnius", latitude: 54.6896, longitude: 25.2799 }, + { title: "Luxembourg", latitude: 49.61, longitude: 6.1296 }, + { title: "Skopje", latitude: 42.0024, longitude: 21.4361 }, + { title: "Valletta", latitude: 35.9042, longitude: 14.5189 }, + { title: "Chisinau", latitude: 47.0167, longitude: 28.8497 }, + { title: "Monaco", latitude: 43.7325, longitude: 7.4189 }, + { title: "Podgorica", latitude: 42.4602, longitude: 19.2595 }, + { title: "Amsterdam", latitude: 52.3738, longitude: 4.891 }, + { title: "Oslo", latitude: 59.9138, longitude: 10.7387 }, + { title: "Warsaw", latitude: 52.2297, longitude: 21.0122 }, + { title: "Lisbon", latitude: 38.7072, longitude: -9.1355 }, + { title: "Bucharest", latitude: 44.4479, longitude: 26.0979 }, + { title: "Moscow", latitude: 55.7558, longitude: 37.6176 }, + { title: "San Marino", latitude: 43.9424, longitude: 12.4578 }, + { title: "Belgrade", latitude: 44.8048, longitude: 20.4781 }, + { title: "Bratislava", latitude: 48.2116, longitude: 17.1547 }, + { title: "Ljubljana", latitude: 46.0514, longitude: 14.506 }, + { title: "Madrid", latitude: 40.4167, longitude: -3.7033 }, + { title: "Stockholm", latitude: 59.3328, longitude: 18.0645 }, + { title: "Bern", latitude: 46.948, longitude: 7.4481 }, + { title: "Kiev", latitude: 50.4422, longitude: 30.5367 }, + { title: "London", latitude: 51.5002, longitude: -0.1262 }, + { title: "Gibraltar", latitude: 36.1377, longitude: -5.3453 }, + { title: "Saint Peter Port", latitude: 49.466, longitude: -2.5522 }, + { title: "Douglas", latitude: 54.167, longitude: -4.4821 }, + { title: "Saint Helier", latitude: 49.1919, longitude: -2.1071 }, + { title: "Longyearbyen", latitude: 78.2186, longitude: 15.6488 }, + { title: "Kabul", latitude: 34.5155, longitude: 69.1952 }, + { title: "Yerevan", latitude: 40.1596, longitude: 44.509 }, + { title: "Baku", latitude: 40.3834, longitude: 49.8932 }, + { title: "Manama", latitude: 26.1921, longitude: 50.5354 }, + { title: "Dhaka", latitude: 23.7106, longitude: 90.3978 }, + { title: "Thimphu", latitude: 27.4405, longitude: 89.673 }, + { title: "Bandar Seri Begawan", latitude: 4.9431, longitude: 114.9425 }, + { title: "Phnom Penh", latitude: 11.5434, longitude: 104.8984 }, + { title: "Peking", latitude: 39.9056, longitude: 116.3958 }, + { title: "Nicosia", latitude: 35.1676, longitude: 33.3736 }, + { title: "T'bilisi", latitude: 41.701, longitude: 44.793 }, + { title: "New Delhi", latitude: 28.6353, longitude: 77.225 }, + { title: "Jakarta", latitude: -6.1862, longitude: 106.8063 }, + { title: "Teheran", latitude: 35.7061, longitude: 51.4358 }, + { title: "Baghdad", latitude: 33.3157, longitude: 44.3922 }, + { title: "Jerusalem", latitude: 31.76, longitude: 35.17 }, + { title: "Tokyo", latitude: 35.6785, longitude: 139.6823 }, + { title: "Amman", latitude: 31.9394, longitude: 35.9349 }, + { title: "Astana", latitude: 51.1796, longitude: 71.4475 }, + { title: "Kuwait", latitude: 29.3721, longitude: 47.9824 }, + { title: "Bishkek", latitude: 42.8679, longitude: 74.5984 }, + { title: "Vientiane", latitude: 17.9689, longitude: 102.6137 }, + { title: "Beyrouth / Beirut", latitude: 33.8872, longitude: 35.5134 }, + { title: "Kuala Lumpur", latitude: 3.1502, longitude: 101.7077 }, + { title: "Ulan Bator", latitude: 47.9138, longitude: 106.922 }, + { title: "Pyinmana", latitude: 19.7378, longitude: 96.2083 }, + { title: "Kathmandu", latitude: 27.7058, longitude: 85.3157 }, + { title: "Muscat", latitude: 23.6086, longitude: 58.5922 }, + { title: "Islamabad", latitude: 33.6751, longitude: 73.0946 }, + { title: "Manila", latitude: 14.579, longitude: 120.9726 }, + { title: "Doha", latitude: 25.2948, longitude: 51.5082 }, + { title: "Riyadh", latitude: 24.6748, longitude: 46.6977 }, + { title: "Singapore", latitude: 1.2894, longitude: 103.85 }, + { title: "Seoul", latitude: 37.5139, longitude: 126.9828 }, + { title: "Colombo", latitude: 6.9155, longitude: 79.8572 }, + { title: "Damascus", latitude: 33.5158, longitude: 36.2939 }, + { title: "Taipei", latitude: 25.0338, longitude: 121.5645 }, + { title: "Dushanbe", latitude: 38.5737, longitude: 68.7738 }, + { title: "Bangkok", latitude: 13.7573, longitude: 100.502 }, + { title: "Dili", latitude: -8.5662, longitude: 125.588 }, + { title: "Ankara", latitude: 39.9439, longitude: 32.856 }, + { title: "Ashgabat", latitude: 37.9509, longitude: 58.3794 }, + { title: "Abu Dhabi", latitude: 24.4764, longitude: 54.3705 }, + { title: "Tashkent", latitude: 41.3193, longitude: 69.2481 }, + { title: "Hanoi", latitude: 21.0341, longitude: 105.8372 }, + { title: "Sanaa", latitude: 15.3556, longitude: 44.2081 }, + { title: "Buenos Aires", latitude: -34.6118, longitude: -58.4173 }, + { title: "Bridgetown", latitude: 13.0935, longitude: -59.6105 }, + { title: "Belmopan", latitude: 17.2534, longitude: -88.7713 }, + { title: "Sucre", latitude: -19.0421, longitude: -65.2559 }, + { title: "Brasilia", latitude: -15.7801, longitude: -47.9292 }, + { title: "Ottawa", latitude: 45.4235, longitude: -75.6979 }, + { title: "Santiago", latitude: -33.4691, longitude: -70.642 }, + { title: "Bogota", latitude: 4.6473, longitude: -74.0962 }, + { title: "San Jose", latitude: 9.9402, longitude: -84.1002 }, + { title: "Havana", latitude: 23.1333, longitude: -82.3667 }, + { title: "Roseau", latitude: 15.2976, longitude: -61.39 }, + { title: "Santo Domingo", latitude: 18.479, longitude: -69.8908 }, + { title: "Quito", latitude: -0.2295, longitude: -78.5243 }, + { title: "San Salvador", latitude: 13.7034, longitude: -89.2073 }, + { title: "Guatemala", latitude: 14.6248, longitude: -90.5328 }, + { title: "Ciudad de Mexico", latitude: 19.4271, longitude: -99.1276 }, + { title: "Managua", latitude: 12.1475, longitude: -86.2734 }, + { title: "Panama", latitude: 8.9943, longitude: -79.5188 }, + { title: "Asuncion", latitude: -25.3005, longitude: -57.6362 }, + { title: "Lima", latitude: -12.0931, longitude: -77.0465 }, + { title: "Castries", latitude: 13.9972, longitude: -60.0018 }, + { title: "Paramaribo", latitude: 5.8232, longitude: -55.1679 }, + { title: "Washington D.C.", latitude: 38.8921, longitude: -77.0241 }, + { title: "Montevideo", latitude: -34.8941, longitude: -56.0675 }, + { title: "Caracas", latitude: 10.4961, longitude: -66.8983 }, + { title: "Oranjestad", latitude: 12.5246, longitude: -70.0265 }, + { title: "Cayenne", latitude: 4.9346, longitude: -52.3303 }, + { title: "Plymouth", latitude: 16.6802, longitude: -62.2014 }, + { title: "San Juan", latitude: 18.45, longitude: -66.0667 }, + { title: "Algiers", latitude: 36.7755, longitude: 3.0597 }, + { title: "Luanda", latitude: -8.8159, longitude: 13.2306 }, + { title: "Porto-Novo", latitude: 6.4779, longitude: 2.6323 }, + { title: "Gaborone", latitude: -24.657, longitude: 25.9089 }, + { title: "Ouagadougou", latitude: 12.3569, longitude: -1.5352 }, + { title: "Bujumbura", latitude: -3.3818, longitude: 29.3622 }, + { title: "Yaounde", latitude: 3.8612, longitude: 11.5217 }, + { title: "Bangui", latitude: 4.3621, longitude: 18.5873 }, + { title: "Brazzaville", latitude: -4.2767, longitude: 15.2662 }, + { title: "Kinshasa", latitude: -4.3369, longitude: 15.3271 }, + { title: "Yamoussoukro", latitude: 6.8067, longitude: -5.2728 }, + { title: "Djibouti", latitude: 11.5806, longitude: 43.1425 }, + { title: "Cairo", latitude: 30.0571, longitude: 31.2272 }, + { title: "Asmara", latitude: 15.3315, longitude: 38.9183 }, + { title: "Addis Abeba", latitude: 9.0084, longitude: 38.7575 }, + { title: "Libreville", latitude: 0.3858, longitude: 9.4496 }, + { title: "Banjul", latitude: 13.4399, longitude: -16.6775 }, + { title: "Accra", latitude: 5.5401, longitude: -0.2074 }, + { title: "Conakry", latitude: 9.537, longitude: -13.6785 }, + { title: "Bissau", latitude: 11.8598, longitude: -15.5875 }, + { title: "Nairobi", latitude: -1.2762, longitude: 36.7965 }, + { title: "Maseru", latitude: -29.2976, longitude: 27.4854 }, + { title: "Monrovia", latitude: 6.3106, longitude: -10.8047 }, + { title: "Tripoli", latitude: 32.883, longitude: 13.1897 }, + { title: "Antananarivo", latitude: -18.9201, longitude: 47.5237 }, + { title: "Lilongwe", latitude: -13.9899, longitude: 33.7703 }, + { title: "Bamako", latitude: 12.653, longitude: -7.9864 }, + { title: "Nouakchott", latitude: 18.0669, longitude: -15.99 }, + { title: "Port Louis", latitude: -20.1654, longitude: 57.4896 }, + { title: "Rabat", latitude: 33.9905, longitude: -6.8704 }, + { title: "Maputo", latitude: -25.9686, longitude: 32.5804 }, + { title: "Windhoek", latitude: -22.5749, longitude: 17.0805 }, + { title: "Niamey", latitude: 13.5164, longitude: 2.1157 }, + { title: "Abuja", latitude: 9.058, longitude: 7.4891 }, + { title: "Kigali", latitude: -1.9441, longitude: 30.0619 }, + { title: "Dakar", latitude: 14.6953, longitude: -17.4439 }, + { title: "Freetown", latitude: 8.4697, longitude: -13.2659 }, + { title: "Mogadishu", latitude: 2.0411, longitude: 45.3426 }, + { title: "Pretoria", latitude: -25.7463, longitude: 28.1876 }, + { title: "Mbabane", latitude: -26.3186, longitude: 31.141 }, + { title: "Dodoma", latitude: -6.167, longitude: 35.7497 }, + { title: "Lome", latitude: 6.1228, longitude: 1.2255 }, + { title: "Tunis", latitude: 36.8117, longitude: 10.1761 } +]; + +for (var i = 0; i < cities.length; i++) { + var city = cities[i]; + addCity(city.longitude, city.latitude, city.title); +} + +function addCity(longitude, latitude, title) { + pointSeries.data.push({ + geometry: { type: "Point", coordinates: [longitude, latitude] }, + title: title + }); +} + +// Make stuff animate on load +chart.appear(1000, 100); diff --git a/src/main/resources/static/js/amcharts5/examples/map-day-and-night/README.md b/src/main/resources/static/js/amcharts5/examples/map-day-and-night/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-day-and-night/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-day-and-night/index.css b/src/main/resources/static/js/amcharts5/examples/map-day-and-night/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-day-and-night/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-day-and-night/index.html b/src/main/resources/static/js/amcharts5/examples/map-day-and-night/index.html new file mode 100644 index 00000000..fb9ab2d7 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-day-and-night/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - map-day-and-night + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-day-and-night/index.js b/src/main/resources/static/js/amcharts5/examples/map-day-and-night/index.js new file mode 100644 index 00000000..38c9a05e --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-day-and-night/index.js @@ -0,0 +1,323 @@ +/** + * --------------------------------------- + * This demo was created using amCharts 5. + * + * For more information visit: + * https://www.amcharts.com/ + * + * Documentation is available at: + * https://www.amcharts.com/docs/v5/ + * --------------------------------------- + */ + +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([am5themes_Animated.new(root)]); + +// Create the map chart +// https://www.amcharts.com/docs/v5/charts/map-chart/ +var chart = root.container.children.push( + am5map.MapChart.new(root, { + panX: "rotateX", + panY: "rotateY", + projection: am5map.geoMercator() + }) +); + +// Create series for background fill +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/#Background_polygon +var backgroundSeries = chart.series.push(am5map.MapPolygonSeries.new(root, {})); +backgroundSeries.mapPolygons.template.setAll({ + fill: root.interfaceColors.get("alternativeBackground"), + fillOpacity: 0, + strokeOpacity: 0 +}); +// Add background polygo +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/#Background_polygon +backgroundSeries.data.push({ + geometry: am5map.getGeoRectangle(90, 180, -90, -180) +}); + +// Create main polygon series for countries +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/ +var polygonSeries = chart.series.push( + am5map.MapPolygonSeries.new(root, { + geoJSON: am5geodata_worldLow + }) +); + +// Create point series for Sun icon +// https://www.amcharts.com/docs/v5/charts/map-chart/map-point-series/ +var sunSeries = chart.series.push(am5map.MapPointSeries.new(root, {})); + +sunSeries.bullets.push(function () { + var circle = am5.Circle.new(root, { + radius: 18, + fill: am5.color(0xffba00), + filter: "blur(5px)" + }); + + circle.animate({ + key: "radius", + duration: 2000, + to: 23, + loops: Infinity, + easing: am5.ease.yoyo(am5.ease.linear) + }); + + return am5.Bullet.new(root, { + sprite: circle + }); +}); + +sunSeries.bullets.push(function () { + return am5.Bullet.new(root, { + sprite: am5.Circle.new(root, { + radius: 14, + fill: am5.color(0xffba00) + }) + }); +}); + +var sunDataItem = sunSeries.pushDataItem({}); + +// Create polygon series for night-time polygons +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/ +var nightSeries = chart.series.push(am5map.MapPolygonSeries.new(root, {})); + +nightSeries.mapPolygons.template.setAll({ + fill: am5.color(0x000000), + fillOpacity: 0.25, + strokeOpacity: 0 +}); + +var nightDataItem0 = nightSeries.pushDataItem({}); +var nightDataItem1 = nightSeries.pushDataItem({}); +var nightDataItem2 = nightSeries.pushDataItem({}); + +// Create controls +var container = chart.children.push( + am5.Container.new(root, { + y: am5.percent(95), + centerX: am5.p50, + x: am5.p50, + width: am5.percent(80), + layout: root.horizontalLayout + }) +); + +var playButton = container.children.push( + am5.Button.new(root, { + themeTags: ["play"], + centerY: am5.p50, + marginRight: 15, + icon: am5.Graphics.new(root, { + themeTags: ["icon"] + }) + }) +); + +playButton.events.on("click", function () { + if (playButton.get("active")) { + slider.set("start", slider.get("start") + 0.0001); + } else { + slider.animate({ + key: "start", + to: 1, + duration: 15000 * (1 - slider.get("start")) + }); + } +}); + +var slider = container.children.push( + am5.Slider.new(root, { + orientation: "horizontal", + start: 0.5, + centerY: am5.p50 + }) +); + +slider.on("start", function (start) { + if (start === 1) { + playButton.set("active", false); + } +}); + +slider.events.on("rangechanged", function () { + updateDateNight( + (slider.get("start", 0) - 0.5) * am5.time.getDuration("day", 2) + + new Date().getTime() + ); +}); + +var cont = chart.children.push( + am5.Container.new(root, { + layout: root.horizontalLayout, + x: 20, + y: 40 + }) +); + +cont.children.push( + am5.Label.new(root, { + centerY: am5.p50, + text: "Map" + }) +); + +var switchButton = cont.children.push( + am5.Button.new(root, { + themeTags: ["switch"], + centerY: am5.p50, + icon: am5.Circle.new(root, { + themeTags: ["icon"] + }) + }) +); + +switchButton.on("active", function () { + if (!switchButton.get("active")) { + chart.set("projection", am5map.geoMercator()); + chart.set("panY", "translateY"); + chart.set("panX", "translateX"); + backgroundSeries.mapPolygons.template.set("fillOpacity", 0); + } else { + chart.set("projection", am5map.geoOrthographic()); + chart.set("panY", "rotateY"); + chart.set("panX", "rotateX"); + backgroundSeries.mapPolygons.template.set("fillOpacity", 0.1); + } +}); +cont.children.push( + am5.Label.new(root, { + centerY: am5.p50, + text: "Globe" + }) +); + +chart.appear(1000, 100); + +function updateDateNight(time) { + var sunPosition = solarPosition(time); + sunDataItem.set("longitude", sunPosition.longitude); + sunDataItem.set("latitude", sunPosition.latitude); + + var nightPosition = { + longitude: sunPosition.longitude + 180, + latitude: -sunPosition.latitude + }; + + nightDataItem0.set("geometry", am5map.getGeoCircle(nightPosition, 92)); + nightDataItem1.set("geometry", am5map.getGeoCircle(nightPosition, 90)); + nightDataItem2.set("geometry", am5map.getGeoCircle(nightPosition, 88)); +} + +var offset = new Date().getTimezoneOffset() * 60 * 1000; +//updateDateNight(new Date().getTime()); + +// all sun position calculation is taken from: http://bl.ocks.org/mbostock/4597134 +function solarPosition(time) { + var centuries = (time - Date.UTC(2000, 0, 1, 12)) / 864e5 / 36525; // since J2000 + var longitude = + ((am5.time.round(new Date(time), "day", 1).getTime() - time - offset) / + 864e5) * + 360 - + 180; + + return am5map.normalizeGeoPoint({ + longitude: longitude - equationOfTime(centuries) * am5.math.DEGREES, + latitude: solarDeclination(centuries) * am5.math.DEGREES + }); +} + +// Equations based on NOAA’s Solar Calculator; all angles in RADIANS. +// http://www.esrl.noaa.gov/gmd/grad/solcalc/ + +function equationOfTime(centuries) { + var e = eccentricityEarthOrbit(centuries), + m = solarGeometricMeanAnomaly(centuries), + l = solarGeometricMeanLongitude(centuries), + y = Math.tan(obliquityCorrection(centuries) / 2); + + y *= y; + return ( + y * Math.sin(2 * l) - + 2 * e * Math.sin(m) + + 4 * e * y * Math.sin(m) * Math.cos(2 * l) - + 0.5 * y * y * Math.sin(4 * l) - + 1.25 * e * e * Math.sin(2 * m) + ); +} + +function solarDeclination(centuries) { + return Math.asin( + Math.sin(obliquityCorrection(centuries)) * + Math.sin(solarApparentLongitude(centuries)) + ); +} + +function solarApparentLongitude(centuries) { + return ( + solarTrueLongitude(centuries) - + (0.00569 + + 0.00478 * Math.sin((125.04 - 1934.136 * centuries) * am5.math.RADIANS)) * + am5.math.RADIANS + ); +} + +function solarTrueLongitude(centuries) { + return ( + solarGeometricMeanLongitude(centuries) + solarEquationOfCenter(centuries) + ); +} + +function solarGeometricMeanAnomaly(centuries) { + return ( + (357.52911 + centuries * (35999.05029 - 0.0001537 * centuries)) * + am5.math.RADIANS + ); +} + +function solarGeometricMeanLongitude(centuries) { + var l = (280.46646 + centuries * (36000.76983 + centuries * 0.0003032)) % 360; + return ((l < 0 ? l + 360 : l) / 180) * Math.PI; +} + +function solarEquationOfCenter(centuries) { + var m = solarGeometricMeanAnomaly(centuries); + return ( + (Math.sin(m) * (1.914602 - centuries * (0.004817 + 0.000014 * centuries)) + + Math.sin(m + m) * (0.019993 - 0.000101 * centuries) + + Math.sin(m + m + m) * 0.000289) * + am5.math.RADIANS + ); +} + +function obliquityCorrection(centuries) { + return ( + meanObliquityOfEcliptic(centuries) + + 0.00256 * + Math.cos((125.04 - 1934.136 * centuries) * am5.math.RADIANS) * + am5.math.RADIANS + ); +} + +function meanObliquityOfEcliptic(centuries) { + return ( + (23 + + (26 + + (21.448 - + centuries * (46.815 + centuries * (0.00059 - centuries * 0.001813))) / + 60) / + 60) * + am5.math.RADIANS + ); +} + +function eccentricityEarthOrbit(centuries) { + return 0.016708634 - centuries * (0.000042037 + 0.0000001267 * centuries); +} diff --git a/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/README.md b/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/index.css b/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/index.html b/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/index.html new file mode 100644 index 00000000..03db33d3 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - map-globe-rotate-to-country + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/index.js b/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/index.js new file mode 100644 index 00000000..7199bdaf --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-globe-rotate-to-country/index.js @@ -0,0 +1,80 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create the map chart +// https://www.amcharts.com/docs/v5/charts/map-chart/ +var chart = root.container.children.push(am5map.MapChart.new(root, { + panX: "rotateX", + panY: "rotateY", + projection: am5map.geoOrthographic(), + paddingBottom: 20, + paddingTop: 20, + paddingLeft: 20, + paddingRight: 20 +})); + + +// Create main polygon series for countries +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/ +var polygonSeries = chart.series.push(am5map.MapPolygonSeries.new(root, { + geoJSON: am5geodata_worldLow +})); + +polygonSeries.mapPolygons.template.setAll({ + tooltipText: "{name}", + toggleKey: "active", + interactive: true +}); + +polygonSeries.mapPolygons.template.states.create("hover", { + fill: root.interfaceColors.get("primaryButtonHover") +}); + +polygonSeries.mapPolygons.template.states.create("active", { + fill: root.interfaceColors.get("primaryButtonHover") +}); + + +// Create series for background fill +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/#Background_polygon +var backgroundSeries = chart.series.push(am5map.MapPolygonSeries.new(root, {})); +backgroundSeries.mapPolygons.template.setAll({ + fill: root.interfaceColors.get("alternativeBackground"), + fillOpacity: 0.1, + strokeOpacity: 0 +}); +backgroundSeries.data.push({ + geometry: am5map.getGeoRectangle(90, 180, -90, -180) +}); + + +// Set up events +var previousPolygon; + +polygonSeries.mapPolygons.template.on("active", function (active, target) { + if (previousPolygon && previousPolygon != target) { + previousPolygon.set("active", false); + } + if (target.get("active")) { + var centroid = target.geoCentroid(); + if (centroid) { + chart.animate({ key: "rotationX", to: -centroid.longitude, duration: 1500, easing: am5.ease.inOut(am5.ease.cubic) }); + chart.animate({ key: "rotationY", to: -centroid.latitude, duration: 1500, easing: am5.ease.inOut(am5.ease.cubic) }); + } + } + + previousPolygon = target; +}); + + +// Make stuff animate on load +chart.appear(1000, 100); diff --git a/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/README.md b/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/index.css b/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/index.html b/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/index.html new file mode 100644 index 00000000..d220a19a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - map-globe-with-projected-circles + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/index.js b/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/index.js new file mode 100644 index 00000000..41ec6db1 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-globe-with-projected-circles/index.js @@ -0,0 +1,277 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create the map chart +// https://www.amcharts.com/docs/v5/charts/map-chart/ +var chart = root.container.children.push(am5map.MapChart.new(root, { + panX: "rotateX", + panY: "rotateY", + projection: am5map.geoOrthographic() +})); + + +// Create series for background fill +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/#Background_polygon +var backgroundSeries = chart.series.push( + am5map.MapPolygonSeries.new(root, {}) +); +backgroundSeries.mapPolygons.template.setAll({ + fill: root.interfaceColors.get("alternativeBackground"), + fillOpacity: 0.1, + strokeOpacity: 0 +}); +backgroundSeries.data.push({ + geometry: + am5map.getGeoRectangle(90, 180, -90, -180) +}); + + +// Create main polygon series for countries +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/ +var polygonSeries = chart.series.push(am5map.MapPolygonSeries.new(root, { + geoJSON: am5geodata_worldLow +})); +polygonSeries.mapPolygons.template.setAll({ + fill: root.interfaceColors.get("alternativeBackground"), + fillOpacity: 0.15, + strokeWidth: 0.5, + stroke: root.interfaceColors.get("background") +}); + + +// Create polygon series for projected circles +var circleSeries = chart.series.push(am5map.MapPolygonSeries.new(root, {})); +circleSeries.mapPolygons.template.setAll({ + templateField: "polygonTemplate", + tooltipText: "{name}: {value}" +}); + +// Define data +var colors = am5.ColorSet.new(root, {}); + +var data = [ + { "id": "AF", "name": "Afghanistan", "value": 32358260, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "AL", "name": "Albania", "value": 3215988, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "DZ", "name": "Algeria", "value": 35980193, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "AO", "name": "Angola", "value": 19618432, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "AR", "name": "Argentina", "value": 40764561, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "AM", "name": "Armenia", "value": 3100236, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "AU", "name": "Australia", "value": 22605732, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "AT", "name": "Austria", "value": 8413429, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "AZ", "name": "Azerbaijan", "value": 9306023, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "BH", "name": "Bahrain", "value": 1323535, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "BD", "name": "Bangladesh", "value": 150493658, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "BY", "name": "Belarus", "value": 9559441, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "BE", "name": "Belgium", "value": 10754056, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "BJ", "name": "Benin", "value": 9099922, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "BT", "name": "Bhutan", "value": 738267, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "BO", "name": "Bolivia", "value": 10088108, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "BA", "name": "Bosnia and Herzegovina", "value": 3752228, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "BW", "name": "Botswana", "value": 2030738, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "BR", "name": "Brazil", "value": 196655014, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "BN", "name": "Brunei", "value": 405938, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "BG", "name": "Bulgaria", "value": 7446135, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "BF", "name": "Burkina Faso", "value": 16967845, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "BI", "name": "Burundi", "value": 8575172, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "KH", "name": "Cambodia", "value": 14305183, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "CM", "name": "Cameroon", "value": 20030362, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "CA", "name": "Canada", "value": 34349561, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "CV", "name": "Cape Verde", "value": 500585, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "CF", "name": "Central African Rep.", "value": 4486837, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "TD", "name": "Chad", "value": 11525496, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "CL", "name": "Chile", "value": 17269525, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "CN", "name": "China", "value": 1347565324, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "CO", "name": "Colombia", "value": 46927125, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "KM", "name": "Comoros", "value": 753943, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "CD", "name": "Congo, Dem. Rep.", "value": 67757577, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "CG", "name": "Congo, Rep.", "value": 4139748, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "CR", "name": "Costa Rica", "value": 4726575, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "CI", "name": "Cote d'Ivoire", "value": 20152894, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "HR", "name": "Croatia", "value": 4395560, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "CU", "name": "Cuba", "value": 11253665, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "CY", "name": "Cyprus", "value": 1116564, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "CZ", "name": "Czech Rep.", "value": 10534293, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "DK", "name": "Denmark", "value": 5572594, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "DJ", "name": "Djibouti", "value": 905564, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "DO", "name": "Dominican Rep.", "value": 10056181, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "EC", "name": "Ecuador", "value": 14666055, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "EG", "name": "Egypt", "value": 82536770, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "SV", "name": "El Salvador", "value": 6227491, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "GQ", "name": "Equatorial Guinea", "value": 720213, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "ER", "name": "Eritrea", "value": 5415280, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "EE", "name": "Estonia", "value": 1340537, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "ET", "name": "Ethiopia", "value": 84734262, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "FJ", "name": "Fiji", "value": 868406, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "FI", "name": "Finland", "value": 5384770, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "FR", "name": "France", "value": 63125894, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "GA", "name": "Gabon", "value": 1534262, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "GM", "name": "Gambia", "value": 1776103, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "GE", "name": "Georgia", "value": 4329026, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "DE", "name": "Germany", "value": 82162512, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "GH", "name": "Ghana", "value": 24965816, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "GR", "name": "Greece", "value": 11390031, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "GT", "name": "Guatemala", "value": 14757316, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "GN", "name": "Guinea", "value": 10221808, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "GW", "name": "Guinea-Bissau", "value": 1547061, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "GY", "name": "Guyana", "value": 756040, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "HT", "name": "Haiti", "value": 10123787, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "HN", "name": "Honduras", "value": 7754687, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "HK", "name": "Hong Kong, China", "value": 7122187, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "HU", "name": "Hungary", "value": 9966116, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "IS", "name": "Iceland", "value": 324366, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "IN", "name": "India", "value": 1241491960, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "ID", "name": "Indonesia", "value": 242325638, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "IR", "name": "Iran", "value": 74798599, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "IQ", "name": "Iraq", "value": 32664942, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "IE", "name": "Ireland", "value": 4525802, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "IL", "name": "Israel", "value": 7562194, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "IT", "name": "Italy", "value": 60788694, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "JM", "name": "Jamaica", "value": 2751273, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "JP", "name": "Japan", "value": 126497241, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "JO", "name": "Jordan", "value": 6330169, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "KZ", "name": "Kazakhstan", "value": 16206750, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "KE", "name": "Kenya", "value": 41609728, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "KP", "name": "Korea, Dem. Rep.", "value": 24451285, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "KR", "name": "Korea, Rep.", "value": 48391343, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "KW", "name": "Kuwait", "value": 2818042, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "KG", "name": "Kyrgyzstan", "value": 5392580, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "LA", "name": "Laos", "value": 6288037, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "LV", "name": "Latvia", "value": 2243142, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "LB", "name": "Lebanon", "value": 4259405, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "LS", "name": "Lesotho", "value": 2193843, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "LR", "name": "Liberia", "value": 4128572, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "LY", "name": "Libya", "value": 6422772, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "LT", "name": "Lithuania", "value": 3307481, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "LU", "name": "Luxembourg", "value": 515941, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "MK", "name": "Macedonia, FYR", "value": 2063893, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "MG", "name": "Madagascar", "value": 21315135, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "MW", "name": "Malawi", "value": 15380888, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "MY", "name": "Malaysia", "value": 28859154, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "ML", "name": "Mali", "value": 15839538, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "MR", "name": "Mauritania", "value": 3541540, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "MU", "name": "Mauritius", "value": 1306593, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "MX", "name": "Mexico", "value": 114793341, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "MD", "name": "Moldova", "value": 3544864, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "MN", "name": "Mongolia", "value": 2800114, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "ME", "name": "Montenegro", "value": 632261, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "MA", "name": "Morocco", "value": 32272974, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "MZ", "name": "Mozambique", "value": 23929708, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "MM", "name": "Myanmar", "value": 48336763, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "NA", "name": "Namibia", "value": 2324004, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "NP", "name": "Nepal", "value": 30485798, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "NL", "name": "Netherlands", "value": 16664746, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "NZ", "name": "New Zealand", "value": 4414509, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "NI", "name": "Nicaragua", "value": 5869859, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "NE", "name": "Niger", "value": 16068994, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "NG", "name": "Nigeria", "value": 162470737, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "NO", "name": "Norway", "value": 4924848, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "OM", "name": "Oman", "value": 2846145, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "PK", "name": "Pakistan", "value": 176745364, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "PA", "name": "Panama", "value": 3571185, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "PG", "name": "Papua New Guinea", "value": 7013829, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "PY", "name": "Paraguay", "value": 6568290, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "PE", "name": "Peru", "value": 29399817, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "PH", "name": "Philippines", "value": 94852030, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "PL", "name": "Poland", "value": 38298949, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "PT", "name": "Portugal", "value": 10689663, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "PR", "name": "Puerto Rico", "value": 3745526, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "QA", "name": "Qatar", "value": 1870041, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "RO", "name": "Romania", "value": 21436495, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "RU", "name": "Russia", "value": 142835555, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "RW", "name": "Rwanda", "value": 10942950, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "SA", "name": "Saudi Arabia", "value": 28082541, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "SN", "name": "Senegal", "value": 12767556, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "RS", "name": "Serbia", "value": 9853969, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "SL", "name": "Sierra Leone", "value": 5997486, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "SG", "name": "Singapore", "value": 5187933, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "SK", "name": "Slovak Republic", "value": 5471502, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "SI", "name": "Slovenia", "value": 2035012, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "SB", "name": "Solomon Islands", "value": 552267, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "SO", "name": "Somalia", "value": 9556873, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "ZA", "name": "South Africa", "value": 50459978, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "ES", "name": "Spain", "value": 46454895, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "LK", "name": "Sri Lanka", "value": 21045394, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "SD", "name": "Sudan", "value": 34735288, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "SR", "name": "Suriname", "value": 529419, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "SZ", "name": "Swaziland", "value": 1203330, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "SE", "name": "Sweden", "value": 9440747, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "CH", "name": "Switzerland", "value": 7701690, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "SY", "name": "Syria", "value": 20766037, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "TW", "name": "Taiwan", "value": 23072000, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "TJ", "name": "Tajikistan", "value": 6976958, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "TZ", "name": "Tanzania", "value": 46218486, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "TH", "name": "Thailand", "value": 69518555, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "TG", "name": "Togo", "value": 6154813, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "TT", "name": "Trinidad and Tobago", "value": 1346350, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "TN", "name": "Tunisia", "value": 10594057, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "TR", "name": "Türkiye", "value": 73639596, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "TM", "name": "Turkmenistan", "value": 5105301, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "UG", "name": "Uganda", "value": 34509205, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "UA", "name": "Ukraine", "value": 45190180, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "AE", "name": "United Arab Emirates", "value": 7890924, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "GB", "name": "United Kingdom", "value": 62417431, polygonTemplate: { fill: colors.getIndex(8) } }, + { "id": "US", "name": "United States", "value": 313085380, polygonTemplate: { fill: colors.getIndex(4) } }, + { "id": "UY", "name": "Uruguay", "value": 3380008, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "UZ", "name": "Uzbekistan", "value": 27760267, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "VE", "name": "Venezuela", "value": 29436891, polygonTemplate: { fill: colors.getIndex(3) } }, + { "id": "PS", "name": "West Bank and Gaza", "value": 4152369, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "VN", "name": "Vietnam", "value": 88791996, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "YE", "name": "Yemen, Rep.", "value": 24799880, polygonTemplate: { fill: colors.getIndex(0) } }, + { "id": "ZM", "name": "Zambia", "value": 13474959, polygonTemplate: { fill: colors.getIndex(2) } }, + { "id": "ZW", "name": "Zimbabwe", "value": 12754378, polygonTemplate: { fill: colors.getIndex(2) } } +]; + +var valueLow = Infinity; +var valueHigh = -Infinity; + +for (var i = 0; i < data.length; i++) { + var value = data[i].value; + if (value < valueLow) { + valueLow = value; + } + if (value > valueHigh) { + valueHigh = value; + } +} + +// radius in degrees +var minRadius = 0.5; +var maxRadius = 5; + +// Create circles when data for countries is fully loaded. +polygonSeries.events.on("datavalidated", function () { + circleSeries.data.clear(); + + for (var i = 0; i < data.length; i++) { + var dataContext = data[i]; + var countryDataItem = polygonSeries.getDataItemById(dataContext.id); + var countryPolygon = countryDataItem.get("mapPolygon"); + + var value = dataContext.value; + + var radius = minRadius + maxRadius * (value - valueLow) / (valueHigh - valueLow); + + if (countryPolygon) { + var geometry = am5map.getGeoCircle(countryPolygon.visualCentroid(), radius); + circleSeries.data.push({ + name: dataContext.name, + value: dataContext.value, + polygonTemplate: dataContext.polygonTemplate, + geometry: geometry + }); + } + } +}) + + +// Make stuff animate on load +chart.appear(1000, 100); diff --git a/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/README.md b/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/index.css b/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/index.html b/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/index.html new file mode 100644 index 00000000..9277d22c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - map-with-bubbles + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/index.js b/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/index.js new file mode 100644 index 00000000..f5686a15 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-with-bubbles/index.js @@ -0,0 +1,1160 @@ +/** + * --------------------------------------- + * This demo was created using amCharts 5. + * + * For more information visit: + * https://www.amcharts.com/ + * + * Documentation is available at: + * https://www.amcharts.com/docs/v5/ + * --------------------------------------- + */ + +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([am5themes_Animated.new(root)]); + +// Create the map chart +// https://www.amcharts.com/docs/v5/charts/map-chart/ +var chart = root.container.children.push( + am5map.MapChart.new(root, { + panX: "rotateX", + panY: "rotateY", + projection: am5map.geoMercator() + }) +); + +// Create series for background fill +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/#Background_polygon +var backgroundSeries = chart.series.push(am5map.MapPolygonSeries.new(root, {})); +backgroundSeries.mapPolygons.template.setAll({ + fill: root.interfaceColors.get("alternativeBackground"), + fillOpacity: 0, + strokeOpacity: 0 +}); +// Add background polygo +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/#Background_polygon +backgroundSeries.data.push({ + geometry: am5map.getGeoRectangle(90, 180, -90, -180) +}); + +// Create main polygon series for countries +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/ +var polygonSeries = chart.series.push( + am5map.MapPolygonSeries.new(root, { + geoJSON: am5geodata_worldLow + }) +); + +polygonSeries.mapPolygons.template.setAll({ + fill: root.interfaceColors.get("alternativeBackground"), + fillOpacity: 0.15, + strokeWidth: 0.5, + stroke: root.interfaceColors.get("background") +}); + +// Create polygon series for circles +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/ +var circleTemplate = am5.Template.new({ + tooltipText: "{name}: {value}" +}); + +var bubbleSeries = chart.series.push( + am5map.MapPointSeries.new(root, { + calculateAggregates: true, + valueField: "value", + polygonIdField: "id" + }) +); + +bubbleSeries.bullets.push(function () { + return am5.Bullet.new(root, { + sprite: am5.Circle.new( + root, + { + radius: 10, + templateField: "circleTemplate" + }, + circleTemplate + ) + }); +}); + +bubbleSeries.set("heatRules", [ + { + target: circleTemplate, + min: 3, + max: 30, + key: "radius", + dataField: "value" + } +]); + +var colors = am5.ColorSet.new(root, {}); + +bubbleSeries.data.setAll([ + { + id: "AF", + name: "Afghanistan", + value: 32358260, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "AL", + name: "Albania", + value: 3215988, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "DZ", + name: "Algeria", + value: 35980193, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "AO", + name: "Angola", + value: 19618432, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "AR", + name: "Argentina", + value: 40764561, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "AM", + name: "Armenia", + value: 3100236, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "AU", + name: "Australia", + value: 22605732, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "AT", + name: "Austria", + value: 8413429, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "AZ", + name: "Azerbaijan", + value: 9306023, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "BH", + name: "Bahrain", + value: 1323535, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "BD", + name: "Bangladesh", + value: 150493658, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "BY", + name: "Belarus", + value: 9559441, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "BE", + name: "Belgium", + value: 10754056, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "BJ", + name: "Benin", + value: 9099922, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "BT", + name: "Bhutan", + value: 738267, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "BO", + name: "Bolivia", + value: 10088108, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "BA", + name: "Bosnia and Herzegovina", + value: 3752228, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "BW", + name: "Botswana", + value: 2030738, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "BR", + name: "Brazil", + value: 196655014, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "BN", + name: "Brunei", + value: 405938, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "BG", + name: "Bulgaria", + value: 7446135, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "BF", + name: "Burkina Faso", + value: 16967845, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "BI", + name: "Burundi", + value: 8575172, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "KH", + name: "Cambodia", + value: 14305183, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "CM", + name: "Cameroon", + value: 20030362, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "CA", + name: "Canada", + value: 34349561, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "CV", + name: "Cape Verde", + value: 500585, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "CF", + name: "Central African Rep.", + value: 4486837, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "TD", + name: "Chad", + value: 11525496, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "CL", + name: "Chile", + value: 17269525, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "CN", + name: "China", + value: 1347565324, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "CO", + name: "Colombia", + value: 46927125, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "KM", + name: "Comoros", + value: 753943, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "CD", + name: "Congo, Dem. Rep.", + value: 67757577, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "CG", + name: "Congo, Rep.", + value: 4139748, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "CR", + name: "Costa Rica", + value: 4726575, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "CI", + name: "Cote d'Ivoire", + value: 20152894, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "HR", + name: "Croatia", + value: 4395560, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "CU", + name: "Cuba", + value: 11253665, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "CY", + name: "Cyprus", + value: 1116564, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "CZ", + name: "Czech Rep.", + value: 10534293, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "DK", + name: "Denmark", + value: 5572594, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "DJ", + name: "Djibouti", + value: 905564, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "DO", + name: "Dominican Rep.", + value: 10056181, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "EC", + name: "Ecuador", + value: 14666055, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "EG", + name: "Egypt", + value: 82536770, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "SV", + name: "El Salvador", + value: 6227491, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "GQ", + name: "Equatorial Guinea", + value: 720213, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "ER", + name: "Eritrea", + value: 5415280, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "EE", + name: "Estonia", + value: 1340537, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "ET", + name: "Ethiopia", + value: 84734262, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "FJ", + name: "Fiji", + value: 868406, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "FI", + name: "Finland", + value: 5384770, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "FR", + name: "France", + value: 63125894, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "GA", + name: "Gabon", + value: 1534262, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "GM", + name: "Gambia", + value: 1776103, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "GE", + name: "Georgia", + value: 4329026, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "DE", + name: "Germany", + value: 82162512, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "GH", + name: "Ghana", + value: 24965816, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "GR", + name: "Greece", + value: 11390031, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "GT", + name: "Guatemala", + value: 14757316, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "GN", + name: "Guinea", + value: 10221808, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "GW", + name: "Guinea-Bissau", + value: 1547061, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "GY", + name: "Guyana", + value: 756040, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "HT", + name: "Haiti", + value: 10123787, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "HN", + name: "Honduras", + value: 7754687, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "HK", + name: "Hong Kong, China", + value: 7122187, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "HU", + name: "Hungary", + value: 9966116, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "IS", + name: "Iceland", + value: 324366, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "IN", + name: "India", + value: 1241491960, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "ID", + name: "Indonesia", + value: 242325638, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "IR", + name: "Iran", + value: 74798599, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "IQ", + name: "Iraq", + value: 32664942, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "IE", + name: "Ireland", + value: 4525802, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "IL", + name: "Israel", + value: 7562194, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "IT", + name: "Italy", + value: 60788694, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "JM", + name: "Jamaica", + value: 2751273, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "JP", + name: "Japan", + value: 126497241, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "JO", + name: "Jordan", + value: 6330169, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "KZ", + name: "Kazakhstan", + value: 16206750, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "KE", + name: "Kenya", + value: 41609728, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "KP", + name: "Korea, Dem. Rep.", + value: 24451285, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "KR", + name: "Korea, Rep.", + value: 48391343, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "KW", + name: "Kuwait", + value: 2818042, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "KG", + name: "Kyrgyzstan", + value: 5392580, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "LA", + name: "Laos", + value: 6288037, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "LV", + name: "Latvia", + value: 2243142, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "LB", + name: "Lebanon", + value: 4259405, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "LS", + name: "Lesotho", + value: 2193843, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "LR", + name: "Liberia", + value: 4128572, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "LY", + name: "Libya", + value: 6422772, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "LT", + name: "Lithuania", + value: 3307481, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "LU", + name: "Luxembourg", + value: 515941, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "MK", + name: "Macedonia, FYR", + value: 2063893, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "MG", + name: "Madagascar", + value: 21315135, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "MW", + name: "Malawi", + value: 15380888, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "MY", + name: "Malaysia", + value: 28859154, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "ML", + name: "Mali", + value: 15839538, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "MR", + name: "Mauritania", + value: 3541540, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "MU", + name: "Mauritius", + value: 1306593, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "MX", + name: "Mexico", + value: 114793341, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "MD", + name: "Moldova", + value: 3544864, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "MN", + name: "Mongolia", + value: 2800114, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "ME", + name: "Montenegro", + value: 632261, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "MA", + name: "Morocco", + value: 32272974, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "MZ", + name: "Mozambique", + value: 23929708, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "MM", + name: "Myanmar", + value: 48336763, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "NA", + name: "Namibia", + value: 2324004, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "NP", + name: "Nepal", + value: 30485798, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "NL", + name: "Netherlands", + value: 16664746, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "NZ", + name: "New Zealand", + value: 4414509, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "NI", + name: "Nicaragua", + value: 5869859, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "NE", + name: "Niger", + value: 16068994, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "NG", + name: "Nigeria", + value: 162470737, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "NO", + name: "Norway", + value: 4924848, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "OM", + name: "Oman", + value: 2846145, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "PK", + name: "Pakistan", + value: 176745364, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "PA", + name: "Panama", + value: 3571185, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "PG", + name: "Papua New Guinea", + value: 7013829, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "PY", + name: "Paraguay", + value: 6568290, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "PE", + name: "Peru", + value: 29399817, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "PH", + name: "Philippines", + value: 94852030, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "PL", + name: "Poland", + value: 38298949, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "PT", + name: "Portugal", + value: 10689663, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "PR", + name: "Puerto Rico", + value: 3745526, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "QA", + name: "Qatar", + value: 1870041, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "RO", + name: "Romania", + value: 21436495, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "RU", + name: "Russia", + value: 142835555, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "RW", + name: "Rwanda", + value: 10942950, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "SA", + name: "Saudi Arabia", + value: 28082541, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "SN", + name: "Senegal", + value: 12767556, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "RS", + name: "Serbia", + value: 9853969, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "SL", + name: "Sierra Leone", + value: 5997486, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "SG", + name: "Singapore", + value: 5187933, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "SK", + name: "Slovak Republic", + value: 5471502, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "SI", + name: "Slovenia", + value: 2035012, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "SB", + name: "Solomon Islands", + value: 552267, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "SO", + name: "Somalia", + value: 9556873, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "ZA", + name: "South Africa", + value: 50459978, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "ES", + name: "Spain", + value: 46454895, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "LK", + name: "Sri Lanka", + value: 21045394, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "SD", + name: "Sudan", + value: 34735288, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "SR", + name: "Suriname", + value: 529419, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "SZ", + name: "Swaziland", + value: 1203330, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "SE", + name: "Sweden", + value: 9440747, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "CH", + name: "Switzerland", + value: 7701690, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "SY", + name: "Syria", + value: 20766037, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "TW", + name: "Taiwan", + value: 23072000, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "TJ", + name: "Tajikistan", + value: 6976958, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "TZ", + name: "Tanzania", + value: 46218486, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "TH", + name: "Thailand", + value: 69518555, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "TG", + name: "Togo", + value: 6154813, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "TT", + name: "Trinidad and Tobago", + value: 1346350, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "TN", + name: "Tunisia", + value: 10594057, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "TR", + name: "Türkiye", + value: 73639596, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "TM", + name: "Turkmenistan", + value: 5105301, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "UG", + name: "Uganda", + value: 34509205, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "UA", + name: "Ukraine", + value: 45190180, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "AE", + name: "United Arab Emirates", + value: 7890924, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "GB", + name: "United Kingdom", + value: 62417431, + circleTemplate: { fill: colors.getIndex(8) } + }, + { + id: "US", + name: "United States", + value: 313085380, + circleTemplate: { fill: colors.getIndex(4) } + }, + { + id: "UY", + name: "Uruguay", + value: 3380008, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "UZ", + name: "Uzbekistan", + value: 27760267, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "VE", + name: "Venezuela", + value: 29436891, + circleTemplate: { fill: colors.getIndex(3) } + }, + { + id: "PS", + name: "West Bank and Gaza", + value: 4152369, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "VN", + name: "Vietnam", + value: 88791996, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "YE", + name: "Yemen, Rep.", + value: 24799880, + circleTemplate: { fill: colors.getIndex(0) } + }, + { + id: "ZM", + name: "Zambia", + value: 13474959, + circleTemplate: { fill: colors.getIndex(2) } + }, + { + id: "ZW", + name: "Zimbabwe", + value: 12754378, + circleTemplate: { fill: colors.getIndex(2) } + } +]); + +// Add globe/map switch +var cont = chart.children.push( + am5.Container.new(root, { + layout: root.horizontalLayout, + x: 20, + y: 40 + }) +); + +cont.children.push( + am5.Label.new(root, { + centerY: am5.p50, + text: "Map" + }) +); + +var switchButton = cont.children.push( + am5.Button.new(root, { + themeTags: ["switch"], + centerY: am5.p50, + icon: am5.Circle.new(root, { + themeTags: ["icon"] + }) + }) +); + +switchButton.on("active", function () { + if (!switchButton.get("active")) { + chart.set("projection", am5map.geoMercator()); + backgroundSeries.mapPolygons.template.set("fillOpacity", 0); + } else { + chart.set("projection", am5map.geoOrthographic()); + backgroundSeries.mapPolygons.template.set("fillOpacity", 0.1); + } +}); + +cont.children.push( + am5.Label.new(root, { + centerY: am5.p50, + text: "Globe" + }) +); + +// Make stuff animate on load +chart.appear(1000, 100); diff --git a/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/README.md b/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/index.css b/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/index.html b/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/index.html new file mode 100644 index 00000000..17cbc6bf --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - map-zoom-to-country + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/index.js b/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/index.js new file mode 100644 index 00000000..aa88d910 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/map-zoom-to-country/index.js @@ -0,0 +1,71 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create the map chart +// https://www.amcharts.com/docs/v5/charts/map-chart/ +var chart = root.container.children.push(am5map.MapChart.new(root, { + panX: "translateX", + panY: "translateY", + projection: am5map.geoMercator() +})); + + +// Create main polygon series for countries +// https://www.amcharts.com/docs/v5/charts/map-chart/map-polygon-series/ +var polygonSeries = chart.series.push(am5map.MapPolygonSeries.new(root, { + geoJSON: am5geodata_worldLow +})); + +polygonSeries.mapPolygons.template.setAll({ + tooltipText: "{name}", + toggleKey: "active", + interactive: true +}); + +polygonSeries.mapPolygons.template.states.create("hover", { + fill: root.interfaceColors.get("primaryButtonHover") +}); + +polygonSeries.mapPolygons.template.states.create("active", { + fill: root.interfaceColors.get("primaryButtonHover") +}); + +var previousPolygon; + +polygonSeries.mapPolygons.template.on("active", function (active, target) { + if (previousPolygon && previousPolygon != target) { + previousPolygon.set("active", false); + } + if (target.get("active")) { + polygonSeries.zoomToDataItem(target.dataItem ); + } + else { + chart.goHome(); + } + previousPolygon = target; +}); + + +// Add zoom control +// https://www.amcharts.com/docs/v5/charts/map-chart/map-pan-zoom/#Zoom_control +var zoomControl = chart.set("zoomControl", am5map.ZoomControl.new(root, {})); +zoomControl.homeButton.set("visible", true); + + +// Set clicking on "water" to zoom out +chart.chartContainer.get("background").events.on("click", function () { + chart.goHome(); +}) + + +// Make stuff animate on load +chart.appear(1000, 100); diff --git a/src/main/resources/static/js/amcharts5/examples/misc-40-charts/README.md b/src/main/resources/static/js/amcharts5/examples/misc-40-charts/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/misc-40-charts/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/misc-40-charts/index.css b/src/main/resources/static/js/amcharts5/examples/misc-40-charts/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/misc-40-charts/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/misc-40-charts/index.html b/src/main/resources/static/js/amcharts5/examples/misc-40-charts/index.html new file mode 100644 index 00000000..3dd9025a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/misc-40-charts/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - misc-40-charts + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/misc-40-charts/index.js b/src/main/resources/static/js/amcharts5/examples/misc-40-charts/index.js new file mode 100644 index 00000000..2a43e518 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/misc-40-charts/index.js @@ -0,0 +1,162 @@ +var id = 0; + +function createDiv() { + id++; + var div = document.getElementById("chartdiv"); + var container = document.createElement("div"); + container.id = "chart" + id; + container.style.width = "300px"; + container.style.height = "300px"; + container.style.float = "left"; + container.style.margin = "10px"; + container.style.border = "1px solid #eee"; + div.appendChild(container); + return container; +} + + +function createXY(column = true) { + var root = am5.Root.new(createDiv()); + + root.setThemes([ + am5themes_Animated.new(root) + ]); + + var chart = root.container.children.push( + am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX" + }) + ); + + var cursor = chart.set("cursor", am5xy.XYCursor.new(root, { + behavior: "zoomX" + })); + cursor.lineY.set("visible", false); + + var date = new Date(); + date.setHours(0, 0, 0, 0); + var value = 100; + + function generateData() { + value = Math.round((Math.random() * 10 - 5) + value); + am5.time.add(date, "day", 1); + return { date: date.getTime(), value: value }; + } + + function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; + } + + var xAxis = chart.xAxes.push( + am5xy.DateAxis.new(root, { + maxDeviation: 0, + baseInterval: { timeUnit: "day", count: 1 }, + renderer: am5xy.AxisRendererX.new(root, { + minGridDistance: 30 + }) + }) + ); + + xAxis.get("periodChangeDateFormats")["day"] = "MMM"; + xAxis.get("dateFormats")["day"] = "dd"; + + var yAxis = chart.yAxes.push( + am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) + }) + ); + + xAxis.set("tooltip", am5.Tooltip.new(root, {})) + + var series; + + if (column) { + series = chart.series.push( + am5xy.ColumnSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date" + }) + ); + } + else { + series = chart.series.push( + am5xy.LineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date" + }) + ); + + series.strokes.template.setAll({ + strokeWidth: 2 + }); + } + + var tooltip = series.set("tooltip", am5.Tooltip.new(root, {})); + tooltip.label.set("text", "{valueY}"); + + var data = generateDatas(30); + series.data.setAll(data); + + series.appear(); + chart.appear(); +} + +function createPie() { + var root = am5.Root.new(createDiv()); + + root.setThemes([ + am5themes_Animated.new(root) + ]); + + var chart = root.container.children.push( + am5percent.PieChart.new(root, { + layout: root.verticalLayout, + innerRadius: am5.percent(50) + }) + ); + + var series = chart.series.push(am5percent.PieSeries.new(root, { + valueField: "value", + categoryField: "category", + alignLabels: false + })); + + series.labels.template.setAll({ + forceHidden: true + }); + + series.ticks.template.setAll({ + forceHidden: true + }); + + series.data.setAll([ + { value: 10, category: "One" }, + { value: 9, category: "Two" }, + { value: 6, category: "Three" }, + { value: 5, category: "Four" }, + { value: 4, category: "Five" }, + { value: 3, category: "Six" }, + { value: 1, category: "Seven" }, + ]); + +} + +for (var i = 0; i < 10; i++) { + createXY(true); + createPie(); + createXY(false); + createPie(); +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/README.md b/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/index.css b/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/index.html b/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/index.html new file mode 100644 index 00000000..95a13f03 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - misc-microchart-grid + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/index.js b/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/index.js new file mode 100644 index 00000000..18df7ba9 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/misc-microchart-grid/index.js @@ -0,0 +1,166 @@ +var tickers = [ + "AAPL", "ADBE", "ADSK", "AMD", "AMZN", "ATVI", "CRM", "CSCO", "COIN", "DELL", + "DOCU", "EA", "EBAY", "FB", "GOOG", "HOOD", "IBM", "INTC", "MSFT", "NET", + "NFLX", "NVDA", "ORCL", "PLTR", "PYPL", "ROKU", "SAP", "SHOP", "SNAP", + "SONY", "STX", "T", "TSLA", "TSM", "TWTR", "U", "UBER", "VMW", "WDC", "ZM" +]; + +for (var i = 0; i < tickers.length; i++) { + var ticker = tickers[i]; + var positive = am5.color(0x50b300); + var negative = am5.color(0xb30000); + + var data = generateData(20); + var change = Math.round((data[data.length - 1].value / data[0].value - 1) * 1000) / 10; + var color = change < 0 ? negative : positive; + + var div = document.getElementById("chartdiv"); + div.style.overflow = "auto"; + + var row = document.createElement("div"); + row.style.borderBottom = "1px solid #eee"; + row.style.clear = "left"; + div.appendChild(row); + + var col1 = document.createElement("div"); + col1.innerHTML = ticker; + col1.style.fontSize = "2em"; + col1.style.width = "10%"; + col1.style.padding = "0.2em 0.4em"; + col1.style.float = "left"; + row.appendChild(col1); + + var col2 = document.createElement("div"); + col2.innerHTML = change + "%"; + col2.style.fontSize = "2em"; + col2.style.width = "10%"; + col2.style.padding = "0.2em 0.4em"; + col2.style.float = "left"; + col2.style.color = color.toCSSHex(); + col2.style.textAlign = "center"; + row.appendChild(col2); + + var col3 = document.createElement("div"); + col3.style.fontSize = "2em"; + col3.style.width = "33%"; + col3.style.height = "35px"; + col3.style.padding = "0.2em 0.4em"; + col3.style.float = "left"; + row.appendChild(col3); + createValueChart(col3, data, color); + + var col4 = document.createElement("div"); + col4.style.fontSize = "2em"; + col4.style.width = "33%"; + col4.style.height = "35px"; + col4.style.padding = "0.2em 0.4em"; + col4.style.float = "left"; + row.appendChild(col4); + createVolumeChart(col4, data); +} + +// Generate random data +function generateData(count) { + var date = new Date(); + date.setHours(0, 0, 0, 0); + var value = Math.round(Math.random() * 100); + var volume = Math.round(Math.random() * 10000); + + var data = []; + for (var i = 0; i < count; ++i) { + value = Math.round((Math.random() * 6 - 3) + value); + volume = Math.round((Math.random() * 1000 - 500) + volume); + if (volume < 0) { + volume = 0; + } + am5.time.add(date, "day", 1); + data.push({ + date: date.getTime(), + value: value, + volume: volume + }); + } + return data; +} + + +function createValueChart(div, data, color) { + var root = am5.Root.new(div); + + root.setThemes([ + am5themes_Micro.new(root) + ]); + + var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "none", + wheelY: "none" + })); + + chart.zoomOutButton.set("forceHidden", true); + + var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + maxDeviation: 0, + baseInterval: { timeUnit: "day", count: 1 }, + renderer: am5xy.AxisRendererX.new(root, {}) + })); + + var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + strictMinMax: true, + renderer: am5xy.AxisRendererY.new(root, {}) + })); + + + var series = chart.series.push(am5xy.LineSeries.new(root, { + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + stroke: color + })); + + series.strokes.template.setAll({ + strokeWidth: 2 + }); + + series.data.setAll(data); +} + +function createVolumeChart(div, data) { + var root = am5.Root.new(div); + + root.setThemes([ + am5themes_Micro.new(root) + ]); + + var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "none", + wheelY: "none" + })); + + chart.zoomOutButton.set("forceHidden", true); + + var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + maxDeviation: 0, + baseInterval: { timeUnit: "day", count: 1 }, + renderer: am5xy.AxisRendererX.new(root, {}) + })); + + var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) + })); + + + var series = chart.series.push(am5xy.ColumnSeries.new(root, { + xAxis: xAxis, + yAxis: yAxis, + valueYField: "volume", + valueXField: "date", + fill: am5.color(0x999999) + })); + + series.data.setAll(data); +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-chart/README.md b/src/main/resources/static/js/amcharts5/examples/pie-chart/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-chart/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-chart/index.css b/src/main/resources/static/js/amcharts5/examples/pie-chart/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-chart/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-chart/index.html b/src/main/resources/static/js/amcharts5/examples/pie-chart/index.html new file mode 100644 index 00000000..544fc25c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-chart/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - pie-chart + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-chart/index.js b/src/main/resources/static/js/amcharts5/examples/pie-chart/index.js new file mode 100644 index 00000000..ac20e9f1 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-chart/index.js @@ -0,0 +1,55 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/ +var chart = root.container.children.push(am5percent.PieChart.new(root, { + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Series +var series = chart.series.push(am5percent.PieSeries.new(root, { + valueField: "value", + categoryField: "category" +})); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Setting_data +series.data.setAll([ + { value: 10, category: "One" }, + { value: 9, category: "Two" }, + { value: 6, category: "Three" }, + { value: 5, category: "Four" }, + { value: 4, category: "Five" }, + { value: 3, category: "Six" }, + { value: 1, category: "Seven" }, +]); + + +// Create legend +// https://www.amcharts.com/docs/v5/charts/percent-charts/legend-percent-series/ +var legend = chart.children.push(am5.Legend.new(root, { + centerX: am5.percent(50), + x: am5.percent(50), + marginTop: 15, + marginBottom: 15, +})); + +legend.data.setAll(series.dataItems); + + +// Play initial series animation +// https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/README.md b/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/index.css b/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/index.html b/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/index.html new file mode 100644 index 00000000..518b1e49 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - pie-donut-chart + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/index.js b/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/index.js new file mode 100644 index 00000000..d7094fa3 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-donut-chart/index.js @@ -0,0 +1,67 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/ +var chart = root.container.children.push(am5percent.PieChart.new(root, { + layout: root.verticalLayout, + innerRadius: am5.percent(50) +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Series +var series = chart.series.push(am5percent.PieSeries.new(root, { + valueField: "value", + categoryField: "category", + alignLabels: false +})); + +series.labels.template.setAll({ + textType: "circular", + centerX: 0, + centerY: 0 +}); + +series.ticks.template.setAll({ + forceHidden: true +}); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Setting_data +series.data.setAll([ + { value: 10, category: "One" }, + { value: 9, category: "Two" }, + { value: 6, category: "Three" }, + { value: 5, category: "Four" }, + { value: 4, category: "Five" }, + { value: 3, category: "Six" }, + { value: 1, category: "Seven" }, +]); + + +// Create legend +// https://www.amcharts.com/docs/v5/charts/percent-charts/legend-percent-series/ +var legend = chart.children.push(am5.Legend.new(root, { + centerX: am5.percent(50), + x: am5.percent(50), + marginTop: 15, + marginBottom: 15, +})); + +legend.data.setAll(series.dataItems); + + +// Play initial series animation +// https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/README.md b/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/index.css b/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/index.html b/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/index.html new file mode 100644 index 00000000..8104e98b --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - pie-variable-radius + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/index.js b/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/index.js new file mode 100644 index 00000000..f7088c19 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/pie-variable-radius/index.js @@ -0,0 +1,88 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/ +var chart = root.container.children.push(am5percent.PieChart.new(root, { + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Series +var series = chart.series.push(am5percent.PieSeries.new(root, { + alignLabels: true, + calculateAggregates: true, + valueField: "value", + categoryField: "category" +})); + +series.slices.template.setAll({ + strokeWidth: 3, + stroke: am5.color(0xffffff) +}); + +series.labelsContainer.set("paddingTop", 30) + + +// Set up adapters for variable slice radius +// https://www.amcharts.com/docs/v5/concepts/settings/adapters/ +series.slices.template.adapters.add("radius", function (radius, target) { + var dataItem = target.dataItem; + var high = series.getPrivate("valueHigh"); + + if (dataItem) { + var value = target.dataItem.get("valueWorking", 0); + return radius * value / high + } + return radius; +}); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/#Setting_data +series.data.setAll([{ + value: 10, + category: "One" +}, { + value: 9, + category: "Two" +}, { + value: 6, + category: "Three" +}, { + value: 5, + category: "Four" +}, { + value: 4, + category: "Five" +}, { + value: 3, + category: "Six" +}]); + + +// Create legend +// https://www.amcharts.com/docs/v5/charts/percent-charts/legend-percent-series/ +var legend = chart.children.push(am5.Legend.new(root, { + centerX: am5.p50, + x: am5.p50, + marginTop: 15, + marginBottom: 15 +})); + +legend.data.setAll(series.dataItems); + + +// Play initial series animation +// https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series +series.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/README.md b/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/index.css b/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/index.html b/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/index.html new file mode 100644 index 00000000..eb491929 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - radar-column-iwatch-style + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/index.js b/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/index.js new file mode 100644 index 00000000..32ed766c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-column-iwatch-style/index.js @@ -0,0 +1,146 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/radar-chart/ +var chart = root.container.children.push(am5radar.RadarChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + innerRadius: am5.percent(40) +})); + +chart.get("colors").set("step", 2); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Cursor +var cursor = chart.set("cursor", am5radar.RadarCursor.new(root, { + behavior: "zoomX" +})); + +cursor.lineY.set("visible", false); + +// Create axes and their renderers +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Adding_axes +var yRenderer = am5radar.AxisRendererRadial.new(root, { minGridDistance: 20 }); + +var yAxis = chart.yAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0, + categoryField: "category", + renderer: yRenderer +})); + +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + min: new Date("2021-01-01 00:00:00").getTime(), + max: new Date("2022-01-01 00:00:00").getTime(), + baseInterval: { timeUnit: "day", count: 1 }, + renderer: am5radar.AxisRendererCircular.new(root, {}) +})); + + +var data = [ + { + category: "One", + startDate1: new Date("2021-01-01").getTime(), + endDate1: new Date("2021-03-01").getTime(), + }, + { + category: "One", + startDate1: new Date("2021-04-01").getTime(), + endDate1: new Date("2021-08-15").getTime() + }, + { + category: "Two", + startDate2: new Date("2021-03-01").getTime(), + endDate2: new Date("2021-06-01").getTime() + }, + { + category: "Two", + startDate2: new Date("2021-08-01").getTime(), + endDate2: new Date("2021-10-01").getTime() + }, + { + category: "Three", + startDate3: new Date("2021-02-01").getTime(), + endDate3: new Date("2021-07-01").getTime() + }, + { + category: "Four", + startDate4: new Date("2021-06-09").getTime(), + endDate4: new Date("2021-09-01").getTime() + }, + { + category: "Four", + startDate4: new Date("2021-10-01").getTime(), + endDate4: new Date("2021-12-15").getTime() + }, + { + category: "Five", + startDate5: new Date("2021-02-01").getTime(), + endDate5: new Date("2021-04-15").getTime() + }, + { + category: "Five", + startDate5: new Date("2021-10-01").getTime(), + endDate5: new Date("2021-12-31").getTime() + } +]; + + +// Set date fields +// https://www.amcharts.com/docs/v5/concepts/data/#Parsing_dates +root.dateFormatter.setAll({ + dateFormat: "yyyy-MM-dd", + dateFields: ["valueX", "openValueX"] +}); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Adding_series +for (var i = 1; i < 6; i++) { + var series = chart.series.push(am5radar.RadarColumnSeries.new(root, { + clustered: false, + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + categoryYField: "category", + valueXField: "endDate" + i, + openValueXField: "startDate" + i + })); + + series.columns.template.set("cornerRadius", 25); + series.columns.template.set("tooltipText", "{category}: {openValueX} - {valueX}"); + + series.data.setAll(data); + series.appear(2000, 100); + series.data.setAll(data); +} + +yAxis.data.setAll([ + { category: "One" }, + { category: "Two" }, + { category: "Three" }, + { category: "Four" }, + { category: "Five" } +]); + +chart.set("scrollbarX", am5.Scrollbar.new(root, { orientation: "horizontal" })); +chart.set("scrollbarY", am5.Scrollbar.new(root, { orientation: "vertical" })); + +xAxis.data.setAll(data); + + +// Animate chart and series in +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +chart.appear(2000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-heat-map/README.md b/src/main/resources/static/js/amcharts5/examples/radar-heat-map/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-heat-map/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-heat-map/index.css b/src/main/resources/static/js/amcharts5/examples/radar-heat-map/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-heat-map/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-heat-map/index.html b/src/main/resources/static/js/amcharts5/examples/radar-heat-map/index.html new file mode 100644 index 00000000..7804d831 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-heat-map/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - radar-heat-map + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-heat-map/index.js b/src/main/resources/static/js/amcharts5/examples/radar-heat-map/index.js new file mode 100644 index 00000000..bd9c35b0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-heat-map/index.js @@ -0,0 +1,839 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/radar-chart/ +var chart = root.container.children.push(am5radar.RadarChart.new(root, { + innerRadius: am5.percent(50), + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + maxTooltipDistance: 0, + layout: root.verticalLayout +})); + + +// Create axes and their renderers +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Adding_axes +var yRenderer = am5radar.AxisRendererRadial.new(root, { + visible: false, + axisAngle: 90, + minGridDistance: 10, + inversed: true +}); + +yRenderer.labels.template.setAll({ + textType: "circular", + textAlign: "center", + radius: -8 +}); + +yRenderer.grid.template.set("visible", false); + +var yAxis = chart.yAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0, + renderer: yRenderer, + categoryField: "weekday" +})); + +var xRenderer = am5radar.AxisRendererCircular.new(root, { + visible: false, + minGridDistance: 30 +}); + +xRenderer.labels.template.setAll({ + textType: "circular", + radius: 10 +}); + +xRenderer.grid.template.set("visible", false); + +var xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { + renderer: xRenderer, + categoryField: "hour" +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Adding_series +var series = chart.series.push(am5radar.RadarColumnSeries.new(root, { + calculateAggregates: true, + stroke: am5.color(0xffffff), + clustered: false, + xAxis: xAxis, + yAxis: yAxis, + categoryXField: "hour", + categoryYField: "weekday", + valueField: "value" +})); + +series.columns.template.setAll({ + tooltipText: "{value}", + strokeOpacity: 1, + strokeWidth: 2, + width: am5.percent(100), + height: am5.percent(100) +}); + +series.columns.template.events.on("pointerover", function (event) { + var di = event.target.dataItem ; + if (di) { + heatLegend.showValue(di.get("value", 0) ); + } +}); + +series.events.on("datavalidated", function () { + heatLegend.set("startValue", series.getPrivate("valueHigh")); + heatLegend.set("endValue", series.getPrivate("valueLow")); +}); + + +// Set up heat rules +// https://www.amcharts.com/docs/v5/concepts/settings/heat-rules/ +series.set("heatRules", [{ + target: series.columns.template, + min: am5.color(0xfffb77), + max: am5.color(0xfe131a), + dataField: "value", + key: "fill" +}]); + + +// Add heat legend +// https://www.amcharts.com/docs/v5/concepts/legend/heat-legend/ +var heatLegend = chart.children.push(am5.HeatLegend.new(root, { + orientation: "horizontal", + endColor: am5.color(0xfffb77), + startColor: am5.color(0xfe131a) +})); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Setting_data +var data = [{ + hour: "12pm", + weekday: "Sunday", + value: 2990 +}, { + hour: "1am", + weekday: "Sunday", + value: 2520 +}, { + hour: "2am", + weekday: "Sunday", + value: 2334 +}, { + hour: "3am", + weekday: "Sunday", + value: 2230 +}, { + hour: "4am", + weekday: "Sunday", + value: 2325 +}, { + hour: "5am", + weekday: "Sunday", + value: 2019 +}, { + hour: "6am", + weekday: "Sunday", + value: 2128 +}, { + hour: "7am", + weekday: "Sunday", + value: 2246 +}, { + hour: "8am", + weekday: "Sunday", + value: 2421 +}, { + hour: "9am", + weekday: "Sunday", + value: 2788 +}, { + hour: "10am", + weekday: "Sunday", + value: 2959 +}, { + hour: "11am", + weekday: "Sunday", + value: 3018 +}, { + hour: "12am", + weekday: "Sunday", + value: 3154 +}, { + hour: "1pm", + weekday: "Sunday", + value: 3172 +}, { + hour: "2pm", + weekday: "Sunday", + value: 3368 +}, { + hour: "3pm", + weekday: "Sunday", + value: 3464 +}, { + hour: "4pm", + weekday: "Sunday", + value: 3746 +}, { + hour: "5pm", + weekday: "Sunday", + value: 3656 +}, { + hour: "6pm", + weekday: "Sunday", + value: 3336 +}, { + hour: "7pm", + weekday: "Sunday", + value: 3292 +}, { + hour: "8pm", + weekday: "Sunday", + value: 3269 +}, { + hour: "9pm", + weekday: "Sunday", + value: 3300 +}, { + hour: "10pm", + weekday: "Sunday", + value: 3403 +}, { + hour: "11pm", + weekday: "Sunday", + value: 3323 +}, { + hour: "12pm", + weekday: "Monday", + value: 3346 +}, { + hour: "1am", + weekday: "Monday", + value: 2725 +}, { + hour: "2am", + weekday: "Monday", + value: 3052 +}, { + hour: "3am", + weekday: "Monday", + value: 3876 +}, { + hour: "4am", + weekday: "Monday", + value: 4453 +}, { + hour: "5am", + weekday: "Monday", + value: 3972 +}, { + hour: "6am", + weekday: "Monday", + value: 4644 +}, { + hour: "7am", + weekday: "Monday", + value: 5715 +}, { + hour: "8am", + weekday: "Monday", + value: 7080 +}, { + hour: "9am", + weekday: "Monday", + value: 8022 +}, { + hour: "10am", + weekday: "Monday", + value: 8446 +}, { + hour: "11am", + weekday: "Monday", + value: 9313 +}, { + hour: "12am", + weekday: "Monday", + value: 9011 +}, { + hour: "1pm", + weekday: "Monday", + value: 8508 +}, { + hour: "2pm", + weekday: "Monday", + value: 8515 +}, { + hour: "3pm", + weekday: "Monday", + value: 8399 +}, { + hour: "4pm", + weekday: "Monday", + value: 8649 +}, { + hour: "5pm", + weekday: "Monday", + value: 7869 +}, { + hour: "6pm", + weekday: "Monday", + value: 6933 +}, { + hour: "7pm", + weekday: "Monday", + value: 5969 +}, { + hour: "8pm", + weekday: "Monday", + value: 5552 +}, { + hour: "9pm", + weekday: "Monday", + value: 5434 +}, { + hour: "10pm", + weekday: "Monday", + value: 5070 +}, { + hour: "11pm", + weekday: "Monday", + value: 4851 +}, { + hour: "12pm", + weekday: "Tuesday", + value: 4468 +}, { + hour: "1am", + weekday: "Tuesday", + value: 3306 +}, { + hour: "2am", + weekday: "Tuesday", + value: 3906 +}, { + hour: "3am", + weekday: "Tuesday", + value: 4413 +}, { + hour: "4am", + weekday: "Tuesday", + value: 4726 +}, { + hour: "5am", + weekday: "Tuesday", + value: 4584 +}, { + hour: "6am", + weekday: "Tuesday", + value: 5717 +}, { + hour: "7am", + weekday: "Tuesday", + value: 6504 +}, { + hour: "8am", + weekday: "Tuesday", + value: 8104 +}, { + hour: "9am", + weekday: "Tuesday", + value: 8813 +}, { + hour: "10am", + weekday: "Tuesday", + value: 9278 +}, { + hour: "11am", + weekday: "Tuesday", + value: 10425 +}, { + hour: "12am", + weekday: "Tuesday", + value: 10137 +}, { + hour: "1pm", + weekday: "Tuesday", + value: 9290 +}, { + hour: "2pm", + weekday: "Tuesday", + value: 9255 +}, { + hour: "3pm", + weekday: "Tuesday", + value: 9614 +}, { + hour: "4pm", + weekday: "Tuesday", + value: 9713 +}, { + hour: "5pm", + weekday: "Tuesday", + value: 9667 +}, { + hour: "6pm", + weekday: "Tuesday", + value: 8774 +}, { + hour: "7pm", + weekday: "Tuesday", + value: 8649 +}, { + hour: "8pm", + weekday: "Tuesday", + value: 9937 +}, { + hour: "9pm", + weekday: "Tuesday", + value: 10286 +}, { + hour: "10pm", + weekday: "Tuesday", + value: 9175 +}, { + hour: "11pm", + weekday: "Tuesday", + value: 8581 +}, { + hour: "12pm", + weekday: "Wednesday", + value: 8145 +}, { + hour: "1am", + weekday: "Wednesday", + value: 7177 +}, { + hour: "2am", + weekday: "Wednesday", + value: 5657 +}, { + hour: "3am", + weekday: "Wednesday", + value: 6802 +}, { + hour: "4am", + weekday: "Wednesday", + value: 8159 +}, { + hour: "5am", + weekday: "Wednesday", + value: 8449 +}, { + hour: "6am", + weekday: "Wednesday", + value: 9453 +}, { + hour: "7am", + weekday: "Wednesday", + value: 9947 +}, { + hour: "8am", + weekday: "Wednesday", + value: 11471 +}, { + hour: "9am", + weekday: "Wednesday", + value: 12492 +}, { + hour: "10am", + weekday: "Wednesday", + value: 9388 +}, { + hour: "11am", + weekday: "Wednesday", + value: 9928 +}, { + hour: "12am", + weekday: "Wednesday", + value: 9644 +}, { + hour: "1pm", + weekday: "Wednesday", + value: 9034 +}, { + hour: "2pm", + weekday: "Wednesday", + value: 8964 +}, { + hour: "3pm", + weekday: "Wednesday", + value: 9069 +}, { + hour: "4pm", + weekday: "Wednesday", + value: 8898 +}, { + hour: "5pm", + weekday: "Wednesday", + value: 8322 +}, { + hour: "6pm", + weekday: "Wednesday", + value: 6909 +}, { + hour: "7pm", + weekday: "Wednesday", + value: 5810 +}, { + hour: "8pm", + weekday: "Wednesday", + value: 5151 +}, { + hour: "9pm", + weekday: "Wednesday", + value: 4911 +}, { + hour: "10pm", + weekday: "Wednesday", + value: 4487 +}, { + hour: "11pm", + weekday: "Wednesday", + value: 4118 +}, { + hour: "12pm", + weekday: "Thursday", + value: 3689 +}, { + hour: "1am", + weekday: "Thursday", + value: 3081 +}, { + hour: "2am", + weekday: "Thursday", + value: 6525 +}, { + hour: "3am", + weekday: "Thursday", + value: 6228 +}, { + hour: "4am", + weekday: "Thursday", + value: 6917 +}, { + hour: "5am", + weekday: "Thursday", + value: 6568 +}, { + hour: "6am", + weekday: "Thursday", + value: 6405 +}, { + hour: "7am", + weekday: "Thursday", + value: 8106 +}, { + hour: "8am", + weekday: "Thursday", + value: 8542 +}, { + hour: "9am", + weekday: "Thursday", + value: 8501 +}, { + hour: "10am", + weekday: "Thursday", + value: 8802 +}, { + hour: "11am", + weekday: "Thursday", + value: 9420 +}, { + hour: "12am", + weekday: "Thursday", + value: 8966 +}, { + hour: "1pm", + weekday: "Thursday", + value: 8135 +}, { + hour: "2pm", + weekday: "Thursday", + value: 8224 +}, { + hour: "3pm", + weekday: "Thursday", + value: 8387 +}, { + hour: "4pm", + weekday: "Thursday", + value: 8218 +}, { + hour: "5pm", + weekday: "Thursday", + value: 7641 +}, { + hour: "6pm", + weekday: "Thursday", + value: 6469 +}, { + hour: "7pm", + weekday: "Thursday", + value: 5441 +}, { + hour: "8pm", + weekday: "Thursday", + value: 4952 +}, { + hour: "9pm", + weekday: "Thursday", + value: 4643 +}, { + hour: "10pm", + weekday: "Thursday", + value: 4393 +}, { + hour: "11pm", + weekday: "Thursday", + value: 4017 +}, { + hour: "12pm", + weekday: "Friday", + value: 4022 +}, { + hour: "1am", + weekday: "Friday", + value: 3063 +}, { + hour: "2am", + weekday: "Friday", + value: 3638 +}, { + hour: "3am", + weekday: "Friday", + value: 3968 +}, { + hour: "4am", + weekday: "Friday", + value: 4070 +}, { + hour: "5am", + weekday: "Friday", + value: 4019 +}, { + hour: "6am", + weekday: "Friday", + value: 4548 +}, { + hour: "7am", + weekday: "Friday", + value: 5465 +}, { + hour: "8am", + weekday: "Friday", + value: 6909 +}, { + hour: "9am", + weekday: "Friday", + value: 7706 +}, { + hour: "10am", + weekday: "Friday", + value: 7867 +}, { + hour: "11am", + weekday: "Friday", + value: 8615 +}, { + hour: "12am", + weekday: "Friday", + value: 8218 +}, { + hour: "1pm", + weekday: "Friday", + value: 7604 +}, { + hour: "2pm", + weekday: "Friday", + value: 7429 +}, { + hour: "3pm", + weekday: "Friday", + value: 7488 +}, { + hour: "4pm", + weekday: "Friday", + value: 7493 +}, { + hour: "5pm", + weekday: "Friday", + value: 6998 +}, { + hour: "6pm", + weekday: "Friday", + value: 5941 +}, { + hour: "7pm", + weekday: "Friday", + value: 5068 +}, { + hour: "8pm", + weekday: "Friday", + value: 4636 +}, { + hour: "9pm", + weekday: "Friday", + value: 4241 +}, { + hour: "10pm", + weekday: "Friday", + value: 3858 +}, { + hour: "11pm", + weekday: "Friday", + value: 3833 +}, { + hour: "12pm", + weekday: "Saturday", + value: 3503 +}, { + hour: "1am", + weekday: "Saturday", + value: 2842 +}, { + hour: "2am", + weekday: "Saturday", + value: 2808 +}, { + hour: "3am", + weekday: "Saturday", + value: 2399 +}, { + hour: "4am", + weekday: "Saturday", + value: 2280 +}, { + hour: "5am", + weekday: "Saturday", + value: 2139 +}, { + hour: "6am", + weekday: "Saturday", + value: 2527 +}, { + hour: "7am", + weekday: "Saturday", + value: 2940 +}, { + hour: "8am", + weekday: "Saturday", + value: 3066 +}, { + hour: "9am", + weekday: "Saturday", + value: 3494 +}, { + hour: "10am", + weekday: "Saturday", + value: 3287 +}, { + hour: "11am", + weekday: "Saturday", + value: 3416 +}, { + hour: "12am", + weekday: "Saturday", + value: 3432 +}, { + hour: "1pm", + weekday: "Saturday", + value: 3523 +}, { + hour: "2pm", + weekday: "Saturday", + value: 3542 +}, { + hour: "3pm", + weekday: "Saturday", + value: 3347 +}, { + hour: "4pm", + weekday: "Saturday", + value: 3292 +}, { + hour: "5pm", + weekday: "Saturday", + value: 3416 +}, { + hour: "6pm", + weekday: "Saturday", + value: 3131 +}, { + hour: "7pm", + weekday: "Saturday", + value: 3057 +}, { + hour: "8pm", + weekday: "Saturday", + value: 3227 +}, { + hour: "9pm", + weekday: "Saturday", + value: 3060 +}, { + hour: "10pm", + weekday: "Saturday", + value: 2855 +}, { + hour: "11pm", + weekday: "Saturday", + value: 2625 +} +] + +series.data.setAll(data); + +yAxis.data.setAll([ + { weekday: "Sunday" }, + { weekday: "Monday" }, + { weekday: "Tuesday" }, + { weekday: "Wednesday" }, + { weekday: "Thursday" }, + { weekday: "Friday" }, + { weekday: "Saturday" } +]); + +xAxis.data.setAll([ + { hour: "12pm" }, + { hour: "1am" }, + { hour: "2am" }, + { hour: "3am" }, + { hour: "4am" }, + { hour: "5am" }, + { hour: "6am" }, + { hour: "7am" }, + { hour: "8am" }, + { hour: "9am" }, + { hour: "10am" }, + { hour: "11am" }, + { hour: "12am" }, + { hour: "1pm" }, + { hour: "2pm" }, + { hour: "3pm" }, + { hour: "4pm" }, + { hour: "5pm" }, + { hour: "6pm" }, + { hour: "7pm" }, + { hour: "8pm" }, + { hour: "9pm" }, + { hour: "10pm" }, + { hour: "11pm" } +]); + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation#Forcing_appearance_animation +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-line/README.md b/src/main/resources/static/js/amcharts5/examples/radar-line/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-line/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-line/index.css b/src/main/resources/static/js/amcharts5/examples/radar-line/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-line/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-line/index.html b/src/main/resources/static/js/amcharts5/examples/radar-line/index.html new file mode 100644 index 00000000..5f8c4cd8 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-line/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - radar-line + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-line/index.js b/src/main/resources/static/js/amcharts5/examples/radar-line/index.js new file mode 100644 index 00000000..32bf884c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-line/index.js @@ -0,0 +1,107 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/radar-chart/ +var chart = root.container.children.push(am5radar.RadarChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX" +})); + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Cursor +var cursor = chart.set("cursor", am5radar.RadarCursor.new(root, { + behavior: "zoomX" +})); + +cursor.lineY.set("visible", false); + + +// Create axes and their renderers +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Adding_axes +var xRenderer = am5radar.AxisRendererCircular.new(root, {}); +xRenderer.labels.template.setAll({ + radius: 10 +}); + +var xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0, + categoryField: "category", + renderer: xRenderer, + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5radar.AxisRendererRadial.new(root, {}) +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Adding_series +var series = chart.series.push(am5radar.RadarLineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + categoryXField: "category", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); + +series.bullets.push(function () { + return am5.Bullet.new(root, { + sprite: am5.Circle.new(root, { + radius: 5, + fill: series.get("fill") + }) + }); +}); + + +// Add scrollbars +chart.set("scrollbarX", am5.Scrollbar.new(root, { orientation: "horizontal" })); +chart.set("scrollbarY", am5.Scrollbar.new(root, { orientation: "vertical" })); + + +// Generate and set data +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Setting_data +var i = -1; +var value = 10; + +function generateData() { + value = Math.round((Math.random() * 4 - 2) + value); + i++; + return { + category: "cat" + i, + value: value + }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} +var data = generateDatas(12); +series.data.setAll(data); +xAxis.data.setAll(data); + + +// Animate chart and series in +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-time-line/README.md b/src/main/resources/static/js/amcharts5/examples/radar-time-line/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-time-line/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-time-line/index.css b/src/main/resources/static/js/amcharts5/examples/radar-time-line/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-time-line/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-time-line/index.html b/src/main/resources/static/js/amcharts5/examples/radar-time-line/index.html new file mode 100644 index 00000000..8d075bdf --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-time-line/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - radar-time-line + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/radar-time-line/index.js b/src/main/resources/static/js/amcharts5/examples/radar-time-line/index.js new file mode 100644 index 00000000..ca45beb6 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/radar-time-line/index.js @@ -0,0 +1,375 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Create custom theme +var myTheme = am5.Theme.new(root); +myTheme.rule("Label").set("fontSize", 10); +myTheme.rule("Grid").set("strokeOpacity", 0.06); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root), + myTheme +]); + +var temperatures = { + "EUROPE": [ + ["Albania", 3.89, 3.61, 1.61, 1.61, 1.11, 3.36, 3.36, -0.36, -2.26, -2.32, -2.36, -2.41, -2.55, -2.05, -1.49, -1.91, -2.52, -2.03, -1.05, -1.23, -1.23, -1.23, -1.23, -1.23, -1.23, -1.23, -1.23, -1.59, -1.59, -1.59, -1.59, -1.59, -1.59, -1.59, 1.11, 0.96, 0.96, 0.96, 0.96, 0.96, 1.48, -1.71, -1.14, -0.57, -0.84], + ["Austria", 6.9, -0.33, 0.18, 0.36, -0.05, 0.42, -0.55, -0.13, -0.84, -0.14, 0.38, 0.72, -0.47, -0.27, 0.03, -0.17, 0.57, 0.94, 0.88, -0.02, 1.49, 0.82, 2.08, 0.75, -0.26, 0.95, 1.03, 1.05, 1.85, -0.87, 0.43, 0.26, -0.62, -0.83, -0.08, -0.1, 0.62, 0.58, -0.39, 0.53, 0.22, 0.27, 0.86, 0.89, 0.75], + ["Belgium", 10.32, -0.07, 0.23, 0.15, 0.73, 0.11, -0.5, -0.88, -0.64, -0.29, 0.67, 0.49, -0.27, -0.82, -0.62, -0.82, 0.49, 1.08, 0.99, -0.15, 0.56, -0.07, 0.91, 0.98, -0.92, 0.65, 0.38, 0.94, 1.72, 1.53, 1.93, 2.29, 1.94, 2.53, 1.74, 2.07, 1.78, 1.76, 1.18, 2.93, 2.29, 0.92, 2.63, -5.37, -4.61], + ["Bulgaria", 12.03, 0.06, -0.12, 0.48, -0.58, 0.07, -0.65, 0.41, -0.46, 0.29, 0.45, 0.06, 0.28, 0.24, -2.82, 0.31, 0.23, 0.78, 1.49, -3.23, -0.55, -4.72, -0.57, -1.77, -1.77, -1.77, -3.13, 0.55, 0.57, 1.21, -0.43, -2.21, -1.56, -1.45, -1.08, -0.05, -1.34, 0.13, -0.81, -0.93, -1.67, -0.77, -1.06, -0.51, 0.14], + ["Croatia", 13.8, -0.07, 0.21, 0.34, -0.54, 0.45, -0.87, 0.22, -0.82, 0.03, 0.52, 0.52, -0.39, -0.12, 0.06, 0.03, 0.48, 0.48, 0.87, -0.12, 1.07, 0.61, 1.73, 0.32, -3.32, -3.18, -3.32, -0.28, 0.84, -0.39, 0.58, 0.68, -0.33, -0.62, 0.41, 1.01, 0.77, 0.89, -0.13, 0.79, 1.12, 0.51, 1.13, -0.22, -2.08], + ["Czech Republic", 8.12, -0.46, 0.11, 0.36, -0.32, 0.44, 0.01, -0.42, -1.58, -0.24, 0.96, 1.1, -0.68, -0.81, -0.2, -1.09, 0.97, 1.34, 1.34, -0.18, 1.17, 0.26, 1.47, 0.54, -1.14, 0.41, 0.86, 1.32, 2.06, 0.52, 1.41, 1.68, 1.46, 0.61, 2.04, 1.96, 1.84, 1.95, 0.62, 1.54, 1.77, 1.11, 2.63, -3.79, 2.48], + ["Denmark", 7.89, 0.48, 0.31, 0.68, 0.06, -0.47, -0.04, -0.97, -0.21, -0.19, 0.36, -0.01, 0.31, -0.82, -0.49, -0.97, 0.36, 0.92, 1.38, 0.5, 0.96, -0.43, 0.19, -0.13, -0.83, 0.61, -0.09, 0.31, 0.78, 0.62, 1.59, 0.41, 0.83, 1.39, 1.49, 1.18, 1.27, 0.83, -0.84, 1.14, 0.46, 0.56, 1.95, 1.49, 1.33], + ["Estonia", 3.85, -1.07, 1.77, 0.14, -3.82, -2.64, 1.71, 1.66, 1.31, 2.01, 2.64, 3.27, 2.67, 0.26, 1.68, 2.24, 2.5, 3.49, 0.74, -2.3, 2.78, -1.96, 2.73, 3.14, 1.64, 2.57, 2.41, 3.07, 4.03, 4.33, 3.74, 3.27, 3.51, 3.15, 4.32, 3.41, 3.65, 2.55, 1.72, 3.51, 2.08, 3.13, 3.5, 3.78, 3.06], + ["Finland", 2.29, 0.24, 1.87, 1.67, -1.16, -0.27, -1.27, 0.02, -0.67, -0.96, 0.15, 0.45, 0.74, -2.04, -0.4, -1.84, 0.22, 2.05, 1.31, 0.16, 1.17, 0.14, -0.02, 0.57, -0.11, 0.37, -0.22, 0.62, 1.77, 0.19, 0.32, 0.55, 0.69, 1.33, 1.06, 1.38, 1.57, 0.74, -0.31, 2.03, 0.14, 1.84, 2.01, 2.43, 1.63], + ["France", 11.96, -0.44, -0.22, -0.02, 0.04, -0.32, 0.05, -0.43, -0.79, -0.09, 0.92, 0.28, -0.27, -0.29, -0.24, 0.16, 0.58, 0.79, 1.21, 0.4, 0.68, 0.03, 1.33, 0.78, -0.22, 0.92, 0.44, 0.91, 0.82, 0.63, 0.64, 1.56, 0.38, 0.48, 1.17, 0.72, 0.31, 0.92, 0.02, 1.44, 0.69, -0.01, 1.33, 1.06, 0.64], + ["Greece", 16.38, -0.06, -0.19, -0.03, -0.38, 0.69, 0.01, 0.41, -0.06, 0.18, -0.24, -0.32, 0.03, 0.45, 0.14, -0.07, 1.72, -0.04, 0.62, -0.38, -0.06, 0.57, 1.21, 0.53, 0.75, 0.17, 1.53, 1.49, 1.03, 1.88, 0.92, 0.86, 0.53, 0.48, 1.13, 1.56, 1.53, 2.76, 2.05, 0.91, 1.99, -4.31, 3.41, 2.5, 0.07], + ["Hungary", 10.73, 0.01, 0.32, 0.55, -0.36, -0.43, -0.86, 0.25, -1.2, 0.32, 0.52, 0.89, -0.26, -0.36, 0.34, 0.14, 0.34, 0.79, 0.76, -0.26, 1.31, 0.31, 1.73, 1.5, 1.12, 1.47, 1.29, 1.73, 2.57, 1.35, 2.63, 1.49, 1.01, -0.04, 1.92, 2.99, 2.51, 2.41, 1.79, 2.25, 2.69, 2.59, 2.66, 2.69, 2.43], + ["Iceland", 3.93, -0.29, 0.96, 0.24, 0.52, 0.05, 0.22, -1.3, -0.35, 0.62, -0.27, -0.37, 0.47, 0.49, 0.18, 1.26, 0.01, 0.06, 0.43, 1.22, 0.44, 0.31, 0.13, -0.16, 0.83, 0.83, 0.32, 0.32, 0.53, 1.03, 1.23, 2.01, 1.59, 0.83, 1.07, 1.82, 1.18, 1.54, 2.03, 0.9, 1.8, 1.17, 2.31, 0.82, 2.37], + ["Ireland", 10.13, -0.13, -0.49, 0.06, -0.1, 0.45, 0.28, -0.82, -0.16, 0.03, 0.24, 0.32, 0.27, -0.4, -1.04, -0.16, 0.23, 0.73, 0.71, 0.41, 0.37, 0.57, 0.34, 1.02, 0.06, 0.84, 0.67, 0.58, 0.36, 0.28, 0.46, 0.93, 0.64, 0.52, 0.84, 1.23, 0.43, 0.45, -0.33, 0.55, 0.26, 0.29, 0.82, 0.04, 0.65], + ["Italy", 13.05, 0.19, -0.27, 0.19, -0.63, 0.19, -0.1, -0.08, -0.39, -0.14, 0.53, 0.55, 0.17, 0.29, 0.28, 1.19, 1.04, 0.51, 1.39, 0.62, -0.33, 0.42, 1.34, 0.24, -2.41, 0.47, 0.25, -1.22, 2.13, 2.22, 1.87, 1.93, 1.14, -0.64, 1.51, 1.66, 1.96, 2.14, 1.63, 2.24, 2.47, 1.83, 2.09, 2.22, 2.3], + ["Latvia", 5.22, -1.89, 0.41, 0.26, -1.89, -2.57, 1.78, 0.89, 0.67, 1.73, 2.54, 2.74, 3.53, -0.72, 1.12, -0.42, 2.13, 1.76, 1.71, 0.07, 1.68, 1.4, -3.59, 0.41, 0.88, 3.05, 1.93, 2.74, 3.23, 3.45, 3.16, 3.53, 2.41, 2.28, 3.13, 2.99, -0.27, 1.96, 1.44, 2.77, 1.44, 2.67, 2.71, 3.09, 2.32], + ["Lithuania", 6.53, 0.39, 0.7, 1.74, -1.34, -0.22, -0.91, -0.73, -1.28, 0.09, 0.37, 1.19, 0.42, -1.31, -0.23, -1.74, 0.45, 1.82, 1.75, 0.92, 1.25, 0.07, 1.15, 1.16, -0.61, 0.82, 0.63, 1.49, 1.95, 1.51, 2.23, 0.89, 0.61, 0.68, 1.37, 1.86, 2, 0.88, 1.11, 1.78, 0.89, -1.37, 1.08, 3.27, 2.36], + ["Luxembourg", 8.61, 0.14, 0.27, 0.44, 0.68, 0.09, -0.87, -0.77, -0.89, -0.17, 0.51, 0.57, -0.26, -1.06, -0.55, -0.86, 0.58, 1.17, 1.3, 0.44, 1.08, 0.46, 1.69, 1.19, -0.52, 1.17, 0.75, 1.39, 1.58, 1.09, 1.49, 1.89, 0.84, 1.24, 1.76, 2.02, 1.23, 1.48, 0.2, 2.17, 1.19, 0.57, 2.36, 1.88, -0.59], + ["Macedonia", 9.52, 3.13, -1.49, 3.38, -1.99, 2.12, 0.52, 1.01, 0.41, 0, -2.85, -7.12, -7.12, -8.64, -3.89, -0.35, 3.15, 1.01, 1.82, 4.11, 1.92, 1.94, 3.92, -2.4, 5.58, 1.5, 0.99, 5.07, 3.43, 3.22, 2.09, 1.69, 2.42, -1.58, 2.67, 2.98, 3.15, 2.82, 2.51, 2.58, 3.47, 2.01, 2.9, 3.17, 3.64], + ["Malta", 18.86, 0.04, 0.05, 0.11, -0.7, 0.58, -0.13, 0.15, -0.9, -0.22, 0.83, 0.18, -0.67, 0.53, 1.02, 1.82, 1.27, 0.3, 1.04, 0.53, 0.62, 1.27, 1.52, 1.01, 0.41, 0.61, 1.37, 1.37, 0.83, 1.24, 0.29, 1.56, 0.41, 0.86, 1.38, 1.16, 1.48, 1.17, 1.52, 0.36, 1.61, 0.84, 0.78, 1.06, 1.07], + ["Montenegro", 11.64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7.87, 3.81, 5.06, 3.64, 3.76, 3.07, 0.81, -0.96, 2.31, -0.12, 6.41, 4.34, 5.31, 5.88, 6.6, 5.88, 6.04, 5.98, 6.42, 5.89, 7.04, 6.56, 6.37, 6.68, -1.12, 9.91], + ["Netherlands", 9.49, -0.24, 0.06, -0.03, 0.31, 0.02, -0.27, -0.98, -0.44, -0.09, 0.79, 0.87, -0.02, -0.46, -0.65, -0.49, 1.02, 1.43, 1.17, 0.01, 0.89, 0.18, 1.29, 1.11, -0.88, 0.8, 0.89, 1.81, 1.36, 1.25, 1.42, 1.27, 0.99, 1.58, 2.42, 1.82, 1.2, 1.21, -0.16, 1.42, 0.84, 0.52, 2.31, 1.43, 1.34], + ["Norway", 3.73, 0.82, 1.53, 0.01, 0.16, -0.23, -0.53, -0.72, -0.7, 0.04, 0.33, -0.67, 0.96, -1.09, -0.43, -0.71, -0.01, 0.98, 1.48, 0.76, 0.86, 0.09, 0.13, 0.08, -0.22, -0.16, 0.56, 1.16, 1.47, 0.69, 1.38, 0.77, 1.38, 1.19, 1.42, 1.17, 1.11, 1.01, -0.53, 1.8, 0.59, 1.09, 2.02, 1.65, 1.53], + ["Poland", 8.64, 0.89, 0.77, 1.59, -0.71, -0.42, -0.37, -0.89, -1.73, 0.14, -0.06, 0.49, -0.18, -0.63, 0.34, -1.34, 0.82, 1.9, 1.4, 0.42, -0.89, 0.21, 1.07, 0.76, -1.04, 0.33, 0.42, 1.22, 1.52, 0.42, 1.67, 0.82, 0.41, 0.73, 0.93, 1.74, 1.54, 0.46, -1.14, 0.64, 0.22, -0.07, 1.16, 0.87, 1.39], + ["Russia", 0.51, 0.51, -0.63, 1.69, -1.09, -0.62, -0.16, -0.33, -0.8, 0.69, 0.06, 0.7, -0.47, -0.67, -0.14, -0.92, 0.5, 0.53, 1.01, 0.45, 0.26, 0.13, -0.03, 1.58, -0.29, 0.5, 0.02, 0.17, 0.01, 0.48, 0.74, 0.81, 0.46, 0.77, -0.14, 1.57, 1.27, 0.27, 0.33, 0.89, 1.51, -2.22, -2.98, 2.25, 0.13], + ["Serbia", 11.68, -0.24, 0.31, 0.48, -0.64, 0.54, -0.72, 0.39, -1.03, 0.09, 0.29, 0.52, -0.28, -0.59, -0.06, -0.11, 0.34, 0.57, 1.07, -0.49, 0.95, 0.31, 1.76, 0.52, -0.26, -0.18, 0.67, 0.88, 2.08, 0.97, 1.7, 0.88, 0.63, -0.07, 0.84, 1.97, 2.05, 1.59, 2.09, 1.91, 2.24, 2.45, 2.39, 2.69, 2.16], + ["Slovakia", 9.7, -0.11, 0.61, 0.93, 0.04, -0.31, -1.03, -0.02, -1.34, -0.14, 0.61, 0.76, -0.22, -0.78, -0.34, -0.64, -0.08, 0.73, 0.82, -0.45, 0.98, 0.04, 1.67, 0.68, -0.57, 0.01, 0.82, 0.93, 1.73, 0.61, 1.36, 0.72, 0.4, 0.13, 0.92, 1.71, 1.83, 1.39, 0.81, 1.43, 1.71, 1.62, 3.01, 2.31, 2.74], + ["Spain", 17.29, -1.64, -1.48, -0.84, -0.82, 0.54, 0.69, 0.78, 0.34, 0.78, 0.43, 0.18, -0.78, 0.17, -0.61, 0.02, -0.27, 1.15, 0.42, -0.21, -0.16, -1.08, 0.55, 0.64, -0.39, 1.33, 0.22, 0.07, 0.11, 0.46, 0.38, 1.07, 0.64, 1.36, 1.51, -0.62, -0.89, 0.75, 0.57, 0.73, 0.34, 0.38, 1.37, 0.64, 1.74], + ["Sweden", 5.67, 0.84, 1.23, 1.9, -0.27, 0.33, -0.72, -1.16, -1.03, -0.88, 0.01, 0.36, 0.41, -1.97, -0.76, -1.9, 0.09, 1.21, 1.43, 0.27, 1.01, -0.27, 0.06, -1.02, -0.46, 1.06, 0.29, 1.09, 1.73, 0.59, 1.48, 0.82, 0.86, 1.22, 1.43, 1.2, 0.38, 0.13, -1.55, 0.85, 0.11, 0.42, 1.59, 1.42, -0.29], + ["Switzerland", 9.73, -0.3, 0.37, 0.16, 0.27, 0.45, -0.75, -0.15, -0.68, -0.25, 0.46, 0.43, -0.44, -0.74, -0.46, -0.5, 0.55, 0.73, 1.02, 0.01, 0.64, 0.26, 1.59, 0.44, -0.64, 0.67, 0.73, 0.85, 1.63, 0.74, 1.33, 1.41, 0.54, 0.39, 0.96, 1.24, 0.76, 1.08, -0.13, 1.65, 0.86, 0.21, 1.81, 1.7, 0.34], + ["Ukraine", 9.15, -0.48, -0.05, 1.22, -1.58, -0.08, 0.13, 0.24, -1.24, 0.78, 0.19, 0.9, -0.18, -1.37, -0.15, -1.77, -0.3, 1.33, 1.12, 0.24, 0.55, -0.83, 0.64, 0.54, -0.48, -0.33, 0.51, 1.61, 0.91, 0.51, 1.9, -0.04, 0.48, -0.94, 0.47, 1.08, 4.14, 2.33, 2.07, 0.89, 1.51, 2.09, 1.56, 2.09, 2.31] + ], + "AFRICA": [ + ["Algeria", 16.99, 0.55, 0.09, 0.44, -4.27, 0.58, 0.28, 0.93, 0.58, -0.5, 2.37, -1.47, 1.45, 1.74, 1.34, 2.07, 0.91, 0.61, 1.84, 0.71, 0.54, 0.36, 2.18, 2.28, 1.93, 4.09, 1.03, 1.77, 1.32, 2.72, 1.51, 2.68, 1.43, 1.82, 2.62, 1.64, 1.72, 3.03, 1.88, 2.16, 2.45, -0.54, 3.03, 1.52, 3.32], + ["Angola", 23.86, 1.64, 0.58, -0.54, 0.37, 0.96, 0.56, 0.56, 0.56, -1.61, -1.94, -1.94, -1.94, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, -2.46, 0.86, 1.81, 0.79, 0.18, 0.64, 1.38, 1.98, 0.65, 0.65, 0.09, 3.67, 5.14, 5.14, 2.62, 1.91, 2.57], + ["Botswana", 21.64, 0.33, -1.11, -0.36, -0.7, -0.1, -0.26, 0.24, -0.92, -0.77, 0.58, 0.88, 0.68, 0.33, -1.9, 1.8, 1.41, 0.3, 2.82, 0.84, 0.3, 0.98, 1.19, 2.32, 1.36, 1.64, 1.68, 2.41, 0.34, 1.46, 2.44, 1.63, 0.87, 2.18, 0.41, 0.84, 0.64, 0.58, 1.6, 0.89, 0.87, 0.83, 0.24, 1.09, 2.2], + ["Cameroon", 24.36, 0.16, -0.32, -0.6, -0.31, 0.01, 0.09, 0.22, 0.18, 0.27, -0.07, 0.36, 0.03, 0.18, 0.33, 0.76, 0.43, 0.11, 0.96, 1.1, -0.1, 0.38, 0.14, 0.46, 0.32, 0.98, 1.14, 0.5, 0.42, 0.33, 1.02, 0.57, 1.56, 1.14, -1.78, 0.84, 0.47, 0.71, 3.01, -0.46, 0.62, 0.93, 0.3, 0.55, 0.96], + ["Chad", 27.71, 1.17, 0.16, 0.16, 0.36, 0.18, 0.12, -2.14, -2.14, -2.14, -2.14, -2.14, -2.14, -2.14, -2.14, -0.52, 0.86, -0.09, 1.26, 1.18, -0.27, 0.74, 1.43, 0.42, 0.04, 0.97, -0.09, -1.44, 0.37, 0.95, 1.15, 1.21, 1.41, 0.42, 1.9, 1.14, 0.13, 1.52, 1.98, 1.16, 0.87, 1.77, 1.53, 0.86, 1.33], + ["Congo", 25.22, 0.17, -0.28, -0.45, -0.31, 0.13, 0.07, 0.21, 0.12, 0.14, -0.31, 0.5, 0.54, 0.11, 0.24, 0.66, 0.63, 0.51, -0.1, 0.26, -0.64, -0.14, 0.56, 0.81, 0.32, 1.27, 1.34, 0.74, 0.16, 0.49, 1.54, 1.67, 0.73, 1.14, 0.57, 0.95, 0.96, 1.13, 1.28, 0.91, 1.2, 0.89, 0.79, 1.12, 1.37], + ["Egypt", 22.71, -0.54, -0.06, -0.88, 0.35, -0.27, 2.35, 0.56, -0.34, 0.74, -0.34, -0.55, -0.19, 1.07, -1.12, -0.37, -0.2, -0.16, -0.59, -0.19, -0.85, -0.44, 0.79, -0.03, 0.46, -0.87, 0.68, 1.25, -1.59, 0.1, 0.23, 0.72, 0.71, -0.01, 0.91, 0.68, 0.93, 0.79, 2.17, 0.14, 0.57, -0.01, 1.56, 1.43, 1.1], + ["Ethiopia", 19.63, 0.43, -0.53, -0.37, -0.21, -0.04, -0.12, -0.07, 0.41, -0.18, 0.28, 0.42, -0.16, -0.72, 0.11, 0.59, 0.45, -1.68, 0.52, 0.86, 0.96, 1.11, -0.24, 0.79, 0.31, 0.8, 0.73, 0.86, 1.22, 0.17, 4.5, 4.5, 4.5, -5.07, 0.97, -1.89, -2.05, 1.61, 1.18, 2.43, 1.51, 1.88, 1.49, 1.84, 1.54], + ["Ghana", 26.71, -0.01, -1.01, -0.19, -0.91, 0.42, 0.07, 0.22, 1.24, 0.74, -2.58, -2.58, -2.58, -2.58, 0.01, 1.98, -0.77, -0.39, 0.21, 0.54, 0.48, 0.11, 0.94, 1.69, -0.23, 0.44, 1.02, 0.97, 0.15, 2.47, 1.91, 0.78, 1.11, 0.8, 1.92, 1.58, 0.65, 0.87, 1.23, 0.7, 0.88, 1.52, 0.19, 0.84, 1.36], + ["Kenya", 23.06, -2.26, -0.79, -0.14, 0.35, 0.21, 0.08, 0.27, 0.46, 0.28, 0.5, 0.48, 0.23, 0.14, 0.27, 0.77, 0.74, 0.13, 0.31, 0.39, 0.44, 0.06, 0.43, 0.47, 0.36, 0.63, 1.03, 0.38, 0.67, 0.54, 0.87, 0.83, 0.92, 0.98, 0.99, 0.91, 0.83, 1.23, 1.19, 1.18, 0.93, 0.94, 1.07, 1.44, 1.24], + ["Libya", 21.54, -0.77, 0.08, 1.01, -0.04, -0.41, 0.47, 1.54, -0.86, 0.23, 0.2, -1.32, -0.53, 0.28, -1.55, -0.13, 0.63, 0.08, 0.32, -0.83, -0.55, 0.52, -0.47, 0.26, 1.73, 0.42, 0.98, 0.55, -0.17, 0.49, -1.42, 0.04, 2.46, 1.01, 0.23, 0.75, 0.72, 0.57, 1.13, -7.21, 3.03, 1.2, -1.33, 1.39, -0.68], + ["Madagascar", 24.01, 0.71, -0.82, -0.57, 0.35, 0.91, -0.26, -0.07, -0.72, 0.14, -0.01, 0.51, -0.28, 0.37, 0.04, 0.6, 0.46, 0.12, 0.51, 0.04, -0.72, -0.28, 0.37, 0.7, 0.26, 0.66, 0.87, 0.59, 0.62, 0.53, 0.75, 0.81, 0.97, 0.48, 0.88, 0.73, 0.33, 0.07, 1.13, 1.34, 0.73, 0.78, 0.76, 0.69, 0.68], + ["Mali", 28.39, -0.03, -0.84, -0.41, -0.39, 0.07, 0.01, 0.14, 1.04, 0.33, -0.34, 0.22, 0.78, -0.44, -0.98, 0.7, -0.48, 0.5, 0.83, 1.09, 0.19, 0.55, -0.06, 0.56, 0.36, 0.91, 1.13, 0.83, 0.37, 0.82, 1.89, 0.88, 1.33, 1.09, 0.76, 1.44, 0.48, 0.73, 1.58, 1.43, 0.86, 0.37, 0.56, 1.22, 1.26], + ["Mauritania", 27.57, -0.18, -1.05, -0.61, -1.07, 0.14, -0.21, 0.44, 0, 0.72, 0.07, 1.24, 0.17, 0.32, -0.48, 1.36, 0.54, 0.31, 0.58, -0.08, 0.56, 0.26, -0.91, 0.17, 0.84, -0.02, 1.15, -1.02, 0.4, 0.44, 0.48, 0.86, 0.78, 0.22, 1.12, -1.03, 1.56, 1.13, 2.14, 1.52, 0.51, 1.93, 0.71, 1.43, 1.63], + ["Morocco", 17.58, -0.47, -0.62, -0.29, -0.57, -0.4, -0.08, 0.72, 0.55, 0.29, 0.22, 0.64, 0.21, 0.58, 0.55, 1.36, 0.45, 0.62, 0.89, -0.09, 0.11, -0.12, 0.63, 1.44, 0.93, 1.54, 1.39, 0.87, 1.17, 1.57, 1.21, 1.47, 1.36, 1.41, 1.99, 1.03, 1.02, 2.15, 2.06, 1.76, 1.55, 1.08, 1.42, 1.35, 1.97], + ["Mozambique", 23.62, 0.02, -0.46, -0.59, 0.22, 0.17, 0.22, 0.22, 0.07, -0.29, -0.17, 0.64, 0.25, 0, -0.08, 0.38, 0.16, 0.56, 0.31, 0.46, 0.86, 0.41, -0.3, 0.95, 0.63, -0.31, 0.49, -0.23, 1.36, 0.33, 0.49, 0.92, 0.94, 1.18, 0.65, 1.53, 0.97, 0.79, 1.86, 3.11, 0.17, -0.58, 0.23, 1.09, 1.44], + ["Namibia", 20.84, -0.18, -1.9, -0.91, -1.88, -0.71, -1.07, -0.24, 0.61, -0.33, 1.13, 0.71, 1.62, 0.12, -0.29, 0.68, 0.63, -0.36, 0.41, -1.41, 0.67, 0.4, 0.44, 0.28, 0.43, 0.24, 1.04, 0.64, 0.56, 0.01, 1.26, 1.96, 1.12, 1.05, -0.09, -0.25, 1.42, 0.59, 1.02, -0.66, 0.66, 1.24, 0.87, 2.64, 1.88], + ["Niger", 28.41, 0.65, -0.49, -0.29, 0, -0.57, 0.04, 0.36, -0.38, -0.07, 0.53, 0.19, -0.16, 0.28, 0.37, 0.46, -0.12, -0.73, 0.78, -0.48, -0.09, 0.5, -0.7, 0.21, 0.33, -0.44, 1.65, -1.01, -0.82, 0.14, 0.97, 0.48, 0.77, 1.44, 1.45, 0.61, 0.17, 1.22, 1.31, 1.02, 0.66, 1.23, 0.94, 0.71, 1.27], + ["Nigeria", 26.35, 0, -0.73, -0.05, 1.29, 0.65, -1.35, -0.55, 0.22, 0.15, 0.15, 0.15, 0.15, 0.15, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 1.52, 0.73, 1.87, 0.66, 0.19, 0.51, 0.37, 1.01, -0.05, 1.91, 0.23, 1.36, 1.59, 1.55, 0.74, 1.38, 1.72, 1.46, 1.53], + ["South Africa", 17.03, -0.29, -0.54, 0.45, -0.05, 0.03, -0.53, -0.21, 0.31, -0.73, -0.19, 0.74, 0.79, 1.51, 0.36, 0.96, 0.35, 0.44, 2.13, -0.26, 1.02, 1.31, 0.47, 1.36, 0.42, 0.02, 0.5, 1.83, 0.71, 0.31, 1.28, 1.45, 1.57, 1.11, 1.08, 0.51, 0.58, 0.86, 1.29, 0.56, 1.16, 1.59, 0.97, 1.63, 1.73], + ["Tanzania", 24.09, -0.58, -0.93, 0.12, 0.28, 0.41, -0.58, -0.18, 0.26, 0.21, 0.56, 0.19, -0.41, -0.59, -0.18, 0.25, 0.34, 0.16, -0.52, 0.19, -0.39, -0.39, 1.93, 1.99, 2.96, 1.89, 1.93, 2.42, -0.16, -0.79, 0.53, 1.06, 0.57, 1.11, 1.01, 0.79, 0.12, 0.72, 1.02, 0.57, 0.62, 0.44, 0.38, 0.43, 0.51], + ["Tunisia", 18.81, 0.07, -0.68, -0.31, -0.92, 0.28, -0.22, 0.15, -0.46, 0.21, 1.46, 0.41, -0.21, 0.51, 0.76, 1.13, 1.01, 0.34, 1.02, -0.38, 0, 0.53, 1.86, 1.1, 0.74, 1.48, 1.14, 2.43, 1.64, 2.48, 1.56, 2.47, 0.9, 2.38, 2.1, 1.86, 2.04, 2.08, 1.82, 1.6, 2.61, 1.71, 2.36, 2.29, 2.36], + ["Zambia", 21.76, 3.24, -3.41, 1.78, -0.2, -0.06, -3.73, 1.24, -1.18, -1.47, 1.4, 2.4, 0.78, 0.65, -0.65, 1.28, 0.35, -0.7, 0.44, -0.51, -0.28, -3.03, 0.08, 0.25, 1.94, -2.09, 4.19, 1.19, -1.39, 2.88, 1.77, 0.54, -0.14, 3.77, -1.06, 1.69, 0.24, 0.72, 2.36, 3.51, 0.63, 1.03, 1.08, 1.81, 4.54], + ["Zimbabwe", 19.03, 0.15, -0.56, -0.41, -0.39, 0.21, -0.18, 0.06, -0.16, -0.31, 0.27, 1.32, 0.43, -0.03, 0.14, 1.04, 0.21, 0.07, 0.68, 0.45, 0.91, -0.18, 0.3, 0.87, 0.12, -0.25, 0.61, -0.42, -0.36, 0.39, 0.77, 0.48, 0.37, 1.07, 0.32, 0.42, 0.94, 0.47, 0.61, 1.61, 0.34, 0.2, 0.56, 0.7, 1.42] + ], + "AMERICA": [ + ["Argentina", 17.19, -1.68, -0.6, -0.49, 0.73, -0.41, 1.13, -0.53, -0.19, -0.29, 2.62, -0.62, -1.66, -1.17, -0.91, -0.73, -0.47, -0.09, -0.35, -0.64, -0.86, -0.61, -0.07, -0.58, -0.39, -0.38, 0.16, -0.42, -0.87, 0.25, -0.21, -0.17, 0.33, -0.01, 0.19, -0.3, -0.05, 0.65, 0.06, 0.22, 0.66, 0.29, 0.31, 0.27, -0.53], + ["Belize", 26.31, -0.53, -0.4, -1.28, 0.14, -0.47, -0.68, 0.87, 0.77, 0.36, 0.42, 0.79, -0.91, 0.84, 0.56, 0.09, 0.58, 0.11, 0.38, 0.38, 0.34, 0.21, 0.61, -1.36, 0.67, 1.13, 1.12, -0.09, 0.11, 0.58, 0.94, 0.92, 0.5, 1.14, 0.84, 0.98, 0.68, 0.78, 0.75, 0.68, 0.47, 0.95, 0.66, 1.19, 1.23], + ["Bolivia", 21.84, -2.32, -1.07, -1.07, 2.28, -0.61, -0.92, -0.14, -0.33, 0.57, 1.18, -0.22, 0.23, -0.44, 0.34, 1.07, 0.34, 0.12, 0.38, 0.59, -0.09, 0.57, 1.07, 1.14, 0.43, 0.42, -0.82, -0.23, 0.39, 0.92, 1.49, 1.04, 0.86, 1.04, 1.27, 0.69, 0.81, 1.79, 0.84, 0.53, 2.75, 2.11, 1.52, 1.68, 2.01], + ["Brazil", 25.75, 0.43, -1.64, -0.21, 0.72, 0.73, 0.14, -1.11, 0.01, -0.41, 1.15, 0.39, 0.25, 0.32, 0.75, 0.36, 0.23, 0.35, 0.55, 0.37, 0.59, 0.57, 0.58, 0.99, 0.53, 0.29, 0.46, 0.64, 0.68, 0.73, 0.37, 0.23, -1.12, 0.39, -0.63, 0.44, -0.03, -0.18, 0.34, 0.26, 0.16, 0.68, -1.71, -2.25, -0.23], + ["Canada", 3.37, 0.29, -0.05, -0.65, 0.04, 0.34, -0.82, -0.21, -0.02, 1.24, -0.92, 0.62, 0.31, -0.33, 0.53, 1.84, 1.11, 0.46, 0.9, 1.21, -1.33, 0.51, 0.06, 0.03, -0.78, 0.31, 1.57, 0.73, -0.14, 0.72, -0.45, 0.08, -0.28, 0.54, 1.04, 0.12, -0.32, -0.44, 1.03, 0.04, 0.63, -0.19, -0.31, 0.67, 1.03], + ["Chile", 13.37, -0.54, -0.44, -0.69, -0.35, 0.34, 0.05, 0.03, 0.25, 0.26, 0.32, 1.14, 0.56, 1.92, 0.5, 1, 0.74, 0.94, 0.98, 0.66, 1.19, 0.61, 0.67, 0.29, 0.42, 1.16, 1.33, 0.04, -0.37, 1.08, 0.61, 1.05, 1.53, 2.13, 2.56, 1.22, 2.06, 2.06, 1.2, 1.04, 1.56, 1.28, 1, 1.74, 1.76], + ["Colombia", 25.89, 1.04, -0.03, -0.28, 0.24, -0.21, -0.36, -0.21, -0.1, -0.25, -0.35, 0.51, -0.73, -0.62, -0.81, -0.47, -0.56, -2.44, -0.48, -0.48, -0.32, -0.31, -0.43, -0.36, -0.51, 0.08, 0.26, -1.09, -1.03, -0.31, -0.26, -0.03, -0.45, 0.01, -0.58, -0.48, -0.66, -3.99, 0.06, -0.17, 0.12, 0.27, 0.42, 0.83, 0.62], + ["Costa Rica", 24.8, 1.47, 0.89, 0.9, -0.58, -0.42, -0.34, -0.36, -0.12, -0.33, 0.05, 0.49, 0.22, 0.3, 0.32, 1.06, 0.5, 0.24, 0.61, 0.83, 0.6, 0.6, 0.67, 0.72, 0.41, 1.18, 1.19, 0.17, 0.59, 0.98, 1.02, 1.07, 0.72, 0.55, 0.73, 0.86, 0.63, 1.16, 1.12, 0.46, 0.79, 1.07, 1.21, 1.51, 1.16], + ["Cuba", 26.64, -0.24, -0.6, -0.09, -0.64, -0.15, -0.45, 0.06, 0.28, 0.23, 0.38, 1.22, 0.84, 0.93, 0.91, 1.6, 1.46, 1.12, 1.52, 1.54, 1.16, 0.77, 1.41, 0.83, 0.06, 0.37, 0.42, -0.55, -0.65, -0.02, 0.12, 0.44, -0.29, -0.22, 0.02, 0, -0.28, 0.12, 0.07, -0.27, -0.12, -0.73, 0.67, 1.81, 1.19], + ["Greenland", -5.08, -1.37, -2.73, -3.02, 1.58, 1.73, 1.53, 2.04, 2.67, 0.01, 0.05, -1.31, -0.49, 1.59, 0.69, 0.12, 1.03, -0.87, 0.25, 0.48, 0.34, 0, 0.62, 1.76, 2.58, 2.03, 1.88, 0.06, 1.74, 1.63, 1.44, 2.53, 1.86, 2.32, 1.66, 1.71, 1.52, 1.59, 2.81, 1.11, 0.68, 0.88, 1.44, 1.14, 2.75], + ["Jamaica", 26.98, 0.33, -0.43, -0.37, -0.11, 0.34, 0.04, -0.25, 0.12, -0.02, -0.08, 0.42, -0.17, -0.21, -0.06, 0.55, 0.44, 0.24, 0.43, 0.49, 0.64, 0.75, 0.85, 0.94, 0.62, 1.11, 1.19, 0.59, 0.57, 0.86, 0.97, 1.02, 0.93, 1.04, 0.94, 0.91, 0.21, 1.16, 0.84, 0.31, 0.97, 1.14, 1.31, 1.41, 1.32], + ["Mexico", 21.24, -0.5, 1.04, 0.06, -1.08, -0.12, 0.12, -0.27, 0.08, 0.27, -0.02, 0.03, -0.63, -0.54, -0.48, -0.49, -0.14, 0.78, 0.71, 0.8, 0.58, 0.75, 1.27, 0.88, 1.04, 0.29, 1.94, -1.11, 1.34, 1.16, 1.17, 1.67, 1.24, 1.29, 1.76, 1.39, 1.08, 1.79, 1.17, 1.95, 1.63, 1.6, 1.64, 1.96, 2.07], + ["Paraguay", 22.78, 1.06, -0.46, -2.44, 0.09, 1.63, -1.56, -1.71, -1.65, 3.02, 1.26, 0.24, -1.73, 2.62, 3.78, -0.06, 1.05, 0.57, 0.31, 1.39, -0.05, 1.49, 1.8, 1.77, 0.87, 2.48, 0.23, 0.5, 0.9, 1.33, 2.05, 1.98, 0.79, 1.88, 2.24, 1.49, 1.16, 1.46, 0.94, 2.02, 2.04, 1.34, 2.11, 1.68, 0.82], + ["Peru", 20.42, -0.07, -0.42, -0.68, 0.01, -0.09, -0.12, 0.06, 0.16, -0.52, 0.07, 1.72, 0.09, -0.17, 0.18, 0.73, -0.11, 0.22, 0.21, 0.78, 2.39, 0.96, 0.96, 0.88, 0.34, 1.9, 1.99, 0.08, 0.43, 0.25, 0.63, 0.16, 1.17, 0.32, 0.88, -0.21, 0.19, 0.43, 0.48, -0.02, 0.42, 0.49, 1.06, 1.32, 1.43], + ["Uruguay", 18, -0.42, -0.45, -2.36, -2.33, 3.59, -1.29, -0.57, -0.39, 0.41, 1.18, -0.13, 4.28, -1.37, 1.24, -0.15, -0.38, 0.67, 0.29, 0.54, 0.36, 0.31, 0.56, 0.39, 0.16, 1.86, -0.26, -0.22, 0, 0.49, 0.48, 0.06, 0.64, 0.88, 1.11, -0.77, 1.11, 1.46, 0.19, 0.09, 1.2, 0.59, 0.59, 0.6, -0.76] + ], + "ASIA": [ + ["Armenia", 9.14, -2.47, -5.54, 2.91, -9.13, -3.98, 1.3, 1.79, 4.56, 2.72, -0.64, -6.61, -2.99, -0.93, -1.88, -1.64, -2.48, 0.19, -0.03, 0.23, -5.73, -5.01, -3.64, -3.24, -3.11, -3.73, -3.69, -4.82, -7.09, -6.27, -6.48, -3.68, -0.06, -7.24, -1.48, -1.65, -3.22, -3.04, -0.34, -3.41, -1.92, -2.47, -4.29, 0.52, 0.26], + ["Bangladesh", 24.84, 0, 0, 0, 0, -0.34, 2.28, 0.68, -0.08, -1.43, -0.16, 0.02, 0.08, 0.75, 0.44, 0.3, 0.23, 0.57, 0.71, 0.72, 1.05, 0.69, 0.39, 0.72, -0.07, -4.22, 2.03, 2.57, 0.93, 3.94, 1.04, 4.21, 2.68, 0.63, 1.08, 2.64, 1.63, -0.26, 2.41, 2.42, 3.28, -4.2, 1.99, 1.44, 1.65], + ["Burma", 25.69, -0.13, 0.29, -0.57, -0.67, 0.08, -0.53, -0.38, 0.47, -0.58, 0.03, 1.46, 0.12, 0.46, 2.83, -0.25, -1.51, -1.79, 0.1, 0.49, -0.76, 0.63, 1.2, 0.84, 1.38, -0.34, 2.09, 1.39, 0.89, 1.02, 1.14, 0.22, 0.67, 1.26, 1.56, 0.99, 0.73, 1.33, 1.45, 0.62, 0.64, 0.94, 1.16, 0.9, 0.44], + ["China", 9.47, 0.16, -0.31, 0.38, -0.59, -0.11, 0.13, 0.04, -0.24, 0.04, 0.34, 0.18, -0.5, -0.34, -0.13, 0.29, 0.29, 0.42, 0.65, 0.42, 0.18, 0.17, 0.78, 0.59, 0.21, 0.67, 1.46, 1.07, 0.51, 0.88, 1.11, 0.91, 1.01, 0.73, 1.34, 1.47, 0.96, 1.09, 0.88, 0.68, 0.52, 0.01, 1.06, 0.81, -0.18], + ["Georgia", 12.99, -1.18, -3.01, 0.21, -0.1, 0.41, 0.09, 0.84, 1.76, -0.25, 0.63, -0.78, -5.57, 0.06, -3.45, 1.1, -1.41, -4.07, 0, 1.69, 1.23, -0.86, 5.93, -0.06, 3.27, -1.46, -3.82, 0.44, 0.44, 2.17, 2.08, 0.88, 1.77, 0.89, 0.57, -1.65, -1.06, 0.08, 1.46, -0.01, 0.46, -0.38, 0.72, -0.58, -0.94], + ["India", 25.69, -0.61, -0.42, -0.46, -0.24, 0.16, 0.42, 1.16, 0.36, 0.06, 0.14, -0.48, 0.33, 0.37, -0.54, 0.39, 0.64, -0.32, -0.61, 0.21, -0.05, 0.23, 0.27, 0.27, 0.35, -0.18, 0.87, 0.46, 0.27, 0.53, 0.75, 0.59, 0.59, -0.07, 1.03, 0.48, 0.47, 0.56, 0.86, 0.7, 0.94, 0.81, 0.86, -1.73, -0.16], + ["Indonesia", 26.99, 0, 0, 0, -0.58, -0.58, -0.58, 0.09, 0.08, -0.07, -1.54, -0.33, -0.17, -0.23, -0.04, 0.36, 0.18, -0.09, 0.01, 0.06, 0.08, -0.01, -0.07, -0.04, -0.04, -0.03, 0.54, -0.12, -0.05, 0.07, 0.34, 0.4, 0.36, 0.48, 0.24, 0.27, 0.11, 0.44, 0.55, 0.21, 0.34, 0.66, 0.56, 0.58, 0.98], + ["Iran", 18.84, 0.63, -1.68, 0.51, 0.62, -0.42, 2.31, -1.14, 1.49, -2.98, -4.29, -3.54, -3.54, -3.43, -3.66, -2.66, -2.81, -7.02, 2.66, 0.42, -5.14, -1.31, -3.86, -0.69, -1.86, -3.81, -0.93, -3.07, 0.84, 0.64, 0.53, -5.54, 1.75, -0.71, 0.84, 0.03, 0.79, -0.36, 0.93, 0.11, 0.81, 0.42, 0.77, 1.73, 1.46], + ["Iraq", 24.27, 0.66, -1.69, -1.54, -0.46, -1.32, 0.49, 1.84, 2.03, 2.03, 2.03, 2.03, 2.03, 2.03, 2.03, 2.03, -10.73, -0.43, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, -7.47, 2.85, 2.85, 2.85, -13.1, 1.82, 2.41, 2.29], + ["Israel", 19.88, 0.09, -0.09, -0.17, -0.19, -0.01, 0.17, 0.72, 0.22, 0.14, -0.43, -0.46, -0.12, 0.36, 0.03, 0.07, 0.11, -0.02, 0.46, 0.63, -0.05, 1.22, 1.53, 1.05, 1.52, 0.76, 1.9, 1.6, 0.72, 1.45, 1.38, 1.32, 1.11, 1.01, 0.93, 1.25, 2.14, 1.68, 3.17, 1.06, 1.88, 2.01, 1.67, 1.76, 2.42], + ["Japan", 13.93, 0.16, -0.48, 0.1, -0.41, 0.17, 0.36, 0.68, -0.27, -0.48, 0.11, 0.07, -0.45, 0.18, -0.39, 0.46, -0.11, 0.71, 4.79, 3.9, 2.53, 1.51, 1.77, 0.71, 0.47, 1.06, 1.86, 1.51, 1.3, -0.01, 1.23, 0.91, 1.5, 0.63, 1.39, 1.51, 1.34, 1.4, 2.04, 1.19, 1.19, 1.37, 1.22, 1.67, 1.97], + ["Kazakhstan", 6.55, 1.08, -2.06, 1.07, -0.53, 0.33, 0.97, 0.25, -1.56, 0.95, -0.45, -0.04, -2.54, -0.24, 0.18, -0.83, 1.68, 1.71, 1.96, 0.79, 0.51, -1.71, -0.03, 1.37, -1.89, 1.54, 0.41, 1.81, 0.36, 1.8, 2.04, 0.49, 2.14, 2.62, 2.18, 2.08, 2.01, 1.14, 1.97, 0.26, 1.11, 2.77, 0.63, 2.2, 2.41], + ["Korea, South", 9.08, 0.27, -0.55, 0.25, -0.49, 0.42, 0.36, 0.7, -0.72, -0.44, 0.21, -0.01, -1.59, -0.49, -0.76, -0.15, -0.27, 0.51, 0.32, -0.03, 0.39, -0.15, 0.59, -0.21, -0.48, 0.08, 1.37, 1.92, 0.78, 0.65, -0.07, 0.07, 0.79, 0.53, 0.32, 3.63, 0.76, 0.69, 0.42, -0.04, -0.27, 0.02, 1.36, -0.72, 0.59], + ["Kyrgyzstan", 5.98, 2.12, -3.32, -0.95, -0.74, 0.2, -0.36, 0.72, 0.54, 0.48, 0.13, -0.15, -0.32, 0.49, -0.29, -0.99, 0.03, -0.17, 1.56, 1.09, 0.26, 0.1, 0.88, 0.88, -0.11, 1.8, 3.54, 2.82, 2.64, 1.01, 2.86, 1.84, 2.84, 3.44, 3.84, 3.31, 2.43, 2.25, 2.94, 2.64, 2.29, 2.97, 1.86, 2.92, 3.66], + ["Laos", 25.89, 0.68, -1.89, 0.11, 0.11, 7.11, 7.11, -1.86, 0.95, 0.56, -0.94, 0.96, 1.01, 1.01, 1.01, 1.01, 1.01, 1.01, 1.01, 1.01, 1.01, 2.93, 2.93, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 1.54, 1.18, 0.69, 1.29, 1, 0.29, 0.86, 1.26, 0.28, 1.56, 1.27, 1.23, 1.59, 1.76], + ["Lebanon", 18.93, 0.52, -0.37, -0.26, -3.99, 0.69, 1.78, 1.37, -0.04, -1.32, -2.48, 1.7, 1.34, 2.04, 6.72, 8.87, 8.87, 8.87, 8.87, 4.92, 4.38, 2.46, 3.64, 0.26, 0.72, -0.1, 1.33, 0.92, 0.67, 1.16, 0.46, 1.16, -3.93, 0.02, 0.21, 0.28, 1.6, 0.99, 1.74, 0.63, 1.3, 1.32, 1.04, 1.84, 2.37], + ["Malaysia", 27.4, -0.19, -0.53, -0.49, -0.47, -0.19, 0.04, 0.02, 0.29, 0.03, 0.24, 0.39, -0.34, -0.02, 0.02, 0.28, 0.14, -0.1, 0.26, 0.21, 0.14, 0.07, 0.14, 0.22, 0.14, 0.46, 1.02, 0.17, 0.33, 0.41, 0.64, 0.41, 0.4, 0.39, 0.38, 0.31, 0.13, 0.39, 0.58, 0.35, 0.47, 0.86, -0.42, 0.94, 1.07], + ["Mongolia", -0.23, 1.04, -1.12, 1.12, -1.46, -1.56, 1.74, 1.64, 0.31, 0.17, 2, -2.59, -1.07, -1.11, -0.17, -0.34, -0.3, 0.68, 0.79, -0.14, -3.86, -0.03, -0.01, 0.48, -0.78, 1.16, 1.52, 1.68, 0.52, 1.12, 1.18, 0.24, 1.14, -0.86, 0.8, 2.32, 1.18, 0.44, 0.2, -0.26, -0.86, 0.41, 0.96, 1.51, 0.51], + ["Nepal", 17.82, 0.06, 0.08, -0.06, -1.51, -0.32, -0.13, 0.81, 0.04, -0.04, 0.33, 0.78, 0.01, 0.47, 0.12, 0.26, 0.2, 0.43, 0.39, -0.29, 0.16, 1.69, 0.39, 0.39, 2.21, -1.18, 2.93, 2.59, -0.13, -1.07, -0.02, 6.07, 4.28, 0.43, 0.43, 4.98, 5.73, 5.73, 5.73, 5.73, 3.63, -4.62, 2.22, 2.13, 2.67], + ["Oman", 25.27, 4.23, 4.23, 4.23, 4.23, 4.23, 0.56, 3.73, -4.27, 2.48, 0.6, -0.91, 0.46, -1.18, -1.01, 3.12, 2.73, 1.04, 1.77, 0.44, -1.57, 2.23, 1.92, 1.34, 0.2, 1.29, 2.28, 0.01, 1.42, 0.63, -1.12, 2.27, 1.88, 1.91, 2.68, 2.18, 1.68, 3.67, 3.64, 2.48, 2.82, 3.09, 2.02, 2.81, 2.74], + ["Pakistan", 22.13, -3.44, 2.88, 1.14, 0.08, 0.15, -0.63, 0.64, 0.38, 0.64, -1.41, -0.18, 0.97, 1.24, -0.38, -1.08, -2.81, 0.51, 1.68, 0.6, -0.94, 1.14, 0.26, 1.24, 0.31, 0.06, 2.53, 3.18, -0.65, 0.92, 0.02, 5.79, 3.63, -0.4, 1.08, 0.98, 0.98, 0.94, 1.69, 1.4, 0.58, -4.67, 1.16, 0.94, -2.29], + ["Philippines", 27.06, 0.3, -0.04, 0.11, -0.04, 0.31, 0.26, -0.02, -0.3, -0.25, -0.06, 0.22, -0.03, -0.25, -0.24, 0.34, 0.26, 0.03, 0.24, -0.02, 0.06, 0.14, 0.02, -0.23, -0.08, -0.09, 0.72, -0.16, 0.15, 0.15, 0.16, 0.01, -0.22, -0.09, 0.29, 0.14, -0.08, -0.04, 0.33, -0.31, 0.04, 0.08, -0.07, 0.06, 0.53], + ["Saudi Arabia", 23.51, -0.09, 0.42, -0.72, 0.48, -1.51, 0.21, 1.17, 0.57, 0.49, -1.05, -0.01, 0.54, 1.22, 0.99, 1.12, 1.26, 0.64, 0.96, 1.19, -0.49, 1.34, 1.54, 1.13, 1.61, 0.99, 2.15, 1.94, 1.59, 1.86, 1.81, 2.07, 1.7, 1.52, 2.11, 2.05, 1.92, 2.03, 2.83, 1.97, 2.36, -1.03, 5.43, 3.82, 2.27], + ["Syria", 18.33, 0.93, -1.56, -0.47, -0.18, 0.12, 0.38, 0.63, -1.04, 0.63, 0.26, 0.31, 0.16, -0.09, 0.21, 0.02, 0.65, 1.54, -0.39, -0.09, -1.18, -0.42, 0.89, 0.23, 0.62, 0.27, 1.86, 0.56, 0.58, 0.69, 0.68, 1.87, 0.09, 1.46, 1.84, -0.73, 0.88, -0.11, 3.17, 0.68, 1.51, 3.43, -0.6, 3.13, 1.96], + ["Thailand", 27.27, 0.03, -0.43, -0.27, -0.44, 0.01, 0.19, 0.5, 0.4, -0.16, 0.01, 0.21, -0.74, 0.04, 0.01, 0.57, 0.28, 0.32, 0.63, 0.68, 0.47, 0.37, 0.44, 0.58, 0.29, 0.72, 1.37, 0.27, 0.38, 0.73, 0.84, 0.67, 0.67, 0.72, 0.79, 0.65, 0.39, 0.72, 1.38, 0.34, 1.22, 0.98, 1.01, 1.4, 1.58], + ["Türkiye", 13.63, -0.26, -0.89, -2.68, 0.54, 1.04, 0.79, 0.99, 0.63, 1.4, 0.29, -0.52, -0.06, 0.14, 0.09, -0.4, 0.04, 0.33, 0.47, 0.24, -0.87, -0.33, 1.29, 0.48, 0.77, -0.2, 1.19, 1.27, 0.31, 1.7, 0.68, 1.49, 0.59, 0.38, 0.91, 1.87, 1.12, 1.49, 2.94, 0.57, 1.61, 2.14, 2.77, 2.43, -3.67], + ["Turkmenistan", 16.18, 1.9, -2.76, 0.29, -0.89, 0.08, -0.49, 0.56, 1.3, 0.68, -0.73, 0.08, -0.57, 0.99, 0.43, -0.29, -0.23, 0.8, 1.74, 0.88, 0.38, 0.11, 0.9, 1.53, 0.54, 1.31, 1.78, 2.12, 2.05, 2.49, 2.33, 2.06, 2.53, 3.4, 2.97, 1.17, 1.55, 2.25, 2.82, 1.82, 2.37, 2.61, 1.69, 3.1, 3.21], + ["United Arab Emirates", 27.37, 0, 0, 0, 0, -4.97, 0.22, 5.47, -0.12, 1.13, -0.57, -0.39, -0.66, -0.07, 0.18, -0.23, 0.26, -0.56, 0.42, -0.54, -0.13, 0.44, 1.15, 0.02, 0.89, 0.13, 2.84, 2.95, -1, 0.54, 1.23, 1.16, 2.54, 2.19, 1.71, -0.89, 1.11, 1.92, 1.25, 1.82, 2.08, 0.71, 1.69, 1.51, 2.39], + ["Vietnam", 25.36, 1.97, -0.97, 0.52, -0.05, 0.17, 0.38, -2.68, -2.68, -2.68, 1.51, 0.83, 1.3, 0.97, 0.99, 1.99, 1.77, 0.93, 1.23, 1.28, 0.19, 0.54, 0.48, 0.26, 0.08, 0.12, 1.03, 0.22, 0.12, 0.24, 0.42, 0.73, 0.05, 0.11, 0.53, 0.24, -0.14, 0.41, 0.76, -0.47, 0.45, 0.29, 0.31, -1.95, 1.08] + ], + "OCEANIA": [ + ["Australia", 18.38, 0.36, -0.34, -0.14, -0.48, -0.08, -0.34, 0.3, 0.57, 0.12, -0.11, 0.1, -0.62, -0.21, -0.44, -0.13, 0.56, -0.31, -0.26, -0.18, -0.66, -0.38, -0.44, -0.61, -0.59, -0.35, -0.11, -0.29, -0.29, -0.21, 0.19, 0.11, -0.02, 0.28, -0.06, 0.26, -0.21, 0.41, 0.01, -0.18, -0.18, 0.56, 0.48, 0.27, 0.41], + ["Fiji", 26.11, 0, 0, 0, 1.39, 1.39, 1.39, -1.22, 0.79, -0.77, -0.77, -0.77, 1.39, 1.39, 1.39, -1.72, 1.27, -0.96, -0.66, -0.39, 0.97, -1.45, -1.12, -0.58, -0.54, -0.82, 0.27, 0.12, 0.58, 0.17, 0.71, 0.07, 0.19, 0.21, 0.11, 0.51, 0.04, -0.41, 0.42, 0.42, 0.18, 0.38, 0.19, -0.02, 0.45], + ["French Polynesia", 25.11, 0, 0, 0, 1.14, 1.14, 1.14, -0.19, 0.03, -0.3, -0.33, -0.19, -0.15, -0.01, -0.06, -0.08, 0.13, -0.04, 0.11, -0.06, 0.26, 0.09, -0.02, 0.27, -0.05, 0.06, 0.23, 0.34, 0.24, 0.22, 0.55, 0.36, 0.28, 0.19, 0.48, 0.32, 0.07, 0.51, 0.29, 0.22, -0.09, 0.01, -0.05, 0.37, 0.45], + ["New Zealand", 12.39, 0.27, 0.47, 0.43, -0.27, -0.31, 0.44, -0.16, -0.18, 0.08, -0.28, -0.36, 0.32, 0.29, 0.27, 0.35, 0.41, 0.63, 0.57, -0.2, -0.59, -0.37, -0.71, 0.26, 0.28, -0.06, 0.96, 0.91, 0.52, 0.65, 0.69, 0.47, 0.04, 0.84, 0.01, 0.26, 0.34, -0.26, 0.53, 0.21, 0.62, 1.62, 0.79, 0.37, 0.64], + ["Tuvalu", 26.37, 0, 0, 0, 0, 0, 0, -0.92, -1.87, -0.87, 1.73, 1.49, 1.63, 1.85, 2.03, 1.65, 1.62, 1.57, 1.94, 2.03, 1.86, 1.77, 2.3, 1.86, 1.52, 1.52, 1.54, 1.73, 2.09, 2.23, 2.33, 2.38, 2.21, 2.32, 2.35, 2.23, 1.86, 2.23, 2.03, 2.12, 1.77, 2.38, 2.34, 2.36, 2.64], + ] +} + +// Modify defaults +root.numberFormatter.set("numberFormat", "+#.0°C|#.0°C|0.0°C"); + +var startYear = 1973; +var endYear = 2016; +var currentYear = 1995; + +var div = document.getElementById("chartdiv"); + +var colorSet = am5.ColorSet.new(root, {}); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/radar-chart/ +var chart = root.container.children.push(am5radar.RadarChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + innerRadius: am5.percent(40), + radius: am5.percent(65), + startAngle: 270 - 170, + endAngle: 270 + 170 +})); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Cursor +var cursor = chart.set("cursor", am5radar.RadarCursor.new(root, { + behavior: "zoomX", + radius: am5.percent(40), + innerRadius: -25 +})); +cursor.lineY.set("visible", false); + + +// Create axes and their renderers +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Adding_axes +var xRenderer = am5radar.AxisRendererCircular.new(root, { + minGridDistance: 10, + minorGridEnabled: true +}); + +xRenderer.labels.template.setAll({ + radius: 10, + textType: "radial", + centerY: am5.p50 +}); + +var yRenderer = am5radar.AxisRendererRadial.new(root, { + axisAngle: 90 +}); + +yRenderer.labels.template.setAll({ + centerX: am5.p50 +}); + +var categoryAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0, + categoryField: "country", + renderer: xRenderer +})); + +var valueAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + min: -3, + max: 6, + extraMax: 0.1, + renderer: yRenderer +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Adding_series +var series = chart.series.push(am5radar.RadarColumnSeries.new(root, { + calculateAggregates: true, + name: "Series", + xAxis: categoryAxis, + yAxis: valueAxis, + valueYField: "value" + currentYear, + categoryXField: "country", + tooltip: am5.Tooltip.new(root, { + labelText: "{categoryX}: {valueY}" + }) +})); + +series.columns.template.set("strokeOpacity", 0); + +// Set up heat rules +// https://www.amcharts.com/docs/v5/concepts/settings/heat-rules/ +series.set("heatRules", [{ + target: series.columns.template, + key: "fill", + min: am5.color(0x673AB7), + max: am5.color(0xF44336), + dataField: "valueY" +}]); + +// Add scrollbars +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { orientation: "horizontal" })); +chart.set("scrollbarY", am5.Scrollbar.new(root, { orientation: "vertical" })); + +// Add year label +var yearLabel = chart.radarContainer.children.push(am5.Label.new(root, { + fontSize: "2em", + text: currentYear.toString(), + centerX: am5.p50, + centerY: am5.p50, + fill: am5.color(0x673AB7) +})); + + +// Generate and set data +// https://www.amcharts.com/docs/v5/charts/radar-chart/#Setting_data +var data = generateRadarData(); +series.data.setAll(data); +categoryAxis.data.setAll(data); + +series.appear(1000); +chart.appear(1000, 100); + +function generateRadarData() { + var data = []; + var i = 0; + for (var continent in temperatures) { + var continentData = temperatures[continent]; + + continentData.forEach(function(country) { + var rawDataItem = { "country": country[0] } + + for (var y = 2; y < country.length; y++) { + rawDataItem["value" + (startYear + y - 2)] = country[y]; + } + + data.push(rawDataItem); + }); + + createRange(continent, continentData, i); + i++; + + } + return data; +} + + +function createRange(name, continentData, index) { + var axisRange = categoryAxis.createAxisRange(categoryAxis.makeDataItem({})); + axisRange.get("label").setAll({ text: name }); + // first country + axisRange.set("category", continentData[0][0]); + // last country + axisRange.set("endCategory", continentData[continentData.length - 1][0]); + + // every 3rd color for a bigger contrast + var fill = axisRange.get("axisFill"); + fill.setAll({ + toggleKey: "active", + cursorOverStyle: "pointer", + fill: colorSet.getIndex(index * 3), + visible: true, + innerRadius: -25 + }); + axisRange.get("grid").set("visible", false); + + var label = axisRange.get("label"); + label.setAll({ + fill: am5.color(0xffffff), + textType: "circular", + radius: -16 + }); + + fill.events.on("click", function(event) { + var dataItem = event.target.dataItem; + if (event.target.get("active")) { + categoryAxis.zoom(0, 1); + } + else { + categoryAxis.zoomToCategories(dataItem.get("category"), dataItem.get("endCategory")); + } + }); +} + + +// Create controls +var container = chart.children.push(am5.Container.new(root, { + y: am5.percent(95), + centerX: am5.p50, + x: am5.p50, + width: am5.percent(80), + layout: root.horizontalLayout +})); + +var playButton = container.children.push(am5.Button.new(root, { + themeTags: ["play"], + centerY: am5.p50, + marginRight: 15, + icon: am5.Graphics.new(root, { + themeTags: ["icon"] + }) +})); + +playButton.events.on("click", function () { + if (playButton.get("active")) { + slider.set("start", slider.get("start") + 0.0001); + } + else { + slider.animate({ + key: "start", + to: 1, + duration: 15000 * (1 - slider.get("start")) + }); + } +}) + +var slider = container.children.push(am5.Slider.new(root, { + orientation: "horizontal", + start: 0.5, + centerY: am5.p50 +})); + +slider.on("start", function (start) { + if (start === 1) { + playButton.set("active", false); + } +}); + +slider.events.on("rangechanged", function () { + updateRadarData(startYear + Math.round(slider.get("start", 0) * (endYear - startYear))); +}); + +function updateRadarData(year) { + if (currentYear != year) { + currentYear = year; + yearLabel.set("text", currentYear.toString()); + am5.array.each(series.dataItems, function (dataItem) { + var newValue = dataItem.dataContext["value" + year]; + dataItem.set("valueY", newValue); + dataItem.animate({ key: "valueYWorking", to: newValue, duration: 500 }); + }); + } +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-funnel/README.md b/src/main/resources/static/js/amcharts5/examples/sliced-funnel/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-funnel/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-funnel/index.css b/src/main/resources/static/js/amcharts5/examples/sliced-funnel/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-funnel/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-funnel/index.html b/src/main/resources/static/js/amcharts5/examples/sliced-funnel/index.html new file mode 100644 index 00000000..4bdb0263 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-funnel/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - sliced-funnel + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-funnel/index.js b/src/main/resources/static/js/amcharts5/examples/sliced-funnel/index.js new file mode 100644 index 00000000..e9921bb2 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-funnel/index.js @@ -0,0 +1,62 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/ +var chart = root.container.children.push(am5percent.SlicedChart.new(root, { + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Series +var series = chart.series.push(am5percent.FunnelSeries.new(root, { + alignLabels: false, + orientation: "vertical", + valueField: "value", + categoryField: "category" +})); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Setting_data +series.data.setAll([ + { value: 10, category: "One" }, + { value: 9, category: "Two" }, + { value: 6, category: "Three" }, + { value: 5, category: "Four" }, + { value: 4, category: "Five" }, + { value: 3, category: "Six" }, + { value: 1, category: "Seven" } +]); + + +// Play initial series animation +// https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series +series.appear(); + + +// Create legend +// https://www.amcharts.com/docs/v5/charts/percent-charts/legend-percent-series/ +var legend = chart.children.push(am5.Legend.new(root, { + centerX: am5.p50, + x: am5.p50, + marginTop: 15, + marginBottom: 15 +})); + +legend.data.setAll(series.dataItems); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/README.md b/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/index.css b/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/index.html b/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/index.html new file mode 100644 index 00000000..2c791e78 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - sliced-pictorial-stacked + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/index.js b/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/index.js new file mode 100644 index 00000000..c6fe29dc --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-pictorial-stacked/index.js @@ -0,0 +1,49 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/ +var chart = root.container.children.push(am5percent.SlicedChart.new(root, { + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Series +var series = chart.series.push(am5percent.PictorialStackedSeries.new(root, { + alignLabels: true, + orientation: "vertical", + valueField: "value", + categoryField: "category", + svgPath: "M53.5,476c0,14,6.833,21,20.5,21s20.5-7,20.5-21V287h21v189c0,14,6.834,21,20.5,21 c13.667,0,20.5-7,20.5-21V154h10v116c0,7.334,2.5,12.667,7.5,16s10.167,3.333,15.5,0s8-8.667,8-16V145c0-13.334-4.5-23.667-13.5-31 s-21.5-11-37.5-11h-82c-15.333,0-27.833,3.333-37.5,10s-14.5,17-14.5,31v133c0,6,2.667,10.333,8,13s10.5,2.667,15.5,0s7.5-7,7.5-13 V154h10V476 M61.5,42.5c0,11.667,4.167,21.667,12.5,30S92.333,85,104,85s21.667-4.167,30-12.5S146.5,54,146.5,42 c0-11.335-4.167-21.168-12.5-29.5C125.667,4.167,115.667,0,104,0S82.333,4.167,74,12.5S61.5,30.833,61.5,42.5z" +})); + +series.labelsContainer.set("width", 100); +series.ticks.template.set("location", 0.6); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Setting_data +series.data.setAll([ + { value: 10, category: "One" }, + { value: 9, category: "Two" }, + { value: 6, category: "Three" }, + { value: 5, category: "Four" }, + { value: 4, category: "Five" }, + { value: 3, category: "Six" }, + { value: 1, category: "Seven" } +]); + + +// Play initial series animation +// https://www.amcharts.com/docs/v5/concepts/animations/#Animation_of_series +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/README.md b/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/index.css b/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/index.html b/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/index.html new file mode 100644 index 00000000..131013a3 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - sliced-pyramid + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/index.js b/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/index.js new file mode 100644 index 00000000..f2a07950 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/sliced-pyramid/index.js @@ -0,0 +1,57 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/ +var chart = root.container.children.push(am5percent.SlicedChart.new(root, { + layout: root.verticalLayout +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Series +var series = chart.series.push(am5percent.PyramidSeries.new(root, { + orientation: "vertical", + valueField: "value", + categoryField: "category" +})); + + +// Set data +// https://www.amcharts.com/docs/v5/charts/percent-charts/sliced-chart/#Setting_data +series.data.setAll([ + { value: 10, category: "One" }, + { value: 9, category: "Two" }, + { value: 6, category: "Three" }, + { value: 5, category: "Four" }, + { value: 4, category: "Five" }, + { value: 3, category: "Six" }, + { value: 3, category: "Seven" } +].reverse()); + + +// Create legend +// https://www.amcharts.com/docs/v5/charts/percent-charts/legend-percent-series/ +var legend = chart.children.push(am5.Legend.new(root, { + centerX: am5.percent(50), + x: am5.percent(50), + marginTop: 15, + marginBottom: 15 +})); + +legend.data.setAll(am5.array.copy(series.dataItems).reverse()); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation#Forcing_appearance_animation +series.appear(); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/README.md b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/AAPL_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/AAPL_day.js new file mode 100644 index 00000000..2ea8e06f --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/AAPL_day.js @@ -0,0 +1,255 @@ +window["AAPL_day"] = [ + {Date:1617192000000,Open:121.65,High:123.52,Low:121.15,Close:122.15,Volume:118323800}, + {Date:1617278400000,Open:123.66,High:124.18,Low:122.49,Close:123,Volume:75089100}, + {Date:1617624000000,Open:123.87,High:126.16,Low:123.07,Close:125.9,Volume:88651200}, + {Date:1617710400000,Open:126.5,High:127.13,Low:125.65,Close:126.21,Volume:80171300}, + {Date:1617796800000,Open:125.83,High:127.92,Low:125.14,Close:127.9,Volume:83466700}, + {Date:1617883200000,Open:128.95,High:130.39,Low:128.52,Close:130.36,Volume:88844600}, + {Date:1617969600000,Open:129.8,High:133.04,Low:129.47,Close:133,Volume:106686700}, + {Date:1618228800000,Open:132.52,High:132.85,Low:130.63,Close:131.24,Volume:91420000}, + {Date:1618315200000,Open:132.44,High:134.66,Low:131.93,Close:134.43,Volume:91266500}, + {Date:1618401600000,Open:134.94,High:135,Low:131.66,Close:132.03,Volume:87222800}, + {Date:1618488000000,Open:133.82,High:135,Low:133.64,Close:134.5,Volume:89347100}, + {Date:1618574400000,Open:134.3,High:134.67,Low:133.28,Close:134.16,Volume:84922400}, + {Date:1618833600000,Open:133.51,High:135.47,Low:133.34,Close:134.84,Volume:94264200}, + {Date:1618920000000,Open:135.02,High:135.53,Low:131.81,Close:133.11,Volume:94812300}, + {Date:1619006400000,Open:132.36,High:133.75,Low:131.3,Close:133.5,Volume:68847100}, + {Date:1619092800000,Open:133.04,High:134.15,Low:131.41,Close:131.94,Volume:84566500}, + {Date:1619179200000,Open:132.16,High:135.12,Low:132.16,Close:134.32,Volume:78657500}, + {Date:1619438400000,Open:134.83,High:135.06,Low:133.56,Close:134.72,Volume:66905100}, + {Date:1619524800000,Open:135.01,High:135.41,Low:134.11,Close:134.39,Volume:66015800}, + {Date:1619611200000,Open:134.31,High:135.02,Low:133.08,Close:133.58,Volume:107760100}, + {Date:1619697600000,Open:136.47,High:137.07,Low:132.45,Close:133.48,Volume:151101000}, + {Date:1619784000000,Open:131.78,High:133.56,Low:131.07,Close:131.46,Volume:109839500}, + {Date:1620043200000,Open:132.04,High:134.07,Low:131.83,Close:132.54,Volume:75135100}, + {Date:1620129600000,Open:131.19,High:131.49,Low:126.7,Close:127.85,Volume:137564700}, + {Date:1620216000000,Open:129.2,High:130.45,Low:127.97,Close:128.1,Volume:84000900}, + {Date:1620302400000,Open:127.89,High:129.75,Low:127.13,Close:129.74,Volume:78128300}, + {Date:1620388800000,Open:130.85,High:131.26,Low:129.48,Close:130.21,Volume:78973300}, + {Date:1620648000000,Open:129.41,High:129.54,Low:126.81,Close:126.85,Volume:88071200}, + {Date:1620734400000,Open:123.5,High:126.27,Low:122.77,Close:125.91,Volume:126142800}, + {Date:1620820800000,Open:123.4,High:124.64,Low:122.25,Close:122.77,Volume:112172300}, + {Date:1620907200000,Open:124.58,High:126.15,Low:124.26,Close:124.97,Volume:105861300}, + {Date:1620993600000,Open:126.25,High:127.89,Low:125.85,Close:127.45,Volume:81918000}, + {Date:1621252800000,Open:126.82,High:126.93,Low:125.17,Close:126.27,Volume:74244600}, + {Date:1621339200000,Open:126.56,High:126.99,Low:124.78,Close:124.85,Volume:63342900}, + {Date:1621425600000,Open:123.16,High:124.92,Low:122.86,Close:124.69,Volume:92612000}, + {Date:1621512000000,Open:125.23,High:127.72,Low:125.1,Close:127.31,Volume:76857100}, + {Date:1621598400000,Open:127.82,High:128,Low:125.21,Close:125.43,Volume:79295400}, + {Date:1621857600000,Open:126.01,High:127.94,Low:125.94,Close:127.1,Volume:63092900}, + {Date:1621944000000,Open:127.82,High:128.32,Low:126.32,Close:126.9,Volume:72009500}, + {Date:1622030400000,Open:126.96,High:127.39,Low:126.42,Close:126.85,Volume:56575900}, + {Date:1622116800000,Open:126.44,High:127.64,Low:125.08,Close:125.28,Volume:94625600}, + {Date:1622203200000,Open:125.57,High:125.8,Low:124.55,Close:124.61,Volume:71311100}, + {Date:1622548800000,Open:125.08,High:125.35,Low:123.94,Close:124.28,Volume:67637100}, + {Date:1622635200000,Open:124.28,High:125.24,Low:124.05,Close:125.06,Volume:59278900}, + {Date:1622721600000,Open:124.68,High:124.85,Low:123.13,Close:123.54,Volume:76229200}, + {Date:1622808000000,Open:124.07,High:126.16,Low:123.85,Close:125.89,Volume:75169300}, + {Date:1623067200000,Open:126.17,High:126.32,Low:124.83,Close:125.9,Volume:71057600}, + {Date:1623153600000,Open:126.6,High:128.46,Low:126.21,Close:126.74,Volume:74403800}, + {Date:1623240000000,Open:127.21,High:127.75,Low:126.52,Close:127.13,Volume:56877900}, + {Date:1623326400000,Open:127.02,High:128.19,Low:125.94,Close:126.11,Volume:71186400}, + {Date:1623412800000,Open:126.53,High:127.44,Low:126.1,Close:127.35,Volume:53522400}, + {Date:1623672000000,Open:127.82,High:130.54,Low:127.07,Close:130.48,Volume:96906500}, + {Date:1623758400000,Open:129.94,High:130.6,Low:129.39,Close:129.64,Volume:62746300}, + {Date:1623844800000,Open:130.37,High:130.89,Low:128.46,Close:130.15,Volume:91815000}, + {Date:1623931200000,Open:129.8,High:132.55,Low:129.65,Close:131.79,Volume:96721700}, + {Date:1624017600000,Open:130.71,High:131.51,Low:130.24,Close:130.46,Volume:108953300}, + {Date:1624276800000,Open:130.3,High:132.41,Low:129.21,Close:132.3,Volume:79663300}, + {Date:1624363200000,Open:132.13,High:134.08,Low:131.62,Close:133.98,Volume:74783600}, + {Date:1624449600000,Open:133.77,High:134.32,Low:133.23,Close:133.7,Volume:60214200}, + {Date:1624536000000,Open:134.45,High:134.64,Low:132.93,Close:133.41,Volume:68711000}, + {Date:1624622400000,Open:133.46,High:133.89,Low:132.81,Close:133.11,Volume:70783700}, + {Date:1624881600000,Open:133.41,High:135.25,Low:133.35,Close:134.78,Volume:62111300}, + {Date:1624968000000,Open:134.8,High:136.49,Low:134.35,Close:136.33,Volume:64556100}, + {Date:1625054400000,Open:136.17,High:137.41,Low:135.87,Close:136.96,Volume:63261400}, + {Date:1625140800000,Open:136.6,High:137.33,Low:135.76,Close:137.27,Volume:52485800}, + {Date:1625227200000,Open:137.9,High:140,Low:137.75,Close:139.96,Volume:78852600}, + {Date:1625572800000,Open:140.07,High:143.15,Low:140.07,Close:142.02,Volume:108181800}, + {Date:1625659200000,Open:143.54,High:144.89,Low:142.66,Close:144.57,Volume:104911600}, + {Date:1625745600000,Open:141.58,High:144.06,Low:140.67,Close:143.24,Volume:105575500}, + {Date:1625832000000,Open:142.75,High:145.65,Low:142.65,Close:145.11,Volume:99890800}, + {Date:1626091200000,Open:146.21,High:146.32,Low:144,Close:144.5,Volume:76299700}, + {Date:1626177600000,Open:144.03,High:147.46,Low:143.63,Close:145.64,Volume:100827100}, + {Date:1626264000000,Open:148.1,High:149.57,Low:147.68,Close:149.15,Volume:127050800}, + {Date:1626350400000,Open:149.24,High:150,Low:147.09,Close:148.48,Volume:106820300}, + {Date:1626436800000,Open:148.46,High:149.76,Low:145.88,Close:146.39,Volume:93251400}, + {Date:1626696000000,Open:143.75,High:144.07,Low:141.67,Close:142.45,Volume:121434600}, + {Date:1626782400000,Open:143.46,High:147.1,Low:142.96,Close:146.15,Volume:96350000}, + {Date:1626868800000,Open:145.53,High:146.13,Low:144.63,Close:145.4,Volume:74993500}, + {Date:1626955200000,Open:145.94,High:148.2,Low:145.81,Close:146.8,Volume:77338200}, + {Date:1627041600000,Open:147.55,High:148.72,Low:146.92,Close:148.56,Volume:71447400}, + {Date:1627300800000,Open:148.27,High:149.83,Low:147.7,Close:148.99,Volume:72434100}, + {Date:1627387200000,Open:149.12,High:149.21,Low:145.55,Close:146.77,Volume:104818600}, + {Date:1627473600000,Open:144.81,High:146.97,Low:142.54,Close:144.98,Volume:118931200}, + {Date:1627560000000,Open:144.69,High:146.55,Low:144.58,Close:145.64,Volume:56699500}, + {Date:1627646400000,Open:144.38,High:146.33,Low:144.11,Close:145.86,Volume:70440600}, + {Date:1627905600000,Open:146.36,High:146.95,Low:145.25,Close:145.52,Volume:62880000}, + {Date:1627992000000,Open:145.81,High:148.04,Low:145.18,Close:147.36,Volume:64786600}, + {Date:1628078400000,Open:147.27,High:147.79,Low:146.28,Close:146.95,Volume:56368300}, + {Date:1628164800000,Open:146.98,High:147.84,Low:146.17,Close:147.06,Volume:46397700}, + {Date:1628251200000,Open:146.35,High:147.11,Low:145.63,Close:146.14,Volume:54126800}, + {Date:1628510400000,Open:146.2,High:146.7,Low:145.52,Close:146.09,Volume:48908700}, + {Date:1628596800000,Open:146.44,High:147.71,Low:145.3,Close:145.6,Volume:69023100}, + {Date:1628683200000,Open:146.05,High:146.72,Low:145.53,Close:145.86,Volume:48493500}, + {Date:1628769600000,Open:146.19,High:149.05,Low:145.84,Close:148.89,Volume:72282600}, + {Date:1628856000000,Open:148.97,High:149.44,Low:148.27,Close:149.1,Volume:59375000}, + {Date:1629115200000,Open:148.54,High:151.19,Low:146.47,Close:151.12,Volume:103296000}, + {Date:1629201600000,Open:150.23,High:151.68,Low:149.09,Close:150.19,Volume:92229700}, + {Date:1629288000000,Open:149.8,High:150.72,Low:146.15,Close:146.36,Volume:86326000}, + {Date:1629374400000,Open:145.03,High:148,Low:144.5,Close:146.7,Volume:86960300}, + {Date:1629460800000,Open:147.44,High:148.5,Low:146.78,Close:148.19,Volume:60549600}, + {Date:1629720000000,Open:148.31,High:150.19,Low:147.89,Close:149.71,Volume:60131800}, + {Date:1629806400000,Open:149.45,High:150.86,Low:149.15,Close:149.62,Volume:48606400}, + {Date:1629892800000,Open:149.81,High:150.32,Low:147.8,Close:148.36,Volume:58991300}, + {Date:1629979200000,Open:148.35,High:149.12,Low:147.51,Close:147.54,Volume:48597200}, + {Date:1630065600000,Open:147.48,High:148.75,Low:146.83,Close:148.6,Volume:55802400}, + {Date:1630324800000,Open:149,High:153.49,Low:148.61,Close:153.12,Volume:90956700}, + {Date:1630411200000,Open:152.66,High:152.8,Low:151.29,Close:151.83,Volume:86453100}, + {Date:1630497600000,Open:152.83,High:154.98,Low:152.34,Close:152.51,Volume:80313700}, + {Date:1630584000000,Open:153.87,High:154.72,Low:152.4,Close:153.65,Volume:71115500}, + {Date:1630670400000,Open:153.76,High:154.63,Low:153.09,Close:154.3,Volume:57808700}, + {Date:1631016000000,Open:154.97,High:157.26,Low:154.39,Close:156.69,Volume:82278300}, + {Date:1631102400000,Open:156.98,High:157.04,Low:153.98,Close:155.11,Volume:74420200}, + {Date:1631188800000,Open:155.49,High:156.11,Low:153.95,Close:154.07,Volume:57305700}, + {Date:1631275200000,Open:155,High:155.48,Low:148.7,Close:148.97,Volume:140893200}, + {Date:1631534400000,Open:150.63,High:151.42,Low:148.75,Close:149.55,Volume:102404300}, + {Date:1631620800000,Open:150.35,High:151.07,Low:146.91,Close:148.12,Volume:109296300}, + {Date:1631707200000,Open:148.56,High:149.44,Low:146.37,Close:149.03,Volume:83281300}, + {Date:1631793600000,Open:148.44,High:148.97,Low:147.22,Close:148.79,Volume:68034100}, + {Date:1631880000000,Open:148.82,High:148.82,Low:145.76,Close:146.06,Volume:129868800}, + {Date:1632139200000,Open:143.8,High:144.84,Low:141.27,Close:142.94,Volume:123478900}, + {Date:1632225600000,Open:143.93,High:144.6,Low:142.78,Close:143.43,Volume:75834000}, + {Date:1632312000000,Open:144.45,High:146.43,Low:143.7,Close:145.85,Volume:76404300}, + {Date:1632398400000,Open:146.65,High:147.08,Low:145.64,Close:146.83,Volume:64838200}, + {Date:1632484800000,Open:145.66,High:147.47,Low:145.56,Close:146.92,Volume:53477900}, + {Date:1632744000000,Open:145.47,High:145.96,Low:143.82,Close:145.37,Volume:74150700}, + {Date:1632830400000,Open:143.25,High:144.75,Low:141.69,Close:141.91,Volume:108972300}, + {Date:1632916800000,Open:142.47,High:144.45,Low:142.03,Close:142.83,Volume:74602000}, + {Date:1633003200000,Open:143.66,High:144.38,Low:141.28,Close:141.5,Volume:89056700}, + {Date:1633089600000,Open:141.9,High:142.92,Low:139.11,Close:142.65,Volume:94639600}, + {Date:1633348800000,Open:141.76,High:142.21,Low:138.27,Close:139.14,Volume:98322000}, + {Date:1633435200000,Open:139.49,High:142.24,Low:139.36,Close:141.11,Volume:80861100}, + {Date:1633521600000,Open:139.47,High:142.15,Low:138.37,Close:142,Volume:83221100}, + {Date:1633608000000,Open:143.06,High:144.22,Low:142.72,Close:143.29,Volume:61732700}, + {Date:1633694400000,Open:144.03,High:144.18,Low:142.56,Close:142.9,Volume:58773200}, + {Date:1633953600000,Open:142.27,High:144.81,Low:141.81,Close:142.81,Volume:64452200}, + {Date:1634040000000,Open:143.23,High:143.25,Low:141.04,Close:141.51,Volume:73035900}, + {Date:1634126400000,Open:141.24,High:141.4,Low:139.2,Close:140.91,Volume:78762700}, + {Date:1634212800000,Open:142.11,High:143.88,Low:141.51,Close:143.76,Volume:69907100}, + {Date:1634299200000,Open:143.77,High:144.9,Low:143.51,Close:144.84,Volume:67940300}, + {Date:1634558400000,Open:143.45,High:146.84,Low:143.16,Close:146.55,Volume:85589200}, + {Date:1634644800000,Open:147.01,High:149.17,Low:146.55,Close:148.76,Volume:76378900}, + {Date:1634731200000,Open:148.7,High:149.75,Low:148.12,Close:149.26,Volume:58418800}, + {Date:1634817600000,Open:148.81,High:149.64,Low:147.87,Close:149.48,Volume:61421000}, + {Date:1634904000000,Open:149.69,High:150.18,Low:148.64,Close:148.69,Volume:58883400}, + {Date:1635163200000,Open:148.68,High:149.37,Low:147.62,Close:148.64,Volume:50720600}, + {Date:1635249600000,Open:149.33,High:150.84,Low:149.01,Close:149.32,Volume:60893400}, + {Date:1635336000000,Open:149.36,High:149.73,Low:148.49,Close:148.85,Volume:56094900}, + {Date:1635422400000,Open:149.82,High:153.17,Low:149.72,Close:152.57,Volume:100077900}, + {Date:1635508800000,Open:147.22,High:149.94,Low:146.41,Close:149.8,Volume:124953200}, + {Date:1635768000000,Open:148.99,High:149.7,Low:147.8,Close:148.96,Volume:74588300}, + {Date:1635854400000,Open:148.66,High:151.57,Low:148.65,Close:150.02,Volume:69122000}, + {Date:1635940800000,Open:150.39,High:151.97,Low:149.82,Close:151.49,Volume:54511500}, + {Date:1636027200000,Open:151.58,High:152.43,Low:150.64,Close:150.96,Volume:60394600}, + {Date:1636113600000,Open:151.89,High:152.2,Low:150.06,Close:151.28,Volume:65463900}, + {Date:1636372800000,Open:151.41,High:151.57,Low:150.16,Close:150.44,Volume:55020900}, + {Date:1636459200000,Open:150.2,High:151.43,Low:150.06,Close:150.81,Volume:56787900}, + {Date:1636545600000,Open:150.02,High:150.13,Low:147.85,Close:147.92,Volume:65187100}, + {Date:1636632000000,Open:148.96,High:149.43,Low:147.68,Close:147.87,Volume:41000000}, + {Date:1636718400000,Open:148.43,High:150.4,Low:147.48,Close:149.99,Volume:63804000}, + {Date:1636977600000,Open:150.37,High:151.88,Low:149.43,Close:150,Volume:59222800}, + {Date:1637064000000,Open:149.94,High:151.49,Low:149.34,Close:151,Volume:59256200}, + {Date:1637150400000,Open:151,High:155,Low:150.99,Close:153.49,Volume:88807000}, + {Date:1637236800000,Open:153.71,High:158.67,Low:153.05,Close:157.87,Volume:137827700}, + {Date:1637323200000,Open:157.65,High:161.02,Low:156.53,Close:160.55,Volume:117305600}, + {Date:1637582400000,Open:161.68,High:165.7,Low:161,Close:161.02,Volume:117467900}, + {Date:1637668800000,Open:161.12,High:161.8,Low:159.06,Close:161.41,Volume:96041900}, + {Date:1637755200000,Open:160.75,High:162.14,Low:159.64,Close:161.94,Volume:69463600}, + {Date:1637928000000,Open:159.57,High:160.45,Low:156.36,Close:156.81,Volume:76959800}, + {Date:1638187200000,Open:159.37,High:161.19,Low:158.79,Close:160.24,Volume:88748200}, + {Date:1638273600000,Open:159.99,High:165.52,Low:159.92,Close:165.3,Volume:174048100}, + {Date:1638360000000,Open:167.48,High:170.3,Low:164.53,Close:164.77,Volume:152052500}, + {Date:1638446400000,Open:158.74,High:164.2,Low:157.8,Close:163.76,Volume:136739200}, + {Date:1638532800000,Open:164.02,High:164.96,Low:159.72,Close:161.84,Volume:118023100}, + {Date:1638792000000,Open:164.29,High:167.88,Low:164.28,Close:165.32,Volume:107497000}, + {Date:1638878400000,Open:169.08,High:171.58,Low:168.34,Close:171.18,Volume:120405400}, + {Date:1638964800000,Open:172.13,High:175.96,Low:170.7,Close:175.08,Volume:116998900}, + {Date:1639051200000,Open:174.91,High:176.75,Low:173.92,Close:174.56,Volume:108923700}, + {Date:1639137600000,Open:175.21,High:179.63,Low:174.69,Close:179.45,Volume:115402700}, + {Date:1639396800000,Open:181.12,High:182.13,Low:175.53,Close:175.74,Volume:153237000}, + {Date:1639483200000,Open:175.25,High:177.74,Low:172.21,Close:174.33,Volume:139380400}, + {Date:1639569600000,Open:175.11,High:179.5,Low:172.31,Close:179.3,Volume:131063300}, + {Date:1639656000000,Open:179.28,High:181.14,Low:170.75,Close:172.26,Volume:150185800}, + {Date:1639742400000,Open:169.93,High:173.47,Low:169.69,Close:171.14,Volume:195432700}, + {Date:1640001600000,Open:168.28,High:170.58,Low:167.46,Close:169.75,Volume:107499100}, + {Date:1640088000000,Open:171.56,High:173.2,Low:169.12,Close:172.99,Volume:91185900}, + {Date:1640174400000,Open:173.04,High:175.86,Low:172.15,Close:175.64,Volume:92135300}, + {Date:1640260800000,Open:175.85,High:176.85,Low:175.27,Close:176.28,Volume:68356600}, + {Date:1640606400000,Open:177.09,High:180.42,Low:177.07,Close:180.33,Volume:74919600}, + {Date:1640692800000,Open:180.16,High:181.33,Low:178.53,Close:179.29,Volume:79144300}, + {Date:1640779200000,Open:179.33,High:180.63,Low:178.14,Close:179.38,Volume:62348900}, + {Date:1640865600000,Open:179.47,High:180.57,Low:178.09,Close:178.2,Volume:59773000}, + {Date:1640952000000,Open:178.09,High:179.23,Low:177.26,Close:177.57,Volume:64062300}, + {Date:1641211200000,Open:177.83,High:182.88,Low:177.71,Close:182.01,Volume:104487900}, + {Date:1641297600000,Open:182.63,High:182.94,Low:179.12,Close:179.7,Volume:99310400}, + {Date:1641384000000,Open:179.61,High:180.17,Low:174.64,Close:174.92,Volume:94537600}, + {Date:1641470400000,Open:172.7,High:175.3,Low:171.64,Close:172,Volume:96904000}, + {Date:1641556800000,Open:172.89,High:174.14,Low:171.03,Close:172.17,Volume:86709100}, + {Date:1641816000000,Open:169.08,High:172.5,Low:168.17,Close:172.19,Volume:106765600}, + {Date:1641902400000,Open:172.32,High:175.18,Low:170.82,Close:175.08,Volume:76138300}, + {Date:1641988800000,Open:176.12,High:177.18,Low:174.82,Close:175.53,Volume:74805200}, + {Date:1642075200000,Open:175.78,High:176.62,Low:171.79,Close:172.19,Volume:84505800}, + {Date:1642161600000,Open:171.34,High:173.78,Low:171.09,Close:173.07,Volume:80440800}, + {Date:1642507200000,Open:171.51,High:172.54,Low:169.41,Close:169.8,Volume:90956700}, + {Date:1642593600000,Open:170,High:171.08,Low:165.94,Close:166.23,Volume:94815000}, + {Date:1642680000000,Open:166.98,High:169.68,Low:164.18,Close:164.51,Volume:91420500}, + {Date:1642766400000,Open:164.42,High:166.33,Low:162.3,Close:162.41,Volume:122848900}, + {Date:1643025600000,Open:160.02,High:162.3,Low:154.7,Close:161.62,Volume:162294600}, + {Date:1643112000000,Open:158.98,High:162.76,Low:157.02,Close:159.78,Volume:115798400}, + {Date:1643198400000,Open:163.5,High:164.39,Low:157.82,Close:159.69,Volume:108275300}, + {Date:1643284800000,Open:162.45,High:163.84,Low:158.28,Close:159.22,Volume:121954600}, + {Date:1643371200000,Open:165.71,High:170.35,Low:162.8,Close:170.33,Volume:179935700}, + {Date:1643630400000,Open:170.16,High:175,Low:169.51,Close:174.78,Volume:115541600}, + {Date:1643716800000,Open:174.01,High:174.84,Low:172.31,Close:174.61,Volume:86213900}, + {Date:1643803200000,Open:174.75,High:175.88,Low:173.33,Close:175.84,Volume:84914300}, + {Date:1643889600000,Open:174.48,High:176.24,Low:172.12,Close:172.9,Volume:89418100}, + {Date:1643976000000,Open:171.68,High:174.1,Low:170.68,Close:172.39,Volume:82465400}, + {Date:1644235200000,Open:172.86,High:173.95,Low:170.95,Close:171.66,Volume:77251200}, + {Date:1644321600000,Open:171.73,High:175.35,Low:171.43,Close:174.83,Volume:74829200}, + {Date:1644408000000,Open:176.05,High:176.65,Low:174.9,Close:176.28,Volume:71285000}, + {Date:1644494400000,Open:174.14,High:175.48,Low:171.55,Close:172.12,Volume:90865900}, + {Date:1644580800000,Open:172.33,High:173.08,Low:168.04,Close:168.64,Volume:98670700}, + {Date:1644840000000,Open:167.37,High:169.58,Low:166.56,Close:168.88,Volume:86185500}, + {Date:1644926400000,Open:170.97,High:172.95,Low:170.25,Close:172.79,Volume:62527400}, + {Date:1645012800000,Open:171.85,High:173.34,Low:170.05,Close:172.55,Volume:61177400}, + {Date:1645099200000,Open:171.03,High:171.91,Low:168.47,Close:168.88,Volume:69589300}, + {Date:1645185600000,Open:169.82,High:170.54,Low:166.19,Close:167.3,Volume:82772700}, + {Date:1645531200000,Open:164.98,High:166.69,Low:162.15,Close:164.32,Volume:91162800}, + {Date:1645617600000,Open:165.54,High:166.15,Low:159.75,Close:160.07,Volume:90009200}, + {Date:1645704000000,Open:152.58,High:162.85,Low:152,Close:162.74,Volume:141147500}, + {Date:1645790400000,Open:163.84,High:165.12,Low:160.87,Close:164.85,Volume:91974200}, + {Date:1646049600000,Open:163.06,High:165.42,Low:162.43,Close:165.12,Volume:94869100}, + {Date:1646136000000,Open:164.7,High:166.6,Low:161.97,Close:163.2,Volume:83474400}, + {Date:1646222400000,Open:164.39,High:167.36,Low:162.95,Close:166.56,Volume:79724800}, + {Date:1646308800000,Open:168.47,High:168.91,Low:165.55,Close:166.23,Volume:76678400}, + {Date:1646395200000,Open:164.49,High:165.55,Low:162.1,Close:163.17,Volume:83737200}, + {Date:1646654400000,Open:163.36,High:165.02,Low:159.04,Close:159.3,Volume:96418800}, + {Date:1646740800000,Open:158.82,High:162.88,Low:155.8,Close:157.44,Volume:131148300}, + {Date:1646827200000,Open:161.48,High:163.41,Low:159.41,Close:162.95,Volume:91454900}, + {Date:1646913600000,Open:160.2,High:160.39,Low:155.98,Close:158.52,Volume:105342000}, + {Date:1647000000000,Open:158.93,High:159.28,Low:154.5,Close:154.73,Volume:96836300}, + {Date:1647259200000,Open:151.45,High:154.12,Low:150.1,Close:150.62,Volume:108732100}, + {Date:1647345600000,Open:150.9,High:155.57,Low:150.38,Close:155.09,Volume:92964300}, + {Date:1647432000000,Open:157.05,High:160,Low:154.46,Close:159.59,Volume:102300200}, + {Date:1647518400000,Open:158.61,High:161,Low:157.63,Close:160.62,Volume:75615400}, + {Date:1647604800000,Open:160.51,High:164.48,Low:159.76,Close:163.98,Volume:123351200}, + {Date:1647864000000,Open:163.51,High:166.35,Low:163.01,Close:165.38,Volume:95811400}, + {Date:1647950400000,Open:165.51,High:169.42,Low:164.91,Close:168.82,Volume:81532000}, + {Date:1648036800000,Open:167.99,High:172.64,Low:167.65,Close:170.21,Volume:98062700}, + {Date:1648123200000,Open:171.06,High:174.14,Low:170.21,Close:174.07,Volume:90131400}, + {Date:1648209600000,Open:173.88,High:175.28,Low:172.75,Close:174.72,Volume:80470700}, + {Date:1648468800000,Open:172.17,High:175.73,Low:172,Close:175.6,Volume:90371900}, + {Date:1648555200000,Open:176.69,High:179.01,Low:176.34,Close:178.96,Volume:100589400}, + {Date:1648641600000,Open:178.55,High:179.61,Low:176.7,Close:177.77,Volume:92633200} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/AMD_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/AMD_day.js new file mode 100644 index 00000000..fd76b480 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/AMD_day.js @@ -0,0 +1,255 @@ +window["AMD_day"] = [ + {Date:1617192000000,Open:76.57,High:79.13,Low:76.52,Close:78.5,Volume:43659500}, + {Date:1617278400000,Open:80.16,High:81.31,Low:79.48,Close:81.09,Volume:40182400}, + {Date:1617624000000,Open:81.74,High:81.9,Low:80.39,Close:81.43,Volume:32610600}, + {Date:1617710400000,Open:81.21,High:82.46,Low:80.88,Close:81.44,Volume:29327900}, + {Date:1617796800000,Open:81.32,High:83.1,Low:80.35,Close:82.2,Volume:35590900}, + {Date:1617883200000,Open:83.32,High:83.79,Low:82.44,Close:83.35,Volume:41925300}, + {Date:1617969600000,Open:82.8,High:83.59,Low:82.16,Close:82.76,Volume:32759900}, + {Date:1618228800000,Open:82.06,High:82.18,Low:78.03,Close:78.58,Volume:62098800}, + {Date:1618315200000,Open:79.67,High:80.72,Low:78.98,Close:80.19,Volume:37767300}, + {Date:1618401600000,Open:79.88,High:80.13,Low:77.94,Close:78.55,Volume:34263800}, + {Date:1618488000000,Open:80.32,High:83.95,Low:79.97,Close:83.01,Volume:68942800}, + {Date:1618574400000,Open:83.3,High:83.59,Low:81.53,Close:82.15,Volume:47280600}, + {Date:1618833600000,Open:82.13,High:83.18,Low:80.39,Close:81.11,Volume:39115500}, + {Date:1618920000000,Open:80.82,High:81.11,Low:78.51,Close:79.27,Volume:34977800}, + {Date:1619006400000,Open:78.99,High:81.66,Low:78.86,Close:81.61,Volume:35069000}, + {Date:1619092800000,Open:81.61,High:81.79,Low:78.59,Close:79.06,Volume:38846100}, + {Date:1619179200000,Open:80.21,High:83.3,Low:79.96,Close:82.76,Volume:49194000}, + {Date:1619438400000,Open:83.35,High:85.9,Low:82.7,Close:85.41,Volume:57594500}, + {Date:1619524800000,Open:85.67,High:87.15,Low:85.13,Close:85.21,Volume:61909900}, + {Date:1619611200000,Open:88.85,High:89.2,Low:83.92,Close:84.02,Volume:108920300}, + {Date:1619697600000,Open:84.7,High:85.27,Low:82.63,Close:83.91,Volume:51294500}, + {Date:1619784000000,Open:82.97,High:84.1,Low:81.42,Close:81.62,Volume:46601900}, + {Date:1620043200000,Open:81.97,High:82,Low:78.46,Close:78.55,Volume:66323300}, + {Date:1620129600000,Open:77.95,High:78.67,Low:77.04,Close:78.61,Volume:59194300}, + {Date:1620216000000,Open:79.05,High:79.3,Low:77.36,Close:77.83,Volume:42310200}, + {Date:1620302400000,Open:77.63,High:78.06,Low:76.47,Close:77.89,Volume:38661300}, + {Date:1620388800000,Open:78.75,High:79.57,Low:78.22,Close:78.81,Volume:36954200}, + {Date:1620648000000,Open:78.2,High:78.3,Low:75.92,Close:75.99,Volume:45134500}, + {Date:1620734400000,Open:73.57,High:76.93,Low:72.75,Close:76.83,Volume:51008200}, + {Date:1620820800000,Open:75.09,High:76.13,Low:74.16,Close:74.64,Volume:42531400}, + {Date:1620907200000,Open:75.21,High:75.7,Low:72.5,Close:73.09,Volume:48646800}, + {Date:1620993600000,Open:74.02,High:75.03,Low:72.72,Close:74.59,Volume:38355800}, + {Date:1621252800000,Open:74.22,High:75.52,Low:73.41,Close:74.65,Volume:40779200}, + {Date:1621339200000,Open:74.74,High:75.77,Low:74.24,Close:74.44,Volume:31982500}, + {Date:1621425600000,Open:73.16,High:76.97,Low:72.76,Close:76.23,Volume:73966200}, + {Date:1621512000000,Open:76.81,High:78.27,Low:76.25,Close:78.06,Volume:49135000}, + {Date:1621598400000,Open:78.55,High:78.81,Low:77.04,Close:77.17,Volume:40201100}, + {Date:1621857600000,Open:77.26,High:78.01,Low:76.8,Close:77.44,Volume:33194300}, + {Date:1621944000000,Open:77.33,High:78.77,Low:76.84,Close:77.86,Volume:47353100}, + {Date:1622030400000,Open:77.83,High:78.59,Low:77.59,Close:78.34,Volume:30354000}, + {Date:1622116800000,Open:78.11,High:78.43,Low:77.47,Close:78.42,Volume:35883200}, + {Date:1622203200000,Open:78.66,High:81.09,Low:78.66,Close:80.08,Volume:40952700}, + {Date:1622548800000,Open:81.01,High:82.91,Low:80.66,Close:80.81,Volume:43433000}, + {Date:1622635200000,Open:81,High:82.6,Low:80.66,Close:81.97,Volume:35203200}, + {Date:1622721600000,Open:81.13,High:81.89,Low:80.26,Close:80.28,Volume:29812000}, + {Date:1622808000000,Open:80.92,High:82.19,Low:80.81,Close:81.58,Volume:26387800}, + {Date:1623067200000,Open:81.4,High:81.68,Low:80.38,Close:81.35,Volume:29006800}, + {Date:1623153600000,Open:81.87,High:82.65,Low:80.45,Close:80.89,Volume:26956600}, + {Date:1623240000000,Open:81.09,High:81.68,Low:79.8,Close:79.96,Volume:28454600}, + {Date:1623326400000,Open:80.02,High:81.71,Low:79.7,Close:81.56,Volume:28606400}, + {Date:1623412800000,Open:81.61,High:82.33,Low:80.7,Close:81.31,Volume:24310900}, + {Date:1623672000000,Open:81.51,High:81.55,Low:80.2,Close:81.55,Volume:27830200}, + {Date:1623758400000,Open:81.59,High:81.68,Low:80.22,Close:80.47,Volume:26194300}, + {Date:1623844800000,Open:80.75,High:81.45,Low:78.96,Close:80.11,Volume:29598300}, + {Date:1623931200000,Open:80.77,High:85.37,Low:80.57,Close:84.56,Volume:77822800}, + {Date:1624017600000,Open:84.28,High:85.77,Low:83.48,Close:84.65,Volume:58736800}, + {Date:1624276800000,Open:83.49,High:84.19,Low:82.21,Close:82.59,Volume:44417100}, + {Date:1624363200000,Open:82.9,High:84.04,Low:82.48,Close:83.58,Volume:32107700}, + {Date:1624449600000,Open:83.83,High:84.49,Low:83.16,Close:83.82,Volume:25992400}, + {Date:1624536000000,Open:84.39,High:87.14,Low:84.37,Close:86.1,Volume:42217700}, + {Date:1624622400000,Open:86.34,High:86.36,Low:85.1,Close:85.62,Volume:27804500}, + {Date:1624881600000,Open:86.38,High:88,Low:86.15,Close:87.08,Volume:30262000}, + {Date:1624968000000,Open:87.41,High:90.3,Low:86.66,Close:89.52,Volume:46181000}, + {Date:1625054400000,Open:90.82,High:94.34,Low:90.6,Close:93.93,Volume:70721500}, + {Date:1625140800000,Open:94.04,High:94.18,Low:91.7,Close:93.31,Volume:58059000}, + {Date:1625227200000,Open:93.28,High:95.27,Low:92.21,Close:94.7,Volume:51316700}, + {Date:1625572800000,Open:94.88,High:95.41,Low:93.32,Close:94.47,Volume:44930100}, + {Date:1625659200000,Open:95.02,High:95.44,Low:90.31,Close:90.54,Volume:51498500}, + {Date:1625745600000,Open:87.86,High:90.34,Low:87.45,Close:89.74,Volume:45673500}, + {Date:1625832000000,Open:90.04,High:91.26,Low:88.53,Close:90.9,Volume:35278400}, + {Date:1626091200000,Open:91.22,High:91.9,Low:89.65,Close:90.81,Volume:28526600}, + {Date:1626177600000,Open:90.48,High:91.41,Low:89.83,Close:90.26,Volume:30367600}, + {Date:1626264000000,Open:90.76,High:91.4,Low:88.94,Close:89.05,Volume:28108500}, + {Date:1626350400000,Open:89.78,High:89.78,Low:86.18,Close:86.93,Volume:38944700}, + {Date:1626436800000,Open:87.32,High:88.03,Low:85.68,Close:85.89,Volume:35860700}, + {Date:1626696000000,Open:84.99,High:87.23,Low:84.24,Close:86.58,Volume:39244800}, + {Date:1626782400000,Open:87.09,High:87.77,Low:85.17,Close:87.11,Volume:28089000}, + {Date:1626868800000,Open:87.25,High:89.49,Low:86.9,Close:89.41,Volume:29469900}, + {Date:1626955200000,Open:89.4,High:91.36,Low:89.08,Close:91.21,Volume:33730100}, + {Date:1627041600000,Open:91.35,High:92.37,Low:90.19,Close:92.15,Volume:31708900}, + {Date:1627300800000,Open:92.01,High:92.75,Low:91.12,Close:91.82,Volume:27668500}, + {Date:1627387200000,Open:92.94,High:94.1,Low:89.1,Close:91.03,Volume:69427000}, + {Date:1627473600000,Open:93.44,High:98.71,Low:89.65,Close:97.93,Volume:140561000}, + {Date:1627560000000,Open:96.58,High:105.74,Low:96.58,Close:102.95,Volume:164091800}, + {Date:1627646400000,Open:101.6,High:106.97,Low:101.38,Close:106.19,Volume:125632000}, + {Date:1627905600000,Open:105.93,High:110.33,Low:103.83,Close:108.63,Volume:115581900}, + {Date:1627992000000,Open:108.15,High:114.85,Low:107.66,Close:112.56,Volume:157723100}, + {Date:1628078400000,Open:114.36,High:122.49,Low:114.16,Close:118.77,Volume:225368700}, + {Date:1628164800000,Open:116.63,High:117.68,Low:111.59,Close:112.35,Volume:137860900}, + {Date:1628251200000,Open:110.55,High:116.26,Low:109.7,Close:110.11,Volume:143899000}, + {Date:1628510400000,Open:111.31,High:112.33,Low:107.06,Close:107.58,Volume:115749900}, + {Date:1628596800000,Open:107.9,High:109.17,Low:104.36,Close:106.48,Volume:113012300}, + {Date:1628683200000,Open:107.6,High:109.79,Low:105.62,Close:107.68,Volume:91788300}, + {Date:1628769600000,Open:107.39,High:108.44,Low:105.86,Close:106.5,Volume:60578700}, + {Date:1628856000000,Open:107.17,High:111.71,Low:106.57,Close:110.55,Volume:100135700}, + {Date:1629115200000,Open:110.2,High:111.58,Low:105.87,Close:107.48,Volume:73325400}, + {Date:1629201600000,Open:106.64,High:108.7,Low:105.35,Close:107.56,Volume:74053900}, + {Date:1629288000000,Open:107.35,High:108.07,Low:103.27,Close:103.44,Volume:79387900}, + {Date:1629374400000,Open:103.32,High:106.18,Low:101.98,Close:103.7,Volume:71117500}, + {Date:1629460800000,Open:104.32,High:105.98,Low:103.99,Close:104.65,Volume:55227600}, + {Date:1629720000000,Open:105.3,High:109.02,Low:104.86,Close:108.77,Volume:68835300}, + {Date:1629806400000,Open:109.45,High:109.61,Low:107.28,Close:107.65,Volume:51239300}, + {Date:1629892800000,Open:108.13,High:109.91,Low:107.45,Close:108.3,Volume:45485500}, + {Date:1629979200000,Open:108.57,High:109.23,Low:106.84,Close:107.27,Volume:51442500}, + {Date:1630065600000,Open:108.01,High:111.78,Low:107.8,Close:111.4,Volume:61030000}, + {Date:1630324800000,Open:112.61,High:114.49,Low:111.26,Close:111.32,Volume:56130500}, + {Date:1630411200000,Open:111.26,High:111.26,Low:109.03,Close:110.72,Volume:49339000}, + {Date:1630497600000,Open:111.3,High:111.85,Low:109.85,Close:109.99,Volume:38579600}, + {Date:1630584000000,Open:110.32,High:110.88,Low:108.77,Close:109.2,Volume:40090500}, + {Date:1630670400000,Open:108.85,High:111.17,Low:108.5,Close:109.92,Volume:42605800}, + {Date:1631016000000,Open:109.96,High:110.58,Low:108.66,Close:109.15,Volume:28815200}, + {Date:1631102400000,Open:108.88,High:109.3,Low:105.52,Close:106.17,Volume:43067900}, + {Date:1631188800000,Open:106.56,High:107.3,Low:105.84,Close:106.15,Volume:31857900}, + {Date:1631275200000,Open:106.99,High:106.99,Low:104.98,Close:105.2,Volume:32602300}, + {Date:1631534400000,Open:105.26,High:105.28,Low:102.63,Close:104.8,Volume:37767800}, + {Date:1631620800000,Open:105.52,High:106.82,Low:104.42,Close:105.73,Volume:40629500}, + {Date:1631707200000,Open:106,High:106.32,Low:104.03,Close:105.6,Volume:37998900}, + {Date:1631793600000,Open:104.92,High:106.75,Low:103.76,Close:106.22,Volume:38150300}, + {Date:1631880000000,Open:105.56,High:105.98,Low:103.71,Close:103.88,Volume:44528300}, + {Date:1632139200000,Open:101.58,High:102.51,Low:99.51,Close:101.55,Volume:45228400}, + {Date:1632225600000,Open:102.15,High:103.43,Low:101.18,Close:102.82,Volume:35481500}, + {Date:1632312000000,Open:102.82,High:104.56,Low:102.21,Close:104.38,Volume:34126300}, + {Date:1632398400000,Open:104.89,High:106.86,Low:103.89,Close:106.15,Volume:32816700}, + {Date:1632484800000,Open:105.19,High:106.05,Low:104.68,Close:105.8,Volume:26482600}, + {Date:1632744000000,Open:105.07,High:108.44,Low:103.44,Close:108.16,Volume:51944300}, + {Date:1632830400000,Open:106.84,High:107.65,Low:101.42,Close:101.52,Volume:74469000}, + {Date:1632916800000,Open:102.3,High:102.66,Low:99.81,Close:100.35,Volume:52224700}, + {Date:1633003200000,Open:102.08,High:104.44,Low:101.99,Close:102.9,Volume:57636700}, + {Date:1633089600000,Open:102.6,High:103,Low:100.64,Close:102.45,Volume:41491600}, + {Date:1633348800000,Open:101.74,High:101.85,Low:99.82,Close:100.34,Volume:41967100}, + {Date:1633435200000,Open:100.92,High:102.87,Low:100.61,Close:101.81,Volume:31455200}, + {Date:1633521600000,Open:100.45,High:103.72,Low:100.35,Close:103.64,Volume:39071700}, + {Date:1633608000000,Open:104.6,High:107.95,Low:104.46,Close:106.45,Volume:41543100}, + {Date:1633694400000,Open:106.55,High:107.28,Low:104.89,Close:105.06,Volume:30623000}, + {Date:1633953600000,Open:104.62,High:107.2,Low:104.02,Close:104.68,Volume:31284400}, + {Date:1634040000000,Open:105.17,High:106.04,Low:104.34,Close:105.04,Volume:34039900}, + {Date:1634126400000,Open:106.28,High:109.88,Low:106.25,Close:109.16,Volume:55631900}, + {Date:1634212800000,Open:110.5,High:112.22,Low:109.63,Close:111.99,Volume:46900200}, + {Date:1634299200000,Open:112.51,High:112.84,Low:111.11,Close:112.12,Volume:34203000}, + {Date:1634558400000,Open:111.9,High:116.88,Low:111.37,Close:116.43,Volume:47537800}, + {Date:1634644800000,Open:116.16,High:117.17,Low:114.47,Close:116.33,Volume:39593900}, + {Date:1634731200000,Open:116.29,High:118.3,Low:115.42,Close:116.39,Volume:34244800}, + {Date:1634817600000,Open:116.5,High:119.68,Low:116.26,Close:119.33,Volume:34794900}, + {Date:1634904000000,Open:120.83,High:121.56,Low:118.37,Close:119.82,Volume:38992700}, + {Date:1635163200000,Open:120.52,High:123.46,Low:118.6,Close:122.36,Volume:47834100}, + {Date:1635249600000,Open:122.99,High:127.2,Low:122.58,Close:122.93,Volume:59458900}, + {Date:1635336000000,Open:121.63,High:128.08,Low:121.05,Close:122.28,Volume:98245300}, + {Date:1635422400000,Open:122.86,High:123.5,Low:120.26,Close:121.16,Volume:58002500}, + {Date:1635508800000,Open:120.95,High:122.57,Low:119.88,Close:120.23,Volume:43320100}, + {Date:1635768000000,Open:119.45,High:125.67,Low:118.13,Close:125.23,Volume:54559800}, + {Date:1635854400000,Open:124.98,High:128.46,Low:124.2,Close:127.63,Volume:53491900}, + {Date:1635940800000,Open:127.75,High:130.6,Low:126.79,Close:130.53,Volume:59537800}, + {Date:1636027200000,Open:132.01,High:139,Low:130.77,Close:137.5,Volume:84825200}, + {Date:1636113600000,Open:139.19,High:141.22,Low:134.42,Close:136.34,Volume:64920600}, + {Date:1636372800000,Open:137.7,High:153.6,Low:137.7,Close:150.16,Volume:141493800}, + {Date:1636459200000,Open:154.01,High:155.65,Low:143.89,Close:148.92,Volume:98442600}, + {Date:1636545600000,Open:143.93,High:146.3,Low:138.52,Close:139.87,Volume:82989200}, + {Date:1636632000000,Open:142.96,High:146.47,Low:140.84,Close:146.01,Volume:67934800}, + {Date:1636718400000,Open:146.03,High:148.59,Low:144.25,Close:147.89,Volume:52162100}, + {Date:1636977600000,Open:148,High:148.98,Low:142.86,Close:146.49,Volume:52271300}, + {Date:1637064000000,Open:145.93,High:153.08,Low:145.34,Close:152.45,Volume:53100800}, + {Date:1637150400000,Open:151.98,High:154.66,Low:149.69,Close:151.34,Volume:54527500}, + {Date:1637236800000,Open:157.07,High:158.89,Low:152.56,Close:155.02,Volume:60612700}, + {Date:1637323200000,Open:155.76,High:156.92,Low:153.45,Close:155.41,Volume:41668900}, + {Date:1637582400000,Open:157.14,High:161.88,Low:152.39,Close:152.52,Volume:58674100}, + {Date:1637668800000,Open:150.41,High:152.66,Low:145.3,Close:149.92,Volume:62852700}, + {Date:1637755200000,Open:149.46,High:157.93,Low:147.19,Close:157.8,Volume:60677100}, + {Date:1637928000000,Open:155.8,High:158.1,Low:152.81,Close:154.81,Volume:36245100}, + {Date:1638187200000,Open:157.5,High:162.51,Low:156.1,Close:161.91,Volume:57438900}, + {Date:1638273600000,Open:163.28,High:164.46,Low:155.68,Close:158.37,Volume:75182500}, + {Date:1638360000000,Open:160.37,High:160.88,Low:148.92,Close:149.11,Volume:64039100}, + {Date:1638446400000,Open:147.68,High:152.53,Low:146.47,Close:150.68,Volume:56161200}, + {Date:1638532800000,Open:151.65,High:152.38,Low:140.72,Close:144.01,Volume:65910000}, + {Date:1638792000000,Open:141.14,High:141.31,Low:134.2,Close:139.06,Volume:66776500}, + {Date:1638878400000,Open:143.9,High:145.76,Low:141,Close:144.85,Volume:53359400}, + {Date:1638964800000,Open:144.96,High:147.04,Low:142.7,Close:145.24,Volume:40977500}, + {Date:1639051200000,Open:145.16,High:146.69,Low:137.8,Close:138.1,Volume:53019900}, + {Date:1639137600000,Open:141.29,High:141.37,Low:135.82,Close:138.55,Volume:42224300}, + {Date:1639396800000,Open:138.25,High:139.4,Low:133.42,Close:133.8,Volume:42174000}, + {Date:1639483200000,Open:131.67,High:137.24,Low:130.6,Close:135.6,Volume:50754600}, + {Date:1639569600000,Open:135.11,High:146.69,Low:133.81,Close:146.5,Volume:72425800}, + {Date:1639656000000,Open:147,High:147.93,Low:137.02,Close:138.64,Volume:63369600}, + {Date:1639742400000,Open:136.3,High:142.04,Low:136.11,Close:137.75,Volume:55642100}, + {Date:1640001600000,Open:135.97,High:138.26,Low:133.52,Close:135.8,Volume:38195400}, + {Date:1640088000000,Open:138.19,High:144.5,Low:135.15,Close:144.25,Volume:57785200}, + {Date:1640174400000,Open:142.65,High:144.5,Low:140.27,Close:143.88,Volume:46923700}, + {Date:1640260800000,Open:143.89,High:149.02,Low:143.85,Close:146.14,Volume:48653800}, + {Date:1640606400000,Open:147.51,High:154.89,Low:147.25,Close:154.36,Volume:53296400}, + {Date:1640692800000,Open:155.88,High:156.73,Low:151.38,Close:153.15,Volume:58699100}, + {Date:1640779200000,Open:152.82,High:154.34,Low:147.29,Close:148.26,Volume:51300200}, + {Date:1640865600000,Open:147.44,High:148.85,Low:144.85,Close:145.15,Volume:44358000}, + {Date:1640952000000,Open:146.16,High:148.61,Low:143.55,Close:143.9,Volume:49448100}, + {Date:1641211200000,Open:145.14,High:151.65,Low:145.02,Close:150.24,Volume:59396600}, + {Date:1641297600000,Open:151.01,High:152.42,Low:140.7,Close:144.42,Volume:80200500}, + {Date:1641384000000,Open:142.82,High:143.76,Low:135.29,Close:136.15,Volume:65403200}, + {Date:1641470400000,Open:136.19,High:138,Low:131.77,Close:136.23,Volume:64802900}, + {Date:1641556800000,Open:136.28,High:137.44,Low:131.13,Close:132,Volume:58441100}, + {Date:1641816000000,Open:129.08,High:132.42,Low:125.03,Close:132,Volume:84671300}, + {Date:1641902400000,Open:133.45,High:138.99,Low:131.59,Close:137.31,Volume:77153900}, + {Date:1641988800000,Open:138.59,High:140.57,Low:135.77,Close:137.47,Volume:69669600}, + {Date:1642075200000,Open:139.44,High:141.25,Low:131.81,Close:132.74,Volume:76618100}, + {Date:1642161600000,Open:131.68,High:137,Low:131.43,Close:136.88,Volume:71078400}, + {Date:1642507200000,Open:134.5,High:136.39,Low:131.59,Close:131.93,Volume:56527400}, + {Date:1642593600000,Open:133.55,High:134.57,Low:128.02,Close:128.27,Volume:69831800}, + {Date:1642680000000,Open:126.04,High:128.51,Low:121.41,Close:121.89,Volume:91157300}, + {Date:1642766400000,Open:120.14,High:125.02,Low:118.39,Close:118.81,Volume:95685300}, + {Date:1643025600000,Open:115.4,High:116.77,Low:107.5,Close:116.53,Volume:116210100}, + {Date:1643112000000,Open:114.1,High:114.82,Low:109.86,Close:111.13,Volume:85102900}, + {Date:1643198400000,Open:114.55,High:117.16,Low:108.63,Close:110.71,Volume:94752600}, + {Date:1643284800000,Open:111.96,High:112.75,Low:101.94,Close:102.6,Volume:125954100}, + {Date:1643371200000,Open:101.55,High:105.4,Low:99.35,Close:105.24,Volume:98749500}, + {Date:1643630400000,Open:107.93,High:114.31,Low:106.9,Close:114.25,Volume:97206000}, + {Date:1643716800000,Open:116.75,High:117.26,Low:112.73,Close:116.78,Volume:122467900}, + {Date:1643803200000,Open:129.89,High:130.06,Low:120.64,Close:122.76,Volume:180065000}, + {Date:1643889600000,Open:120.32,High:125.37,Low:118.82,Close:120.08,Volume:103599500}, + {Date:1643976000000,Open:120.34,High:124.96,Low:118.58,Close:123.6,Volume:86212000}, + {Date:1644235200000,Open:123.56,High:127.63,Low:122.79,Close:123.67,Volume:81672500}, + {Date:1644321600000,Open:122.38,High:128.71,Low:122.05,Close:128.23,Volume:84902800}, + {Date:1644408000000,Open:129.6,High:132.96,Low:127.65,Close:132.85,Volume:92948900}, + {Date:1644494400000,Open:128.84,High:131.76,Low:124.61,Close:125.77,Volume:108939900}, + {Date:1644580800000,Open:126.14,High:127.17,Low:111.81,Close:113.18,Volume:164723200}, + {Date:1644840000000,Open:115.51,High:118.37,Low:113.46,Close:114.27,Volume:135146400}, + {Date:1644926400000,Open:117.19,High:121.88,Low:114.36,Close:121.47,Volume:143975900}, + {Date:1645012800000,Open:119.05,High:119.54,Low:114.22,Close:117.69,Volume:119109600}, + {Date:1645099200000,Open:116.26,High:116.98,Low:112.26,Close:112.37,Volume:98179600}, + {Date:1645185600000,Open:113.9,High:115.64,Low:109.89,Close:113.83,Volume:114321200}, + {Date:1645531200000,Open:115.27,High:119.2,Low:113.61,Close:115.65,Volume:141648500}, + {Date:1645617600000,Open:117.4,High:118.65,Low:109.04,Close:109.76,Volume:120299400}, + {Date:1645704000000,Open:104.56,High:116.96,Low:104.26,Close:116.61,Volume:142956600}, + {Date:1645790400000,Open:117.16,High:121.23,Low:116.04,Close:121.06,Volume:127821000}, + {Date:1646049600000,Open:120.31,High:124.61,Low:119.2,Close:123.34,Volume:124516700}, + {Date:1646136000000,Open:122.33,High:122.43,Low:112.8,Close:113.83,Volume:126552200}, + {Date:1646222400000,Open:115.47,High:119.48,Low:113.31,Close:118.28,Volume:118354500}, + {Date:1646308800000,Open:118.13,High:118.26,Low:111.05,Close:111.98,Volume:123916700}, + {Date:1646395200000,Open:112,High:113,Low:106.81,Close:108.41,Volume:100609400}, + {Date:1646654400000,Open:108.53,High:109.53,Low:102.82,Close:102.95,Volume:92600000}, + {Date:1646740800000,Open:102.81,High:109.9,Low:100.08,Close:105.53,Volume:135348300}, + {Date:1646827200000,Open:108.41,High:111.71,Low:106.85,Close:111.05,Volume:102310300}, + {Date:1646913600000,Open:108.89,High:109.07,Low:103.07,Close:106.46,Volume:102557400}, + {Date:1647000000000,Open:108.13,High:108.19,Low:104.08,Close:104.29,Volume:87529900}, + {Date:1647259200000,Open:102.99,High:105.24,Low:101.04,Close:102.25,Volume:89731700}, + {Date:1647345600000,Open:102.66,High:109.69,Low:101.79,Close:109.33,Volume:112425500}, + {Date:1647432000000,Open:111.6,High:115.42,Low:109.89,Close:115.37,Volume:113689800}, + {Date:1647518400000,Open:112.14,High:114.27,Low:109.71,Close:111.69,Volume:103201700}, + {Date:1647604800000,Open:111.28,High:114.93,Low:110.55,Close:113.46,Volume:105748100}, + {Date:1647864000000,Open:113.73,High:117.57,Low:112.54,Close:115.92,Volume:101905900}, + {Date:1647950400000,Open:115.43,High:117.95,Low:113.81,Close:114.78,Volume:101672600}, + {Date:1648036800000,Open:114.29,High:117.55,Low:112.21,Close:113.92,Volume:90579200}, + {Date:1648123200000,Open:114.96,High:120.55,Low:113.71,Close:120.53,Volume:121961300}, + {Date:1648209600000,Open:119.92,High:121.4,Low:117.25,Close:119.67,Volume:95806000}, + {Date:1648468800000,Open:117.7,High:120.41,Low:116.71,Close:120.24,Volume:92966100}, + {Date:1648555200000,Open:122.28,High:123.71,Low:119.59,Close:123.23,Volume:94143000}, + {Date:1648641600000,Open:123.04,High:125.67,Low:118.59,Close:119.22,Volume:99476900} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/AMZN_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/AMZN_day.js new file mode 100644 index 00000000..e92e896f --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/AMZN_day.js @@ -0,0 +1,255 @@ +window["AMZN_day"] = [ + {Date:1617192000000,Open:3064.06,High:3119.33,Low:3062.5,Close:3094.08,Volume:3093900}, + {Date:1617278400000,Open:3117.94,High:3162.44,Low:3115.55,Close:3161,Volume:2940300}, + {Date:1617624000000,Open:3173,High:3235.96,Low:3161.24,Close:3226.73,Volume:3334900}, + {Date:1617710400000,Open:3223.75,High:3247.31,Low:3217.04,Close:3223.82,Volume:2537800}, + {Date:1617796800000,Open:3233.8,High:3303.61,Low:3223.65,Close:3279.39,Volume:3346200}, + {Date:1617883200000,Open:3310.9,High:3324.5,Low:3292,Close:3299.3,Volume:2812100}, + {Date:1617969600000,Open:3304.7,High:3372.2,Low:3288.9,Close:3372.2,Volume:4341500}, + {Date:1618228800000,Open:3355.21,High:3395.04,Low:3351.15,Close:3379.39,Volume:3281800}, + {Date:1618315200000,Open:3400.85,High:3432,Low:3395.63,Close:3400,Volume:3315800}, + {Date:1618401600000,Open:3404.04,High:3404.13,Low:3326,Close:3333,Volume:3145200}, + {Date:1618488000000,Open:3371,High:3397,Low:3352,Close:3379.09,Volume:3233600}, + {Date:1618574400000,Open:3380,High:3406.8,Low:3355.59,Close:3399.44,Volume:3186000}, + {Date:1618833600000,Open:3390.33,High:3435.93,Low:3360.16,Close:3372.01,Volume:2725400}, + {Date:1618920000000,Open:3373.6,High:3382.99,Low:3316,Close:3334.69,Volume:2623000}, + {Date:1619006400000,Open:3316,High:3362.86,Low:3303.81,Close:3362.02,Volume:2211200}, + {Date:1619092800000,Open:3371.68,High:3372.87,Low:3301.45,Close:3309.04,Volume:2580600}, + {Date:1619179200000,Open:3319.1,High:3375,Low:3308.5,Close:3340.88,Volume:3192800}, + {Date:1619438400000,Open:3348,High:3428.45,Low:3330.94,Close:3409,Volume:4880700}, + {Date:1619524800000,Open:3443.47,High:3460,Low:3398.01,Close:3417.43,Volume:3827100}, + {Date:1619611200000,Open:3434.8,High:3489.88,Low:3425,Close:3458.5,Volume:4631900}, + {Date:1619697600000,Open:3505.1,High:3514.45,Low:3435,Close:3471.31,Volume:7682400}, + {Date:1619784000000,Open:3525.12,High:3554,Low:3462.5,Close:3467.42,Volume:7009300}, + {Date:1620043200000,Open:3484.73,High:3486.65,Low:3372.7,Close:3386.49,Volume:5875500}, + {Date:1620129600000,Open:3356.19,High:3367.98,Low:3272.13,Close:3311.87,Volume:5439400}, + {Date:1620216000000,Open:3338.86,High:3354.7,Low:3264.36,Close:3270.54,Volume:3711300}, + {Date:1620302400000,Open:3270,High:3314.4,Low:3247.2,Close:3306.37,Volume:4447700}, + {Date:1620388800000,Open:3319.09,High:3330.89,Low:3289.07,Close:3291.61,Volume:4710300}, + {Date:1620648000000,Open:3282.32,High:3283,Low:3190,Close:3190.49,Volume:5838600}, + {Date:1620734400000,Open:3136.28,High:3238,Low:3127.37,Close:3223.91,Volume:4619800}, + {Date:1620820800000,Open:3185,High:3207.94,Low:3133.1,Close:3151.94,Volume:4936400}, + {Date:1620907200000,Open:3185.47,High:3203.84,Low:3133,Close:3161.47,Volume:3350900}, + {Date:1620993600000,Open:3185.56,High:3228.86,Low:3183,Close:3222.9,Volume:3325000}, + {Date:1621252800000,Open:3245.93,High:3292.75,Low:3234.59,Close:3270.39,Volume:3723900}, + {Date:1621339200000,Open:3292.58,High:3312,Low:3230.37,Close:3232.28,Volume:2828400}, + {Date:1621425600000,Open:3195,High:3234.75,Low:3184,Close:3231.8,Volume:2679700}, + {Date:1621512000000,Open:3244.4,High:3259.68,Low:3236.18,Close:3247.68,Volume:2633200}, + {Date:1621598400000,Open:3250,High:3256.69,Low:3197.01,Close:3203.08,Volume:4104900}, + {Date:1621857600000,Open:3215.5,High:3257.95,Low:3210.5,Close:3244.99,Volume:2422800}, + {Date:1621944000000,Open:3266.67,High:3279.82,Low:3213.76,Close:3259.05,Volume:3261100}, + {Date:1622030400000,Open:3274.59,High:3295.73,Low:3258.51,Close:3265.16,Volume:2384000}, + {Date:1622116800000,Open:3256,High:3260.36,Low:3230.04,Close:3230.11,Volume:2561200}, + {Date:1622203200000,Open:3242,High:3247.99,Low:3219.7,Close:3223.07,Volume:2329800}, + {Date:1622548800000,Open:3243.5,High:3250.98,Low:3209.06,Close:3218.65,Volume:2430000}, + {Date:1622635200000,Open:3223.1,High:3235,Low:3208,Close:3233.99,Volume:2014500}, + {Date:1622721600000,Open:3204.23,High:3214.44,Low:3184.03,Close:3187.01,Volume:2398300}, + {Date:1622808000000,Open:3212,High:3221,Low:3198.81,Close:3206.22,Volume:2249700}, + {Date:1623067200000,Open:3197.33,High:3208,Low:3172.2,Close:3198.01,Volume:2215800}, + {Date:1623153600000,Open:3222.61,High:3279.53,Low:3218.01,Close:3264.11,Volume:3416700}, + {Date:1623240000000,Open:3272.87,High:3297.58,Low:3270.7,Close:3281.15,Volume:2455500}, + {Date:1623326400000,Open:3282.01,High:3351,Low:3281.15,Close:3349.65,Volume:3476500}, + {Date:1623412800000,Open:3349.65,High:3366.58,Low:3333.45,Close:3346.83,Volume:2817400}, + {Date:1623672000000,Open:3346.83,High:3385,Low:3335.5,Close:3383.87,Volume:2569700}, + {Date:1623758400000,Open:3384,High:3396.99,Low:3363.11,Close:3383.13,Volume:2426200}, + {Date:1623844800000,Open:3392,High:3426.35,Low:3360.53,Close:3415.25,Volume:4202800}, + {Date:1623931200000,Open:3403.18,High:3497.2,Low:3401,Close:3489.24,Volume:5136500}, + {Date:1624017600000,Open:3479.99,High:3507,Low:3473.71,Close:3486.9,Volume:5247700}, + {Date:1624276800000,Open:3476.42,High:3482,Low:3434,Close:3453.96,Volume:3277100}, + {Date:1624363200000,Open:3458.06,High:3523.78,Low:3456.09,Close:3505.44,Volume:3345100}, + {Date:1624449600000,Open:3505,High:3521,Low:3483.2,Close:3503.82,Volume:2813300}, + {Date:1624536000000,Open:3507.64,High:3524.86,Low:3430.85,Close:3449.08,Volume:3832000}, + {Date:1624622400000,Open:3464,High:3464.82,Low:3394.18,Close:3401.46,Volume:3941000}, + {Date:1624881600000,Open:3416,High:3448,Low:3413.51,Close:3443.89,Volume:2242800}, + {Date:1624968000000,Open:3438.82,High:3456.03,Low:3423.03,Close:3448.14,Volume:2098400}, + {Date:1625054400000,Open:3441.06,High:3471.6,Low:3435,Close:3440.16,Volume:2404000}, + {Date:1625140800000,Open:3434.61,High:3457,Low:3409.42,Close:3432.97,Volume:2037100}, + {Date:1625227200000,Open:3451.64,High:3511.72,Low:3436.92,Close:3510.98,Volume:3169400}, + {Date:1625572800000,Open:3530.11,High:3685.48,Low:3529,Close:3675.74,Volume:6744800}, + {Date:1625659200000,Open:3717.38,High:3734.2,Low:3678.91,Close:3696.58,Volume:5328100}, + {Date:1625745600000,Open:3643.56,High:3759.99,Low:3621.12,Close:3731.41,Volume:5180600}, + {Date:1625832000000,Open:3722.52,High:3748,Low:3693.4,Close:3719.34,Volume:3748200}, + {Date:1626091200000,Open:3744,High:3757.29,Low:3696.79,Close:3718.55,Volume:2571600}, + {Date:1626177600000,Open:3702.1,High:3773.08,Low:3671.32,Close:3677.36,Volume:3845900}, + {Date:1626264000000,Open:3708.85,High:3717.66,Low:3660.83,Close:3681.68,Volume:3296600}, + {Date:1626350400000,Open:3694.2,High:3695.4,Low:3620.92,Close:3631.2,Volume:3185300}, + {Date:1626436800000,Open:3633.31,High:3646.06,Low:3570.46,Close:3573.63,Volume:4043700}, + {Date:1626696000000,Open:3532.58,High:3550.21,Low:3499.16,Close:3549.59,Volume:3784600}, + {Date:1626782400000,Open:3567.32,High:3592,Low:3518,Close:3573.19,Volume:3255700}, + {Date:1626868800000,Open:3576.38,High:3586.45,Low:3543.64,Close:3585.2,Volume:2319000}, + {Date:1626955200000,Open:3587.23,High:3640.02,Low:3582.27,Close:3638.03,Volume:3265400}, + {Date:1627041600000,Open:3640,High:3666.11,Low:3622.04,Close:3656.64,Volume:2436300}, + {Date:1627300800000,Open:3673.17,High:3712.08,Low:3647.25,Close:3699.82,Volume:2900100}, + {Date:1627387200000,Open:3698.5,High:3698.5,Low:3586.15,Close:3626.39,Volume:4131900}, + {Date:1627473600000,Open:3633.78,High:3658.42,Low:3601,Close:3630.32,Volume:2999400}, + {Date:1627560000000,Open:3627.75,High:3637.95,Low:3580.01,Close:3599.92,Volume:5520000}, + {Date:1627646400000,Open:3347.95,High:3368.14,Low:3306.98,Close:3327.59,Volume:9965600}, + {Date:1627905600000,Open:3353.1,High:3358.92,Low:3317,Close:3331.48,Volume:3353900}, + {Date:1627992000000,Open:3340.72,High:3391,Low:3299.77,Close:3366.24,Volume:4157300}, + {Date:1628078400000,Open:3379.35,High:3388.88,Low:3345.56,Close:3354.72,Volume:2183900}, + {Date:1628164800000,Open:3356.22,High:3389,Low:3340.92,Close:3375.99,Volume:2433500}, + {Date:1628251200000,Open:3375,High:3375,Low:3329.04,Close:3344.94,Volume:2637600}, + {Date:1628510400000,Open:3343.61,High:3354.88,Low:3328.52,Close:3341.87,Volume:2148200}, + {Date:1628596800000,Open:3345.01,High:3358,Low:3315,Close:3320.68,Volume:2412600}, + {Date:1628683200000,Open:3331.45,High:3337.7,Low:3277.79,Close:3292.11,Volume:2947200}, + {Date:1628769600000,Open:3290,High:3314.51,Low:3269.67,Close:3303.5,Volume:2314100}, + {Date:1628856000000,Open:3305.67,High:3306.07,Low:3283,Close:3293.97,Volume:2056700}, + {Date:1629115200000,Open:3283,High:3300,Low:3211.13,Close:3298.99,Volume:3319700}, + {Date:1629201600000,Open:3277.5,High:3280.49,Low:3225.68,Close:3241.96,Volume:3387900}, + {Date:1629288000000,Open:3241.99,High:3254.1,Low:3200,Close:3201.22,Volume:2804300}, + {Date:1629374400000,Open:3194.02,High:3233,Low:3182.46,Close:3187.75,Volume:3782900}, + {Date:1629460800000,Open:3203.87,High:3207.81,Low:3175.76,Close:3199.95,Volume:3358400}, + {Date:1629720000000,Open:3211.9,High:3280.9,Low:3210.01,Close:3265.87,Volume:3268100}, + {Date:1629806400000,Open:3280,High:3315.49,Low:3274.58,Close:3305.78,Volume:2551800}, + {Date:1629892800000,Open:3309.87,High:3321,Low:3286.15,Close:3299.18,Volume:1680300}, + {Date:1629979200000,Open:3299,High:3332,Low:3296,Close:3316,Volume:2098800}, + {Date:1630065600000,Open:3333.23,High:3352.32,Low:3313.75,Close:3349.63,Volume:2402400}, + {Date:1630324800000,Open:3357.43,High:3445,Low:3355.22,Close:3421.57,Volume:3192200}, + {Date:1630411200000,Open:3424.8,High:3472.58,Low:3395.59,Close:3470.79,Volume:4356400}, + {Date:1630497600000,Open:3496.4,High:3527,Low:3475.24,Close:3479,Volume:3629900}, + {Date:1630584000000,Open:3494.76,High:3511.96,Low:3455,Close:3463.12,Volume:2923700}, + {Date:1630670400000,Open:3452,High:3482.67,Low:3436.44,Close:3478.05,Volume:2575700}, + {Date:1631016000000,Open:3478,High:3528.09,Low:3476.94,Close:3509.29,Volume:2737900}, + {Date:1631102400000,Open:3511.65,High:3545.63,Low:3495.67,Close:3525.5,Volume:3053400}, + {Date:1631188800000,Open:3526.02,High:3549.99,Low:3480.37,Close:3484.16,Volume:2719200}, + {Date:1631275200000,Open:3501.83,High:3508.45,Low:3462.91,Close:3469.15,Volume:2397300}, + {Date:1631534400000,Open:3482.8,High:3497.96,Low:3438,Close:3457.17,Volume:2569000}, + {Date:1631620800000,Open:3475.55,High:3486.81,Low:3437.71,Close:3450,Volume:1936900}, + {Date:1631707200000,Open:3442.52,High:3485.42,Low:3402.01,Close:3475.79,Volume:2957500}, + {Date:1631793600000,Open:3459.96,High:3492.55,Low:3446.14,Close:3488.24,Volume:2583600}, + {Date:1631880000000,Open:3488.41,High:3497.41,Low:3452.13,Close:3462.52,Volume:4616600}, + {Date:1632139200000,Open:3396,High:3419,Low:3305.01,Close:3355.73,Volume:4669100}, + {Date:1632225600000,Open:3375,High:3379.7,Low:3332.39,Close:3343.63,Volume:2780900}, + {Date:1632312000000,Open:3351,High:3389,Low:3341.05,Close:3380.05,Volume:2411400}, + {Date:1632398400000,Open:3380.05,High:3428.96,Low:3380.05,Close:3416,Volume:2379400}, + {Date:1632484800000,Open:3402.01,High:3429.26,Low:3393.4,Close:3425.52,Volume:2116200}, + {Date:1632744000000,Open:3371.5,High:3415.57,Low:3339.61,Close:3405.8,Volume:3634500}, + {Date:1632830400000,Open:3357.71,High:3369.19,Low:3290.1,Close:3315.96,Volume:4430800}, + {Date:1632916800000,Open:3322.11,High:3351.3,Low:3297.87,Close:3301.12,Volume:2562300}, + {Date:1633003200000,Open:3316,High:3327.85,Low:3273.99,Close:3285.04,Volume:2842400}, + {Date:1633089600000,Open:3289.01,High:3309.17,Low:3255.94,Close:3283.26,Volume:2835600}, + {Date:1633348800000,Open:3279.39,High:3279.99,Low:3176.25,Close:3189.78,Volume:4523100}, + {Date:1633435200000,Open:3204.5,High:3260.73,Low:3202.46,Close:3221,Volume:3269200}, + {Date:1633521600000,Open:3213.53,High:3264.34,Low:3198.62,Close:3262.01,Volume:2533000}, + {Date:1633608000000,Open:3291.54,High:3325.75,Low:3283.06,Close:3302.43,Volume:2409100}, + {Date:1633694400000,Open:3317,High:3321.43,Low:3288.2,Close:3288.62,Volume:1998200}, + {Date:1633953600000,Open:3275,High:3292.59,Low:3238.1,Close:3246.3,Volume:2034200}, + {Date:1634040000000,Open:3257,High:3267.53,Low:3236.28,Close:3247.33,Volume:1819600}, + {Date:1634126400000,Open:3269.71,High:3288.38,Low:3261.09,Close:3284.28,Volume:2420100}, + {Date:1634212800000,Open:3302.45,High:3312.6,Low:3290.78,Close:3299.86,Volume:2109500}, + {Date:1634299200000,Open:3311.42,High:3410.42,Low:3304,Close:3409.02,Volume:5179900}, + {Date:1634558400000,Open:3388.36,High:3449.17,Low:3385.1,Close:3446.74,Volume:3174100}, + {Date:1634644800000,Open:3434.29,High:3454.69,Low:3422,Close:3444.15,Volume:2386100}, + {Date:1634731200000,Open:3452.66,High:3462.86,Low:3400.37,Close:3415.06,Volume:2139800}, + {Date:1634817600000,Open:3414.25,High:3440.28,Low:3403,Close:3435.01,Volume:1881400}, + {Date:1634904000000,Open:3421,High:3429.84,Low:3331.3,Close:3335.55,Volume:3139100}, + {Date:1635163200000,Open:3335,High:3347.8,Low:3297.7,Close:3320.37,Volume:2226000}, + {Date:1635249600000,Open:3349.51,High:3416.12,Low:3343.98,Close:3376.07,Volume:2698300}, + {Date:1635336000000,Open:3388,High:3437,Low:3371.45,Close:3392.49,Volume:2702200}, + {Date:1635422400000,Open:3402.1,High:3479,Low:3386,Close:3446.57,Volume:5708700}, + {Date:1635508800000,Open:3300.02,High:3374.82,Low:3273.32,Close:3372.43,Volume:6486100}, + {Date:1635768000000,Open:3361.8,High:3375.86,Low:3292.02,Close:3318.11,Volume:3608900}, + {Date:1635854400000,Open:3315.01,High:3331.12,Low:3283.55,Close:3312.75,Volume:2627600}, + {Date:1635940800000,Open:3309,High:3394.92,Low:3297.52,Close:3384,Volume:3397200}, + {Date:1636027200000,Open:3370,High:3498.63,Low:3365,Close:3477,Volume:5353000}, + {Date:1636113600000,Open:3477,High:3566.25,Low:3476.98,Close:3518.99,Volume:4997000}, + {Date:1636372800000,Open:3523.24,High:3579,Low:3487.86,Close:3488.98,Volume:3074000}, + {Date:1636459200000,Open:3515.25,High:3593.77,Low:3501.43,Close:3576.23,Volume:4294900}, + {Date:1636545600000,Open:3563.87,High:3605.45,Low:3463.09,Close:3482.05,Volume:4027400}, + {Date:1636632000000,Open:3513,High:3543.24,Low:3467.47,Close:3472.5,Volume:2264400}, + {Date:1636718400000,Open:3485,High:3540.73,Low:3447.05,Close:3525.15,Volume:2689400}, + {Date:1636977600000,Open:3537,High:3593.88,Low:3525.81,Close:3545.68,Volume:2929700}, + {Date:1637064000000,Open:3539,High:3576.5,Low:3525.15,Close:3540.7,Volume:2217100}, + {Date:1637150400000,Open:3564.72,High:3587.25,Low:3545.35,Close:3549,Volume:2560300}, + {Date:1637236800000,Open:3566.35,High:3704.2,Low:3561,Close:3696.06,Volume:5703500}, + {Date:1637323200000,Open:3712.69,High:3762.15,Low:3675.72,Close:3676.57,Volume:4936700}, + {Date:1637582400000,Open:3676.38,High:3713.46,Low:3567.5,Close:3572.57,Volume:4842200}, + {Date:1637668800000,Open:3585.04,High:3621.05,Low:3527.71,Close:3580.04,Volume:3690200}, + {Date:1637755200000,Open:3562.67,High:3613.64,Low:3536.85,Close:3580.41,Volume:2328000}, + {Date:1637928000000,Open:3602.1,High:3633.5,Low:3504.15,Close:3504.56,Volume:2991300}, + {Date:1638187200000,Open:3547.64,High:3596,Low:3531.5,Close:3561.57,Volume:3265600}, + {Date:1638273600000,Open:3563.5,High:3585.77,Low:3492.01,Close:3507.07,Volume:4001100}, + {Date:1638360000000,Open:3545,High:3559.88,Low:3441.6,Close:3443.72,Volume:3745800}, + {Date:1638446400000,Open:3460,High:3492.7,Low:3423.75,Close:3437.36,Volume:3236300}, + {Date:1638532800000,Open:3455,High:3469.87,Low:3338.6,Close:3389.79,Volume:4035600}, + {Date:1638792000000,Open:3393,High:3473.91,Low:3338.69,Close:3427.37,Volume:3443000}, + {Date:1638878400000,Open:3492,High:3549.99,Low:3466.69,Close:3523.29,Volume:3320500}, + {Date:1638964800000,Open:3523.01,High:3543.6,Low:3495.01,Close:3523.16,Volume:2262700}, + {Date:1639051200000,Open:3515,High:3539.39,Low:3482.79,Close:3483.42,Volume:2303100}, + {Date:1639137600000,Open:3508.34,High:3518.54,Low:3410,Close:3444.24,Volume:3034500}, + {Date:1639396800000,Open:3440,High:3442,Low:3382.6,Close:3391.35,Volume:3108500}, + {Date:1639483200000,Open:3351,High:3389.98,Low:3328.8,Close:3381.83,Volume:2798800}, + {Date:1639569600000,Open:3371.96,High:3472,Low:3303.9,Close:3466.3,Volume:3789700}, + {Date:1639656000000,Open:3467.37,High:3483.32,Low:3363.21,Close:3377.42,Volume:3043800}, + {Date:1639742400000,Open:3354.21,High:3417.97,Low:3312.27,Close:3400.35,Volume:4277100}, + {Date:1640001600000,Open:3337,High:3357.49,Low:3312,Close:3341.58,Volume:2868600}, + {Date:1640088000000,Open:3357.01,High:3414.33,Low:3312.95,Close:3408.34,Volume:2797800}, + {Date:1640174400000,Open:3385.4,High:3441,Low:3370.01,Close:3420.74,Volume:2751800}, + {Date:1640260800000,Open:3408.56,High:3439.5,Low:3403,Close:3421.37,Volume:1839400}, + {Date:1640606400000,Open:3420.74,High:3458.86,Low:3384.31,Close:3393.39,Volume:2934400}, + {Date:1640692800000,Open:3403.65,High:3443.52,Low:3382.71,Close:3413.22,Volume:2731900}, + {Date:1640779200000,Open:3416.8,High:3424.24,Low:3372.01,Close:3384.02,Volume:1787700}, + {Date:1640865600000,Open:3394,High:3417.76,Low:3370.48,Close:3372.89,Volume:1879200}, + {Date:1640952000000,Open:3379.12,High:3387,Low:3331.17,Close:3334.34,Volume:2391500}, + {Date:1641211200000,Open:3351,High:3414.07,Low:3323.21,Close:3408.09,Volume:3176000}, + {Date:1641297600000,Open:3408.76,High:3428,Low:3326.99,Close:3350.44,Volume:3536300}, + {Date:1641384000000,Open:3337.66,High:3342.53,Low:3287.14,Close:3287.14,Volume:3215100}, + {Date:1641470400000,Open:3269.01,High:3296,Low:3238.74,Close:3265.08,Volume:2597900}, + {Date:1641556800000,Open:3276.78,High:3304.87,Low:3240.62,Close:3251.08,Volume:2330300}, + {Date:1641816000000,Open:3211.71,High:3233.23,Low:3126.09,Close:3229.72,Volume:4389900}, + {Date:1641902400000,Open:3230,High:3327,Low:3214.03,Close:3307.24,Volume:3140300}, + {Date:1641988800000,Open:3331.5,High:3337.56,Low:3288.34,Close:3304.14,Volume:2501500}, + {Date:1642075200000,Open:3305.01,High:3324.43,Low:3221.82,Close:3224.28,Volume:2609400}, + {Date:1642161600000,Open:3203,High:3245,Low:3196.01,Close:3242.76,Volume:2298700}, + {Date:1642507200000,Open:3182.1,High:3194.69,Low:3153.29,Close:3178.35,Volume:3364600}, + {Date:1642593600000,Open:3175.24,High:3185,Low:3125,Close:3125.98,Volume:2662100}, + {Date:1642680000000,Open:3135.32,High:3160,Low:3027.02,Close:3033.35,Volume:3598700}, + {Date:1642766400000,Open:2999,High:3018,Low:2841.41,Close:2852.86,Volume:8198600}, + {Date:1643025600000,Open:2780,High:2898.9,Low:2707.04,Close:2890.88,Volume:7781200}, + {Date:1643112000000,Open:2844.85,High:2872,Low:2762.9,Close:2799.72,Volume:4541200}, + {Date:1643198400000,Open:2895,High:2903.7,Low:2746.37,Close:2777.45,Volume:4780100}, + {Date:1643284800000,Open:2816,High:2884.87,Low:2787,Close:2792.75,Volume:3875800}, + {Date:1643371200000,Open:2817.21,High:2879.96,Low:2758.59,Close:2879.56,Volume:3719600}, + {Date:1643630400000,Open:2895,High:3007.21,Low:2886.01,Close:2991.47,Volume:3915400}, + {Date:1643716800000,Open:3000,High:3034.16,Low:2952.55,Close:3023.87,Volume:2961000}, + {Date:1643803200000,Open:3101.01,High:3101.5,Low:2977.27,Close:3012.25,Volume:4366500}, + {Date:1643889600000,Open:2834.75,High:2884.95,Low:2766.66,Close:2776.91,Volume:11276600}, + {Date:1643976000000,Open:3112.13,High:3224,Low:3012.16,Close:3152.79,Volume:12672800}, + {Date:1644235200000,Open:3170.4,High:3253.82,Low:3145,Close:3158.71,Volume:5131200}, + {Date:1644321600000,Open:3135.01,High:3235.85,Low:3111.01,Close:3228.27,Volume:3802000}, + {Date:1644408000000,Open:3257.47,High:3276.69,Low:3205,Close:3223.79,Volume:3439300}, + {Date:1644494400000,Open:3167,High:3214.33,Low:3155,Close:3180.07,Volume:3413400}, + {Date:1644580800000,Open:3162.69,High:3180,Low:3054.68,Close:3065.87,Volume:3855000}, + {Date:1644840000000,Open:3035.02,High:3168.97,Low:3033,Close:3103.34,Volume:4161500}, + {Date:1644926400000,Open:3152.11,High:3160.14,Low:3092.75,Close:3130.21,Volume:2822000}, + {Date:1645012800000,Open:3115.81,High:3176.68,Low:3094.69,Close:3162.01,Volume:2635200}, + {Date:1645099200000,Open:3162.92,High:3206.98,Low:3090,Close:3093.05,Volume:3201600}, + {Date:1645185600000,Open:3109.99,High:3109.99,Low:3017.86,Close:3052.03,Volume:3180200}, + {Date:1645531200000,Open:3009.57,High:3059.65,Low:2969.71,Close:3003.95,Volume:3306400}, + {Date:1645617600000,Open:3033.01,High:3035.26,Low:2893.02,Close:2896.54,Volume:3212200}, + {Date:1645704000000,Open:2796.75,High:3034.98,Low:2790,Close:3027.16,Volume:5039300}, + {Date:1645790400000,Open:3011,High:3079.8,Low:2984.27,Close:3075.77,Volume:3119800}, + {Date:1646049600000,Open:3048.5,High:3089,Low:3017,Close:3071.26,Volume:2878500}, + {Date:1646136000000,Open:3054.65,High:3081.98,Low:2999.54,Close:3022.84,Volume:2243700}, + {Date:1646222400000,Open:3016.98,High:3059.99,Low:2975,Close:3041.05,Volume:2366700}, + {Date:1646308800000,Open:3070.63,High:3078.58,Low:2937.12,Close:2957.97,Volume:3259900}, + {Date:1646395200000,Open:2943.18,High:2957,Low:2876.14,Close:2912.82,Volume:3046700}, + {Date:1646654400000,Open:2908.87,High:2921.89,Low:2748.33,Close:2749.06,Volume:4346700}, + {Date:1646740800000,Open:2733.67,High:2813.99,Low:2671.45,Close:2720.29,Volume:4583100}, + {Date:1646827200000,Open:2790,High:2805,Low:2736.56,Close:2785.58,Volume:4132800}, + {Date:1646913600000,Open:2913.7,High:2973.49,Low:2879.56,Close:2936.35,Volume:6753100}, + {Date:1647000000000,Open:2991.49,High:2993.5,Low:2907.38,Close:2910.49,Volume:3440500}, + {Date:1647259200000,Open:2919.62,High:2949,Low:2817.68,Close:2837.06,Volume:3704300}, + {Date:1647345600000,Open:2857,High:2959.7,Low:2840,Close:2947.33,Volume:3779200}, + {Date:1647432000000,Open:2970,High:3063,Low:2947.07,Close:3062.08,Volume:4247900}, + {Date:1647518400000,Open:3052.81,High:3149.97,Low:3042.8,Close:3144.78,Volume:3646700}, + {Date:1647604800000,Open:3136.26,High:3231.88,Low:3120.22,Close:3225.01,Volume:5141300}, + {Date:1647864000000,Open:3222.42,High:3261.68,Low:3191.06,Close:3229.83,Volume:3326900}, + {Date:1647950400000,Open:3236.11,High:3323.34,Low:3233.98,Close:3297.78,Volume:3204300}, + {Date:1648036800000,Open:3274.1,High:3327.4,Low:3253.74,Close:3268.16,Volume:2790600}, + {Date:1648123200000,Open:3274.99,High:3282.37,Low:3201,Close:3272.99,Volume:2839900}, + {Date:1648209600000,Open:3280,High:3307.37,Low:3245,Close:3295.47,Volume:2451600}, + {Date:1648468800000,Open:3299.5,High:3380.75,Low:3298,Close:3379.81,Volume:2992700}, + {Date:1648555200000,Open:3407.68,High:3416.63,Low:3357.37,Close:3386.3,Volume:3307700}, + {Date:1648641600000,Open:3370.19,High:3379.01,Low:3310,Close:3326.02,Volume:2808400} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/GOOG_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/GOOG_day.js new file mode 100644 index 00000000..67a89306 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/GOOG_day.js @@ -0,0 +1,255 @@ +window["GOOG_day"] = [ + {Date:1617192000000,Open:2059.12,High:2093.33,Low:2056.75,Close:2068.63,Volume:1459900}, + {Date:1617278400000,Open:2097.95,High:2142.94,Low:2096.89,Close:2137.75,Volume:1699000}, + {Date:1617624000000,Open:2152.94,High:2237.31,Low:2151.62,Close:2225.55,Volume:2164900}, + {Date:1617710400000,Open:2222.5,High:2237.66,Low:2214.8,Close:2224.75,Volume:1353000}, + {Date:1617796800000,Open:2226.13,High:2255,Low:2225.33,Close:2249.68,Volume:1289900}, + {Date:1617883200000,Open:2277.96,High:2284,Low:2257.68,Close:2265.44,Volume:1358300}, + {Date:1617969600000,Open:2256.7,High:2289.04,Low:2253.71,Close:2285.88,Volume:1044400}, + {Date:1618228800000,Open:2266.25,High:2275.32,Low:2238.47,Close:2254.79,Volume:1565900}, + {Date:1618315200000,Open:2261.47,High:2277.21,Low:2256.09,Close:2267.27,Volume:1165500}, + {Date:1618401600000,Open:2275.16,High:2277.99,Low:2249.19,Close:2254.84,Volume:1011000}, + {Date:1618488000000,Open:2276.98,High:2306.6,Low:2266,Close:2296.66,Volume:1373600}, + {Date:1618574400000,Open:2303,High:2306.44,Low:2284.45,Close:2297.76,Volume:1129800}, + {Date:1618833600000,Open:2291.98,High:2318.45,Low:2287.84,Close:2302.4,Volume:1234400}, + {Date:1618920000000,Open:2307.89,High:2309.6,Low:2271.71,Close:2293.63,Volume:1088700}, + {Date:1619006400000,Open:2285.25,High:2295.32,Low:2258.57,Close:2293.29,Volume:1196500}, + {Date:1619092800000,Open:2293.23,High:2303.76,Low:2256.45,Close:2267.92,Volume:1054800}, + {Date:1619179200000,Open:2283.47,High:2325.82,Low:2278.21,Close:2315.3,Volume:1433500}, + {Date:1619438400000,Open:2319.93,High:2341.26,Low:2313.84,Close:2326.74,Volume:1041700}, + {Date:1619524800000,Open:2336,High:2337.45,Low:2304.27,Close:2307.12,Volume:1598600}, + {Date:1619611200000,Open:2407.15,High:2452.38,Low:2374.85,Close:2379.91,Volume:2986400}, + {Date:1619697600000,Open:2410.33,High:2436.52,Low:2402.28,Close:2429.89,Volume:1977700}, + {Date:1619784000000,Open:2404.49,High:2427.14,Low:2402.16,Close:2410.12,Volume:1957100}, + {Date:1620043200000,Open:2402.72,High:2419.7,Low:2384.5,Close:2395.17,Volume:1689400}, + {Date:1620129600000,Open:2369.74,High:2379.26,Low:2311.7,Close:2354.25,Volume:1756000}, + {Date:1620216000000,Open:2368.42,High:2382.2,Low:2351.41,Close:2356.74,Volume:1090300}, + {Date:1620302400000,Open:2350.64,High:2382.71,Low:2342.34,Close:2381.35,Volume:1030900}, + {Date:1620388800000,Open:2400,High:2416.41,Low:2390,Close:2398.69,Volume:1163600}, + {Date:1620648000000,Open:2374.89,High:2378,Low:2334.73,Close:2341.66,Volume:1300300}, + {Date:1620734400000,Open:2291.86,High:2322,Low:2283,Close:2308.76,Volume:1605500}, + {Date:1620820800000,Open:2261.71,High:2285.37,Low:2230.05,Close:2239.08,Volume:1746700}, + {Date:1620907200000,Open:2261.09,High:2276.6,Low:2242.72,Close:2261.97,Volume:1333500}, + {Date:1620993600000,Open:2291.83,High:2321.14,Low:2283.32,Close:2316.16,Volume:1331200}, + {Date:1621252800000,Open:2309.32,High:2323.34,Low:2295,Close:2321.41,Volume:992100}, + {Date:1621339200000,Open:2336.91,High:2343.15,Low:2303.16,Close:2303.43,Volume:865100}, + {Date:1621425600000,Open:2264.4,High:2316.76,Low:2263.52,Close:2308.71,Volume:967500}, + {Date:1621512000000,Open:2328.04,High:2360.34,Low:2321.09,Close:2356.09,Volume:1191600}, + {Date:1621598400000,Open:2365.99,High:2369,Low:2342.37,Close:2345.1,Volume:1141600}, + {Date:1621857600000,Open:2367,High:2418.48,Low:2360.11,Close:2406.67,Volume:1062200}, + {Date:1621944000000,Open:2420,High:2432.89,Low:2402.99,Close:2409.07,Volume:941900}, + {Date:1622030400000,Open:2412.83,High:2442.94,Low:2412.51,Close:2433.53,Volume:1092800}, + {Date:1622116800000,Open:2436.94,High:2440,Low:2402,Close:2402.51,Volume:1948100}, + {Date:1622203200000,Open:2421.96,High:2428.14,Low:2407.69,Close:2411.56,Volume:1205400}, + {Date:1622548800000,Open:2422,High:2437.97,Low:2404.88,Close:2429.81,Volume:958300}, + {Date:1622635200000,Open:2435.31,High:2442,Low:2404.2,Close:2421.28,Volume:857900}, + {Date:1622721600000,Open:2395.02,High:2409.75,Low:2382.83,Close:2404.61,Volume:917300}, + {Date:1622808000000,Open:2422.52,High:2453.86,Low:2417.77,Close:2451.76,Volume:1297400}, + {Date:1623067200000,Open:2451.32,High:2468,Low:2441.07,Close:2466.09,Volume:1192500}, + {Date:1623153600000,Open:2479.9,High:2494.5,Low:2468.24,Close:2482.85,Volume:1253000}, + {Date:1623240000000,Open:2499.5,High:2505,Low:2487.33,Close:2491.4,Volume:1006300}, + {Date:1623326400000,Open:2494.01,High:2523.26,Low:2494,Close:2521.6,Volume:1561700}, + {Date:1623412800000,Open:2524.92,High:2526.99,Low:2498.29,Close:2513.93,Volume:1262000}, + {Date:1623672000000,Open:2513.39,High:2528.23,Low:2500.94,Close:2527.04,Volume:1127500}, + {Date:1623758400000,Open:2530.44,High:2537.24,Low:2512.97,Close:2520.66,Volume:1109100}, + {Date:1623844800000,Open:2524.95,High:2530.47,Low:2483,Close:2513.93,Volume:1315800}, + {Date:1623931200000,Open:2510.46,High:2543.93,Low:2510.3,Close:2527.42,Volume:1287800}, + {Date:1624017600000,Open:2514.11,High:2527.78,Low:2492.06,Close:2511.35,Volume:2665300}, + {Date:1624276800000,Open:2514.8,High:2540.74,Low:2502.69,Close:2529.1,Volume:1312800}, + {Date:1624363200000,Open:2529,High:2545.4,Low:2520.53,Close:2539.99,Volume:1049200}, + {Date:1624449600000,Open:2531,High:2555.92,Low:2525.04,Close:2529.23,Volume:984700}, + {Date:1624536000000,Open:2541.07,High:2550.71,Low:2539.2,Close:2545.64,Volume:946700}, + {Date:1624622400000,Open:2539.14,High:2550.1,Low:2528.88,Close:2539.9,Volume:1674200}, + {Date:1624881600000,Open:2540,High:2546.74,Low:2519.48,Close:2536.39,Volume:1405500}, + {Date:1624968000000,Open:2535.45,High:2540,Low:2508.74,Close:2520.37,Volume:1047500}, + {Date:1625054400000,Open:2513.07,High:2516,Low:2495.15,Close:2506.32,Volume:1200300}, + {Date:1625140800000,Open:2497,High:2529.25,Low:2497,Close:2527.37,Volume:856000}, + {Date:1625227200000,Open:2536.79,High:2576.96,Low:2535.38,Close:2574.38,Volume:1058000}, + {Date:1625572800000,Open:2588.99,High:2597.69,Low:2568.18,Close:2595.42,Volume:1067500}, + {Date:1625659200000,Open:2606.82,High:2612.8,Low:2595.2,Close:2601.55,Volume:834000}, + {Date:1625745600000,Open:2565,High:2600.65,Low:2560.8,Close:2583.54,Volume:989000}, + {Date:1625832000000,Open:2578.89,High:2596.99,Low:2578.87,Close:2591.49,Volume:755300}, + {Date:1626091200000,Open:2596.67,High:2615.4,Low:2592,Close:2611.28,Volume:847200}, + {Date:1626177600000,Open:2617.63,High:2640.84,Low:2612.74,Close:2619.89,Volume:830900}, + {Date:1626264000000,Open:2638.03,High:2659.92,Low:2637.96,Close:2641.65,Volume:895600}, + {Date:1626350400000,Open:2650,High:2651.9,Low:2611.96,Close:2625.33,Volume:829300}, + {Date:1626436800000,Open:2632.82,High:2643.66,Low:2616.43,Close:2636.91,Volume:742800}, + {Date:1626696000000,Open:2623.11,High:2624.94,Low:2570.74,Close:2585.08,Volume:1285500}, + {Date:1626782400000,Open:2600.08,High:2640.03,Low:2583.77,Close:2622.03,Volume:954200}, + {Date:1626868800000,Open:2615.74,High:2652.34,Low:2612.03,Close:2652.01,Volume:737100}, + {Date:1626955200000,Open:2653,High:2670.09,Low:2648,Close:2666.57,Volume:680400}, + {Date:1627041600000,Open:2705.2,High:2776.17,Low:2694.01,Close:2756.32,Volume:1318900}, + {Date:1627300800000,Open:2765,High:2794.26,Low:2753.02,Close:2792.89,Volume:1152600}, + {Date:1627387200000,Open:2800.22,High:2800.22,Low:2702,Close:2735.93,Volume:2108200}, + {Date:1627473600000,Open:2771.24,High:2793.52,Low:2727,Close:2727.63,Volume:2734400}, + {Date:1627560000000,Open:2727.61,High:2743.03,Low:2722.76,Close:2730.81,Volume:964200}, + {Date:1627646400000,Open:2710.22,High:2715.43,Low:2696.28,Close:2704.42,Volume:1197700}, + {Date:1627905600000,Open:2709.69,High:2720.41,Low:2693.39,Close:2719.79,Volume:1007000}, + {Date:1627992000000,Open:2720,High:2726.71,Low:2683.67,Close:2725.6,Volume:953200}, + {Date:1628078400000,Open:2724.99,High:2730.76,Low:2708.3,Close:2720.57,Volume:826400}, + {Date:1628164800000,Open:2720.57,High:2739,Low:2712,Close:2738.8,Volume:593300}, + {Date:1628251200000,Open:2725.9,High:2741.6,Low:2720.93,Close:2740.72,Volume:678000}, + {Date:1628510400000,Open:2738.98,High:2766.43,Low:2728.57,Close:2760.04,Volume:618700}, + {Date:1628596800000,Open:2761.59,High:2771.03,Low:2744.53,Close:2761.93,Volume:801700}, + {Date:1628683200000,Open:2765.66,High:2776.96,Low:2747,Close:2753.79,Volume:760200}, + {Date:1628769600000,Open:2754.26,High:2768.36,Low:2735.58,Close:2767.79,Volume:732300}, + {Date:1628856000000,Open:2767.15,High:2773.48,Low:2760.1,Close:2768.12,Volume:629000}, + {Date:1629115200000,Open:2760,High:2779.81,Low:2723.31,Close:2778.32,Volume:902000}, + {Date:1629201600000,Open:2763.82,High:2774.37,Low:2735.75,Close:2746.01,Volume:1063600}, + {Date:1629288000000,Open:2742.31,High:2765.88,Low:2728.42,Close:2731.4,Volume:746700}, + {Date:1629374400000,Open:2709.35,High:2749.04,Low:2707.12,Close:2738.27,Volume:914800}, + {Date:1629460800000,Open:2741.66,High:2772.29,Low:2729.34,Close:2768.74,Volume:778200}, + {Date:1629720000000,Open:2779.97,High:2843.54,Low:2774.96,Close:2821.99,Volume:1054500}, + {Date:1629806400000,Open:2830.87,High:2860.15,Low:2827.07,Close:2847.97,Volume:756300}, + {Date:1629892800000,Open:2857.66,High:2866.26,Low:2848.79,Close:2859,Volume:641900}, + {Date:1629979200000,Open:2852.37,High:2862.7,Low:2841.83,Close:2842.46,Volume:746100}, + {Date:1630065600000,Open:2842.25,High:2900.22,Low:2840.4,Close:2891.01,Volume:1228100}, + {Date:1630324800000,Open:2894.09,High:2929.79,Low:2892,Close:2909.39,Volume:845800}, + {Date:1630411200000,Open:2917.69,High:2922.24,Low:2900,Close:2909.24,Volume:1337800}, + {Date:1630497600000,Open:2913,High:2936.41,Low:2912.29,Close:2916.84,Volume:791200}, + {Date:1630584000000,Open:2918.99,High:2926.5,Low:2882.13,Close:2884.38,Volume:1092200}, + {Date:1630670400000,Open:2882.92,High:2907.54,Low:2870.1,Close:2895.5,Volume:955200}, + {Date:1631016000000,Open:2894.99,High:2916.48,Low:2890.82,Close:2910.38,Volume:758500}, + {Date:1631102400000,Open:2907.87,High:2911.02,Low:2884,Close:2897.67,Volume:774300}, + {Date:1631188800000,Open:2897.67,High:2913.39,Low:2888.68,Close:2898.27,Volume:739900}, + {Date:1631275200000,Open:2908.87,High:2920.38,Low:2834.83,Close:2838.42,Volume:1644800}, + {Date:1631534400000,Open:2864.02,High:2883.82,Low:2845.65,Close:2869.3,Volume:1008800}, + {Date:1631620800000,Open:2883.22,High:2894.55,Low:2858.11,Close:2868.12,Volume:945800}, + {Date:1631707200000,Open:2875.18,High:2911.63,Low:2845.12,Close:2904.12,Volume:1032400}, + {Date:1631793600000,Open:2902.42,High:2904,Low:2868.33,Close:2887.47,Volume:1014600}, + {Date:1631880000000,Open:2875.97,High:2884.99,Low:2821.23,Close:2829.27,Volume:3002000}, + {Date:1632139200000,Open:2780,High:2787.25,Low:2741.06,Close:2780.34,Volume:1745900}, + {Date:1632225600000,Open:2802.34,High:2816.23,Low:2778.11,Close:2792.93,Volume:906500}, + {Date:1632312000000,Open:2801.01,High:2831.67,Low:2789.44,Close:2818.77,Volume:1103400}, + {Date:1632398400000,Open:2832.19,High:2845.05,Low:2821.93,Close:2836.53,Volume:863600}, + {Date:1632484800000,Open:2818.92,High:2858.07,Low:2817.01,Close:2852.66,Volume:747500}, + {Date:1632744000000,Open:2831.71,High:2850,Low:2810,Close:2830.02,Volume:942200}, + {Date:1632830400000,Open:2781.77,High:2792.13,Low:2714,Close:2723.68,Volume:2109500}, + {Date:1632916800000,Open:2742.19,High:2747.97,Low:2685,Close:2690.42,Volume:1316900}, + {Date:1633003200000,Open:2686.5,High:2711.8,Low:2660,Close:2665.31,Volume:1764700}, + {Date:1633089600000,Open:2671.09,High:2741.42,Low:2667.55,Close:2729.25,Volume:1419400}, + {Date:1633348800000,Open:2713.99,High:2714,Low:2623.33,Close:2675.3,Volume:1576500}, + {Date:1633435200000,Open:2680,High:2747.24,Low:2680,Close:2723.54,Volume:1206300}, + {Date:1633521600000,Open:2692.51,High:2757.04,Low:2689.73,Close:2747.08,Volume:988200}, + {Date:1633608000000,Open:2777.26,High:2803.09,Low:2771.26,Close:2783.71,Volume:912500}, + {Date:1633694400000,Open:2798.12,High:2806.34,Low:2788.59,Close:2801.12,Volume:946200}, + {Date:1633953600000,Open:2796,High:2815.27,Low:2776.13,Close:2776.95,Volume:829200}, + {Date:1634040000000,Open:2792.75,High:2793.9,Low:2725,Close:2734.26,Volume:1126800}, + {Date:1634126400000,Open:2755,High:2771,Low:2739.53,Close:2758,Volume:819000}, + {Date:1634212800000,Open:2799.04,High:2833.03,Low:2786.78,Close:2828.24,Volume:1071300}, + {Date:1634299200000,Open:2844,High:2844,Low:2821.29,Close:2833.5,Volume:1062500}, + {Date:1634558400000,Open:2824.27,High:2859.98,Low:2824.27,Close:2859.21,Volume:828200}, + {Date:1634644800000,Open:2865.83,High:2882.14,Low:2861.92,Close:2876.44,Volume:765800}, + {Date:1634731200000,Open:2884.45,High:2884.96,Low:2838.24,Close:2848.3,Volume:897000}, + {Date:1634817600000,Open:2843.84,High:2856.99,Low:2832.74,Close:2855.61,Volume:742500}, + {Date:1634904000000,Open:2807.02,High:2831.17,Low:2743.41,Close:2772.5,Volume:1509100}, + {Date:1635163200000,Open:2776.21,High:2784.12,Low:2734.97,Close:2775.46,Volume:1054100}, + {Date:1635249600000,Open:2812.12,High:2816.79,Low:2780.11,Close:2793.44,Volume:1412900}, + {Date:1635336000000,Open:2798.05,High:2982.36,Low:2798.05,Close:2928.55,Volume:2592500}, + {Date:1635422400000,Open:2945.98,High:2948.49,Low:2895.27,Close:2922.58,Volume:1620900}, + {Date:1635508800000,Open:2910.4,High:2972.26,Low:2903.33,Close:2965.41,Volume:1447700}, + {Date:1635768000000,Open:2963.3,High:2967.99,Low:2871.59,Close:2875.48,Volume:1613600}, + {Date:1635854400000,Open:2896.19,High:2938.41,Low:2892.82,Close:2917.26,Volume:1057500}, + {Date:1635940800000,Open:2925.5,High:2938.21,Low:2901.07,Close:2935.8,Volume:894300}, + {Date:1636027200000,Open:2944,High:2999,Low:2932.7,Close:2973.66,Volume:1235000}, + {Date:1636113600000,Open:2987.07,High:3011.42,Low:2973.04,Close:2984.82,Volume:1020400}, + {Date:1636372800000,Open:3000,High:3020.69,Low:2982.4,Close:2987.03,Volume:919400}, + {Date:1636459200000,Open:2994.92,High:3007.57,Low:2950.14,Close:2984.97,Volume:843800}, + {Date:1636545600000,Open:2960.2,High:2974,Low:2906.5,Close:2932.52,Volume:1135400}, + {Date:1636632000000,Open:2942.14,High:2970.04,Low:2933.89,Close:2934.96,Volume:623200}, + {Date:1636718400000,Open:2956.63,High:2997.19,Low:2929.08,Close:2992.91,Volume:852400}, + {Date:1636977600000,Open:3000,High:3009.54,Low:2973.05,Close:2987.76,Volume:812400}, + {Date:1637064000000,Open:2983.41,High:2996.65,Low:2967,Close:2981.52,Volume:862700}, + {Date:1637150400000,Open:2984.58,High:2992.52,Low:2971.26,Close:2981.24,Volume:764500}, + {Date:1637236800000,Open:2982.92,High:3032.2,Low:2979.97,Close:3014.18,Volume:1332900}, + {Date:1637323200000,Open:3020,High:3037,Low:2997.75,Close:2999.05,Volume:988300}, + {Date:1637582400000,Open:3002.83,High:3014.89,Low:2940.11,Close:2941.57,Volume:1230400}, + {Date:1637668800000,Open:2942.26,High:2953.88,Low:2897.79,Close:2935.14,Volume:906300}, + {Date:1637755200000,Open:2927,High:2940,Low:2903.98,Close:2934.35,Volume:823200}, + {Date:1637928000000,Open:2900.31,High:2905.94,Low:2849.71,Close:2856.12,Volume:849600}, + {Date:1638187200000,Open:2885.97,High:2937.24,Low:2885.97,Close:2922.28,Volume:1313800}, + {Date:1638273600000,Open:2909,High:2932.57,Low:2841.32,Close:2849.04,Volume:2079500}, + {Date:1638360000000,Open:2884.25,High:2929.98,Low:2830,Close:2832.36,Volume:1423800}, + {Date:1638446400000,Open:2836.48,High:2893.5,Low:2819.64,Close:2875.53,Volume:1062500}, + {Date:1638532800000,Open:2889.91,High:2904.26,Low:2823,Close:2850.41,Volume:1334400}, + {Date:1638792000000,Open:2871.48,High:2887.03,Low:2812.94,Close:2875.93,Volume:1109900}, + {Date:1638878400000,Open:2919,High:2966,Low:2914.05,Close:2960.73,Volume:1162900}, + {Date:1638964800000,Open:2966.63,High:2983.13,Low:2944,Close:2974.41,Volume:948200}, + {Date:1639051200000,Open:2963.52,High:2992.1,Low:2950.58,Close:2962.12,Volume:929000}, + {Date:1639137600000,Open:2982,High:2988,Low:2947.15,Close:2973.5,Volume:1081700}, + {Date:1639396800000,Open:2968.88,High:2971.25,Low:2927.2,Close:2934.09,Volume:1205200}, + {Date:1639483200000,Open:2895.4,High:2908.84,Low:2844.85,Close:2899.41,Volume:1238900}, + {Date:1639569600000,Open:2887.32,High:2950.34,Low:2854.11,Close:2947.37,Volume:1364000}, + {Date:1639656000000,Open:2961.54,High:2971.03,Low:2881.85,Close:2896.77,Volume:1370000}, + {Date:1639742400000,Open:2854.29,High:2889.2,Low:2835.76,Close:2856.06,Volume:2170200}, + {Date:1640001600000,Open:2813.59,High:2852.21,Low:2805,Close:2848.03,Volume:1013200}, + {Date:1640088000000,Open:2863,High:2893.84,Low:2834.7,Close:2884.41,Volume:977400}, + {Date:1640174400000,Open:2882,High:2946.06,Low:2879.26,Close:2938.98,Volume:921900}, + {Date:1640260800000,Open:2941.79,High:2971.45,Low:2939.02,Close:2942.85,Volume:690900}, + {Date:1640606400000,Open:2949.27,High:2968.53,Low:2945,Close:2961.28,Volume:662800}, + {Date:1640692800000,Open:2967.49,High:2967.49,Low:2918.71,Close:2928.96,Volume:931200}, + {Date:1640779200000,Open:2928.59,High:2943.68,Low:2910.09,Close:2930.09,Volume:851100}, + {Date:1640865600000,Open:2929,High:2941.25,Low:2915.17,Close:2920.05,Volume:648900}, + {Date:1640952000000,Open:2910.88,High:2927.3,Low:2893.55,Close:2893.59,Volume:864900}, + {Date:1641211200000,Open:2889.51,High:2911,Low:2870.05,Close:2901.49,Volume:1260700}, + {Date:1641297600000,Open:2911.01,High:2932.2,Low:2876.32,Close:2888.33,Volume:1146400}, + {Date:1641384000000,Open:2883.62,High:2885.96,Low:2750.47,Close:2753.07,Volume:2482100}, + {Date:1641470400000,Open:2749.95,High:2793.72,Low:2735.27,Close:2751.02,Volume:1452500}, + {Date:1641556800000,Open:2758.1,High:2765.09,Low:2715.78,Close:2740.09,Volume:970400}, + {Date:1641816000000,Open:2701.98,High:2772.8,Low:2662.81,Close:2771.48,Volume:1704800}, + {Date:1641902400000,Open:2763.61,High:2806.59,Low:2736.27,Close:2800.35,Volume:1175100}, + {Date:1641988800000,Open:2831.09,High:2856.28,Low:2822.24,Close:2832.96,Volume:1182100}, + {Date:1642075200000,Open:2836.81,High:2863.71,Low:2778.28,Close:2782.62,Volume:1328300}, + {Date:1642161600000,Open:2750,High:2824.01,Low:2750,Close:2795.73,Volume:1191300}, + {Date:1642507200000,Open:2732,High:2747.83,Low:2712.34,Close:2725.81,Volume:1369100}, + {Date:1642593600000,Open:2738.77,High:2767.99,Low:2710,Close:2713.04,Volume:1039800}, + {Date:1642680000000,Open:2730.28,High:2758.24,Low:2662.89,Close:2670.13,Volume:1096500}, + {Date:1642766400000,Open:2660.24,High:2695.21,Low:2600.02,Close:2601.84,Volume:2096000}, + {Date:1643025600000,Open:2520.55,High:2615.57,Low:2492.84,Close:2607.44,Volume:2757400}, + {Date:1643112000000,Open:2568.71,High:2586.77,Low:2527.56,Close:2534.71,Volume:1800400}, + {Date:1643198400000,Open:2611.85,High:2656.15,Low:2543.07,Close:2584.8,Volume:1981500}, + {Date:1643284800000,Open:2627.22,High:2652.2,Low:2578.9,Close:2582.42,Volume:1512400}, + {Date:1643371200000,Open:2600,High:2667.41,Low:2573.89,Close:2665.79,Volume:1525900}, + {Date:1643630400000,Open:2683.96,High:2716.87,Low:2645.48,Close:2713.97,Volume:1702800}, + {Date:1643716800000,Open:2756.7,High:2764,Low:2691.36,Close:2757.57,Volume:2560200}, + {Date:1643803200000,Open:3037.27,High:3042,Low:2911.15,Close:2960.73,Volume:4487500}, + {Date:1643889600000,Open:2905.9,High:2982.35,Low:2844.1,Close:2853.01,Volume:2846500}, + {Date:1643976000000,Open:2860.34,High:2890.71,Low:2796.35,Close:2860.32,Volume:2461200}, + {Date:1644235200000,Open:2874.18,High:2876.93,Low:2773.98,Close:2778.76,Volume:2230500}, + {Date:1644321600000,Open:2779.82,High:2796.74,Low:2737.46,Close:2784.26,Volume:1712800}, + {Date:1644408000000,Open:2817,High:2843.51,Low:2807.54,Close:2829.06,Volume:1431400}, + {Date:1644494400000,Open:2790,High:2828.62,Low:2761,Close:2772.05,Volume:1650900}, + {Date:1644580800000,Open:2775,High:2785.67,Low:2665.77,Close:2682.6,Volume:1940400}, + {Date:1644840000000,Open:2667.31,High:2723.33,Low:2666.04,Close:2706,Volume:1339600}, + {Date:1644926400000,Open:2749.43,High:2758,Low:2710.79,Close:2728.51,Volume:1328900}, + {Date:1645012800000,Open:2728.61,High:2758.92,Low:2696.47,Close:2749.75,Volume:1280500}, + {Date:1645099200000,Open:2723,High:2736.79,Low:2644.04,Close:2646.17,Volume:1548400}, + {Date:1645185600000,Open:2660.75,High:2676.48,Low:2606.14,Close:2609.35,Volume:1592900}, + {Date:1645531200000,Open:2599.7,High:2638.01,Low:2554.82,Close:2588.05,Volume:1945300}, + {Date:1645617600000,Open:2621.57,High:2634.98,Low:2550.07,Close:2551.7,Volume:1321600}, + {Date:1645704000000,Open:2500,High:2660.74,Low:2495.29,Close:2653.47,Volume:2158300}, + {Date:1645790400000,Open:2670.51,High:2707.78,Low:2635.3,Close:2690.39,Volume:1311800}, + {Date:1646049600000,Open:2665.69,High:2712.81,Low:2656.5,Close:2697.82,Volume:1483800}, + {Date:1646136000000,Open:2689.6,High:2722.22,Low:2667.57,Close:2683.36,Volume:1232000}, + {Date:1646222400000,Open:2692.17,High:2712.31,Low:2668.65,Close:2695.03,Volume:1198300}, + {Date:1646308800000,Open:2719.57,High:2734.28,Low:2668.62,Close:2686.16,Volume:989000}, + {Date:1646395200000,Open:2667.65,High:2683.98,Low:2608.17,Close:2642.44,Volume:1222300}, + {Date:1646654400000,Open:2638.08,High:2638.08,Low:2528.2,Close:2529.29,Volume:1958900}, + {Date:1646740800000,Open:2525.01,High:2624.93,Low:2517.22,Close:2545.57,Volume:1762500}, + {Date:1646827200000,Open:2628,High:2683.97,Low:2601.76,Close:2677.32,Volume:1612900}, + {Date:1646913600000,Open:2629.25,High:2670.77,Low:2628.02,Close:2653.64,Volume:1213300}, + {Date:1647000000000,Open:2679.99,High:2684,Low:2605.93,Close:2609.51,Volume:1328500}, + {Date:1647259200000,Open:2611.46,High:2620.52,Low:2528.26,Close:2534.82,Volume:1512700}, + {Date:1647345600000,Open:2554.83,High:2610.34,Low:2531.36,Close:2593.21,Volume:1514600}, + {Date:1647432000000,Open:2620,High:2675.42,Low:2584.02,Close:2673.81,Volume:1602900}, + {Date:1647518400000,Open:2666.42,High:2694.79,Low:2654.38,Close:2692.01,Volume:1199700}, + {Date:1647604800000,Open:2677.68,High:2738.27,Low:2658.64,Close:2736.03,Volume:2291100}, + {Date:1647864000000,Open:2736.95,High:2751.65,Low:2692.23,Close:2729.57,Volume:1331600}, + {Date:1647950400000,Open:2730,High:2830,Low:2730,Close:2805.55,Volume:1488800}, + {Date:1648036800000,Open:2782.77,High:2800.5,Low:2763.33,Close:2770.07,Volume:1265100}, + {Date:1648123200000,Open:2785.45,High:2827.93,Low:2760.79,Close:2826.24,Volume:1027200}, + {Date:1648209600000,Open:2835.08,High:2839.19,Low:2793.99,Close:2830.43,Volume:963500}, + {Date:1648468800000,Open:2813.69,High:2839.53,Low:2796.56,Close:2839,Volume:1188700}, + {Date:1648555200000,Open:2863.21,High:2883.25,Low:2849.68,Close:2865,Volume:1433900}, + {Date:1648641600000,Open:2857.4,High:2869.61,Low:2843.36,Close:2852.89,Volume:1052300} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/MSFT_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/MSFT_day.js new file mode 100644 index 00000000..e9c8fb4d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/MSFT_day.js @@ -0,0 +1,255 @@ +window["MSFT_day"] = [ + {Date:1617192000000,Open:232.91,High:239.1,Low:232.39,Close:235.77,Volume:43623500}, + {Date:1617278400000,Open:238.47,High:242.84,Low:238.05,Close:242.35,Volume:30338000}, + {Date:1617624000000,Open:242.76,High:249.96,Low:242.7,Close:249.07,Volume:36910600}, + {Date:1617710400000,Open:247.61,High:249.4,Low:246.88,Close:247.86,Volume:22931900}, + {Date:1617796800000,Open:247.81,High:250.93,Low:247.19,Close:249.9,Volume:22719800}, + {Date:1617883200000,Open:252.77,High:254.14,Low:252,Close:253.25,Volume:23625200}, + {Date:1617969600000,Open:252.87,High:255.99,Low:252.44,Close:255.85,Volume:24326800}, + {Date:1618228800000,Open:254.71,High:257.67,Low:254.62,Close:255.91,Volume:27148700}, + {Date:1618315200000,Open:257.26,High:259.19,Low:256.83,Close:258.49,Volume:23837500}, + {Date:1618401600000,Open:257.48,High:258.83,Low:255.16,Close:255.59,Volume:23070900}, + {Date:1618488000000,Open:257.93,High:259.93,Low:257.73,Close:259.5,Volume:25627500}, + {Date:1618574400000,Open:259.47,High:261,Low:257.6,Close:260.74,Volume:24878600}, + {Date:1618833600000,Open:260.19,High:261.48,Low:257.82,Close:258.74,Volume:23209300}, + {Date:1618920000000,Open:257.82,High:260.2,Low:256.84,Close:258.26,Volume:19722900}, + {Date:1619006400000,Open:258.94,High:260.68,Low:257.25,Close:260.58,Volume:24030400}, + {Date:1619092800000,Open:260.21,High:261.78,Low:255.64,Close:257.17,Volume:25606200}, + {Date:1619179200000,Open:257.88,High:261.51,Low:257.27,Close:261.15,Volume:21462600}, + {Date:1619438400000,Open:261.66,High:262.44,Low:260.17,Close:261.55,Volume:19763300}, + {Date:1619524800000,Open:261.58,High:263.19,Low:260.12,Close:261.97,Volume:31014200}, + {Date:1619611200000,Open:256.08,High:256.54,Low:252.95,Close:254.56,Volume:46903100}, + {Date:1619697600000,Open:255.46,High:256.1,Low:249,Close:252.51,Volume:40589000}, + {Date:1619784000000,Open:249.74,High:253.08,Low:249.6,Close:252.18,Volume:30945100}, + {Date:1620043200000,Open:253.4,High:254.35,Low:251.12,Close:251.86,Volume:19626600}, + {Date:1620129600000,Open:250.97,High:251.21,Low:245.76,Close:247.79,Volume:32756100}, + {Date:1620216000000,Open:249.06,High:249.5,Low:245.82,Close:246.47,Volume:21901300}, + {Date:1620302400000,Open:246.45,High:249.86,Low:244.69,Close:249.73,Volume:26491100}, + {Date:1620388800000,Open:252.15,High:254.3,Low:251.17,Close:252.46,Volume:27032900}, + {Date:1620648000000,Open:250.87,High:251.73,Low:247.12,Close:247.18,Volume:29299900}, + {Date:1620734400000,Open:244.55,High:246.6,Low:242.57,Close:246.23,Volume:33641600}, + {Date:1620820800000,Open:242.17,High:244.38,Low:238.07,Close:239,Volume:36684400}, + {Date:1620907200000,Open:241.8,High:245.6,Low:241.42,Close:243.03,Volume:29624300}, + {Date:1620993600000,Open:245.58,High:249.18,Low:245.49,Close:248.15,Volume:23901100}, + {Date:1621252800000,Open:246.55,High:246.59,Low:243.52,Close:245.18,Volume:24970200}, + {Date:1621339200000,Open:246.27,High:246.41,Low:242.9,Close:243.08,Volume:20168000}, + {Date:1621425600000,Open:239.31,High:243.23,Low:238.6,Close:243.12,Volume:25739800}, + {Date:1621512000000,Open:243.96,High:247.95,Low:243.86,Close:246.48,Volume:21800700}, + {Date:1621598400000,Open:247.57,High:248.33,Low:244.74,Close:245.17,Volume:21863100}, + {Date:1621857600000,Open:247.79,High:251.16,Low:247.51,Close:250.78,Volume:21411500}, + {Date:1621944000000,Open:251.77,High:252.75,Low:250.82,Close:251.72,Volume:17704300}, + {Date:1622030400000,Open:251.43,High:252.94,Low:250.75,Close:251.49,Volume:17771600}, + {Date:1622116800000,Open:251.17,High:251.48,Low:249.25,Close:249.31,Volume:24426200}, + {Date:1622203200000,Open:251,High:252.08,Low:249.56,Close:249.68,Volume:18270200}, + {Date:1622548800000,Open:251.23,High:251.29,Low:246.96,Close:247.4,Volume:23213300}, + {Date:1622635200000,Open:248.13,High:249.27,Low:245.84,Close:247.3,Volume:19406700}, + {Date:1622721600000,Open:245.22,High:246.34,Low:243,Close:245.71,Volume:25307700}, + {Date:1622808000000,Open:247.76,High:251.65,Low:247.51,Close:250.79,Volume:25281100}, + {Date:1623067200000,Open:249.98,High:254.09,Low:249.81,Close:253.81,Volume:23079200}, + {Date:1623153600000,Open:255.16,High:256.01,Low:252.51,Close:252.57,Volume:22455000}, + {Date:1623240000000,Open:253.81,High:255.53,Low:253.21,Close:253.59,Volume:17937600}, + {Date:1623326400000,Open:254.29,High:257.46,Low:253.67,Close:257.24,Volume:24563600}, + {Date:1623412800000,Open:257.99,High:258.49,Low:256.61,Close:257.89,Volume:18999700}, + {Date:1623672000000,Open:257.9,High:259.95,Low:256.8,Close:259.89,Volume:19150500}, + {Date:1623758400000,Open:259.77,High:259.99,Low:257.68,Close:258.36,Volume:18038900}, + {Date:1623844800000,Open:259.4,High:260.58,Low:254.42,Close:257.38,Volume:27220000}, + {Date:1623931200000,Open:256.07,High:261.75,Low:256.01,Close:260.9,Volume:27565500}, + {Date:1624017600000,Open:259.63,High:262.3,Low:258.75,Close:259.43,Volume:37202200}, + {Date:1624276800000,Open:259.82,High:263.52,Low:257.92,Close:262.63,Volume:26696100}, + {Date:1624363200000,Open:262.72,High:265.79,Low:262.4,Close:265.51,Volume:24694100}, + {Date:1624449600000,Open:265.99,High:266.83,Low:264.43,Close:265.27,Volume:19518700}, + {Date:1624536000000,Open:266.16,High:267.85,Low:265.47,Close:266.69,Volume:21446900}, + {Date:1624622400000,Open:266.23,High:267.25,Low:264.76,Close:265.02,Volume:25611100}, + {Date:1624881600000,Open:266.19,High:268.9,Low:265.91,Close:268.72,Volume:19590000}, + {Date:1624968000000,Open:268.87,High:271.65,Low:267.98,Close:271.4,Volume:19937800}, + {Date:1625054400000,Open:270.69,High:271.36,Low:269.6,Close:270.9,Volume:21656500}, + {Date:1625140800000,Open:269.61,High:271.84,Low:269.6,Close:271.6,Volume:16725300}, + {Date:1625227200000,Open:272.82,High:278,Low:272.5,Close:277.65,Volume:26458000}, + {Date:1625572800000,Open:278.03,High:279.37,Low:274.3,Close:277.66,Volume:31565600}, + {Date:1625659200000,Open:279.4,High:280.69,Low:277.15,Close:279.93,Volume:23260000}, + {Date:1625745600000,Open:276.9,High:278.73,Low:274.87,Close:277.42,Volume:24618600}, + {Date:1625832000000,Open:275.72,High:278.05,Low:275.32,Close:277.94,Volume:23916700}, + {Date:1626091200000,Open:279.16,High:279.77,Low:276.58,Close:277.32,Volume:18931700}, + {Date:1626177600000,Open:277.52,High:282.85,Low:277.39,Close:280.98,Volume:26120100}, + {Date:1626264000000,Open:282.35,High:283.66,Low:280.55,Close:282.51,Volume:23113700}, + {Date:1626350400000,Open:282,High:282.51,Low:279.83,Close:281.03,Volume:22604200}, + {Date:1626436800000,Open:282.07,High:284.1,Low:279.46,Close:280.75,Volume:26186800}, + {Date:1626696000000,Open:278.93,High:280.37,Low:274.45,Close:277.01,Volume:32935600}, + {Date:1626782400000,Open:278.03,High:280.97,Low:276.26,Close:279.32,Volume:26259700}, + {Date:1626868800000,Open:278.9,High:281.52,Low:277.29,Close:281.4,Volume:24364300}, + {Date:1626955200000,Open:283.84,High:286.42,Low:283.42,Close:286.14,Volume:23384100}, + {Date:1627041600000,Open:287.37,High:289.99,Low:286.5,Close:289.67,Volume:22768100}, + {Date:1627300800000,Open:289,High:289.69,Low:286.64,Close:289.05,Volume:23176100}, + {Date:1627387200000,Open:289.43,High:289.58,Low:282.95,Close:286.54,Volume:33604100}, + {Date:1627473600000,Open:288.99,High:290.15,Low:283.83,Close:286.22,Volume:33566900}, + {Date:1627560000000,Open:286.24,High:288.62,Low:286.08,Close:286.5,Volume:18168300}, + {Date:1627646400000,Open:285.17,High:286.66,Low:283.91,Close:284.91,Volume:20944800}, + {Date:1627905600000,Open:286.36,High:286.77,Low:283.74,Close:284.82,Volume:16267400}, + {Date:1627992000000,Open:285.42,High:287.23,Low:284,Close:287.12,Volume:17879000}, + {Date:1628078400000,Open:286.22,High:287.59,Low:284.65,Close:286.51,Volume:16191300}, + {Date:1628164800000,Open:286.88,High:289.63,Low:286.1,Close:289.52,Volume:13900200}, + {Date:1628251200000,Open:288.51,High:289.5,Low:287.62,Close:289.46,Volume:16589300}, + {Date:1628510400000,Open:289.75,High:291.55,Low:287.81,Close:288.33,Volume:16117600}, + {Date:1628596800000,Open:288.8,High:289.25,Low:285.2,Close:286.44,Volume:18616600}, + {Date:1628683200000,Open:287.21,High:288.66,Low:285.86,Close:286.95,Volume:13955900}, + {Date:1628769600000,Open:286.63,High:289.97,Low:286.34,Close:289.81,Volume:14561300}, + {Date:1628856000000,Open:289.48,High:292.9,Low:289.3,Close:292.85,Volume:18249000}, + {Date:1629115200000,Open:293.19,High:294.82,Low:290.02,Close:294.6,Volume:22507600}, + {Date:1629201600000,Open:292.39,High:293.43,Low:291.08,Close:293.08,Volume:20075300}, + {Date:1629288000000,Open:292.04,High:294.82,Low:290.27,Close:290.73,Volume:21813000}, + {Date:1629374400000,Open:288.69,High:297.47,Low:288.64,Close:296.77,Volume:29850500}, + {Date:1629460800000,Open:299.72,High:305.84,Low:298.06,Close:304.36,Volume:40817600}, + {Date:1629720000000,Open:303.25,High:305.4,Low:301.85,Close:304.65,Volume:22830200}, + {Date:1629806400000,Open:305.02,High:305.65,Low:302,Close:302.62,Volume:18175800}, + {Date:1629892800000,Open:304.3,High:304.59,Low:300.42,Close:302.01,Volume:20006100}, + {Date:1629979200000,Open:300.99,High:302.43,Low:298.95,Close:299.09,Volume:17666100}, + {Date:1630065600000,Open:298.99,High:300.87,Low:296.83,Close:299.72,Volume:22605700}, + {Date:1630324800000,Open:301.12,High:304.22,Low:301.06,Close:303.59,Volume:16348100}, + {Date:1630411200000,Open:304.42,High:304.5,Low:301.5,Close:301.88,Volume:26285300}, + {Date:1630497600000,Open:302.87,High:305.19,Low:301.49,Close:301.83,Volume:18983800}, + {Date:1630584000000,Open:302.2,High:303.36,Low:300.18,Close:301.15,Volume:16285600}, + {Date:1630670400000,Open:300.99,High:302.6,Low:300.26,Close:301.14,Volume:14747900}, + {Date:1631016000000,Open:301.01,High:301.09,Low:298.2,Close:300.18,Volume:17180400}, + {Date:1631102400000,Open:299.78,High:300.61,Low:297.47,Close:300.21,Volume:15046800}, + {Date:1631188800000,Open:300.82,High:302.14,Low:297,Close:297.25,Volume:19927000}, + {Date:1631275200000,Open:298.42,High:299.92,Low:295.38,Close:295.71,Volume:19633400}, + {Date:1631534400000,Open:297.55,High:298.54,Low:294.08,Close:296.99,Volume:23652900}, + {Date:1631620800000,Open:299.56,High:301.39,Low:298.1,Close:299.79,Volume:21853400}, + {Date:1631707200000,Open:303.26,High:305.32,Low:301.82,Close:304.82,Volume:28356300}, + {Date:1631793600000,Open:303.76,High:305.31,Low:300.76,Close:305.22,Volume:19550800}, + {Date:1631880000000,Open:304.17,High:304.5,Low:299.53,Close:299.87,Volume:41372500}, + {Date:1632139200000,Open:296.33,High:298.72,Low:289.52,Close:294.3,Volume:38278700}, + {Date:1632225600000,Open:295.69,High:297.54,Low:294.07,Close:294.8,Volume:22364100}, + {Date:1632312000000,Open:296.73,High:300.22,Low:294.51,Close:298.58,Volume:26626300}, + {Date:1632398400000,Open:298.85,High:300.9,Low:297.53,Close:299.56,Volume:18604600}, + {Date:1632484800000,Open:298.23,High:299.8,Low:296.93,Close:299.35,Volume:14999000}, + {Date:1632744000000,Open:296.14,High:296.47,Low:292.94,Close:294.17,Volume:23571700}, + {Date:1632830400000,Open:289.8,High:290.78,Low:282.75,Close:283.52,Volume:43186200}, + {Date:1632916800000,Open:285.1,High:286.77,Low:283.01,Close:284,Volume:26353700}, + {Date:1633003200000,Open:285.71,High:287.83,Low:281.62,Close:281.92,Volume:32343600}, + {Date:1633089600000,Open:282.12,High:289.98,Low:281.29,Close:289.1,Volume:30086300}, + {Date:1633348800000,Open:287.4,High:287.75,Low:280.25,Close:283.11,Volume:31350700}, + {Date:1633435200000,Open:284.05,High:290.4,Low:284.05,Close:288.76,Volume:24993000}, + {Date:1633521600000,Open:285.78,High:293.63,Low:285.51,Close:293.11,Volume:28002600}, + {Date:1633608000000,Open:295.18,High:296.64,Low:293.92,Close:294.85,Volume:20430500}, + {Date:1633694400000,Open:296.22,High:296.64,Low:293.76,Close:294.85,Volume:17685700}, + {Date:1633953600000,Open:292.92,High:297.97,Low:292.75,Close:294.23,Volume:19298600}, + {Date:1634040000000,Open:295.34,High:295.44,Low:292.35,Close:292.88,Volume:17974100}, + {Date:1634126400000,Open:294.91,High:297.28,Low:293.49,Close:296.31,Volume:23416300}, + {Date:1634212800000,Open:299.21,High:303.27,Low:297.83,Close:302.75,Volume:27262900}, + {Date:1634299200000,Open:302.34,High:304.45,Low:300.52,Close:304.21,Volume:25384800}, + {Date:1634558400000,Open:303.57,High:308.21,Low:302.69,Close:307.29,Volume:22729300}, + {Date:1634644800000,Open:308.35,High:309.3,Low:307.22,Close:308.23,Volume:17682100}, + {Date:1634731200000,Open:309.21,High:309.7,Low:306.11,Close:307.41,Volume:16537100}, + {Date:1634817600000,Open:307.17,High:311.02,Low:306.36,Close:310.76,Volume:16918100}, + {Date:1634904000000,Open:310.4,High:311.09,Low:307.8,Close:309.16,Volume:17449300}, + {Date:1635163200000,Open:309.36,High:309.4,Low:306.46,Close:308.13,Volume:17554500}, + {Date:1635249600000,Open:311,High:312.4,Low:308.6,Close:310.11,Volume:28107300}, + {Date:1635336000000,Open:316,High:326.1,Low:316,Close:323.17,Volume:52588700}, + {Date:1635422400000,Open:324.33,High:324.87,Low:321.36,Close:324.35,Volume:26297900}, + {Date:1635508800000,Open:324.13,High:332,Low:323.9,Close:331.62,Volume:34766000}, + {Date:1635768000000,Open:331.36,High:331.49,Low:326.37,Close:329.37,Volume:27073200}, + {Date:1635854400000,Open:330.31,High:333.45,Low:330,Close:333.13,Volume:26487100}, + {Date:1635940800000,Open:333.9,High:334.9,Low:330.65,Close:334,Volume:21500100}, + {Date:1636027200000,Open:332.89,High:336.54,Low:329.51,Close:336.44,Volume:23992200}, + {Date:1636113600000,Open:338.51,High:338.79,Low:334.42,Close:336.06,Volume:22570100}, + {Date:1636372800000,Open:337.3,High:337.65,Low:334.44,Close:336.99,Volume:20897000}, + {Date:1636459200000,Open:337.11,High:338.72,Low:334.53,Close:335.95,Volume:21307400}, + {Date:1636545600000,Open:334.57,High:334.63,Low:329.92,Close:330.8,Volume:25500900}, + {Date:1636632000000,Open:331.25,High:333.77,Low:330.51,Close:332.43,Volume:16849800}, + {Date:1636718400000,Open:333.92,High:337.23,Low:333.79,Close:336.72,Volume:23831000}, + {Date:1636977600000,Open:337.54,High:337.88,Low:334.03,Close:336.07,Volume:16723000}, + {Date:1637064000000,Open:335.68,High:340.67,Low:335.51,Close:339.51,Volume:20886800}, + {Date:1637150400000,Open:338.94,High:342.19,Low:338,Close:339.12,Volume:19053400}, + {Date:1637236800000,Open:338.18,High:342.45,Low:337.12,Close:341.27,Volume:22463500}, + {Date:1637323200000,Open:342.64,High:345.1,Low:342.2,Close:343.11,Volume:21963400}, + {Date:1637582400000,Open:344.62,High:349.67,Low:339.55,Close:339.83,Volume:31031100}, + {Date:1637668800000,Open:337.05,High:339.45,Low:333.56,Close:337.68,Volume:30427600}, + {Date:1637755200000,Open:336.28,High:338.16,Low:333.91,Close:337.91,Volume:21661300}, + {Date:1637928000000,Open:334.35,High:337.93,Low:328.12,Close:329.68,Volume:24217200}, + {Date:1638187200000,Open:334.94,High:339.03,Low:334.74,Close:336.63,Volume:28563500}, + {Date:1638273600000,Open:335.32,High:337.78,Low:328.99,Close:330.59,Volume:42885600}, + {Date:1638360000000,Open:335.13,High:339.28,Low:329.39,Close:330.08,Volume:33337600}, + {Date:1638446400000,Open:330.3,High:333.49,Low:327.8,Close:329.49,Volume:30766000}, + {Date:1638532800000,Open:331.99,High:332.7,Low:318.03,Close:323.01,Volume:41779300}, + {Date:1638792000000,Open:323.95,High:327.45,Low:319.23,Close:326.19,Volume:30032600}, + {Date:1638878400000,Open:331.64,High:335.8,Low:330.1,Close:334.92,Volume:31021900}, + {Date:1638964800000,Open:335.31,High:335.5,Low:330.8,Close:334.97,Volume:24761000}, + {Date:1639051200000,Open:334.41,High:336.49,Low:332.12,Close:333.1,Volume:22214200}, + {Date:1639137600000,Open:334.98,High:343,Low:334.79,Close:342.54,Volume:38095700}, + {Date:1639396800000,Open:340.68,High:343.79,Low:339.08,Close:339.4,Volume:28899400}, + {Date:1639483200000,Open:333.22,High:334.64,Low:324.11,Close:328.34,Volume:44438700}, + {Date:1639569600000,Open:328.61,High:335.19,Low:324.5,Close:334.65,Volume:35381100}, + {Date:1639656000000,Open:335.71,High:336.76,Low:323.02,Close:324.9,Volume:35034800}, + {Date:1639742400000,Open:320.88,High:324.92,Low:317.25,Close:323.8,Volume:47750300}, + {Date:1640001600000,Open:320.05,High:322.8,Low:317.57,Close:319.91,Volume:28326500}, + {Date:1640088000000,Open:323.29,High:327.73,Low:319.8,Close:327.29,Volume:24740600}, + {Date:1640174400000,Open:328.3,High:333.61,Low:325.75,Close:333.2,Volume:24831500}, + {Date:1640260800000,Open:332.75,High:336.39,Low:332.73,Close:334.69,Volume:19617800}, + {Date:1640606400000,Open:335.46,High:342.48,Low:335.43,Close:342.45,Volume:19947000}, + {Date:1640692800000,Open:343.15,High:343.81,Low:340.32,Close:341.25,Volume:15661500}, + {Date:1640779200000,Open:341.3,High:344.3,Low:339.68,Close:341.95,Volume:15042000}, + {Date:1640865600000,Open:341.91,High:343.13,Low:338.82,Close:339.32,Volume:15994500}, + {Date:1640952000000,Open:338.51,High:339.36,Low:335.85,Close:336.32,Volume:18000800}, + {Date:1641211200000,Open:335.35,High:338,Low:329.78,Close:334.75,Volume:28865100}, + {Date:1641297600000,Open:334.83,High:335.2,Low:326.12,Close:329.01,Volume:32674300}, + {Date:1641384000000,Open:325.86,High:326.07,Low:315.98,Close:316.38,Volume:40054300}, + {Date:1641470400000,Open:313.15,High:318.7,Low:311.49,Close:313.88,Volume:39646100}, + {Date:1641556800000,Open:314.15,High:316.5,Low:310.09,Close:314.04,Volume:32720000}, + {Date:1641816000000,Open:309.49,High:314.72,Low:304.69,Close:314.27,Volume:44289500}, + {Date:1641902400000,Open:313.38,High:316.61,Low:309.89,Close:314.98,Volume:29386800}, + {Date:1641988800000,Open:319.67,High:323.41,Low:317.08,Close:318.27,Volume:34372200}, + {Date:1642075200000,Open:320.47,High:320.88,Low:304,Close:304.8,Volume:45366000}, + {Date:1642161600000,Open:304.25,High:310.82,Low:303.75,Close:310.2,Volume:39846400}, + {Date:1642507200000,Open:304.07,High:309.8,Low:301.74,Close:302.65,Volume:42333200}, + {Date:1642593600000,Open:306.29,High:313.91,Low:302.7,Close:303.33,Volume:45933900}, + {Date:1642680000000,Open:309.07,High:311.65,Low:301.14,Close:301.6,Volume:35380700}, + {Date:1642766400000,Open:302.69,High:304.11,Low:295.61,Close:296.03,Volume:57984400}, + {Date:1643025600000,Open:292.2,High:297.11,Low:276.05,Close:296.37,Volume:85731500}, + {Date:1643112000000,Open:291.52,High:294.99,Low:285.17,Close:288.49,Volume:72848600}, + {Date:1643198400000,Open:307.99,High:308.5,Low:293.03,Close:296.71,Volume:90428900}, + {Date:1643284800000,Open:302.66,High:307.3,Low:297.93,Close:299.84,Volume:53481300}, + {Date:1643371200000,Open:300.23,High:308.48,Low:294.45,Close:308.26,Volume:49743700}, + {Date:1643630400000,Open:308.95,High:312.38,Low:306.37,Close:310.98,Volume:46444500}, + {Date:1643716800000,Open:310.41,High:310.63,Low:305.13,Close:308.76,Volume:40950400}, + {Date:1643803200000,Open:309.63,High:315.12,Low:308.88,Close:313.46,Volume:36636000}, + {Date:1643889600000,Open:309.49,High:311.23,Low:299.96,Close:301.25,Volume:43730000}, + {Date:1643976000000,Open:300.21,High:308.8,Low:299.97,Close:305.94,Volume:35096500}, + {Date:1644235200000,Open:306.17,High:307.84,Low:299.9,Close:300.95,Volume:28533300}, + {Date:1644321600000,Open:301.25,High:305.56,Low:299.95,Close:304.56,Volume:32421200}, + {Date:1644408000000,Open:309.87,High:311.93,Low:307.39,Close:311.21,Volume:31284700}, + {Date:1644494400000,Open:304.04,High:309.12,Low:300.7,Close:302.38,Volume:45386200}, + {Date:1644580800000,Open:303.19,High:304.29,Low:294.22,Close:295.04,Volume:39175600}, + {Date:1644840000000,Open:293.77,High:296.76,Low:291.35,Close:295,Volume:36359500}, + {Date:1644926400000,Open:300.01,High:300.8,Low:297.02,Close:300.47,Volume:27058300}, + {Date:1645012800000,Open:298.37,High:300.87,Low:293.68,Close:299.5,Volume:29982100}, + {Date:1645099200000,Open:296.36,High:296.8,Low:290,Close:290.73,Volume:32461600}, + {Date:1645185600000,Open:293.05,High:293.86,Low:286.31,Close:287.93,Volume:34264000}, + {Date:1645531200000,Open:285,High:291.54,Low:284.5,Close:287.72,Volume:41736100}, + {Date:1645617600000,Open:290.18,High:291.7,Low:280.1,Close:280.27,Volume:37811200}, + {Date:1645704000000,Open:272.51,High:295.16,Low:271.52,Close:294.59,Volume:56989700}, + {Date:1645790400000,Open:295.14,High:297.63,Low:291.65,Close:297.31,Volume:32546700}, + {Date:1646049600000,Open:294.31,High:299.14,Low:293,Close:298.79,Volume:34585700}, + {Date:1646136000000,Open:296.4,High:299.97,Low:292.15,Close:294.95,Volume:31217800}, + {Date:1646222400000,Open:295.36,High:301.47,Low:293.7,Close:300.19,Volume:31873000}, + {Date:1646308800000,Open:302.89,High:303.13,Low:294.05,Close:295.92,Volume:27314500}, + {Date:1646395200000,Open:294.29,High:295.66,Low:287.17,Close:289.86,Volume:32356500}, + {Date:1646654400000,Open:288.53,High:289.69,Low:278.53,Close:278.91,Volume:43157200}, + {Date:1646740800000,Open:277.8,High:283.96,Low:270,Close:275.85,Volume:48159500}, + {Date:1646827200000,Open:283.44,High:289.6,Low:280.78,Close:288.5,Volume:35204500}, + {Date:1646913600000,Open:283.02,High:286.6,Low:280.58,Close:285.59,Volume:30628000}, + {Date:1647000000000,Open:287.96,High:289.51,Low:279.43,Close:280.07,Volume:27192600}, + {Date:1647259200000,Open:280.34,High:285.4,Low:275.82,Close:276.44,Volume:30660700}, + {Date:1647345600000,Open:280.35,High:287.82,Low:278.73,Close:287.15,Volume:34245100}, + {Date:1647432000000,Open:289.11,High:294.57,Low:283.2,Close:294.39,Volume:37826300}, + {Date:1647518400000,Open:293.29,High:295.61,Low:289.37,Close:295.22,Volume:30816600}, + {Date:1647604800000,Open:295.37,High:301,Low:292.73,Close:300.43,Volume:43317000}, + {Date:1647864000000,Open:298.89,High:300.14,Low:294.9,Close:299.16,Volume:28351200}, + {Date:1647950400000,Open:299.8,High:305,Low:298.77,Close:304.06,Volume:27599700}, + {Date:1648036800000,Open:300.51,High:303.23,Low:297.72,Close:299.49,Volume:25715400}, + {Date:1648123200000,Open:299.14,High:304.2,Low:298.32,Close:304.1,Volume:24484500}, + {Date:1648209600000,Open:305.23,High:305.5,Low:299.29,Close:303.68,Volume:22550600}, + {Date:1648468800000,Open:304.33,High:310.8,Low:304.33,Close:310.7,Volume:29578200}, + {Date:1648555200000,Open:313.91,High:315.82,Low:309.05,Close:315.41,Volume:30393400}, + {Date:1648641600000,Open:313.76,High:315.95,Low:311.58,Close:313.86,Volume:28163600} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/NFLX_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/NFLX_day.js new file mode 100644 index 00000000..81746254 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/NFLX_day.js @@ -0,0 +1,255 @@ +window["NFLX_day"] = [ + {Date:1617192000000,Open:515.67,High:528.13,Low:515.44,Close:521.66,Volume:3503100}, + {Date:1617278400000,Open:529.93,High:540.5,Low:527.03,Close:539.42,Volume:3938600}, + {Date:1617624000000,Open:540.01,High:542.85,Low:529.23,Close:540.67,Volume:3355900}, + {Date:1617710400000,Open:544.81,High:554.17,Low:543.3,Close:544.53,Volume:3474200}, + {Date:1617796800000,Open:543.5,High:549.64,Low:541.45,Close:546.99,Volume:2151300}, + {Date:1617883200000,Open:551.13,High:556.9,Low:547.57,Close:554.58,Volume:4309800}, + {Date:1617969600000,Open:552.69,High:556.9,Low:547.11,Close:555.31,Volume:2894000}, + {Date:1618228800000,Open:551.05,High:557.98,Low:549.58,Close:552.78,Volume:2944100}, + {Date:1618315200000,Open:557,High:559.75,Low:550.3,Close:553.73,Volume:2720300}, + {Date:1618401600000,Open:554.87,High:554.87,Low:538.53,Close:540.02,Volume:3740300}, + {Date:1618488000000,Open:544.17,High:553.49,Low:542.66,Close:549.22,Volume:3139100}, + {Date:1618574400000,Open:550.54,High:551.98,Low:539.51,Close:546.54,Volume:3209100}, + {Date:1618833600000,Open:546.9,High:556.44,Low:545.53,Close:554.44,Volume:4288700}, + {Date:1618920000000,Open:554.42,High:563.56,Low:546.3,Close:549.57,Volume:11257600}, + {Date:1619006400000,Open:508,High:515.46,Low:503.6,Close:508.9,Volume:22897400}, + {Date:1619092800000,Open:513.82,High:513.96,Low:500.55,Close:508.78,Volume:9061100}, + {Date:1619179200000,Open:509.01,High:509.7,Low:500.7,Close:505.55,Volume:7307700}, + {Date:1619438400000,Open:506.76,High:510.48,Low:503,Close:510.3,Volume:4388800}, + {Date:1619524800000,Open:512.62,High:512.99,Low:504.58,Close:505.55,Volume:3761300}, + {Date:1619611200000,Open:505.2,High:508.4,Low:503.34,Close:506.52,Volume:3193000}, + {Date:1619697600000,Open:507.6,High:509.29,Low:499,Close:509,Volume:5127800}, + {Date:1619784000000,Open:505,High:514.55,Low:505,Close:513.47,Volume:4413200}, + {Date:1620043200000,Open:512.65,High:518.95,Low:505.2,Close:509.11,Volume:4091900}, + {Date:1620129600000,Open:510.78,High:511.63,Low:496.79,Close:503.18,Volume:4349500}, + {Date:1620216000000,Open:504.99,High:507.78,Low:494.63,Close:496.08,Volume:3129400}, + {Date:1620302400000,Open:495.99,High:499.55,Low:491.37,Close:499.55,Volume:3783700}, + {Date:1620388800000,Open:504.62,High:508.55,Low:501.12,Close:503.84,Volume:3132800}, + {Date:1620648000000,Open:502,High:503.15,Low:486.11,Close:486.69,Volume:5131600}, + {Date:1620734400000,Open:479.75,High:497.99,Low:478.63,Close:495.08,Volume:4401000}, + {Date:1620820800000,Open:486.83,High:493.54,Low:482.7,Close:484.98,Volume:4121500}, + {Date:1620907200000,Open:489.13,High:490.78,Low:482.71,Close:486.66,Volume:2712500}, + {Date:1620993600000,Open:487.86,High:494.85,Low:486.59,Close:493.37,Volume:2882500}, + {Date:1621252800000,Open:485.59,High:492.71,Low:482.81,Close:488.94,Volume:2705200}, + {Date:1621339200000,Open:488.4,High:493.48,Low:486.19,Close:486.28,Volume:2350500}, + {Date:1621425600000,Open:481.63,High:488.57,Low:478.54,Close:487.7,Volume:3349900}, + {Date:1621512000000,Open:489.55,High:502.7,Low:488.98,Close:501.67,Volume:3721200}, + {Date:1621598400000,Open:503.12,High:505.4,Low:497.26,Close:497.89,Volume:3322900}, + {Date:1621857600000,Open:501.05,High:504.25,Low:499.51,Close:502.9,Volume:2412600}, + {Date:1621944000000,Open:506,High:506.37,Low:499.22,Close:501.34,Volume:2699500}, + {Date:1622030400000,Open:502.34,High:504.14,Low:500.5,Close:502.36,Volume:2465300}, + {Date:1622116800000,Open:501.8,High:505.1,Low:498.54,Close:503.86,Volume:3253800}, + {Date:1622203200000,Open:504.4,High:511.76,Low:502.53,Close:502.81,Volume:2910300}, + {Date:1622548800000,Open:504.01,High:505.41,Low:497.74,Close:499.08,Volume:2482600}, + {Date:1622635200000,Open:499.82,High:503.22,Low:495.82,Close:499.24,Volume:2269000}, + {Date:1622721600000,Open:495.19,High:496.66,Low:487.25,Close:489.43,Volume:3887400}, + {Date:1622808000000,Open:492,High:501.86,Low:490.95,Close:494.74,Volume:3160500}, + {Date:1623067200000,Open:492.92,High:496.7,Low:490.55,Close:494.66,Volume:2791900}, + {Date:1623153600000,Open:497,High:498.82,Low:489.37,Close:492.39,Volume:2374000}, + {Date:1623240000000,Open:494.5,High:496.09,Low:484.65,Close:485.81,Volume:3055000}, + {Date:1623326400000,Open:487.17,High:490.21,Low:482.14,Close:487.27,Volume:4382900}, + {Date:1623412800000,Open:490,High:491.41,Low:487.78,Close:488.77,Volume:3124000}, + {Date:1623672000000,Open:489.68,High:503.5,Low:486.91,Close:499.89,Volume:4400200}, + {Date:1623758400000,Open:501.23,High:501.23,Low:490.4,Close:491.9,Volume:3104100}, + {Date:1623844800000,Open:495,High:496.46,Low:486.28,Close:492.41,Volume:3533200}, + {Date:1623931200000,Open:490.25,High:501.8,Low:490.15,Close:498.34,Volume:3198300}, + {Date:1624017600000,Open:496.4,High:504.49,Low:495.24,Close:500.77,Volume:5197600}, + {Date:1624276800000,Open:501.64,High:502.05,Low:492.28,Close:497,Volume:5277300}, + {Date:1624363200000,Open:498.54,High:513.55,Low:495.8,Close:508.82,Volume:5809300}, + {Date:1624449600000,Open:508.48,High:516.63,Low:508.2,Close:512.74,Volume:3944800}, + {Date:1624536000000,Open:517.96,High:520.96,Low:514.4,Close:518.06,Volume:3361200}, + {Date:1624622400000,Open:528.84,High:533.06,Low:525,Close:527.07,Volume:5299100}, + {Date:1624881600000,Open:528.12,High:533.94,Low:524.56,Close:533.03,Volume:2820200}, + {Date:1624968000000,Open:533.55,High:536.13,Low:528.57,Close:533.5,Volume:2314600}, + {Date:1625054400000,Open:534.06,High:534.38,Low:526.82,Close:528.21,Volume:2773400}, + {Date:1625140800000,Open:525.72,High:537.04,Low:525.72,Close:533.54,Volume:2805400}, + {Date:1625227200000,Open:535.5,High:538.54,Low:529.39,Close:533.98,Volume:1975500}, + {Date:1625572800000,Open:533,High:542.86,Low:533,Close:541.64,Volume:2775100}, + {Date:1625659200000,Open:544.24,High:544.64,Low:531.66,Close:535.96,Volume:2722500}, + {Date:1625745600000,Open:530.93,High:535.5,Low:529.09,Close:530.76,Volume:3269000}, + {Date:1625832000000,Open:531,High:538.26,Low:528.58,Close:535.98,Volume:2777200}, + {Date:1626091200000,Open:540.3,High:540.65,Low:532.92,Close:537.31,Volume:1780700}, + {Date:1626177600000,Open:535.76,High:545.33,Low:535.76,Close:540.68,Volume:2751600}, + {Date:1626264000000,Open:541.01,High:554.1,Low:541.01,Close:547.95,Volume:4659500}, + {Date:1626350400000,Open:553.97,High:557.54,Low:538.2,Close:542.95,Volume:5713900}, + {Date:1626436800000,Open:541.81,High:544.06,Low:527.05,Close:530.31,Volume:3442100}, + {Date:1626696000000,Open:526.05,High:534.91,Low:522.24,Close:532.28,Volume:3885800}, + {Date:1626782400000,Open:526.07,High:536.64,Low:520.3,Close:531.05,Volume:6930400}, + {Date:1626868800000,Open:526.13,High:530.99,Low:505.61,Close:513.63,Volume:11906800}, + {Date:1626955200000,Open:510.21,High:513.68,Low:507,Close:511.77,Volume:4328100}, + {Date:1627041600000,Open:512.16,High:517.41,Low:504.66,Close:515.41,Volume:3820500}, + {Date:1627300800000,Open:514.38,High:521.13,Low:509.01,Close:516.49,Volume:2254500}, + {Date:1627387200000,Open:518.08,High:521.95,Low:512.05,Close:518.91,Volume:2759000}, + {Date:1627473600000,Open:521.82,High:524.47,Low:516.98,Close:519.3,Volume:2390500}, + {Date:1627560000000,Open:519.96,High:520.78,Low:513.79,Close:514.25,Volume:1736000}, + {Date:1627646400000,Open:512.69,High:519.79,Low:510.96,Close:517.57,Volume:2537100}, + {Date:1627905600000,Open:519,High:519.85,Low:510.51,Close:515.15,Volume:2096600}, + {Date:1627992000000,Open:514.39,High:515.63,Low:505.37,Close:510.82,Volume:2579400}, + {Date:1628078400000,Open:513,High:517.98,Low:510.37,Close:517.35,Volume:2039400}, + {Date:1628164800000,Open:517.13,High:525.41,Low:514.02,Close:524.89,Volume:2556700}, + {Date:1628251200000,Open:524,High:526.84,Low:519.39,Close:520.55,Volume:1919800}, + {Date:1628510400000,Open:521.15,High:522.67,Low:517.99,Close:519.97,Volume:1367800}, + {Date:1628596800000,Open:520,High:520.79,Low:512.97,Close:515.84,Volume:1960500}, + {Date:1628683200000,Open:517,High:519.57,Low:509.77,Close:512.4,Volume:1673900}, + {Date:1628769600000,Open:511.86,High:513,Low:507.2,Close:510.72,Volume:1685700}, + {Date:1628856000000,Open:512.64,High:521.44,Low:511.51,Close:515.92,Volume:2177700}, + {Date:1629115200000,Open:515.24,High:523.38,Low:512.3,Close:517.92,Volume:2032800}, + {Date:1629201600000,Open:515.47,High:520.79,Low:514.2,Close:518.91,Volume:2309800}, + {Date:1629288000000,Open:520,High:526.38,Low:518.65,Close:521.87,Volume:2582000}, + {Date:1629374400000,Open:522.74,High:548.39,Low:521.87,Close:543.71,Volume:7497300}, + {Date:1629460800000,Open:545.09,High:551.39,Low:539.1,Close:546.88,Volume:3776400}, + {Date:1629720000000,Open:545.98,High:555.55,Low:543.74,Close:553.33,Volume:2602000}, + {Date:1629806400000,Open:551.48,High:555.31,Low:549.27,Close:553.41,Volume:2109500}, + {Date:1629892800000,Open:550.16,High:552.84,Low:545.45,Close:547.58,Volume:2065600}, + {Date:1629979200000,Open:546.16,High:552.6,Low:545.9,Close:550.12,Volume:1595500}, + {Date:1630065600000,Open:551.6,High:564.17,Low:549.25,Close:558.92,Volume:3252600}, + {Date:1630324800000,Open:557.25,High:567.16,Low:556.45,Close:566.18,Volume:2434800}, + {Date:1630411200000,Open:566.12,High:569.48,Low:561.61,Close:569.19,Volume:2431900}, + {Date:1630497600000,Open:569,High:591,Low:569,Close:582.07,Volume:5626200}, + {Date:1630584000000,Open:583.68,High:598.76,Low:583.68,Close:588.55,Volume:6179900}, + {Date:1630670400000,Open:585.8,High:591.88,Low:583.14,Close:590.53,Volume:2681200}, + {Date:1631016000000,Open:594.69,High:613.85,Low:593.99,Close:606.71,Volume:5821400}, + {Date:1631102400000,Open:603.84,High:615.6,Low:595.71,Close:606.05,Volume:5424500}, + {Date:1631188800000,Open:606.47,High:609.44,Low:596.55,Close:597.54,Volume:2954200}, + {Date:1631275200000,Open:598.16,High:609.45,Low:593.67,Close:598.72,Volume:3950800}, + {Date:1631534400000,Open:598.57,High:598.57,Low:582.78,Close:589.29,Volume:3062900}, + {Date:1631620800000,Open:584.89,High:587.28,Low:575.56,Close:577.76,Volume:3457000}, + {Date:1631707200000,Open:578.17,High:584.62,Low:575.37,Close:582.87,Volume:2755600}, + {Date:1631793600000,Open:584.3,High:587.48,Low:577.72,Close:586.5,Volume:1832000}, + {Date:1631880000000,Open:587.85,High:590.28,Low:580.85,Close:589.35,Volume:4145100}, + {Date:1632139200000,Open:586.79,High:591.53,Low:568.08,Close:575.43,Volume:3732200}, + {Date:1632225600000,Open:578.31,High:581.88,Low:569.37,Close:573.14,Volume:2250900}, + {Date:1632312000000,Open:579.69,High:595.65,Low:579.69,Close:590.65,Volume:4021800}, + {Date:1632398400000,Open:590.79,High:599.32,Low:589.13,Close:593.26,Volume:2526200}, + {Date:1632484800000,Open:592.5,High:592.98,Low:583.64,Close:592.39,Volume:2126200}, + {Date:1632744000000,Open:587.95,High:593.58,Low:576.93,Close:592.64,Volume:2504700}, + {Date:1632830400000,Open:589,High:599.54,Low:580.16,Close:583.85,Volume:4431100}, + {Date:1632916800000,Open:589.01,High:609.88,Low:588.01,Close:599.06,Volume:6221000}, + {Date:1633003200000,Open:608.05,High:619,Low:608.05,Close:610.34,Volume:6612600}, + {Date:1633089600000,Open:604.24,High:614.99,Low:597.51,Close:613.15,Volume:4090800}, + {Date:1633348800000,Open:613.39,High:626.13,Low:594.68,Close:603.35,Volume:4995900}, + {Date:1633435200000,Open:606.94,High:640.39,Low:606.89,Close:634.81,Volume:9534300}, + {Date:1633521600000,Open:628.18,High:639.87,Low:626.36,Close:639.1,Volume:4580400}, + {Date:1633608000000,Open:642.23,High:646.84,Low:630.45,Close:631.85,Volume:3556900}, + {Date:1633694400000,Open:634.17,High:643.8,Low:630.86,Close:632.66,Volume:3272100}, + {Date:1633953600000,Open:633.2,High:639.42,Low:626.78,Close:627.04,Volume:2862500}, + {Date:1634040000000,Open:633.02,High:637.66,Low:621.99,Close:624.94,Volume:3227300}, + {Date:1634126400000,Open:632.18,High:632.18,Low:622.1,Close:629.76,Volume:2420300}, + {Date:1634212800000,Open:632.23,High:636.88,Low:626.79,Close:633.8,Volume:2671700}, + {Date:1634299200000,Open:638,High:639.42,Low:625.16,Close:628.29,Volume:4116900}, + {Date:1634558400000,Open:632.1,High:638.41,Low:620.59,Close:637.97,Volume:4669100}, + {Date:1634644800000,Open:636.97,High:641,Low:632.3,Close:639,Volume:7633100}, + {Date:1634731200000,Open:625.57,High:637.4,Low:617.15,Close:625.14,Volume:10622000}, + {Date:1634817600000,Open:628.89,High:654.01,Low:628.65,Close:653.16,Volume:8437100}, + {Date:1634904000000,Open:651.81,High:665.46,Low:651.81,Close:664.78,Volume:6186000}, + {Date:1635163200000,Open:663.74,High:675.88,Low:657.07,Close:671.66,Volume:3833500}, + {Date:1635249600000,Open:673.76,High:676.49,Low:662.77,Close:668.52,Volume:2904800}, + {Date:1635336000000,Open:669,High:671.41,Low:661.85,Close:662.92,Volume:2276900}, + {Date:1635422400000,Open:670.95,High:676.8,Low:668.03,Close:674.05,Volume:2859400}, + {Date:1635508800000,Open:673.06,High:690.97,Low:671.24,Close:690.31,Volume:3825300}, + {Date:1635768000000,Open:689.06,High:689.97,Low:676.54,Close:681.17,Volume:3110900}, + {Date:1635854400000,Open:683.11,High:687.68,Low:673.82,Close:677.72,Volume:3888600}, + {Date:1635940800000,Open:677.27,High:689.39,Low:677.27,Close:688.29,Volume:2334900}, + {Date:1636027200000,Open:685.89,High:685.94,Low:665.5,Close:668.4,Volume:4865000}, + {Date:1636113600000,Open:663.97,High:665.64,Low:645.01,Close:645.72,Volume:5283500}, + {Date:1636372800000,Open:650.29,High:656,Low:643.79,Close:651.45,Volume:2887500}, + {Date:1636459200000,Open:653.7,High:660.5,Low:650.52,Close:655.99,Volume:2415600}, + {Date:1636545600000,Open:653.01,High:660.33,Low:642.11,Close:646.91,Volume:2405800}, + {Date:1636632000000,Open:650.24,High:665.82,Low:649.71,Close:657.58,Volume:2868300}, + {Date:1636718400000,Open:660.01,High:683.34,Low:653.82,Close:682.61,Volume:4198400}, + {Date:1636977600000,Open:681.24,High:685.26,Low:671.49,Close:679.33,Volume:2872200}, + {Date:1637064000000,Open:678.27,High:688.36,Low:676.9,Close:687.4,Volume:2077400}, + {Date:1637150400000,Open:690,High:700.99,Low:686.09,Close:691.69,Volume:2732800}, + {Date:1637236800000,Open:691.61,High:691.74,Low:679.74,Close:682.02,Volume:2012900}, + {Date:1637323200000,Open:692.35,High:694.16,Low:675,Close:678.8,Volume:2613700}, + {Date:1637582400000,Open:676.02,High:679.48,Low:656.47,Close:659.2,Volume:2764400}, + {Date:1637668800000,Open:658.18,High:666.43,Low:646.05,Close:654.06,Volume:2320200}, + {Date:1637755200000,Open:658.01,High:661.44,Low:651.1,Close:658.29,Volume:1867300}, + {Date:1637928000000,Open:675,High:676.41,Low:660.67,Close:665.64,Volume:2872500}, + {Date:1638187200000,Open:663.2,High:667.99,Low:658.29,Close:663.84,Volume:2529400}, + {Date:1638273600000,Open:668.2,High:675.38,Low:640.01,Close:641.9,Volume:5608900}, + {Date:1638360000000,Open:649.48,High:654.52,Low:617.07,Close:617.77,Volume:3882800}, + {Date:1638446400000,Open:617.1,High:625.36,Low:612.88,Close:616.47,Volume:3331100}, + {Date:1638532800000,Open:622.75,High:625.5,Low:594,Close:602.13,Volume:4829300}, + {Date:1638792000000,Open:606.01,High:617.29,Low:601,Close:612.69,Volume:3075700}, + {Date:1638878400000,Open:619.83,High:628.89,Low:611.4,Close:625.58,Volume:3125200}, + {Date:1638964800000,Open:630,High:632.46,Low:623.2,Close:628.08,Volume:2220300}, + {Date:1639051200000,Open:627.58,High:630.24,Low:610.44,Close:611,Volume:2376300}, + {Date:1639137600000,Open:616.78,High:617.74,Low:605.88,Close:611.66,Volume:2748800}, + {Date:1639396800000,Open:612,High:612.64,Low:599.52,Close:604.56,Volume:2517900}, + {Date:1639483200000,Open:598.71,High:602.29,Low:588.13,Close:597.99,Volume:2984500}, + {Date:1639569600000,Open:598.18,High:605.69,Low:584.51,Close:605.04,Volume:2866200}, + {Date:1639656000000,Open:597.09,High:602.83,Low:588,Close:591.06,Volume:3143200}, + {Date:1639742400000,Open:591.61,High:593.25,Low:581.74,Close:586.73,Volume:4386900}, + {Date:1640001600000,Open:586.43,High:602.88,Low:584.26,Close:593.74,Volume:3358400}, + {Date:1640088000000,Open:597.54,High:607.82,Low:593.86,Close:604.92,Volume:2319400}, + {Date:1640174400000,Open:603.36,High:614.82,Low:602.63,Close:614.24,Volume:2335700}, + {Date:1640260800000,Open:616.4,High:616.88,Low:607.57,Close:614.09,Volume:1621100}, + {Date:1640606400000,Open:615,High:615,Low:609.25,Close:613.12,Volume:2061500}, + {Date:1640692800000,Open:614.95,High:618.41,Low:609.69,Close:610.71,Volume:1882800}, + {Date:1640779200000,Open:610.71,High:613.98,Low:604.68,Close:610.54,Volume:1287200}, + {Date:1640865600000,Open:612.99,High:620.61,Low:611.24,Close:612.09,Volume:1625100}, + {Date:1640952000000,Open:610.01,High:614.08,Low:602.05,Close:602.44,Volume:1995900}, + {Date:1641211200000,Open:605.61,High:609.99,Low:590.56,Close:597.37,Volume:3067500}, + {Date:1641297600000,Open:599.91,High:600.41,Low:581.6,Close:591.15,Volume:4393100}, + {Date:1641384000000,Open:592,High:592.84,Low:566.88,Close:567.52,Volume:4148700}, + {Date:1641470400000,Open:554.34,High:563.36,Low:542.01,Close:553.29,Volume:5711800}, + {Date:1641556800000,Open:549.46,High:553.43,Low:538.22,Close:541.06,Volume:3382900}, + {Date:1641816000000,Open:538.49,High:543.69,Low:526.32,Close:539.85,Volume:4486100}, + {Date:1641902400000,Open:536.99,High:543.91,Low:530.07,Close:540.84,Volume:3077800}, + {Date:1641988800000,Open:544.27,High:544.27,Low:532.02,Close:537.22,Volume:3787400}, + {Date:1642075200000,Open:537.06,High:540.79,Low:518.26,Close:519.2,Volume:4475100}, + {Date:1642161600000,Open:517.6,High:538.37,Low:511.88,Close:525.69,Volume:7861100}, + {Date:1642507200000,Open:520.08,High:521.75,Low:508.68,Close:510.8,Volume:4839100}, + {Date:1642593600000,Open:515,High:523.21,Low:510.51,Close:515.86,Volume:4353500}, + {Date:1642680000000,Open:517.75,High:526.64,Low:506.93,Close:508.25,Volume:12659000}, + {Date:1642766400000,Open:400.43,High:409.15,Low:379.99,Close:397.5,Volume:58904300}, + {Date:1643025600000,Open:383.91,High:387.26,Low:351.46,Close:387.15,Volume:32346000}, + {Date:1643112000000,Open:379.14,High:387.71,Low:365.13,Close:366.42,Volume:15145800}, + {Date:1643198400000,Open:378.27,High:382.66,Low:356.62,Close:359.7,Volume:12684000}, + {Date:1643284800000,Open:382.06,High:394.8,Low:378.1,Close:386.7,Volume:24324700}, + {Date:1643371200000,Open:386.76,High:387,Low:372.08,Close:384.36,Volume:11966600}, + {Date:1643630400000,Open:401.97,High:427.7,Low:398.2,Close:427.14,Volume:20047500}, + {Date:1643716800000,Open:432.96,High:458.48,Low:425.54,Close:457.13,Volume:22568100}, + {Date:1643803200000,Open:448.25,High:451.98,Low:426.48,Close:429.48,Volume:14346000}, + {Date:1643889600000,Open:421.44,High:429.26,Low:404.28,Close:405.6,Volume:9905200}, + {Date:1643976000000,Open:407.31,High:412.77,Low:396.64,Close:410.17,Volume:7789800}, + {Date:1644235200000,Open:410.17,High:412.35,Low:393.55,Close:402.1,Volume:8232900}, + {Date:1644321600000,Open:398.18,High:406.61,Low:395.83,Close:403.53,Volume:6818500}, + {Date:1644408000000,Open:408.65,High:412.98,Low:398.79,Close:412.89,Volume:7738200}, + {Date:1644494400000,Open:402.1,High:408,Low:396.36,Close:406.27,Volume:8452900}, + {Date:1644580800000,Open:405.33,High:411.61,Low:387.65,Close:391.31,Volume:7558900}, + {Date:1644840000000,Open:387.59,High:409.36,Low:386.89,Close:396.57,Volume:7202200}, + {Date:1644926400000,Open:403.79,High:409.16,Low:401.01,Close:407.46,Volume:5392300}, + {Date:1645012800000,Open:401.53,High:401.56,Low:390.38,Close:398.08,Volume:5277700}, + {Date:1645099200000,Open:394.24,High:399.11,Low:385.7,Close:386.67,Volume:4669200}, + {Date:1645185600000,Open:392.53,High:402.87,Low:389.05,Close:391.29,Volume:6801700}, + {Date:1645531200000,Open:388.95,High:392.42,Low:373.02,Close:377.38,Volume:6697500}, + {Date:1645617600000,Open:382.72,High:386,Low:366.66,Close:367.46,Volume:4614300}, + {Date:1645704000000,Open:355.09,High:390.73,Low:354.72,Close:390.03,Volume:7068700}, + {Date:1645790400000,Open:386.61,High:391.29,Low:375.58,Close:390.8,Volume:4841600}, + {Date:1646049600000,Open:387.33,High:397.75,Low:382.13,Close:394.52,Volume:5030600}, + {Date:1646136000000,Open:391.6,High:395,Low:383.71,Close:386.24,Volume:3290400}, + {Date:1646222400000,Open:388.93,High:389.22,Low:375.21,Close:380.03,Volume:5356800}, + {Date:1646308800000,Open:386,High:386.12,Low:364.65,Close:368.07,Volume:6076800}, + {Date:1646395200000,Open:368,High:374.82,Low:357.17,Close:361.73,Volume:5325500}, + {Date:1646654400000,Open:360.41,High:362,Low:350.2,Close:350.26,Volume:5708400}, + {Date:1646740800000,Open:349.8,High:358.86,Low:340.67,Close:341.76,Volume:6428700}, + {Date:1646827200000,Open:357.69,High:364.14,Low:350.51,Close:358.79,Volume:6520200}, + {Date:1646913600000,Open:356.2,High:367.02,Low:353.3,Close:356.77,Volume:4807800}, + {Date:1647000000000,Open:361.19,High:363.36,Low:340,Close:340.32,Volume:4815500}, + {Date:1647259200000,Open:338.72,High:341.32,Low:329.82,Close:331.01,Volume:5907800}, + {Date:1647345600000,Open:335.1,High:345.36,Low:332.36,Close:343.75,Volume:5460600}, + {Date:1647432000000,Open:348.2,High:359.99,Low:343.06,Close:357.53,Volume:6982500}, + {Date:1647518400000,Open:359.7,High:373.31,Low:354.88,Close:371.4,Volume:5818300}, + {Date:1647604800000,Open:372,High:381.8,Low:368.47,Close:380.6,Volume:8309200}, + {Date:1647864000000,Open:378.02,High:381.82,Low:368.94,Close:374.59,Volume:4866500}, + {Date:1647950400000,Open:371.14,High:386.66,Low:366.76,Close:382.92,Volume:4242800}, + {Date:1648036800000,Open:379.77,High:382.46,Low:374.49,Close:374.49,Volume:3729000}, + {Date:1648123200000,Open:379.76,High:379.76,Low:368.9,Close:375.71,Volume:3888500}, + {Date:1648209600000,Open:377.07,High:377.64,Low:366.43,Close:373.85,Volume:3574500}, + {Date:1648468800000,Open:375.23,High:380.28,Low:366.73,Close:378.51,Volume:4323400}, + {Date:1648555200000,Open:384.39,High:396.5,Low:380.33,Close:391.82,Volume:5880700}, + {Date:1648641600000,Open:389.55,High:392.7,Low:378.63,Close:381.47,Volume:4023300} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/NVDA_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/NVDA_day.js new file mode 100644 index 00000000..5d20d84a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/NVDA_day.js @@ -0,0 +1,255 @@ +window["NVDA_day"] = [ + {Date:1617192000000,Open:130.15,High:134.71,Low:129.82,Close:133.48,Volume:31477600}, + {Date:1617278400000,Open:135.72,High:138.7,Low:135.11,Close:138.12,Volume:30827600}, + {Date:1617624000000,Open:138.68,High:140.14,Low:137.33,Close:139.88,Volume:25567200}, + {Date:1617710400000,Open:140,High:140.54,Low:137.74,Close:138.62,Volume:19174400}, + {Date:1617796800000,Open:138.81,High:142.43,Low:137.12,Close:141.43,Volume:25128400}, + {Date:1617883200000,Open:142.53,High:144.71,Low:142.49,Close:143.17,Volume:24441600}, + {Date:1617969600000,Open:142.14,High:144.08,Low:141.75,Close:144,Volume:19517200}, + {Date:1618228800000,Open:142.9,High:153.52,Low:141.39,Close:152.09,Volume:86932400}, + {Date:1618315200000,Open:152.32,High:157,Low:151.26,Close:156.79,Volume:67621200}, + {Date:1618401600000,Open:156.25,High:157.21,Low:152.27,Close:152.77,Volume:38550000}, + {Date:1618488000000,Open:156.63,High:162.14,Low:156.32,Close:161.37,Volume:59848000}, + {Date:1618574400000,Open:160.53,High:161.66,Low:158.65,Close:159.13,Volume:33520800}, + {Date:1618833600000,Open:155.37,High:158.07,Low:152.33,Close:153.62,Volume:40442000}, + {Date:1618920000000,Open:153.23,High:154.97,Low:149.63,Close:151.71,Volume:33413200}, + {Date:1619006400000,Open:151.19,High:153.63,Low:151.02,Close:153.6,Volume:21677600}, + {Date:1619092800000,Open:153.75,High:154.38,Low:147.84,Close:148.5,Volume:27778800}, + {Date:1619179200000,Open:149.34,High:153.35,Low:149,Close:152.65,Volume:22750000}, + {Date:1619438400000,Open:151.85,High:154.79,Low:151.25,Close:154.78,Volume:19779600}, + {Date:1619524800000,Open:155.79,High:156.71,Low:153.54,Close:153.82,Volume:16457200}, + {Date:1619611200000,Open:153.65,High:155.32,Low:152.15,Close:152.77,Volume:20941600}, + {Date:1619697600000,Open:154,High:154.37,Low:150.71,Close:153.25,Volume:17319600}, + {Date:1619784000000,Open:151.74,High:153.65,Low:149.97,Close:150.1,Volume:20191200}, + {Date:1620043200000,Open:151.25,High:152.47,Low:147.88,Close:148.37,Volume:20391200}, + {Date:1620129600000,Open:146.37,High:146.38,Low:140.1,Close:143.51,Volume:40532400}, + {Date:1620216000000,Open:147.09,High:148.13,Low:143.88,Close:144.59,Volume:29202400}, + {Date:1620302400000,Open:144.95,High:145.71,Low:142.18,Close:145.23,Volume:19338000}, + {Date:1620388800000,Open:148.08,High:149.71,Low:146.72,Close:148.12,Volume:22932800}, + {Date:1620648000000,Open:147.87,High:148.06,Low:142.5,Close:142.66,Volume:26890400}, + {Date:1620734400000,Open:138.25,High:143.55,Low:137.5,Close:143.06,Volume:28558400}, + {Date:1620820800000,Open:140.1,High:142.6,Low:137.09,Close:137.59,Volume:30340800}, + {Date:1620907200000,Open:140.34,High:140.81,Low:134.59,Close:136.65,Volume:28540400}, + {Date:1620993600000,Open:138.9,High:143.28,Low:137.49,Close:142.43,Volume:25861600}, + {Date:1621252800000,Open:141.57,High:141.69,Low:138.54,Close:141.65,Volume:21698000}, + {Date:1621339200000,Open:142.67,High:144.04,Low:140.04,Close:140.16,Volume:18625600}, + {Date:1621425600000,Open:135.66,High:140.79,Low:135.43,Close:140.66,Volume:34400000}, + {Date:1621512000000,Open:143.02,High:146.84,Low:142.71,Close:146.13,Volume:32159200}, + {Date:1621598400000,Open:151.64,High:152.22,Low:148.7,Close:149.92,Volume:67299200}, + {Date:1621857600000,Open:152.13,High:157.45,Low:151.76,Close:156.12,Volume:55481600}, + {Date:1621944000000,Open:157.66,High:158.18,Low:154.82,Close:156.48,Volume:43540800}, + {Date:1622030400000,Open:157.34,High:157.94,Low:155.86,Close:157,Volume:37044000}, + {Date:1622116800000,Open:157,High:157.5,Low:154.6,Close:154.88,Volume:58147600}, + {Date:1622203200000,Open:155.01,High:162.77,Low:155.01,Close:162.45,Volume:64453600}, + {Date:1622548800000,Open:162.7,High:163.88,Low:159.03,Close:162.65,Volume:47280400}, + {Date:1622635200000,Open:162.52,High:169.19,Low:162.35,Close:167.78,Volume:59416800}, + {Date:1622721600000,Open:167.01,High:172.59,Low:165.83,Close:169.7,Volume:58000800}, + {Date:1622808000000,Open:171.13,High:176.61,Low:170.96,Close:175.78,Volume:61712000}, + {Date:1623067200000,Open:175.71,High:178.13,Low:171.93,Close:176.19,Volume:57575600}, + {Date:1623153600000,Open:175.27,High:176.21,Low:172.51,Close:174.57,Volume:32384800}, + {Date:1623240000000,Open:175.16,High:175.75,Low:172.56,Close:173.58,Volume:38165600}, + {Date:1623326400000,Open:173.5,High:174.92,Low:171.76,Close:174.25,Volume:28777200}, + {Date:1623412800000,Open:174.79,High:179.39,Low:174.44,Close:178.25,Volume:41630800}, + {Date:1623672000000,Open:179.06,High:180.4,Low:176.63,Close:180.19,Volume:32137600}, + {Date:1623758400000,Open:179.15,High:180.16,Low:177.28,Close:177.88,Volume:24303200}, + {Date:1623844800000,Open:177.91,High:179.55,Low:175.85,Close:178.1,Volume:30712400}, + {Date:1623931200000,Open:177.74,High:188.35,Low:177.56,Close:186.57,Volume:80965600}, + {Date:1624017600000,Open:187.84,High:193.75,Low:185.84,Close:186.39,Volume:96885600}, + {Date:1624276800000,Open:184.35,High:185.37,Low:178.23,Close:184.27,Volume:67238400}, + {Date:1624363200000,Open:184.71,High:189.64,Low:183.86,Close:188.87,Volume:58014400}, + {Date:1624449600000,Open:190.08,High:191.53,Low:189.08,Close:190.57,Volume:33235600}, + {Date:1624536000000,Open:192.28,High:194.2,Low:190.88,Close:192.05,Volume:32092400}, + {Date:1624622400000,Open:192.8,High:193.46,Low:188.95,Close:190.31,Volume:27836400}, + {Date:1624881600000,Open:193.61,High:200.79,Low:193.19,Close:199.85,Volume:49543600}, + {Date:1624968000000,Open:198.82,High:200.99,Low:196.57,Close:200.27,Volume:36763200}, + {Date:1625054400000,Open:199.99,High:201.63,Low:198.64,Close:200.02,Volume:32656800}, + {Date:1625140800000,Open:201.25,High:204.56,Low:200.19,Close:202.12,Volume:48013600}, + {Date:1625227200000,Open:204.4,High:205.05,Low:202.88,Close:204.87,Volume:34276400}, + {Date:1625572800000,Open:207.38,High:208.42,Low:203.5,Close:206.99,Volume:44670800}, + {Date:1625659200000,Open:208.54,High:208.75,Low:203.32,Close:203.72,Volume:41842800}, + {Date:1625745600000,Open:198.57,High:201.33,Low:197.01,Close:199.03,Volume:50330000}, + {Date:1625832000000,Open:199.63,High:200.8,Low:197.54,Close:200.5,Volume:29662400}, + {Date:1626091200000,Open:202.4,High:205.33,Low:201.88,Close:205.13,Volume:32198400}, + {Date:1626177600000,Open:204.01,High:204.61,Low:201.14,Close:202.5,Volume:29070800}, + {Date:1626264000000,Open:203.58,High:204.18,Low:197.53,Close:198.41,Volume:38010000}, + {Date:1626350400000,Open:198.12,High:198.47,Low:188.59,Close:189.66,Volume:55056400}, + {Date:1626436800000,Open:190.3,High:191.57,Low:180.73,Close:181.61,Volume:68822400}, + {Date:1626696000000,Open:179.15,High:190.42,Low:178.65,Close:187.8,Volume:74906000}, + {Date:1626782400000,Open:187.3,High:188.38,Low:181.64,Close:186.12,Volume:43468700}, + {Date:1626868800000,Open:188.82,High:195.27,Low:187.42,Close:194.1,Volume:37101700}, + {Date:1626955200000,Open:196.42,High:198.87,Low:192.76,Close:195.94,Volume:32382600}, + {Date:1627041600000,Open:196.56,High:197,Low:192.5,Close:195.58,Volume:19567200}, + {Date:1627300800000,Open:193.11,High:194.42,Low:189.14,Close:192.94,Volume:20394300}, + {Date:1627387200000,Open:192.65,High:196.22,Low:187.41,Close:192.08,Volume:24886300}, + {Date:1627473600000,Open:193.19,High:196.46,Low:189.95,Close:195.03,Volume:20219100}, + {Date:1627560000000,Open:195.19,High:198.53,Low:193.28,Close:196.62,Volume:19078100}, + {Date:1627646400000,Open:194.18,High:196.3,Low:192.63,Close:194.99,Volume:18349700}, + {Date:1627905600000,Open:197,High:199.61,Low:193.61,Close:197.5,Volume:21744400}, + {Date:1627992000000,Open:197.4,High:202.22,Low:192.2,Close:198.15,Volume:30181100}, + {Date:1628078400000,Open:199.9,High:203.18,Low:198.28,Close:202.74,Volume:23130900}, + {Date:1628164800000,Open:205,High:207.33,Low:203.42,Close:206.37,Volume:21143500}, + {Date:1628251200000,Open:205.24,High:205.7,Low:202.1,Close:203.66,Volume:17849700}, + {Date:1628510400000,Open:204.46,High:205.08,Low:201.43,Close:202.95,Volume:14644300}, + {Date:1628596800000,Open:203.22,High:204.3,Low:198.35,Close:199.36,Volume:17923800}, + {Date:1628683200000,Open:200.43,High:200.49,Low:194.3,Close:196.99,Volume:18592500}, + {Date:1628769600000,Open:198.7,High:200.29,Low:196.2,Close:199.05,Volume:15165200}, + {Date:1628856000000,Open:199.05,High:202.14,Low:198.51,Close:201.88,Volume:18306300}, + {Date:1629115200000,Open:201.35,High:202.87,Low:194.53,Close:199.5,Volume:21087600}, + {Date:1629201600000,Open:196.85,High:197.7,Low:192.67,Close:194.58,Volume:20458500}, + {Date:1629288000000,Open:195,High:196.34,Low:190,Close:190.4,Volume:28591300}, + {Date:1629374400000,Open:194.94,High:204.95,Low:187.62,Close:197.98,Volume:76655500}, + {Date:1629460800000,Open:199.91,High:208.65,Low:199.33,Close:208.16,Volume:67574100}, + {Date:1629720000000,Open:209.71,High:219.97,Low:209.5,Close:219.58,Volume:57580700}, + {Date:1629806400000,Open:217.53,High:219.59,Low:215.35,Close:217.93,Volume:29729900}, + {Date:1629892800000,Open:217.37,High:224.7,Low:217.22,Close:222.13,Volume:34770100}, + {Date:1629979200000,Open:222,High:223.4,Low:217.9,Close:220.68,Volume:23794000}, + {Date:1630065600000,Open:221.84,High:227.22,Low:221.67,Close:226.36,Volume:30472200}, + {Date:1630324800000,Open:228.3,High:230.43,Low:225.51,Close:226.88,Volume:26258000}, + {Date:1630411200000,Open:226.95,High:226.95,Low:221.2,Close:223.85,Volume:25985000}, + {Date:1630497600000,Open:224.85,High:226.97,Low:223.57,Close:224.41,Volume:20176700}, + {Date:1630584000000,Open:225.18,High:225.93,Low:222.95,Close:223.96,Volume:18783400}, + {Date:1630670400000,Open:223.25,High:229.86,Low:222,Close:228.43,Volume:28053200}, + {Date:1631016000000,Open:228.33,High:228.99,Low:225.22,Close:226.62,Volume:19810700}, + {Date:1631102400000,Open:225.13,High:226.1,Low:219.77,Close:223.39,Volume:25443400}, + {Date:1631188800000,Open:223.12,High:225.38,Low:221.31,Close:221.77,Volume:19685600}, + {Date:1631275200000,Open:223.48,High:226.26,Low:222.7,Close:224.78,Volume:24837600}, + {Date:1631534400000,Open:226.84,High:229.64,Low:218.58,Close:221.52,Volume:29750000}, + {Date:1631620800000,Open:222.75,High:224.1,Low:220.86,Close:222.42,Volume:19975500}, + {Date:1631707200000,Open:223.09,High:223.67,Low:219.66,Close:223.41,Volume:16653800}, + {Date:1631793600000,Open:221.83,High:222.77,Low:219.27,Close:222.42,Volume:15603300}, + {Date:1631880000000,Open:223,High:223.21,Low:218.3,Close:219,Volume:29450300}, + {Date:1632139200000,Open:211.46,High:214.33,Low:206.62,Close:211.13,Volume:34944000}, + {Date:1632225600000,Open:214.17,High:214.25,Low:209.5,Close:212.46,Volume:20468800}, + {Date:1632312000000,Open:213.66,High:219.6,Low:211.96,Close:219.41,Volume:26872600}, + {Date:1632398400000,Open:221.4,High:225.35,Low:218.9,Close:224.82,Volume:24855500}, + {Date:1632484800000,Open:220.7,High:221.49,Low:218.61,Close:220.81,Volume:21765500}, + {Date:1632744000000,Open:217.1,High:217.99,Low:213.25,Close:216.6,Volume:24521500}, + {Date:1632830400000,Open:212.14,High:214.19,Low:206.51,Close:206.99,Volume:34306900}, + {Date:1632916800000,Open:209.4,High:210.17,Low:204.67,Close:205.17,Volume:21839400}, + {Date:1633003200000,Open:207.68,High:210.66,Low:206.88,Close:207.16,Volume:22100900}, + {Date:1633089600000,Open:207.5,High:208.59,Low:202.03,Close:207.42,Volume:24097800}, + {Date:1633348800000,Open:205.04,High:205.42,Low:195.55,Close:197.32,Volume:34563500}, + {Date:1633435200000,Open:199.5,High:206.48,Low:198.54,Close:204.51,Volume:27928200}, + {Date:1633521600000,Open:201.2,High:207.2,Low:200.8,Close:207,Volume:29720200}, + {Date:1633608000000,Open:210.92,High:213.22,Low:209.72,Close:210.75,Volume:25691900}, + {Date:1633694400000,Open:211.01,High:212.06,Low:207.75,Close:208.31,Volume:15125800}, + {Date:1633953600000,Open:205.75,High:210.63,Low:205.11,Close:206.95,Volume:16338800}, + {Date:1634040000000,Open:208.28,High:210.57,Low:205.28,Close:206.71,Volume:16213400}, + {Date:1634126400000,Open:209.18,High:209.9,Low:207.13,Close:209.39,Volume:18065200}, + {Date:1634212800000,Open:212.88,High:217.55,Low:211.22,Close:217.46,Volume:24358900}, + {Date:1634299200000,Open:218.1,High:219.31,Low:216.62,Close:218.62,Volume:22699400}, + {Date:1634558400000,Open:217.49,High:222.91,Low:216.44,Close:222.22,Volume:18949400}, + {Date:1634644800000,Open:222.76,High:223.79,Low:220.37,Close:222.9,Volume:16147300}, + {Date:1634731200000,Open:223.05,High:224.33,Low:219.82,Close:221.03,Volume:14627600}, + {Date:1634817600000,Open:220.97,High:227.11,Low:220.83,Close:226.92,Volume:18759000}, + {Date:1634904000000,Open:228.23,High:231.3,Low:225.61,Close:227.26,Volume:24938400}, + {Date:1635163200000,Open:229.73,High:233.55,Low:227.7,Close:231.66,Volume:23023500}, + {Date:1635249600000,Open:239.89,High:252.59,Low:239.24,Close:247.17,Volume:48589800}, + {Date:1635336000000,Open:244.74,High:250.9,Low:242.82,Close:244.51,Volume:24599000}, + {Date:1635422400000,Open:248.78,High:249.5,Low:245.23,Close:249.41,Volume:23420400}, + {Date:1635508800000,Open:250.01,High:257.09,Low:250,Close:255.67,Volume:29250300}, + {Date:1635768000000,Open:256.49,High:258.94,Low:252.27,Close:258.27,Volume:26574000}, + {Date:1635854400000,Open:258.22,High:266.78,Low:258,Close:264.01,Volume:29411200}, + {Date:1635940800000,Open:266.7,High:267.84,Low:262.35,Close:265.98,Volume:23991000}, + {Date:1636027200000,Open:272.29,High:313.65,Low:271.18,Close:298.01,Volume:115363100}, + {Date:1636113600000,Open:301.87,High:314,Low:294.1,Close:297.52,Volume:85126000}, + {Date:1636372800000,Open:301.49,High:311,Low:299.07,Close:308.04,Volume:50310100}, + {Date:1636459200000,Open:322.82,High:323.1,Low:299.64,Close:306.57,Volume:64674600}, + {Date:1636545600000,Open:293.56,High:308.5,Low:287.78,Close:294.59,Volume:63620600}, + {Date:1636632000000,Open:304.68,High:305.9,Low:297.77,Close:303.9,Volume:33217200}, + {Date:1636718400000,Open:300.1,High:306.8,Low:296.3,Close:303.9,Volume:41305400}, + {Date:1636977600000,Open:305.52,High:306.44,Low:292.47,Close:300.25,Volume:38490900}, + {Date:1637064000000,Open:297.59,High:303.9,Low:297.06,Close:302.03,Volume:26448400}, + {Date:1637150400000,Open:304.18,High:305.09,Low:288,Close:292.61,Volume:42850800}, + {Date:1637236800000,Open:323.67,High:327.6,Low:313.21,Close:316.75,Volume:78171100}, + {Date:1637323200000,Open:322.43,High:330.88,Low:319.05,Close:329.85,Volume:53386700}, + {Date:1637582400000,Open:335.17,High:346.47,Low:319,Close:319.56,Volume:75433500}, + {Date:1637668800000,Open:315.35,High:323.6,Low:308.8,Close:317.46,Volume:53216300}, + {Date:1637755200000,Open:314.61,High:328.55,Low:309.28,Close:326.74,Volume:43516200}, + {Date:1637928000000,Open:326,High:327.1,Low:313.5,Close:315.03,Volume:28306900}, + {Date:1638187200000,Open:323.66,High:334.12,Low:320.36,Close:333.76,Volume:45496400}, + {Date:1638273600000,Open:331.69,High:333.53,Low:318.64,Close:326.76,Volume:62206600}, + {Date:1638360000000,Open:332.19,High:332.89,Low:313.8,Close:314.35,Volume:48436800}, + {Date:1638446400000,Open:312.14,High:324.78,Low:310.25,Close:321.26,Volume:47289000}, + {Date:1638532800000,Open:320,High:321.29,Low:301.3,Close:306.93,Volume:54432500}, + {Date:1638792000000,Open:298.8,High:302.41,Low:280.38,Close:300.37,Volume:65893800}, + {Date:1638878400000,Open:309.57,High:324.49,Low:306.51,Close:324.27,Volume:59305300}, + {Date:1638964800000,Open:319.99,High:322.9,Low:314.21,Close:318.26,Volume:47555100}, + {Date:1639051200000,Open:317.34,High:322.05,Low:304.28,Close:304.9,Volume:48850700}, + {Date:1639137600000,Open:311.5,High:313.05,Low:298.61,Close:301.98,Volume:48882500}, + {Date:1639396800000,Open:302.49,High:302.94,Low:281.16,Close:281.61,Volume:59834400}, + {Date:1639483200000,Open:276.99,High:286.78,Low:272.5,Close:283.37,Volume:66703500}, + {Date:1639569600000,Open:284,High:305,Low:278.38,Close:304.59,Volume:69829700}, + {Date:1639656000000,Open:311.52,High:311.6,Low:280.93,Close:283.87,Volume:70736600}, + {Date:1639742400000,Open:279.85,High:289.22,Low:277.6,Close:278.01,Volume:71375800}, + {Date:1640001600000,Open:273.05,High:281.44,Low:271.45,Close:277.19,Volume:46184700}, + {Date:1640088000000,Open:283.74,High:291.2,Low:274.01,Close:290.75,Volume:52438500}, + {Date:1640174400000,Open:288.91,High:295.55,Low:284.49,Close:294,Volume:39518400}, + {Date:1640260800000,Open:297.55,High:300.59,Low:294.31,Close:296.4,Volume:34302200}, + {Date:1640606400000,Open:296.6,High:310.87,Low:296.4,Close:309.45,Volume:40368600}, + {Date:1640692800000,Open:313.12,High:313.3,Low:300.12,Close:303.22,Volume:42059100}, + {Date:1640779200000,Open:302.73,High:305.48,Low:293.66,Close:300.01,Volume:34313900}, + {Date:1640865600000,Open:298.27,High:304.57,Low:295.4,Close:295.86,Volume:30886400}, + {Date:1640952000000,Open:296.74,High:300.3,Low:293.31,Close:294.11,Volume:26653000}, + {Date:1641211200000,Open:298.15,High:307.11,Low:297.85,Close:301.21,Volume:39154700}, + {Date:1641297600000,Open:302.77,High:304.68,Low:283.49,Close:292.9,Volume:52715400}, + {Date:1641384000000,Open:289.49,High:294.16,Low:275.33,Close:276.04,Volume:49806400}, + {Date:1641470400000,Open:276.4,High:284.38,Low:270.65,Close:281.78,Volume:45418600}, + {Date:1641556800000,Open:281.41,High:284.22,Low:270.57,Close:272.47,Volume:40993900}, + {Date:1641816000000,Open:265.81,High:274.69,Low:256.44,Close:274,Volume:59468100}, + {Date:1641902400000,Open:273.23,High:280.65,Low:268.39,Close:278.17,Volume:40408900}, + {Date:1641988800000,Open:280.67,High:285.95,Low:276.08,Close:279.99,Volume:38341300}, + {Date:1642075200000,Open:283.79,High:284.8,Low:264.98,Close:265.75,Volume:54017100}, + {Date:1642161600000,Open:263,High:271.97,Low:262.1,Close:269.42,Volume:39583200}, + {Date:1642507200000,Open:262.6,High:266.38,Low:257.7,Close:259.03,Volume:42427000}, + {Date:1642593600000,Open:260.79,High:265.43,Low:250.52,Close:250.67,Volume:48831500}, + {Date:1642680000000,Open:253.04,High:255.79,Low:240.78,Close:241.5,Volume:43518100}, + {Date:1642766400000,Open:235.07,High:248.23,Low:232.63,Close:233.74,Volume:71895800}, + {Date:1643025600000,Open:223.3,High:233.8,Low:208.88,Close:233.72,Volume:91398200}, + {Date:1643112000000,Open:225.46,High:229.43,Low:220,Close:223.24,Volume:66461600}, + {Date:1643198400000,Open:232.4,High:240.57,Low:223,Close:227.72,Volume:75595900}, + {Date:1643284800000,Open:235.68,High:239.95,Low:216.75,Close:219.44,Volume:57335300}, + {Date:1643371200000,Open:220.12,High:228.58,Low:212.96,Close:228.4,Volume:54377400}, + {Date:1643630400000,Open:231.82,High:245.09,Low:230.52,Close:244.86,Volume:56468000}, + {Date:1643716800000,Open:251.04,High:251.45,Low:238.9,Close:246.38,Volume:51892500}, + {Date:1643803200000,Open:257.94,High:258.17,Low:245.53,Close:252.42,Volume:54341900}, + {Date:1643889600000,Open:244.58,High:250.77,Low:237.8,Close:239.48,Volume:41017800}, + {Date:1643976000000,Open:239.72,High:246.35,Low:236.32,Close:243.19,Volume:35482900}, + {Date:1644235200000,Open:243.72,High:251.82,Low:242.02,Close:247.28,Volume:37686800}, + {Date:1644321600000,Open:243.59,High:252.3,Low:239.8,Close:251.08,Volume:41035900}, + {Date:1644408000000,Open:256.22,High:267.25,Low:253.53,Close:267.05,Volume:52428200}, + {Date:1644494400000,Open:259.95,High:269.25,Low:256,Close:258.24,Volume:51320000}, + {Date:1644580800000,Open:259.16,High:261.52,Low:237.73,Close:239.49,Volume:60547200}, + {Date:1644840000000,Open:239.34,High:248.75,Low:237.55,Close:242.67,Volume:44042400}, + {Date:1644926400000,Open:249.49,High:265.45,Low:247.84,Close:264.95,Volume:69986900}, + {Date:1645012800000,Open:262.59,High:265.82,Low:255.52,Close:265.11,Volume:73267600}, + {Date:1645099200000,Open:256.3,High:257.85,Low:241.65,Close:245.07,Volume:81059500}, + {Date:1645185600000,Open:246.68,High:249.86,Low:231,Close:236.42,Volume:76125500}, + {Date:1645531200000,Open:230.35,High:240.64,Low:230,Close:233.9,Volume:63342200}, + {Date:1645617600000,Open:238.02,High:241.55,Low:223.01,Close:223.87,Volume:56651100}, + {Date:1645704000000,Open:210.15,High:238,Low:208.9,Close:237.48,Volume:73580100}, + {Date:1645790400000,Open:237.21,High:242.17,Low:233.81,Close:241.57,Volume:52886600}, + {Date:1646049600000,Open:239.92,High:246.65,Low:237.07,Close:243.85,Volume:47639300}, + {Date:1646136000000,Open:242.91,High:243.77,Low:231.32,Close:234.77,Volume:41205600}, + {Date:1646222400000,Open:237.56,High:244.09,Low:234.15,Close:242.2,Volume:38964200}, + {Date:1646308800000,Open:242.62,High:243.26,Low:234.69,Close:237.14,Volume:36509500}, + {Date:1646395200000,Open:233.84,High:236.8,Low:224.82,Close:229.36,Volume:43141500}, + {Date:1646654400000,Open:228.17,High:230.33,Low:213.3,Close:213.52,Volume:45082100}, + {Date:1646740800000,Open:213.09,High:223.73,Low:206.5,Close:215.14,Volume:55746700}, + {Date:1646827200000,Open:223.87,High:232.2,Low:222.47,Close:230.14,Volume:49274200}, + {Date:1646913600000,Open:225.31,High:227.88,Low:218.82,Close:226.58,Volume:42806600}, + {Date:1647000000000,Open:230.22,High:231.45,Low:220.46,Close:221,Volume:36659300}, + {Date:1647259200000,Open:218.69,High:222.62,Low:211.59,Close:213.3,Volume:38535400}, + {Date:1647345600000,Open:215.18,High:230.38,Low:213.22,Close:229.73,Volume:49199600}, + {Date:1647432000000,Open:235,High:245.97,Low:231.72,Close:244.96,Volume:67142200}, + {Date:1647518400000,Open:241.2,High:248.42,Low:239.06,Close:247.66,Volume:47194100}, + {Date:1647604800000,Open:247.99,High:265.69,Low:246.24,Close:264.53,Volume:72977200}, + {Date:1647864000000,Open:265.07,High:271.52,Low:259.67,Close:267.34,Volume:59172700}, + {Date:1647950400000,Open:267.27,High:272.38,Low:260.72,Close:265.24,Volume:54700700}, + {Date:1648036800000,Open:261.26,High:266.12,Low:255.75,Close:256.34,Volume:50212000}, + {Date:1648123200000,Open:261.66,High:283.2,Low:259.07,Close:281.5,Volume:87737900}, + {Date:1648209600000,Open:278.86,High:283.58,Low:272.71,Close:276.92,Volume:57847200}, + {Date:1648468800000,Open:277.56,High:282.5,Low:272.06,Close:282.19,Volume:42549400}, + {Date:1648555200000,Open:286.95,High:289.46,Low:279.8,Close:286.56,Volume:48898400}, + {Date:1648641600000,Open:283.04,High:284.96,Low:275.03,Close:276.9,Volume:46348700} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/TSLA_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/TSLA_day.js new file mode 100644 index 00000000..e35d760c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/data/TSLA_day.js @@ -0,0 +1,255 @@ +window["TSLA_day"] = [ + {Date:1617192000000,Open:646.62,High:672,Low:641.11,Close:667.93,Volume:33337300}, + {Date:1617278400000,Open:688.37,High:692.42,Low:659.42,Close:661.75,Volume:35298400}, + {Date:1617624000000,Open:707.71,High:708.16,Low:684.7,Close:691.05,Volume:41842800}, + {Date:1617710400000,Open:690.3,High:696.55,Low:681.37,Close:691.62,Volume:28271800}, + {Date:1617796800000,Open:687,High:691.38,Low:667.84,Close:670.97,Volume:26309400}, + {Date:1617883200000,Open:677.38,High:689.55,Low:671.65,Close:683.8,Volume:23924300}, + {Date:1617969600000,Open:677.77,High:680.97,Low:669.43,Close:677.02,Volume:21437100}, + {Date:1618228800000,Open:685.7,High:704.8,Low:682.09,Close:701.98,Volume:29135700}, + {Date:1618315200000,Open:712.7,High:763,Low:710.66,Close:762.32,Volume:44652800}, + {Date:1618401600000,Open:770.7,High:780.79,Low:728.03,Close:732.23,Volume:49017400}, + {Date:1618488000000,Open:743.1,High:743.69,Low:721.31,Close:738.85,Volume:27848900}, + {Date:1618574400000,Open:728.65,High:749.41,Low:724.6,Close:739.78,Volume:27979500}, + {Date:1618833600000,Open:719.6,High:725.4,Low:691.8,Close:714.63,Volume:39686200}, + {Date:1618920000000,Open:717.42,High:737.25,Low:710.69,Close:718.99,Volume:35609000}, + {Date:1619006400000,Open:704.77,High:744.84,Low:698,Close:744.12,Volume:31215500}, + {Date:1619092800000,Open:741.5,High:753.77,Low:718.04,Close:719.69,Volume:35590300}, + {Date:1619179200000,Open:719.8,High:737.36,Low:715.46,Close:729.4,Volume:28370000}, + {Date:1619438400000,Open:741,High:749.3,Low:732.61,Close:738.2,Volume:31038500}, + {Date:1619524800000,Open:717.96,High:724,Low:703.35,Close:704.74,Volume:29437000}, + {Date:1619611200000,Open:696.41,High:708.5,Low:693.6,Close:694.4,Volume:22271000}, + {Date:1619697600000,Open:699.51,High:702.25,Low:668.5,Close:677,Volume:28845400}, + {Date:1619784000000,Open:667.59,High:715.47,Low:666.14,Close:709.44,Volume:40758700}, + {Date:1620043200000,Open:703.8,High:706,Low:680.5,Close:684.9,Volume:27043100}, + {Date:1620129600000,Open:678.94,High:683.45,Low:657.7,Close:673.6,Volume:29739300}, + {Date:1620216000000,Open:681.06,High:685.3,Low:667.34,Close:670.94,Volume:21901900}, + {Date:1620302400000,Open:680.76,High:681.02,Low:650,Close:663.54,Volume:27784600}, + {Date:1620388800000,Open:665.8,High:690,Low:660.22,Close:672.37,Volume:23469200}, + {Date:1620648000000,Open:664.9,High:665.05,Low:627.61,Close:629.04,Volume:31392400}, + {Date:1620734400000,Open:599.24,High:627.1,Low:595.6,Close:617.2,Volume:46503900}, + {Date:1620820800000,Open:602.49,High:620.41,Low:586.77,Close:589.89,Volume:33823600}, + {Date:1620907200000,Open:601.54,High:606.46,Low:559.65,Close:571.69,Volume:44184900}, + {Date:1620993600000,Open:583.41,High:592.87,Low:570.46,Close:589.74,Volume:33370900}, + {Date:1621252800000,Open:575.55,High:589.73,Low:561.2,Close:576.83,Volume:32390400}, + {Date:1621339200000,Open:568,High:596.25,Low:563.38,Close:577.87,Volume:36830600}, + {Date:1621425600000,Open:552.55,High:566.21,Low:546.98,Close:563.46,Volume:39578400}, + {Date:1621512000000,Open:575,High:588.85,Low:571.07,Close:586.78,Volume:30821100}, + {Date:1621598400000,Open:596.11,High:596.68,Low:580,Close:580.88,Volume:26030600}, + {Date:1621857600000,Open:581.6,High:614.48,Low:573.65,Close:606.44,Volume:34558100}, + {Date:1621944000000,Open:607.31,High:613.99,Low:595.71,Close:604.69,Volume:28005900}, + {Date:1622030400000,Open:607.56,High:626.17,Low:601.5,Close:619.13,Volume:28639300}, + {Date:1622116800000,Open:620.24,High:631.13,Low:616.21,Close:630.85,Volume:26370600}, + {Date:1622203200000,Open:628.5,High:635.59,Low:622.38,Close:625.22,Volume:22737000}, + {Date:1622548800000,Open:627.8,High:633.8,Low:620.55,Close:623.9,Volume:18084900}, + {Date:1622635200000,Open:620.13,High:623.36,Low:599.14,Close:605.12,Volume:23302800}, + {Date:1622721600000,Open:601.8,High:604.55,Low:571.22,Close:572.84,Volume:30111900}, + {Date:1622808000000,Open:579.71,High:600.61,Low:577.2,Close:599.05,Volume:24036900}, + {Date:1623067200000,Open:591.83,High:610,Low:582.88,Close:605.13,Volume:22543700}, + {Date:1623153600000,Open:623.01,High:623.09,Low:595.5,Close:603.59,Volume:26053400}, + {Date:1623240000000,Open:602.17,High:611.79,Low:597.63,Close:598.78,Volume:16584600}, + {Date:1623326400000,Open:603.88,High:616.59,Low:600.5,Close:610.12,Volume:23919600}, + {Date:1623412800000,Open:610.23,High:612.56,Low:601.52,Close:609.89,Volume:16205300}, + {Date:1623672000000,Open:612.23,High:625.49,Low:609.18,Close:617.69,Volume:20424000}, + {Date:1623758400000,Open:616.69,High:616.79,Low:598.23,Close:599.36,Volume:17764100}, + {Date:1623844800000,Open:597.54,High:608.5,Low:593.5,Close:604.87,Volume:22144100}, + {Date:1623931200000,Open:601.89,High:621.47,Low:601.34,Close:616.6,Volume:22701400}, + {Date:1624017600000,Open:613.37,High:628.35,Low:611.8,Close:623.31,Volume:24560900}, + {Date:1624276800000,Open:624.48,High:631.39,Low:608.88,Close:620.83,Volume:24812700}, + {Date:1624363200000,Open:618.25,High:628.57,Low:615.5,Close:623.71,Volume:19158900}, + {Date:1624449600000,Open:632,High:657.2,Low:630.04,Close:656.57,Volume:31099200}, + {Date:1624536000000,Open:674.99,High:697.62,Low:667.61,Close:679.82,Volume:45982400}, + {Date:1624622400000,Open:689.58,High:693.81,Low:668.7,Close:671.87,Volume:32496700}, + {Date:1624881600000,Open:671.64,High:694.7,Low:670.32,Close:688.72,Volume:21628200}, + {Date:1624968000000,Open:684.65,High:687.51,Low:675.89,Close:680.76,Volume:17381300}, + {Date:1625054400000,Open:679.77,High:692.81,Low:678.14,Close:679.7,Volume:18924900}, + {Date:1625140800000,Open:683.92,High:687.99,Low:672.8,Close:677.92,Volume:18634500}, + {Date:1625227200000,Open:678.98,High:700,Low:673.26,Close:678.9,Volume:27054500}, + {Date:1625572800000,Open:681.71,High:684,Low:651.4,Close:659.58,Volume:23284500}, + {Date:1625659200000,Open:664.27,High:665.7,Low:638.32,Close:644.65,Volume:18792000}, + {Date:1625745600000,Open:628.37,High:654.43,Low:620.46,Close:652.81,Volume:22773300}, + {Date:1625832000000,Open:653.18,High:658.91,Low:644.69,Close:656.95,Volume:18140500}, + {Date:1626091200000,Open:662.2,High:687.24,Low:662.16,Close:685.7,Volume:25927000}, + {Date:1626177600000,Open:686.32,High:693.28,Low:666.3,Close:668.54,Volume:20966100}, + {Date:1626264000000,Open:670.75,High:678.61,Low:652.84,Close:653.38,Volume:21641200}, + {Date:1626350400000,Open:658.39,High:666.14,Low:637.88,Close:650.6,Volume:20209600}, + {Date:1626436800000,Open:654.68,High:656.7,Low:642.2,Close:644.22,Volume:16371000}, + {Date:1626696000000,Open:629.89,High:647.2,Low:621.29,Close:646.22,Volume:21297100}, + {Date:1626782400000,Open:651.99,High:662.39,Low:640.5,Close:660.5,Volume:15487100}, + {Date:1626868800000,Open:659.61,High:664.86,Low:650.29,Close:655.29,Volume:13953300}, + {Date:1626955200000,Open:656.44,High:662.17,Low:644.6,Close:649.26,Volume:15105700}, + {Date:1627041600000,Open:646.36,High:648.8,Low:637.3,Close:643.38,Volume:14604900}, + {Date:1627300800000,Open:650.97,High:668.2,Low:647.11,Close:657.62,Volume:25336600}, + {Date:1627387200000,Open:663.4,High:666.5,Low:627.24,Close:644.78,Volume:32813300}, + {Date:1627473600000,Open:647,High:654.97,Low:639.4,Close:646.98,Volume:16006600}, + {Date:1627560000000,Open:649.79,High:683.69,Low:648.8,Close:677.35,Volume:30394600}, + {Date:1627646400000,Open:671.76,High:697.53,Low:669,Close:687.2,Volume:29656400}, + {Date:1627905600000,Open:700,High:726.94,Low:698.4,Close:709.67,Volume:33615800}, + {Date:1627992000000,Open:719,High:722.65,Low:701.01,Close:709.74,Volume:21620300}, + {Date:1628078400000,Open:711,High:724.9,Low:708.93,Close:710.92,Volume:17002600}, + {Date:1628164800000,Open:716,High:720.95,Low:711.41,Close:714.63,Volume:12919600}, + {Date:1628251200000,Open:711.9,High:716.33,Low:697.63,Close:699.1,Volume:15623000}, + {Date:1628510400000,Open:710.17,High:719.03,Low:705.13,Close:713.76,Volume:14715300}, + {Date:1628596800000,Open:713.99,High:716.59,Low:701.88,Close:709.99,Volume:13432300}, + {Date:1628683200000,Open:712.71,High:715.18,Low:704.21,Close:707.82,Volume:9800600}, + {Date:1628769600000,Open:706.34,High:722.8,Low:699.4,Close:722.25,Volume:17459100}, + {Date:1628856000000,Open:723.71,High:729.9,Low:714.34,Close:717.17,Volume:16731500}, + {Date:1629115200000,Open:705.07,High:709.5,Low:676.4,Close:686.17,Volume:22677400}, + {Date:1629201600000,Open:672.66,High:674.58,Low:648.84,Close:665.71,Volume:23721300}, + {Date:1629288000000,Open:669.75,High:695.77,Low:669.35,Close:688.99,Volume:20349400}, + {Date:1629374400000,Open:678.21,High:686.55,Low:667.59,Close:673.47,Volume:14313500}, + {Date:1629460800000,Open:682.85,High:692.13,Low:673.7,Close:680.26,Volume:14841900}, + {Date:1629720000000,Open:685.44,High:712.13,Low:680.75,Close:706.3,Volume:20264900}, + {Date:1629806400000,Open:710.68,High:715.22,Low:702.64,Close:708.49,Volume:13083100}, + {Date:1629892800000,Open:707.03,High:716.97,Low:704,Close:711.2,Volume:12645600}, + {Date:1629979200000,Open:708.31,High:715.4,Low:697.62,Close:701.16,Volume:13214300}, + {Date:1630065600000,Open:705,High:715,Low:702.1,Close:711.92,Volume:13833800}, + {Date:1630324800000,Open:714.72,High:731,Low:712.73,Close:730.91,Volume:18604200}, + {Date:1630411200000,Open:733,High:740.39,Low:726.44,Close:735.72,Volume:20855400}, + {Date:1630497600000,Open:734.08,High:741.99,Low:731.27,Close:734.09,Volume:13204300}, + {Date:1630584000000,Open:734.5,High:740.97,Low:730.54,Close:732.39,Volume:12777300}, + {Date:1630670400000,Open:732.25,High:734,Low:724.2,Close:733.57,Volume:15246100}, + {Date:1631016000000,Open:740,High:760.2,Low:739.26,Close:752.92,Volume:20039800}, + {Date:1631102400000,Open:761.58,High:764.45,Low:740.77,Close:753.87,Volume:18793000}, + {Date:1631188800000,Open:753.41,High:762.1,Low:751.63,Close:754.86,Volume:14077700}, + {Date:1631275200000,Open:759.6,High:762.61,Low:734.52,Close:736.27,Volume:15184200}, + {Date:1631534400000,Open:740.21,High:744.78,Low:708.85,Close:743,Volume:22952500}, + {Date:1631620800000,Open:742.57,High:754.47,Low:736.4,Close:744.49,Volume:18524900}, + {Date:1631707200000,Open:745,High:756.86,Low:738.36,Close:755.83,Volume:15357700}, + {Date:1631793600000,Open:752.83,High:758.91,Low:747.61,Close:756.99,Volume:13923400}, + {Date:1631880000000,Open:757.15,High:761.04,Low:750,Close:759.49,Volume:28204200}, + {Date:1632139200000,Open:734.56,High:742,Low:718.62,Close:730.17,Volume:24757700}, + {Date:1632225600000,Open:734.79,High:744.74,Low:730.44,Close:739.38,Volume:16330700}, + {Date:1632312000000,Open:743.53,High:753.67,Low:739.12,Close:751.94,Volume:15126300}, + {Date:1632398400000,Open:755,High:758.2,Low:747.92,Close:753.64,Volume:11947500}, + {Date:1632484800000,Open:745.89,High:774.8,Low:744.56,Close:774.39,Volume:21373000}, + {Date:1632744000000,Open:773.12,High:799,Low:769.31,Close:791.36,Volume:28070700}, + {Date:1632830400000,Open:787.2,High:795.64,Low:766.18,Close:777.56,Volume:25381400}, + {Date:1632916800000,Open:779.8,High:793.5,Low:770.68,Close:781.31,Volume:20942900}, + {Date:1633003200000,Open:781,High:789.13,Low:775,Close:775.48,Volume:17956000}, + {Date:1633089600000,Open:778.4,High:780.78,Low:763.59,Close:775.22,Volume:17031400}, + {Date:1633348800000,Open:796.5,High:806.97,Low:776.12,Close:781.53,Volume:30483300}, + {Date:1633435200000,Open:784.8,High:797.31,Low:774.2,Close:780.59,Volume:18432600}, + {Date:1633521600000,Open:776.2,High:786.66,Low:773.22,Close:782.75,Volume:14632800}, + {Date:1633608000000,Open:785.46,High:805,Low:783.38,Close:793.61,Volume:19195800}, + {Date:1633694400000,Open:796.21,High:796.38,Low:780.91,Close:785.49,Volume:16738600}, + {Date:1633953600000,Open:787.65,High:801.24,Low:785.5,Close:791.94,Volume:14200300}, + {Date:1634040000000,Open:800.93,High:812.32,Low:796.57,Close:805.72,Volume:22020000}, + {Date:1634126400000,Open:810.47,High:815.41,Low:805.78,Close:811.08,Volume:14120100}, + {Date:1634212800000,Open:815.49,High:820.25,Low:813.35,Close:818.32,Volume:12247200}, + {Date:1634299200000,Open:823.74,High:843.21,Low:822.35,Close:843.03,Volume:18924600}, + {Date:1634558400000,Open:851.79,High:875.26,Low:851.47,Close:870.11,Volume:24207200}, + {Date:1634644800000,Open:877.53,High:877.95,Low:862.51,Close:864.27,Volume:17381100}, + {Date:1634731200000,Open:865.35,High:869.49,Low:857.38,Close:865.8,Volume:14032100}, + {Date:1634817600000,Open:856,High:900,Low:855.5,Close:894,Volume:31481500}, + {Date:1634904000000,Open:895.5,High:910,Low:890.96,Close:909.68,Volume:22880800}, + {Date:1635163200000,Open:950.53,High:1045.02,Low:944.2,Close:1024.86,Volume:62852100}, + {Date:1635249600000,Open:1024.69,High:1094.94,Low:1001.44,Close:1018.43,Volume:62415000}, + {Date:1635336000000,Open:1039.66,High:1070.88,Low:1030.78,Close:1037.86,Volume:38526500}, + {Date:1635422400000,Open:1068.31,High:1081,Low:1054.2,Close:1077.04,Volume:27213200}, + {Date:1635508800000,Open:1081.86,High:1115.21,Low:1073.21,Close:1114,Volume:29918400}, + {Date:1635768000000,Open:1145,High:1209.75,Low:1118.66,Close:1208.59,Volume:56048700}, + {Date:1635854400000,Open:1159.36,High:1208.59,Low:1146,Close:1172,Volume:42737800}, + {Date:1635940800000,Open:1177.33,High:1215.39,Low:1152.62,Close:1213.86,Volume:34628500}, + {Date:1636027200000,Open:1234.41,High:1243.49,Low:1217,Close:1229.91,Volume:25397400}, + {Date:1636113600000,Open:1228,High:1239.87,Low:1208,Close:1222.09,Volume:21628800}, + {Date:1636372800000,Open:1149.79,High:1197,Low:1133,Close:1162.94,Volume:33445700}, + {Date:1636459200000,Open:1173.6,High:1174.5,Low:1011.52,Close:1023.5,Volume:59105800}, + {Date:1636545600000,Open:1010.41,High:1078.1,Low:987.31,Close:1067.95,Volume:42802700}, + {Date:1636632000000,Open:1102.77,High:1104.97,Low:1054.68,Close:1063.51,Volume:22396600}, + {Date:1636718400000,Open:1047.5,High:1054.5,Low:1019.2,Close:1033.42,Volume:25573100}, + {Date:1636977600000,Open:1017.63,High:1031.98,Low:978.6,Close:1013.39,Volume:34775600}, + {Date:1637064000000,Open:1003.31,High:1057.2,Low:1002.18,Close:1054.73,Volume:26542400}, + {Date:1637150400000,Open:1063.51,High:1119.64,Low:1055.5,Close:1089.01,Volume:31445400}, + {Date:1637236800000,Open:1106.55,High:1112,Low:1075.02,Close:1096.38,Volume:20898900}, + {Date:1637323200000,Open:1098.87,High:1138.72,Low:1092.7,Close:1137.06,Volume:21642300}, + {Date:1637582400000,Open:1162.33,High:1201.95,Low:1132.43,Close:1156.87,Volume:33072500}, + {Date:1637668800000,Open:1167.51,High:1180.5,Low:1062.7,Close:1109.03,Volume:36171700}, + {Date:1637755200000,Open:1080.39,High:1132.77,Low:1062,Close:1116,Volume:22560200}, + {Date:1637928000000,Open:1099.47,High:1108.78,Low:1081,Close:1081.92,Volume:11680900}, + {Date:1638187200000,Open:1100.99,High:1142.67,Low:1100.19,Close:1136.99,Volume:19464500}, + {Date:1638273600000,Open:1144.37,High:1168,Low:1118,Close:1144.76,Volume:27092000}, + {Date:1638360000000,Open:1160.7,High:1172.84,Low:1090.76,Close:1095,Volume:22816800}, + {Date:1638446400000,Open:1099.06,High:1113,Low:1056.65,Close:1084.6,Volume:24371600}, + {Date:1638532800000,Open:1084.79,High:1090.58,Low:1000.21,Close:1014.97,Volume:30774000}, + {Date:1638792000000,Open:1001.51,High:1021.64,Low:950.5,Close:1009.01,Volume:27221000}, + {Date:1638878400000,Open:1044.2,High:1057.67,Low:1026.81,Close:1051.75,Volume:18694900}, + {Date:1638964800000,Open:1052.71,High:1072.38,Low:1033,Close:1068.96,Volume:13968800}, + {Date:1639051200000,Open:1060.64,High:1062.49,Low:1002.36,Close:1003.8,Volume:19812800}, + {Date:1639137600000,Open:1008.75,High:1020.98,Low:982.53,Close:1017.03,Volume:19888100}, + {Date:1639396800000,Open:1001.09,High:1005,Low:951.42,Close:966.41,Volume:26198500}, + {Date:1639483200000,Open:945,High:966.41,Low:930,Close:958.51,Volume:23602100}, + {Date:1639569600000,Open:953.21,High:978.75,Low:928.25,Close:975.99,Volume:25056400}, + {Date:1639656000000,Open:994.5,High:994.98,Low:921.85,Close:926.92,Volume:27590500}, + {Date:1639742400000,Open:914.77,High:960.66,Low:909.04,Close:932.57,Volume:33479100}, + {Date:1640001600000,Open:910.7,High:921.69,Low:893.39,Close:899.94,Volume:18826700}, + {Date:1640088000000,Open:916.87,High:939.5,Low:886.12,Close:938.53,Volume:23839300}, + {Date:1640174400000,Open:965.66,High:1015.66,Low:957.05,Close:1008.87,Volume:31211400}, + {Date:1640260800000,Open:1006.8,High:1072.98,Low:997.56,Close:1067,Volume:30904400}, + {Date:1640606400000,Open:1073.67,High:1117,Low:1070.72,Close:1093.94,Volume:23715300}, + {Date:1640692800000,Open:1109.49,High:1119,Low:1078.42,Close:1088.47,Volume:20108000}, + {Date:1640779200000,Open:1098.64,High:1104,Low:1064.14,Close:1086.19,Volume:18718000}, + {Date:1640865600000,Open:1061.33,High:1095.55,Low:1053.15,Close:1070.34,Volume:15680300}, + {Date:1640952000000,Open:1073.44,High:1082,Low:1054.59,Close:1056.78,Volume:13577900}, + {Date:1641211200000,Open:1147.75,High:1201.07,Low:1136.04,Close:1199.78,Volume:34643800}, + {Date:1641297600000,Open:1189.55,High:1208,Low:1123.05,Close:1149.59,Volume:33416100}, + {Date:1641384000000,Open:1146.65,High:1170.34,Low:1081.01,Close:1088.12,Volume:26706600}, + {Date:1641470400000,Open:1077,High:1088,Low:1020.5,Close:1064.7,Volume:30112200}, + {Date:1641556800000,Open:1080.37,High:1080.93,Low:1010,Close:1026.96,Volume:28054900}, + {Date:1641816000000,Open:1000,High:1059.1,Low:980,Close:1058.12,Volume:30605000}, + {Date:1641902400000,Open:1053.67,High:1075.85,Low:1038.82,Close:1064.4,Volume:22021100}, + {Date:1641988800000,Open:1078.85,High:1114.84,Low:1072.59,Close:1106.22,Volume:27913000}, + {Date:1642075200000,Open:1109.07,High:1115.6,Low:1026.54,Close:1031.56,Volume:32403300}, + {Date:1642161600000,Open:1019.88,High:1052,Low:1013.38,Close:1049.61,Volume:24308100}, + {Date:1642507200000,Open:1026.61,High:1070.79,Low:1016.06,Close:1030.51,Volume:22247800}, + {Date:1642593600000,Open:1041.71,High:1054.67,Low:995,Close:995.65,Volume:25147500}, + {Date:1642680000000,Open:1009.73,High:1041.66,Low:994,Close:996.27,Volume:23496200}, + {Date:1642766400000,Open:996.34,High:1004.55,Low:940.5,Close:943.9,Volume:34472000}, + {Date:1643025600000,Open:904.76,High:933.51,Low:851.47,Close:930,Volume:50521900}, + {Date:1643112000000,Open:914.2,High:951.26,Low:903.21,Close:918.4,Volume:28865300}, + {Date:1643198400000,Open:952.43,High:987.69,Low:906,Close:937.41,Volume:34955800}, + {Date:1643284800000,Open:933.36,High:935.39,Low:829,Close:829.1,Volume:49036500}, + {Date:1643371200000,Open:831.56,High:857.5,Low:792.01,Close:846.35,Volume:44929700}, + {Date:1643630400000,Open:872.71,High:937.99,Low:862.05,Close:936.72,Volume:34812000}, + {Date:1643716800000,Open:935.21,High:943.7,Low:905,Close:931.25,Volume:24379400}, + {Date:1643803200000,Open:928.18,High:931.5,Low:889.41,Close:905.66,Volume:22264300}, + {Date:1643889600000,Open:882,High:937,Low:880.52,Close:891.14,Volume:26285200}, + {Date:1643976000000,Open:897.22,High:936.5,Low:881.17,Close:923.32,Volume:24541800}, + {Date:1644235200000,Open:923.79,High:947.77,Low:902.71,Close:907.34,Volume:20331500}, + {Date:1644321600000,Open:905.53,High:926.29,Low:894.8,Close:922,Volume:16909700}, + {Date:1644408000000,Open:935,High:946.27,Low:920,Close:932,Volume:17419800}, + {Date:1644494400000,Open:908.37,High:943.81,Low:896.7,Close:904.55,Volume:22042300}, + {Date:1644580800000,Open:909.63,High:915.96,Low:850.7,Close:860,Volume:26548600}, + {Date:1644840000000,Open:861.57,High:898.88,Low:853.15,Close:875.76,Volume:22585500}, + {Date:1644926400000,Open:900,High:923,Low:893.38,Close:922.43,Volume:19095400}, + {Date:1645012800000,Open:914.05,High:926.43,Low:901.21,Close:923.39,Volume:17098100}, + {Date:1645099200000,Open:913.26,High:918.5,Low:874.1,Close:876.35,Volume:18392800}, + {Date:1645185600000,Open:886,High:886.87,Low:837.61,Close:856.98,Volume:22833900}, + {Date:1645531200000,Open:834.13,High:856.73,Low:801.1,Close:821.53,Volume:27762700}, + {Date:1645617600000,Open:830.43,High:835.3,Low:760.56,Close:764.04,Volume:31752300}, + {Date:1645704000000,Open:700.39,High:802.48,Low:700,Close:800.77,Volume:45107400}, + {Date:1645790400000,Open:809.23,High:819.5,Low:782.4,Close:809.87,Volume:25355900}, + {Date:1646049600000,Open:815.01,High:876.86,Low:814.71,Close:870.43,Volume:33002300}, + {Date:1646136000000,Open:869.68,High:889.88,Low:853.78,Close:864.37,Volume:24922300}, + {Date:1646222400000,Open:872.13,High:886.48,Low:844.27,Close:879.89,Volume:24881100}, + {Date:1646308800000,Open:878.77,High:886.44,Low:832.6,Close:839.29,Volume:20541200}, + {Date:1646395200000,Open:849.1,High:855.65,Low:825.16,Close:838.29,Volume:22333200}, + {Date:1646654400000,Open:856.3,High:866.14,Low:804.57,Close:804.58,Volume:24164700}, + {Date:1646740800000,Open:795.53,High:849.99,Low:782.17,Close:824.4,Volume:26799700}, + {Date:1646827200000,Open:839.48,High:860.56,Low:832.01,Close:858.97,Volume:19728000}, + {Date:1646913600000,Open:851.45,High:854.45,Low:810.36,Close:838.3,Volume:19549500}, + {Date:1647000000000,Open:840.2,High:843.8,Low:793.77,Close:795.35,Volume:22272800}, + {Date:1647259200000,Open:780.61,High:800.7,Low:756.04,Close:766.37,Volume:23717400}, + {Date:1647345600000,Open:775.27,High:805.57,Low:756.57,Close:801.89,Volume:22280400}, + {Date:1647432000000,Open:809,High:842,Low:802.26,Close:840.23,Volume:28009600}, + {Date:1647518400000,Open:830.99,High:875,Low:825.72,Close:871.6,Volume:22194300}, + {Date:1647604800000,Open:874.49,High:907.85,Low:867.39,Close:905.39,Volume:33408500}, + {Date:1647864000000,Open:914.98,High:942.85,Low:907.09,Close:921.16,Volume:27327200}, + {Date:1647950400000,Open:930,High:997.86,Low:921.75,Close:993.98,Volume:35289500}, + {Date:1648036800000,Open:979.94,High:1040.7,Low:976.4,Close:999.11,Volume:40225400}, + {Date:1648123200000,Open:1009.73,High:1024.49,Low:988.8,Close:1013.92,Volume:22973600}, + {Date:1648209600000,Open:1008,High:1021.8,Low:997.32,Close:1010.64,Volume:20642900}, + {Date:1648468800000,Open:1065.1,High:1097.88,Low:1053.6,Close:1091.84,Volume:34168700}, + {Date:1648555200000,Open:1107.99,High:1114.77,Low:1073.11,Close:1099.57,Volume:24538300}, + {Date:1648641600000,Open:1091.17,High:1113.95,Low:1084,Close:1093.99,Volume:19955000} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/index.css b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/index.html b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/index.html new file mode 100644 index 00000000..374b7469 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/index.html @@ -0,0 +1,25 @@ + + + + + amCharts 5 Example - stock-chart-comparing-stocks + + + +
+
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/index.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/index.js new file mode 100644 index 00000000..c4485173 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-comparing-stocks/index.js @@ -0,0 +1,404 @@ +// Create root element +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create a stock chart +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Instantiating_the_chart +var stockChart = root.container.children.push(am5stock.StockChart.new(root, { +})); + + +// Set global number format +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/ +root.numberFormatter.set("numberFormat", "#,###.00"); + + +// Create a main stock panel (chart) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Adding_panels +var mainPanel = stockChart.panels.push(am5stock.StockPanel.new(root, { + wheelY: "zoomX", + panX: true, + panY: true +})); + + +// Create value axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var valueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, { + pan: "zoom" + }), + extraMin: 0.1, // adds some space for for main series + tooltip: am5.Tooltip.new(root, {}), + numberFormat: "#,###.00", + extraTooltipPrecision: 2 +})); + +var dateAxis = mainPanel.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + + +// Add series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var valueSeries = mainPanel.series.push(am5xy.CandlestickSeries.new(root, { + name: "MSFT", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Close", + highValueYField: "High", + lowValueYField: "Low", + openValueYField: "Open", + calculateAggregates: true, + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "open: [bold]{openValueY}[/] high: [bold]{highValueY}[/] low: [bold]{lowValueY}[/] close: [bold]{valueY}[/]", + legendRangeValueText: "" +})); + + +// Set main value series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("stockSeries", valueSeries); + + +// Add a stock legend +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/stock-legend/ +var valueLegend = mainPanel.plotContainer.children.push(am5stock.StockLegend.new(root, { + stockChart: stockChart +})); + + +// Create volume axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var volumeAxisRenderer = am5xy.AxisRendererY.new(root, { + inside: true +}); + +volumeAxisRenderer.labels.template.set("forceHidden", true); +volumeAxisRenderer.grid.template.set("forceHidden", true); + +var volumeValueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + numberFormat: "#.#a", + height: am5.percent(20), + y: am5.percent(100), + centerY: am5.percent(100), + renderer: volumeAxisRenderer +})); + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var volumeSeries = mainPanel.series.push(am5xy.ColumnSeries.new(root, { + name: "Volume", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Volume", + xAxis: dateAxis, + yAxis: volumeValueAxis, + legendValueText: "[bold]{valueY.formatNumber('#,###.0a')}[/]" +})); + +volumeSeries.columns.template.setAll({ + strokeOpacity: 0, + fillOpacity: 0.5 +}); + +// color columns by stock rules +volumeSeries.columns.template.adapters.add("fill", function(fill, target) { + var dataItem = target.dataItem; + if (dataItem) { + return stockChart.getVolumeColor(dataItem); + } + return fill; +}) + + +// Set main series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("volumeSeries", volumeSeries); +valueLegend.data.setAll([valueSeries, volumeSeries]); + + +// Add cursor(s) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +mainPanel.set("cursor", am5xy.XYCursor.new(root, { + yAxis: valueAxis, + xAxis: dateAxis, + snapToSeries: [valueSeries], + snapToSeriesBy: "y!" +})); + + +// Add scrollbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = mainPanel.set("scrollbarX", am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +})); +stockChart.toolsContainer.children.push(scrollbar); + +var sbDateAxis = scrollbar.chart.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, {}) +})); + +var sbValueAxis = scrollbar.chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + +var sbSeries = scrollbar.chart.series.push(am5xy.LineSeries.new(root, { + valueYField: "Close", + valueXField: "Date", + xAxis: sbDateAxis, + yAxis: sbValueAxis +})); + +sbSeries.fills.template.setAll({ + visible: true, + fillOpacity: 0.3 +}); + + +// Function that dynamically loads data +function loadData(ticker, series, granularity) { + var data = (window)[ticker + "_" + granularity]; + am5.array.each(series, function(item) { + item.data.setAll(data); + }); +} + +// Load initial data for the first series +var currentGranularity = "day"; +loadData("MSFT", [valueSeries, volumeSeries, sbSeries], currentGranularity); + +// Add comparing series +addComparingSeries("AAPL"); + + +// Set up main indices selector +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/comparison-control/ +var mainSeriesControl = am5stock.DropdownListControl.new(root, { + stockChart: stockChart, + name: valueSeries.get("name"), + icon: am5stock.StockIcons.getIcon("Search"), + fixedLabel: true, + searchable: true, + searchCallback: function(query) { + var mainSeries = stockChart.get("stockSeries"); + var mainSeriesID = mainSeries ? mainSeries.get("name") : ""; + var list = getTicker(query); + am5.array.each(list, function(item) { + if (item.id == mainSeriesID) { + item.disabled = true; + } + }) + return list; + } +}); + +mainSeriesControl.events.on("selected", function(ev) { + var valueSeries = stockChart.get("stockSeries"); + var volumeSeries = stockChart.get("volumeSeries"); + + mainSeriesControl.set("name", ev.item.subLabel); + valueSeries.set("name", ev.item.subLabel); + loadData(ev.item.subLabel, [valueSeries, volumeSeries, sbSeries], currentGranularity); +}); + + +// Set up comparison control +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/comparison-control/ +var comparisonControl = am5stock.ComparisonControl.new(root, { + stockChart: stockChart, + searchable: true, + searchCallback: function (query) { + var compared = stockChart.getPrivate("comparedSeries", []); + var main = stockChart.get("stockSeries"); + if (compared.length > 4) { + return [{ + label: "A maximum of 5 comparisons is already selected. Remove some to add new ones.", + id: "count", + info: true + }]; + }; + + var comparedIds = []; + am5.array.each(compared, function(series) { + comparedIds.push(series.get("name")); + }); + + var list = getTicker(query); + am5.array.each(list, function(item) { + if (comparedIds.indexOf(item.id) !== -1 || main.get("name") == item.id) { + item.disabled = true; + } + }) + return list; + } +}); + +comparisonControl.events.on("selected", function(ev) { + addComparingSeries(ev.item.subLabel); +}); + +function addComparingSeries(label) { + var series = am5xy.LineSeries.new(root, { + name: label, + valueYField: "Close", + calculateAggregates: true, + valueXField: "Date", + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "{valueY.formatNumber('#.00')}" + }); + var comparingSeries = stockChart.addComparingSeries(series); + loadData(label, [comparingSeries], currentGranularity); +} + +function getTicker(search) { + search = search.toLowerCase(); + var tickers = [ + { label: "Apple", subLabel: "AAPL", id: "AAPL" }, + { label: "Advanced Micro Devices", subLabel: "AMD", id: "AMD" }, + { label: "Microsoft", subLabel: "MSFT", id: "MSFT" }, + { label: "Alphabet (Google)", subLabel: "GOOG", id: "GOOG" }, + { label: "Amazon", subLabel: "AMZN", id: "AMZN" }, + { label: "Tesla", subLabel: "TSLA", id: "TSLA" }, + { label: "NVIDIA", subLabel: "NVDA", id: "NVDA" }, + { label: "Netflix", subLabel: "NFLX", id: "NFLX" } + ]; + + return tickers.filter(function (item) { + return item.label.toLowerCase().match(search) || item.subLabel.toLowerCase().match(search); + }); +} + + +// Set up series type switcher +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/series-type-control/ +var seriesSwitcher = am5stock.SeriesTypeControl.new(root, { + stockChart: stockChart +}); + +seriesSwitcher.events.on("selected", function(ev) { + setSeriesType(ev.item.id); +}); + +function getNewSettings(series) { + var newSettings = []; + am5.array.each(["name", "valueYField", "highValueYField", "lowValueYField", "openValueYField", "calculateAggregates", "valueXField", "xAxis", "yAxis", "legendValueText", "legendRangeValueText", "stroke", "fill"], function(setting) { + newSettings[setting] = series.get(setting); + }); + return newSettings; +} + +function setSeriesType(seriesType) { + // Get current series and its settings + var currentSeries = stockChart.get("stockSeries"); + var newSettings = getNewSettings(currentSeries); + + // Remove previous series + var data = currentSeries.data.values; + mainPanel.series.removeValue(currentSeries); + + // Create new series + var series; + switch (seriesType) { + case "line": + series = mainPanel.series.push(am5xy.LineSeries.new(root, newSettings)); + break; + case "candlestick": + case "procandlestick": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.CandlestickSeries.new(root, newSettings)); + if (seriesType == "procandlestick") { + series.columns.template.get("themeTags").push("pro"); + } + break; + case "ohlc": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.OHLCSeries.new(root, newSettings)); + break; + } + + // Set new series as stockSeries + if (series) { + valueLegend.data.removeValue(currentSeries); + series.data.setAll(data); + stockChart.set("stockSeries", series); + var cursor = mainPanel.get("cursor"); + if (cursor) { + cursor.set("snapToSeries", [series]); + } + valueLegend.data.insertIndex(0, series); + } +} + + +// Stock toolbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/ +var toolbar = am5stock.StockToolbar.new(root, { + container: document.getElementById("chartcontrols"), + stockChart: stockChart, + controls: [ + mainSeriesControl, + comparisonControl, + am5stock.IndicatorControl.new(root, { + stockChart: stockChart, + legend: valueLegend + }), + am5stock.DateRangeSelector.new(root, { + stockChart: stockChart + }), + am5stock.PeriodSelector.new(root, { + stockChart: stockChart + }), + seriesSwitcher, + am5stock.DrawingControl.new(root, { + stockChart: stockChart + }), + am5stock.ResetControl.new(root, { + stockChart: stockChart + }), + am5stock.SettingsControl.new(root, { + stockChart: stockChart + }) + ] +}) diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/README.md b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_day.js new file mode 100644 index 00000000..e9c8fb4d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_day.js @@ -0,0 +1,255 @@ +window["MSFT_day"] = [ + {Date:1617192000000,Open:232.91,High:239.1,Low:232.39,Close:235.77,Volume:43623500}, + {Date:1617278400000,Open:238.47,High:242.84,Low:238.05,Close:242.35,Volume:30338000}, + {Date:1617624000000,Open:242.76,High:249.96,Low:242.7,Close:249.07,Volume:36910600}, + {Date:1617710400000,Open:247.61,High:249.4,Low:246.88,Close:247.86,Volume:22931900}, + {Date:1617796800000,Open:247.81,High:250.93,Low:247.19,Close:249.9,Volume:22719800}, + {Date:1617883200000,Open:252.77,High:254.14,Low:252,Close:253.25,Volume:23625200}, + {Date:1617969600000,Open:252.87,High:255.99,Low:252.44,Close:255.85,Volume:24326800}, + {Date:1618228800000,Open:254.71,High:257.67,Low:254.62,Close:255.91,Volume:27148700}, + {Date:1618315200000,Open:257.26,High:259.19,Low:256.83,Close:258.49,Volume:23837500}, + {Date:1618401600000,Open:257.48,High:258.83,Low:255.16,Close:255.59,Volume:23070900}, + {Date:1618488000000,Open:257.93,High:259.93,Low:257.73,Close:259.5,Volume:25627500}, + {Date:1618574400000,Open:259.47,High:261,Low:257.6,Close:260.74,Volume:24878600}, + {Date:1618833600000,Open:260.19,High:261.48,Low:257.82,Close:258.74,Volume:23209300}, + {Date:1618920000000,Open:257.82,High:260.2,Low:256.84,Close:258.26,Volume:19722900}, + {Date:1619006400000,Open:258.94,High:260.68,Low:257.25,Close:260.58,Volume:24030400}, + {Date:1619092800000,Open:260.21,High:261.78,Low:255.64,Close:257.17,Volume:25606200}, + {Date:1619179200000,Open:257.88,High:261.51,Low:257.27,Close:261.15,Volume:21462600}, + {Date:1619438400000,Open:261.66,High:262.44,Low:260.17,Close:261.55,Volume:19763300}, + {Date:1619524800000,Open:261.58,High:263.19,Low:260.12,Close:261.97,Volume:31014200}, + {Date:1619611200000,Open:256.08,High:256.54,Low:252.95,Close:254.56,Volume:46903100}, + {Date:1619697600000,Open:255.46,High:256.1,Low:249,Close:252.51,Volume:40589000}, + {Date:1619784000000,Open:249.74,High:253.08,Low:249.6,Close:252.18,Volume:30945100}, + {Date:1620043200000,Open:253.4,High:254.35,Low:251.12,Close:251.86,Volume:19626600}, + {Date:1620129600000,Open:250.97,High:251.21,Low:245.76,Close:247.79,Volume:32756100}, + {Date:1620216000000,Open:249.06,High:249.5,Low:245.82,Close:246.47,Volume:21901300}, + {Date:1620302400000,Open:246.45,High:249.86,Low:244.69,Close:249.73,Volume:26491100}, + {Date:1620388800000,Open:252.15,High:254.3,Low:251.17,Close:252.46,Volume:27032900}, + {Date:1620648000000,Open:250.87,High:251.73,Low:247.12,Close:247.18,Volume:29299900}, + {Date:1620734400000,Open:244.55,High:246.6,Low:242.57,Close:246.23,Volume:33641600}, + {Date:1620820800000,Open:242.17,High:244.38,Low:238.07,Close:239,Volume:36684400}, + {Date:1620907200000,Open:241.8,High:245.6,Low:241.42,Close:243.03,Volume:29624300}, + {Date:1620993600000,Open:245.58,High:249.18,Low:245.49,Close:248.15,Volume:23901100}, + {Date:1621252800000,Open:246.55,High:246.59,Low:243.52,Close:245.18,Volume:24970200}, + {Date:1621339200000,Open:246.27,High:246.41,Low:242.9,Close:243.08,Volume:20168000}, + {Date:1621425600000,Open:239.31,High:243.23,Low:238.6,Close:243.12,Volume:25739800}, + {Date:1621512000000,Open:243.96,High:247.95,Low:243.86,Close:246.48,Volume:21800700}, + {Date:1621598400000,Open:247.57,High:248.33,Low:244.74,Close:245.17,Volume:21863100}, + {Date:1621857600000,Open:247.79,High:251.16,Low:247.51,Close:250.78,Volume:21411500}, + {Date:1621944000000,Open:251.77,High:252.75,Low:250.82,Close:251.72,Volume:17704300}, + {Date:1622030400000,Open:251.43,High:252.94,Low:250.75,Close:251.49,Volume:17771600}, + {Date:1622116800000,Open:251.17,High:251.48,Low:249.25,Close:249.31,Volume:24426200}, + {Date:1622203200000,Open:251,High:252.08,Low:249.56,Close:249.68,Volume:18270200}, + {Date:1622548800000,Open:251.23,High:251.29,Low:246.96,Close:247.4,Volume:23213300}, + {Date:1622635200000,Open:248.13,High:249.27,Low:245.84,Close:247.3,Volume:19406700}, + {Date:1622721600000,Open:245.22,High:246.34,Low:243,Close:245.71,Volume:25307700}, + {Date:1622808000000,Open:247.76,High:251.65,Low:247.51,Close:250.79,Volume:25281100}, + {Date:1623067200000,Open:249.98,High:254.09,Low:249.81,Close:253.81,Volume:23079200}, + {Date:1623153600000,Open:255.16,High:256.01,Low:252.51,Close:252.57,Volume:22455000}, + {Date:1623240000000,Open:253.81,High:255.53,Low:253.21,Close:253.59,Volume:17937600}, + {Date:1623326400000,Open:254.29,High:257.46,Low:253.67,Close:257.24,Volume:24563600}, + {Date:1623412800000,Open:257.99,High:258.49,Low:256.61,Close:257.89,Volume:18999700}, + {Date:1623672000000,Open:257.9,High:259.95,Low:256.8,Close:259.89,Volume:19150500}, + {Date:1623758400000,Open:259.77,High:259.99,Low:257.68,Close:258.36,Volume:18038900}, + {Date:1623844800000,Open:259.4,High:260.58,Low:254.42,Close:257.38,Volume:27220000}, + {Date:1623931200000,Open:256.07,High:261.75,Low:256.01,Close:260.9,Volume:27565500}, + {Date:1624017600000,Open:259.63,High:262.3,Low:258.75,Close:259.43,Volume:37202200}, + {Date:1624276800000,Open:259.82,High:263.52,Low:257.92,Close:262.63,Volume:26696100}, + {Date:1624363200000,Open:262.72,High:265.79,Low:262.4,Close:265.51,Volume:24694100}, + {Date:1624449600000,Open:265.99,High:266.83,Low:264.43,Close:265.27,Volume:19518700}, + {Date:1624536000000,Open:266.16,High:267.85,Low:265.47,Close:266.69,Volume:21446900}, + {Date:1624622400000,Open:266.23,High:267.25,Low:264.76,Close:265.02,Volume:25611100}, + {Date:1624881600000,Open:266.19,High:268.9,Low:265.91,Close:268.72,Volume:19590000}, + {Date:1624968000000,Open:268.87,High:271.65,Low:267.98,Close:271.4,Volume:19937800}, + {Date:1625054400000,Open:270.69,High:271.36,Low:269.6,Close:270.9,Volume:21656500}, + {Date:1625140800000,Open:269.61,High:271.84,Low:269.6,Close:271.6,Volume:16725300}, + {Date:1625227200000,Open:272.82,High:278,Low:272.5,Close:277.65,Volume:26458000}, + {Date:1625572800000,Open:278.03,High:279.37,Low:274.3,Close:277.66,Volume:31565600}, + {Date:1625659200000,Open:279.4,High:280.69,Low:277.15,Close:279.93,Volume:23260000}, + {Date:1625745600000,Open:276.9,High:278.73,Low:274.87,Close:277.42,Volume:24618600}, + {Date:1625832000000,Open:275.72,High:278.05,Low:275.32,Close:277.94,Volume:23916700}, + {Date:1626091200000,Open:279.16,High:279.77,Low:276.58,Close:277.32,Volume:18931700}, + {Date:1626177600000,Open:277.52,High:282.85,Low:277.39,Close:280.98,Volume:26120100}, + {Date:1626264000000,Open:282.35,High:283.66,Low:280.55,Close:282.51,Volume:23113700}, + {Date:1626350400000,Open:282,High:282.51,Low:279.83,Close:281.03,Volume:22604200}, + {Date:1626436800000,Open:282.07,High:284.1,Low:279.46,Close:280.75,Volume:26186800}, + {Date:1626696000000,Open:278.93,High:280.37,Low:274.45,Close:277.01,Volume:32935600}, + {Date:1626782400000,Open:278.03,High:280.97,Low:276.26,Close:279.32,Volume:26259700}, + {Date:1626868800000,Open:278.9,High:281.52,Low:277.29,Close:281.4,Volume:24364300}, + {Date:1626955200000,Open:283.84,High:286.42,Low:283.42,Close:286.14,Volume:23384100}, + {Date:1627041600000,Open:287.37,High:289.99,Low:286.5,Close:289.67,Volume:22768100}, + {Date:1627300800000,Open:289,High:289.69,Low:286.64,Close:289.05,Volume:23176100}, + {Date:1627387200000,Open:289.43,High:289.58,Low:282.95,Close:286.54,Volume:33604100}, + {Date:1627473600000,Open:288.99,High:290.15,Low:283.83,Close:286.22,Volume:33566900}, + {Date:1627560000000,Open:286.24,High:288.62,Low:286.08,Close:286.5,Volume:18168300}, + {Date:1627646400000,Open:285.17,High:286.66,Low:283.91,Close:284.91,Volume:20944800}, + {Date:1627905600000,Open:286.36,High:286.77,Low:283.74,Close:284.82,Volume:16267400}, + {Date:1627992000000,Open:285.42,High:287.23,Low:284,Close:287.12,Volume:17879000}, + {Date:1628078400000,Open:286.22,High:287.59,Low:284.65,Close:286.51,Volume:16191300}, + {Date:1628164800000,Open:286.88,High:289.63,Low:286.1,Close:289.52,Volume:13900200}, + {Date:1628251200000,Open:288.51,High:289.5,Low:287.62,Close:289.46,Volume:16589300}, + {Date:1628510400000,Open:289.75,High:291.55,Low:287.81,Close:288.33,Volume:16117600}, + {Date:1628596800000,Open:288.8,High:289.25,Low:285.2,Close:286.44,Volume:18616600}, + {Date:1628683200000,Open:287.21,High:288.66,Low:285.86,Close:286.95,Volume:13955900}, + {Date:1628769600000,Open:286.63,High:289.97,Low:286.34,Close:289.81,Volume:14561300}, + {Date:1628856000000,Open:289.48,High:292.9,Low:289.3,Close:292.85,Volume:18249000}, + {Date:1629115200000,Open:293.19,High:294.82,Low:290.02,Close:294.6,Volume:22507600}, + {Date:1629201600000,Open:292.39,High:293.43,Low:291.08,Close:293.08,Volume:20075300}, + {Date:1629288000000,Open:292.04,High:294.82,Low:290.27,Close:290.73,Volume:21813000}, + {Date:1629374400000,Open:288.69,High:297.47,Low:288.64,Close:296.77,Volume:29850500}, + {Date:1629460800000,Open:299.72,High:305.84,Low:298.06,Close:304.36,Volume:40817600}, + {Date:1629720000000,Open:303.25,High:305.4,Low:301.85,Close:304.65,Volume:22830200}, + {Date:1629806400000,Open:305.02,High:305.65,Low:302,Close:302.62,Volume:18175800}, + {Date:1629892800000,Open:304.3,High:304.59,Low:300.42,Close:302.01,Volume:20006100}, + {Date:1629979200000,Open:300.99,High:302.43,Low:298.95,Close:299.09,Volume:17666100}, + {Date:1630065600000,Open:298.99,High:300.87,Low:296.83,Close:299.72,Volume:22605700}, + {Date:1630324800000,Open:301.12,High:304.22,Low:301.06,Close:303.59,Volume:16348100}, + {Date:1630411200000,Open:304.42,High:304.5,Low:301.5,Close:301.88,Volume:26285300}, + {Date:1630497600000,Open:302.87,High:305.19,Low:301.49,Close:301.83,Volume:18983800}, + {Date:1630584000000,Open:302.2,High:303.36,Low:300.18,Close:301.15,Volume:16285600}, + {Date:1630670400000,Open:300.99,High:302.6,Low:300.26,Close:301.14,Volume:14747900}, + {Date:1631016000000,Open:301.01,High:301.09,Low:298.2,Close:300.18,Volume:17180400}, + {Date:1631102400000,Open:299.78,High:300.61,Low:297.47,Close:300.21,Volume:15046800}, + {Date:1631188800000,Open:300.82,High:302.14,Low:297,Close:297.25,Volume:19927000}, + {Date:1631275200000,Open:298.42,High:299.92,Low:295.38,Close:295.71,Volume:19633400}, + {Date:1631534400000,Open:297.55,High:298.54,Low:294.08,Close:296.99,Volume:23652900}, + {Date:1631620800000,Open:299.56,High:301.39,Low:298.1,Close:299.79,Volume:21853400}, + {Date:1631707200000,Open:303.26,High:305.32,Low:301.82,Close:304.82,Volume:28356300}, + {Date:1631793600000,Open:303.76,High:305.31,Low:300.76,Close:305.22,Volume:19550800}, + {Date:1631880000000,Open:304.17,High:304.5,Low:299.53,Close:299.87,Volume:41372500}, + {Date:1632139200000,Open:296.33,High:298.72,Low:289.52,Close:294.3,Volume:38278700}, + {Date:1632225600000,Open:295.69,High:297.54,Low:294.07,Close:294.8,Volume:22364100}, + {Date:1632312000000,Open:296.73,High:300.22,Low:294.51,Close:298.58,Volume:26626300}, + {Date:1632398400000,Open:298.85,High:300.9,Low:297.53,Close:299.56,Volume:18604600}, + {Date:1632484800000,Open:298.23,High:299.8,Low:296.93,Close:299.35,Volume:14999000}, + {Date:1632744000000,Open:296.14,High:296.47,Low:292.94,Close:294.17,Volume:23571700}, + {Date:1632830400000,Open:289.8,High:290.78,Low:282.75,Close:283.52,Volume:43186200}, + {Date:1632916800000,Open:285.1,High:286.77,Low:283.01,Close:284,Volume:26353700}, + {Date:1633003200000,Open:285.71,High:287.83,Low:281.62,Close:281.92,Volume:32343600}, + {Date:1633089600000,Open:282.12,High:289.98,Low:281.29,Close:289.1,Volume:30086300}, + {Date:1633348800000,Open:287.4,High:287.75,Low:280.25,Close:283.11,Volume:31350700}, + {Date:1633435200000,Open:284.05,High:290.4,Low:284.05,Close:288.76,Volume:24993000}, + {Date:1633521600000,Open:285.78,High:293.63,Low:285.51,Close:293.11,Volume:28002600}, + {Date:1633608000000,Open:295.18,High:296.64,Low:293.92,Close:294.85,Volume:20430500}, + {Date:1633694400000,Open:296.22,High:296.64,Low:293.76,Close:294.85,Volume:17685700}, + {Date:1633953600000,Open:292.92,High:297.97,Low:292.75,Close:294.23,Volume:19298600}, + {Date:1634040000000,Open:295.34,High:295.44,Low:292.35,Close:292.88,Volume:17974100}, + {Date:1634126400000,Open:294.91,High:297.28,Low:293.49,Close:296.31,Volume:23416300}, + {Date:1634212800000,Open:299.21,High:303.27,Low:297.83,Close:302.75,Volume:27262900}, + {Date:1634299200000,Open:302.34,High:304.45,Low:300.52,Close:304.21,Volume:25384800}, + {Date:1634558400000,Open:303.57,High:308.21,Low:302.69,Close:307.29,Volume:22729300}, + {Date:1634644800000,Open:308.35,High:309.3,Low:307.22,Close:308.23,Volume:17682100}, + {Date:1634731200000,Open:309.21,High:309.7,Low:306.11,Close:307.41,Volume:16537100}, + {Date:1634817600000,Open:307.17,High:311.02,Low:306.36,Close:310.76,Volume:16918100}, + {Date:1634904000000,Open:310.4,High:311.09,Low:307.8,Close:309.16,Volume:17449300}, + {Date:1635163200000,Open:309.36,High:309.4,Low:306.46,Close:308.13,Volume:17554500}, + {Date:1635249600000,Open:311,High:312.4,Low:308.6,Close:310.11,Volume:28107300}, + {Date:1635336000000,Open:316,High:326.1,Low:316,Close:323.17,Volume:52588700}, + {Date:1635422400000,Open:324.33,High:324.87,Low:321.36,Close:324.35,Volume:26297900}, + {Date:1635508800000,Open:324.13,High:332,Low:323.9,Close:331.62,Volume:34766000}, + {Date:1635768000000,Open:331.36,High:331.49,Low:326.37,Close:329.37,Volume:27073200}, + {Date:1635854400000,Open:330.31,High:333.45,Low:330,Close:333.13,Volume:26487100}, + {Date:1635940800000,Open:333.9,High:334.9,Low:330.65,Close:334,Volume:21500100}, + {Date:1636027200000,Open:332.89,High:336.54,Low:329.51,Close:336.44,Volume:23992200}, + {Date:1636113600000,Open:338.51,High:338.79,Low:334.42,Close:336.06,Volume:22570100}, + {Date:1636372800000,Open:337.3,High:337.65,Low:334.44,Close:336.99,Volume:20897000}, + {Date:1636459200000,Open:337.11,High:338.72,Low:334.53,Close:335.95,Volume:21307400}, + {Date:1636545600000,Open:334.57,High:334.63,Low:329.92,Close:330.8,Volume:25500900}, + {Date:1636632000000,Open:331.25,High:333.77,Low:330.51,Close:332.43,Volume:16849800}, + {Date:1636718400000,Open:333.92,High:337.23,Low:333.79,Close:336.72,Volume:23831000}, + {Date:1636977600000,Open:337.54,High:337.88,Low:334.03,Close:336.07,Volume:16723000}, + {Date:1637064000000,Open:335.68,High:340.67,Low:335.51,Close:339.51,Volume:20886800}, + {Date:1637150400000,Open:338.94,High:342.19,Low:338,Close:339.12,Volume:19053400}, + {Date:1637236800000,Open:338.18,High:342.45,Low:337.12,Close:341.27,Volume:22463500}, + {Date:1637323200000,Open:342.64,High:345.1,Low:342.2,Close:343.11,Volume:21963400}, + {Date:1637582400000,Open:344.62,High:349.67,Low:339.55,Close:339.83,Volume:31031100}, + {Date:1637668800000,Open:337.05,High:339.45,Low:333.56,Close:337.68,Volume:30427600}, + {Date:1637755200000,Open:336.28,High:338.16,Low:333.91,Close:337.91,Volume:21661300}, + {Date:1637928000000,Open:334.35,High:337.93,Low:328.12,Close:329.68,Volume:24217200}, + {Date:1638187200000,Open:334.94,High:339.03,Low:334.74,Close:336.63,Volume:28563500}, + {Date:1638273600000,Open:335.32,High:337.78,Low:328.99,Close:330.59,Volume:42885600}, + {Date:1638360000000,Open:335.13,High:339.28,Low:329.39,Close:330.08,Volume:33337600}, + {Date:1638446400000,Open:330.3,High:333.49,Low:327.8,Close:329.49,Volume:30766000}, + {Date:1638532800000,Open:331.99,High:332.7,Low:318.03,Close:323.01,Volume:41779300}, + {Date:1638792000000,Open:323.95,High:327.45,Low:319.23,Close:326.19,Volume:30032600}, + {Date:1638878400000,Open:331.64,High:335.8,Low:330.1,Close:334.92,Volume:31021900}, + {Date:1638964800000,Open:335.31,High:335.5,Low:330.8,Close:334.97,Volume:24761000}, + {Date:1639051200000,Open:334.41,High:336.49,Low:332.12,Close:333.1,Volume:22214200}, + {Date:1639137600000,Open:334.98,High:343,Low:334.79,Close:342.54,Volume:38095700}, + {Date:1639396800000,Open:340.68,High:343.79,Low:339.08,Close:339.4,Volume:28899400}, + {Date:1639483200000,Open:333.22,High:334.64,Low:324.11,Close:328.34,Volume:44438700}, + {Date:1639569600000,Open:328.61,High:335.19,Low:324.5,Close:334.65,Volume:35381100}, + {Date:1639656000000,Open:335.71,High:336.76,Low:323.02,Close:324.9,Volume:35034800}, + {Date:1639742400000,Open:320.88,High:324.92,Low:317.25,Close:323.8,Volume:47750300}, + {Date:1640001600000,Open:320.05,High:322.8,Low:317.57,Close:319.91,Volume:28326500}, + {Date:1640088000000,Open:323.29,High:327.73,Low:319.8,Close:327.29,Volume:24740600}, + {Date:1640174400000,Open:328.3,High:333.61,Low:325.75,Close:333.2,Volume:24831500}, + {Date:1640260800000,Open:332.75,High:336.39,Low:332.73,Close:334.69,Volume:19617800}, + {Date:1640606400000,Open:335.46,High:342.48,Low:335.43,Close:342.45,Volume:19947000}, + {Date:1640692800000,Open:343.15,High:343.81,Low:340.32,Close:341.25,Volume:15661500}, + {Date:1640779200000,Open:341.3,High:344.3,Low:339.68,Close:341.95,Volume:15042000}, + {Date:1640865600000,Open:341.91,High:343.13,Low:338.82,Close:339.32,Volume:15994500}, + {Date:1640952000000,Open:338.51,High:339.36,Low:335.85,Close:336.32,Volume:18000800}, + {Date:1641211200000,Open:335.35,High:338,Low:329.78,Close:334.75,Volume:28865100}, + {Date:1641297600000,Open:334.83,High:335.2,Low:326.12,Close:329.01,Volume:32674300}, + {Date:1641384000000,Open:325.86,High:326.07,Low:315.98,Close:316.38,Volume:40054300}, + {Date:1641470400000,Open:313.15,High:318.7,Low:311.49,Close:313.88,Volume:39646100}, + {Date:1641556800000,Open:314.15,High:316.5,Low:310.09,Close:314.04,Volume:32720000}, + {Date:1641816000000,Open:309.49,High:314.72,Low:304.69,Close:314.27,Volume:44289500}, + {Date:1641902400000,Open:313.38,High:316.61,Low:309.89,Close:314.98,Volume:29386800}, + {Date:1641988800000,Open:319.67,High:323.41,Low:317.08,Close:318.27,Volume:34372200}, + {Date:1642075200000,Open:320.47,High:320.88,Low:304,Close:304.8,Volume:45366000}, + {Date:1642161600000,Open:304.25,High:310.82,Low:303.75,Close:310.2,Volume:39846400}, + {Date:1642507200000,Open:304.07,High:309.8,Low:301.74,Close:302.65,Volume:42333200}, + {Date:1642593600000,Open:306.29,High:313.91,Low:302.7,Close:303.33,Volume:45933900}, + {Date:1642680000000,Open:309.07,High:311.65,Low:301.14,Close:301.6,Volume:35380700}, + {Date:1642766400000,Open:302.69,High:304.11,Low:295.61,Close:296.03,Volume:57984400}, + {Date:1643025600000,Open:292.2,High:297.11,Low:276.05,Close:296.37,Volume:85731500}, + {Date:1643112000000,Open:291.52,High:294.99,Low:285.17,Close:288.49,Volume:72848600}, + {Date:1643198400000,Open:307.99,High:308.5,Low:293.03,Close:296.71,Volume:90428900}, + {Date:1643284800000,Open:302.66,High:307.3,Low:297.93,Close:299.84,Volume:53481300}, + {Date:1643371200000,Open:300.23,High:308.48,Low:294.45,Close:308.26,Volume:49743700}, + {Date:1643630400000,Open:308.95,High:312.38,Low:306.37,Close:310.98,Volume:46444500}, + {Date:1643716800000,Open:310.41,High:310.63,Low:305.13,Close:308.76,Volume:40950400}, + {Date:1643803200000,Open:309.63,High:315.12,Low:308.88,Close:313.46,Volume:36636000}, + {Date:1643889600000,Open:309.49,High:311.23,Low:299.96,Close:301.25,Volume:43730000}, + {Date:1643976000000,Open:300.21,High:308.8,Low:299.97,Close:305.94,Volume:35096500}, + {Date:1644235200000,Open:306.17,High:307.84,Low:299.9,Close:300.95,Volume:28533300}, + {Date:1644321600000,Open:301.25,High:305.56,Low:299.95,Close:304.56,Volume:32421200}, + {Date:1644408000000,Open:309.87,High:311.93,Low:307.39,Close:311.21,Volume:31284700}, + {Date:1644494400000,Open:304.04,High:309.12,Low:300.7,Close:302.38,Volume:45386200}, + {Date:1644580800000,Open:303.19,High:304.29,Low:294.22,Close:295.04,Volume:39175600}, + {Date:1644840000000,Open:293.77,High:296.76,Low:291.35,Close:295,Volume:36359500}, + {Date:1644926400000,Open:300.01,High:300.8,Low:297.02,Close:300.47,Volume:27058300}, + {Date:1645012800000,Open:298.37,High:300.87,Low:293.68,Close:299.5,Volume:29982100}, + {Date:1645099200000,Open:296.36,High:296.8,Low:290,Close:290.73,Volume:32461600}, + {Date:1645185600000,Open:293.05,High:293.86,Low:286.31,Close:287.93,Volume:34264000}, + {Date:1645531200000,Open:285,High:291.54,Low:284.5,Close:287.72,Volume:41736100}, + {Date:1645617600000,Open:290.18,High:291.7,Low:280.1,Close:280.27,Volume:37811200}, + {Date:1645704000000,Open:272.51,High:295.16,Low:271.52,Close:294.59,Volume:56989700}, + {Date:1645790400000,Open:295.14,High:297.63,Low:291.65,Close:297.31,Volume:32546700}, + {Date:1646049600000,Open:294.31,High:299.14,Low:293,Close:298.79,Volume:34585700}, + {Date:1646136000000,Open:296.4,High:299.97,Low:292.15,Close:294.95,Volume:31217800}, + {Date:1646222400000,Open:295.36,High:301.47,Low:293.7,Close:300.19,Volume:31873000}, + {Date:1646308800000,Open:302.89,High:303.13,Low:294.05,Close:295.92,Volume:27314500}, + {Date:1646395200000,Open:294.29,High:295.66,Low:287.17,Close:289.86,Volume:32356500}, + {Date:1646654400000,Open:288.53,High:289.69,Low:278.53,Close:278.91,Volume:43157200}, + {Date:1646740800000,Open:277.8,High:283.96,Low:270,Close:275.85,Volume:48159500}, + {Date:1646827200000,Open:283.44,High:289.6,Low:280.78,Close:288.5,Volume:35204500}, + {Date:1646913600000,Open:283.02,High:286.6,Low:280.58,Close:285.59,Volume:30628000}, + {Date:1647000000000,Open:287.96,High:289.51,Low:279.43,Close:280.07,Volume:27192600}, + {Date:1647259200000,Open:280.34,High:285.4,Low:275.82,Close:276.44,Volume:30660700}, + {Date:1647345600000,Open:280.35,High:287.82,Low:278.73,Close:287.15,Volume:34245100}, + {Date:1647432000000,Open:289.11,High:294.57,Low:283.2,Close:294.39,Volume:37826300}, + {Date:1647518400000,Open:293.29,High:295.61,Low:289.37,Close:295.22,Volume:30816600}, + {Date:1647604800000,Open:295.37,High:301,Low:292.73,Close:300.43,Volume:43317000}, + {Date:1647864000000,Open:298.89,High:300.14,Low:294.9,Close:299.16,Volume:28351200}, + {Date:1647950400000,Open:299.8,High:305,Low:298.77,Close:304.06,Volume:27599700}, + {Date:1648036800000,Open:300.51,High:303.23,Low:297.72,Close:299.49,Volume:25715400}, + {Date:1648123200000,Open:299.14,High:304.2,Low:298.32,Close:304.1,Volume:24484500}, + {Date:1648209600000,Open:305.23,High:305.5,Low:299.29,Close:303.68,Volume:22550600}, + {Date:1648468800000,Open:304.33,High:310.8,Low:304.33,Close:310.7,Volume:29578200}, + {Date:1648555200000,Open:313.91,High:315.82,Low:309.05,Close:315.41,Volume:30393400}, + {Date:1648641600000,Open:313.76,High:315.95,Low:311.58,Close:313.86,Volume:28163600} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_minute.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_minute.js new file mode 100644 index 00000000..478c14c0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_minute.js @@ -0,0 +1,392 @@ +window["MSFT_minute"] = [ + {Date:1649842200000,Open:282.73,High:282.73,Low:281.92,Close:281.95,Volume:55522}, + {Date:1649842260000,Open:281.93,High:282.49,Low:281.69,Close:282.16,Volume:44862}, + {Date:1649842320000,Open:282.19,High:282.62,Low:281.6,Close:282.58,Volume:60104}, + {Date:1649842380000,Open:282.55,High:282.57,Low:281.77,Close:281.95,Volume:62857}, + {Date:1649842440000,Open:281.8,High:281.97,Low:281.61,Close:281.82,Volume:46548}, + {Date:1649842500000,Open:281.77,High:282.39,Low:281.75,Close:282,Volume:107311}, + {Date:1649842560000,Open:282.08,High:282.37,Low:281.85,Close:281.99,Volume:44348}, + {Date:1649842620000,Open:281.98,High:282.05,Low:281.8,Close:281.84,Volume:59741}, + {Date:1649842680000,Open:281.82,High:282.08,Low:281.7,Close:281.93,Volume:59910}, + {Date:1649842740000,Open:281.92,High:282.17,Low:281.74,Close:281.75,Volume:103366}, + {Date:1649842800000,Open:281.77,High:281.88,Low:281.3,Close:281.72,Volume:108402}, + {Date:1649842860000,Open:281.73,High:282.29,Low:281.65,Close:282.18,Volume:142668}, + {Date:1649842920000,Open:282.14,High:282.61,Low:282.1,Close:282.2,Volume:116732}, + {Date:1649842980000,Open:282.19,High:282.86,Low:282,Close:282.86,Volume:107624}, + {Date:1649843040000,Open:282.82,High:283.36,Low:282.77,Close:283.1,Volume:102217}, + {Date:1649843100000,Open:283.12,High:283.5,Low:282.9,Close:283.44,Volume:69037}, + {Date:1649843160000,Open:283.45,High:283.86,Low:283.25,Close:283.37,Volume:64511}, + {Date:1649843220000,Open:283.36,High:283.77,Low:283.2,Close:283.64,Volume:51860}, + {Date:1649843280000,Open:283.66,High:283.78,Low:283.5,Close:283.54,Volume:44270}, + {Date:1649843340000,Open:283.5,High:283.73,Low:283.21,Close:283.25,Volume:77339}, + {Date:1649843400000,Open:283.23,High:283.53,Low:283.08,Close:283.36,Volume:56200}, + {Date:1649843460000,Open:283.37,High:283.58,Low:283.27,Close:283.4,Volume:40796}, + {Date:1649843520000,Open:283.37,High:283.37,Low:282.92,Close:283.11,Volume:39419}, + {Date:1649843580000,Open:283.08,High:283.23,Low:282.93,Close:283.08,Volume:36623}, + {Date:1649843640000,Open:283.06,High:283.53,Low:283.05,Close:283.48,Volume:35163}, + {Date:1649843700000,Open:283.49,High:283.54,Low:283.08,Close:283.12,Volume:50792}, + {Date:1649843760000,Open:283.08,High:283.08,Low:282.5,Close:282.8,Volume:68439}, + {Date:1649843820000,Open:282.83,High:283.09,Low:282.81,Close:283.03,Volume:25099}, + {Date:1649843880000,Open:283.17,High:283.36,Low:283.12,Close:283.12,Volume:38277}, + {Date:1649843940000,Open:283.12,High:283.14,Low:282.17,Close:282.76,Volume:66937}, + {Date:1649844000000,Open:282.78,High:282.79,Low:282.5,Close:282.7,Volume:29629}, + {Date:1649844060000,Open:282.68,High:282.76,Low:282.36,Close:282.4,Volume:33094}, + {Date:1649844120000,Open:282.42,High:282.72,Low:282.4,Close:282.72,Volume:37719}, + {Date:1649844180000,Open:282.69,High:282.78,Low:282.51,Close:282.57,Volume:23199}, + {Date:1649844240000,Open:282.64,High:283.16,Low:282.62,Close:283.14,Volume:41676}, + {Date:1649844300000,Open:283.16,High:283.7,Low:283.16,Close:283.65,Volume:71061}, + {Date:1649844360000,Open:283.69,High:283.83,Low:283.44,Close:283.82,Volume:52597}, + {Date:1649844420000,Open:283.79,High:283.85,Low:283.48,Close:283.79,Volume:54694}, + {Date:1649844480000,Open:283.78,High:283.82,Low:283.23,Close:283.33,Volume:35363}, + {Date:1649844540000,Open:283.28,High:283.29,Low:282.85,Close:283,Volume:37211}, + {Date:1649844600000,Open:282.96,High:283.04,Low:282.68,Close:282.76,Volume:30244}, + {Date:1649844660000,Open:282.75,High:282.81,Low:282.62,Close:282.8,Volume:20986}, + {Date:1649844720000,Open:282.82,High:283.24,Low:282.81,Close:283.1,Volume:37861}, + {Date:1649844780000,Open:283.07,High:283.22,Low:282.86,Close:282.98,Volume:30877}, + {Date:1649844840000,Open:282.96,High:283.28,Low:282.85,Close:283.24,Volume:23297}, + {Date:1649844900000,Open:283.25,High:283.98,Low:283.25,Close:283.93,Volume:45930}, + {Date:1649844960000,Open:283.98,High:284.32,Low:283.94,Close:284.21,Volume:60952}, + {Date:1649845020000,Open:284.22,High:284.24,Low:283.87,Close:283.91,Volume:26137}, + {Date:1649845080000,Open:283.9,High:284.07,Low:283.82,Close:283.99,Volume:24452}, + {Date:1649845140000,Open:283.96,High:284.18,Low:283.9,Close:284.05,Volume:30367}, + {Date:1649845200000,Open:284.02,High:284.07,Low:283.89,Close:283.97,Volume:14544}, + {Date:1649845260000,Open:283.97,High:284.24,Low:283.92,Close:284.23,Volume:46323}, + {Date:1649845320000,Open:284.23,High:284.45,Low:284.17,Close:284.37,Volume:46267}, + {Date:1649845380000,Open:284.36,High:284.53,Low:284.2,Close:284.53,Volume:34193}, + {Date:1649845440000,Open:284.52,High:284.63,Low:284.42,Close:284.57,Volume:26571}, + {Date:1649845500000,Open:284.55,High:284.57,Low:284.19,Close:284.29,Volume:55144}, + {Date:1649845560000,Open:284.28,High:284.29,Low:284.05,Close:284.1,Volume:31951}, + {Date:1649845620000,Open:284.08,High:284.2,Low:284.05,Close:284.14,Volume:35332}, + {Date:1649845680000,Open:284.17,High:284.2,Low:283.94,Close:284.05,Volume:53518}, + {Date:1649845740000,Open:284.05,High:284.22,Low:283.96,Close:284.07,Volume:43175}, + {Date:1649845800000,Open:284.1,High:285.26,Low:283.99,Close:285.07,Volume:87031}, + {Date:1649845860000,Open:285.07,High:285.19,Low:284.84,Close:284.86,Volume:45023}, + {Date:1649845920000,Open:284.84,High:284.91,Low:284.53,Close:284.53,Volume:18505}, + {Date:1649845980000,Open:284.54,High:284.63,Low:284.34,Close:284.57,Volume:33079}, + {Date:1649846040000,Open:284.55,High:284.63,Low:284.41,Close:284.47,Volume:23419}, + {Date:1649846100000,Open:284.46,High:284.6,Low:284.29,Close:284.31,Volume:40430}, + {Date:1649846160000,Open:284.33,High:284.45,Low:284.18,Close:284.41,Volume:19354}, + {Date:1649846220000,Open:284.4,High:284.46,Low:284.05,Close:284.07,Volume:20545}, + {Date:1649846280000,Open:284.08,High:284.3,Low:284.04,Close:284.21,Volume:16342}, + {Date:1649846340000,Open:284.22,High:284.28,Low:283.8,Close:283.87,Volume:24988}, + {Date:1649846400000,Open:283.85,High:283.85,Low:283.51,Close:283.69,Volume:57977}, + {Date:1649846460000,Open:283.68,High:283.97,Low:283.6,Close:283.89,Volume:46137}, + {Date:1649846520000,Open:283.91,High:284.21,Low:283.91,Close:284.18,Volume:16234}, + {Date:1649846580000,Open:284.21,High:284.35,Low:284.14,Close:284.23,Volume:22813}, + {Date:1649846640000,Open:284.22,High:284.45,Low:284.22,Close:284.36,Volume:42546}, + {Date:1649846700000,Open:284.34,High:284.53,Low:284.34,Close:284.48,Volume:18541}, + {Date:1649846760000,Open:284.44,High:284.76,Low:284.24,Close:284.67,Volume:33107}, + {Date:1649846820000,Open:284.66,High:284.66,Low:284.14,Close:284.16,Volume:25193}, + {Date:1649846880000,Open:284.14,High:284.28,Low:284.1,Close:284.26,Volume:37239}, + {Date:1649846940000,Open:284.26,High:284.4,Low:284.09,Close:284.16,Volume:31077}, + {Date:1649847000000,Open:284.18,High:284.26,Low:284.04,Close:284.19,Volume:22293}, + {Date:1649847060000,Open:284.22,High:284.26,Low:284.06,Close:284.1,Volume:20200}, + {Date:1649847120000,Open:284.09,High:284.7,Low:283.96,Close:284.58,Volume:39355}, + {Date:1649847180000,Open:284.63,High:284.68,Low:284.34,Close:284.34,Volume:20627}, + {Date:1649847240000,Open:284.36,High:284.59,Low:284.34,Close:284.4,Volume:19732}, + {Date:1649847300000,Open:284.38,High:284.49,Low:284.16,Close:284.24,Volume:26977}, + {Date:1649847360000,Open:284.25,High:284.25,Low:283.91,Close:283.95,Volume:23927}, + {Date:1649847420000,Open:283.94,High:284.04,Low:283.69,Close:283.76,Volume:31329}, + {Date:1649847480000,Open:283.74,High:283.75,Low:283.59,Close:283.68,Volume:38368}, + {Date:1649847540000,Open:283.69,High:283.84,Low:283.6,Close:283.6,Volume:22433}, + {Date:1649847600000,Open:283.64,High:284.15,Low:283.62,Close:284.03,Volume:33964}, + {Date:1649847660000,Open:283.98,High:284.14,Low:283.91,Close:284.01,Volume:27711}, + {Date:1649847720000,Open:283.98,High:284.22,Low:283.9,Close:284.17,Volume:17090}, + {Date:1649847780000,Open:284.18,High:285.02,Low:284.14,Close:284.99,Volume:73585}, + {Date:1649847840000,Open:284.98,High:285.26,Low:284.81,Close:284.81,Volume:77582}, + {Date:1649847900000,Open:284.81,High:284.9,Low:284.67,Close:284.72,Volume:33368}, + {Date:1649847960000,Open:284.67,High:284.69,Low:284.47,Close:284.6,Volume:19578}, + {Date:1649848020000,Open:284.61,High:284.69,Low:284.54,Close:284.68,Volume:30905}, + {Date:1649848080000,Open:284.69,High:284.9,Low:284.62,Close:284.88,Volume:39504}, + {Date:1649848140000,Open:284.87,High:284.87,Low:284.61,Close:284.62,Volume:26355}, + {Date:1649848200000,Open:284.61,High:284.78,Low:284.52,Close:284.76,Volume:26386}, + {Date:1649848260000,Open:284.78,High:284.86,Low:284.63,Close:284.78,Volume:25872}, + {Date:1649848320000,Open:284.76,High:284.88,Low:284.71,Close:284.76,Volume:18526}, + {Date:1649848380000,Open:284.75,High:285.24,Low:284.74,Close:285.15,Volume:38250}, + {Date:1649848440000,Open:285.17,High:285.42,Low:285.05,Close:285.3,Volume:80991}, + {Date:1649848500000,Open:285.29,High:285.34,Low:285.08,Close:285.22,Volume:37712}, + {Date:1649848560000,Open:285.24,High:285.3,Low:285.1,Close:285.1,Volume:25697}, + {Date:1649848620000,Open:285.09,High:285.14,Low:284.89,Close:285.07,Volume:32478}, + {Date:1649848680000,Open:285.06,High:285.25,Low:285.05,Close:285.21,Volume:31950}, + {Date:1649848740000,Open:285.2,High:285.22,Low:285.07,Close:285.16,Volume:12448}, + {Date:1649848800000,Open:285.17,High:285.23,Low:284.99,Close:285.01,Volume:26271}, + {Date:1649848860000,Open:285,High:285.23,Low:284.99,Close:285.17,Volume:32554}, + {Date:1649848920000,Open:285.18,High:285.42,Low:285.15,Close:285.36,Volume:45911}, + {Date:1649848980000,Open:285.38,High:285.6,Low:285.38,Close:285.55,Volume:47816}, + {Date:1649849040000,Open:285.51,High:285.59,Low:285.44,Close:285.5,Volume:31700}, + {Date:1649849100000,Open:285.5,High:285.9,Low:285.5,Close:285.87,Volume:51563}, + {Date:1649849160000,Open:285.83,High:285.9,Low:285.68,Close:285.71,Volume:37968}, + {Date:1649849220000,Open:285.72,High:285.76,Low:285.6,Close:285.61,Volume:20678}, + {Date:1649849280000,Open:285.58,High:285.67,Low:285.4,Close:285.54,Volume:18607}, + {Date:1649849340000,Open:285.58,High:285.62,Low:285.49,Close:285.56,Volume:16850}, + {Date:1649849400000,Open:285.57,High:285.78,Low:285.53,Close:285.76,Volume:22000}, + {Date:1649849460000,Open:285.75,High:285.8,Low:285.68,Close:285.68,Volume:22715}, + {Date:1649849520000,Open:285.69,High:285.8,Low:285.65,Close:285.69,Volume:26349}, + {Date:1649849580000,Open:285.69,High:285.83,Low:285.67,Close:285.71,Volume:22740}, + {Date:1649849640000,Open:285.69,High:285.96,Low:285.48,Close:285.65,Volume:57494}, + {Date:1649849700000,Open:285.67,High:285.77,Low:285.56,Close:285.68,Volume:20805}, + {Date:1649849760000,Open:285.69,High:285.8,Low:285.65,Close:285.72,Volume:34365}, + {Date:1649849820000,Open:285.72,High:285.72,Low:285.58,Close:285.59,Volume:19158}, + {Date:1649849880000,Open:285.58,High:285.7,Low:285.57,Close:285.7,Volume:23436}, + {Date:1649849940000,Open:285.7,High:285.76,Low:285.61,Close:285.74,Volume:16478}, + {Date:1649850000000,Open:285.77,High:285.81,Low:285.64,Close:285.69,Volume:31069}, + {Date:1649850060000,Open:285.7,High:285.7,Low:285.62,Close:285.7,Volume:16625}, + {Date:1649850120000,Open:285.71,High:286,Low:285.71,Close:286,Volume:34302}, + {Date:1649850180000,Open:286,High:286.1,Low:285.82,Close:285.86,Volume:35727}, + {Date:1649850240000,Open:285.85,High:285.86,Low:285.56,Close:285.63,Volume:42080}, + {Date:1649850300000,Open:285.65,High:285.65,Low:285.19,Close:285.19,Volume:35268}, + {Date:1649850360000,Open:285.2,High:285.36,Low:285.18,Close:285.33,Volume:35098}, + {Date:1649850420000,Open:285.33,High:285.36,Low:285.17,Close:285.17,Volume:20557}, + {Date:1649850480000,Open:285.17,High:285.29,Low:285.1,Close:285.26,Volume:16803}, + {Date:1649850540000,Open:285.24,High:285.36,Low:285.2,Close:285.36,Volume:15292}, + {Date:1649850600000,Open:285.33,High:285.39,Low:285.27,Close:285.29,Volume:25898}, + {Date:1649850660000,Open:285.28,High:285.47,Low:285.26,Close:285.32,Volume:19607}, + {Date:1649850720000,Open:285.34,High:285.46,Low:285.26,Close:285.46,Volume:13002}, + {Date:1649850780000,Open:285.49,High:285.56,Low:285.48,Close:285.56,Volume:14955}, + {Date:1649850840000,Open:285.55,High:285.67,Low:285.55,Close:285.61,Volume:21725}, + {Date:1649850900000,Open:285.6,High:285.61,Low:285.5,Close:285.57,Volume:24164}, + {Date:1649850960000,Open:285.58,High:285.6,Low:285.41,Close:285.47,Volume:24789}, + {Date:1649851020000,Open:285.45,High:285.67,Low:285.44,Close:285.67,Volume:16814}, + {Date:1649851080000,Open:285.64,High:285.67,Low:285.53,Close:285.66,Volume:15273}, + {Date:1649851140000,Open:285.66,High:285.68,Low:285.54,Close:285.67,Volume:17328}, + {Date:1649851200000,Open:285.66,High:285.72,Low:285.35,Close:285.38,Volume:33397}, + {Date:1649851260000,Open:285.36,High:285.43,Low:285.26,Close:285.34,Volume:28198}, + {Date:1649851320000,Open:285.33,High:285.42,Low:285.23,Close:285.37,Volume:12687}, + {Date:1649851380000,Open:285.39,High:285.64,Low:285.39,Close:285.61,Volume:17180}, + {Date:1649851440000,Open:285.63,High:285.8,Low:285.63,Close:285.72,Volume:25027}, + {Date:1649851500000,Open:285.7,High:285.81,Low:285.64,Close:285.73,Volume:19857}, + {Date:1649851560000,Open:285.71,High:285.72,Low:285.48,Close:285.63,Volume:34650}, + {Date:1649851620000,Open:285.63,High:285.77,Low:285.63,Close:285.7,Volume:16469}, + {Date:1649851680000,Open:285.69,High:285.87,Low:285.59,Close:285.76,Volume:14704}, + {Date:1649851740000,Open:285.74,High:285.98,Low:285.73,Close:285.94,Volume:24354}, + {Date:1649851800000,Open:285.92,High:286.07,Low:285.63,Close:285.69,Volume:41856}, + {Date:1649851860000,Open:285.7,High:285.7,Low:285.43,Close:285.63,Volume:22231}, + {Date:1649851920000,Open:285.63,High:285.69,Low:285.52,Close:285.64,Volume:13064}, + {Date:1649851980000,Open:285.63,High:285.63,Low:285.5,Close:285.57,Volume:15223}, + {Date:1649852040000,Open:285.65,High:285.83,Low:285.56,Close:285.83,Volume:37501}, + {Date:1649852100000,Open:285.84,High:285.85,Low:285.69,Close:285.71,Volume:21245}, + {Date:1649852160000,Open:285.7,High:285.72,Low:285.62,Close:285.66,Volume:17972}, + {Date:1649852220000,Open:285.65,High:285.77,Low:285.59,Close:285.65,Volume:16845}, + {Date:1649852280000,Open:285.68,High:286.01,Low:285.68,Close:286.01,Volume:27338}, + {Date:1649852340000,Open:286.01,High:286.29,Low:285.99,Close:286.12,Volume:57536}, + {Date:1649852400000,Open:286.13,High:286.13,Low:285.83,Close:285.94,Volume:19150}, + {Date:1649852460000,Open:285.93,High:286.03,Low:285.86,Close:286.02,Volume:23586}, + {Date:1649852520000,Open:286.03,High:286.3,Low:286.02,Close:286.26,Volume:38761}, + {Date:1649852580000,Open:286.28,High:286.34,Low:286.13,Close:286.16,Volume:23405}, + {Date:1649852640000,Open:286.19,High:286.2,Low:286.07,Close:286.18,Volume:14660}, + {Date:1649852700000,Open:286.17,High:286.42,Low:286.15,Close:286.32,Volume:41203}, + {Date:1649852760000,Open:286.32,High:286.36,Low:286.19,Close:286.22,Volume:19782}, + {Date:1649852820000,Open:286.2,High:286.27,Low:285.9,Close:286.12,Volume:49183}, + {Date:1649852880000,Open:286.12,High:286.2,Low:286.12,Close:286.12,Volume:13620}, + {Date:1649852940000,Open:286.14,High:286.14,Low:286.05,Close:286.07,Volume:15096}, + {Date:1649853000000,Open:286.09,High:286.13,Low:285.91,Close:285.99,Volume:27396}, + {Date:1649853060000,Open:286,High:286.01,Low:285.89,Close:286,Volume:20352}, + {Date:1649853120000,Open:286.02,High:286.05,Low:285.87,Close:286.02,Volume:21114}, + {Date:1649853180000,Open:286.03,High:286.05,Low:285.83,Close:285.86,Volume:20378}, + {Date:1649853240000,Open:285.87,High:286,Low:285.84,Close:285.92,Volume:34398}, + {Date:1649853300000,Open:285.92,High:286.24,Low:285.92,Close:286.18,Volume:26062}, + {Date:1649853360000,Open:286.16,High:286.32,Low:286.11,Close:286.13,Volume:27939}, + {Date:1649853420000,Open:286.13,High:286.25,Low:286.13,Close:286.25,Volume:28972}, + {Date:1649853480000,Open:286.25,High:286.29,Low:286.06,Close:286.06,Volume:32361}, + {Date:1649853540000,Open:286.1,High:286.26,Low:286.04,Close:286.22,Volume:16056}, + {Date:1649853600000,Open:286.25,High:286.62,Low:286.16,Close:286.23,Volume:29015}, + {Date:1649853660000,Open:286.23,High:286.26,Low:286.14,Close:286.2,Volume:17686}, + {Date:1649853720000,Open:286.17,High:286.19,Low:286.1,Close:286.17,Volume:15480}, + {Date:1649853780000,Open:286.18,High:286.28,Low:286.17,Close:286.27,Volume:17654}, + {Date:1649853840000,Open:286.27,High:286.4,Low:286.24,Close:286.27,Volume:23426}, + {Date:1649853900000,Open:286.28,High:286.39,Low:286.19,Close:286.3,Volume:23571}, + {Date:1649853960000,Open:286.29,High:286.35,Low:286.25,Close:286.27,Volume:12630}, + {Date:1649854020000,Open:286.29,High:286.32,Low:286.23,Close:286.32,Volume:13372}, + {Date:1649854080000,Open:286.3,High:286.41,Low:286.27,Close:286.29,Volume:14142}, + {Date:1649854140000,Open:286.3,High:286.34,Low:286.16,Close:286.3,Volume:39928}, + {Date:1649854200000,Open:286.3,High:286.42,Low:286.28,Close:286.34,Volume:19423}, + {Date:1649854260000,Open:286.36,High:286.4,Low:286.23,Close:286.24,Volume:22212}, + {Date:1649854320000,Open:286.26,High:286.31,Low:286.16,Close:286.2,Volume:20930}, + {Date:1649854380000,Open:286.21,High:286.26,Low:286.14,Close:286.25,Volume:15616}, + {Date:1649854440000,Open:286.26,High:286.36,Low:286.22,Close:286.24,Volume:19106}, + {Date:1649854500000,Open:286.25,High:286.27,Low:286.18,Close:286.19,Volume:22496}, + {Date:1649854560000,Open:286.2,High:286.21,Low:286.1,Close:286.19,Volume:22694}, + {Date:1649854620000,Open:286.17,High:286.22,Low:286.1,Close:286.22,Volume:23774}, + {Date:1649854680000,Open:286.2,High:286.28,Low:286.06,Close:286.06,Volume:21255}, + {Date:1649854740000,Open:286.08,High:286.16,Low:286.02,Close:286.09,Volume:22495}, + {Date:1649854800000,Open:286.1,High:286.16,Low:286.04,Close:286.13,Volume:18638}, + {Date:1649854860000,Open:286.12,High:286.22,Low:286.01,Close:286.07,Volume:28439}, + {Date:1649854920000,Open:286.07,High:286.3,Low:285.97,Close:286.3,Volume:32658}, + {Date:1649854980000,Open:286.28,High:286.44,Low:286.24,Close:286.34,Volume:20654}, + {Date:1649855040000,Open:286.33,High:286.39,Low:286.23,Close:286.25,Volume:17270}, + {Date:1649855100000,Open:286.25,High:286.31,Low:286.21,Close:286.28,Volume:11596}, + {Date:1649855160000,Open:286.29,High:286.37,Low:286.06,Close:286.1,Volume:35632}, + {Date:1649855220000,Open:286.11,High:286.22,Low:286.05,Close:286.12,Volume:17587}, + {Date:1649855280000,Open:286.11,High:286.24,Low:286.1,Close:286.23,Volume:11695}, + {Date:1649855340000,Open:286.22,High:286.35,Low:286.2,Close:286.28,Volume:14107}, + {Date:1649855400000,Open:286.27,High:286.4,Low:286.23,Close:286.39,Volume:20065}, + {Date:1649855460000,Open:286.36,High:286.62,Low:286.36,Close:286.57,Volume:42629}, + {Date:1649855520000,Open:286.58,High:286.74,Low:286.57,Close:286.67,Volume:25175}, + {Date:1649855580000,Open:286.66,High:286.66,Low:286.52,Close:286.55,Volume:16457}, + {Date:1649855640000,Open:286.55,High:286.55,Low:286.34,Close:286.39,Volume:17989}, + {Date:1649855700000,Open:286.38,High:286.45,Low:286.32,Close:286.42,Volume:16288}, + {Date:1649855760000,Open:286.41,High:286.43,Low:286.35,Close:286.43,Volume:12470}, + {Date:1649855820000,Open:286.44,High:286.48,Low:286.33,Close:286.4,Volume:15141}, + {Date:1649855880000,Open:286.43,High:286.56,Low:286.41,Close:286.52,Volume:21990}, + {Date:1649855940000,Open:286.53,High:286.54,Low:286.38,Close:286.43,Volume:16585}, + {Date:1649856000000,Open:286.41,High:286.58,Low:286.37,Close:286.55,Volume:19651}, + {Date:1649856060000,Open:286.54,High:286.65,Low:286.52,Close:286.61,Volume:12811}, + {Date:1649856120000,Open:286.58,High:286.65,Low:286.57,Close:286.62,Volume:11652}, + {Date:1649856180000,Open:286.62,High:286.79,Low:286.62,Close:286.79,Volume:20925}, + {Date:1649856240000,Open:286.8,High:286.86,Low:286.59,Close:286.63,Volume:22225}, + {Date:1649856300000,Open:286.61,High:286.62,Low:286.31,Close:286.33,Volume:30324}, + {Date:1649856360000,Open:286.32,High:286.44,Low:286.27,Close:286.33,Volume:29903}, + {Date:1649856420000,Open:286.33,High:286.44,Low:286.28,Close:286.39,Volume:23032}, + {Date:1649856480000,Open:286.41,High:286.5,Low:286.33,Close:286.4,Volume:30054}, + {Date:1649856540000,Open:286.43,High:286.58,Low:286.43,Close:286.54,Volume:16300}, + {Date:1649856600000,Open:286.56,High:286.58,Low:286.35,Close:286.35,Volume:16773}, + {Date:1649856660000,Open:286.33,High:286.33,Low:286.26,Close:286.32,Volume:17825}, + {Date:1649856720000,Open:286.29,High:286.44,Low:286.28,Close:286.34,Volume:11774}, + {Date:1649856780000,Open:286.34,High:286.36,Low:286.15,Close:286.22,Volume:21540}, + {Date:1649856840000,Open:286.21,High:286.26,Low:286.11,Close:286.13,Volume:34196}, + {Date:1649856900000,Open:286.14,High:286.17,Low:286.08,Close:286.11,Volume:11905}, + {Date:1649856960000,Open:286.08,High:286.09,Low:285.93,Close:286.02,Volume:57100}, + {Date:1649857020000,Open:286.01,High:286.03,Low:285.83,Close:285.93,Volume:24832}, + {Date:1649857080000,Open:285.94,High:286,Low:285.94,Close:285.99,Volume:9228}, + {Date:1649857140000,Open:285.97,High:286.1,Low:285.95,Close:286.08,Volume:13612}, + {Date:1649857200000,Open:286.08,High:286.14,Low:286,Close:286.06,Volume:14908}, + {Date:1649857260000,Open:286.05,High:286.05,Low:285.92,Close:286.04,Volume:13503}, + {Date:1649857320000,Open:286.03,High:286.07,Low:285.89,Close:285.92,Volume:25104}, + {Date:1649857380000,Open:285.95,High:285.96,Low:285.85,Close:285.92,Volume:11515}, + {Date:1649857440000,Open:285.94,High:286.05,Low:285.93,Close:285.94,Volume:14407}, + {Date:1649857500000,Open:285.93,High:286.03,Low:285.92,Close:286.03,Volume:29697}, + {Date:1649857560000,Open:286.04,High:286.14,Low:285.95,Close:285.99,Volume:14550}, + {Date:1649857620000,Open:285.99,High:285.99,Low:285.75,Close:285.75,Volume:42672}, + {Date:1649857680000,Open:285.73,High:285.76,Low:285.58,Close:285.68,Volume:30775}, + {Date:1649857740000,Open:285.69,High:285.81,Low:285.68,Close:285.8,Volume:15785}, + {Date:1649857800000,Open:285.8,High:285.8,Low:285.62,Close:285.67,Volume:16283}, + {Date:1649857860000,Open:285.66,High:285.67,Low:285.56,Close:285.58,Volume:20315}, + {Date:1649857920000,Open:285.57,High:285.57,Low:285.36,Close:285.43,Volume:23877}, + {Date:1649857980000,Open:285.45,High:285.47,Low:285.28,Close:285.34,Volume:36273}, + {Date:1649858040000,Open:285.33,High:285.48,Low:285.28,Close:285.46,Volume:26077}, + {Date:1649858100000,Open:285.46,High:285.6,Low:285.46,Close:285.5,Volume:20545}, + {Date:1649858160000,Open:285.52,High:285.6,Low:285.45,Close:285.6,Volume:30858}, + {Date:1649858220000,Open:285.62,High:285.69,Low:285.6,Close:285.66,Volume:13738}, + {Date:1649858280000,Open:285.68,High:285.8,Low:285.68,Close:285.71,Volume:22668}, + {Date:1649858340000,Open:285.7,High:286.01,Low:285.69,Close:285.94,Volume:32283}, + {Date:1649858400000,Open:285.94,High:286,Low:285.86,Close:285.9,Volume:21954}, + {Date:1649858460000,Open:285.9,High:285.98,Low:285.84,Close:285.87,Volume:18435}, + {Date:1649858520000,Open:285.92,High:286,Low:285.87,Close:285.91,Volume:17877}, + {Date:1649858580000,Open:285.91,High:286.11,Low:285.9,Close:285.93,Volume:28928}, + {Date:1649858640000,Open:285.93,High:286.1,Low:285.86,Close:286.06,Volume:30313}, + {Date:1649858700000,Open:286.05,High:286.12,Low:285.95,Close:286.06,Volume:17560}, + {Date:1649858760000,Open:286.07,High:286.28,Low:286.06,Close:286.26,Volume:26634}, + {Date:1649858820000,Open:286.26,High:286.34,Low:286.21,Close:286.21,Volume:21552}, + {Date:1649858880000,Open:286.21,High:286.36,Low:286.19,Close:286.33,Volume:16173}, + {Date:1649858940000,Open:286.34,High:286.41,Low:286.27,Close:286.29,Volume:10113}, + {Date:1649859000000,Open:286.28,High:286.28,Low:286.1,Close:286.16,Volume:23948}, + {Date:1649859060000,Open:286.15,High:286.15,Low:286.03,Close:286.08,Volume:25395}, + {Date:1649859120000,Open:286.05,High:286.05,Low:285.78,Close:285.83,Volume:30288}, + {Date:1649859180000,Open:285.84,High:286.09,Low:285.79,Close:286.06,Volume:19991}, + {Date:1649859240000,Open:286.06,High:286.09,Low:285.98,Close:286,Volume:16041}, + {Date:1649859300000,Open:286,High:286.1,Low:285.95,Close:286.1,Volume:13064}, + {Date:1649859360000,Open:286.06,High:286.1,Low:286.02,Close:286.05,Volume:8628}, + {Date:1649859420000,Open:286.06,High:286.1,Low:285.99,Close:286.04,Volume:17819}, + {Date:1649859480000,Open:286.04,High:286.09,Low:285.98,Close:286.06,Volume:16794}, + {Date:1649859540000,Open:286.06,High:286.16,Low:286.03,Close:286.12,Volume:18364}, + {Date:1649859600000,Open:286.1,High:286.23,Low:286.1,Close:286.13,Volume:14573}, + {Date:1649859660000,Open:286.13,High:286.37,Low:286.11,Close:286.26,Volume:29790}, + {Date:1649859720000,Open:286.27,High:286.32,Low:286.21,Close:286.31,Volume:15409}, + {Date:1649859780000,Open:286.31,High:286.31,Low:286.09,Close:286.1,Volume:10858}, + {Date:1649859840000,Open:286.12,High:286.26,Low:286.12,Close:286.21,Volume:16660}, + {Date:1649859900000,Open:286.21,High:286.26,Low:286.01,Close:286.19,Volume:38241}, + {Date:1649859960000,Open:286.18,High:286.3,Low:286.14,Close:286.23,Volume:19257}, + {Date:1649860020000,Open:286.21,High:286.34,Low:286.18,Close:286.32,Volume:17021}, + {Date:1649860080000,Open:286.33,High:286.44,Low:286.33,Close:286.44,Volume:14404}, + {Date:1649860140000,Open:286.44,High:286.44,Low:286.33,Close:286.36,Volume:20730}, + {Date:1649860200000,Open:286.36,High:286.4,Low:286.3,Close:286.4,Volume:20346}, + {Date:1649860260000,Open:286.41,High:286.43,Low:286.15,Close:286.19,Volume:23709}, + {Date:1649860320000,Open:286.19,High:286.33,Low:286.19,Close:286.3,Volume:12125}, + {Date:1649860380000,Open:286.33,High:286.37,Low:286.27,Close:286.27,Volume:22493}, + {Date:1649860440000,Open:286.28,High:286.4,Low:286.27,Close:286.39,Volume:18132}, + {Date:1649860500000,Open:286.38,High:286.53,Low:286.35,Close:286.41,Volume:37205}, + {Date:1649860560000,Open:286.4,High:286.63,Low:286.38,Close:286.59,Volume:27489}, + {Date:1649860620000,Open:286.59,High:286.76,Low:286.58,Close:286.73,Volume:33522}, + {Date:1649860680000,Open:286.73,High:286.84,Low:286.71,Close:286.82,Volume:27767}, + {Date:1649860740000,Open:286.81,High:286.86,Low:286.66,Close:286.74,Volume:28545}, + {Date:1649860800000,Open:286.74,High:286.85,Low:286.71,Close:286.84,Volume:12483}, + {Date:1649860860000,Open:286.84,High:286.92,Low:286.83,Close:286.92,Volume:16485}, + {Date:1649860920000,Open:286.92,High:286.97,Low:286.81,Close:286.87,Volume:27154}, + {Date:1649860980000,Open:286.89,High:286.92,Low:286.86,Close:286.89,Volume:14502}, + {Date:1649861040000,Open:286.92,High:287.03,Low:286.87,Close:286.95,Volume:29184}, + {Date:1649861100000,Open:286.95,High:287,Low:286.87,Close:286.92,Volume:29174}, + {Date:1649861160000,Open:286.94,High:287,Low:286.81,Close:286.81,Volume:38363}, + {Date:1649861220000,Open:286.87,High:287.1,Low:286.87,Close:287.05,Volume:23032}, + {Date:1649861280000,Open:287.07,High:287.28,Low:287.05,Close:287.21,Volume:39755}, + {Date:1649861340000,Open:287.21,High:287.26,Low:287.15,Close:287.21,Volume:35864}, + {Date:1649861400000,Open:287.21,High:287.34,Low:287.05,Close:287.07,Volume:44299}, + {Date:1649861460000,Open:287.06,High:287.2,Low:287.03,Close:287.12,Volume:19374}, + {Date:1649861520000,Open:287.11,High:287.2,Low:287.06,Close:287.1,Volume:22775}, + {Date:1649861580000,Open:287.09,High:287.22,Low:287.07,Close:287.16,Volume:11901}, + {Date:1649861640000,Open:287.17,High:287.22,Low:287.05,Close:287.07,Volume:20224}, + {Date:1649861700000,Open:287.07,High:287.13,Low:287.03,Close:287.08,Volume:17358}, + {Date:1649861760000,Open:287.11,High:287.18,Low:287.08,Close:287.18,Volume:24833}, + {Date:1649861820000,Open:287.18,High:287.41,Low:287.18,Close:287.32,Volume:55834}, + {Date:1649861880000,Open:287.33,High:287.42,Low:287.3,Close:287.39,Volume:27115}, + {Date:1649861940000,Open:287.38,High:287.4,Low:287.2,Close:287.22,Volume:22168}, + {Date:1649862000000,Open:287.23,High:287.34,Low:287.05,Close:287.06,Volume:38061}, + {Date:1649862060000,Open:287.07,High:287.07,Low:286.86,Close:286.9,Volume:32873}, + {Date:1649862120000,Open:286.91,High:286.98,Low:286.77,Close:286.94,Volume:29357}, + {Date:1649862180000,Open:286.94,High:287,Low:286.77,Close:286.82,Volume:39595}, + {Date:1649862240000,Open:286.82,High:286.91,Low:286.78,Close:286.91,Volume:14471}, + {Date:1649862300000,Open:286.9,High:287.3,Low:286.9,Close:287.28,Volume:30883}, + {Date:1649862360000,Open:287.27,High:287.42,Low:287.22,Close:287.38,Volume:32260}, + {Date:1649862420000,Open:287.39,High:287.58,Low:287.37,Close:287.44,Volume:51364}, + {Date:1649862480000,Open:287.44,High:287.72,Low:287.43,Close:287.51,Volume:37347}, + {Date:1649862540000,Open:287.53,High:287.77,Low:287.51,Close:287.67,Volume:38998}, + {Date:1649862600000,Open:287.7,High:287.79,Low:287.64,Close:287.76,Volume:31985}, + {Date:1649862660000,Open:287.75,High:287.77,Low:287.58,Close:287.74,Volume:29039}, + {Date:1649862720000,Open:287.73,High:287.79,Low:287.65,Close:287.78,Volume:33026}, + {Date:1649862780000,Open:287.8,High:287.87,Low:287.76,Close:287.81,Volume:27689}, + {Date:1649862840000,Open:287.83,High:287.92,Low:287.8,Close:287.82,Volume:28882}, + {Date:1649862900000,Open:287.81,High:287.97,Low:287.8,Close:287.95,Volume:29592}, + {Date:1649862960000,Open:287.96,High:288.04,Low:287.92,Close:287.94,Volume:55121}, + {Date:1649863020000,Open:287.95,High:288.09,Low:287.93,Close:288.07,Volume:27560}, + {Date:1649863080000,Open:288.07,High:288.12,Low:287.99,Close:288.07,Volume:39048}, + {Date:1649863140000,Open:288.06,High:288.16,Low:288.01,Close:288.04,Volume:37496}, + {Date:1649863200000,Open:288.02,High:288.05,Low:287.76,Close:287.81,Volume:47843}, + {Date:1649863260000,Open:287.81,High:287.85,Low:287.67,Close:287.71,Volume:55392}, + {Date:1649863320000,Open:287.7,High:287.77,Low:287.68,Close:287.74,Volume:32702}, + {Date:1649863380000,Open:287.74,High:287.82,Low:287.72,Close:287.82,Volume:42327}, + {Date:1649863440000,Open:287.82,High:287.93,Low:287.81,Close:287.91,Volume:35473}, + {Date:1649863500000,Open:287.92,High:288.01,Low:287.89,Close:287.95,Volume:40552}, + {Date:1649863560000,Open:287.95,High:288.06,Low:287.94,Close:287.97,Volume:31570}, + {Date:1649863620000,Open:287.97,High:287.99,Low:287.76,Close:287.88,Volume:39974}, + {Date:1649863680000,Open:287.88,High:288.15,Low:287.87,Close:288.14,Volume:34060}, + {Date:1649863740000,Open:288.11,High:288.11,Low:288.04,Close:288.07,Volume:36172}, + {Date:1649863800000,Open:288.06,High:288.1,Low:287.91,Close:288,Volume:43323}, + {Date:1649863860000,Open:288,High:288.18,Low:287.97,Close:288.17,Volume:36531}, + {Date:1649863920000,Open:288.17,High:288.4,Low:288.14,Close:288.39,Volume:69299}, + {Date:1649863980000,Open:288.39,High:288.5,Low:288.32,Close:288.48,Volume:72362}, + {Date:1649864040000,Open:288.48,High:288.58,Low:288.41,Close:288.44,Volume:48394}, + {Date:1649864100000,Open:288.45,High:288.56,Low:288.35,Close:288.54,Volume:55393}, + {Date:1649864160000,Open:288.52,High:288.55,Low:288.11,Close:288.16,Volume:73083}, + {Date:1649864220000,Open:288.14,High:288.48,Low:288.14,Close:288.46,Volume:45926}, + {Date:1649864280000,Open:288.46,High:288.54,Low:288.36,Close:288.4,Volume:44675}, + {Date:1649864340000,Open:288.39,High:288.48,Low:288.32,Close:288.42,Volume:39451}, + {Date:1649864400000,Open:288.41,High:288.44,Low:288.31,Close:288.35,Volume:46241}, + {Date:1649864460000,Open:288.33,High:288.35,Low:288.18,Close:288.35,Volume:53960}, + {Date:1649864520000,Open:288.35,High:288.38,Low:288.18,Close:288.23,Volume:55907}, + {Date:1649864580000,Open:288.23,High:288.32,Low:288.12,Close:288.15,Volume:50229}, + {Date:1649864640000,Open:288.16,High:288.18,Low:288.06,Close:288.15,Volume:66863}, + {Date:1649864700000,Open:288.14,High:288.32,Low:288.09,Close:288.2,Volume:72523}, + {Date:1649864760000,Open:288.2,High:288.39,Low:288.19,Close:288.39,Volume:62308}, + {Date:1649864820000,Open:288.38,High:288.39,Low:288.19,Close:288.3,Volume:71194}, + {Date:1649864880000,Open:288.29,High:288.32,Low:287.99,Close:288.05,Volume:72909}, + {Date:1649864940000,Open:288.04,High:288.12,Low:287.87,Close:288.06,Volume:79361}, + {Date:1649865000000,Open:288.04,High:288.24,Low:287.65,Close:287.87,Volume:95362}, + {Date:1649865060000,Open:287.86,High:287.95,Low:287.73,Close:287.8,Volume:57193}, + {Date:1649865120000,Open:287.79,High:287.93,Low:287.58,Close:287.92,Volume:76699}, + {Date:1649865180000,Open:287.89,High:287.92,Low:287.61,Close:287.67,Volume:76323}, + {Date:1649865240000,Open:287.68,High:288.35,Low:287.47,Close:287.7,Volume:92112}, + {Date:1649865300000,Open:287.71,High:287.81,Low:287.57,Close:287.69,Volume:76299}, + {Date:1649865360000,Open:287.68,High:287.83,Low:287.56,Close:287.81,Volume:71957}, + {Date:1649865420000,Open:287.81,High:287.83,Low:287.64,Close:287.69,Volume:52673}, + {Date:1649865480000,Open:287.69,High:287.7,Low:287.57,Close:287.6,Volume:71778}, + {Date:1649865540000,Open:287.6,High:287.84,Low:287.3,Close:287.6,Volume:90524} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_month.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_month.js new file mode 100644 index 00000000..0f64fb63 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_month.js @@ -0,0 +1,14 @@ +window["MSFT_month"] = [ + {Date:1617278400000,Open:238.47,High:263.19,Low:238.05,Close:252.18,Volume:568661600}, + {Date:1619870400000,Open:253.4,High:254.35,Low:238.07,Close:249.68,Volume:495084900}, + {Date:1622548800000,Open:251.23,High:271.65,Low:243,Close:270.9,Volume:508572200}, + {Date:1625140800000,Open:269.61,High:290.15,Low:269.6,Close:284.91,Volume:522672700}, + {Date:1627819200000,Open:286.36,High:305.84,Low:283.74,Close:301.88,Volume:441308900}, + {Date:1630497600000,Open:302.87,High:305.32,Low:281.62,Close:281.92,Volume:502918700}, + {Date:1633089600000,Open:282.12,High:332,Low:280.25,Close:331.62,Volume:516515800}, + {Date:1635768000000,Open:331.36,High:349.67,Low:326.37,Close:330.59,Volume:509885200}, + {Date:1638360000000,Open:335.13,High:344.3,Low:317.25,Close:336.32,Volume:625674800}, + {Date:1641038400000,Open:335.35,High:338,Low:276.05,Close:310.98,Volume:947531400}, + {Date:1643716800000,Open:310.41,High:315.12,Low:271.52,Close:298.79,Volume:697050600}, + {Date:1646136000000,Open:296.4,High:315.95,Low:270,Close:308.31,Volume:734334200} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_week.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_week.js new file mode 100644 index 00000000..83340f1b --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/data/MSFT_week.js @@ -0,0 +1,55 @@ +window["MSFT_week"] = [ + {Date:1617019200000,Open:233.53,High:242.84,Low:231.1,Close:242.35,Volume:98753500}, + {Date:1617624000000,Open:242.76,High:255.99,Low:242.7,Close:255.85,Volume:130514300}, + {Date:1618228800000,Open:254.71,High:261,Low:254.62,Close:260.74,Volume:124563200}, + {Date:1618833600000,Open:260.19,High:261.78,Low:255.64,Close:261.15,Volume:114031400}, + {Date:1619438400000,Open:261.66,High:263.19,Low:249,Close:252.18,Volume:169214700}, + {Date:1620043200000,Open:253.4,High:254.35,Low:244.69,Close:252.46,Volume:127808000}, + {Date:1620648000000,Open:250.87,High:251.73,Low:238.07,Close:248.15,Volume:153151300}, + {Date:1621252800000,Open:246.55,High:248.33,Low:238.6,Close:245.17,Volume:114541800}, + {Date:1621857600000,Open:247.79,High:252.94,Low:247.51,Close:249.68,Volume:99583800}, + {Date:1622462400000,Open:251.23,High:251.65,Low:243,Close:250.79,Volume:93208800}, + {Date:1623067200000,Open:249.98,High:258.49,Low:249.81,Close:257.89,Volume:107035100}, + {Date:1623672000000,Open:257.9,High:262.3,Low:254.42,Close:259.43,Volume:129177100}, + {Date:1624276800000,Open:259.82,High:267.85,Low:257.92,Close:265.02,Volume:117966900}, + {Date:1624881600000,Open:266.19,High:278,Low:265.91,Close:277.65,Volume:104367600}, + {Date:1625486400000,Open:278.03,High:280.69,Low:274.3,Close:277.94,Volume:103360900}, + {Date:1626091200000,Open:279.16,High:284.1,Low:276.58,Close:280.75,Volume:116956500}, + {Date:1626696000000,Open:278.93,High:289.99,Low:274.45,Close:289.67,Volume:129711800}, + {Date:1627300800000,Open:289,High:290.15,Low:282.95,Close:284.91,Volume:129460200}, + {Date:1627905600000,Open:286.36,High:289.63,Low:283.74,Close:289.46,Volume:80827200}, + {Date:1628510400000,Open:289.75,High:292.9,Low:285.2,Close:292.85,Volume:81500400}, + {Date:1629115200000,Open:293.19,High:305.84,Low:288.64,Close:304.36,Volume:135064000}, + {Date:1629720000000,Open:303.25,High:305.65,Low:296.83,Close:299.72,Volume:101283900}, + {Date:1630324800000,Open:301.12,High:305.19,Low:300.18,Close:301.14,Volume:92650700}, + {Date:1630929600000,Open:301.01,High:302.14,Low:295.38,Close:295.71,Volume:71787600}, + {Date:1631534400000,Open:297.55,High:305.32,Low:294.08,Close:299.87,Volume:134785900}, + {Date:1632139200000,Open:296.33,High:300.9,Low:289.52,Close:299.35,Volume:120872700}, + {Date:1632744000000,Open:296.14,High:296.47,Low:281.29,Close:289.1,Volume:155541500}, + {Date:1633348800000,Open:287.4,High:296.64,Low:280.25,Close:294.85,Volume:122462500}, + {Date:1633953600000,Open:292.92,High:304.45,Low:292.35,Close:304.21,Volume:113336700}, + {Date:1634558400000,Open:303.57,High:311.09,Low:302.69,Close:309.16,Volume:91315900}, + {Date:1635163200000,Open:309.36,High:332,Low:306.46,Close:331.62,Volume:159314400}, + {Date:1635768000000,Open:331.36,High:338.79,Low:326.37,Close:336.06,Volume:121622700}, + {Date:1636372800000,Open:337.3,High:338.72,Low:329.92,Close:336.72,Volume:108386100}, + {Date:1636977600000,Open:337.54,High:345.1,Low:334.03,Close:343.11,Volume:101090100}, + {Date:1637582400000,Open:344.62,High:349.67,Low:328.12,Close:329.68,Volume:107337200}, + {Date:1638187200000,Open:334.94,High:339.28,Low:318.03,Close:323.01,Volume:177332000}, + {Date:1638792000000,Open:323.95,High:343,Low:319.23,Close:342.54,Volume:146125400}, + {Date:1639396800000,Open:340.68,High:343.79,Low:317.25,Close:323.8,Volume:191504300}, + {Date:1640001600000,Open:320.05,High:336.39,Low:317.57,Close:334.69,Volume:97516400}, + {Date:1640606400000,Open:335.46,High:344.3,Low:335.43,Close:336.32,Volume:84645800}, + {Date:1641211200000,Open:335.35,High:338,Low:310.09,Close:314.04,Volume:173959800}, + {Date:1641816000000,Open:309.49,High:323.41,Low:303.75,Close:310.2,Volume:193260900}, + {Date:1642420800000,Open:304.07,High:313.91,Low:295.61,Close:296.03,Volume:181632200}, + {Date:1643025600000,Open:292.2,High:308.5,Low:276.05,Close:308.26,Volume:352234000}, + {Date:1643630400000,Open:308.95,High:315.12,Low:299.96,Close:305.94,Volume:202857400}, + {Date:1644235200000,Open:306.17,High:311.93,Low:294.22,Close:295.04,Volume:176801000}, + {Date:1644840000000,Open:293.77,High:300.87,Low:286.31,Close:287.93,Volume:160125500}, + {Date:1645444800000,Open:285,High:297.63,Low:271.52,Close:297.31,Volume:169083700}, + {Date:1646049600000,Open:294.31,High:303.13,Low:287.17,Close:289.86,Volume:157389300}, + {Date:1646654400000,Open:288.53,High:289.69,Low:270,Close:280.07,Volume:184358500}, + {Date:1647259200000,Open:280.34,High:301,Low:275.82,Close:300.43,Volume:176939300}, + {Date:1647864000000,Open:298.89,High:305.5,Low:294.9,Close:303.68,Volume:128717300}, + {Date:1648468800000,Open:304.33,High:315.82,Low:304.33,Close:315.41,Volume:59971600} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/index.css b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/index.html b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/index.html new file mode 100644 index 00000000..bfeaed8d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/index.html @@ -0,0 +1,21 @@ + + + + + amCharts 5 Example - stock-chart-data-granularity + + + +
+
+ + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/index.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/index.js new file mode 100644 index 00000000..6445b623 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-granularity/index.js @@ -0,0 +1,338 @@ +// Create root element +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create a stock chart +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Instantiating_the_chart +var stockChart = root.container.children.push(am5stock.StockChart.new(root, { +})); + + +// Set global number format +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/ +root.numberFormatter.set("numberFormat", "#,###.00"); + + +// Create a main stock panel (chart) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Adding_panels +var mainPanel = stockChart.panels.push(am5stock.StockPanel.new(root, { + wheelY: "zoomX", + panX: true, + panY: true +})); + + +// Create value axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var valueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, { + pan: "zoom" + }), + extraMin: 0.1, // adds some space for for main series + tooltip: am5.Tooltip.new(root, {}), + numberFormat: "#,###.00", + extraTooltipPrecision: 2 +})); + +var dateAxis = mainPanel.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + + +// Add series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var valueSeries = mainPanel.series.push(am5xy.CandlestickSeries.new(root, { + name: "MSFT", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Close", + highValueYField: "High", + lowValueYField: "Low", + openValueYField: "Open", + calculateAggregates: true, + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "open: [bold]{openValueY}[/] high: [bold]{highValueY}[/] low: [bold]{lowValueY}[/] close: [bold]{valueY}[/]", + legendRangeValueText:"" +})); + + +// Set main value series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("stockSeries", valueSeries); + + +// Add a stock legend +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/stock-legend/ +var valueLegend = mainPanel.plotContainer.children.push(am5stock.StockLegend.new(root, { + stockChart: stockChart +})); + + +// Create volume axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var volumeAxisRenderer = am5xy.AxisRendererY.new(root, { + inside: true +}); + +volumeAxisRenderer.labels.template.set("forceHidden", true); +volumeAxisRenderer.grid.template.set("forceHidden", true); + +var volumeValueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + numberFormat: "#.#a", + height: am5.percent(20), + y: am5.percent(100), + centerY: am5.percent(100), + renderer: volumeAxisRenderer +})); + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var volumeSeries = mainPanel.series.push(am5xy.ColumnSeries.new(root, { + name: "Volume", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Volume", + xAxis: dateAxis, + yAxis: volumeValueAxis, + legendValueText: "[bold]{valueY.formatNumber('#,###.0a')}[/]" +})); + +volumeSeries.columns.template.setAll({ + strokeOpacity: 0, + fillOpacity: 0.5 +}); + +// color columns by stock rules +volumeSeries.columns.template.adapters.add("fill", function(fill, target) { + var dataItem = target.dataItem; + if (dataItem) { + return stockChart.getVolumeColor(dataItem); + } + return fill; +}) + + +// Set main series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("volumeSeries", volumeSeries); +valueLegend.data.setAll([valueSeries, volumeSeries]); + + +// Add cursor(s) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +mainPanel.set("cursor", am5xy.XYCursor.new(root, { + yAxis: valueAxis, + xAxis: dateAxis, + snapToSeries: [valueSeries], + snapToSeriesBy: "y!" +})); + + +// Add scrollbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = mainPanel.set("scrollbarX", am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +})); +stockChart.toolsContainer.children.push(scrollbar); + +var sbDateAxis = scrollbar.chart.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, {}) +})); + +var sbValueAxis = scrollbar.chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + +var sbSeries = scrollbar.chart.series.push(am5xy.LineSeries.new(root, { + valueYField: "Close", + valueXField: "Date", + xAxis: sbDateAxis, + yAxis: sbValueAxis +})); + +sbSeries.fills.template.setAll({ + visible: true, + fillOpacity: 0.3 +}); + + +// Function that dynamically loads data +function loadData(ticker, series, granularity) { + var data = (window)[ticker + "_" + granularity]; + am5.array.each(series, function(item) { + item.data.setAll(data); + }); +} + +// Load initial data for the first series +var currentGranularity = "day"; +loadData("MSFT", [valueSeries, volumeSeries, sbSeries], currentGranularity); + +// Set up series type switcher +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/series-type-control/ +var seriesSwitcher = am5stock.SeriesTypeControl.new(root, { + stockChart: stockChart +}); + +seriesSwitcher.events.on("selected", function(ev) { + setSeriesType(ev.item.id); +}); + +function getNewSettings(series) { + var newSettings = []; + am5.array.each(["name", "valueYField", "highValueYField", "lowValueYField", "openValueYField", "calculateAggregates", "valueXField", "xAxis", "yAxis", "legendValueText", "legendRangeValueText", "stroke", "fill"], function(setting) { + newSettings[setting] = series.get(setting); + }); + return newSettings; +} + +function setSeriesType(seriesType) { + // Get current series and its settings + var currentSeries = stockChart.get("stockSeries"); + var newSettings = getNewSettings(currentSeries); + + // Remove previous series + var data = currentSeries.data.values; + mainPanel.series.removeValue(currentSeries); + + // Create new series + var series; + switch (seriesType) { + case "line": + series = mainPanel.series.push(am5xy.LineSeries.new(root, newSettings)); + break; + case "candlestick": + case "procandlestick": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.CandlestickSeries.new(root, newSettings)); + if (seriesType == "procandlestick") { + series.columns.template.get("themeTags").push("pro"); + } + break; + case "ohlc": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.OHLCSeries.new(root, newSettings)); + break; + } + + // Set new series as stockSeries + if (series) { + valueLegend.data.removeValue(currentSeries); + series.data.setAll(data); + stockChart.set("stockSeries", series); + var cursor = mainPanel.get("cursor"); + if (cursor) { + cursor.set("snapToSeries", [series]); + } + valueLegend.data.insertIndex(0, series); + } +} + +// Interval switcher +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/interval-control/ +var intervalSwitcher = am5stock.IntervalControl.new(root, { + stockChart: stockChart, + items: [ + { id: "1 minute", label: "1 minute", interval: { timeUnit: "minute", count: 1 } }, + { id: "1 day", label: "1 day", interval: { timeUnit: "day", count: 1 } }, + { id: "1 week", label: "1 week", interval: { timeUnit: "week", count: 1 } }, + { id: "1 month", label: "1 month", interval: { timeUnit: "month", count: 1 } } + ] +}); + +intervalSwitcher.events.on("selected", function(ev) { + // Determine selected granularity + currentGranularity = ev.item.interval.timeUnit; + + // Get series + var valueSeries = stockChart.get("stockSeries"); + var volumeSeries = stockChart.get("volumeSeries"); + + // Set up zoomout + valueSeries.events.once("datavalidated", function() { + mainPanel.zoomOut(); + }); + + // Load data for all series (main series + comparisons) + var promises = []; + promises.push(loadData("MSFT", [valueSeries, volumeSeries, sbSeries], currentGranularity)); + am5.array.each(stockChart.getPrivate("comparedSeries", []), function(series) { + promises.push(loadData(series.get("name"), [series], currentGranularity)); + }); + + // Once data loading is done, set `baseInterval` on the DateAxis + Promise.all(promises).then(function() { + dateAxis.set("baseInterval", ev.item.interval); + sbDateAxis.set("baseInterval", ev.item.interval); + }); +}); + + +// Stock toolbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/ +var toolbar = am5stock.StockToolbar.new(root, { + container: document.getElementById("chartcontrols"), + stockChart: stockChart, + controls: [ + am5stock.IndicatorControl.new(root, { + stockChart: stockChart, + legend: valueLegend + }), + am5stock.DateRangeSelector.new(root, { + stockChart: stockChart + }), + am5stock.PeriodSelector.new(root, { + stockChart: stockChart + }), + intervalSwitcher, + seriesSwitcher, + am5stock.DrawingControl.new(root, { + stockChart: stockChart + }), + am5stock.ResetControl.new(root, { + stockChart: stockChart + }), + am5stock.SettingsControl.new(root, { + stockChart: stockChart + }) + ] +}) diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/README.md b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/data/MSFT_day.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/data/MSFT_day.js new file mode 100644 index 00000000..f65df8d7 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/data/MSFT_day.js @@ -0,0 +1,3103 @@ +window["MSFT_day"] = [ + {Date:1262606400000,Open:30.62,High:31.1,Low:30.59,Close:30.95,Volume:38409100}, + {Date:1262692800000,Open:30.85,High:31.1,Low:30.64,Close:30.96,Volume:49749600}, + {Date:1262779200000,Open:30.88,High:31.08,Low:30.52,Close:30.77,Volume:58182400}, + {Date:1262865600000,Open:30.63,High:30.7,Low:30.19,Close:30.45,Volume:50559700}, + {Date:1262952000000,Open:30.28,High:30.88,Low:30.24,Close:30.66,Volume:51197400}, + {Date:1263211200000,Open:30.71,High:30.76,Low:30.12,Close:30.27,Volume:68754700}, + {Date:1263297600000,Open:30.15,High:30.4,Low:29.91,Close:30.07,Volume:65912100}, + {Date:1263384000000,Open:30.26,High:30.52,Low:30.01,Close:30.35,Volume:51863500}, + {Date:1263470400000,Open:30.31,High:31.1,Low:30.26,Close:30.96,Volume:63228100}, + {Date:1263556800000,Open:31.08,High:31.24,Low:30.71,Close:30.86,Volume:79913200}, + {Date:1263902400000,Open:30.75,High:31.24,Low:30.68,Close:31.1,Volume:46575700}, + {Date:1263988800000,Open:30.81,High:30.94,Low:30.31,Close:30.59,Volume:54849500}, + {Date:1264075200000,Open:30.61,High:30.72,Low:30,Close:30.01,Volume:73086700}, + {Date:1264161600000,Open:30,High:30.2,Low:28.84,Close:28.96,Volume:102004600}, + {Date:1264420800000,Open:29.24,High:29.66,Low:29.1,Close:29.32,Volume:63373000}, + {Date:1264507200000,Open:29.2,High:29.85,Low:29.09,Close:29.5,Volume:66639900}, + {Date:1264593600000,Open:29.35,High:29.82,Low:29.02,Close:29.67,Volume:63949500}, + {Date:1264680000000,Open:29.84,High:29.87,Low:28.89,Close:29.16,Volume:117513700}, + {Date:1264766400000,Open:29.9,High:29.92,Low:27.66,Close:28.18,Volume:193888500}, + {Date:1265025600000,Open:28.39,High:28.48,Low:27.92,Close:28.41,Volume:85931100}, + {Date:1265112000000,Open:28.37,High:28.5,Low:28.14,Close:28.46,Volume:54413700}, + {Date:1265198400000,Open:28.26,High:28.79,Low:28.12,Close:28.63,Volume:61397900}, + {Date:1265284800000,Open:28.38,High:28.5,Low:27.81,Close:27.84,Volume:77850000}, + {Date:1265371200000,Open:28,High:28.28,Low:27.57,Close:28.02,Volume:80960100}, + {Date:1265630400000,Open:28.01,High:28.08,Low:27.57,Close:27.72,Volume:52820600}, + {Date:1265716800000,Open:27.97,High:28.34,Low:27.75,Close:28.01,Volume:59195800}, + {Date:1265803200000,Open:28.03,High:28.24,Low:27.84,Close:27.99,Volume:48591300}, + {Date:1265889600000,Open:27.93,High:28.4,Low:27.7,Close:28.12,Volume:65993700}, + {Date:1265976000000,Open:27.81,High:28.06,Low:27.58,Close:27.93,Volume:81117200}, + {Date:1266321600000,Open:28.13,High:28.37,Low:28.02,Close:28.35,Volume:51935600}, + {Date:1266408000000,Open:28.53,High:28.65,Low:28.36,Close:28.59,Volume:45882900}, + {Date:1266494400000,Open:28.59,High:29.03,Low:28.51,Close:28.97,Volume:42856500}, + {Date:1266580800000,Open:28.79,High:28.92,Low:28.69,Close:28.77,Volume:44451800}, + {Date:1266840000000,Open:28.84,High:28.94,Low:28.65,Close:28.73,Volume:36707100}, + {Date:1266926400000,Open:28.68,High:28.83,Low:28.09,Close:28.33,Volume:52266200}, + {Date:1267012800000,Open:28.52,High:28.79,Low:28.38,Close:28.63,Volume:43165900}, + {Date:1267099200000,Open:28.27,High:28.65,Low:28.02,Close:28.6,Volume:48735300}, + {Date:1267185600000,Open:28.65,High:28.85,Low:28.51,Close:28.67,Volume:40370600}, + {Date:1267444800000,Open:28.77,High:29.05,Low:28.53,Close:29.02,Volume:43805400}, + {Date:1267531200000,Open:29.08,High:29.3,Low:28.24,Close:28.46,Volume:93123900}, + {Date:1267617600000,Open:28.51,High:28.61,Low:28.35,Close:28.46,Volume:48442100}, + {Date:1267704000000,Open:28.46,High:28.65,Low:28.27,Close:28.63,Volume:42890600}, + {Date:1267790400000,Open:28.66,High:28.68,Low:28.42,Close:28.59,Volume:56001800}, + {Date:1268049600000,Open:28.52,High:28.93,Low:28.5,Close:28.63,Volume:39414500}, + {Date:1268136000000,Open:28.56,High:29.11,Low:28.55,Close:28.8,Volume:50271600}, + {Date:1268222400000,Open:28.86,High:29.11,Low:28.8,Close:28.97,Volume:44891400}, + {Date:1268308800000,Open:28.89,High:29.19,Low:28.85,Close:29.18,Volume:35349700}, + {Date:1268395200000,Open:29.32,High:29.38,Low:29.04,Close:29.27,Volume:31700200}, + {Date:1268654400000,Open:29.18,High:29.37,Low:29.01,Close:29.29,Volume:37512000}, + {Date:1268740800000,Open:29.42,High:29.49,Low:29.2,Close:29.37,Volume:36723500}, + {Date:1268827200000,Open:29.5,High:29.87,Low:29.4,Close:29.63,Volume:50385700}, + {Date:1268913600000,Open:29.63,High:29.72,Low:29.5,Close:29.61,Volume:43845200}, + {Date:1269000000000,Open:29.76,High:29.9,Low:29.35,Close:29.59,Volume:81332100}, + {Date:1269259200000,Open:29.5,High:29.7,Low:29.39,Close:29.6,Volume:37718200}, + {Date:1269345600000,Open:29.59,High:29.9,Low:29.41,Close:29.88,Volume:42026600}, + {Date:1269432000000,Open:29.72,High:29.85,Low:29.6,Close:29.65,Volume:33987700}, + {Date:1269518400000,Open:29.83,High:30.57,Low:29.8,Close:30.01,Volume:73168700}, + {Date:1269604800000,Open:30.09,High:30.2,Low:29.59,Close:29.66,Volume:55595500}, + {Date:1269864000000,Open:29.71,High:29.82,Low:29.55,Close:29.59,Volume:33336000}, + {Date:1269950400000,Open:29.63,High:29.86,Low:29.5,Close:29.77,Volume:34954800}, + {Date:1270036800000,Open:29.64,High:29.72,Low:29.17,Close:29.29,Volume:63760000}, + {Date:1270123200000,Open:29.35,High:29.54,Low:28.62,Close:29.16,Volume:74768100}, + {Date:1270468800000,Open:29.13,High:29.43,Low:29.03,Close:29.27,Volume:34331200}, + {Date:1270555200000,Open:29.15,High:29.58,Low:28.98,Close:29.32,Volume:47366800}, + {Date:1270641600000,Open:29.16,High:29.56,Low:29.14,Close:29.35,Volume:58318800}, + {Date:1270728000000,Open:29.32,High:29.98,Low:29.3,Close:29.92,Volume:63713800}, + {Date:1270814400000,Open:29.95,High:30.41,Low:29.9,Close:30.34,Volume:54752500}, + {Date:1271073600000,Open:30.25,High:30.49,Low:30.21,Close:30.32,Volume:37068800}, + {Date:1271160000000,Open:30.15,High:30.5,Low:30.13,Close:30.45,Volume:41374600}, + {Date:1271246400000,Open:30.79,High:31,Low:30.66,Close:30.82,Volume:68941200}, + {Date:1271332800000,Open:30.82,High:30.95,Low:30.71,Close:30.87,Volume:52745400}, + {Date:1271419200000,Open:30.79,High:30.98,Low:30.6,Close:30.67,Volume:88703100}, + {Date:1271678400000,Open:30.77,High:31.25,Low:30.76,Close:31.04,Volume:64970300}, + {Date:1271764800000,Open:31.22,High:31.44,Low:31.13,Close:31.36,Volume:52199500}, + {Date:1271851200000,Open:31.33,High:31.5,Low:31.23,Close:31.33,Volume:55343100}, + {Date:1271937600000,Open:31.04,High:31.53,Low:30.9,Close:31.39,Volume:84847600}, + {Date:1272024000000,Open:31.12,High:31.58,Low:30.65,Close:30.96,Volume:126766600}, + {Date:1272283200000,Open:31,High:31.28,Low:30.86,Close:31.11,Volume:63649300}, + {Date:1272369600000,Open:30.95,High:31.25,Low:30.75,Close:30.85,Volume:68730900}, + {Date:1272456000000,Open:30.92,High:31,Low:30.62,Close:30.91,Volume:64557900}, + {Date:1272542400000,Open:30.93,High:31.43,Low:30.67,Close:31,Volume:52665200}, + {Date:1272628800000,Open:31.07,High:31.08,Low:30.52,Close:30.54,Volume:63214800}, + {Date:1272888000000,Open:30.67,High:31.06,Low:30.58,Close:30.86,Volume:43989500}, + {Date:1272974400000,Open:30.52,High:30.55,Low:29.75,Close:30.13,Volume:82085600}, + {Date:1273060800000,Open:29.77,High:30.09,Low:29.69,Close:29.85,Volume:66833800}, + {Date:1273147200000,Open:29.59,High:29.88,Low:27.91,Close:28.98,Volume:128613000}, + {Date:1273233600000,Open:28.93,High:28.95,Low:27.32,Close:28.21,Volume:173718100}, + {Date:1273492800000,Open:29.01,High:29.48,Low:28.71,Close:28.94,Volume:86653300}, + {Date:1273579200000,Open:28.68,High:29.65,Low:28.57,Close:28.88,Volume:63789400}, + {Date:1273665600000,Open:28.98,High:29.58,Low:28.92,Close:29.44,Volume:47146800}, + {Date:1273752000000,Open:29.26,High:29.73,Low:29.18,Close:29.24,Volume:45188800}, + {Date:1273838400000,Open:29.2,High:29.21,Low:28.64,Close:28.93,Volume:63334000}, + {Date:1274097600000,Open:29.12,High:29.23,Low:28.45,Close:28.94,Volume:46053300}, + {Date:1274184000000,Open:28.87,High:29,Low:28.4,Close:28.6,Volume:52690600}, + {Date:1274270400000,Open:28.52,High:28.69,Low:27.79,Close:28.24,Volume:61746700}, + {Date:1274356800000,Open:27.65,High:27.84,Low:27.04,Close:27.11,Volume:87991100}, + {Date:1274443200000,Open:26.63,High:27.11,Low:26.44,Close:26.84,Volume:117596300}, + {Date:1274702400000,Open:26.85,High:26.86,Low:26.26,Close:26.27,Volume:73711700}, + {Date:1274788800000,Open:25.65,High:26.33,Low:25.38,Close:26.07,Volume:98373600}, + {Date:1274875200000,Open:26.23,High:26.61,Low:24.56,Close:25.01,Volume:176684100}, + {Date:1274961600000,Open:25.73,High:26.36,Low:25.73,Close:26,Volume:136433600}, + {Date:1275048000000,Open:25.84,High:26.12,Low:25.66,Close:25.8,Volume:67496900}, + {Date:1275393600000,Open:25.53,High:26.31,Low:25.52,Close:25.89,Volume:76152400}, + {Date:1275480000000,Open:26.06,High:26.48,Low:25.73,Close:26.46,Volume:65718800}, + {Date:1275566400000,Open:26.55,High:26.93,Low:26.41,Close:26.86,Volume:67837000}, + {Date:1275652800000,Open:26.1,High:26.57,Low:25.62,Close:25.79,Volume:89832200}, + {Date:1275912000000,Open:25.82,High:25.83,Low:25.24,Close:25.29,Volume:80456200}, + {Date:1275998400000,Open:25.25,High:25.26,Low:24.65,Close:25.11,Volume:87355000}, + {Date:1276084800000,Open:25.22,High:25.52,Low:24.75,Close:24.79,Volume:87794000}, + {Date:1276171200000,Open:25.13,High:25.15,Low:24.78,Close:25,Volume:78930900}, + {Date:1276257600000,Open:25.04,High:25.72,Low:24.77,Close:25.66,Volume:68057700}, + {Date:1276516800000,Open:25.86,High:25.96,Low:25.47,Close:25.5,Volume:50972400}, + {Date:1276603200000,Open:25.75,High:26.65,Low:25.74,Close:26.58,Volume:81641500}, + {Date:1276689600000,Open:26.47,High:26.58,Low:26.23,Close:26.32,Volume:48698000}, + {Date:1276776000000,Open:26.56,High:26.67,Low:26.04,Close:26.37,Volume:47995500}, + {Date:1276862400000,Open:26.37,High:26.53,Low:26.17,Close:26.44,Volume:52075600}, + {Date:1277121600000,Open:26.78,High:26.89,Low:25.89,Close:25.95,Volume:54625300}, + {Date:1277208000000,Open:26.16,High:26.45,Low:25.76,Close:25.77,Volume:55985400}, + {Date:1277294400000,Open:25.78,High:25.78,Low:25.22,Close:25.31,Volume:61466200}, + {Date:1277380800000,Open:25.46,High:25.72,Low:24.93,Close:25,Volume:85243400}, + {Date:1277467200000,Open:25.05,High:25.11,Low:24.31,Close:24.53,Volume:156256700}, + {Date:1277726400000,Open:24.51,High:24.61,Low:24.12,Close:24.31,Volume:73784800}, + {Date:1277812800000,Open:24.13,High:24.2,Low:23.11,Close:23.31,Volume:119882100}, + {Date:1277899200000,Open:23.3,High:23.68,Low:22.95,Close:23.01,Volume:81050500}, + {Date:1277985600000,Open:23.09,High:23.32,Low:22.73,Close:23.16,Volume:92239400}, + {Date:1278072000000,Open:23.36,High:23.48,Low:23.05,Close:23.27,Volume:62485100}, + {Date:1278417600000,Open:23.7,High:24.09,Low:23.58,Close:23.82,Volume:73592000}, + {Date:1278504000000,Open:23.82,High:24.32,Low:23.61,Close:24.3,Volume:79965300}, + {Date:1278590400000,Open:24.6,High:24.62,Low:23.97,Close:24.41,Volume:50758100}, + {Date:1278676800000,Open:24.33,High:24.41,Low:24.15,Close:24.27,Volume:53806100}, + {Date:1278936000000,Open:24.43,High:24.89,Low:24.42,Close:24.83,Volume:49854200}, + {Date:1279022400000,Open:25.14,High:25.3,Low:24.9,Close:25.13,Volume:61928700}, + {Date:1279108800000,Open:25.5,High:25.61,Low:25.12,Close:25.44,Volume:72808100}, + {Date:1279195200000,Open:25.5,High:25.59,Low:24.98,Close:25.51,Volume:56934700}, + {Date:1279281600000,Open:25.51,High:25.64,Low:24.88,Close:24.89,Volume:65064800}, + {Date:1279540800000,Open:24.96,High:25.3,Low:24.91,Close:25.23,Volume:38181800}, + {Date:1279627200000,Open:24.86,High:25.48,Low:24.7,Close:25.48,Volume:45530700}, + {Date:1279713600000,Open:25.6,High:25.65,Low:24.98,Close:25.12,Volume:73297300}, + {Date:1279800000000,Open:25.51,High:25.99,Low:25.47,Close:25.84,Volume:73016400}, + {Date:1279886400000,Open:25.84,High:26.02,Low:25.25,Close:25.81,Volume:108520100}, + {Date:1280145600000,Open:25.86,High:26.2,Low:25.8,Close:26.1,Volume:67249900}, + {Date:1280232000000,Open:26.14,High:26.24,Low:25.96,Close:26.16,Volume:60672100}, + {Date:1280318400000,Open:26.07,High:26.19,Low:25.83,Close:25.95,Volume:69704800}, + {Date:1280404800000,Open:26.13,High:26.41,Low:25.6,Close:26.03,Volume:69446200}, + {Date:1280491200000,Open:25.75,High:25.84,Low:25.35,Close:25.81,Volume:83534800}, + {Date:1280750400000,Open:25.99,High:26.38,Low:25.75,Close:26.33,Volume:55044600}, + {Date:1280836800000,Open:26.2,High:26.35,Low:25.97,Close:26.16,Volume:56877700}, + {Date:1280923200000,Open:26.15,High:26.24,Low:25.44,Close:25.73,Volume:78531900}, + {Date:1281009600000,Open:25.49,High:25.58,Low:25.21,Close:25.37,Volume:64922100}, + {Date:1281096000000,Open:25.18,High:25.56,Low:25.02,Close:25.55,Volume:55982100}, + {Date:1281355200000,Open:25.55,High:25.73,Low:25.37,Close:25.61,Volume:57096500}, + {Date:1281441600000,Open:25.33,High:25.34,Low:24.88,Close:25.07,Volume:87257700}, + {Date:1281528000000,Open:24.68,High:24.9,Low:24.56,Close:24.86,Volume:76746900}, + {Date:1281614400000,Open:24.42,High:24.68,Low:24.36,Close:24.49,Volume:70240500}, + {Date:1281700800000,Open:24.35,High:24.67,Low:24.24,Close:24.4,Volume:45263500}, + {Date:1281960000000,Open:24.36,High:24.61,Low:24.3,Close:24.5,Volume:40909700}, + {Date:1282046400000,Open:24.71,High:24.96,Low:24.6,Close:24.71,Volume:52912600}, + {Date:1282132800000,Open:24.68,High:24.95,Low:24.41,Close:24.82,Volume:46818900}, + {Date:1282219200000,Open:24.62,High:24.74,Low:24.21,Close:24.44,Volume:54064600}, + {Date:1282305600000,Open:24.31,High:24.4,Low:24.2,Close:24.23,Volume:49560100}, + {Date:1282564800000,Open:24.44,High:24.64,Low:24.24,Close:24.28,Volume:51643000}, + {Date:1282651200000,Open:24.09,High:24.35,Low:24,Close:24.04,Volume:66522500}, + {Date:1282737600000,Open:24,High:24.22,Low:23.87,Close:24.1,Volume:47404800}, + {Date:1282824000000,Open:24.09,High:24.19,Low:23.79,Close:23.82,Volume:49105300}, + {Date:1282910400000,Open:23.88,High:24.02,Low:23.51,Close:23.93,Volume:60939400}, + {Date:1283169600000,Open:23.74,High:23.82,Low:23.6,Close:23.64,Volume:45453100}, + {Date:1283256000000,Open:23.6,High:23.73,Low:23.32,Close:23.47,Volume:66074600}, + {Date:1283342400000,Open:23.67,High:23.95,Low:23.54,Close:23.9,Volume:65235900}, + {Date:1283428800000,Open:23.88,High:23.95,Low:23.71,Close:23.94,Volume:48837100}, + {Date:1283515200000,Open:24.24,High:24.45,Low:24.2,Close:24.29,Volume:64189100}, + {Date:1283860800000,Open:24.1,High:24.3,Low:23.92,Close:23.96,Volume:51928700}, + {Date:1283947200000,Open:24.07,High:24.2,Low:23.74,Close:23.93,Volume:65512400}, + {Date:1284033600000,Open:24.19,High:24.21,Low:23.99,Close:24.01,Volume:46028900}, + {Date:1284120000000,Open:23.98,High:24.03,Low:23.79,Close:23.85,Volume:58284300}, + {Date:1284379200000,Open:24.2,High:25.29,Low:24.09,Close:25.11,Volume:114680400}, + {Date:1284465600000,Open:25.04,High:25.35,Low:24.89,Close:25.03,Volume:87160400}, + {Date:1284552000000,Open:25.1,High:25.22,Low:24.92,Close:25.12,Volume:56201900}, + {Date:1284638400000,Open:25.06,High:25.37,Low:25.05,Close:25.33,Volume:44548300}, + {Date:1284724800000,Open:25.4,High:25.53,Low:25.08,Close:25.22,Volume:70341600}, + {Date:1284984000000,Open:25.28,High:25.52,Low:25.11,Close:25.43,Volume:49838700}, + {Date:1285070400000,Open:25.42,High:25.42,Low:25.08,Close:25.15,Volume:52675700}, + {Date:1285156800000,Open:24.89,High:24.97,Low:24.36,Close:24.61,Volume:94299400}, + {Date:1285243200000,Open:24.51,High:24.59,Low:24.36,Close:24.43,Volume:46201800}, + {Date:1285329600000,Open:24.64,High:24.8,Low:24.58,Close:24.78,Volume:51948800}, + {Date:1285588800000,Open:24.85,High:24.99,Low:24.59,Close:24.73,Volume:43603300}, + {Date:1285675200000,Open:24.8,High:24.9,Low:24.35,Close:24.68,Volume:56041200}, + {Date:1285761600000,Open:24.63,High:24.66,Low:24.4,Close:24.5,Volume:44318900}, + {Date:1285848000000,Open:24.61,High:24.83,Low:24.36,Close:24.49,Volume:61262700}, + {Date:1285934400000,Open:24.77,High:24.82,Low:24.3,Close:24.38,Volume:62672300}, + {Date:1286193600000,Open:23.96,High:23.99,Low:23.78,Close:23.91,Volume:98143400}, + {Date:1286280000000,Open:24.06,High:24.45,Low:23.91,Close:24.35,Volume:78152900}, + {Date:1286366400000,Open:24.32,High:24.54,Low:24.13,Close:24.43,Volume:50489700}, + {Date:1286452800000,Open:24.62,High:24.75,Low:24.28,Close:24.53,Volume:50096100}, + {Date:1286539200000,Open:24.62,High:24.65,Low:24.37,Close:24.57,Volume:41327800}, + {Date:1286798400000,Open:24.74,High:24.74,Low:24.5,Close:24.59,Volume:27587800}, + {Date:1286884800000,Open:24.65,High:24.93,Low:24.43,Close:24.83,Volume:50141500}, + {Date:1286971200000,Open:25.02,High:25.54,Low:24.89,Close:25.34,Volume:75336500}, + {Date:1287057600000,Open:25.29,High:25.34,Low:25,Close:25.23,Volume:51949100}, + {Date:1287144000000,Open:25.36,High:25.55,Low:25.23,Close:25.54,Volume:68954800}, + {Date:1287403200000,Open:25.59,High:25.95,Low:25.45,Close:25.82,Volume:48330500}, + {Date:1287489600000,Open:25.27,High:25.37,Low:24.95,Close:25.1,Volume:66150900}, + {Date:1287576000000,Open:25.26,High:25.4,Low:25.1,Close:25.31,Volume:56283600}, + {Date:1287662400000,Open:25.4,High:25.54,Low:25.05,Close:25.42,Volume:50032400}, + {Date:1287748800000,Open:25.52,High:25.54,Low:25.27,Close:25.38,Volume:25837900}, + {Date:1288008000000,Open:25.24,High:25.35,Low:25.17,Close:25.19,Volume:50912400}, + {Date:1288094400000,Open:25.12,High:25.97,Low:25.06,Close:25.9,Volume:69304200}, + {Date:1288180800000,Open:25.79,High:26.11,Low:25.62,Close:26.05,Volume:64805500}, + {Date:1288267200000,Open:26.21,High:26.38,Low:25.92,Close:26.28,Volume:80730300}, + {Date:1288353600000,Open:27.15,High:27.2,Low:26.48,Close:26.67,Volume:114193200}, + {Date:1288612800000,Open:26.88,High:27.22,Low:26.7,Close:26.95,Volume:61912100}, + {Date:1288699200000,Open:27.06,High:27.42,Low:27.02,Close:27.39,Volume:54402100}, + {Date:1288785600000,Open:27.46,High:27.49,Low:26.96,Close:27.03,Volume:110255300}, + {Date:1288872000000,Open:27.41,High:27.43,Low:27.01,Close:27.14,Volume:93599300}, + {Date:1288958400000,Open:27.17,High:27.19,Low:26.53,Close:26.85,Volume:110953700}, + {Date:1289217600000,Open:26.68,High:28.87,Low:26.58,Close:26.81,Volume:71670800}, + {Date:1289304000000,Open:26.81,High:27.11,Low:26.71,Close:26.95,Volume:58538600}, + {Date:1289390400000,Open:27.01,High:27.08,Low:26.81,Close:26.94,Volume:52277300}, + {Date:1289476800000,Open:26.68,High:26.72,Low:26.28,Close:26.68,Volume:62073100}, + {Date:1289563200000,Open:26.47,High:26.52,Low:26.1,Close:26.27,Volume:64962200}, + {Date:1289822400000,Open:26.33,High:26.5,Low:26.17,Close:26.2,Volume:51794600}, + {Date:1289908800000,Open:26.04,High:26.04,Low:25.65,Close:25.81,Volume:65339200}, + {Date:1289995200000,Open:25.9,High:25.91,Low:25.55,Close:25.57,Volume:58299700}, + {Date:1290081600000,Open:25.71,High:26.08,Low:25.61,Close:25.84,Volume:59514000}, + {Date:1290168000000,Open:25.8,High:25.83,Low:25.6,Close:25.69,Volume:52423200}, + {Date:1290427200000,Open:25.65,High:25.74,Low:25.44,Close:25.73,Volume:53350500}, + {Date:1290513600000,Open:25.57,High:25.6,Low:25.09,Close:25.12,Volume:69742500}, + {Date:1290600000000,Open:25.2,High:25.46,Low:25.16,Close:25.37,Volume:56825900}, + {Date:1290772800000,Open:25.21,High:25.41,Low:25.17,Close:25.25,Volume:21356500}, + {Date:1291032000000,Open:25.19,High:25.42,Low:24.93,Close:25.31,Volume:56603600}, + {Date:1291118400000,Open:25.05,High:25.47,Low:25,Close:25.26,Volume:75282100}, + {Date:1291204800000,Open:25.57,High:26.25,Low:25.56,Close:26.04,Volume:74123500}, + {Date:1291291200000,Open:26.24,High:26.98,Low:26.2,Close:26.89,Volume:91759200}, + {Date:1291377600000,Open:26.81,High:27.06,Low:26.78,Close:27.02,Volume:52622000}, + {Date:1291636800000,Open:26.93,High:26.98,Low:26.76,Close:26.84,Volume:36264200}, + {Date:1291723200000,Open:27.08,High:27.13,Low:26.85,Close:26.87,Volume:57860500}, + {Date:1291809600000,Open:26.83,High:27.24,Low:26.8,Close:27.23,Volume:41666800}, + {Date:1291896000000,Open:27.28,High:27.34,Low:27.01,Close:27.08,Volume:47148300}, + {Date:1291982400000,Open:27.19,High:27.4,Low:27.11,Close:27.34,Volume:37625800}, + {Date:1292241600000,Open:27.27,High:27.45,Low:27.17,Close:27.25,Volume:47943900}, + {Date:1292328000000,Open:27.31,High:27.75,Low:27.26,Close:27.62,Volume:64070500}, + {Date:1292414400000,Open:27.53,High:27.99,Low:27.53,Close:27.85,Volume:69634200}, + {Date:1292500800000,Open:27.76,High:27.99,Low:27.66,Close:27.99,Volume:57680200}, + {Date:1292587200000,Open:27.92,High:28.09,Low:27.75,Close:27.9,Volume:87456500}, + {Date:1292846400000,Open:27.95,High:27.99,Low:27.68,Close:27.81,Volume:52811000}, + {Date:1292932800000,Open:27.85,High:28.14,Low:27.76,Close:28.07,Volume:38153000}, + {Date:1293019200000,Open:28.01,High:28.4,Low:27.98,Close:28.19,Volume:42252300}, + {Date:1293105600000,Open:27.97,High:28.32,Low:27.96,Close:28.3,Volume:24902500}, + {Date:1293451200000,Open:28.12,High:28.2,Low:27.88,Close:28.07,Volume:21652800}, + {Date:1293537600000,Open:27.97,High:28.17,Low:27.96,Close:28.01,Volume:23042200}, + {Date:1293624000000,Open:27.94,High:28.12,Low:27.88,Close:27.97,Volume:19502500}, + {Date:1293710400000,Open:27.92,High:28,Low:27.78,Close:27.85,Volume:20786100}, + {Date:1293796800000,Open:27.8,High:27.92,Low:27.63,Close:27.91,Volume:24752000}, + {Date:1294056000000,Open:28.05,High:28.18,Low:27.92,Close:27.98,Volume:53443800}, + {Date:1294142400000,Open:27.94,High:28.17,Low:27.85,Close:28.09,Volume:54405600}, + {Date:1294228800000,Open:27.9,High:28.01,Low:27.77,Close:28,Volume:58998700}, + {Date:1294315200000,Open:28.04,High:28.85,Low:27.86,Close:28.82,Volume:88026300}, + {Date:1294401600000,Open:28.64,High:28.74,Low:28.25,Close:28.6,Volume:73762000}, + {Date:1294660800000,Open:28.26,High:28.4,Low:28.04,Close:28.22,Volume:57573600}, + {Date:1294747200000,Open:28.2,High:28.25,Low:28.05,Close:28.11,Volume:50298900}, + {Date:1294833600000,Open:28.12,High:28.59,Low:28.07,Close:28.55,Volume:52631100}, + {Date:1294920000000,Open:28.33,High:28.39,Low:28.01,Close:28.19,Volume:67077600}, + {Date:1295006400000,Open:28.08,High:28.38,Low:27.91,Close:28.3,Volume:62688400}, + {Date:1295352000000,Open:28.16,High:28.74,Low:28.14,Close:28.66,Volume:53322700}, + {Date:1295438400000,Open:28.46,High:28.68,Low:28.27,Close:28.47,Volume:50005900}, + {Date:1295524800000,Open:28.5,High:28.55,Low:28.13,Close:28.35,Volume:58613600}, + {Date:1295611200000,Open:28.4,High:28.43,Low:28.02,Close:28.02,Volume:58080300}, + {Date:1295870400000,Open:28.02,High:28.56,Low:27.99,Close:28.38,Volume:52047800}, + {Date:1295956800000,Open:28.14,High:28.45,Low:28.12,Close:28.45,Volume:42436600}, + {Date:1296043200000,Open:28.51,High:28.99,Low:28.5,Close:28.78,Volume:74628800}, + {Date:1296129600000,Open:28.75,High:29.46,Low:28.49,Close:28.87,Volume:146938600}, + {Date:1296216000000,Open:28.9,High:28.93,Low:27.45,Close:27.75,Volume:141249400}, + {Date:1296475200000,Open:27.77,High:27.9,Low:27.42,Close:27.73,Volume:65029000}, + {Date:1296561600000,Open:27.8,High:28.06,Low:27.61,Close:27.99,Volume:62810700}, + {Date:1296648000000,Open:27.93,High:28.11,Low:27.88,Close:27.94,Volume:45824000}, + {Date:1296734400000,Open:27.97,High:27.97,Low:27.54,Close:27.65,Volume:60340100}, + {Date:1296820800000,Open:27.7,High:27.84,Low:27.51,Close:27.77,Volume:40412200}, + {Date:1297080000000,Open:27.8,High:28.34,Low:27.79,Close:28.2,Volume:68980900}, + {Date:1297166400000,Open:28.1,High:28.34,Low:28.05,Close:28.28,Volume:34904200}, + {Date:1297252800000,Open:28.19,High:28.26,Low:27.91,Close:27.97,Volume:52905100}, + {Date:1297339200000,Open:27.93,High:27.94,Low:27.29,Close:27.5,Volume:76672400}, + {Date:1297425600000,Open:27.76,High:27.81,Low:27.07,Close:27.25,Volume:83939700}, + {Date:1297684800000,Open:27.21,High:27.27,Low:26.95,Close:27.23,Volume:56766200}, + {Date:1297771200000,Open:27.04,High:27.33,Low:26.95,Close:26.96,Volume:44116500}, + {Date:1297857600000,Open:27.05,High:27.07,Low:26.6,Close:27.02,Volume:70817900}, + {Date:1297944000000,Open:26.97,High:27.37,Low:26.91,Close:27.21,Volume:57207300}, + {Date:1298030400000,Open:27.13,High:27.21,Low:26.99,Close:27.06,Volume:68667800}, + {Date:1298376000000,Open:26.78,High:27.1,Low:26.52,Close:26.59,Volume:60889000}, + {Date:1298462400000,Open:26.53,High:26.86,Low:26.43,Close:26.59,Volume:60234100}, + {Date:1298548800000,Open:26.64,High:27.06,Low:26.5,Close:26.77,Volume:64494200}, + {Date:1298635200000,Open:26.91,High:26.95,Low:26.5,Close:26.55,Volume:53006300}, + {Date:1298894400000,Open:26.69,High:26.86,Low:26.51,Close:26.58,Volume:51379900}, + {Date:1298980800000,Open:26.6,High:26.78,Low:26.15,Close:26.16,Volume:60055000}, + {Date:1299067200000,Open:26.11,High:26.37,Low:26.04,Close:26.08,Volume:48658200}, + {Date:1299153600000,Open:26.26,High:26.4,Low:26.18,Close:26.2,Volume:68271500}, + {Date:1299240000000,Open:26.22,High:26.24,Low:25.8,Close:25.95,Volume:70437200}, + {Date:1299499200000,Open:26.13,High:26.27,Low:25.55,Close:25.72,Volume:64980400}, + {Date:1299585600000,Open:25.77,High:26.02,Low:25.65,Close:25.91,Volume:50549800}, + {Date:1299672000000,Open:25.81,High:25.98,Low:25.66,Close:25.89,Volume:39789100}, + {Date:1299758400000,Open:25.62,High:25.71,Low:25.35,Close:25.41,Volume:66549500}, + {Date:1299844800000,Open:25.41,High:25.85,Low:25.36,Close:25.68,Volume:49905800}, + {Date:1300104000000,Open:25.49,High:25.76,Low:25.35,Close:25.69,Volume:54473400}, + {Date:1300190400000,Open:25.08,High:25.47,Low:25,Close:25.39,Volume:76067300}, + {Date:1300276800000,Open:25.22,High:25.28,Low:24.68,Close:24.79,Volume:100725400}, + {Date:1300363200000,Open:25.06,High:25.22,Low:24.75,Close:24.78,Volume:62497000}, + {Date:1300449600000,Open:25.06,High:25.18,Low:24.8,Close:24.8,Volume:85486700}, + {Date:1300708800000,Open:25.18,High:25.58,Low:25.15,Close:25.33,Volume:46878100}, + {Date:1300795200000,Open:25.3,High:25.46,Low:25.23,Close:25.3,Volume:30895600}, + {Date:1300881600000,Open:25.23,High:25.61,Low:25.18,Close:25.54,Volume:43969000}, + {Date:1300968000000,Open:25.6,High:25.87,Low:25.5,Close:25.81,Volume:38696700}, + {Date:1301054400000,Open:25.93,High:25.95,Low:25.59,Close:25.62,Volume:57029800}, + {Date:1301313600000,Open:25.66,High:25.72,Low:25.38,Close:25.41,Volume:48973200}, + {Date:1301400000000,Open:25.34,High:25.52,Low:25.3,Close:25.49,Volume:40763500}, + {Date:1301486400000,Open:25.6,High:25.72,Low:25.5,Close:25.61,Volume:41999300}, + {Date:1301572800000,Open:25.6,High:25.68,Low:25.34,Close:25.39,Volume:63233700}, + {Date:1301659200000,Open:25.53,High:25.53,Low:25.31,Close:25.48,Volume:63114200}, + {Date:1301918400000,Open:25.45,High:25.66,Low:25.41,Close:25.55,Volume:35433700}, + {Date:1302004800000,Open:25.82,High:26.18,Low:25.74,Close:25.78,Volume:73651100}, + {Date:1302091200000,Open:25.98,High:26.31,Low:25.86,Close:26.15,Volume:65581400}, + {Date:1302177600000,Open:26.19,High:26.26,Low:25.97,Close:26.2,Volume:46134700}, + {Date:1302264000000,Open:26.17,High:26.28,Low:25.96,Close:26.07,Volume:39887600}, + {Date:1302523200000,Open:26.19,High:26.25,Low:25.8,Close:25.98,Volume:34286300}, + {Date:1302609600000,Open:25.83,High:25.85,Low:25.55,Close:25.64,Volume:36920400}, + {Date:1302696000000,Open:25.65,High:25.87,Low:25.56,Close:25.63,Volume:38144700}, + {Date:1302782400000,Open:25.42,High:25.44,Low:25.09,Close:25.42,Volume:55239900}, + {Date:1302868800000,Open:25.46,High:25.56,Low:25.18,Close:25.37,Volume:65080400}, + {Date:1303128000000,Open:25.1,High:25.28,Low:24.72,Close:25.08,Volume:58045100}, + {Date:1303214400000,Open:25,High:25.17,Low:24.87,Close:25.15,Volume:38892400}, + {Date:1303300800000,Open:25.54,High:26,Low:25.51,Close:25.76,Volume:61608600}, + {Date:1303387200000,Open:25.79,High:25.89,Low:25.36,Close:25.52,Volume:46892300}, + {Date:1303732800000,Open:25.56,High:25.62,Low:25.34,Close:25.61,Volume:33525100}, + {Date:1303819200000,Open:25.74,High:26.44,Low:25.67,Close:26.19,Volume:69200000}, + {Date:1303905600000,Open:26.3,High:26.39,Low:26.13,Close:26.38,Volume:52689000}, + {Date:1303992000000,Open:26.46,High:26.87,Low:26.4,Close:26.71,Volume:80200000}, + {Date:1304078400000,Open:26.55,High:26.64,Low:25.36,Close:25.92,Volume:319317900}, + {Date:1304337600000,Open:25.94,High:26,Low:25.48,Close:25.66,Volume:89825600}, + {Date:1304424000000,Open:25.6,High:25.85,Low:25.49,Close:25.81,Volume:71892900}, + {Date:1304510400000,Open:25.85,High:26.25,Low:25.79,Close:26.06,Volume:73292300}, + {Date:1304596800000,Open:26.05,High:26.08,Low:25.68,Close:25.79,Volume:55600000}, + {Date:1304683200000,Open:26.07,High:26.22,Low:25.75,Close:25.87,Volume:55993000}, + {Date:1304942400000,Open:25.8,High:25.96,Low:25.67,Close:25.83,Volume:38696400}, + {Date:1305028800000,Open:25.38,High:25.85,Low:25.25,Close:25.67,Volume:120798700}, + {Date:1305115200000,Open:25.65,High:25.66,Low:25.21,Close:25.36,Volume:78600000}, + {Date:1305201600000,Open:25.35,High:25.39,Low:25.1,Close:25.32,Volume:77400000}, + {Date:1305288000000,Open:25.28,High:25.32,Low:24.95,Close:25.03,Volume:66812300}, + {Date:1305547200000,Open:24.96,High:25.07,Low:24.5,Close:24.57,Volume:91350900}, + {Date:1305633600000,Open:24.4,High:24.7,Low:24.27,Close:24.52,Volume:82882100}, + {Date:1305720000000,Open:24.53,High:24.74,Low:24.25,Close:24.69,Volume:53931100}, + {Date:1305806400000,Open:24.85,High:24.88,Low:24.5,Close:24.72,Volume:37783600}, + {Date:1305892800000,Open:24.72,High:24.87,Low:24.44,Close:24.49,Volume:45451500}, + {Date:1306152000000,Open:24.21,High:24.25,Low:24.03,Close:24.17,Volume:52692500}, + {Date:1306238400000,Open:24.2,High:24.29,Low:24.04,Close:24.15,Volume:47691800}, + {Date:1306324800000,Open:24.17,High:24.31,Low:24.16,Close:24.19,Volume:34904200}, + {Date:1306411200000,Open:24.35,High:25.03,Low:24.32,Close:24.67,Volume:78016600}, + {Date:1306497600000,Open:24.68,High:24.9,Low:24.65,Close:24.76,Volume:50251000}, + {Date:1306843200000,Open:24.96,High:25.06,Low:24.7,Close:25.01,Volume:60196300}, + {Date:1306929600000,Open:24.99,High:25.1,Low:24.37,Close:24.43,Volume:74033500}, + {Date:1307016000000,Open:24.49,High:24.65,Low:24.18,Close:24.22,Volume:51487800}, + {Date:1307102400000,Open:24.05,High:24.14,Low:23.84,Close:23.91,Volume:60697700}, + {Date:1307361600000,Open:23.89,High:24.25,Low:23.77,Close:24.01,Volume:54778700}, + {Date:1307448000000,Open:24.09,High:24.17,Low:23.9,Close:24.06,Volume:41112600}, + {Date:1307534400000,Open:23.9,High:24.02,Low:23.86,Close:23.94,Volume:42205000}, + {Date:1307620800000,Open:24.01,High:24.04,Low:23.82,Close:23.96,Volume:42878700}, + {Date:1307707200000,Open:24.02,High:24.02,Low:23.69,Close:23.71,Volume:49327200}, + {Date:1307966400000,Open:23.79,High:24.19,Low:23.7,Close:24.04,Volume:47572500}, + {Date:1308052800000,Open:24.3,High:24.45,Low:24.19,Close:24.22,Volume:42894500}, + {Date:1308139200000,Open:24,High:24.01,Low:23.67,Close:23.74,Volume:49410200}, + {Date:1308225600000,Open:23.75,High:24.1,Low:23.65,Close:24,Volume:57184100}, + {Date:1308312000000,Open:24.22,High:24.3,Low:23.98,Close:24.26,Volume:83320400}, + {Date:1308571200000,Open:24.17,High:24.66,Low:24.16,Close:24.47,Volume:54338400}, + {Date:1308657600000,Open:24.52,High:24.86,Low:24.4,Close:24.76,Volume:49708700}, + {Date:1308744000000,Open:24.6,High:24.81,Low:24.59,Close:24.65,Volume:44287300}, + {Date:1308830400000,Open:24.44,High:24.65,Low:24.2,Close:24.63,Volume:59470400}, + {Date:1308916800000,Open:24.51,High:24.54,Low:24.19,Close:24.3,Volume:101387200}, + {Date:1309176000000,Open:24.23,High:25.46,Low:24.23,Close:25.2,Volume:92044200}, + {Date:1309262400000,Open:25.3,High:25.92,Low:25.16,Close:25.8,Volume:81032100}, + {Date:1309348800000,Open:25.71,High:25.71,Low:25.36,Close:25.62,Volume:66051000}, + {Date:1309435200000,Open:25.74,High:26,Low:25.66,Close:26,Volume:52535400}, + {Date:1309521600000,Open:25.93,High:26.17,Low:25.84,Close:26.02,Volume:52906200}, + {Date:1309867200000,Open:26.1,High:26.15,Low:25.9,Close:26.03,Volume:37805300}, + {Date:1309953600000,Open:25.97,High:26.37,Low:25.96,Close:26.33,Volume:48744200}, + {Date:1310040000000,Open:26.49,High:26.88,Low:26.36,Close:26.77,Volume:51946500}, + {Date:1310126400000,Open:26.54,High:26.98,Low:26.51,Close:26.92,Volume:58320700}, + {Date:1310385600000,Open:26.62,High:26.8,Low:26.49,Close:26.63,Volume:43999800}, + {Date:1310472000000,Open:26.55,High:26.79,Low:26.34,Close:26.54,Volume:47319300}, + {Date:1310558400000,Open:26.6,High:26.96,Low:26.51,Close:26.63,Volume:40861800}, + {Date:1310644800000,Open:26.62,High:27.01,Low:26.36,Close:26.47,Volume:46382300}, + {Date:1310731200000,Open:26.47,High:26.93,Low:26.47,Close:26.78,Volume:49132400}, + {Date:1310990400000,Open:26.63,High:26.9,Low:26.26,Close:26.59,Volume:44501900}, + {Date:1311076800000,Open:26.81,High:27.64,Low:26.78,Close:27.54,Volume:86730600}, + {Date:1311163200000,Open:27.28,High:27.35,Low:26.98,Close:27.06,Volume:49795400}, + {Date:1311249600000,Open:27.04,High:27.31,Low:26.65,Close:27.1,Volume:81737400}, + {Date:1311336000000,Open:26.86,High:27.55,Low:26.68,Close:27.53,Volume:76380600}, + {Date:1311595200000,Open:27.26,High:28.09,Low:27.19,Close:27.91,Volume:108482400}, + {Date:1311681600000,Open:27.82,High:28.15,Low:27.78,Close:28.08,Volume:74636500}, + {Date:1311768000000,Open:27.88,High:27.99,Low:27.2,Close:27.33,Volume:71488700}, + {Date:1311854400000,Open:27.29,High:28.07,Low:27.21,Close:27.72,Volume:83761400}, + {Date:1311940800000,Open:27.52,High:27.71,Low:27.26,Close:27.4,Volume:104394800}, + {Date:1312200000000,Open:27.51,High:27.69,Low:26.75,Close:27.27,Volume:61838400}, + {Date:1312286400000,Open:26.98,High:27.45,Low:26.76,Close:26.8,Volume:63883100}, + {Date:1312372800000,Open:26.83,High:27,Low:26.48,Close:26.92,Volume:64581200}, + {Date:1312459200000,Open:26.53,High:26.87,Low:25.93,Close:25.94,Volume:92949500}, + {Date:1312545600000,Open:25.97,High:26.1,Low:25.23,Close:25.68,Volume:112071700}, + {Date:1312804800000,Open:25.02,High:25.6,Low:24.39,Close:24.48,Volume:134257200}, + {Date:1312891200000,Open:24.71,High:25.62,Low:24.03,Close:25.58,Volume:126268900}, + {Date:1312977600000,Open:24.95,High:25.09,Low:24.1,Close:24.2,Volume:127819900}, + {Date:1313064000000,Open:24.5,High:25.38,Low:24.4,Close:25.19,Volume:90690100}, + {Date:1313150400000,Open:25.13,High:25.34,Low:24.65,Close:25.1,Volume:64787100}, + {Date:1313409600000,Open:25.24,High:25.58,Low:25.15,Close:25.51,Volume:56529400}, + {Date:1313496000000,Open:25.22,High:25.59,Low:25.05,Close:25.35,Volume:54251500}, + {Date:1313582400000,Open:25.25,High:25.7,Low:24.93,Close:25.25,Volume:50923700}, + {Date:1313668800000,Open:24.57,High:25.09,Low:24.03,Close:24.67,Volume:105714200}, + {Date:1313755200000,Open:24.41,High:24.62,Low:23.91,Close:24.05,Volume:77397900}, + {Date:1314014400000,Open:24.42,High:24.49,Low:23.79,Close:23.98,Volume:54721000}, + {Date:1314100800000,Open:24.03,High:24.75,Low:24.03,Close:24.72,Volume:59670600}, + {Date:1314187200000,Open:24.65,High:24.93,Low:24.42,Close:24.9,Volume:45329700}, + {Date:1314273600000,Open:25.08,High:25.16,Low:24.5,Close:24.57,Volume:48192000}, + {Date:1314360000000,Open:24.51,High:25.34,Low:24.42,Close:25.25,Volume:71957000}, + {Date:1314619200000,Open:25.53,High:25.86,Low:25.37,Close:25.84,Volume:38863200}, + {Date:1314705600000,Open:25.73,High:26.43,Low:25.7,Close:26.23,Volume:57341400}, + {Date:1314792000000,Open:26.29,High:26.71,Low:26.26,Close:26.6,Volume:59300800}, + {Date:1314878400000,Open:26.46,High:26.86,Low:26.21,Close:26.21,Volume:60510800}, + {Date:1314964800000,Open:25.78,High:26,Low:25.66,Close:25.8,Volume:43894400}, + {Date:1315310400000,Open:25.2,High:25.59,Low:25.11,Close:25.51,Volume:54929300}, + {Date:1315396800000,Open:25.69,High:26,Low:25.57,Close:26,Volume:41961000}, + {Date:1315483200000,Open:26,High:26.66,Low:25.95,Close:26.22,Volume:65811900}, + {Date:1315569600000,Open:26,High:26.18,Low:25.5,Close:25.74,Volume:64529200}, + {Date:1315828800000,Open:25.44,High:25.93,Low:25.27,Close:25.89,Volume:55046100}, + {Date:1315915200000,Open:25.92,High:26.19,Low:25.81,Close:26.04,Volume:48792300}, + {Date:1316001600000,Open:26.17,High:26.8,Low:25.89,Close:26.5,Volume:66739200}, + {Date:1316088000000,Open:26.73,High:27.03,Low:26.31,Close:26.99,Volume:67808300}, + {Date:1316174400000,Open:27.05,High:27.27,Low:26.83,Close:27.12,Volume:89681500}, + {Date:1316433600000,Open:26.8,High:27.31,Low:26.6,Close:27.21,Volume:52324900}, + {Date:1316520000000,Open:27.31,High:27.5,Low:26.93,Close:26.98,Volume:49211900}, + {Date:1316606400000,Open:27.05,High:27.06,Low:25.97,Close:25.99,Volume:72750700}, + {Date:1316692800000,Open:25.3,High:25.65,Low:24.6,Close:25.06,Volume:96278300}, + {Date:1316779200000,Open:24.9,High:25.15,Low:24.69,Close:25.06,Volume:64768100}, + {Date:1317038400000,Open:25.19,High:25.52,Low:24.73,Close:25.44,Volume:51057600}, + {Date:1317124800000,Open:25.66,High:25.92,Low:25.45,Close:25.67,Volume:55620700}, + {Date:1317211200000,Open:25.93,High:26.37,Low:25.51,Close:25.58,Volume:60736200}, + {Date:1317297600000,Open:25.98,High:26.17,Low:25.09,Close:25.45,Volume:63407300}, + {Date:1317384000000,Open:25.2,High:25.5,Low:24.88,Close:24.89,Volume:54060500}, + {Date:1317643200000,Open:24.72,High:25.34,Low:24.52,Close:24.53,Volume:64592500}, + {Date:1317729600000,Open:24.3,High:25.39,Low:24.26,Close:25.34,Volume:83485400}, + {Date:1317816000000,Open:25.42,High:26.16,Low:25.16,Close:25.89,Volume:94061300}, + {Date:1317902400000,Open:25.9,High:26.4,Low:25.7,Close:26.34,Volume:55111400}, + {Date:1317988800000,Open:26.34,High:26.51,Low:26.2,Close:26.25,Volume:52741600}, + {Date:1318248000000,Open:26.58,High:26.97,Low:26.47,Close:26.94,Volume:41815300}, + {Date:1318334400000,Open:26.86,High:27.07,Low:26.72,Close:27,Volume:38826200}, + {Date:1318420800000,Open:27.18,High:27.31,Low:26.9,Close:26.96,Volume:52489800}, + {Date:1318507200000,Open:26.76,High:27.2,Low:26.62,Close:27.18,Volume:43823500}, + {Date:1318593600000,Open:27.31,High:27.5,Low:27.02,Close:27.27,Volume:50947700}, + {Date:1318852800000,Open:27.11,High:27.42,Low:26.85,Close:26.98,Volume:39453300}, + {Date:1318939200000,Open:26.94,High:27.4,Low:26.8,Close:27.31,Volume:52487900}, + {Date:1319025600000,Open:27.37,High:27.47,Low:27.01,Close:27.13,Volume:42880000}, + {Date:1319112000000,Open:27.26,High:27.34,Low:26.4,Close:27.04,Volume:76300200}, + {Date:1319198400000,Open:27.15,High:27.19,Low:26.8,Close:27.16,Volume:76620600}, + {Date:1319457600000,Open:27.06,High:27.4,Low:27.04,Close:27.19,Volume:56897800}, + {Date:1319544000000,Open:27.08,High:27.23,Low:26.72,Close:26.81,Volume:53554600}, + {Date:1319630400000,Open:27.03,High:27.06,Low:26.1,Close:26.59,Volume:63029900}, + {Date:1319716800000,Open:27.13,High:27.4,Low:26.65,Close:27.25,Volume:74512400}, + {Date:1319803200000,Open:27.14,High:27.19,Low:26.79,Close:26.98,Volume:57712100}, + {Date:1320062400000,Open:26.76,High:27,Low:26.62,Close:26.63,Volume:46799000}, + {Date:1320148800000,Open:26.19,High:26.32,Low:25.86,Close:25.99,Volume:61182600}, + {Date:1320235200000,Open:26.1,High:26.2,Low:25.7,Close:26.01,Volume:53533100}, + {Date:1320321600000,Open:26.24,High:26.59,Low:25.98,Close:26.53,Volume:65836100}, + {Date:1320408000000,Open:26.38,High:26.4,Low:26,Close:26.25,Volume:36549200}, + {Date:1320667200000,Open:26.21,High:26.82,Low:26.13,Close:26.8,Volume:42589700}, + {Date:1320753600000,Open:27.01,High:27.2,Low:26.69,Close:27.16,Volume:47822500}, + {Date:1320840000000,Open:26.59,High:26.75,Low:26.06,Close:26.2,Volume:62950900}, + {Date:1320926400000,Open:26.47,High:26.5,Low:26.12,Close:26.28,Volume:32514400}, + {Date:1321012800000,Open:26.58,High:27.08,Low:26.57,Close:26.91,Volume:37903000}, + {Date:1321272000000,Open:26.88,High:27,Low:26.65,Close:26.76,Volume:34199200}, + {Date:1321358400000,Open:26.56,High:26.94,Low:26.4,Close:26.74,Volume:43874200}, + {Date:1321444800000,Open:26.47,High:26.51,Low:26.04,Close:26.07,Volume:53262800}, + {Date:1321531200000,Open:26.01,High:26.04,Low:25.44,Close:25.54,Volume:70977500}, + {Date:1321617600000,Open:25.48,High:25.5,Low:25.15,Close:25.3,Volume:47626200}, + {Date:1321876800000,Open:25.24,High:25.25,Low:24.9,Close:25,Volume:61882500}, + {Date:1321963200000,Open:24.89,High:24.96,Low:24.65,Close:24.79,Volume:49204500}, + {Date:1322049600000,Open:24.61,High:24.79,Low:24.47,Close:24.47,Volume:49099700}, + {Date:1322222400000,Open:24.38,High:24.67,Low:24.3,Close:24.3,Volume:26164600}, + {Date:1322481600000,Open:24.94,High:24.97,Low:24.69,Close:24.87,Volume:46766700}, + {Date:1322568000000,Open:24.82,High:25.04,Low:24.75,Close:24.84,Volume:40917100}, + {Date:1322654400000,Open:25.37,High:25.59,Low:25.14,Close:25.58,Volume:81350900}, + {Date:1322740800000,Open:25.56,High:25.63,Low:25.2,Close:25.28,Volume:48545400}, + {Date:1322827200000,Open:25.59,High:25.62,Low:25.16,Close:25.22,Volume:52293800}, + {Date:1323086400000,Open:25.78,High:25.8,Low:25.5,Close:25.7,Volume:56818400}, + {Date:1323172800000,Open:25.81,High:25.87,Low:25.61,Close:25.66,Volume:46175300}, + {Date:1323259200000,Open:25.67,High:25.76,Low:25.34,Close:25.6,Volume:62667000}, + {Date:1323345600000,Open:25.48,High:25.72,Low:25.37,Close:25.4,Volume:60522200}, + {Date:1323432000000,Open:25.52,High:25.87,Low:25.5,Close:25.7,Volume:53788500}, + {Date:1323691200000,Open:25.41,High:25.57,Low:25.29,Close:25.51,Volume:38945900}, + {Date:1323777600000,Open:25.75,High:26.1,Low:25.65,Close:25.76,Volume:54581100}, + {Date:1323864000000,Open:25.72,High:25.86,Low:25.57,Close:25.59,Volume:47926400}, + {Date:1323950400000,Open:25.72,High:25.88,Low:25.54,Close:25.56,Volume:46213900}, + {Date:1324036800000,Open:25.67,High:26.17,Low:25.63,Close:26,Volume:101408100}, + {Date:1324296000000,Open:26.02,High:26.12,Low:25.46,Close:25.53,Volume:52258300}, + {Date:1324382400000,Open:25.86,High:26.1,Low:25.81,Close:26.03,Volume:60767600}, + {Date:1324468800000,Open:26.01,High:26.19,Low:25.44,Close:25.76,Volume:64132500}, + {Date:1324555200000,Open:25.82,High:25.86,Low:25.48,Close:25.81,Volume:35794100}, + {Date:1324641600000,Open:25.91,High:26.04,Low:25.73,Close:26.03,Volume:23205800}, + {Date:1324987200000,Open:25.96,High:26.14,Low:25.93,Close:26.04,Volume:21287200}, + {Date:1325073600000,Open:26.11,High:26.15,Low:25.76,Close:25.82,Volume:29822500}, + {Date:1325160000000,Open:25.95,High:26.05,Low:25.86,Close:26.02,Volume:22616900}, + {Date:1325246400000,Open:26,High:26.12,Low:25.91,Close:25.96,Volume:27395700}, + {Date:1325592000000,Open:26.55,High:26.96,Low:26.39,Close:26.77,Volume:64731500}, + {Date:1325678400000,Open:26.82,High:27.47,Low:26.78,Close:27.4,Volume:80516100}, + {Date:1325764800000,Open:27.38,High:27.73,Low:27.29,Close:27.68,Volume:56081400}, + {Date:1325851200000,Open:27.53,High:28.19,Low:27.53,Close:28.11,Volume:99455500}, + {Date:1326110400000,Open:28.05,High:28.1,Low:27.72,Close:27.74,Volume:59706800}, + {Date:1326196800000,Open:27.93,High:28.15,Low:27.75,Close:27.84,Volume:60014400}, + {Date:1326283200000,Open:27.43,High:27.98,Low:27.37,Close:27.72,Volume:65582400}, + {Date:1326369600000,Open:27.87,High:28.02,Low:27.65,Close:28,Volume:49370800}, + {Date:1326456000000,Open:27.93,High:28.25,Low:27.79,Close:28.25,Volume:60196100}, + {Date:1326801600000,Open:28.4,High:28.65,Low:28.17,Close:28.26,Volume:72395300}, + {Date:1326888000000,Open:28.31,High:28.4,Low:27.97,Close:28.23,Volume:64860600}, + {Date:1326974400000,Open:28.16,High:28.44,Low:28.03,Close:28.12,Volume:74053500}, + {Date:1327060800000,Open:28.82,High:29.74,Low:28.75,Close:29.71,Volume:165902900}, + {Date:1327320000000,Open:29.55,High:29.95,Low:29.35,Close:29.73,Volume:76078100}, + {Date:1327406400000,Open:29.47,High:29.57,Low:29.18,Close:29.34,Volume:51703300}, + {Date:1327492800000,Open:29.07,High:29.65,Low:29.07,Close:29.56,Volume:59231700}, + {Date:1327579200000,Open:29.61,High:29.7,Low:29.4,Close:29.5,Volume:49102800}, + {Date:1327665600000,Open:29.45,High:29.53,Low:29.17,Close:29.23,Volume:44187700}, + {Date:1327924800000,Open:28.97,High:29.62,Low:28.83,Close:29.61,Volume:51114800}, + {Date:1328011200000,Open:29.66,High:29.7,Low:29.23,Close:29.53,Volume:50572400}, + {Date:1328097600000,Open:29.79,High:30.05,Low:29.76,Close:29.89,Volume:67409900}, + {Date:1328184000000,Open:29.9,High:30.17,Low:29.71,Close:29.95,Volume:52223300}, + {Date:1328270400000,Open:30.14,High:30.4,Low:30.09,Close:30.24,Volume:41838500}, + {Date:1328529600000,Open:30.04,High:30.22,Low:29.97,Close:30.2,Volume:28039700}, + {Date:1328616000000,Open:30.15,High:30.49,Low:30.05,Close:30.35,Volume:39242400}, + {Date:1328702400000,Open:30.26,High:30.67,Low:30.22,Close:30.66,Volume:49659100}, + {Date:1328788800000,Open:30.68,High:30.8,Low:30.48,Close:30.77,Volume:50481600}, + {Date:1328875200000,Open:30.64,High:30.8,Low:30.36,Close:30.5,Volume:44605300}, + {Date:1329134400000,Open:30.63,High:30.77,Low:30.43,Close:30.58,Volume:33319800}, + {Date:1329220800000,Open:30.33,High:30.46,Low:29.85,Close:30.25,Volume:59644000}, + {Date:1329307200000,Open:30.33,High:30.39,Low:30.03,Close:30.05,Volume:43311300}, + {Date:1329393600000,Open:30.31,High:31.55,Low:30.3,Close:31.29,Volume:94705100}, + {Date:1329480000000,Open:31.2,High:31.32,Low:30.95,Close:31.25,Volume:70036500}, + {Date:1329825600000,Open:31.18,High:31.61,Low:31.15,Close:31.44,Volume:50829900}, + {Date:1329912000000,Open:31.45,High:31.68,Low:31.18,Close:31.27,Volume:49253200}, + {Date:1329998400000,Open:31.2,High:31.59,Low:31,Close:31.37,Volume:35034700}, + {Date:1330084800000,Open:31.48,High:31.5,Low:31.24,Close:31.48,Volume:35575400}, + {Date:1330344000000,Open:31.24,High:31.5,Low:31.1,Close:31.35,Volume:34568400}, + {Date:1330430400000,Open:31.41,High:31.93,Low:31.38,Close:31.87,Volume:45230600}, + {Date:1330516800000,Open:31.89,High:32,Low:31.61,Close:31.74,Volume:59323600}, + {Date:1330603200000,Open:31.93,High:32.39,Low:31.85,Close:32.29,Volume:77344100}, + {Date:1330689600000,Open:32.31,High:32.44,Low:32,Close:32.08,Volume:47314200}, + {Date:1330948800000,Open:32.01,High:32.05,Low:31.62,Close:31.8,Volume:45240000}, + {Date:1331035200000,Open:31.54,High:31.98,Low:31.49,Close:31.56,Volume:51932900}, + {Date:1331121600000,Open:31.67,High:31.92,Low:31.53,Close:31.84,Volume:34340400}, + {Date:1331208000000,Open:32.04,High:32.21,Low:31.9,Close:32.01,Volume:36747400}, + {Date:1331294400000,Open:32.1,High:32.16,Low:31.92,Close:31.99,Volume:34628400}, + {Date:1331553600000,Open:31.97,High:32.2,Low:31.82,Close:32.04,Volume:34073600}, + {Date:1331640000000,Open:32.24,High:32.69,Low:32.15,Close:32.67,Volume:48951700}, + {Date:1331726400000,Open:32.53,High:32.88,Low:32.49,Close:32.77,Volume:41986900}, + {Date:1331812800000,Open:32.79,High:32.94,Low:32.58,Close:32.85,Volume:49068300}, + {Date:1331899200000,Open:32.91,High:32.95,Low:32.5,Close:32.6,Volume:65626400}, + {Date:1332158400000,Open:32.54,High:32.61,Low:32.15,Close:32.2,Volume:44789200}, + {Date:1332244800000,Open:32.1,High:32.15,Low:31.74,Close:31.99,Volume:41566800}, + {Date:1332331200000,Open:31.96,High:32.15,Low:31.82,Close:31.91,Volume:37928600}, + {Date:1332417600000,Open:31.81,High:32.09,Low:31.79,Close:32,Volume:31749500}, + {Date:1332504000000,Open:32.1,High:32.11,Low:31.72,Close:32.01,Volume:35912200}, + {Date:1332763200000,Open:32.19,High:32.61,Low:32.15,Close:32.59,Volume:36758300}, + {Date:1332849600000,Open:32.65,High:32.7,Low:32.4,Close:32.52,Volume:36274900}, + {Date:1332936000000,Open:32.52,High:32.7,Low:32.04,Close:32.19,Volume:41344800}, + {Date:1333022400000,Open:32.06,High:32.19,Low:31.81,Close:32.12,Volume:37038500}, + {Date:1333108800000,Open:32.4,High:32.41,Low:32.04,Close:32.26,Volume:31749400}, + {Date:1333368000000,Open:32.22,High:32.46,Low:31.95,Close:32.29,Volume:35853600}, + {Date:1333454400000,Open:32.16,High:32.19,Low:31.66,Close:31.94,Volume:42752100}, + {Date:1333540800000,Open:31.66,High:31.69,Low:31.05,Close:31.21,Volume:49455900}, + {Date:1333627200000,Open:31.15,High:31.63,Low:31.05,Close:31.52,Volume:50368600}, + {Date:1333972800000,Open:31.22,High:31.4,Low:30.97,Close:31.1,Volume:31056400}, + {Date:1334059200000,Open:31.06,High:31.19,Low:30.3,Close:30.47,Volume:54131300}, + {Date:1334145600000,Open:30.43,High:30.53,Low:30.23,Close:30.35,Volume:43014000}, + {Date:1334232000000,Open:30.48,High:31.04,Low:30.42,Close:30.98,Volume:38304000}, + {Date:1334318400000,Open:30.89,High:31.16,Low:30.72,Close:30.81,Volume:39749200}, + {Date:1334577600000,Open:30.99,High:31.19,Low:30.77,Close:31.08,Volume:38124800}, + {Date:1334664000000,Open:31.27,High:31.61,Low:31.2,Close:31.44,Volume:34361500}, + {Date:1334750400000,Open:31.28,High:31.31,Low:31.04,Close:31.14,Volume:40552900}, + {Date:1334836800000,Open:31.13,High:31.68,Low:30.94,Close:31.01,Volume:54781200}, + {Date:1334923200000,Open:32.15,High:32.89,Low:32.05,Close:32.42,Volume:106045000}, + {Date:1335182400000,Open:32.31,High:32.5,Low:32.03,Close:32.12,Volume:61398200}, + {Date:1335268800000,Open:32.21,High:32.52,Low:31.83,Close:31.92,Volume:40871100}, + {Date:1335355200000,Open:31.92,High:32.32,Low:31.87,Close:32.2,Volume:62495500}, + {Date:1335441600000,Open:32.12,High:32.23,Low:31.92,Close:32.11,Volume:40308100}, + {Date:1335528000000,Open:32.12,High:32.22,Low:31.88,Close:31.98,Volume:41419100}, + {Date:1335787200000,Open:31.98,High:32.11,Low:31.92,Close:32.02,Volume:35697200}, + {Date:1335873600000,Open:32.05,High:32.34,Low:31.95,Close:32.01,Volume:43832300}, + {Date:1335960000000,Open:31.85,High:31.93,Low:31.64,Close:31.8,Volume:37385300}, + {Date:1336046400000,Open:31.88,High:31.9,Low:31.61,Close:31.76,Volume:31501300}, + {Date:1336132800000,Open:31.45,High:31.57,Low:30.92,Close:30.98,Volume:57927200}, + {Date:1336392000000,Open:30.7,High:30.86,Low:30.57,Close:30.65,Volume:48641400}, + {Date:1336478400000,Open:30.48,High:30.78,Low:30.17,Close:30.5,Volume:46328300}, + {Date:1336564800000,Open:30.19,High:30.83,Low:30.1,Close:30.76,Volume:50309300}, + {Date:1336651200000,Open:30.86,High:31.02,Low:30.45,Close:30.74,Volume:43839200}, + {Date:1336737600000,Open:30.69,High:31.54,Low:30.69,Close:31.16,Volume:43459300}, + {Date:1336996800000,Open:30.82,High:31.04,Low:30.64,Close:30.68,Volume:40528900}, + {Date:1337083200000,Open:30.64,High:30.8,Low:30.15,Close:30.21,Volume:61822800}, + {Date:1337169600000,Open:30.31,High:30.32,Low:29.74,Close:29.9,Volume:60083700}, + {Date:1337256000000,Open:29.99,High:30.21,Low:29.71,Close:29.72,Volume:48484000}, + {Date:1337342400000,Open:29.79,High:29.81,Low:29.17,Close:29.27,Volume:56205300}, + {Date:1337601600000,Open:29.1,High:29.79,Low:29.06,Close:29.75,Volume:38787900}, + {Date:1337688000000,Open:29.69,High:29.88,Low:29.5,Close:29.76,Volume:39504900}, + {Date:1337774400000,Open:29.35,High:29.4,Low:28.64,Close:29.11,Volume:65171000}, + {Date:1337860800000,Open:29.16,High:29.3,Low:28.76,Close:29.07,Volume:52575000}, + {Date:1337947200000,Open:29.2,High:29.36,Low:29.01,Close:29.06,Volume:29507200}, + {Date:1338292800000,Open:29.38,High:29.72,Low:29.22,Close:29.56,Volume:37758800}, + {Date:1338379200000,Open:29.35,High:29.48,Low:29.12,Close:29.34,Volume:41585500}, + {Date:1338465600000,Open:29.3,High:29.42,Low:28.94,Close:29.19,Volume:39134000}, + {Date:1338552000000,Open:28.76,High:28.96,Low:28.44,Close:28.45,Volume:56634300}, + {Date:1338811200000,Open:28.62,High:28.78,Low:28.32,Close:28.55,Volume:47926300}, + {Date:1338897600000,Open:28.51,High:28.75,Low:28.39,Close:28.51,Volume:45715400}, + {Date:1338984000000,Open:28.88,High:29.37,Low:28.81,Close:29.35,Volume:46860500}, + {Date:1339070400000,Open:29.64,High:29.7,Low:29.17,Close:29.23,Volume:37792800}, + {Date:1339156800000,Open:29.21,High:29.68,Low:29.05,Close:29.65,Volume:42551100}, + {Date:1339416000000,Open:29.73,High:29.81,Low:28.82,Close:28.9,Volume:46361900}, + {Date:1339502400000,Open:29.1,High:29.3,Low:28.84,Close:29.29,Volume:35337900}, + {Date:1339588800000,Open:29.22,High:29.44,Low:29.05,Close:29.13,Volume:32984600}, + {Date:1339675200000,Open:29.33,High:29.46,Low:28.88,Close:29.34,Volume:39458900}, + {Date:1339761600000,Open:29.59,High:30.08,Low:29.49,Close:30.02,Volume:62314400}, + {Date:1340020800000,Open:29.99,High:30.03,Low:29.71,Close:29.84,Volume:58679900}, + {Date:1340107200000,Open:30.19,High:31.11,Low:30.05,Close:30.7,Volume:75725800}, + {Date:1340193600000,Open:30.93,High:31.05,Low:30.64,Close:30.93,Volume:36257100}, + {Date:1340280000000,Open:30.96,High:31.14,Low:30.06,Close:30.14,Volume:48456600}, + {Date:1340366400000,Open:30.3,High:30.73,Low:30.03,Close:30.7,Volume:45098100}, + {Date:1340625600000,Open:30.3,High:30.32,Low:29.62,Close:29.87,Volume:42217200}, + {Date:1340712000000,Open:30,High:30.27,Low:29.94,Close:30.02,Volume:38421300}, + {Date:1340798400000,Open:30.19,High:30.5,Low:30.03,Close:30.17,Volume:33781700}, + {Date:1340884800000,Open:29.98,High:30.05,Low:29.42,Close:29.91,Volume:45328400}, + {Date:1340971200000,Open:30.45,High:30.69,Low:30.14,Close:30.59,Volume:55227200}, + {Date:1341230400000,Open:30.62,High:30.62,Low:30.21,Close:30.56,Volume:30589100}, + {Date:1341316800000,Open:30.23,High:30.76,Low:30.17,Close:30.76,Volume:20938100}, + {Date:1341489600000,Open:30.59,High:30.78,Low:30.38,Close:30.7,Volume:28801900}, + {Date:1341576000000,Open:30.61,High:30.7,Low:29.95,Close:30.19,Volume:38294800}, + {Date:1341835200000,Open:30.12,High:30.23,Low:29.78,Close:30,Volume:30680800}, + {Date:1341921600000,Open:30.08,High:30.22,Low:29.51,Close:29.74,Volume:37534100}, + {Date:1342008000000,Open:29.71,High:29.74,Low:29.11,Close:29.3,Volume:39184900}, + {Date:1342094400000,Open:29.15,High:29.18,Low:28.54,Close:28.63,Volume:63523600}, + {Date:1342180800000,Open:28.76,High:29.48,Low:28.72,Close:29.39,Volume:39085000}, + {Date:1342440000000,Open:29.48,High:29.53,Low:29.04,Close:29.44,Volume:27900600}, + {Date:1342526400000,Open:29.64,High:29.86,Low:29.2,Close:29.66,Volume:33771300}, + {Date:1342612800000,Open:29.6,High:30.45,Low:29.46,Close:30.45,Volume:41090400}, + {Date:1342699200000,Open:30.51,High:30.8,Low:30.38,Close:30.67,Volume:46663200}, + {Date:1342785600000,Open:31,High:31.05,Low:30.05,Close:30.12,Volume:64021700}, + {Date:1343044800000,Open:29.57,High:29.58,Low:29.01,Close:29.28,Volume:55151900}, + {Date:1343131200000,Open:29.24,High:29.36,Low:28.9,Close:29.15,Volume:47723300}, + {Date:1343217600000,Open:29.24,High:29.33,Low:28.78,Close:28.83,Volume:45579500}, + {Date:1343304000000,Open:29.23,High:29.5,Low:29.09,Close:29.16,Volume:45301400}, + {Date:1343390400000,Open:29.48,High:29.85,Low:29.18,Close:29.76,Volume:44242600}, + {Date:1343649600000,Open:29.75,High:29.82,Low:29.46,Close:29.64,Volume:28905000}, + {Date:1343736000000,Open:29.48,High:29.71,Low:29.33,Close:29.47,Volume:37620900}, + {Date:1343822400000,Open:29.59,High:29.65,Low:29.21,Close:29.41,Volume:31721800}, + {Date:1343908800000,Open:29.21,High:29.53,Low:28.97,Close:29.19,Volume:39520500}, + {Date:1343995200000,Open:29.53,High:29.94,Low:29.48,Close:29.75,Volume:35859400}, + {Date:1344254400000,Open:30,High:30.11,Low:29.81,Close:29.95,Volume:27471800}, + {Date:1344340800000,Open:30.07,High:30.35,Low:29.87,Close:30.26,Volume:28002900}, + {Date:1344427200000,Open:30.21,High:30.47,Low:30.11,Close:30.33,Volume:26257600}, + {Date:1344513600000,Open:30.39,High:30.65,Low:30.3,Close:30.5,Volume:24920800}, + {Date:1344600000000,Open:30.5,High:30.62,Low:30.25,Close:30.42,Volume:27810300}, + {Date:1344859200000,Open:30.35,High:30.46,Low:30.16,Close:30.39,Volume:23049100}, + {Date:1344945600000,Open:30.3,High:30.39,Low:30.01,Close:30.13,Volume:34551400}, + {Date:1345032000000,Open:30.11,High:30.28,Low:30.02,Close:30.2,Volume:24351000}, + {Date:1345118400000,Open:30.36,High:30.94,Low:30.26,Close:30.78,Volume:35787200}, + {Date:1345204800000,Open:30.92,High:30.92,Low:30.59,Close:30.9,Volume:32589900}, + {Date:1345464000000,Open:30.82,High:30.85,Low:30.58,Close:30.74,Volume:23737700}, + {Date:1345550400000,Open:30.76,High:30.96,Low:30.61,Close:30.8,Volume:28822700}, + {Date:1345636800000,Open:30.59,High:30.76,Low:30.47,Close:30.54,Volume:33437400}, + {Date:1345723200000,Open:30.39,High:30.4,Low:30.08,Close:30.26,Volume:28355600}, + {Date:1345809600000,Open:30.25,High:30.63,Low:30.18,Close:30.56,Volume:22943300}, + {Date:1346068800000,Open:30.93,High:30.96,Low:30.59,Close:30.69,Volume:34691100}, + {Date:1346155200000,Open:30.7,High:30.8,Low:30.52,Close:30.63,Volume:23947900}, + {Date:1346241600000,Open:30.65,High:30.75,Low:30.44,Close:30.65,Volume:23346800}, + {Date:1346328000000,Open:30.53,High:30.61,Low:30.22,Close:30.32,Volume:23982100}, + {Date:1346414400000,Open:30.6,High:30.96,Low:30.38,Close:30.82,Volume:36590100}, + {Date:1346760000000,Open:30.45,High:30.66,Low:30.15,Close:30.39,Volume:48556700}, + {Date:1346846400000,Open:30.22,High:30.53,Low:30.21,Close:30.39,Volume:33650000}, + {Date:1346932800000,Open:30.5,High:31.36,Low:30.46,Close:31.35,Volume:48371700}, + {Date:1347019200000,Open:31.04,High:31.07,Low:30.73,Close:30.95,Volume:42649100}, + {Date:1347278400000,Open:30.83,High:30.9,Low:30.51,Close:30.72,Volume:40524000}, + {Date:1347364800000,Open:30.69,High:30.91,Low:30.61,Close:30.79,Volume:25191800}, + {Date:1347451200000,Open:30.94,High:31.18,Low:30.73,Close:30.78,Volume:32775800}, + {Date:1347537600000,Open:30.89,High:31.18,Low:30.4,Close:30.94,Volume:45047300}, + {Date:1347624000000,Open:31.01,High:31.25,Low:30.81,Close:31.21,Volume:51422800}, + {Date:1347883200000,Open:31.19,High:31.26,Low:31.04,Close:31.21,Volume:36488500}, + {Date:1347969600000,Open:31.1,High:31.21,Low:31.03,Close:31.18,Volume:34542700}, + {Date:1348056000000,Open:31.09,High:31.19,Low:31.04,Close:31.05,Volume:48871900}, + {Date:1348142400000,Open:30.95,High:31.48,Low:30.91,Close:31.45,Volume:45543000}, + {Date:1348228800000,Open:31.43,High:31.61,Low:31.09,Close:31.19,Volume:102348900}, + {Date:1348488000000,Open:31,High:31.07,Low:30.64,Close:30.78,Volume:46825900}, + {Date:1348574400000,Open:30.95,High:31,Low:30.36,Close:30.39,Volume:54266400}, + {Date:1348660800000,Open:30.28,High:30.6,Low:30.04,Close:30.17,Volume:54672000}, + {Date:1348747200000,Open:30.17,High:30.4,Low:29.89,Close:30.16,Volume:47129900}, + {Date:1348833600000,Open:30.18,High:30.26,Low:29.74,Close:29.76,Volume:54229300}, + {Date:1349092800000,Open:29.81,High:29.98,Low:29.42,Close:29.49,Volume:54042700}, + {Date:1349179200000,Open:29.68,High:29.89,Low:29.5,Close:29.66,Volume:43338900}, + {Date:1349265600000,Open:29.75,High:29.99,Low:29.67,Close:29.86,Volume:46655900}, + {Date:1349352000000,Open:29.97,High:30.03,Low:29.57,Close:30.03,Volume:43634900}, + {Date:1349438400000,Open:30.23,High:30.25,Low:29.74,Close:29.85,Volume:41133900}, + {Date:1349697600000,Open:29.64,High:29.92,Low:29.55,Close:29.78,Volume:29752000}, + {Date:1349784000000,Open:29.68,High:29.74,Low:29.18,Close:29.28,Volume:45121100}, + {Date:1349870400000,Open:29.15,High:29.31,Low:28.95,Close:28.98,Volume:47227100}, + {Date:1349956800000,Open:29.22,High:29.25,Low:28.87,Close:28.95,Volume:41488500}, + {Date:1350043200000,Open:28.97,High:29.32,Low:28.8,Close:29.2,Volume:46464700}, + {Date:1350302400000,Open:29.37,High:29.72,Low:29.25,Close:29.51,Volume:42440200}, + {Date:1350388800000,Open:29.45,High:29.74,Low:29.32,Close:29.49,Volume:47739400}, + {Date:1350475200000,Open:29.3,High:29.64,Low:29.09,Close:29.59,Volume:44206100}, + {Date:1350561600000,Open:29.65,High:29.73,Low:29.26,Close:29.5,Volume:59238500}, + {Date:1350648000000,Open:29.05,High:29.08,Low:28.5,Close:28.64,Volume:90470800}, + {Date:1350907200000,Open:28.73,High:28.83,Low:27.83,Close:28,Volume:83374000}, + {Date:1350993600000,Open:27.77,High:28.2,Low:27.76,Close:28.05,Volume:64414800}, + {Date:1351080000000,Open:28.16,High:28.2,Low:27.87,Close:27.9,Volume:53320400}, + {Date:1351166400000,Open:28.19,High:28.2,Low:27.86,Close:27.88,Volume:54084300}, + {Date:1351252800000,Open:27.86,High:28.34,Low:27.84,Close:28.21,Volume:57790000}, + {Date:1351684800000,Open:28.55,High:28.88,Low:28.5,Close:28.54,Volume:69464100}, + {Date:1351771200000,Open:28.84,High:29.56,Low:28.82,Close:29.52,Volume:72047900}, + {Date:1351857600000,Open:29.59,High:29.77,Low:29.33,Close:29.5,Volume:57131600}, + {Date:1352116800000,Open:29.62,High:29.74,Low:29.33,Close:29.63,Volume:38070800}, + {Date:1352203200000,Open:29.82,High:30.2,Low:29.61,Close:29.86,Volume:43401500}, + {Date:1352289600000,Open:29.53,High:29.83,Low:29.05,Close:29.08,Volume:57871800}, + {Date:1352376000000,Open:29.12,High:29.37,Low:28.8,Close:28.81,Volume:49841800}, + {Date:1352462400000,Open:28.88,High:29.19,Low:28.81,Close:28.83,Volume:43291200}, + {Date:1352721600000,Open:28.94,High:29.01,Low:28.21,Close:28.22,Volume:61112300}, + {Date:1352808000000,Open:27.02,High:27.3,Low:26.75,Close:27.09,Volume:131689200}, + {Date:1352894400000,Open:27.24,High:27.29,Low:26.8,Close:26.84,Volume:76086100}, + {Date:1352980800000,Open:26.88,High:26.97,Low:26.63,Close:26.66,Volume:50955600}, + {Date:1353067200000,Open:26.67,High:26.7,Low:26.34,Close:26.52,Volume:64083300}, + {Date:1353326400000,Open:26.8,High:26.8,Low:26.47,Close:26.73,Volume:57179300}, + {Date:1353412800000,Open:26.76,High:26.8,Low:26.46,Close:26.71,Volume:47070400}, + {Date:1353499200000,Open:26.71,High:27.17,Low:26.67,Close:26.95,Volume:66360300}, + {Date:1353672000000,Open:27.23,High:27.77,Low:27.2,Close:27.7,Volume:57845700}, + {Date:1353931200000,Open:27.54,High:27.58,Low:27.17,Close:27.39,Volume:85198700}, + {Date:1354017600000,Open:27.36,High:27.38,Low:27.04,Close:27.08,Volume:45018600}, + {Date:1354104000000,Open:27.01,High:27.39,Low:26.77,Close:27.36,Volume:53018400}, + {Date:1354190400000,Open:27.11,High:27.36,Low:26.86,Close:26.95,Volume:69551400}, + {Date:1354276800000,Open:27.05,High:27.13,Low:26.49,Close:26.62,Volume:83690200}, + {Date:1354536000000,Open:26.78,High:26.82,Low:26.4,Close:26.43,Volume:53173800}, + {Date:1354622400000,Open:26.5,High:26.63,Low:26.34,Close:26.37,Volume:49777500}, + {Date:1354708800000,Open:26.38,High:26.93,Low:26.26,Close:26.67,Volume:68283800}, + {Date:1354795200000,Open:26.81,High:26.98,Low:26.61,Close:26.73,Volume:39182300}, + {Date:1354881600000,Open:26.82,High:26.82,Low:26.37,Close:26.46,Volume:46162100}, + {Date:1355140800000,Open:26.56,High:26.97,Low:26.52,Close:26.94,Volume:47031100}, + {Date:1355227200000,Open:27.05,High:27.49,Low:27.05,Close:27.32,Volume:52282800}, + {Date:1355313600000,Open:27.53,High:27.62,Low:27.08,Close:27.24,Volume:43966300}, + {Date:1355400000000,Open:27.32,High:27.52,Low:26.95,Close:27.11,Volume:45080100}, + {Date:1355486400000,Open:27.11,High:27.13,Low:26.7,Close:26.81,Volume:42077500}, + {Date:1355745600000,Open:26.79,High:27.22,Low:26.68,Close:27.1,Volume:42046100}, + {Date:1355832000000,Open:27.25,High:27.63,Low:27.14,Close:27.56,Volume:50486900}, + {Date:1355918400000,Open:27.69,High:27.73,Low:27.25,Close:27.31,Volume:53519900}, + {Date:1356004800000,Open:27.36,High:27.68,Low:27.15,Close:27.68,Volume:52607300}, + {Date:1356091200000,Open:27.45,High:27.49,Low:27,Close:27.45,Volume:98776500}, + {Date:1356350400000,Open:27.2,High:27.25,Low:27,Close:27.06,Volume:20842400}, + {Date:1356523200000,Open:27.03,High:27.2,Low:26.7,Close:26.86,Volume:31631100}, + {Date:1356609600000,Open:26.89,High:27.09,Low:26.57,Close:26.96,Volume:39394000}, + {Date:1356696000000,Open:26.71,High:26.9,Low:26.55,Close:26.55,Volume:28239900}, + {Date:1356955200000,Open:26.59,High:26.77,Low:26.37,Close:26.71,Volume:42749500}, + {Date:1357128000000,Open:27.25,High:27.73,Low:27.15,Close:27.62,Volume:52899300}, + {Date:1357214400000,Open:27.63,High:27.65,Low:27.16,Close:27.25,Volume:48294400}, + {Date:1357300800000,Open:27.27,High:27.34,Low:26.73,Close:26.74,Volume:52521100}, + {Date:1357560000000,Open:26.77,High:26.88,Low:26.64,Close:26.69,Volume:37110400}, + {Date:1357646400000,Open:26.75,High:26.79,Low:26.46,Close:26.55,Volume:44703100}, + {Date:1357732800000,Open:26.72,High:26.75,Low:26.56,Close:26.7,Volume:49047900}, + {Date:1357819200000,Open:26.65,High:26.98,Low:26.29,Close:26.46,Volume:71431300}, + {Date:1357905600000,Open:26.49,High:26.93,Low:26.28,Close:26.83,Volume:55512100}, + {Date:1358164800000,Open:26.9,High:27.08,Low:26.76,Close:26.89,Volume:48324400}, + {Date:1358251200000,Open:26.83,High:27.29,Low:26.83,Close:27.21,Volume:48244500}, + {Date:1358337600000,Open:27.15,High:27.23,Low:27.01,Close:27.04,Volume:41077400}, + {Date:1358424000000,Open:27.19,High:27.47,Low:27.06,Close:27.25,Volume:51685900}, + {Date:1358510400000,Open:27.1,High:27.29,Low:27.04,Close:27.25,Volume:52167700}, + {Date:1358856000000,Open:27.3,High:27.45,Low:27,Close:27.15,Volume:58650600}, + {Date:1358942400000,Open:27.2,High:27.64,Low:27.2,Close:27.61,Volume:50387700}, + {Date:1359028800000,Open:27.7,High:28.07,Low:27.47,Close:27.63,Volume:101739300}, + {Date:1359115200000,Open:27.58,High:28.23,Low:27.39,Close:27.88,Volume:81847700}, + {Date:1359374400000,Open:28.01,High:28.23,Low:27.76,Close:27.91,Volume:56056500}, + {Date:1359460800000,Open:27.82,High:28.13,Low:27.6,Close:28.01,Volume:49242600}, + {Date:1359547200000,Open:28.01,High:28.19,Low:27.76,Close:27.85,Volume:43580500}, + {Date:1359633600000,Open:27.79,High:27.97,Low:27.4,Close:27.45,Volume:50530000}, + {Date:1359720000000,Open:27.67,High:28.05,Low:27.55,Close:27.93,Volume:55565900}, + {Date:1359979200000,Open:27.87,High:28.02,Low:27.42,Close:27.44,Volume:50540000}, + {Date:1360065600000,Open:27.62,High:27.66,Low:27.36,Close:27.5,Volume:35410400}, + {Date:1360152000000,Open:27.38,High:27.54,Low:27.25,Close:27.34,Volume:41889600}, + {Date:1360238400000,Open:27.35,High:27.39,Low:27.1,Close:27.28,Volume:38028300}, + {Date:1360324800000,Open:27.35,High:27.71,Low:27.31,Close:27.55,Volume:33318500}, + {Date:1360584000000,Open:27.65,High:27.92,Low:27.5,Close:27.86,Volume:32247700}, + {Date:1360670400000,Open:27.88,High:28,Low:27.75,Close:27.88,Volume:35990900}, + {Date:1360756800000,Open:27.93,High:28.11,Low:27.88,Close:28.03,Volume:41715600}, + {Date:1360843200000,Open:27.92,High:28.06,Low:27.87,Close:28.04,Volume:32663200}, + {Date:1360929600000,Open:28.04,High:28.16,Low:27.88,Close:28.01,Volume:49650900}, + {Date:1361275200000,Open:27.88,High:28.09,Low:27.8,Close:28.05,Volume:38781400}, + {Date:1361361600000,Open:28.13,High:28.2,Low:27.83,Close:27.87,Volume:44110200}, + {Date:1361448000000,Open:27.74,High:27.74,Low:27.23,Close:27.49,Volume:49078500}, + {Date:1361534400000,Open:27.68,High:27.76,Low:27.48,Close:27.76,Volume:31425900}, + {Date:1361793600000,Open:27.97,High:28.05,Low:27.37,Close:27.37,Volume:48011800}, + {Date:1361880000000,Open:27.38,High:27.6,Low:27.34,Close:27.37,Volume:49923300}, + {Date:1361966400000,Open:27.42,High:28,Low:27.33,Close:27.81,Volume:36394700}, + {Date:1362052800000,Open:27.88,High:27.97,Low:27.74,Close:27.8,Volume:35840200}, + {Date:1362139200000,Open:27.72,High:27.98,Low:27.52,Close:27.95,Volume:34849700}, + {Date:1362398400000,Open:27.85,High:28.15,Low:27.7,Close:28.15,Volume:38157500}, + {Date:1362484800000,Open:28.29,High:28.54,Low:28.16,Close:28.35,Volume:41432200}, + {Date:1362571200000,Open:28.21,High:28.23,Low:27.78,Close:28.09,Volume:51448500}, + {Date:1362657600000,Open:28.11,High:28.28,Low:28.01,Close:28.14,Volume:29196700}, + {Date:1362744000000,Open:28.25,High:28.33,Low:27.96,Close:28,Volume:37667800}, + {Date:1363003200000,Open:27.94,High:27.97,Low:27.67,Close:27.87,Volume:36627500}, + {Date:1363089600000,Open:27.84,High:27.95,Low:27.64,Close:27.91,Volume:39255200}, + {Date:1363176000000,Open:27.87,High:28.02,Low:27.75,Close:27.92,Volume:29093400}, + {Date:1363262400000,Open:28,High:28.16,Low:27.93,Close:28.14,Volume:55914800}, + {Date:1363348800000,Open:28.03,High:28.16,Low:27.98,Close:28.04,Volume:92710300}, + {Date:1363608000000,Open:27.88,High:28.28,Low:27.81,Close:28.1,Volume:44809400}, + {Date:1363694400000,Open:28.12,High:28.22,Low:28.03,Close:28.18,Volume:51901600}, + {Date:1363780800000,Open:28.34,High:28.49,Low:28.18,Close:28.32,Volume:35447800}, + {Date:1363867200000,Open:28.11,High:28.36,Low:28.05,Close:28.11,Volume:34233200}, + {Date:1363953600000,Open:28.19,High:28.34,Low:28.1,Close:28.25,Volume:28720900}, + {Date:1364212800000,Open:28.3,High:28.35,Low:27.96,Close:28.16,Volume:44154000}, + {Date:1364299200000,Open:28.24,High:28.34,Low:28.11,Close:28.16,Volume:27824300}, + {Date:1364385600000,Open:28.14,High:28.45,Low:28.08,Close:28.37,Volume:36047400}, + {Date:1364472000000,Open:28.32,High:28.66,Low:28.26,Close:28.61,Volume:55453800}, + {Date:1364817600000,Open:28.64,High:28.66,Low:28.36,Close:28.61,Volume:29201100}, + {Date:1364904000000,Open:28.59,High:28.85,Low:28.52,Close:28.8,Volume:28456500}, + {Date:1364990400000,Open:28.75,High:28.95,Low:28.54,Close:28.56,Volume:35062800}, + {Date:1365076800000,Open:28.39,High:28.61,Low:28.27,Close:28.6,Volume:45263200}, + {Date:1365163200000,Open:28.22,High:28.78,Low:28.11,Close:28.7,Volume:50927300}, + {Date:1365422400000,Open:28.73,High:28.73,Low:28.47,Close:28.59,Volume:34759500}, + {Date:1365508800000,Open:28.73,High:29.82,Low:28.68,Close:29.61,Volume:77733800}, + {Date:1365595200000,Open:29.57,High:30.32,Low:29.52,Close:30.28,Volume:71116700}, + {Date:1365681600000,Open:29.1,High:29.2,Low:28.73,Close:28.94,Volume:130923200}, + {Date:1365768000000,Open:28.85,High:29.02,Low:28.66,Close:28.79,Volume:62886300}, + {Date:1366027200000,Open:28.65,High:28.98,Low:28.51,Close:28.69,Volume:56332900}, + {Date:1366113600000,Open:28.9,High:29.14,Low:28.7,Close:28.97,Volume:52797300}, + {Date:1366200000000,Open:28.85,High:29.04,Low:28.6,Close:28.83,Volume:52840700}, + {Date:1366286400000,Open:28.95,High:28.98,Low:28.5,Close:28.79,Volume:56906600}, + {Date:1366372800000,Open:29.62,High:30.24,Low:29.61,Close:29.77,Volume:99790700}, + {Date:1366632000000,Open:30.3,High:31.18,Low:30.27,Close:30.83,Volume:137904000}, + {Date:1366718400000,Open:30.7,High:30.9,Low:30.38,Close:30.6,Volume:59126900}, + {Date:1366804800000,Open:30.62,High:31.92,Low:30.6,Close:31.76,Volume:90946600}, + {Date:1366891200000,Open:31.71,High:32.84,Low:31.54,Close:31.94,Volume:110700200}, + {Date:1366977600000,Open:31.9,High:31.98,Low:31.45,Close:31.79,Volume:47799300}, + {Date:1367236800000,Open:31.8,High:32.68,Low:31.77,Close:32.61,Volume:59116400}, + {Date:1367323200000,Open:32.56,High:33.11,Low:32.28,Close:33.1,Volume:75165200}, + {Date:1367409600000,Open:32.93,High:33.08,Low:32.6,Close:32.72,Volume:54330900}, + {Date:1367496000000,Open:32.63,High:33.17,Low:32.39,Close:33.16,Volume:46059500}, + {Date:1367582400000,Open:33.23,High:33.52,Low:33.08,Close:33.49,Volume:46784600}, + {Date:1367841600000,Open:33.42,High:33.91,Low:33.25,Close:33.75,Volume:40978300}, + {Date:1367928000000,Open:33.65,High:33.79,Low:33.24,Close:33.31,Volume:43078300}, + {Date:1368014400000,Open:33.07,High:33.24,Low:32.65,Close:32.99,Volume:51595700}, + {Date:1368100800000,Open:32.85,High:33,Low:32.59,Close:32.66,Volume:46417800}, + {Date:1368187200000,Open:32.67,High:32.72,Low:32.32,Close:32.69,Volume:36394900}, + {Date:1368446400000,Open:32.61,High:33.07,Low:32.55,Close:33.03,Volume:36027600}, + {Date:1368532800000,Open:32.86,High:33.53,Low:32.8,Close:33.53,Volume:56870100}, + {Date:1368619200000,Open:33.45,High:33.9,Low:33.43,Close:33.85,Volume:46303900}, + {Date:1368705600000,Open:33.64,High:34.15,Low:33.55,Close:34.08,Volume:59382900}, + {Date:1368792000000,Open:34.13,High:34.87,Low:34.1,Close:34.87,Volume:60666700}, + {Date:1369051200000,Open:34.73,High:35.1,Low:34.68,Close:35.08,Volume:54020800}, + {Date:1369137600000,Open:35.1,High:35.27,Low:34.72,Close:34.85,Volume:48702400}, + {Date:1369224000000,Open:34.79,High:34.84,Low:34.36,Close:34.61,Volume:66047500}, + {Date:1369310400000,Open:34.23,High:34.55,Low:33.9,Close:34.15,Volume:51102700}, + {Date:1369396800000,Open:33.92,High:34.28,Low:33.9,Close:34.27,Volume:33174400}, + {Date:1369742400000,Open:34.42,High:35.18,Low:34.41,Close:35.02,Volume:48212100}, + {Date:1369828800000,Open:34.74,High:35.02,Low:34.57,Close:34.88,Volume:38412200}, + {Date:1369915200000,Open:34.85,High:35.25,Low:34.81,Close:35.03,Volume:51131000}, + {Date:1370001600000,Open:34.82,High:35.28,Low:34.79,Close:34.9,Volume:56165700}, + {Date:1370260800000,Open:34.92,High:35.63,Low:34.83,Close:35.59,Volume:51252600}, + {Date:1370347200000,Open:35.62,High:35.74,Low:34.77,Close:34.99,Volume:65529500}, + {Date:1370433600000,Open:34.6,High:34.89,Low:34.43,Close:34.78,Volume:46025100}, + {Date:1370520000000,Open:34.84,High:35.11,Low:34.49,Close:34.96,Volume:37618500}, + {Date:1370606400000,Open:35.25,High:35.78,Low:35.06,Close:35.67,Volume:40757300}, + {Date:1370865600000,Open:35.51,High:35.65,Low:35.14,Close:35.47,Volume:35994500}, + {Date:1370952000000,Open:35.05,High:35.18,Low:34.68,Close:34.84,Volume:39435900}, + {Date:1371038400000,Open:35.14,High:35.27,Low:34.85,Close:35,Volume:37372700}, + {Date:1371124800000,Open:34.99,High:35.02,Low:34.59,Close:34.72,Volume:45654900}, + {Date:1371211200000,Open:34.55,High:34.69,Low:34.25,Close:34.4,Volume:53192600}, + {Date:1371470400000,Open:34.69,High:35.16,Low:34.63,Close:35,Volume:49670100}, + {Date:1371556800000,Open:34.97,High:35.17,Low:34.9,Close:34.98,Volume:28616500}, + {Date:1371643200000,Open:34.96,High:35.09,Low:34.59,Close:34.59,Volume:30816200}, + {Date:1371729600000,Open:34.26,High:34.33,Low:33.37,Close:33.49,Volume:54493700}, + {Date:1371816000000,Open:33.66,High:33.73,Low:33.05,Close:33.27,Volume:85338500}, + {Date:1372075200000,Open:32.94,High:34.2,Low:32.57,Close:33.72,Volume:56109000}, + {Date:1372161600000,Open:34.08,High:34.38,Low:33.46,Close:33.67,Volume:44073400}, + {Date:1372248000000,Open:34.12,High:34.48,Low:33.89,Close:34.35,Volume:48665900}, + {Date:1372334400000,Open:34.52,High:34.78,Low:34.5,Close:34.62,Volume:28993100}, + {Date:1372420800000,Open:34.38,High:34.79,Low:34.34,Close:34.54,Volume:65545500}, + {Date:1372680000000,Open:34.75,High:34.99,Low:34.33,Close:34.36,Volume:31055400}, + {Date:1372766400000,Open:34.41,High:34.44,Low:33.63,Close:33.94,Volume:37630000}, + {Date:1372852800000,Open:33.66,High:34.37,Low:33.6,Close:34.01,Volume:15994400}, + {Date:1373025600000,Open:34.09,High:34.24,Low:33.58,Close:34.21,Volume:26085900}, + {Date:1373284800000,Open:34.35,High:34.59,Low:33.98,Close:34.33,Volume:32396900}, + {Date:1373371200000,Open:34.58,High:34.6,Low:34.14,Close:34.35,Volume:25318500}, + {Date:1373457600000,Open:34.34,High:34.81,Low:34.32,Close:34.7,Volume:29658800}, + {Date:1373544000000,Open:35,High:35.77,Low:34.9,Close:35.69,Volume:53638300}, + {Date:1373630400000,Open:35.58,High:35.73,Low:35.28,Close:35.67,Volume:35501200}, + {Date:1373889600000,Open:35.66,High:36.22,Low:35.58,Close:36.17,Volume:34142600}, + {Date:1373976000000,Open:36.01,High:36.43,Low:35.96,Close:36.27,Volume:36378500}, + {Date:1374062400000,Open:36.34,High:36.39,Low:35.49,Close:35.74,Volume:37285100}, + {Date:1374148800000,Open:35.72,High:35.89,Low:35.22,Close:35.44,Volume:49547100}, + {Date:1374235200000,Open:32.4,High:32.67,Low:31.02,Close:31.4,Volume:248428500}, + {Date:1374494400000,Open:31.7,High:32.01,Low:31.6,Close:32.01,Volume:79040700}, + {Date:1374580800000,Open:31.91,High:32.04,Low:31.71,Close:31.82,Volume:65810400}, + {Date:1374667200000,Open:32.04,High:32.19,Low:31.89,Close:31.96,Volume:52803100}, + {Date:1374753600000,Open:31.62,High:31.65,Low:31.25,Close:31.39,Volume:63213000}, + {Date:1374840000000,Open:31.26,High:31.62,Low:31.21,Close:31.62,Volume:38633600}, + {Date:1375099200000,Open:31.47,High:31.6,Low:31.4,Close:31.54,Volume:28870700}, + {Date:1375185600000,Open:31.78,High:32.12,Low:31.55,Close:31.85,Volume:45799500}, + {Date:1375272000000,Open:31.97,High:32.05,Low:31.71,Close:31.84,Volume:43898400}, + {Date:1375358400000,Open:32.06,High:32.09,Low:31.6,Close:31.67,Volume:42557900}, + {Date:1375444800000,Open:31.69,High:31.9,Low:31.57,Close:31.89,Volume:29199900}, + {Date:1375704000000,Open:31.9,High:32,Low:31.64,Close:31.7,Volume:30984000}, + {Date:1375790400000,Open:31.55,High:31.67,Low:31.38,Close:31.58,Volume:36331500}, + {Date:1375876800000,Open:31.54,High:32.1,Low:31.25,Close:32.06,Volume:38078600}, + {Date:1375963200000,Open:32.24,High:33.07,Low:32.05,Close:32.89,Volume:59034400}, + {Date:1376049600000,Open:32.77,High:32.9,Low:32.47,Close:32.7,Volume:26800700}, + {Date:1376308800000,Open:32.46,High:32.97,Low:32.46,Close:32.87,Volume:25493700}, + {Date:1376395200000,Open:32.51,High:32.55,Low:32.21,Close:32.23,Volume:39464100}, + {Date:1376481600000,Open:32.14,High:33.36,Low:31.7,Close:32.35,Volume:48519600}, + {Date:1376568000000,Open:32,High:32.18,Low:30.84,Close:31.79,Volume:33338000}, + {Date:1376654400000,Open:31.79,High:31.99,Low:31.66,Close:31.8,Volume:32866300}, + {Date:1376913600000,Open:31.76,High:31.97,Low:31.38,Close:31.39,Volume:27902500}, + {Date:1377000000000,Open:31.44,High:31.9,Low:31.37,Close:31.62,Volume:22979600}, + {Date:1377086400000,Open:31.61,High:32.01,Low:31.54,Close:31.61,Volume:37409100}, + {Date:1377172800000,Open:32.19,High:32.49,Low:32.1,Close:32.39,Volume:31169900}, + {Date:1377259200000,Open:35.17,High:35.2,Low:34,Close:34.75,Volume:225493800}, + {Date:1377518400000,Open:34.4,High:34.67,Low:34.03,Close:34.15,Volume:72786800}, + {Date:1377604800000,Open:33.52,High:34.1,Low:33.15,Close:33.26,Volume:58522300}, + {Date:1377691200000,Open:33.39,High:33.6,Low:33,Close:33.02,Volume:44257400}, + {Date:1377777600000,Open:32.93,High:33.6,Low:32.8,Close:33.55,Volume:45284700}, + {Date:1377864000000,Open:33.37,High:33.48,Low:33.09,Close:33.4,Volume:42790200}, + {Date:1378209600000,Open:31.75,High:32.07,Low:31.29,Close:31.88,Volume:154507000}, + {Date:1378296000000,Open:31.39,High:31.47,Low:31.11,Close:31.2,Volume:142320600}, + {Date:1378382400000,Open:31.1,High:31.44,Low:30.95,Close:31.23,Volume:71644900}, + {Date:1378468800000,Open:31.31,High:31.39,Low:31.13,Close:31.15,Volume:75434900}, + {Date:1378728000000,Open:31.22,High:31.79,Low:31.2,Close:31.66,Volume:49628500}, + {Date:1378814400000,Open:31.9,High:32.4,Low:31.79,Close:32.39,Volume:56881200}, + {Date:1378900800000,Open:32.57,High:32.93,Low:32.53,Close:32.74,Volume:39087500}, + {Date:1378987200000,Open:32.72,High:32.78,Low:32.59,Close:32.69,Volume:32860200}, + {Date:1379073600000,Open:32.77,High:33.07,Low:32.51,Close:33.03,Volume:40899000}, + {Date:1379332800000,Open:33.38,High:33.5,Low:32.73,Close:32.8,Volume:52839700}, + {Date:1379419200000,Open:33.42,High:33.47,Low:32.9,Close:32.93,Volume:84716500}, + {Date:1379505600000,Open:32.99,High:33.4,Low:32.83,Close:33.32,Volume:64099900}, + {Date:1379592000000,Open:33.48,High:33.68,Low:33.32,Close:33.64,Volume:42026600}, + {Date:1379678400000,Open:33.41,High:33.48,Low:32.69,Close:32.79,Volume:102904900}, + {Date:1379937600000,Open:32.54,High:32.97,Low:32.5,Close:32.74,Volume:39826100}, + {Date:1380024000000,Open:32.87,High:32.87,Low:32.15,Close:32.45,Volume:40685000}, + {Date:1380110400000,Open:32.49,High:32.8,Low:32.4,Close:32.51,Volume:28907500}, + {Date:1380196800000,Open:32.64,High:33,Low:32.59,Close:32.77,Volume:28504000}, + {Date:1380283200000,Open:32.88,High:33.75,Low:32.87,Close:33.27,Volume:55348000}, + {Date:1380542400000,Open:33,High:33.31,Low:32.7,Close:33.28,Volume:39839500}, + {Date:1380628800000,Open:33.35,High:33.61,Low:33.3,Close:33.58,Volume:36718700}, + {Date:1380715200000,Open:33.36,High:34.03,Low:33.29,Close:33.92,Volume:46946800}, + {Date:1380801600000,Open:33.88,High:34,Low:33.42,Close:33.86,Volume:38703800}, + {Date:1380888000000,Open:33.69,High:33.99,Low:33.62,Close:33.88,Volume:33008100}, + {Date:1381147200000,Open:33.6,High:33.71,Low:33.2,Close:33.3,Volume:35069300}, + {Date:1381233600000,Open:33.31,High:33.33,Low:32.8,Close:33.01,Volume:41017600}, + {Date:1381320000000,Open:33.07,High:33.35,Low:32.96,Close:33.07,Volume:35878600}, + {Date:1381406400000,Open:33.31,High:33.89,Low:33.26,Close:33.76,Volume:42875100}, + {Date:1381492800000,Open:33.68,High:34.14,Low:33.68,Close:34.13,Volume:30033300}, + {Date:1381752000000,Open:33.9,High:34.5,Low:33.78,Close:34.45,Volume:27757900}, + {Date:1381838400000,Open:34.67,High:34.99,Low:34.47,Close:34.49,Volume:47097800}, + {Date:1381924800000,Open:34.6,High:34.9,Low:34.56,Close:34.64,Volume:35111600}, + {Date:1382011200000,Open:34.45,High:34.99,Low:34.37,Close:34.92,Volume:31359200}, + {Date:1382097600000,Open:34.82,High:34.99,Low:34.33,Close:34.96,Volume:41811700}, + {Date:1382356800000,Open:34.98,High:35.2,Low:34.91,Close:34.99,Volume:27433500}, + {Date:1382443200000,Open:35.02,High:35.1,Low:34.52,Close:34.58,Volume:40438500}, + {Date:1382529600000,Open:34.35,High:34.49,Low:33.67,Close:33.76,Volume:58600500}, + {Date:1382616000000,Open:33.82,High:34.1,Low:33.57,Close:33.72,Volume:53209700}, + {Date:1382702400000,Open:35.88,High:36.29,Low:35.47,Close:35.73,Volume:113494000}, + {Date:1382961600000,Open:35.61,High:35.73,Low:35.27,Close:35.57,Volume:38383600}, + {Date:1383048000000,Open:35.63,High:35.72,Low:35.26,Close:35.52,Volume:31702200}, + {Date:1383134400000,Open:35.53,High:35.79,Low:35.43,Close:35.54,Volume:36997700}, + {Date:1383220800000,Open:35.66,High:35.69,Low:35.34,Close:35.41,Volume:41682300}, + {Date:1383307200000,Open:35.67,High:35.69,Low:35.39,Close:35.53,Volume:40264600}, + {Date:1383566400000,Open:35.59,High:35.98,Low:35.55,Close:35.94,Volume:28060700}, + {Date:1383652800000,Open:35.79,High:36.71,Low:35.77,Close:36.64,Volume:51681900}, + {Date:1383739200000,Open:37.24,High:38.22,Low:37.06,Close:38.18,Volume:88948800}, + {Date:1383825600000,Open:37.96,High:38.01,Low:37.43,Close:37.5,Volume:60437400}, + {Date:1383912000000,Open:37.67,High:37.78,Low:37.34,Close:37.78,Volume:36737800}, + {Date:1384171200000,Open:37.69,High:37.78,Low:37.35,Close:37.59,Volume:26872500}, + {Date:1384257600000,Open:37.38,High:37.6,Low:37.2,Close:37.36,Volume:31651600}, + {Date:1384344000000,Open:36.98,High:38.16,Low:36.9,Close:38.16,Volume:44957600}, + {Date:1384430400000,Open:37.87,High:38.13,Low:37.72,Close:38.02,Volume:46183700}, + {Date:1384516800000,Open:37.95,High:38.02,Low:37.72,Close:37.84,Volume:50601300}, + {Date:1384776000000,Open:37.35,High:37.58,Low:37.07,Close:37.2,Volume:53277500}, + {Date:1384862400000,Open:36.85,High:37.23,Low:36.67,Close:36.74,Volume:44275000}, + {Date:1384948800000,Open:36.92,High:37.41,Low:36.86,Close:37.08,Volume:32229900}, + {Date:1385035200000,Open:37.27,High:37.53,Low:37.26,Close:37.4,Volume:23064700}, + {Date:1385121600000,Open:37.53,High:37.68,Low:37.33,Close:37.57,Volume:27982000}, + {Date:1385380800000,Open:37.93,High:37.95,Low:37.57,Close:37.64,Volume:30646800}, + {Date:1385467200000,Open:37.57,High:37.65,Low:37.35,Close:37.35,Volume:34465300}, + {Date:1385553600000,Open:37.57,High:37.76,Low:37.49,Close:37.6,Volume:26002100}, + {Date:1385726400000,Open:37.82,High:38.29,Low:37.82,Close:38.13,Volume:22090400}, + {Date:1385985600000,Open:38.09,High:38.78,Low:38.06,Close:38.45,Volume:42950400}, + {Date:1386072000000,Open:38.14,High:38.49,Low:38.08,Close:38.31,Volume:52109800}, + {Date:1386158400000,Open:38.21,High:38.98,Low:38.12,Close:38.94,Volume:51983600}, + {Date:1386244800000,Open:38.85,High:38.88,Low:37.18,Close:38,Volume:116305000}, + {Date:1386331200000,Open:38.42,High:38.55,Low:37.99,Close:38.36,Volume:36457300}, + {Date:1386590400000,Open:38.56,High:38.87,Low:38.37,Close:38.71,Volume:30286000}, + {Date:1386676800000,Open:38.61,High:38.9,Low:38.02,Close:38.11,Volume:37828600}, + {Date:1386763200000,Open:38.06,High:38.3,Low:37.39,Close:37.61,Volume:39853400}, + {Date:1386849600000,Open:37.64,High:37.64,Low:37.18,Close:37.22,Volume:36012800}, + {Date:1386936000000,Open:37.42,High:37.45,Low:36.62,Close:36.69,Volume:40066100}, + {Date:1387195200000,Open:36.73,High:37,Low:36.54,Close:36.89,Volume:31734200}, + {Date:1387281600000,Open:36.94,High:37.11,Low:36.33,Close:36.52,Volume:45687700}, + {Date:1387368000000,Open:36.36,High:36.6,Low:35.53,Close:36.58,Volume:63192100}, + {Date:1387454400000,Open:36.51,High:36.55,Low:36.08,Close:36.25,Volume:34160100}, + {Date:1387540800000,Open:36.2,High:36.93,Low:36.19,Close:36.8,Volume:62649100}, + {Date:1387800000000,Open:36.81,High:36.89,Low:36.55,Close:36.62,Volume:25128700}, + {Date:1387886400000,Open:36.72,High:37.17,Low:36.64,Close:37.08,Volume:14243000}, + {Date:1388059200000,Open:37.2,High:37.49,Low:37.17,Close:37.44,Volume:17612800}, + {Date:1388145600000,Open:37.58,High:37.62,Low:37.17,Close:37.29,Volume:14563000}, + {Date:1388404800000,Open:37.22,High:37.38,Low:36.9,Close:37.29,Volume:16290500}, + {Date:1388491200000,Open:37.4,High:37.58,Low:37.22,Close:37.41,Volume:17503500}, + {Date:1388664000000,Open:37.35,High:37.4,Low:37.1,Close:37.16,Volume:30632200}, + {Date:1388750400000,Open:37.2,High:37.22,Low:36.6,Close:36.91,Volume:31134800}, + {Date:1389009600000,Open:36.85,High:36.89,Low:36.11,Close:36.13,Volume:43603700}, + {Date:1389096000000,Open:36.33,High:36.49,Low:36.21,Close:36.41,Volume:35802800}, + {Date:1389182400000,Open:36,High:36.14,Low:35.58,Close:35.76,Volume:59971700}, + {Date:1389268800000,Open:35.88,High:35.91,Low:35.4,Close:35.53,Volume:36516300}, + {Date:1389355200000,Open:35.9,High:36.15,Low:35.75,Close:36.04,Volume:40548800}, + {Date:1389614400000,Open:35.99,High:36.02,Low:34.83,Close:34.98,Volume:45901900}, + {Date:1389700800000,Open:34.73,High:35.88,Low:34.63,Close:35.78,Volume:41623300}, + {Date:1389787200000,Open:35.9,High:36.79,Low:35.85,Close:36.76,Volume:44812600}, + {Date:1389873600000,Open:36.69,High:37,Low:36.31,Close:36.89,Volume:38018700}, + {Date:1389960000000,Open:36.83,High:36.83,Low:36.15,Close:36.38,Volume:46267500}, + {Date:1390305600000,Open:36.82,High:36.82,Low:36.06,Close:36.17,Volume:31567300}, + {Date:1390392000000,Open:36.26,High:36.32,Low:35.75,Close:35.93,Volume:21904300}, + {Date:1390478400000,Open:36.09,High:36.13,Low:35.52,Close:36.06,Volume:43954000}, + {Date:1390564800000,Open:37.45,High:37.55,Low:36.53,Close:36.81,Volume:76395500}, + {Date:1390824000000,Open:36.87,High:36.89,Low:35.98,Close:36.03,Volume:44420800}, + {Date:1390910400000,Open:36.12,High:36.39,Low:35.75,Close:36.27,Volume:36205500}, + {Date:1390996800000,Open:35.98,High:36.88,Low:35.9,Close:36.66,Volume:52745900}, + {Date:1391083200000,Open:36.79,High:36.88,Low:36.23,Close:36.86,Volume:35036300}, + {Date:1391169600000,Open:36.95,High:37.89,Low:36.56,Close:37.84,Volume:93162300}, + {Date:1391428800000,Open:37.74,High:37.99,Low:36.43,Close:36.48,Volume:64063100}, + {Date:1391515200000,Open:36.97,High:37.19,Low:36.25,Close:36.35,Volume:54697900}, + {Date:1391601600000,Open:36.29,High:36.47,Low:35.8,Close:35.82,Volume:55814400}, + {Date:1391688000000,Open:35.8,High:36.25,Low:35.69,Close:36.18,Volume:35351800}, + {Date:1391774400000,Open:36.32,High:36.59,Low:36.01,Close:36.56,Volume:33260500}, + {Date:1392033600000,Open:36.63,High:36.8,Low:36.29,Close:36.8,Volume:26767000}, + {Date:1392120000000,Open:36.88,High:37.26,Low:36.86,Close:37.17,Volume:32141400}, + {Date:1392206400000,Open:37.35,High:37.6,Low:37.3,Close:37.47,Volume:27051800}, + {Date:1392292800000,Open:37.33,High:37.86,Low:37.33,Close:37.61,Volume:37635500}, + {Date:1392379200000,Open:37.39,High:37.78,Low:37.33,Close:37.62,Volume:31407500}, + {Date:1392724800000,Open:37.63,High:37.78,Low:37.41,Close:37.42,Volume:32834000}, + {Date:1392811200000,Open:37.22,High:37.75,Low:37.21,Close:37.51,Volume:29750400}, + {Date:1392897600000,Open:37.57,High:37.87,Low:37.4,Close:37.75,Volume:27526100}, + {Date:1392984000000,Open:37.94,High:38.35,Low:37.86,Close:37.98,Volume:38021300}, + {Date:1393243200000,Open:37.69,High:37.98,Low:37.54,Close:37.69,Volume:32085100}, + {Date:1393329600000,Open:37.61,High:37.85,Low:37.35,Close:37.54,Volume:30736500}, + {Date:1393416000000,Open:37.58,High:37.74,Low:37.19,Close:37.47,Volume:41041800}, + {Date:1393502400000,Open:37.45,High:37.89,Low:37.23,Close:37.86,Volume:33903400}, + {Date:1393588800000,Open:37.98,High:38.46,Low:37.82,Close:38.31,Volume:41215000}, + {Date:1393848000000,Open:37.92,High:38.13,Low:37.49,Close:37.78,Volume:29717500}, + {Date:1393934400000,Open:38.2,High:38.48,Low:38.07,Close:38.41,Volume:26802400}, + {Date:1394020800000,Open:38.25,High:38.27,Low:37.93,Close:38.11,Volume:20520100}, + {Date:1394107200000,Open:38.14,High:38.24,Low:37.89,Close:38.15,Volume:23582200}, + {Date:1394193600000,Open:38.28,High:38.36,Low:37.69,Close:37.9,Volume:26591600}, + {Date:1394452800000,Open:37.99,High:38.01,Low:37.72,Close:37.82,Volume:19006600}, + {Date:1394539200000,Open:37.87,High:38.23,Low:37.72,Close:38.02,Volume:25216400}, + {Date:1394625600000,Open:37.8,High:38.43,Low:37.79,Close:38.27,Volume:30494100}, + {Date:1394712000000,Open:38.42,High:38.45,Low:37.64,Close:37.89,Volume:32169700}, + {Date:1394798400000,Open:37.65,High:38.14,Low:37.51,Close:37.7,Volume:27195600}, + {Date:1395057600000,Open:37.9,High:38.41,Low:37.79,Close:38.05,Volume:20479600}, + {Date:1395144000000,Open:38.26,High:39.9,Low:38.22,Close:39.55,Volume:64063900}, + {Date:1395230400000,Open:39.47,High:39.55,Low:38.91,Close:39.27,Volume:35597200}, + {Date:1395316800000,Open:39.25,High:40.65,Low:39.24,Close:40.33,Volume:59269800}, + {Date:1395403200000,Open:40.72,High:40.94,Low:40.01,Close:40.16,Volume:80721800}, + {Date:1395662400000,Open:40.34,High:40.64,Low:39.86,Close:40.5,Volume:46098400}, + {Date:1395748800000,Open:40.66,High:40.99,Low:39.96,Close:40.34,Volume:43193100}, + {Date:1395835200000,Open:40.48,High:40.71,Low:39.6,Close:39.79,Volume:41977500}, + {Date:1395921600000,Open:39.74,High:39.97,Low:39.34,Close:39.36,Volume:35369200}, + {Date:1396008000000,Open:39.79,High:40.64,Low:39.68,Close:40.3,Volume:43472700}, + {Date:1396267200000,Open:40.43,High:41.5,Low:40.4,Close:40.99,Volume:46886300}, + {Date:1396353600000,Open:41.15,High:41.59,Low:41.07,Close:41.42,Volume:32605000}, + {Date:1396440000000,Open:41.44,High:41.66,Low:41.17,Close:41.35,Volume:28666700}, + {Date:1396526400000,Open:41.29,High:41.29,Low:40.71,Close:41.01,Volume:30139600}, + {Date:1396612800000,Open:41.25,High:41.39,Low:39.64,Close:39.87,Volume:51409600}, + {Date:1396872000000,Open:39.96,High:40.27,Low:39.74,Close:39.8,Volume:37559600}, + {Date:1396958400000,Open:39.75,High:39.93,Low:39.2,Close:39.82,Volume:35918600}, + {Date:1397044800000,Open:39.93,High:40.55,Low:39.88,Close:40.47,Volume:27398700}, + {Date:1397131200000,Open:40.44,High:40.69,Low:39.09,Close:39.36,Volume:45960800}, + {Date:1397217600000,Open:39,High:39.79,Low:39,Close:39.21,Volume:34330200}, + {Date:1397476800000,Open:39.11,High:39.41,Low:38.9,Close:39.18,Volume:32006600}, + {Date:1397563200000,Open:39.34,High:39.96,Low:39.05,Close:39.75,Volume:33968700}, + {Date:1397649600000,Open:40.06,High:40.42,Low:39.91,Close:40.4,Volume:30615800}, + {Date:1397736000000,Open:40.01,High:40.2,Low:39.51,Close:40.01,Volume:36688400}, + {Date:1398081600000,Open:40.13,High:40.15,Low:39.79,Close:39.94,Volume:22221200}, + {Date:1398168000000,Open:39.96,High:40.14,Low:39.83,Close:39.99,Volume:27056700}, + {Date:1398254400000,Open:39.99,High:39.99,Low:39.47,Close:39.69,Volume:24602800}, + {Date:1398340800000,Open:39.74,High:39.97,Low:39.3,Close:39.86,Volume:42381600}, + {Date:1398427200000,Open:40.29,High:40.68,Low:39.75,Close:39.91,Volume:56876800}, + {Date:1398686400000,Open:40.14,High:41.29,Low:40.09,Close:40.87,Volume:50610200}, + {Date:1398772800000,Open:41.1,High:41.19,Low:40.39,Close:40.51,Volume:29636200}, + {Date:1398859200000,Open:40.4,High:40.5,Low:40.17,Close:40.4,Volume:35458700}, + {Date:1398945600000,Open:40.24,High:40.36,Low:39.95,Close:40,Volume:28787400}, + {Date:1399032000000,Open:40.31,High:40.34,Low:39.66,Close:39.69,Volume:43416600}, + {Date:1399291200000,Open:39.52,High:39.64,Low:39.3,Close:39.43,Volume:22460900}, + {Date:1399377600000,Open:39.29,High:39.35,Low:38.95,Close:39.06,Volume:27112400}, + {Date:1399464000000,Open:39.22,High:39.51,Low:38.51,Close:39.42,Volume:41744500}, + {Date:1399550400000,Open:39.34,High:39.9,Low:38.97,Close:39.64,Volume:32120400}, + {Date:1399636800000,Open:39.54,High:39.85,Low:39.37,Close:39.54,Volume:29647600}, + {Date:1399896000000,Open:39.74,High:40.02,Low:39.65,Close:39.97,Volume:22782600}, + {Date:1399982400000,Open:39.92,High:40.5,Low:39.85,Close:40.42,Volume:27004800}, + {Date:1400068800000,Open:40.3,High:40.45,Low:40.05,Close:40.24,Volume:18818700}, + {Date:1400155200000,Open:40.09,High:40.4,Low:39.51,Close:39.6,Volume:37793200}, + {Date:1400241600000,Open:39.67,High:39.84,Low:39.27,Close:39.83,Volume:29867100}, + {Date:1400500800000,Open:39.61,High:39.82,Low:39.46,Close:39.75,Volume:24537400}, + {Date:1400587200000,Open:39.68,High:39.94,Low:39.46,Close:39.68,Volume:21320900}, + {Date:1400673600000,Open:39.8,High:40.35,Low:39.74,Close:40.35,Volume:22398700}, + {Date:1400760000000,Open:40.29,High:40.35,Low:39.85,Close:40.1,Volume:20201800}, + {Date:1400846400000,Open:40.37,High:40.37,Low:40,Close:40.12,Volume:18020000}, + {Date:1401192000000,Open:40.26,High:40.26,Low:39.81,Close:40.19,Volume:26160600}, + {Date:1401278400000,Open:40.14,High:40.19,Low:39.82,Close:40.01,Volume:25711500}, + {Date:1401364800000,Open:40.15,High:40.35,Low:39.91,Close:40.34,Volume:19888200}, + {Date:1401451200000,Open:40.45,High:40.97,Low:40.25,Close:40.94,Volume:34567600}, + {Date:1401710400000,Open:40.95,High:41.09,Low:40.68,Close:40.79,Volume:18504300}, + {Date:1401796800000,Open:40.6,High:40.68,Low:40.25,Close:40.29,Volume:18068900}, + {Date:1401883200000,Open:40.21,High:40.37,Low:39.86,Close:40.32,Volume:23209000}, + {Date:1401969600000,Open:40.59,High:41.25,Low:40.4,Close:41.21,Volume:31865200}, + {Date:1402056000000,Open:41.48,High:41.66,Low:41.24,Close:41.48,Volume:24060500}, + {Date:1402315200000,Open:41.39,High:41.48,Low:41.02,Close:41.27,Volume:15019200}, + {Date:1402401600000,Open:41.03,High:41.16,Low:40.86,Close:41.11,Volume:15117700}, + {Date:1402488000000,Open:40.93,High:41.07,Low:40.77,Close:40.86,Volume:18040000}, + {Date:1402574400000,Open:40.81,High:40.88,Low:40.29,Close:40.58,Volume:29818900}, + {Date:1402660800000,Open:41.1,High:41.57,Low:40.86,Close:41.23,Volume:26310000}, + {Date:1402920000000,Open:41.04,High:41.61,Low:41.04,Close:41.5,Volume:24205300}, + {Date:1403006400000,Open:41.29,High:41.91,Low:40.34,Close:41.68,Volume:22518600}, + {Date:1403092800000,Open:41.61,High:41.74,Low:41.18,Close:41.65,Volume:27097000}, + {Date:1403179200000,Open:41.57,High:41.77,Low:41.33,Close:41.51,Volume:19828200}, + {Date:1403265600000,Open:41.45,High:41.83,Low:41.38,Close:41.68,Volume:47764900}, + {Date:1403524800000,Open:41.73,High:42,Low:41.69,Close:41.99,Volume:18743900}, + {Date:1403611200000,Open:41.83,High:41.94,Low:41.56,Close:41.75,Volume:26509100}, + {Date:1403697600000,Open:41.7,High:42.05,Low:41.46,Close:42.03,Volume:20049100}, + {Date:1403784000000,Open:41.93,High:41.94,Low:41.43,Close:41.72,Volume:23604400}, + {Date:1403870400000,Open:41.61,High:42.29,Low:41.51,Close:42.25,Volume:74640000}, + {Date:1404129600000,Open:42.17,High:42.21,Low:41.7,Close:41.7,Volume:30793100}, + {Date:1404216000000,Open:41.86,High:42.15,Low:41.69,Close:41.87,Volume:26917000}, + {Date:1404302400000,Open:41.73,High:41.9,Low:41.53,Close:41.9,Volume:20208100}, + {Date:1404388800000,Open:41.91,High:41.99,Low:41.56,Close:41.8,Volume:15969300}, + {Date:1404734400000,Open:41.75,High:42.12,Low:41.71,Close:41.99,Volume:21952400}, + {Date:1404820800000,Open:41.87,High:42,Low:41.61,Close:41.78,Volume:31218200}, + {Date:1404907200000,Open:41.98,High:41.99,Low:41.53,Close:41.67,Volume:18445900}, + {Date:1404993600000,Open:41.37,High:42,Low:41.05,Close:41.69,Volume:21854700}, + {Date:1405080000000,Open:41.7,High:42.09,Low:41.48,Close:42.09,Volume:24083000}, + {Date:1405339200000,Open:42.22,High:42.45,Low:42.04,Close:42.14,Volume:21881100}, + {Date:1405425600000,Open:42.33,High:42.47,Low:42.03,Close:42.45,Volume:28748700}, + {Date:1405512000000,Open:42.51,High:44.31,Low:42.48,Close:44.08,Volume:63318000}, + {Date:1405598400000,Open:45.45,High:45.71,Low:44.25,Close:44.53,Volume:82180300}, + {Date:1405684800000,Open:44.65,High:44.84,Low:44.25,Close:44.69,Volume:43407500}, + {Date:1405944000000,Open:44.56,High:45.16,Low:44.22,Close:44.84,Volume:37604400}, + {Date:1406030400000,Open:45,High:45.15,Low:44.59,Close:44.83,Volume:43095800}, + {Date:1406116800000,Open:45.45,High:45.45,Low:44.62,Close:44.87,Volume:52362900}, + {Date:1406203200000,Open:44.93,High:45,Low:44.32,Close:44.4,Volume:30725300}, + {Date:1406289600000,Open:44.3,High:44.66,Low:44.3,Close:44.5,Volume:26737700}, + {Date:1406548800000,Open:44.36,High:44.51,Low:43.93,Close:43.97,Volume:29684200}, + {Date:1406635200000,Open:43.91,High:44.09,Low:43.64,Close:43.89,Volume:27763100}, + {Date:1406721600000,Open:44.07,High:44.1,Low:43.29,Close:43.58,Volume:31921400}, + {Date:1406808000000,Open:43.38,High:43.69,Low:43.08,Close:43.16,Volume:31537500}, + {Date:1406894400000,Open:43.21,High:43.25,Low:42.6,Close:42.86,Volume:31170300}, + {Date:1407153600000,Open:42.97,High:43.47,Low:42.81,Close:43.37,Volume:34277400}, + {Date:1407240000000,Open:43.31,High:43.46,Low:42.83,Close:43.08,Volume:26266400}, + {Date:1407326400000,Open:42.74,High:43.17,Low:42.21,Close:42.74,Volume:24634000}, + {Date:1407412800000,Open:42.84,High:43.45,Low:42.65,Close:43.23,Volume:30314900}, + {Date:1407499200000,Open:43.23,High:43.32,Low:42.91,Close:43.2,Volume:28942700}, + {Date:1407758400000,Open:43.26,High:43.45,Low:43.02,Close:43.2,Volume:20351600}, + {Date:1407844800000,Open:43.04,High:43.59,Low:43,Close:43.52,Volume:21431100}, + {Date:1407931200000,Open:43.68,High:44.18,Low:43.52,Close:44.08,Volume:22889500}, + {Date:1408017600000,Open:44.08,High:44.42,Low:44.01,Close:44.27,Volume:19313200}, + {Date:1408104000000,Open:44.58,High:44.9,Low:44.4,Close:44.79,Volume:41611300}, + {Date:1408363200000,Open:44.94,High:45.11,Low:44.68,Close:45.11,Volume:26891100}, + {Date:1408449600000,Open:44.97,High:45.34,Low:44.83,Close:45.33,Volume:28139500}, + {Date:1408536000000,Open:45.34,High:45.4,Low:44.9,Close:44.95,Volume:24770500}, + {Date:1408622400000,Open:44.84,High:45.25,Low:44.83,Close:45.22,Volume:22285500}, + {Date:1408708800000,Open:45.35,High:45.47,Low:45.07,Close:45.15,Volume:18294500}, + {Date:1408968000000,Open:45.4,High:45.44,Low:45.04,Close:45.17,Volume:16910000}, + {Date:1409054400000,Open:45.31,High:45.4,Low:44.94,Close:45.01,Volume:14873100}, + {Date:1409140800000,Open:44.9,High:45,Low:44.76,Close:44.87,Volume:21287900}, + {Date:1409227200000,Open:44.75,High:44.98,Low:44.61,Close:44.88,Volume:17657600}, + {Date:1409313600000,Open:45.09,High:45.44,Low:44.86,Close:45.43,Volume:21607600}, + {Date:1409659200000,Open:45.43,High:45.46,Low:44.85,Close:45.09,Volume:22976800}, + {Date:1409745600000,Open:44.53,High:45.11,Low:44.53,Close:44.96,Volume:33684500}, + {Date:1409832000000,Open:44.74,High:45.27,Low:44.72,Close:45.26,Volume:26475500}, + {Date:1409918400000,Open:45.11,High:45.93,Low:45.11,Close:45.91,Volume:36939400}, + {Date:1410177600000,Open:46.02,High:46.8,Low:45.99,Close:46.47,Volume:45736700}, + {Date:1410264000000,Open:46.47,High:46.97,Low:46.42,Close:46.76,Volume:40302400}, + {Date:1410350400000,Open:46.82,High:46.94,Low:46.28,Close:46.84,Volume:27302400}, + {Date:1410436800000,Open:46.74,High:47,Low:46.47,Close:47,Volume:29216400}, + {Date:1410523200000,Open:46.91,High:47.02,Low:46.6,Close:46.7,Volume:38244700}, + {Date:1410782400000,Open:46.54,High:46.71,Low:46.1,Close:46.24,Volume:37667600}, + {Date:1410868800000,Open:46.39,High:46.85,Low:46.29,Close:46.76,Volume:27910600}, + {Date:1410955200000,Open:46.26,High:46.69,Low:46.23,Close:46.52,Volume:38311900}, + {Date:1411041600000,Open:46.59,High:46.83,Low:46.46,Close:46.68,Volume:35556600}, + {Date:1411128000000,Open:46.81,High:47.57,Low:46.6,Close:47.52,Volume:202522400}, + {Date:1411387200000,Open:47.3,High:47.38,Low:46.98,Close:47.06,Volume:38686100}, + {Date:1411473600000,Open:46.85,High:46.98,Low:46.47,Close:46.56,Volume:33430300}, + {Date:1411560000000,Open:46.63,High:47.11,Low:46.34,Close:47.08,Volume:26582700}, + {Date:1411646400000,Open:46.88,High:47.09,Low:46.03,Close:46.04,Volume:33077400}, + {Date:1411732800000,Open:45.93,High:46.62,Low:45.76,Close:46.41,Volume:27078800}, + {Date:1411992000000,Open:45.98,High:46.56,Low:45.76,Close:46.44,Volume:26091000}, + {Date:1412078400000,Open:46.37,High:46.48,Low:46.01,Close:46.36,Volume:33033100}, + {Date:1412164800000,Open:46.27,High:46.53,Low:45.85,Close:45.9,Volume:38088400}, + {Date:1412251200000,Open:45.83,High:46.1,Low:45.64,Close:45.76,Volume:25119400}, + {Date:1412337600000,Open:45.98,High:46.3,Low:45.61,Close:46.09,Volume:32453200}, + {Date:1412596800000,Open:46.12,High:46.3,Low:45.92,Close:46.09,Volume:20604000}, + {Date:1412683200000,Open:45.86,High:45.93,Low:45.42,Close:45.53,Volume:25723700}, + {Date:1412769600000,Open:45.48,High:46.89,Low:45.34,Close:46.78,Volume:33031000}, + {Date:1412856000000,Open:46.5,High:46.8,Low:45.74,Close:45.85,Volume:34422800}, + {Date:1412942400000,Open:45.6,High:46.12,Low:43.95,Close:44.03,Volume:51978100}, + {Date:1413201600000,Open:43.82,High:44.56,Low:43.49,Close:43.65,Volume:37100200}, + {Date:1413288000000,Open:43.87,High:44.38,Low:43.56,Close:43.73,Volume:38115700}, + {Date:1413374400000,Open:43,High:43.39,Low:42.1,Close:43.22,Volume:60218700}, + {Date:1413460800000,Open:42.53,High:43.08,Low:42.22,Close:42.74,Volume:49040400}, + {Date:1413547200000,Open:43.2,High:43.94,Low:42.79,Close:43.63,Volume:40683300}, + {Date:1413806400000,Open:43.06,High:44.14,Low:42.81,Close:44.08,Volume:34527900}, + {Date:1413892800000,Open:44.36,High:44.98,Low:44.19,Close:44.88,Volume:36433800}, + {Date:1413979200000,Open:45,High:45.07,Low:44.23,Close:44.38,Volume:33570900}, + {Date:1414065600000,Open:44.62,High:45.45,Low:44.53,Close:45.02,Volume:45451900}, + {Date:1414152000000,Open:46.83,High:46.9,Low:45.18,Close:46.13,Volume:61076700}, + {Date:1414411200000,Open:45.71,High:46.1,Low:45.71,Close:45.91,Volume:30371300}, + {Date:1414497600000,Open:45.86,High:46.5,Low:45.77,Close:46.49,Volume:29049800}, + {Date:1414584000000,Open:46.44,High:46.7,Low:46.34,Close:46.62,Volume:30276100}, + {Date:1414670400000,Open:46.32,High:46.32,Low:45.77,Close:46.05,Volume:30073900}, + {Date:1414756800000,Open:46.94,High:46.97,Low:46.48,Close:46.95,Volume:35849700}, + {Date:1415016000000,Open:46.89,High:47.46,Low:46.73,Close:47.44,Volume:23130400}, + {Date:1415102400000,Open:47.3,High:47.73,Low:47.25,Close:47.57,Volume:21530800}, + {Date:1415188800000,Open:47.8,High:47.9,Low:47.26,Close:47.86,Volume:22449600}, + {Date:1415275200000,Open:47.86,High:48.86,Low:47.79,Close:48.7,Volume:33037800}, + {Date:1415361600000,Open:48.92,High:48.92,Low:48.29,Close:48.68,Volume:28000600}, + {Date:1415620800000,Open:48.65,High:49.15,Low:48.55,Close:48.89,Volume:36370100}, + {Date:1415707200000,Open:48.85,High:48.95,Low:48.65,Close:48.87,Volume:23445200}, + {Date:1415793600000,Open:48.56,High:48.92,Low:48.52,Close:48.78,Volume:22722100}, + {Date:1415880000000,Open:48.81,High:49.65,Low:48.71,Close:49.61,Volume:26210400}, + {Date:1415966400000,Open:49.74,High:50.05,Low:49.39,Close:49.58,Volume:29081700}, + {Date:1416225600000,Open:49.41,High:49.71,Low:49.14,Close:49.46,Volume:30318600}, + {Date:1416312000000,Open:49.13,High:49.33,Low:48.7,Close:48.74,Volume:23995500}, + {Date:1416398400000,Open:48.66,High:48.75,Low:47.93,Close:48.22,Volume:26177500}, + {Date:1416484800000,Open:48,High:48.7,Low:47.87,Close:48.7,Volume:21510600}, + {Date:1416571200000,Open:49.02,High:49.05,Low:47.57,Close:47.98,Volume:42884800}, + {Date:1416830400000,Open:47.99,High:48,Low:47.39,Close:47.59,Volume:35434200}, + {Date:1416916800000,Open:47.66,High:47.97,Low:47.45,Close:47.47,Volume:28008000}, + {Date:1417003200000,Open:47.49,High:47.99,Low:47.28,Close:47.75,Volume:27163600}, + {Date:1417176000000,Open:47.95,High:48.2,Low:47.61,Close:47.81,Volume:21534400}, + {Date:1417435200000,Open:47.88,High:48.78,Low:47.71,Close:48.62,Volume:31191600}, + {Date:1417521600000,Open:48.84,High:49.05,Low:48.2,Close:48.46,Volume:25773500}, + {Date:1417608000000,Open:48.44,High:48.5,Low:47.81,Close:48.08,Volume:23534800}, + {Date:1417694400000,Open:48.39,High:49.06,Low:48.2,Close:48.84,Volume:30320400}, + {Date:1417780800000,Open:48.82,High:48.97,Low:48.38,Close:48.42,Volume:27313400}, + {Date:1418040000000,Open:48.26,High:48.35,Low:47.45,Close:47.7,Volume:26663100}, + {Date:1418126400000,Open:47.11,High:47.92,Low:47.05,Close:47.59,Volume:24330500}, + {Date:1418212800000,Open:47.58,High:47.66,Low:46.7,Close:46.9,Volume:30431800}, + {Date:1418299200000,Open:47.08,High:47.74,Low:46.68,Close:47.17,Volume:29060400}, + {Date:1418385600000,Open:46.78,High:47.73,Low:46.67,Close:46.95,Volume:34248400}, + {Date:1418644800000,Open:47.2,High:47.67,Low:46.55,Close:46.67,Volume:29247800}, + {Date:1418731200000,Open:45.9,High:46.34,Low:45.13,Close:45.16,Volume:47801400}, + {Date:1418817600000,Open:45.05,High:45.95,Low:44.9,Close:45.74,Volume:34970900}, + {Date:1418904000000,Open:46.58,High:47.52,Low:46.34,Close:47.52,Volume:40105600}, + {Date:1418990400000,Open:47.63,High:48.1,Low:47.17,Close:47.66,Volume:64551200}, + {Date:1419249600000,Open:47.78,High:48.12,Low:47.71,Close:47.98,Volume:26566000}, + {Date:1419336000000,Open:48.37,High:48.8,Low:48.13,Close:48.45,Volume:23648100}, + {Date:1419422400000,Open:48.64,High:48.64,Low:48.08,Close:48.14,Volume:11437800}, + {Date:1419595200000,Open:48.41,High:48.41,Low:47.82,Close:47.88,Volume:13197800}, + {Date:1419854400000,Open:47.7,High:47.78,Low:47.26,Close:47.45,Volume:14439500}, + {Date:1419940800000,Open:47.44,High:47.62,Low:46.84,Close:47.02,Volume:16384700}, + {Date:1420027200000,Open:46.73,High:47.44,Low:46.45,Close:46.45,Volume:21552500}, + {Date:1420200000000,Open:46.66,High:47.42,Low:46.54,Close:46.76,Volume:27913900}, + {Date:1420459200000,Open:46.37,High:46.73,Low:46.25,Close:46.33,Volume:39673900}, + {Date:1420545600000,Open:46.38,High:46.75,Low:45.54,Close:45.65,Volume:36447900}, + {Date:1420632000000,Open:45.98,High:46.46,Low:45.49,Close:46.23,Volume:29114100}, + {Date:1420718400000,Open:46.75,High:47.75,Low:46.72,Close:47.59,Volume:29645200}, + {Date:1420804800000,Open:47.61,High:47.82,Low:46.9,Close:47.19,Volume:23944200}, + {Date:1421064000000,Open:47.42,High:47.54,Low:46.36,Close:46.6,Volume:23651900}, + {Date:1421150400000,Open:46.97,High:47.91,Low:46.06,Close:46.36,Volume:35270600}, + {Date:1421236800000,Open:45.96,High:46.24,Low:45.62,Close:45.96,Volume:29719600}, + {Date:1421323200000,Open:46.22,High:46.38,Low:45.41,Close:45.48,Volume:32750800}, + {Date:1421409600000,Open:45.31,High:46.28,Low:45.17,Close:46.24,Volume:35695300}, + {Date:1421755200000,Open:46.3,High:46.65,Low:45.57,Close:46.39,Volume:36161900}, + {Date:1421841600000,Open:45.94,High:46.14,Low:45.48,Close:45.92,Volume:39081100}, + {Date:1421928000000,Open:46.38,High:47.14,Low:46.08,Close:47.13,Volume:35898000}, + {Date:1422014400000,Open:47.36,High:47.39,Low:46.8,Close:47.18,Volume:26211600}, + {Date:1422273600000,Open:47,High:47.13,Low:46.24,Close:47.01,Volume:42525500}, + {Date:1422360000000,Open:42.95,High:43.2,Low:42.11,Close:42.66,Volume:169164000}, + {Date:1422446400000,Open:42.74,High:42.79,Low:41.16,Close:41.19,Volume:84507100}, + {Date:1422532800000,Open:40.93,High:42.12,Low:40.79,Close:42.01,Volume:63585300}, + {Date:1422619200000,Open:41.55,High:41.58,Low:40.35,Close:40.4,Volume:78004900}, + {Date:1422878400000,Open:40.59,High:41.37,Low:40.23,Close:41.28,Volume:50352500}, + {Date:1422964800000,Open:41.63,High:41.93,Low:41.05,Close:41.6,Volume:52082400}, + {Date:1423051200000,Open:41.94,High:42.21,Low:41.36,Close:41.84,Volume:41614800}, + {Date:1423137600000,Open:42.22,High:42.64,Low:41.86,Close:42.45,Volume:36548200}, + {Date:1423224000000,Open:42.68,High:42.79,Low:42.15,Close:42.41,Volume:34616600}, + {Date:1423483200000,Open:42.24,High:42.74,Low:42.21,Close:42.36,Volume:31381100}, + {Date:1423569600000,Open:42.74,High:42.77,Low:42.18,Close:42.6,Volume:29670700}, + {Date:1423656000000,Open:42.65,High:42.65,Low:42.21,Close:42.38,Volume:38262500}, + {Date:1423742400000,Open:42.66,High:43.09,Low:42.51,Close:43.09,Volume:33268800}, + {Date:1423828800000,Open:43.38,High:43.87,Low:43.15,Close:43.87,Volume:40264900}, + {Date:1424174400000,Open:43.97,High:44,Low:43.19,Close:43.58,Volume:33695700}, + {Date:1424260800000,Open:43.63,High:43.7,Low:43.39,Close:43.53,Volume:27111700}, + {Date:1424347200000,Open:43.18,High:43.53,Low:43.05,Close:43.5,Volume:27603400}, + {Date:1424433600000,Open:43.51,High:43.88,Low:43.29,Close:43.86,Volume:29721100}, + {Date:1424692800000,Open:43.7,High:44.19,Low:43.65,Close:44.15,Volume:32518800}, + {Date:1424779200000,Open:44.15,High:44.3,Low:43.92,Close:44.09,Volume:25271700}, + {Date:1424865600000,Open:43.95,High:44.09,Low:43.8,Close:43.99,Volume:29759800}, + {Date:1424952000000,Open:43.99,High:44.23,Low:43.89,Close:44.06,Volume:28957300}, + {Date:1425038400000,Open:44.13,High:44.2,Low:43.66,Close:43.85,Volume:33807700}, + {Date:1425297600000,Open:43.67,High:44.19,Low:43.55,Close:43.88,Volume:31924000}, + {Date:1425384000000,Open:43.56,High:43.83,Low:43.09,Close:43.28,Volume:31748600}, + {Date:1425470400000,Open:43.01,High:43.21,Low:42.88,Close:43.06,Volume:25748700}, + {Date:1425556800000,Open:43.07,High:43.24,Low:42.82,Close:43.11,Volume:23193500}, + {Date:1425643200000,Open:43,High:43.11,Low:42.15,Close:42.36,Volume:36248800}, + {Date:1425902400000,Open:42.19,High:43.13,Low:42.19,Close:42.85,Volume:32108000}, + {Date:1425988800000,Open:42.35,High:42.71,Low:42.03,Close:42.03,Volume:39159700}, + {Date:1426075200000,Open:42.31,High:42.37,Low:41.84,Close:41.98,Volume:32215300}, + {Date:1426161600000,Open:41.33,High:41.65,Low:40.86,Close:41.02,Volume:59992500}, + {Date:1426248000000,Open:40.7,High:41.47,Low:40.61,Close:41.38,Volume:58007700}, + {Date:1426507200000,Open:41.47,High:41.64,Low:41.28,Close:41.56,Volume:35273500}, + {Date:1426593600000,Open:41.37,High:41.83,Low:41.15,Close:41.7,Volume:31673400}, + {Date:1426680000000,Open:41.43,High:42.83,Low:41.33,Close:42.5,Volume:44194800}, + {Date:1426766400000,Open:42.26,High:42.59,Low:42.22,Close:42.29,Volume:33879100}, + {Date:1426852800000,Open:42.56,High:42.98,Low:42.49,Close:42.88,Volume:71904500}, + {Date:1427112000000,Open:42.88,High:43.13,Low:42.78,Close:42.86,Volume:26246100}, + {Date:1427198400000,Open:42.78,High:43.17,Low:42.75,Close:42.9,Volume:25513300}, + {Date:1427284800000,Open:42.92,High:42.93,Low:41.44,Close:41.46,Volume:43469900}, + {Date:1427371200000,Open:41.22,High:41.61,Low:40.92,Close:41.21,Volume:37495600}, + {Date:1427457600000,Open:41.12,High:41.43,Low:40.83,Close:40.97,Volume:34401400}, + {Date:1427716800000,Open:41.1,High:41.54,Low:40.91,Close:40.96,Volume:35049700}, + {Date:1427803200000,Open:40.78,High:41.03,Low:40.54,Close:40.66,Volume:34887200}, + {Date:1427889600000,Open:40.6,High:40.76,Low:40.31,Close:40.72,Volume:36865300}, + {Date:1427976000000,Open:40.66,High:40.74,Low:40.12,Close:40.29,Volume:37487500}, + {Date:1428321600000,Open:40.34,High:41.78,Low:40.18,Close:41.55,Volume:39223700}, + {Date:1428408000000,Open:41.61,High:41.91,Low:41.31,Close:41.53,Volume:28809400}, + {Date:1428494400000,Open:41.46,High:41.69,Low:41.04,Close:41.42,Volume:24753400}, + {Date:1428580800000,Open:41.25,High:41.62,Low:41.25,Close:41.48,Volume:25723900}, + {Date:1428667200000,Open:41.63,High:41.95,Low:41.41,Close:41.72,Volume:28022000}, + {Date:1428926400000,Open:41.4,High:42.06,Low:41.39,Close:41.76,Volume:30276700}, + {Date:1429012800000,Open:41.8,High:42.03,Low:41.39,Close:41.65,Volume:24244400}, + {Date:1429099200000,Open:41.76,High:42.46,Low:41.68,Close:42.26,Volume:27343600}, + {Date:1429185600000,Open:41.95,High:42.34,Low:41.82,Close:42.16,Volume:22509700}, + {Date:1429272000000,Open:41.67,High:41.74,Low:41.16,Close:41.62,Volume:42387600}, + {Date:1429531200000,Open:41.73,High:43.17,Low:41.68,Close:42.91,Volume:46057700}, + {Date:1429617600000,Open:43,High:43.15,Low:42.53,Close:42.64,Volume:26013800}, + {Date:1429704000000,Open:42.67,High:43.13,Low:42.55,Close:42.99,Volume:25064300}, + {Date:1429790400000,Open:42.89,High:43.61,Low:42.8,Close:43.34,Volume:46309500}, + {Date:1429876800000,Open:45.66,High:48.14,Low:45.65,Close:47.87,Volume:130933700}, + {Date:1430136000000,Open:47.23,High:48.13,Low:47.22,Close:48.03,Volume:59248200}, + {Date:1430222400000,Open:47.78,High:49.21,Low:47.7,Close:49.16,Volume:60730800}, + {Date:1430308800000,Open:48.72,High:49.31,Low:48.5,Close:49.06,Volume:47804600}, + {Date:1430395200000,Open:48.7,High:49.54,Low:48.6,Close:48.64,Volume:64725500}, + {Date:1430481600000,Open:48.58,High:48.88,Low:48.4,Close:48.66,Volume:38937300}, + {Date:1430740800000,Open:48.37,High:48.87,Low:48.18,Close:48.24,Volume:34039500}, + {Date:1430827200000,Open:47.82,High:48.16,Low:47.31,Close:47.6,Volume:50369200}, + {Date:1430913600000,Open:47.57,High:47.77,Low:46.02,Close:46.28,Volume:52433000}, + {Date:1431000000000,Open:46.27,High:47.09,Low:46.16,Close:46.7,Volume:32971700}, + {Date:1431086400000,Open:47.55,High:47.98,Low:47.52,Close:47.75,Volume:35364900}, + {Date:1431345600000,Open:47.55,High:47.91,Low:47.37,Close:47.37,Volume:24609400}, + {Date:1431432000000,Open:46.85,High:47.68,Low:46.42,Close:47.35,Volume:29928300}, + {Date:1431518400000,Open:48.19,High:48.32,Low:47.57,Close:47.63,Volume:34184600}, + {Date:1431604800000,Open:48.03,High:48.82,Low:48.03,Close:48.72,Volume:32980900}, + {Date:1431691200000,Open:48.87,High:48.91,Low:48.05,Close:48.3,Volume:28642700}, + {Date:1431950400000,Open:47.98,High:48.22,Low:47.61,Close:48.01,Volume:24136500}, + {Date:1432036800000,Open:47.56,High:47.81,Low:47.18,Close:47.58,Volume:28574800}, + {Date:1432123200000,Open:47.39,High:47.93,Low:47.27,Close:47.58,Volume:25047900}, + {Date:1432209600000,Open:47.28,High:47.6,Low:47.01,Close:47.42,Volume:22410700}, + {Date:1432296000000,Open:47.3,High:47.35,Low:46.82,Close:46.9,Volume:25720600}, + {Date:1432641600000,Open:46.83,High:46.88,Low:46.19,Close:46.59,Volume:29581900}, + {Date:1432728000000,Open:46.82,High:47.77,Low:46.62,Close:47.61,Volume:27335600}, + {Date:1432814400000,Open:47.5,High:48.02,Low:47.39,Close:47.45,Volume:19283700}, + {Date:1432900800000,Open:47.43,High:47.57,Low:46.59,Close:46.86,Volume:36519600}, + {Date:1433160000000,Open:47.06,High:47.77,Low:46.62,Close:47.23,Volume:28837300}, + {Date:1433246400000,Open:46.93,High:47.35,Low:46.62,Close:46.92,Volume:21498300}, + {Date:1433332800000,Open:47.37,High:47.74,Low:46.82,Close:46.85,Volume:28002200}, + {Date:1433419200000,Open:46.79,High:47.16,Low:46.2,Close:46.36,Volume:27745500}, + {Date:1433505600000,Open:46.31,High:46.52,Low:45.84,Close:46.14,Volume:25438100}, + {Date:1433764800000,Open:46.3,High:46.43,Low:45.67,Close:45.73,Volume:22121600}, + {Date:1433851200000,Open:45.76,High:45.94,Low:45.46,Close:45.65,Volume:24406100}, + {Date:1433937600000,Open:45.79,High:46.83,Low:45.69,Close:46.61,Volume:28417400}, + {Date:1434024000000,Open:46.66,High:46.92,Low:46.13,Close:46.44,Volume:27347800}, + {Date:1434110400000,Open:46.22,High:46.47,Low:45.9,Close:45.97,Volume:23931000}, + {Date:1434369600000,Open:45.45,High:45.65,Low:45.02,Close:45.48,Volume:33254500}, + {Date:1434456000000,Open:45.35,High:46.24,Low:45.3,Close:45.83,Volume:27070300}, + {Date:1434542400000,Open:45.73,High:46.07,Low:45.36,Close:45.97,Volume:28704100}, + {Date:1434628800000,Open:46.22,High:46.8,Low:46.17,Close:46.72,Volume:32658300}, + {Date:1434715200000,Open:46.79,High:46.83,Low:45.99,Close:46.1,Volume:63837000}, + {Date:1434974400000,Open:46.33,High:46.72,Low:46.16,Close:46.23,Volume:20318100}, + {Date:1435060800000,Open:46.13,High:46.28,Low:45.62,Close:45.91,Volume:25896500}, + {Date:1435147200000,Open:45.67,High:46.25,Low:45.55,Close:45.64,Volume:34890900}, + {Date:1435233600000,Open:46.03,High:46.06,Low:45.5,Close:45.65,Volume:20616000}, + {Date:1435320000000,Open:45.65,High:46.28,Low:45.03,Close:45.26,Volume:49835300}, + {Date:1435579200000,Open:45.04,High:45.23,Low:44.36,Close:44.37,Volume:34081700}, + {Date:1435665600000,Open:44.71,High:44.72,Low:43.94,Close:44.15,Volume:35945400}, + {Date:1435752000000,Open:44.46,High:45.23,Low:44.1,Close:44.45,Volume:28343900}, + {Date:1435838400000,Open:44.48,High:44.75,Low:44.06,Close:44.4,Volume:21752000}, + {Date:1436184000000,Open:43.96,High:44.48,Low:43.95,Close:44.39,Volume:23034000}, + {Date:1436270400000,Open:44.34,High:44.49,Low:43.32,Close:44.3,Volume:36435800}, + {Date:1436356800000,Open:44.44,High:44.9,Low:44.03,Close:44.24,Volume:39785900}, + {Date:1436443200000,Open:44.75,High:45.22,Low:44.5,Close:44.52,Volume:32424700}, + {Date:1436529600000,Open:45.01,High:45.14,Low:44.57,Close:44.61,Volume:25465800}, + {Date:1436788800000,Open:44.98,High:45.62,Low:44.95,Close:45.54,Volume:28178300}, + {Date:1436875200000,Open:45.45,High:45.96,Low:45.31,Close:45.62,Volume:22880300}, + {Date:1436961600000,Open:45.68,High:45.89,Low:45.43,Close:45.76,Volume:26629600}, + {Date:1437048000000,Open:46.01,High:46.69,Low:45.97,Close:46.66,Volume:26271700}, + {Date:1437134400000,Open:46.55,High:46.78,Low:46.26,Close:46.62,Volume:29467100}, + {Date:1437393600000,Open:46.65,High:47.13,Low:46.44,Close:46.92,Volume:30631900}, + {Date:1437480000000,Open:46.78,High:47.33,Low:46.48,Close:47.28,Volume:42781900}, + {Date:1437566400000,Open:45.44,High:46.93,Low:45.2,Close:45.54,Volume:59152400}, + {Date:1437652800000,Open:45.27,High:46.23,Low:45.1,Close:46.11,Volume:33934000}, + {Date:1437739200000,Open:45.91,High:46.32,Low:45.8,Close:45.94,Volume:32333200}, + {Date:1437998400000,Open:45.94,High:46.01,Low:45.25,Close:45.35,Volume:39701400}, + {Date:1438084800000,Open:45.58,High:45.64,Low:44.79,Close:45.34,Volume:34328900}, + {Date:1438171200000,Open:45.4,High:46.78,Low:45.26,Close:46.29,Volume:40945900}, + {Date:1438257600000,Open:46.26,High:47.4,Low:45.93,Close:46.88,Volume:39777900}, + {Date:1438344000000,Open:47.29,High:47.37,Low:46.5,Close:46.7,Volume:31201500}, + {Date:1438603200000,Open:46.98,High:47,Low:46.45,Close:46.81,Volume:24125900}, + {Date:1438689600000,Open:46.75,High:47.71,Low:46.68,Close:47.54,Volume:33403900}, + {Date:1438776000000,Open:47.98,High:48.41,Low:47.54,Close:47.58,Volume:26959700}, + {Date:1438862400000,Open:47.71,High:47.77,Low:46.33,Close:46.62,Volume:27368000}, + {Date:1438948800000,Open:46.39,High:46.78,Low:46.26,Close:46.74,Volume:19163000}, + {Date:1439208000000,Open:46.95,High:47.49,Low:46.84,Close:47.33,Volume:23079900}, + {Date:1439294400000,Open:46.82,High:46.94,Low:45.9,Close:46.41,Volume:29237400}, + {Date:1439380800000,Open:46.19,High:46.9,Low:45.71,Close:46.74,Volume:30181400}, + {Date:1439467200000,Open:47.06,High:47.1,Low:46.49,Close:46.73,Volume:22627200}, + {Date:1439553600000,Open:46.53,High:47.1,Low:46.52,Close:47,Volume:21473400}, + {Date:1439812800000,Open:46.81,High:47.45,Low:46.57,Close:47.32,Volume:21099700}, + {Date:1439899200000,Open:46.84,High:47.43,Low:46.7,Close:47.27,Volume:23574100}, + {Date:1439985600000,Open:46.78,High:47.08,Low:46.3,Close:46.61,Volume:31485500}, + {Date:1440072000000,Open:46.07,High:46.47,Low:45.66,Close:45.66,Volume:36238200}, + {Date:1440158400000,Open:45.3,High:45.48,Low:43.07,Close:43.07,Volume:70053100}, + {Date:1440417600000,Open:40.45,High:42.69,Low:39.72,Close:41.68,Volume:88753700}, + {Date:1440504000000,Open:42.57,High:43.24,Low:40.39,Close:40.47,Volume:70616600}, + {Date:1440590400000,Open:42.01,High:42.84,Low:41.06,Close:42.71,Volume:63408000}, + {Date:1440676800000,Open:43.23,High:43.95,Low:42.93,Close:43.9,Volume:50943200}, + {Date:1440763200000,Open:43.4,High:44.15,Low:43.39,Close:43.93,Volume:28246700}, + {Date:1441022400000,Open:43.56,High:43.93,Low:43.1,Close:43.52,Volume:34441700}, + {Date:1441108800000,Open:42.17,High:42.59,Low:41.66,Close:41.82,Volume:49688900}, + {Date:1441195200000,Open:42.36,High:43.38,Low:41.88,Close:43.36,Volume:37671500}, + {Date:1441281600000,Open:43.41,High:43.98,Low:43.28,Close:43.5,Volume:28285200}, + {Date:1441368000000,Open:42.81,High:43.04,Low:42.2,Close:42.61,Volume:37138800}, + {Date:1441713600000,Open:43.3,High:44,Low:43.2,Close:43.89,Volume:32469800}, + {Date:1441800000000,Open:44.21,High:44.4,Low:42.91,Close:43.07,Volume:33469500}, + {Date:1441886400000,Open:43.12,High:43.79,Low:42.75,Close:43.29,Volume:31366600}, + {Date:1441972800000,Open:43.14,High:43.59,Low:42.94,Close:43.48,Volume:27132500}, + {Date:1442232000000,Open:43.43,High:43.44,Low:42.86,Close:43.04,Volume:23656000}, + {Date:1442318400000,Open:43.19,High:44.29,Low:43.08,Close:43.98,Volume:28882200}, + {Date:1442404800000,Open:43.97,High:44.38,Low:43.84,Close:44.3,Volume:23372200}, + {Date:1442491200000,Open:44.29,High:45,Low:44.08,Close:44.25,Volume:32768200}, + {Date:1442577600000,Open:43.5,High:43.99,Low:43.33,Close:43.48,Volume:63143700}, + {Date:1442836800000,Open:43.62,High:44.47,Low:43.6,Close:44.11,Volume:26177200}, + {Date:1442923200000,Open:43.38,High:44.05,Low:43.31,Close:43.9,Volume:28085900}, + {Date:1443009600000,Open:43.93,High:44.17,Low:43.51,Close:43.87,Volume:17145200}, + {Date:1443096000000,Open:43.45,High:44.13,Low:43.27,Close:43.91,Volume:27905600}, + {Date:1443182400000,Open:44.48,High:44.73,Low:43.76,Close:43.94,Volume:29384600}, + {Date:1443441600000,Open:43.83,High:44.09,Low:43.21,Close:43.29,Volume:27613800}, + {Date:1443528000000,Open:43.37,High:43.57,Low:43.05,Close:43.44,Volume:32763600}, + {Date:1443614400000,Open:43.88,High:44.3,Low:43.66,Close:44.26,Volume:34958900}, + {Date:1443700800000,Open:44.75,High:44.75,Low:43.75,Close:44.61,Volume:28657900}, + {Date:1443787200000,Open:44.27,High:45.57,Low:43.92,Close:45.57,Volume:41839000}, + {Date:1444046400000,Open:45.75,High:46.89,Low:45.7,Close:46.63,Volume:34369300}, + {Date:1444132800000,Open:46.33,High:47.18,Low:46.22,Close:46.75,Volume:27017200}, + {Date:1444219200000,Open:47.1,High:47.35,Low:45.95,Close:46.8,Volume:27711500}, + {Date:1444305600000,Open:46.56,High:47.52,Low:46.5,Close:47.45,Volume:33772700}, + {Date:1444392000000,Open:47.45,High:47.54,Low:46.92,Close:47.11,Volume:28600600}, + {Date:1444651200000,Open:46.98,High:47.07,Low:46.5,Close:47,Volume:19769100}, + {Date:1444737600000,Open:46.56,High:47.13,Low:46.56,Close:46.89,Volume:19987800}, + {Date:1444824000000,Open:46.65,High:47.1,Low:46.53,Close:46.68,Volume:24697800}, + {Date:1444910400000,Open:47.01,High:47.03,Low:46.53,Close:47.01,Volume:27189400}, + {Date:1444996800000,Open:47.02,High:47.54,Low:46.9,Close:47.51,Volume:26450300}, + {Date:1445256000000,Open:47.42,High:47.88,Low:47.02,Close:47.62,Volume:29387600}, + {Date:1445342400000,Open:47.44,High:47.81,Low:47.02,Close:47.77,Volume:30802200}, + {Date:1445428800000,Open:47.92,High:47.99,Low:47.11,Close:47.2,Volume:25144300}, + {Date:1445515200000,Open:47.53,High:48.95,Low:47.09,Close:48.03,Volume:56637100}, + {Date:1445601600000,Open:52.3,High:54.07,Low:52.25,Close:52.87,Volume:135227100}, + {Date:1445860800000,Open:52.53,High:54.32,Low:52.5,Close:54.25,Volume:64633300}, + {Date:1445947200000,Open:53.99,High:54.37,Low:53.58,Close:53.69,Volume:50999900}, + {Date:1446033600000,Open:53.54,High:53.98,Low:52.86,Close:53.98,Volume:47000800}, + {Date:1446120000000,Open:53.54,High:53.83,Low:53.22,Close:53.36,Volume:30202100}, + {Date:1446206400000,Open:53.32,High:53.99,Low:52.62,Close:52.64,Volume:46619800}, + {Date:1446465600000,Open:52.85,High:53.36,Low:52.62,Close:53.24,Volume:30285000}, + {Date:1446552000000,Open:52.93,High:54.39,Low:52.9,Close:54.15,Volume:36596900}, + {Date:1446638400000,Open:54.18,High:54.88,Low:54.06,Close:54.4,Volume:37087800}, + {Date:1446724800000,Open:54.49,High:54.7,Low:54,Close:54.38,Volume:31468500}, + {Date:1446811200000,Open:54.09,High:54.98,Low:53.96,Close:54.92,Volume:32851200}, + {Date:1447070400000,Open:54.55,High:54.87,Low:53.56,Close:54.16,Volume:32513100}, + {Date:1447156800000,Open:54.07,High:54.13,Low:53.27,Close:53.51,Volume:55283700}, + {Date:1447243200000,Open:53.7,High:54.2,Low:53.46,Close:53.65,Volume:36516300}, + {Date:1447329600000,Open:53.48,High:53.98,Low:53.19,Close:53.32,Volume:35361100}, + {Date:1447416000000,Open:53.07,High:53.29,Low:52.53,Close:52.84,Volume:36848200}, + {Date:1447675200000,Open:53.08,High:53.89,Low:52.85,Close:53.77,Volume:32165200}, + {Date:1447761600000,Open:53.17,High:53.53,Low:52.85,Close:52.97,Volume:31551300}, + {Date:1447848000000,Open:53,High:53.98,Low:52.98,Close:53.85,Volume:29710000}, + {Date:1447934400000,Open:53.99,High:54.66,Low:53.78,Close:53.94,Volume:28149200}, + {Date:1448020800000,Open:54.25,High:54.3,Low:53.27,Close:54.19,Volume:37147600}, + {Date:1448280000000,Open:54.25,High:54.46,Low:53.75,Close:54.19,Volume:28235900}, + {Date:1448366400000,Open:53.92,High:54.44,Low:53.58,Close:54.25,Volume:24600000}, + {Date:1448452800000,Open:54.09,High:54.23,Low:53.69,Close:53.69,Volume:21005100}, + {Date:1448625600000,Open:53.8,High:54.08,Low:53.79,Close:53.93,Volume:9009100}, + {Date:1448884800000,Open:54.54,High:54.96,Low:54,Close:54.35,Volume:56241400}, + {Date:1448971200000,Open:54.41,High:55.23,Low:54.3,Close:55.22,Volume:39952800}, + {Date:1449057600000,Open:55.32,High:55.96,Low:55.06,Close:55.21,Volume:47274900}, + {Date:1449144000000,Open:55.49,High:55.77,Low:53.93,Close:54.2,Volume:38627800}, + {Date:1449230400000,Open:54.12,High:56.23,Low:54.1,Close:55.91,Volume:43963700}, + {Date:1449489600000,Open:55.79,High:55.97,Low:55.29,Close:55.81,Volume:30709800}, + {Date:1449576000000,Open:55.47,High:56.1,Low:54.99,Close:55.79,Volume:32878000}, + {Date:1449662400000,Open:55.37,High:55.87,Low:54.51,Close:54.98,Volume:36373200}, + {Date:1449748800000,Open:55.39,High:55.66,Low:55.01,Close:55.27,Volume:31775800}, + {Date:1449835200000,Open:54.71,High:55.1,Low:54.01,Close:54.06,Volume:39549500}, + {Date:1450094400000,Open:54.33,High:55.21,Low:53.68,Close:55.14,Volume:46768900}, + {Date:1450180800000,Open:55.66,High:55.9,Low:55.09,Close:55.2,Volume:39843000}, + {Date:1450267200000,Open:55.54,High:56.25,Low:54.76,Close:56.13,Volume:37503300}, + {Date:1450353600000,Open:56.36,High:56.79,Low:55.53,Close:55.7,Volume:41280900}, + {Date:1450440000000,Open:55.77,High:56,Low:54.03,Close:54.13,Volume:84684200}, + {Date:1450699200000,Open:54.88,High:55.35,Low:54.23,Close:54.83,Volume:37246300}, + {Date:1450785600000,Open:54.99,High:55.48,Low:54.5,Close:55.35,Volume:28322200}, + {Date:1450872000000,Open:55.7,High:55.88,Low:55.44,Close:55.82,Volume:27279800}, + {Date:1450958400000,Open:55.86,High:55.96,Low:55.43,Close:55.67,Volume:9558500}, + {Date:1451304000000,Open:55.35,High:55.95,Low:54.98,Close:55.95,Volume:22458300}, + {Date:1451390400000,Open:56.29,High:56.85,Low:56.06,Close:56.55,Volume:27731400}, + {Date:1451476800000,Open:56.47,High:56.78,Low:56.29,Close:56.31,Volume:21704500}, + {Date:1451563200000,Open:56.04,High:56.19,Low:55.42,Close:55.48,Volume:27334100}, + {Date:1451908800000,Open:54.32,High:54.8,Low:53.39,Close:54.8,Volume:53778000}, + {Date:1451995200000,Open:54.93,High:55.39,Low:54.54,Close:55.05,Volume:34079700}, + {Date:1452081600000,Open:54.32,High:54.4,Low:53.64,Close:54.05,Volume:39518900}, + {Date:1452168000000,Open:52.7,High:53.49,Low:52.07,Close:52.17,Volume:56564900}, + {Date:1452254400000,Open:52.37,High:53.28,Low:52.15,Close:52.33,Volume:48754000}, + {Date:1452513600000,Open:52.51,High:52.85,Low:51.46,Close:52.3,Volume:36943800}, + {Date:1452600000000,Open:52.76,High:53.1,Low:52.06,Close:52.78,Volume:36095500}, + {Date:1452686400000,Open:53.8,High:54.07,Low:51.3,Close:51.64,Volume:66883600}, + {Date:1452772800000,Open:52,High:53.42,Low:51.57,Close:53.11,Volume:52381900}, + {Date:1452859200000,Open:51.31,High:51.97,Low:50.34,Close:50.99,Volume:71820700}, + {Date:1453204800000,Open:51.48,High:51.68,Low:50.06,Close:50.56,Volume:43564500}, + {Date:1453291200000,Open:49.98,High:51.38,Low:49.1,Close:50.79,Volume:63273000}, + {Date:1453377600000,Open:51,High:51.58,Low:50.3,Close:50.48,Volume:40191200}, + {Date:1453464000000,Open:51.41,High:52.33,Low:51.26,Close:52.29,Volume:37555800}, + {Date:1453723200000,Open:51.94,High:52.65,Low:51.65,Close:51.79,Volume:34707700}, + {Date:1453809600000,Open:51.79,High:52.44,Low:51.55,Close:52.17,Volume:28900800}, + {Date:1453896000000,Open:52.01,High:52.2,Low:51.02,Close:51.22,Volume:36775200}, + {Date:1453982400000,Open:51.86,High:52.21,Low:51.25,Close:52.06,Volume:62513800}, + {Date:1454068800000,Open:54.73,High:55.09,Low:54,Close:55.09,Volume:83611700}, + {Date:1454328000000,Open:54.88,High:55.09,Low:54.5,Close:54.71,Volume:44208500}, + {Date:1454414400000,Open:54.17,High:54.26,Low:52.65,Close:53,Volume:56313800}, + {Date:1454500800000,Open:53.25,High:53.39,Low:51.26,Close:52.16,Volume:57559800}, + {Date:1454587200000,Open:52.1,High:52.81,Low:51.37,Close:52,Volume:46987100}, + {Date:1454673600000,Open:51.94,High:52,Low:49.56,Close:50.16,Volume:62009000}, + {Date:1454932800000,Open:49.55,High:49.57,Low:48.19,Close:49.41,Volume:59290500}, + {Date:1455019200000,Open:49.02,High:50.24,Low:48.67,Close:49.28,Volume:46740500}, + {Date:1455105600000,Open:49.89,High:50.39,Low:49.52,Close:49.71,Volume:38237000}, + {Date:1455192000000,Open:48.68,High:50.11,Low:48.51,Close:49.69,Volume:48878600}, + {Date:1455278400000,Open:50.25,High:50.68,Low:49.75,Close:50.5,Volume:34243300}, + {Date:1455624000000,Open:50.9,High:51.09,Low:50.13,Close:51.09,Volume:37291200}, + {Date:1455710400000,Open:51.49,High:52.77,Low:51.45,Close:52.42,Volume:40789000}, + {Date:1455796800000,Open:52.33,High:52.95,Low:52.1,Close:52.19,Volume:27176000}, + {Date:1455883200000,Open:51.97,High:52.28,Low:51.53,Close:51.82,Volume:33559100}, + {Date:1456142400000,Open:52.28,High:53,Low:52.28,Close:52.65,Volume:25008300}, + {Date:1456228800000,Open:52.34,High:52.37,Low:50.98,Close:51.18,Volume:28895300}, + {Date:1456315200000,Open:50.69,High:51.5,Low:50.2,Close:51.36,Volume:33014500}, + {Date:1456401600000,Open:51.73,High:52.1,Low:50.61,Close:52.1,Volume:26939500}, + {Date:1456488000000,Open:52.6,High:52.68,Low:51.1,Close:51.3,Volume:35975900}, + {Date:1456747200000,Open:51.35,High:51.65,Low:50.66,Close:50.88,Volume:31654000}, + {Date:1456833600000,Open:50.97,High:52.59,Low:50.92,Close:52.58,Volume:33024500}, + {Date:1456920000000,Open:52.41,High:52.96,Low:52.16,Close:52.95,Volume:29289900}, + {Date:1457006400000,Open:52.97,High:52.97,Low:51.78,Close:52.35,Volume:24427800}, + {Date:1457092800000,Open:52.4,High:52.45,Low:51.71,Close:52.03,Volume:33034200}, + {Date:1457352000000,Open:51.56,High:51.8,Low:50.58,Close:51.03,Volume:38407800}, + {Date:1457438400000,Open:50.8,High:52.13,Low:50.6,Close:51.65,Volume:33835100}, + {Date:1457524800000,Open:51.89,High:52.85,Low:51.86,Close:52.84,Volume:28251600}, + {Date:1457611200000,Open:52.93,High:52.94,Low:51.16,Close:52.05,Volume:38387800}, + {Date:1457697600000,Open:53,High:53.07,Low:52.38,Close:53.07,Volume:32275700}, + {Date:1457956800000,Open:52.71,High:53.59,Low:52.63,Close:53.17,Volume:24083600}, + {Date:1458043200000,Open:52.75,High:53.59,Low:52.74,Close:53.59,Volume:21104800}, + {Date:1458129600000,Open:53.45,High:54.6,Low:53.4,Close:54.35,Volume:31691700}, + {Date:1458216000000,Open:54.21,High:55,Low:54,Close:54.66,Volume:28223900}, + {Date:1458302400000,Open:54.92,High:54.97,Low:53.45,Close:53.49,Volume:67625500}, + {Date:1458561600000,Open:53.25,High:53.93,Low:52.93,Close:53.86,Volume:23925700}, + {Date:1458648000000,Open:53.61,High:54.25,Low:53.46,Close:54.07,Volume:23124100}, + {Date:1458734400000,Open:54.11,High:54.24,Low:53.74,Close:53.97,Volume:20129000}, + {Date:1458820800000,Open:53.84,High:54.33,Low:53.73,Close:54.21,Volume:19950000}, + {Date:1459166400000,Open:54.21,High:54.29,Low:53.33,Close:53.54,Volume:17025100}, + {Date:1459252800000,Open:53.66,High:54.86,Low:53.45,Close:54.71,Volume:23924300}, + {Date:1459339200000,Open:54.93,High:55.64,Low:54.9,Close:55.05,Volume:23008300}, + {Date:1459425600000,Open:54.95,High:55.59,Low:54.86,Close:55.23,Volume:26360500}, + {Date:1459512000000,Open:55.05,High:55.61,Low:54.57,Close:55.57,Volume:24399200}, + {Date:1459771200000,Open:55.43,High:55.66,Low:55,Close:55.43,Volume:18928800}, + {Date:1459857600000,Open:55.19,High:55.3,Low:54.46,Close:54.56,Volume:19272300}, + {Date:1459944000000,Open:54.36,High:55.2,Low:54.21,Close:55.12,Volume:21188700}, + {Date:1460030400000,Open:54.87,High:54.91,Low:54.23,Close:54.46,Volume:19225100}, + {Date:1460116800000,Open:54.67,High:55.28,Low:54.32,Close:54.42,Volume:22167200}, + {Date:1460376000000,Open:54.49,High:55.15,Low:54.3,Close:54.31,Volume:21414200}, + {Date:1460462400000,Open:54.37,High:54.78,Low:53.76,Close:54.65,Volume:24944300}, + {Date:1460548800000,Open:55.12,High:55.44,Low:54.89,Close:55.35,Volume:20818000}, + {Date:1460635200000,Open:55.22,High:55.58,Low:55.07,Close:55.36,Volume:20877100}, + {Date:1460721600000,Open:55.3,High:55.92,Low:55.11,Close:55.65,Volume:28793800}, + {Date:1460980800000,Open:55.49,High:56.59,Low:55.21,Close:56.46,Volume:23786000}, + {Date:1461067200000,Open:56.63,High:56.77,Low:55.68,Close:56.39,Volume:29596800}, + {Date:1461153600000,Open:56.29,High:56.5,Low:55.49,Close:55.59,Volume:36195700}, + {Date:1461240000000,Open:55.8,High:56.23,Low:55.42,Close:55.78,Volume:38909100}, + {Date:1461326400000,Open:51.91,High:52.43,Low:50.77,Close:51.78,Volume:126834100}, + {Date:1461585600000,Open:51.78,High:52.13,Low:51.63,Close:52.11,Volume:33226900}, + {Date:1461672000000,Open:52.26,High:52.35,Low:51.09,Close:51.44,Volume:33532600}, + {Date:1461758400000,Open:51.48,High:51.5,Low:50.55,Close:50.94,Volume:43369300}, + {Date:1461844800000,Open:50.62,High:50.77,Low:49.56,Close:49.9,Volume:43134800}, + {Date:1461931200000,Open:49.35,High:50.25,Low:49.35,Close:49.87,Volume:48411700}, + {Date:1462190400000,Open:50,High:50.75,Low:49.78,Close:50.61,Volume:33114500}, + {Date:1462276800000,Open:50.34,High:50.41,Low:49.6,Close:49.78,Volume:26460200}, + {Date:1462363200000,Open:49.84,High:50.06,Low:49.46,Close:49.87,Volume:24257600}, + {Date:1462449600000,Open:49.87,High:50.3,Low:49.73,Close:49.94,Volume:25390700}, + {Date:1462536000000,Open:49.92,High:50.39,Low:49.66,Close:50.39,Volume:24787300}, + {Date:1462795200000,Open:50.49,High:50.59,Low:50,Close:50.07,Volume:17951600}, + {Date:1462881600000,Open:50.33,High:51.1,Low:50.19,Close:51.02,Volume:22891000}, + {Date:1462968000000,Open:51.13,High:51.78,Low:51,Close:51.05,Volume:24039100}, + {Date:1463054400000,Open:51.2,High:51.81,Low:50.92,Close:51.51,Volume:24102800}, + {Date:1463140800000,Open:51.44,High:51.9,Low:51.04,Close:51.08,Volume:22592300}, + {Date:1463400000000,Open:50.8,High:51.96,Low:50.75,Close:51.83,Volume:20032000}, + {Date:1463486400000,Open:51.72,High:51.73,Low:50.36,Close:50.51,Volume:27803500}, + {Date:1463572800000,Open:50.48,High:51.14,Low:50.3,Close:50.81,Volume:24907500}, + {Date:1463659200000,Open:50.47,High:50.62,Low:49.82,Close:50.32,Volume:23842400}, + {Date:1463745600000,Open:50.48,High:51.22,Low:50.4,Close:50.62,Volume:23905800}, + {Date:1464004800000,Open:50.6,High:50.68,Low:49.98,Close:50.03,Volume:26118700}, + {Date:1464091200000,Open:50.7,High:51.71,Low:50.4,Close:51.59,Volume:34757900}, + {Date:1464177600000,Open:51.92,High:52.49,Low:51.79,Close:52.12,Volume:24040200}, + {Date:1464264000000,Open:51.93,High:51.98,Low:51.36,Close:51.89,Volume:24335200}, + {Date:1464350400000,Open:51.92,High:52.32,Low:51.77,Close:52.32,Volume:17721400}, + {Date:1464696000000,Open:52.26,High:53,Low:52.08,Close:53,Volume:37653100}, + {Date:1464782400000,Open:52.44,High:52.95,Low:52.44,Close:52.85,Volume:25324800}, + {Date:1464868800000,Open:52.64,High:52.74,Low:51.84,Close:52.48,Volume:22840800}, + {Date:1464955200000,Open:52.38,High:52.42,Low:51.6,Close:51.79,Volume:23368300}, + {Date:1465214400000,Open:51.99,High:52.35,Low:51.89,Close:52.13,Volume:18243300}, + {Date:1465300800000,Open:52.24,High:52.73,Low:52.1,Close:52.1,Volume:20866800}, + {Date:1465387200000,Open:52.02,High:52.44,Low:51.87,Close:52.04,Volume:21149400}, + {Date:1465473600000,Open:52,High:52,Low:51.49,Close:51.62,Volume:20305700}, + {Date:1465560000000,Open:51.05,High:52.05,Low:51.04,Close:51.48,Volume:25833200}, + {Date:1465819200000,Open:49.58,High:50.72,Low:49.06,Close:50.14,Volume:83217800}, + {Date:1465905600000,Open:49.9,High:50.1,Low:49.57,Close:49.83,Volume:42577100}, + {Date:1465992000000,Open:49.78,High:50.12,Low:49.69,Close:49.69,Volume:33757600}, + {Date:1466078400000,Open:49.52,High:50.47,Low:49.51,Close:50.39,Volume:31188600}, + {Date:1466164800000,Open:50.41,High:50.43,Low:49.82,Close:50.13,Volume:45710500}, + {Date:1466424000000,Open:50.64,High:50.83,Low:50.03,Close:50.07,Volume:35607900}, + {Date:1466510400000,Open:50.2,High:51.43,Low:50.16,Close:51.19,Volume:34097800}, + {Date:1466596800000,Open:51.08,High:51.46,Low:50.95,Close:50.99,Volume:28816800}, + {Date:1466683200000,Open:51.28,High:52.06,Low:51.15,Close:51.91,Volume:29028800}, + {Date:1466769600000,Open:49.81,High:50.94,Low:49.52,Close:49.83,Volume:133503000}, + {Date:1467028800000,Open:49.1,High:49.15,Low:48.04,Close:48.43,Volume:50216300}, + {Date:1467115200000,Open:48.92,High:49.47,Low:48.67,Close:49.44,Volume:38140700}, + {Date:1467201600000,Open:49.91,High:50.72,Low:49.8,Close:50.54,Volume:31304000}, + {Date:1467288000000,Open:50.72,High:51.3,Low:50.5,Close:51.17,Volume:28527800}, + {Date:1467374400000,Open:51.13,High:51.72,Low:51.07,Close:51.16,Volume:21400400}, + {Date:1467720000000,Open:50.83,High:51.28,Low:50.74,Close:51.17,Volume:24806400}, + {Date:1467806400000,Open:50.78,High:51.54,Low:50.39,Close:51.38,Volume:28167500}, + {Date:1467892800000,Open:51.42,High:51.61,Low:51.07,Close:51.38,Volume:19585200}, + {Date:1467979200000,Open:51.73,High:52.36,Low:51.55,Close:52.3,Volume:28391000}, + {Date:1468238400000,Open:52.5,High:52.83,Low:52.47,Close:52.59,Volume:22269200}, + {Date:1468324800000,Open:52.94,High:53.4,Low:52.79,Close:53.21,Volume:27317600}, + {Date:1468411200000,Open:53.56,High:53.86,Low:53.18,Close:53.51,Volume:25356800}, + {Date:1468497600000,Open:53.84,High:53.99,Low:53.58,Close:53.74,Volume:24545500}, + {Date:1468584000000,Open:53.95,High:54,Low:53.21,Close:53.7,Volume:32024400}, + {Date:1468843200000,Open:53.7,High:54.34,Low:53.55,Close:53.96,Volume:31433900}, + {Date:1468929600000,Open:53.71,High:53.9,Low:52.93,Close:53.09,Volume:53336500}, + {Date:1469016000000,Open:56.15,High:56.84,Low:55.53,Close:55.91,Volume:89893300}, + {Date:1469102400000,Open:55.98,High:56.23,Low:55.76,Close:55.8,Volume:32776700}, + {Date:1469188800000,Open:56.08,High:56.63,Low:55.78,Close:56.57,Volume:32157200}, + {Date:1469448000000,Open:56.47,High:56.74,Low:56.26,Close:56.73,Volume:25610600}, + {Date:1469534400000,Open:56.52,High:57.29,Low:56.51,Close:56.76,Volume:28079000}, + {Date:1469620800000,Open:56.61,High:56.8,Low:56.11,Close:56.19,Volume:32327500}, + {Date:1469707200000,Open:56,High:56.37,Low:55.72,Close:56.21,Volume:37550400}, + {Date:1469793600000,Open:56.26,High:56.76,Low:56.05,Close:56.68,Volume:30558700}, + {Date:1470052800000,Open:56.6,High:56.75,Low:56.14,Close:56.58,Volume:26003400}, + {Date:1470139200000,Open:56.85,High:56.9,Low:56.31,Close:56.58,Volume:35122000}, + {Date:1470225600000,Open:56.68,High:57.11,Low:56.49,Close:56.97,Volume:22075600}, + {Date:1470312000000,Open:56.8,High:57.52,Low:56.67,Close:57.39,Volume:26587700}, + {Date:1470398400000,Open:57.65,High:58.21,Low:57.45,Close:57.96,Volume:29335200}, + {Date:1470657600000,Open:58.06,High:58.09,Low:57.78,Close:58.06,Volume:19473500}, + {Date:1470744000000,Open:58.17,High:58.5,Low:58.02,Close:58.2,Volume:16920700}, + {Date:1470830400000,Open:58.16,High:58.32,Low:57.82,Close:58.02,Volume:15756900}, + {Date:1470916800000,Open:58.03,High:58.45,Low:58.03,Close:58.3,Volume:18162300}, + {Date:1471003200000,Open:58.03,High:58.19,Low:57.62,Close:57.94,Volume:21655200}, + {Date:1471262400000,Open:58.01,High:58.5,Low:57.96,Close:58.12,Volume:19283900}, + {Date:1471348800000,Open:57.61,High:57.62,Low:57.27,Close:57.44,Volume:20523500}, + {Date:1471435200000,Open:57.54,High:57.68,Low:57.23,Close:57.56,Volume:18856400}, + {Date:1471521600000,Open:57.42,High:57.7,Low:57.27,Close:57.6,Volume:14214300}, + {Date:1471608000000,Open:57.43,High:57.73,Low:57.2,Close:57.62,Volume:17271000}, + {Date:1471867200000,Open:57.6,High:57.75,Low:57.26,Close:57.67,Volume:15221900}, + {Date:1471953600000,Open:57.9,High:58.18,Low:57.85,Close:57.89,Volume:18732400}, + {Date:1472040000000,Open:57.8,High:58.04,Low:57.72,Close:57.95,Volume:18151500}, + {Date:1472126400000,Open:57.88,High:58.29,Low:57.78,Close:58.17,Volume:18552600}, + {Date:1472212800000,Open:58.28,High:58.7,Low:57.69,Close:58.03,Volume:20971200}, + {Date:1472472000000,Open:58.18,High:58.6,Low:58.1,Close:58.1,Volume:16417200}, + {Date:1472558400000,Open:57.98,High:58.19,Low:57.61,Close:57.89,Volume:16930200}, + {Date:1472644800000,Open:57.65,High:57.8,Low:57.3,Close:57.46,Volume:20860300}, + {Date:1472731200000,Open:57.01,High:57.82,Low:57.01,Close:57.59,Volume:26075400}, + {Date:1472817600000,Open:57.67,High:58.19,Low:57.42,Close:57.67,Volume:18900500}, + {Date:1473163200000,Open:57.78,High:57.8,Low:57.21,Close:57.61,Volume:16278400}, + {Date:1473249600000,Open:57.47,High:57.84,Low:57.41,Close:57.66,Volume:17493400}, + {Date:1473336000000,Open:57.63,High:57.79,Low:57.18,Close:57.43,Volume:20146100}, + {Date:1473422400000,Open:56.79,High:57.52,Low:56.21,Close:56.21,Volume:35113900}, + {Date:1473681600000,Open:56,High:57.21,Low:55.61,Close:57.05,Volume:29303000}, + {Date:1473768000000,Open:56.5,High:56.65,Low:56.05,Close:56.53,Volume:30130200}, + {Date:1473854400000,Open:56.39,High:56.63,Low:56.03,Close:56.26,Volume:24062500}, + {Date:1473940800000,Open:56.15,High:57.35,Low:55.98,Close:57.19,Volume:26847000}, + {Date:1474027200000,Open:57.63,High:57.63,Low:56.75,Close:57.25,Volume:44607000}, + {Date:1474286400000,Open:57.27,High:57.75,Low:56.85,Close:56.93,Volume:20937100}, + {Date:1474372800000,Open:57.35,High:57.35,Low:56.75,Close:56.81,Volume:17384000}, + {Date:1474459200000,Open:57.51,High:57.85,Low:57.08,Close:57.76,Volume:33707300}, + {Date:1474545600000,Open:57.92,High:58,Low:57.63,Close:57.82,Volume:19822200}, + {Date:1474632000000,Open:57.87,High:57.91,Low:57.38,Close:57.43,Volume:19955300}, + {Date:1474891200000,Open:57.08,High:57.14,Low:56.83,Close:56.9,Volume:21688700}, + {Date:1474977600000,Open:56.93,High:58.06,Low:56.68,Close:57.95,Volume:28065100}, + {Date:1475064000000,Open:57.88,High:58.06,Low:57.67,Close:58.03,Volume:20536400}, + {Date:1475150400000,Open:57.81,High:58.17,Low:57.21,Close:57.4,Volume:25463500}, + {Date:1475236800000,Open:57.57,High:57.77,Low:57.34,Close:57.6,Volume:29910800}, + {Date:1475496000000,Open:57.41,High:57.55,Low:57.06,Close:57.42,Volume:19189500}, + {Date:1475582400000,Open:57.27,High:57.6,Low:56.97,Close:57.24,Volume:20085900}, + {Date:1475668800000,Open:57.29,High:57.96,Low:57.26,Close:57.64,Volume:16726400}, + {Date:1475755200000,Open:57.74,High:57.86,Low:57.28,Close:57.74,Volume:16212600}, + {Date:1475841600000,Open:57.85,High:57.98,Low:57.42,Close:57.8,Volume:20089000}, + {Date:1476100800000,Open:57.91,High:58.39,Low:57.87,Close:58.04,Volume:18196500}, + {Date:1476187200000,Open:57.89,High:58.02,Low:56.89,Close:57.19,Volume:26497400}, + {Date:1476273600000,Open:57.11,High:57.27,Low:56.4,Close:57.11,Volume:22177500}, + {Date:1476360000000,Open:56.7,High:57.3,Low:56.32,Close:56.92,Volume:25313700}, + {Date:1476446400000,Open:57.12,High:57.74,Low:57.12,Close:57.42,Volume:27402500}, + {Date:1476705600000,Open:57.36,High:57.46,Low:56.87,Close:57.22,Volume:23830000}, + {Date:1476792000000,Open:57.53,High:57.95,Low:57.41,Close:57.66,Volume:19149500}, + {Date:1476878400000,Open:57.47,High:57.84,Low:57.4,Close:57.53,Volume:22878400}, + {Date:1476964800000,Open:57.5,High:57.52,Low:56.66,Close:57.25,Volume:49455600}, + {Date:1477051200000,Open:60.28,High:60.45,Low:59.49,Close:59.66,Volume:80032200}, + {Date:1477310400000,Open:59.94,High:61,Low:59.93,Close:61,Volume:54067000}, + {Date:1477396800000,Open:60.85,High:61.37,Low:60.8,Close:60.99,Volume:35137200}, + {Date:1477483200000,Open:60.81,High:61.2,Low:60.47,Close:60.63,Volume:29911600}, + {Date:1477569600000,Open:60.61,High:60.83,Low:60.09,Close:60.1,Volume:28479900}, + {Date:1477656000000,Open:60.01,High:60.52,Low:59.58,Close:59.87,Volume:33574700}, + {Date:1477915200000,Open:60.16,High:60.42,Low:59.92,Close:59.92,Volume:26434700}, + {Date:1478001600000,Open:59.97,High:60.02,Low:59.25,Close:59.8,Volume:24533000}, + {Date:1478088000000,Open:59.82,High:59.93,Low:59.3,Close:59.43,Volume:22147000}, + {Date:1478174400000,Open:59.53,High:59.64,Low:59.11,Close:59.21,Volume:21600400}, + {Date:1478260800000,Open:58.65,High:59.28,Low:58.52,Close:58.71,Volume:28697000}, + {Date:1478520000000,Open:59.78,High:60.52,Low:59.78,Close:60.42,Volume:31664800}, + {Date:1478606400000,Open:60.55,High:60.78,Low:60.15,Close:60.47,Volume:22935400}, + {Date:1478692800000,Open:60,High:60.59,Low:59.2,Close:60.17,Volume:49632500}, + {Date:1478779200000,Open:60.48,High:60.49,Low:57.63,Close:58.7,Volume:57822400}, + {Date:1478865600000,Open:58.23,High:59.12,Low:58.01,Close:59.02,Volume:38767800}, + {Date:1479124800000,Open:59.02,High:59.08,Low:57.28,Close:58.12,Volume:41328400}, + {Date:1479211200000,Open:58.33,High:59.49,Low:58.32,Close:58.87,Volume:35904100}, + {Date:1479297600000,Open:58.94,High:59.66,Low:58.81,Close:59.65,Volume:27332500}, + {Date:1479384000000,Open:60.41,High:60.95,Low:59.97,Close:60.64,Volume:32132700}, + {Date:1479470400000,Open:60.78,High:61.14,Low:60.3,Close:60.35,Volume:27686300}, + {Date:1479729600000,Open:60.5,High:60.97,Low:60.42,Close:60.86,Volume:19652600}, + {Date:1479816000000,Open:60.98,High:61.26,Low:60.81,Close:61.12,Volume:23206700}, + {Date:1479902400000,Open:61.01,High:61.1,Low:60.25,Close:60.4,Volume:21848900}, + {Date:1480075200000,Open:60.3,High:60.53,Low:60.13,Close:60.53,Volume:8409600}, + {Date:1480334400000,Open:60.34,High:61.02,Low:60.21,Close:60.61,Volume:20732600}, + {Date:1480420800000,Open:60.65,High:61.41,Low:60.52,Close:61.09,Volume:22366700}, + {Date:1480507200000,Open:60.86,High:61.18,Low:60.22,Close:60.26,Volume:34655400}, + {Date:1480593600000,Open:60.11,High:60.15,Low:58.94,Close:59.2,Volume:34542100}, + {Date:1480680000000,Open:59.08,High:59.47,Low:58.8,Close:59.25,Volume:25515700}, + {Date:1480939200000,Open:59.7,High:60.59,Low:59.56,Close:60.22,Volume:23552700}, + {Date:1481025600000,Open:60.43,High:60.46,Low:59.8,Close:59.95,Volume:19907000}, + {Date:1481112000000,Open:60.01,High:61.38,Low:59.8,Close:61.37,Volume:30809000}, + {Date:1481198400000,Open:61.3,High:61.58,Low:60.84,Close:61.01,Volume:21220800}, + {Date:1481284800000,Open:61.18,High:61.99,Low:61.13,Close:61.97,Volume:27349400}, + {Date:1481544000000,Open:61.82,High:62.3,Low:61.72,Close:62.17,Volume:20198100}, + {Date:1481630400000,Open:62.5,High:63.42,Low:62.24,Close:62.98,Volume:35718900}, + {Date:1481716800000,Open:63,High:63.45,Low:62.53,Close:62.68,Volume:30352700}, + {Date:1481803200000,Open:62.7,High:63.15,Low:62.3,Close:62.58,Volume:27669900}, + {Date:1481889600000,Open:62.95,High:62.95,Low:62.12,Close:62.3,Volume:42453100}, + {Date:1482148800000,Open:62.56,High:63.77,Low:62.42,Close:63.62,Volume:34338200}, + {Date:1482235200000,Open:63.69,High:63.8,Low:63.03,Close:63.54,Volume:26028400}, + {Date:1482321600000,Open:63.43,High:63.7,Low:63.12,Close:63.54,Volume:17096300}, + {Date:1482408000000,Open:63.84,High:64.1,Low:63.41,Close:63.55,Volume:22176600}, + {Date:1482494400000,Open:63.45,High:63.54,Low:62.8,Close:63.24,Volume:12403800}, + {Date:1482840000000,Open:63.21,High:64.07,Low:63.21,Close:63.28,Volume:11763200}, + {Date:1482926400000,Open:63.4,High:63.4,Low:62.83,Close:62.99,Volume:14653300}, + {Date:1483012800000,Open:62.86,High:63.2,Low:62.73,Close:62.9,Volume:10250600}, + {Date:1483099200000,Open:62.96,High:62.99,Low:62.03,Close:62.14,Volume:25579900}, + {Date:1483444800000,Open:62.79,High:62.84,Low:62.13,Close:62.58,Volume:20694100}, + {Date:1483531200000,Open:62.48,High:62.75,Low:62.12,Close:62.3,Volume:21340000}, + {Date:1483617600000,Open:62.19,High:62.66,Low:62.03,Close:62.3,Volume:24876000}, + {Date:1483704000000,Open:62.3,High:63.15,Low:62.04,Close:62.84,Volume:19922900}, + {Date:1483963200000,Open:62.76,High:63.08,Low:62.54,Close:62.64,Volume:20382700}, + {Date:1484049600000,Open:62.73,High:63.07,Low:62.28,Close:62.62,Volume:18593000}, + {Date:1484136000000,Open:62.61,High:63.23,Low:62.43,Close:63.19,Volume:21517300}, + {Date:1484222400000,Open:63.06,High:63.4,Low:61.95,Close:62.61,Volume:20968200}, + {Date:1484308800000,Open:62.62,High:62.87,Low:62.35,Close:62.7,Volume:19422300}, + {Date:1484654400000,Open:62.68,High:62.7,Low:62.03,Close:62.53,Volume:20664000}, + {Date:1484740800000,Open:62.67,High:62.7,Low:62.12,Close:62.5,Volume:19670100}, + {Date:1484827200000,Open:62.24,High:62.98,Low:62.2,Close:62.3,Volume:18451700}, + {Date:1484913600000,Open:62.67,High:62.82,Low:62.37,Close:62.74,Volume:30213500}, + {Date:1485172800000,Open:62.7,High:63.12,Low:62.57,Close:62.96,Volume:23097600}, + {Date:1485259200000,Open:63.2,High:63.74,Low:62.94,Close:63.52,Volume:24672900}, + {Date:1485345600000,Open:63.95,High:64.1,Low:63.45,Close:63.68,Volume:23672700}, + {Date:1485432000000,Open:64.12,High:64.54,Low:63.55,Close:64.27,Volume:43554600}, + {Date:1485518400000,Open:65.39,High:65.91,Low:64.89,Close:65.78,Volume:44818000}, + {Date:1485777600000,Open:65.69,High:65.79,Low:64.8,Close:65.13,Volume:31651400}, + {Date:1485864000000,Open:64.86,High:65.15,Low:64.26,Close:64.65,Volume:25270500}, + {Date:1485950400000,Open:64.36,High:64.62,Low:63.47,Close:63.58,Volume:39671500}, + {Date:1486036800000,Open:63.25,High:63.41,Low:62.75,Close:63.17,Volume:45827000}, + {Date:1486123200000,Open:63.5,High:63.7,Low:63.07,Close:63.68,Volume:30301800}, + {Date:1486382400000,Open:63.5,High:63.65,Low:63.14,Close:63.64,Volume:19796400}, + {Date:1486468800000,Open:63.74,High:63.78,Low:63.23,Close:63.43,Volume:20277200}, + {Date:1486555200000,Open:63.57,High:63.81,Low:63.22,Close:63.34,Volume:18096400}, + {Date:1486641600000,Open:63.52,High:64.44,Low:63.32,Close:64.06,Volume:22644400}, + {Date:1486728000000,Open:64.25,High:64.3,Low:63.98,Close:64,Volume:18170700}, + {Date:1486987200000,Open:64.24,High:64.86,Low:64.13,Close:64.72,Volume:22920100}, + {Date:1487073600000,Open:64.41,High:64.72,Low:64.02,Close:64.57,Volume:23108400}, + {Date:1487160000000,Open:64.5,High:64.57,Low:64.16,Close:64.53,Volume:17005200}, + {Date:1487246400000,Open:64.74,High:65.24,Low:64.44,Close:64.52,Volume:20546300}, + {Date:1487332800000,Open:64.47,High:64.69,Low:64.3,Close:64.62,Volume:21248800}, + {Date:1487678400000,Open:64.61,High:64.95,Low:64.45,Close:64.49,Volume:20655900}, + {Date:1487764800000,Open:64.33,High:64.39,Low:64.05,Close:64.36,Volume:19292700}, + {Date:1487851200000,Open:64.42,High:64.73,Low:64.19,Close:64.62,Volume:20273100}, + {Date:1487937600000,Open:64.53,High:64.8,Low:64.14,Close:64.62,Volume:21796800}, + {Date:1488196800000,Open:64.54,High:64.54,Low:64.05,Close:64.23,Volume:15871500}, + {Date:1488283200000,Open:64.08,High:64.2,Low:63.76,Close:63.98,Volume:23239800}, + {Date:1488369600000,Open:64.13,High:64.99,Low:64.02,Close:64.94,Volume:26937500}, + {Date:1488456000000,Open:64.69,High:64.75,Low:63.88,Close:64.01,Volume:24539600}, + {Date:1488542400000,Open:63.99,High:64.28,Low:63.62,Close:64.25,Volume:18135900}, + {Date:1488801600000,Open:63.97,High:64.56,Low:63.81,Close:64.27,Volume:18750300}, + {Date:1488888000000,Open:64.19,High:64.78,Low:64.19,Close:64.4,Volume:18521000}, + {Date:1488974400000,Open:64.26,High:65.08,Low:64.25,Close:64.99,Volume:21510900}, + {Date:1489060800000,Open:65.19,High:65.2,Low:64.48,Close:64.73,Volume:19846800}, + {Date:1489147200000,Open:65.11,High:65.26,Low:64.75,Close:64.93,Volume:19538200}, + {Date:1489406400000,Open:65.01,High:65.19,Low:64.57,Close:64.71,Volume:20100000}, + {Date:1489492800000,Open:64.53,High:64.55,Low:64.15,Close:64.41,Volume:14280200}, + {Date:1489579200000,Open:64.55,High:64.92,Low:64.25,Close:64.75,Volume:24833800}, + {Date:1489665600000,Open:64.75,High:64.76,Low:64.3,Close:64.64,Volume:20674300}, + {Date:1489752000000,Open:64.91,High:65.24,Low:64.68,Close:64.87,Volume:49219700}, + {Date:1490011200000,Open:64.91,High:65.18,Low:64.72,Close:64.93,Volume:14598100}, + {Date:1490097600000,Open:65.19,High:65.5,Low:64.13,Close:64.21,Volume:26640500}, + {Date:1490184000000,Open:64.12,High:65.14,Low:64.12,Close:65.03,Volume:20680000}, + {Date:1490270400000,Open:64.94,High:65.24,Low:64.77,Close:64.87,Volume:19269200}, + {Date:1490356800000,Open:65.36,High:65.45,Low:64.76,Close:64.98,Volume:22617100}, + {Date:1490616000000,Open:64.63,High:65.22,Low:64.35,Close:65.1,Volume:18614700}, + {Date:1490702400000,Open:64.96,High:65.47,Low:64.65,Close:65.29,Volume:20080400}, + {Date:1490788800000,Open:65.12,High:65.5,Low:64.95,Close:65.47,Volume:13618400}, + {Date:1490875200000,Open:65.42,High:65.98,Low:65.36,Close:65.71,Volume:15122800}, + {Date:1490961600000,Open:65.65,High:66.19,Low:65.45,Close:65.86,Volume:21040300}, + {Date:1491220800000,Open:65.81,High:65.94,Low:65.19,Close:65.55,Volume:20400900}, + {Date:1491307200000,Open:65.39,High:65.81,Low:65.28,Close:65.73,Volume:12997400}, + {Date:1491393600000,Open:66.3,High:66.35,Low:65.44,Close:65.56,Volume:21448600}, + {Date:1491480000000,Open:65.6,High:66.06,Low:65.48,Close:65.73,Volume:18103500}, + {Date:1491566400000,Open:65.85,High:65.96,Low:65.44,Close:65.68,Volume:14108500}, + {Date:1491825600000,Open:65.61,High:65.82,Low:65.36,Close:65.53,Volume:17952700}, + {Date:1491912000000,Open:65.6,High:65.61,Low:64.85,Close:65.48,Volume:18791500}, + {Date:1491998400000,Open:65.42,High:65.51,Low:65.11,Close:65.23,Volume:17108500}, + {Date:1492084800000,Open:65.29,High:65.86,Low:64.95,Close:64.95,Volume:17896500}, + {Date:1492430400000,Open:65.04,High:65.49,Low:65.01,Close:65.48,Volume:16689300}, + {Date:1492516800000,Open:65.33,High:65.71,Low:65.16,Close:65.39,Volume:15155600}, + {Date:1492603200000,Open:65.65,High:65.75,Low:64.89,Close:65.04,Volume:26992800}, + {Date:1492689600000,Open:65.46,High:65.75,Low:65.14,Close:65.5,Volume:22299500}, + {Date:1492776000000,Open:65.67,High:66.7,Low:65.45,Close:66.4,Volume:32522600}, + {Date:1493035200000,Open:67.48,High:67.66,Low:67.1,Close:67.53,Volume:29770000}, + {Date:1493121600000,Open:67.9,High:68.04,Low:67.6,Close:67.92,Volume:30242700}, + {Date:1493208000000,Open:68.08,High:68.31,Low:67.62,Close:67.83,Volume:26190800}, + {Date:1493294400000,Open:68.15,High:68.38,Low:67.58,Close:68.27,Volume:34971000}, + {Date:1493380800000,Open:68.91,High:69.14,Low:67.69,Close:68.46,Volume:39548800}, + {Date:1493640000000,Open:68.68,High:69.55,Low:68.5,Close:69.41,Volume:31954400}, + {Date:1493726400000,Open:69.71,High:69.71,Low:69.13,Close:69.3,Volume:23906100}, + {Date:1493812800000,Open:69.38,High:69.38,Low:68.71,Close:69.08,Volume:28928000}, + {Date:1493899200000,Open:69.03,High:69.08,Low:68.64,Close:68.81,Volume:21749400}, + {Date:1493985600000,Open:68.9,High:69.03,Low:68.49,Close:69,Volume:19128800}, + {Date:1494244800000,Open:68.97,High:69.05,Low:68.42,Close:68.94,Volume:18566100}, + {Date:1494331200000,Open:68.86,High:69.28,Low:68.68,Close:69.04,Volume:22858400}, + {Date:1494417600000,Open:68.99,High:69.56,Low:68.92,Close:69.31,Volume:17977800}, + {Date:1494504000000,Open:68.36,High:68.73,Low:68.12,Close:68.46,Volume:28789400}, + {Date:1494590400000,Open:68.61,High:68.61,Low:68.04,Close:68.38,Volume:18714100}, + {Date:1494849600000,Open:68.14,High:68.48,Low:67.57,Close:68.43,Volume:31530300}, + {Date:1494936000000,Open:68.23,High:69.44,Low:68.16,Close:69.41,Volume:34956000}, + {Date:1495022400000,Open:68.89,High:69.1,Low:67.43,Close:67.48,Volume:30548800}, + {Date:1495108800000,Open:67.4,High:68.13,Low:67.14,Close:67.71,Volume:25201300}, + {Date:1495195200000,Open:67.5,High:68.1,Low:67.43,Close:67.69,Volume:26961100}, + {Date:1495454400000,Open:67.89,High:68.5,Low:67.5,Close:68.45,Volume:16237600}, + {Date:1495540800000,Open:68.72,High:68.75,Low:68.38,Close:68.68,Volume:15425800}, + {Date:1495627200000,Open:68.87,High:68.88,Low:68.45,Close:68.77,Volume:14593900}, + {Date:1495713600000,Open:68.97,High:69.88,Low:68.91,Close:69.62,Volume:21854100}, + {Date:1495800000000,Open:69.8,High:70.22,Low:69.52,Close:69.96,Volume:19827900}, + {Date:1496145600000,Open:69.79,High:70.41,Low:69.77,Close:70.41,Volume:17072800}, + {Date:1496232000000,Open:70.53,High:70.74,Low:69.81,Close:69.84,Volume:30436400}, + {Date:1496318400000,Open:70.24,High:70.61,Low:69.45,Close:70.1,Volume:21603600}, + {Date:1496404800000,Open:70.44,High:71.86,Low:70.24,Close:71.76,Volume:34770300}, + {Date:1496664000000,Open:71.97,High:72.89,Low:71.81,Close:72.28,Volume:33316800}, + {Date:1496750400000,Open:72.3,High:72.62,Low:72.27,Close:72.52,Volume:31511100}, + {Date:1496836800000,Open:72.64,High:72.77,Low:71.95,Close:72.39,Volume:22301800}, + {Date:1496923200000,Open:72.51,High:72.52,Low:71.5,Close:71.95,Volume:24588300}, + {Date:1497009600000,Open:72.04,High:72.08,Low:68.59,Close:70.32,Volume:49187400}, + {Date:1497268800000,Open:69.25,High:69.94,Low:68.13,Close:69.78,Volume:47761700}, + {Date:1497355200000,Open:70.02,High:70.82,Low:69.96,Close:70.65,Volume:25258600}, + {Date:1497441600000,Open:70.91,High:71.1,Low:69.43,Close:70.27,Volume:25510700}, + {Date:1497528000000,Open:69.27,High:70.21,Low:68.8,Close:69.9,Volume:26068700}, + {Date:1497614400000,Open:69.73,High:70.03,Low:69.22,Close:70,Volume:48345100}, + {Date:1497873600000,Open:70.5,High:70.94,Low:70.35,Close:70.87,Volume:23798300}, + {Date:1497960000000,Open:70.82,High:70.87,Low:69.87,Close:69.91,Volume:21512200}, + {Date:1498046400000,Open:70.21,High:70.62,Low:69.94,Close:70.27,Volume:19891100}, + {Date:1498132800000,Open:70.54,High:70.59,Low:69.71,Close:70.26,Volume:22965700}, + {Date:1498219200000,Open:70.09,High:71.25,Low:69.92,Close:71.21,Volume:27617300}, + {Date:1498478400000,Open:71.4,High:71.71,Low:70.44,Close:70.53,Volume:19607000}, + {Date:1498564800000,Open:70.11,High:70.18,Low:69.18,Close:69.21,Volume:25215100}, + {Date:1498651200000,Open:69.21,High:69.84,Low:68.79,Close:69.8,Volume:25806200}, + {Date:1498737600000,Open:69.38,High:69.49,Low:68.09,Close:68.49,Volume:28918700}, + {Date:1498824000000,Open:68.78,High:69.38,Low:68.74,Close:68.93,Volume:24161100}, + {Date:1499083200000,Open:69.33,High:69.6,Low:68.02,Close:68.17,Volume:16165500}, + {Date:1499256000000,Open:68.26,High:69.44,Low:68.22,Close:69.08,Volume:21176300}, + {Date:1499342400000,Open:68.27,High:68.78,Low:68.12,Close:68.57,Volume:21117600}, + {Date:1499428800000,Open:68.7,High:69.84,Low:68.7,Close:69.46,Volume:16878300}, + {Date:1499688000000,Open:69.46,High:70.25,Low:69.2,Close:69.98,Volume:15014500}, + {Date:1499774400000,Open:70,High:70.68,Low:69.75,Close:69.99,Volume:17460000}, + {Date:1499860800000,Open:70.69,High:71.28,Low:70.55,Close:71.15,Volume:17750900}, + {Date:1499947200000,Open:71.5,High:72.04,Low:71.31,Close:71.77,Volume:20269800}, + {Date:1500033600000,Open:72.24,High:73.27,Low:71.96,Close:72.78,Volume:25868100}, + {Date:1500292800000,Open:72.8,High:73.45,Low:72.72,Close:73.35,Volume:21803900}, + {Date:1500379200000,Open:73.09,High:73.39,Low:72.66,Close:73.3,Volume:26435300}, + {Date:1500465600000,Open:73.5,High:74.04,Low:73.45,Close:73.86,Volume:22416200}, + {Date:1500552000000,Open:74.18,High:74.3,Low:73.28,Close:74.22,Volume:42361000}, + {Date:1500638400000,Open:73.45,High:74.29,Low:73.17,Close:73.79,Volume:46717100}, + {Date:1500897600000,Open:73.53,High:73.75,Low:73.13,Close:73.6,Volume:21394800}, + {Date:1500984000000,Open:73.8,High:74.31,Low:73.5,Close:74.19,Volume:22018700}, + {Date:1501070400000,Open:74.34,High:74.38,Low:73.81,Close:74.05,Volume:16252200}, + {Date:1501156800000,Open:73.76,High:74.42,Low:72.32,Close:73.16,Volume:36844200}, + {Date:1501243200000,Open:72.67,High:73.31,Low:72.54,Close:73.04,Volume:18306700}, + {Date:1501502400000,Open:73.3,High:73.44,Low:72.41,Close:72.7,Volume:23600100}, + {Date:1501588800000,Open:73.1,High:73.42,Low:72.49,Close:72.58,Volume:22132300}, + {Date:1501675200000,Open:72.55,High:72.56,Low:71.44,Close:72.26,Volume:26499200}, + {Date:1501761600000,Open:72.19,High:72.44,Low:71.85,Close:72.15,Volume:18214400}, + {Date:1501848000000,Open:72.4,High:73.04,Low:72.24,Close:72.68,Volume:22579000}, + {Date:1502107200000,Open:72.8,High:72.9,Low:72.26,Close:72.4,Volume:18705700}, + {Date:1502193600000,Open:72.09,High:73.13,Low:71.75,Close:72.79,Volume:22044600}, + {Date:1502280000000,Open:72.25,High:72.51,Low:72.05,Close:72.47,Volume:22213400}, + {Date:1502366400000,Open:71.9,High:72.19,Low:71.35,Close:71.41,Volume:24734500}, + {Date:1502452800000,Open:71.61,High:72.7,Low:71.28,Close:72.5,Volume:21443700}, + {Date:1502712000000,Open:73.06,High:73.72,Low:72.95,Close:73.59,Volume:20096600}, + {Date:1502798400000,Open:73.59,High:73.59,Low:73.04,Close:73.22,Volume:19181400}, + {Date:1502884800000,Open:73.34,High:74.1,Low:73.17,Close:73.65,Volume:18150400}, + {Date:1502971200000,Open:73.58,High:73.87,Low:72.4,Close:72.4,Volume:22977500}, + {Date:1503057600000,Open:72.27,High:72.84,Low:71.93,Close:72.49,Volume:18761500}, + {Date:1503316800000,Open:72.47,High:72.48,Low:71.7,Close:72.15,Volume:17734800}, + {Date:1503403200000,Open:72.35,High:73.24,Low:72.35,Close:73.16,Volume:14343700}, + {Date:1503489600000,Open:72.96,High:73.15,Low:72.53,Close:72.72,Volume:13766500}, + {Date:1503576000000,Open:72.74,High:72.86,Low:72.07,Close:72.69,Volume:17098300}, + {Date:1503662400000,Open:72.86,High:73.35,Low:72.48,Close:72.82,Volume:12794300}, + {Date:1503921600000,Open:73.06,High:73.09,Low:72.55,Close:72.83,Volume:14569700}, + {Date:1504008000000,Open:72.25,High:73.16,Low:72.05,Close:73.05,Volume:11478400}, + {Date:1504094400000,Open:73.01,High:74.21,Low:72.83,Close:74.01,Volume:16897800}, + {Date:1504180800000,Open:74.03,High:74.96,Low:73.8,Close:74.77,Volume:27652800}, + {Date:1504267200000,Open:74.71,High:74.74,Low:73.64,Close:73.94,Volume:21736200}, + {Date:1504612800000,Open:73.34,High:73.89,Low:72.98,Close:73.61,Volume:21556000}, + {Date:1504699200000,Open:73.74,High:74.04,Low:73.35,Close:73.4,Volume:16535800}, + {Date:1504785600000,Open:73.68,High:74.6,Low:73.6,Close:74.34,Volume:17471200}, + {Date:1504872000000,Open:74.33,High:74.44,Low:73.84,Close:73.98,Volume:14703800}, + {Date:1505131200000,Open:74.31,High:74.94,Low:74.31,Close:74.76,Volume:17910400}, + {Date:1505217600000,Open:74.76,High:75.24,Low:74.37,Close:74.68,Volume:14394900}, + {Date:1505304000000,Open:74.93,High:75.23,Low:74.55,Close:75.21,Volume:13380800}, + {Date:1505390400000,Open:75,High:75.49,Low:74.52,Close:74.77,Volume:15733900}, + {Date:1505476800000,Open:74.83,High:75.39,Low:74.07,Close:75.31,Volume:38578400}, + {Date:1505736000000,Open:75.23,High:75.97,Low:75.04,Close:75.16,Volume:23307000}, + {Date:1505822400000,Open:75.21,High:75.71,Low:75.01,Close:75.44,Volume:16093300}, + {Date:1505908800000,Open:75.35,High:75.55,Low:74.31,Close:74.94,Volume:21587900}, + {Date:1505995200000,Open:75.11,High:75.24,Low:74.11,Close:74.21,Volume:19186100}, + {Date:1506081600000,Open:73.99,High:74.51,Low:73.85,Close:74.41,Volume:14111400}, + {Date:1506340800000,Open:74.09,High:74.25,Low:72.92,Close:73.26,Volume:24149200}, + {Date:1506427200000,Open:73.67,High:73.81,Low:72.99,Close:73.26,Volume:18019600}, + {Date:1506513600000,Open:73.55,High:74.17,Low:73.17,Close:73.85,Volume:19565100}, + {Date:1506600000000,Open:73.54,High:73.97,Low:73.31,Close:73.87,Volume:10883800}, + {Date:1506686400000,Open:73.94,High:74.54,Low:73.88,Close:74.49,Volume:17079100}, + {Date:1506945600000,Open:74.71,High:75.01,Low:74.3,Close:74.61,Volume:15304800}, + {Date:1507032000000,Open:74.67,High:74.88,Low:74.19,Close:74.26,Volume:12190400}, + {Date:1507118400000,Open:74.09,High:74.72,Low:73.71,Close:74.69,Volume:13317700}, + {Date:1507204800000,Open:75.22,High:76.12,Low:74.96,Close:75.97,Volume:21195300}, + {Date:1507291200000,Open:75.67,High:76.03,Low:75.54,Close:76,Volume:13959800}, + {Date:1507550400000,Open:75.97,High:76.55,Low:75.86,Close:76.29,Volume:11386500}, + {Date:1507636800000,Open:76.33,High:76.63,Low:76.14,Close:76.29,Volume:13944500}, + {Date:1507723200000,Open:76.36,High:76.46,Low:75.95,Close:76.42,Volume:15388900}, + {Date:1507809600000,Open:76.49,High:77.29,Low:76.37,Close:77.12,Volume:16876500}, + {Date:1507896000000,Open:77.59,High:77.87,Low:77.29,Close:77.49,Volume:15335700}, + {Date:1508155200000,Open:77.42,High:77.81,Low:77.35,Close:77.65,Volume:12380100}, + {Date:1508241600000,Open:77.47,High:77.62,Low:77.25,Close:77.59,Volume:16824000}, + {Date:1508328000000,Open:77.67,High:77.85,Low:77.37,Close:77.61,Volume:13300700}, + {Date:1508414400000,Open:77.57,High:77.93,Low:77.35,Close:77.91,Volume:15092800}, + {Date:1508500800000,Open:78.32,High:78.97,Low:78.22,Close:78.81,Volume:22866400}, + {Date:1508760000000,Open:78.99,High:79.34,Low:78.76,Close:78.83,Volume:20627200}, + {Date:1508846400000,Open:78.9,High:79.2,Low:78.46,Close:78.86,Volume:17517200}, + {Date:1508932800000,Open:78.58,High:79.1,Low:78.01,Close:78.63,Volume:20410800}, + {Date:1509019200000,Open:79.2,High:79.42,Low:78.75,Close:78.76,Volume:32120700}, + {Date:1509105600000,Open:84.37,High:86.2,Low:83.61,Close:83.81,Volume:71066700}, + {Date:1509364800000,Open:83.7,High:84.33,Low:83.11,Close:83.89,Volume:31756700}, + {Date:1509451200000,Open:84.36,High:84.36,Low:83.11,Close:83.18,Volume:27086600}, + {Date:1509537600000,Open:83.68,High:83.76,Low:82.88,Close:83.18,Volume:22307400}, + {Date:1509624000000,Open:83.35,High:84.46,Low:83.12,Close:84.05,Volume:23992900}, + {Date:1509710400000,Open:84.08,High:84.54,Low:83.4,Close:84.14,Volume:17633500}, + {Date:1509969600000,Open:84.2,High:84.7,Low:84.08,Close:84.47,Volume:19860900}, + {Date:1510056000000,Open:84.77,High:84.9,Low:83.93,Close:84.27,Volume:17939700}, + {Date:1510142400000,Open:84.14,High:84.61,Low:83.83,Close:84.56,Volume:18034200}, + {Date:1510228800000,Open:84.11,High:84.27,Low:82.9,Close:84.09,Volume:21178400}, + {Date:1510315200000,Open:83.79,High:84.1,Low:83.23,Close:83.87,Volume:19397800}, + {Date:1510574400000,Open:83.66,High:83.94,Low:83.46,Close:83.93,Volume:14196900}, + {Date:1510660800000,Open:83.5,High:84.1,Low:82.98,Close:84.05,Volume:18801300}, + {Date:1510747200000,Open:83.47,High:83.69,Low:82.69,Close:82.98,Volume:19383100}, + {Date:1510833600000,Open:83.1,High:83.42,Low:82.94,Close:83.2,Volume:20962800}, + {Date:1510920000000,Open:83.12,High:83.12,Low:82.24,Close:82.4,Volume:22079000}, + {Date:1511179200000,Open:82.4,High:82.59,Low:82.25,Close:82.53,Volume:16315000}, + {Date:1511265600000,Open:82.74,High:83.84,Low:82.74,Close:83.72,Volume:21237500}, + {Date:1511352000000,Open:83.83,High:83.9,Low:83.04,Close:83.11,Volume:20553100}, + {Date:1511524800000,Open:83.01,High:83.43,Low:82.78,Close:83.26,Volume:7425600}, + {Date:1511784000000,Open:83.31,High:83.98,Low:83.3,Close:83.87,Volume:18265200}, + {Date:1511870400000,Open:84.07,High:85.06,Low:84.02,Close:84.88,Volume:21926000}, + {Date:1511956800000,Open:84.71,High:84.92,Low:83.18,Close:83.34,Volume:27381100}, + {Date:1512043200000,Open:83.51,High:84.52,Low:83.34,Close:84.17,Volume:33054600}, + {Date:1512129600000,Open:83.6,High:84.81,Low:83.22,Close:84.26,Volume:29532100}, + {Date:1512388800000,Open:84.42,High:84.43,Low:80.7,Close:81.08,Volume:39094900}, + {Date:1512475200000,Open:81.34,High:82.68,Low:80.98,Close:81.59,Volume:26152300}, + {Date:1512561600000,Open:81.55,High:83.14,Low:81.43,Close:82.78,Volume:26162100}, + {Date:1512648000000,Open:82.54,High:82.8,Low:82,Close:82.49,Volume:23184500}, + {Date:1512734400000,Open:83.63,High:84.58,Low:83.33,Close:84.16,Volume:24489100}, + {Date:1512993600000,Open:84.29,High:85.37,Low:84.12,Close:85.23,Volume:22857900}, + {Date:1513080000000,Open:85.31,High:86.05,Low:85.08,Close:85.58,Volume:23924100}, + {Date:1513166400000,Open:85.74,High:86,Low:85.17,Close:85.35,Volume:22062700}, + {Date:1513252800000,Open:85.43,High:85.87,Low:84.53,Close:84.69,Volume:19306000}, + {Date:1513339200000,Open:85.26,High:87.09,Low:84.88,Close:86.85,Volume:53936700}, + {Date:1513598400000,Open:87.12,High:87.5,Low:86.23,Close:86.38,Volume:22283800}, + {Date:1513684800000,Open:86.35,High:86.35,Low:85.27,Close:85.83,Volume:23524800}, + {Date:1513771200000,Open:86.2,High:86.3,Low:84.71,Close:85.52,Volume:23674900}, + {Date:1513857600000,Open:86.05,High:86.1,Low:85.4,Close:85.5,Volume:17990700}, + {Date:1513944000000,Open:85.4,High:85.63,Low:84.92,Close:85.51,Volume:14145800}, + {Date:1514289600000,Open:85.31,High:85.53,Low:85.03,Close:85.4,Volume:9891200}, + {Date:1514376000000,Open:85.65,High:85.98,Low:85.22,Close:85.71,Volume:14678000}, + {Date:1514462400000,Open:85.9,High:85.93,Low:85.55,Close:85.72,Volume:10594300}, + {Date:1514548800000,Open:85.63,High:86.05,Low:85.5,Close:85.54,Volume:18717400}, + {Date:1514894400000,Open:86.13,High:86.31,Low:85.5,Close:85.95,Volume:22483800}, + {Date:1514980800000,Open:86.06,High:86.51,Low:85.97,Close:86.35,Volume:26061400}, + {Date:1515067200000,Open:86.59,High:87.66,Low:86.57,Close:87.11,Volume:21912000}, + {Date:1515153600000,Open:87.66,High:88.41,Low:87.43,Close:88.19,Volume:23407100}, + {Date:1515412800000,Open:88.2,High:88.58,Low:87.6,Close:88.28,Volume:22113000}, + {Date:1515499200000,Open:88.65,High:88.73,Low:87.86,Close:88.22,Volume:19484300}, + {Date:1515585600000,Open:87.86,High:88.19,Low:87.41,Close:87.82,Volume:18652200}, + {Date:1515672000000,Open:88.13,High:88.13,Low:87.24,Close:88.08,Volume:17808900}, + {Date:1515758400000,Open:88.67,High:89.78,Low:88.45,Close:89.6,Volume:24271500}, + {Date:1516104000000,Open:90.1,High:90.79,Low:88.01,Close:88.35,Volume:36599700}, + {Date:1516190400000,Open:89.08,High:90.28,Low:88.75,Close:90.14,Volume:25621200}, + {Date:1516276800000,Open:89.8,High:90.67,Low:89.66,Close:90.1,Volume:24159700}, + {Date:1516363200000,Open:90.14,High:90.61,Low:89.66,Close:90,Volume:36875000}, + {Date:1516622400000,Open:90,High:91.62,Low:89.74,Close:91.61,Volume:23601600}, + {Date:1516708800000,Open:91.9,High:92.3,Low:91.54,Close:91.9,Volume:23412800}, + {Date:1516795200000,Open:92.55,High:93.43,Low:91.58,Close:91.82,Volume:33277500}, + {Date:1516881600000,Open:92.47,High:93.24,Low:91.93,Close:92.33,Volume:26383200}, + {Date:1516968000000,Open:93.12,High:94.06,Low:92.58,Close:94.06,Volume:29172200}, + {Date:1517227200000,Open:95.14,High:95.45,Low:93.72,Close:93.92,Volume:31569900}, + {Date:1517313600000,Open:93.3,High:93.66,Low:92.1,Close:92.74,Volume:38635100}, + {Date:1517400000000,Open:93.75,High:95.4,Low:93.51,Close:95.01,Volume:48756300}, + {Date:1517486400000,Open:94.79,High:96.07,Low:93.58,Close:94.26,Volume:47227900}, + {Date:1517572800000,Open:93.64,High:93.97,Low:91.5,Close:91.78,Volume:47867800}, + {Date:1517832000000,Open:90.56,High:93.24,Low:88,Close:88,Volume:51031500}, + {Date:1517918400000,Open:86.89,High:91.48,Low:85.25,Close:91.33,Volume:67998600}, + {Date:1518004800000,Open:90.49,High:91.77,Low:89.2,Close:89.61,Volume:41107600}, + {Date:1518091200000,Open:89.71,High:89.88,Low:84.76,Close:85.01,Volume:55628700}, + {Date:1518177600000,Open:86.3,High:88.93,Low:83.83,Close:88.18,Volume:63499100}, + {Date:1518436800000,Open:88.74,High:89.78,Low:87.93,Close:89.13,Volume:35720300}, + {Date:1518523200000,Open:88.93,High:90,Low:87.8,Close:89.83,Volume:26407700}, + {Date:1518609600000,Open:88.51,High:90.99,Low:88.41,Close:90.81,Volume:34960900}, + {Date:1518696000000,Open:91.21,High:92.72,Low:90.62,Close:92.66,Volume:27823900}, + {Date:1518782400000,Open:92.45,High:93.5,Low:91.8,Close:92,Volume:30596900}, + {Date:1519128000000,Open:91.48,High:93.06,Low:91.01,Close:92.72,Volume:30911700}, + {Date:1519214400000,Open:92.98,High:93.36,Low:91.49,Close:91.49,Volume:26922500}, + {Date:1519300800000,Open:92.05,High:92.73,Low:91.36,Close:91.73,Volume:24392800}, + {Date:1519387200000,Open:93.6,High:94.07,Low:92.36,Close:94.06,Volume:26329200}, + {Date:1519646400000,Open:94.4,High:95.45,Low:94.25,Close:95.42,Volume:30199800}, + {Date:1519732800000,Open:95.74,High:95.84,Low:94.2,Close:94.2,Volume:25869100}, + {Date:1519819200000,Open:94.84,High:95.71,Low:93.63,Close:93.77,Volume:31167300}, + {Date:1519905600000,Open:93.99,High:94.57,Low:91.84,Close:92.85,Volume:37135600}, + {Date:1519992000000,Open:91.58,High:93.15,Low:90.86,Close:93.05,Volume:32830400}, + {Date:1520251200000,Open:92.34,High:94.27,Low:92.26,Close:93.64,Volume:23901600}, + {Date:1520337600000,Open:94.34,High:94.49,Low:92.94,Close:93.32,Volume:22175800}, + {Date:1520424000000,Open:93.16,High:93.94,Low:92.43,Close:93.86,Volume:26716100}, + {Date:1520510400000,Open:94.27,High:95.1,Low:93.77,Close:94.43,Volume:25887800}, + {Date:1520596800000,Open:95.29,High:96.54,Low:95,Close:96.54,Volume:36937300}, + {Date:1520856000000,Open:96.5,High:97.21,Low:96.04,Close:96.77,Volume:26073700}, + {Date:1520942400000,Open:97,High:97.24,Low:93.97,Close:94.41,Volume:35387800}, + {Date:1521028800000,Open:95.12,High:95.41,Low:93.5,Close:93.85,Volume:32132000}, + {Date:1521115200000,Open:93.53,High:94.58,Low:92.83,Close:94.18,Volume:27611000}, + {Date:1521201600000,Open:94.68,High:95.38,Low:93.92,Close:94.6,Volume:49081300}, + {Date:1521460800000,Open:93.74,High:93.9,Low:92.11,Close:92.89,Volume:33344100}, + {Date:1521547200000,Open:93.05,High:93.77,Low:93,Close:93.13,Volume:23075200}, + {Date:1521633600000,Open:92.93,High:94.05,Low:92.21,Close:92.48,Volume:24457100}, + {Date:1521720000000,Open:91.27,High:91.75,Low:89.66,Close:89.79,Volume:38604700}, + {Date:1521806400000,Open:89.5,High:90.46,Low:87.08,Close:87.18,Volume:44068900}, + {Date:1522065600000,Open:90.61,High:94,Low:90.4,Close:93.78,Volume:56396800}, + {Date:1522152000000,Open:94.94,High:95.14,Low:88.51,Close:89.47,Volume:56569000}, + {Date:1522238400000,Open:89.82,High:91.23,Low:88.87,Close:89.39,Volume:52501100}, + {Date:1522324800000,Open:90.18,High:92.29,Low:88.4,Close:91.27,Volume:45867500}, + {Date:1522670400000,Open:90.47,High:90.88,Low:87.51,Close:88.52,Volume:48515400}, + {Date:1522756800000,Open:89.58,High:90.05,Low:87.89,Close:89.71,Volume:37213800}, + {Date:1522843200000,Open:87.85,High:92.76,Low:87.73,Close:92.33,Volume:35560000}, + {Date:1522929600000,Open:92.44,High:93.07,Low:91.4,Close:92.38,Volume:29771900}, + {Date:1523016000000,Open:91.49,High:92.46,Low:89.48,Close:90.23,Volume:38026000}, + {Date:1523275200000,Open:91.04,High:93.17,Low:90.62,Close:90.77,Volume:31533900}, + {Date:1523361600000,Open:92.39,High:93.28,Low:91.64,Close:92.88,Volume:26812000}, + {Date:1523448000000,Open:92.01,High:93.29,Low:91.48,Close:91.86,Volume:24872100}, + {Date:1523534400000,Open:92.43,High:94.16,Low:92.43,Close:93.58,Volume:26758900}, + {Date:1523620800000,Open:94.05,High:94.18,Low:92.44,Close:93.08,Volume:23346100}, + {Date:1523880000000,Open:94.07,High:94.66,Low:93.42,Close:94.17,Volume:20288100}, + {Date:1523966400000,Open:95,High:96.54,Low:94.88,Close:96.07,Volume:26771000}, + {Date:1524052800000,Open:96.22,High:96.72,Low:95.52,Close:96.44,Volume:21043300}, + {Date:1524139200000,Open:96.44,High:97.07,Low:95.34,Close:96.11,Volume:23552500}, + {Date:1524225600000,Open:95.91,High:96.11,Low:94.05,Close:95,Volume:31154400}, + {Date:1524484800000,Open:95.74,High:96.29,Low:94.63,Close:95.35,Volume:22331800}, + {Date:1524571200000,Open:96.24,High:96.47,Low:92.41,Close:93.12,Volume:34524800}, + {Date:1524657600000,Open:93.3,High:93.3,Low:90.28,Close:92.31,Volume:33729300}, + {Date:1524744000000,Open:93.55,High:95.15,Low:93.1,Close:94.26,Volume:42529000}, + {Date:1524830400000,Open:97.6,High:97.9,Low:93.91,Close:95.82,Volume:48272800}, + {Date:1525089600000,Open:96.33,High:96.4,Low:93.15,Close:93.52,Volume:41523600}, + {Date:1525176000000,Open:93.21,High:95.29,Low:92.79,Close:95,Volume:31408900}, + {Date:1525262400000,Open:94.99,High:95.17,Low:93.19,Close:93.51,Volume:27471000}, + {Date:1525348800000,Open:92.96,High:94.93,Low:92.45,Close:94.07,Volume:31142500}, + {Date:1525435200000,Open:93.32,High:95.37,Low:92.92,Close:95.16,Volume:22531300}, + {Date:1525694400000,Open:95.17,High:96.71,Low:95.1,Close:96.22,Volume:24242000}, + {Date:1525780800000,Open:95.85,High:96.16,Low:95.06,Close:95.81,Volume:23484600}, + {Date:1525867200000,Open:96.01,High:96.97,Low:95.05,Close:96.94,Volume:27327400}, + {Date:1525953600000,Open:97.46,High:97.95,Low:97.05,Close:97.91,Volume:22388100}, + {Date:1526040000000,Open:97.8,High:97.87,Low:97.04,Close:97.7,Volume:16778300}, + {Date:1526299200000,Open:97.92,High:98.69,Low:97.31,Close:98.03,Volume:19454100}, + {Date:1526385600000,Open:97.24,High:97.85,Low:96.34,Close:97.32,Volume:24594000}, + {Date:1526472000000,Open:97.36,High:97.4,Low:96.62,Close:97.15,Volume:17384700}, + {Date:1526558400000,Open:96.76,High:97.54,Low:95.83,Close:96.18,Volume:17246700}, + {Date:1526644800000,Open:96.01,High:96.93,Low:96.01,Close:96.36,Volume:17865800}, + {Date:1526904000000,Open:97,High:98.01,Low:96.8,Close:97.6,Volume:19422500}, + {Date:1526990400000,Open:97.68,High:98.17,Low:97.2,Close:97.5,Volume:15441200}, + {Date:1527076800000,Open:96.71,High:98.73,Low:96.32,Close:98.66,Volume:21251200}, + {Date:1527163200000,Open:98.73,High:98.94,Low:96.81,Close:98.31,Volume:26649300}, + {Date:1527249600000,Open:98.3,High:98.98,Low:97.86,Close:98.36,Volume:18363900}, + {Date:1527595200000,Open:97.84,High:98.88,Low:97.23,Close:98.01,Volume:28671000}, + {Date:1527681600000,Open:98.31,High:99.25,Low:97.91,Close:98.95,Volume:22158500}, + {Date:1527768000000,Open:99.29,High:99.99,Low:98.61,Close:98.84,Volume:34140900}, + {Date:1527854400000,Open:99.28,High:100.86,Low:99.17,Close:100.79,Volume:28655600}, + {Date:1528113600000,Open:101.26,High:101.86,Low:100.85,Close:101.67,Volume:27281600}, + {Date:1528200000000,Open:102,High:102.33,Low:101.53,Close:102.19,Volume:23514400}, + {Date:1528286400000,Open:102.48,High:102.6,Low:101.9,Close:102.49,Volume:21122900}, + {Date:1528372800000,Open:102.65,High:102.69,Low:100.38,Close:100.88,Volume:28232200}, + {Date:1528459200000,Open:101.09,High:101.95,Low:100.54,Close:101.63,Volume:22165100}, + {Date:1528718400000,Open:101.01,High:101.59,Low:100.67,Close:101.05,Volume:23490900}, + {Date:1528804800000,Open:101.1,High:101.45,Low:100.75,Close:101.31,Volume:18325200}, + {Date:1528891200000,Open:101.72,High:102.01,Low:100.56,Close:100.85,Volume:29492900}, + {Date:1528977600000,Open:101.65,High:102.03,Low:101,Close:101.42,Volume:25691800}, + {Date:1529064000000,Open:101.51,High:101.53,Low:100.07,Close:100.13,Volume:65738600}, + {Date:1529323200000,Open:100.01,High:101.11,Low:99.42,Close:100.86,Volume:23586000}, + {Date:1529409600000,Open:99.65,High:101,Low:99.5,Close:100.86,Volume:28653100}, + {Date:1529496000000,Open:101.37,High:102.52,Low:101.12,Close:101.87,Volume:26180800}, + {Date:1529582400000,Open:102.08,High:102.46,Low:100.88,Close:101.14,Volume:23198200}, + {Date:1529668800000,Open:100.41,High:100.77,Low:99.63,Close:100.41,Volume:38923100}, + {Date:1529928000000,Open:100,High:100.11,Low:97.3,Close:98.39,Volume:35433300}, + {Date:1530014400000,Open:98.82,High:100.08,Low:98.75,Close:99.08,Volume:26897200}, + {Date:1530100800000,Open:99.58,High:100.02,Low:97.4,Close:97.54,Volume:31298400}, + {Date:1530187200000,Open:97.38,High:99.11,Low:97.26,Close:98.63,Volume:26650700}, + {Date:1530273600000,Open:98.93,High:99.91,Low:98.33,Close:98.61,Volume:28053200}, + {Date:1530532800000,Open:98.1,High:100.06,Low:98,Close:100.01,Volume:19564500}, + {Date:1530619200000,Open:100.48,High:100.63,Low:98.94,Close:99.05,Volume:14670300}, + {Date:1530792000000,Open:99.5,High:99.92,Low:99.03,Close:99.76,Volume:18977400}, + {Date:1530878400000,Open:99.89,High:101.43,Low:99.67,Close:101.16,Volume:19234600}, + {Date:1531137600000,Open:101.65,High:102.25,Low:101.25,Close:101.85,Volume:18212000}, + {Date:1531224000000,Open:102,High:102.51,Low:101.86,Close:102.12,Volume:19293100}, + {Date:1531310400000,Open:101.15,High:102.34,Low:101.1,Close:101.98,Volume:19644600}, + {Date:1531396800000,Open:102.77,High:104.41,Low:102.73,Close:104.19,Volume:24335900}, + {Date:1531483200000,Open:104.37,High:105.6,Low:104.09,Close:105.43,Volume:24635200}, + {Date:1531742400000,Open:105.4,High:105.82,Low:104.52,Close:104.91,Volume:21786900}, + {Date:1531828800000,Open:104.61,High:106.5,Low:104.32,Close:105.95,Volume:25901700}, + {Date:1531915200000,Open:105.94,High:106.05,Low:104.72,Close:105.12,Volume:29493900}, + {Date:1532001600000,Open:104.93,High:105.31,Low:103.89,Close:104.4,Volume:40171600}, + {Date:1532088000000,Open:108.08,High:108.2,Low:106.08,Close:106.27,Volume:56004000}, + {Date:1532347200000,Open:106.3,High:108.14,Low:106.13,Close:107.97,Volume:29707000}, + {Date:1532433600000,Open:108.57,High:108.82,Low:107.26,Close:107.66,Volume:26316600}, + {Date:1532520000000,Open:107.96,High:111.15,Low:107.6,Close:110.83,Volume:30702100}, + {Date:1532606400000,Open:110.74,High:111,Low:109.5,Close:109.62,Volume:31372100}, + {Date:1532692800000,Open:110.18,High:110.18,Low:106.14,Close:107.68,Volume:37005300}, + {Date:1532952000000,Open:107.19,High:107.53,Low:104.76,Close:105.37,Volume:34668300}, + {Date:1533038400000,Open:106.49,High:106.72,Low:105.38,Close:106.08,Volume:27655200}, + {Date:1533124800000,Open:106.03,High:106.45,Low:105.42,Close:106.28,Volume:23628700}, + {Date:1533211200000,Open:105.4,High:108.09,Low:104.84,Close:107.57,Volume:26104300}, + {Date:1533297600000,Open:107.8,High:108.05,Low:106.82,Close:108.04,Volume:18659600}, + {Date:1533556800000,Open:108.12,High:108.42,Low:107.56,Close:108.13,Volume:20265900}, + {Date:1533643200000,Open:108.56,High:109.1,Low:108.17,Close:108.88,Volume:16080200}, + {Date:1533729600000,Open:109.33,High:109.75,Low:108.76,Close:109.49,Volume:15487500}, + {Date:1533816000000,Open:109.71,High:110.16,Low:109.6,Close:109.67,Volume:13677200}, + {Date:1533902400000,Open:109.42,High:109.69,Low:108.38,Close:109,Volume:18183700}, + {Date:1534161600000,Open:109.24,High:109.58,Low:108.1,Close:108.21,Volume:18472500}, + {Date:1534248000000,Open:108.56,High:109.75,Low:108.04,Close:109.56,Volume:16788300}, + {Date:1534334400000,Open:108.49,High:108.99,Low:106.82,Close:107.66,Volume:29982800}, + {Date:1534420800000,Open:108.3,High:108.86,Low:107.3,Close:107.64,Volume:21384300}, + {Date:1534507200000,Open:107.36,High:107.9,Low:106.69,Close:107.58,Volume:18061500}, + {Date:1534766400000,Open:107.51,High:107.9,Low:106.48,Close:106.87,Volume:17914200}, + {Date:1534852800000,Open:106.92,High:107.35,Low:105.85,Close:105.98,Volume:22881900}, + {Date:1534939200000,Open:105.85,High:107.34,Low:105.78,Close:107.06,Volume:18000600}, + {Date:1535025600000,Open:107.15,High:108.18,Low:106.87,Close:107.56,Volume:18167700}, + {Date:1535112000000,Open:107.67,High:108.56,Low:107.56,Close:108.4,Volume:17234000}, + {Date:1535371200000,Open:109.27,High:109.64,Low:108.51,Close:109.6,Volume:19662300}, + {Date:1535457600000,Open:109.94,High:110.5,Low:109.79,Close:110.26,Volume:19151500}, + {Date:1535544000000,Open:110.45,High:112.03,Low:110.27,Close:112.02,Volume:20818000}, + {Date:1535630400000,Open:111.67,High:112.61,Low:111.44,Close:111.95,Volume:22798700}, + {Date:1535716800000,Open:111.69,High:112.78,Low:111.52,Close:112.33,Volume:23222700}, + {Date:1536062400000,Open:110.85,High:111.96,Low:110.22,Close:111.71,Volume:22634600}, + {Date:1536148800000,Open:111.01,High:111.42,Low:108.1,Close:108.49,Volume:32872400}, + {Date:1536235200000,Open:108.25,High:108.99,Low:107.51,Close:108.74,Volume:23477600}, + {Date:1536321600000,Open:108.23,High:108.72,Low:107.23,Close:108.21,Volume:22498600}, + {Date:1536580800000,Open:108.84,High:109.64,Low:108.36,Close:109.38,Volume:20727900}, + {Date:1536667200000,Open:108.9,High:111.59,Low:108.89,Close:111.24,Volume:24301800}, + {Date:1536753600000,Open:111.43,High:111.85,Low:110.51,Close:111.71,Volume:18891100}, + {Date:1536840000000,Open:112.12,High:113.73,Low:112.12,Close:112.91,Volume:26055600}, + {Date:1536926400000,Open:113.36,High:113.73,Low:112.44,Close:113.37,Volume:19122300}, + {Date:1537185600000,Open:113.69,High:113.7,Low:111.86,Close:112.14,Volume:20736500}, + {Date:1537272000000,Open:112.19,High:113.7,Low:111.72,Close:113.21,Volume:22170900}, + {Date:1537358400000,Open:113.05,High:113.32,Low:111.04,Close:111.7,Volume:21728400}, + {Date:1537444800000,Open:112.28,High:113.8,Low:111.93,Close:113.57,Volume:23714500}, + {Date:1537531200000,Open:114,High:115.29,Low:113.51,Close:114.26,Volume:71229700}, + {Date:1537790400000,Open:113.03,High:114.9,Low:112.22,Close:114.67,Volume:27334500}, + {Date:1537876800000,Open:114.8,High:115.1,Low:113.75,Close:114.45,Volume:22668000}, + {Date:1537963200000,Open:114.47,High:115.06,Low:113.74,Close:113.98,Volume:19352000}, + {Date:1538049600000,Open:114.78,High:114.91,Low:114.2,Close:114.41,Volume:19091300}, + {Date:1538136000000,Open:114.19,High:114.57,Low:113.68,Close:114.37,Volume:21647800}, + {Date:1538395200000,Open:114.75,High:115.68,Low:114.73,Close:115.61,Volume:18883100}, + {Date:1538481600000,Open:115.3,High:115.84,Low:114.44,Close:115.15,Volume:20787200}, + {Date:1538568000000,Open:115.42,High:116.18,Low:114.93,Close:115.17,Volume:16648000}, + {Date:1538654400000,Open:114.61,High:114.76,Low:111.63,Close:112.79,Volume:34821700}, + {Date:1538740800000,Open:112.63,High:113.17,Low:110.64,Close:112.13,Volume:29068900}, + {Date:1539000000000,Open:111.66,High:112.03,Low:109.34,Close:110.85,Volume:29640600}, + {Date:1539086400000,Open:111.14,High:113.08,Low:110.8,Close:112.26,Volume:26198600}, + {Date:1539172800000,Open:111.24,High:111.5,Low:105.79,Close:106.16,Volume:61376300}, + {Date:1539259200000,Open:105.35,High:108.93,Low:104.2,Close:105.91,Volume:63904300}, + {Date:1539345600000,Open:109.01,High:111.24,Low:107.12,Close:109.57,Volume:47742100}, + {Date:1539604800000,Open:108.91,High:109.48,Low:106.95,Close:107.6,Volume:32068100}, + {Date:1539691200000,Open:109.54,High:111.41,Low:108.95,Close:111,Volume:31610200}, + {Date:1539777600000,Open:111.68,High:111.81,Low:109.55,Close:110.71,Volume:26548200}, + {Date:1539864000000,Open:110.1,High:110.53,Low:107.83,Close:108.5,Volume:32506200}, + {Date:1539950400000,Open:108.93,High:110.86,Low:108.21,Close:108.66,Volume:32785500}, + {Date:1540209600000,Open:109.32,High:110.54,Low:108.24,Close:109.63,Volume:26545600}, + {Date:1540296000000,Open:107.77,High:108.97,Low:105.11,Close:108.1,Volume:43770400}, + {Date:1540382400000,Open:108.41,High:108.49,Low:101.59,Close:102.32,Volume:63897800}, + {Date:1540468800000,Open:106.55,High:109.27,Low:106.15,Close:108.3,Volume:61646800}, + {Date:1540555200000,Open:105.69,High:108.75,Low:104.76,Close:106.96,Volume:55523100}, + {Date:1540814400000,Open:108.11,High:108.7,Low:101.63,Close:103.85,Volume:55162000}, + {Date:1540900800000,Open:103.66,High:104.38,Low:100.11,Close:103.73,Volume:65350900}, + {Date:1540987200000,Open:105.44,High:108.14,Low:105.39,Close:106.81,Volume:51062400}, + {Date:1541073600000,Open:107.05,High:107.32,Low:105.53,Close:105.92,Volume:33384200}, + {Date:1541160000000,Open:106.48,High:107.32,Low:104.98,Close:106.16,Volume:37680200}, + {Date:1541419200000,Open:106.37,High:107.74,Low:105.9,Close:107.51,Volume:27922100}, + {Date:1541505600000,Open:107.38,High:108.84,Low:106.28,Close:107.72,Volume:24340200}, + {Date:1541592000000,Open:109.44,High:112.24,Low:109.4,Close:111.96,Volume:37901700}, + {Date:1541678400000,Open:111.8,High:112.21,Low:110.91,Close:111.75,Volume:25644100}, + {Date:1541764800000,Open:110.85,High:111.45,Low:108.76,Close:109.57,Volume:32039200}, + {Date:1542024000000,Open:109.42,High:109.96,Low:106.1,Close:106.87,Volume:33621800}, + {Date:1542110400000,Open:107.55,High:108.74,Low:106.64,Close:106.94,Volume:35374600}, + {Date:1542196800000,Open:108.1,High:108.26,Low:104.47,Close:104.97,Volume:39495100}, + {Date:1542283200000,Open:104.99,High:107.8,Low:103.91,Close:107.28,Volume:38505200}, + {Date:1542369600000,Open:107.08,High:108.88,Low:106.8,Close:108.29,Volume:33502100}, + {Date:1542628800000,Open:108.27,High:108.56,Low:103.55,Close:104.62,Volume:44773900}, + {Date:1542715200000,Open:101.8,High:102.97,Low:99.35,Close:101.71,Volume:64052500}, + {Date:1542801600000,Open:103.6,High:104.43,Low:102.24,Close:103.11,Volume:28130600}, + {Date:1542974400000,Open:102.17,High:103.81,Low:102,Close:103.07,Volume:13823100}, + {Date:1543233600000,Open:104.79,High:106.63,Low:104.58,Close:106.47,Volume:32336200}, + {Date:1543320000000,Open:106.27,High:107.33,Low:105.36,Close:107.14,Volume:29124500}, + {Date:1543406400000,Open:107.89,High:111.33,Low:107.86,Close:111.12,Volume:46788500}, + {Date:1543492800000,Open:110.33,High:111.12,Low:109.03,Close:110.19,Volume:28123200}, + {Date:1543579200000,Open:110.7,High:110.97,Low:109.36,Close:110.89,Volume:33665600}, + {Date:1543838400000,Open:113,High:113.42,Low:110.73,Close:112.09,Volume:34732800}, + {Date:1543924800000,Open:111.94,High:112.64,Low:108.21,Close:108.52,Volume:45197000}, + {Date:1544097600000,Open:105.82,High:109.24,Low:105,Close:109.19,Volume:49107400}, + {Date:1544184000000,Open:108.38,High:109.45,Low:104.3,Close:104.82,Volume:45044900}, + {Date:1544443200000,Open:104.8,High:107.98,Low:103.89,Close:107.59,Volume:40801500}, + {Date:1544529600000,Open:109.8,High:110.95,Low:107.44,Close:108.59,Volume:42381900}, + {Date:1544616000000,Open:110.89,High:111.27,Low:109.04,Close:109.08,Volume:36183000}, + {Date:1544702400000,Open:109.58,High:110.87,Low:108.63,Close:109.45,Volume:31333400}, + {Date:1544788800000,Open:108.25,High:109.26,Low:105.5,Close:106.03,Volume:47043100}, + {Date:1545048000000,Open:105.41,High:105.8,Low:101.71,Close:102.89,Volume:56957300}, + {Date:1545134400000,Open:103.75,High:104.51,Low:102.52,Close:103.97,Volume:49319200}, + {Date:1545220800000,Open:103.65,High:106.88,Low:101.35,Close:103.69,Volume:68198200}, + {Date:1545307200000,Open:103.05,High:104.31,Low:98.78,Close:101.51,Volume:70334200}, + {Date:1545393600000,Open:101.63,High:103,Low:97.46,Close:98.23,Volume:111242100}, + {Date:1545652800000,Open:97.68,High:97.97,Low:93.98,Close:94.13,Volume:43935200}, + {Date:1545825600000,Open:95.14,High:100.69,Low:93.96,Close:100.56,Volume:51634800}, + {Date:1545912000000,Open:99.3,High:101.19,Low:96.4,Close:101.18,Volume:49498500}, + {Date:1545998400000,Open:102.09,High:102.41,Low:99.52,Close:100.39,Volume:38196300}, + {Date:1546257600000,Open:101.29,High:102.4,Low:100.44,Close:101.57,Volume:33173800}, + {Date:1546430400000,Open:99.55,High:101.75,Low:98.94,Close:101.12,Volume:35329300}, + {Date:1546516800000,Open:100.1,High:100.19,Low:97.2,Close:97.4,Volume:42579100}, + {Date:1546603200000,Open:99.72,High:102.51,Low:98.93,Close:101.93,Volume:44060600}, + {Date:1546862400000,Open:101.64,High:103.27,Low:100.98,Close:102.06,Volume:35656100}, + {Date:1546948800000,Open:103.04,High:103.97,Low:101.71,Close:102.8,Volume:31514400}, + {Date:1547035200000,Open:103.86,High:104.88,Low:103.24,Close:104.27,Volume:32280800}, + {Date:1547121600000,Open:103.22,High:103.75,Low:102.38,Close:103.6,Volume:30067600}, + {Date:1547208000000,Open:103.19,High:103.44,Low:101.64,Close:102.8,Volume:28314200}, + {Date:1547467200000,Open:101.9,High:102.87,Low:101.26,Close:102.05,Volume:28437100}, + {Date:1547553600000,Open:102.51,High:105.05,Low:101.88,Close:105.01,Volume:31587600}, + {Date:1547640000000,Open:105.26,High:106.26,Low:104.96,Close:105.38,Volume:29853900}, + {Date:1547726400000,Open:105,High:106.63,Low:104.76,Close:106.12,Volume:28393000}, + {Date:1547812800000,Open:107.46,High:107.9,Low:105.91,Close:107.71,Volume:37427600}, + {Date:1548158400000,Open:106.75,High:107.1,Low:104.86,Close:105.68,Volume:32371300}, + {Date:1548244800000,Open:106.12,High:107.04,Low:105.34,Close:106.71,Volume:25874300}, + {Date:1548331200000,Open:106.86,High:107,Low:105.34,Close:106.2,Volume:23164800}, + {Date:1548417600000,Open:107.24,High:107.88,Low:106.2,Close:107.17,Volume:31225600}, + {Date:1548676800000,Open:106.26,High:106.48,Low:104.66,Close:105.08,Volume:29476700}, + {Date:1548763200000,Open:104.88,High:104.97,Low:102.17,Close:102.94,Volume:31490500}, + {Date:1548849600000,Open:104.62,High:106.38,Low:104.33,Close:106.38,Volume:49471900}, + {Date:1548936000000,Open:103.8,High:105.22,Low:103.18,Close:104.43,Volume:55636400}, + {Date:1549022400000,Open:103.78,High:104.1,Low:102.35,Close:102.78,Volume:35535700}, + {Date:1549281600000,Open:102.87,High:105.8,Low:102.77,Close:105.74,Volume:31315100}, + {Date:1549368000000,Open:106.06,High:107.27,Low:105.96,Close:107.22,Volume:27325400}, + {Date:1549454400000,Open:107,High:107,Low:105.53,Close:106.03,Volume:20609800}, + {Date:1549540800000,Open:105.19,High:105.59,Low:104.29,Close:105.27,Volume:29760700}, + {Date:1549627200000,Open:104.39,High:105.78,Low:104.26,Close:105.67,Volume:21461100}, + {Date:1549886400000,Open:106.2,High:106.58,Low:104.97,Close:105.25,Volume:18914100}, + {Date:1549972800000,Open:106.14,High:107.14,Low:105.48,Close:106.89,Volume:25056600}, + {Date:1550059200000,Open:107.5,High:107.78,Low:106.71,Close:106.81,Volume:18394900}, + {Date:1550145600000,Open:106.31,High:107.29,Low:105.66,Close:106.9,Volume:21784700}, + {Date:1550232000000,Open:107.91,High:108.3,Low:107.36,Close:108.22,Volume:26606900}, + {Date:1550577600000,Open:107.79,High:108.66,Low:107.78,Close:108.17,Volume:18038500}, + {Date:1550664000000,Open:107.86,High:107.94,Low:106.29,Close:107.15,Volume:21607700}, + {Date:1550750400000,Open:106.9,High:109.48,Low:106.87,Close:109.41,Volume:29063200}, + {Date:1550836800000,Open:110.05,High:111.2,Low:109.82,Close:110.97,Volume:27763200}, + {Date:1551096000000,Open:111.76,High:112.18,Low:111.26,Close:111.59,Volume:23750600}, + {Date:1551182400000,Open:111.26,High:113.24,Low:111.17,Close:112.36,Volume:21536700}, + {Date:1551268800000,Open:111.69,High:112.36,Low:110.88,Close:112.17,Volume:21487100}, + {Date:1551355200000,Open:112.04,High:112.88,Low:111.73,Close:112.03,Volume:29083900}, + {Date:1551441600000,Open:112.89,High:113.02,Low:111.67,Close:112.53,Volume:23501200}, + {Date:1551700800000,Open:113.02,High:113.25,Low:110.8,Close:112.26,Volume:26608000}, + {Date:1551787200000,Open:112.25,High:112.39,Low:111.23,Close:111.7,Volume:19538300}, + {Date:1551873600000,Open:111.87,High:112.66,Low:111.43,Close:111.75,Volume:17687000}, + {Date:1551960000000,Open:111.4,High:111.55,Low:109.87,Close:110.39,Volume:25339000}, + {Date:1552046400000,Open:109.16,High:110.71,Low:108.8,Close:110.51,Volume:22818400}, + {Date:1552305600000,Open:110.99,High:112.95,Low:110.98,Close:112.83,Volume:26491600}, + {Date:1552392000000,Open:112.82,High:113.99,Low:112.65,Close:113.62,Volume:26132700}, + {Date:1552478400000,Open:114.13,High:115,Low:113.78,Close:114.5,Volume:35513800}, + {Date:1552564800000,Open:114.54,High:115.2,Low:114.33,Close:114.59,Volume:30763400}, + {Date:1552651200000,Open:115.34,High:117.25,Low:114.59,Close:115.91,Volume:54681100}, + {Date:1552910400000,Open:116.17,High:117.61,Low:116.05,Close:117.57,Volume:31207600}, + {Date:1552996800000,Open:118.09,High:118.44,Low:116.99,Close:117.65,Volume:37588700}, + {Date:1553083200000,Open:117.39,High:118.75,Low:116.71,Close:117.52,Volume:28113300}, + {Date:1553169600000,Open:117.14,High:120.82,Low:117.09,Close:120.22,Volume:29854400}, + {Date:1553256000000,Open:119.5,High:119.59,Low:117.04,Close:117.05,Volume:33624500}, + {Date:1553515200000,Open:116.56,High:118.01,Low:116.32,Close:117.66,Volume:27067100}, + {Date:1553601600000,Open:118.62,High:118.71,Low:116.85,Close:117.91,Volume:26097700}, + {Date:1553688000000,Open:117.88,High:118.21,Low:115.52,Close:116.77,Volume:22733400}, + {Date:1553774400000,Open:117.44,High:117.58,Low:116.13,Close:116.93,Volume:18334800}, + {Date:1553860800000,Open:118.07,High:118.32,Low:116.96,Close:117.94,Volume:25399800}, + {Date:1554120000000,Open:118.95,High:119.11,Low:118.1,Close:119.02,Volume:22789100}, + {Date:1554206400000,Open:119.06,High:119.48,Low:118.52,Close:119.19,Volume:18142300}, + {Date:1554292800000,Open:119.86,High:120.43,Low:119.15,Close:119.97,Volume:22860700}, + {Date:1554379200000,Open:120.1,High:120.23,Low:118.38,Close:119.36,Volume:20112800}, + {Date:1554465600000,Open:119.39,High:120.23,Low:119.37,Close:119.89,Volume:15826200}, + {Date:1554724800000,Open:119.81,High:120.02,Low:118.64,Close:119.93,Volume:15116200}, + {Date:1554811200000,Open:118.63,High:119.54,Low:118.58,Close:119.28,Volume:17612000}, + {Date:1554897600000,Open:119.76,High:120.35,Low:119.54,Close:120.19,Volume:16477200}, + {Date:1554984000000,Open:120.54,High:120.85,Low:119.92,Close:120.33,Volume:14209100}, + {Date:1555070400000,Open:120.64,High:120.98,Low:120.37,Close:120.95,Volume:19745100}, + {Date:1555329600000,Open:120.94,High:121.58,Low:120.57,Close:121.05,Volume:15792600}, + {Date:1555416000000,Open:121.64,High:121.65,Low:120.1,Close:120.77,Volume:14071800}, + {Date:1555502400000,Open:121.24,High:121.85,Low:120.54,Close:121.77,Volume:19300900}, + {Date:1555588800000,Open:122.19,High:123.52,Low:121.3,Close:123.37,Volume:27991000}, + {Date:1555934400000,Open:122.62,High:124,Low:122.57,Close:123.76,Volume:15648700}, + {Date:1556020800000,Open:124.1,High:125.58,Low:123.83,Close:125.44,Volume:24025500}, + {Date:1556107200000,Open:125.79,High:125.85,Low:124.52,Close:125.01,Volume:31257000}, + {Date:1556193600000,Open:130.06,High:131.37,Low:128.83,Close:129.15,Volume:38033900}, + {Date:1556280000000,Open:129.7,High:130.52,Low:129.02,Close:129.89,Volume:23654900}, + {Date:1556539200000,Open:129.9,High:130.18,Low:129.35,Close:129.77,Volume:16324200}, + {Date:1556625600000,Open:129.81,High:130.7,Low:129.39,Close:130.6,Volume:24166500}, + {Date:1556712000000,Open:130.53,High:130.65,Low:127.7,Close:127.88,Volume:26821700}, + {Date:1556798400000,Open:127.98,High:128,Low:125.52,Close:126.21,Volume:27350200}, + {Date:1556884800000,Open:127.36,High:129.43,Low:127.25,Close:128.9,Volume:24911100}, + {Date:1557144000000,Open:126.39,High:128.56,Low:126.11,Close:128.15,Volume:24239800}, + {Date:1557230400000,Open:126.46,High:127.18,Low:124.22,Close:125.52,Volume:36017700}, + {Date:1557316800000,Open:125.44,High:126.37,Low:124.75,Close:125.51,Volume:28419000}, + {Date:1557403200000,Open:124.29,High:125.79,Low:123.57,Close:125.5,Volume:27235800}, + {Date:1557489600000,Open:124.91,High:127.93,Low:123.82,Close:127.13,Volume:30915100}, + {Date:1557748800000,Open:124.11,High:125.55,Low:123.04,Close:123.35,Volume:33944900}, + {Date:1557835200000,Open:123.87,High:125.88,Low:123.7,Close:124.73,Volume:25266300}, + {Date:1557921600000,Open:124.26,High:126.71,Low:123.7,Close:126.02,Volume:24722700}, + {Date:1558008000000,Open:126.75,High:129.38,Low:126.46,Close:128.93,Volume:30112200}, + {Date:1558094400000,Open:128.31,High:130.46,Low:127.92,Close:128.07,Volume:25770500}, + {Date:1558353600000,Open:126.52,High:127.59,Low:125.76,Close:126.22,Volume:23706900}, + {Date:1558440000000,Open:127.43,High:127.53,Low:126.58,Close:126.9,Volume:15293300}, + {Date:1558526400000,Open:126.62,High:128.24,Low:126.52,Close:127.67,Volume:15396500}, + {Date:1558612800000,Open:126.2,High:126.29,Low:124.74,Close:126.18,Volume:23603800}, + {Date:1558699200000,Open:126.91,High:127.42,Low:125.97,Close:126.24,Volume:14123400}, + {Date:1559044800000,Open:126.98,High:128,Low:126.05,Close:126.16,Volume:23128400}, + {Date:1559131200000,Open:125.38,High:125.39,Low:124.04,Close:124.94,Volume:22763100}, + {Date:1559217600000,Open:125.26,High:125.76,Low:124.78,Close:125.73,Volume:16829600}, + {Date:1559304000000,Open:124.23,High:124.62,Low:123.32,Close:123.68,Volume:26646800}, + {Date:1559563200000,Open:123.85,High:124.37,Low:119.01,Close:119.84,Volume:37983600}, + {Date:1559649600000,Open:121.28,High:123.28,Low:120.65,Close:123.16,Volume:29382600}, + {Date:1559736000000,Open:124.95,High:125.87,Low:124.21,Close:125.83,Volume:24926100}, + {Date:1559822400000,Open:126.44,High:127.97,Low:125.6,Close:127.82,Volume:21459000}, + {Date:1559908800000,Open:129.19,High:132.25,Low:128.26,Close:131.4,Volume:33885600}, + {Date:1560168000000,Open:132.4,High:134.08,Low:132,Close:132.6,Volume:26477100}, + {Date:1560254400000,Open:133.88,High:134.24,Low:131.28,Close:132.1,Volume:23913700}, + {Date:1560340800000,Open:131.4,High:131.97,Low:130.71,Close:131.49,Volume:17092500}, + {Date:1560427200000,Open:131.98,High:133,Low:131.56,Close:132.32,Volume:17200800}, + {Date:1560513600000,Open:132.26,High:133.79,Low:131.64,Close:132.45,Volume:17821700}, + {Date:1560772800000,Open:132.63,High:133.73,Low:132.53,Close:132.85,Volume:14517800}, + {Date:1560859200000,Open:134.19,High:135.24,Low:133.57,Close:135.16,Volume:25934500}, + {Date:1560945600000,Open:135,High:135.93,Low:133.81,Close:135.69,Volume:23744400}, + {Date:1561032000000,Open:137.45,High:137.66,Low:135.72,Close:136.95,Volume:33042600}, + {Date:1561118400000,Open:136.58,High:137.73,Low:136.46,Close:136.97,Volume:36727900}, + {Date:1561377600000,Open:137,High:138.4,Low:137,Close:137.78,Volume:20628800}, + {Date:1561464000000,Open:137.25,High:137.59,Low:132.73,Close:133.43,Volume:33327400}, + {Date:1561550400000,Open:134.35,High:135.74,Low:133.6,Close:133.93,Volume:23657700}, + {Date:1561636800000,Open:134.14,High:134.71,Low:133.51,Close:134.15,Volume:16557500}, + {Date:1561723200000,Open:134.57,High:134.6,Low:133.16,Close:133.96,Volume:30043000}, + {Date:1561982400000,Open:136.63,High:136.7,Low:134.97,Close:135.68,Volume:22613500}, + {Date:1562068800000,Open:136.12,High:136.59,Low:135.34,Close:136.58,Volume:15237800}, + {Date:1562155200000,Open:136.8,High:137.74,Low:136.29,Close:137.46,Volume:13629300}, + {Date:1562328000000,Open:135.94,High:137.33,Low:135.72,Close:137.06,Volume:18141100}, + {Date:1562587200000,Open:136.4,High:137.1,Low:135.37,Close:136.96,Volume:16779700}, + {Date:1562673600000,Open:136,High:136.97,Low:135.8,Close:136.46,Volume:19953100}, + {Date:1562760000000,Open:137.13,High:138.58,Low:137.02,Close:137.85,Volume:24204400}, + {Date:1562846400000,Open:138.2,High:139.22,Low:137.87,Close:138.4,Volume:22327900}, + {Date:1562932800000,Open:138.85,High:139.13,Low:138.01,Close:138.9,Volume:18936800}, + {Date:1563192000000,Open:139.44,High:139.54,Low:138.46,Close:138.9,Volume:16651500}, + {Date:1563278400000,Open:138.96,High:139.05,Low:136.52,Close:137.08,Volume:22726100}, + {Date:1563364800000,Open:137.7,High:137.93,Low:136.22,Close:136.27,Volume:20211000}, + {Date:1563451200000,Open:135.55,High:136.62,Low:134.67,Close:136.42,Volume:30381800}, + {Date:1563537600000,Open:140.22,High:140.67,Low:136.45,Close:136.62,Volume:48992400}, + {Date:1563796800000,Open:137.41,High:139.19,Low:137.33,Close:138.43,Volume:25074900}, + {Date:1563883200000,Open:139.76,High:139.99,Low:138.03,Close:139.29,Volume:18034600}, + {Date:1563969600000,Open:138.9,High:140.74,Low:138.85,Close:140.72,Volume:20738300}, + {Date:1564056000000,Open:140.43,High:140.61,Low:139.32,Close:140.19,Volume:18356900}, + {Date:1564142400000,Open:140.37,High:141.68,Low:140.3,Close:141.34,Volume:19037600}, + {Date:1564401600000,Open:141.5,High:141.51,Low:139.37,Close:141.03,Volume:16605900}, + {Date:1564488000000,Open:140.14,High:141.22,Low:139.8,Close:140.35,Volume:16846500}, + {Date:1564574400000,Open:140.33,High:140.49,Low:135.08,Close:136.27,Volume:38598800}, + {Date:1564660800000,Open:137,High:140.94,Low:136.93,Close:138.06,Volume:40557500}, + {Date:1564747200000,Open:138.09,High:138.32,Low:135.26,Close:136.9,Volume:30791600}, + {Date:1565006400000,Open:133.3,High:133.93,Low:130.78,Close:132.21,Volume:42749600}, + {Date:1565092800000,Open:133.8,High:135.68,Low:133.21,Close:134.69,Volume:32696700}, + {Date:1565179200000,Open:133.79,High:135.65,Low:131.83,Close:135.28,Volume:33414500}, + {Date:1565265600000,Open:136.6,High:138.99,Low:135.93,Close:138.89,Volume:27496500}, + {Date:1565352000000,Open:138.61,High:139.38,Low:136.46,Close:137.71,Volume:23466700}, + {Date:1565611200000,Open:137.07,High:137.86,Low:135.24,Close:135.79,Volume:20484300}, + {Date:1565697600000,Open:136.05,High:138.8,Low:135,Close:138.6,Volume:25154600}, + {Date:1565784000000,Open:136.36,High:136.92,Low:133.67,Close:133.98,Volume:32527300}, + {Date:1565870400000,Open:134.39,High:134.58,Low:132.25,Close:133.68,Volume:28074400}, + {Date:1565956800000,Open:134.88,High:136.46,Low:134.72,Close:136.13,Volume:24449100}, + {Date:1566216000000,Open:137.85,High:138.55,Low:136.89,Close:138.41,Volume:24355700}, + {Date:1566302400000,Open:138.21,High:138.71,Low:137.24,Close:137.26,Volume:21170800}, + {Date:1566388800000,Open:138.55,High:139.49,Low:138,Close:138.79,Volume:14970300}, + {Date:1566475200000,Open:138.66,High:139.2,Low:136.29,Close:137.78,Volume:18697000}, + {Date:1566561600000,Open:137.19,High:138.35,Low:132.8,Close:133.39,Volume:38508600}, + {Date:1566820800000,Open:134.99,High:135.56,Low:133.9,Close:135.45,Volume:20312600}, + {Date:1566907200000,Open:136.39,High:136.72,Low:134.66,Close:135.74,Volume:23102100}, + {Date:1566993600000,Open:134.88,High:135.76,Low:133.55,Close:135.56,Volume:17393300}, + {Date:1567080000000,Open:137.25,High:138.44,Low:136.91,Close:138.12,Volume:20168700}, + {Date:1567166400000,Open:139.15,High:139.18,Low:136.27,Close:137.86,Volume:23940100}, + {Date:1567512000000,Open:136.61,High:137.2,Low:135.7,Close:136.04,Volume:18869300}, + {Date:1567598400000,Open:137.3,High:137.69,Low:136.48,Close:137.63,Volume:17995900}, + {Date:1567684800000,Open:139.11,High:140.38,Low:138.76,Close:140.05,Volume:26101800}, + {Date:1567771200000,Open:140.03,High:140.18,Low:138.2,Close:139.1,Volume:20824500}, + {Date:1568030400000,Open:139.59,High:139.75,Low:136.46,Close:137.52,Volume:25773900}, + {Date:1568116800000,Open:136.8,High:136.89,Low:134.51,Close:136.08,Volume:28903400}, + {Date:1568203200000,Open:135.91,High:136.27,Low:135.09,Close:136.12,Volume:24726100}, + {Date:1568289600000,Open:137.85,High:138.42,Low:136.87,Close:137.52,Volume:27010000}, + {Date:1568376000000,Open:137.78,High:138.06,Low:136.57,Close:137.32,Volume:23363100}, + {Date:1568635200000,Open:135.83,High:136.7,Low:135.66,Close:136.33,Volume:16731400}, + {Date:1568721600000,Open:136.96,High:137.52,Low:136.43,Close:137.39,Volume:17814200}, + {Date:1568808000000,Open:137.36,High:138.67,Low:136.53,Close:138.52,Volume:23982100}, + {Date:1568894400000,Open:140.3,High:142.37,Low:140.07,Close:141.07,Volume:35772100}, + {Date:1568980800000,Open:141.01,High:141.65,Low:138.25,Close:139.44,Volume:39167300}, + {Date:1569240000000,Open:139.23,High:139.63,Low:138.44,Close:139.14,Volume:17139300}, + {Date:1569326400000,Open:140.36,High:140.69,Low:136.88,Close:137.38,Volume:29773200}, + {Date:1569412800000,Open:137.5,High:139.96,Low:136.03,Close:139.36,Volume:21382000}, + {Date:1569499200000,Open:139.44,High:140.18,Low:138.44,Close:139.54,Volume:17456600}, + {Date:1569585600000,Open:140.15,High:140.36,Low:136.65,Close:137.73,Volume:22477700}, + {Date:1569844800000,Open:138.05,High:139.22,Low:137.78,Close:139.03,Volume:17280900}, + {Date:1569931200000,Open:139.66,High:140.25,Low:137,Close:137.07,Volume:21466600}, + {Date:1570017600000,Open:136.25,High:136.37,Low:133.58,Close:134.65,Volume:30521700}, + {Date:1570104000000,Open:134.95,High:136.75,Low:133.22,Close:136.28,Volume:24132900}, + {Date:1570190400000,Open:136.75,High:138.25,Low:136.42,Close:138.12,Volume:22897700}, + {Date:1570449600000,Open:137.14,High:138.18,Low:137.02,Close:137.12,Volume:15303700}, + {Date:1570536000000,Open:137.08,High:137.76,Low:135.62,Close:135.67,Volume:25550500}, + {Date:1570622400000,Open:137.46,High:138.7,Low:136.97,Close:138.24,Volume:19749900}, + {Date:1570708800000,Open:138.49,High:139.67,Low:138.25,Close:139.1,Volume:17654600}, + {Date:1570795200000,Open:140.12,High:141.03,Low:139.5,Close:139.68,Volume:25446000}, + {Date:1571054400000,Open:139.69,High:140.29,Low:139.52,Close:139.55,Volume:13304300}, + {Date:1571140800000,Open:140.06,High:141.79,Low:139.81,Close:141.57,Volume:19695700}, + {Date:1571227200000,Open:140.79,High:140.99,Low:139.53,Close:140.41,Volume:20751600}, + {Date:1571313600000,Open:140.95,High:141.42,Low:139.02,Close:139.69,Volume:21460600}, + {Date:1571400000000,Open:139.76,High:140,Low:136.56,Close:137.41,Volume:32273500}, + {Date:1571659200000,Open:138.45,High:138.5,Low:137.01,Close:138.43,Volume:20078200}, + {Date:1571745600000,Open:138.97,High:140.01,Low:136.26,Close:136.37,Volume:27431000}, + {Date:1571832000000,Open:136.88,High:137.45,Low:135.61,Close:137.24,Volume:29844600}, + {Date:1571918400000,Open:139.39,High:140.42,Low:138.67,Close:139.94,Volume:37029300}, + {Date:1572004800000,Open:139.34,High:141.14,Low:139.2,Close:140.73,Volume:25959700}, + {Date:1572264000000,Open:144.4,High:145.67,Low:143.51,Close:144.19,Volume:35280100}, + {Date:1572350400000,Open:144.08,High:144.5,Low:142.65,Close:142.83,Volume:20589500}, + {Date:1572436800000,Open:143.52,High:145,Low:142.79,Close:144.61,Volume:18496600}, + {Date:1572523200000,Open:144.9,High:144.93,Low:142.99,Close:143.37,Volume:24605100}, + {Date:1572609600000,Open:144.26,High:144.42,Low:142.97,Close:143.72,Volume:33128400}, + {Date:1572868800000,Open:144.83,High:145,Low:144.16,Close:144.55,Volume:16912000}, + {Date:1572955200000,Open:144.97,High:145.02,Low:143.91,Close:144.46,Volume:18250200}, + {Date:1573041600000,Open:144.37,High:144.52,Low:143.2,Close:144.06,Volume:16575800}, + {Date:1573128000000,Open:143.84,High:144.88,Low:143.77,Close:144.26,Volume:17786700}, + {Date:1573214400000,Open:143.98,High:145.99,Low:143.76,Close:145.96,Volume:16732700}, + {Date:1573473600000,Open:145.34,High:146.42,Low:144.73,Close:146.11,Volume:14362600}, + {Date:1573560000000,Open:146.28,High:147.57,Low:146.06,Close:147.07,Volume:18641600}, + {Date:1573646400000,Open:146.74,High:147.46,Low:146.28,Close:147.31,Volume:16919200}, + {Date:1573732800000,Open:147.02,High:148.41,Low:147,Close:148.06,Volume:19729800}, + {Date:1573819200000,Open:148.93,High:149.99,Low:148.27,Close:149.97,Volume:23485700}, + {Date:1574078400000,Open:150.07,High:150.55,Low:148.98,Close:150.34,Volume:21534000}, + {Date:1574164800000,Open:150.88,High:151.33,Low:150.2,Close:150.39,Volume:23935700}, + {Date:1574251200000,Open:150.31,High:150.84,Low:148.46,Close:149.62,Volume:25696800}, + {Date:1574337600000,Open:149.4,High:149.8,Low:148.5,Close:149.48,Volume:18576100}, + {Date:1574424000000,Open:150.07,High:150.3,Low:148.82,Close:149.59,Volume:15901800}, + {Date:1574683200000,Open:150,High:151.35,Low:149.92,Close:151.23,Volume:22420900}, + {Date:1574769600000,Open:151.36,High:152.42,Low:151.32,Close:152.03,Volume:24620100}, + {Date:1574856000000,Open:152.33,High:152.5,Low:151.52,Close:152.32,Volume:15184400}, + {Date:1575028800000,Open:152.1,High:152.3,Low:151.28,Close:151.38,Volume:11977300}, + {Date:1575288000000,Open:151.81,High:151.83,Low:148.32,Close:149.55,Volume:27418400}, + {Date:1575374400000,Open:147.49,High:149.43,Low:146.65,Close:149.31,Volume:24066000}, + {Date:1575460800000,Open:150.14,High:150.18,Low:149.2,Close:149.85,Volume:17574700}, + {Date:1575547200000,Open:150.05,High:150.32,Low:149.48,Close:149.93,Volume:17869100}, + {Date:1575633600000,Open:150.99,High:151.87,Low:150.27,Close:151.75,Volume:16403500}, + {Date:1575892800000,Open:151.07,High:152.21,Low:150.91,Close:151.36,Volume:16687400}, + {Date:1575979200000,Open:151.29,High:151.89,Low:150.76,Close:151.13,Volume:16476100}, + {Date:1576065600000,Open:151.54,High:151.87,Low:150.33,Close:151.7,Volume:18856600}, + {Date:1576152000000,Open:151.65,High:153.44,Low:151.02,Close:153.24,Volume:24612100}, + {Date:1576238400000,Open:153,High:154.89,Low:152.83,Close:154.53,Volume:23845400}, + {Date:1576497600000,Open:155.11,High:155.9,Low:154.82,Close:155.53,Volume:24144200}, + {Date:1576584000000,Open:155.45,High:155.71,Low:154.45,Close:154.69,Volume:25425600}, + {Date:1576670400000,Open:154.3,High:155.48,Low:154.18,Close:154.37,Volume:24129200}, + {Date:1576756800000,Open:154,High:155.77,Low:153.75,Close:155.71,Volume:24958900}, + {Date:1576843200000,Open:157.35,High:158.49,Low:156.29,Close:157.41,Volume:53477500}, + {Date:1577102400000,Open:158.12,High:158.12,Low:157.27,Close:157.41,Volume:17718200}, + {Date:1577188800000,Open:157.48,High:157.71,Low:157.12,Close:157.38,Volume:8989200}, + {Date:1577361600000,Open:157.56,High:158.73,Low:157.4,Close:158.67,Volume:14520600}, + {Date:1577448000000,Open:159.45,High:159.55,Low:158.22,Close:158.96,Volume:18412800}, + {Date:1577707200000,Open:158.99,High:159.02,Low:156.73,Close:157.59,Volume:16348400}, + {Date:1577793600000,Open:156.77,High:157.77,Low:156.45,Close:157.7,Volume:18369400}, + {Date:1577966400000,Open:158.78,High:160.73,Low:158.33,Close:160.62,Volume:22622100}, + {Date:1578052800000,Open:158.32,High:159.95,Low:158.06,Close:158.62,Volume:21116200}, + {Date:1578312000000,Open:157.08,High:159.1,Low:156.51,Close:159.03,Volume:20813700}, + {Date:1578398400000,Open:159.32,High:159.67,Low:157.32,Close:157.58,Volume:21634100}, + {Date:1578484800000,Open:158.93,High:160.8,Low:157.95,Close:160.09,Volume:27746500}, + {Date:1578571200000,Open:161.84,High:162.22,Low:161.03,Close:162.09,Volume:21385000}, + {Date:1578657600000,Open:162.82,High:163.22,Low:161.18,Close:161.34,Volume:20725900}, + {Date:1578916800000,Open:161.76,High:163.31,Low:161.26,Close:163.28,Volume:21626500}, + {Date:1579003200000,Open:163.39,High:163.6,Low:161.72,Close:162.13,Volume:23477400}, + {Date:1579089600000,Open:162.62,High:163.94,Low:162.57,Close:163.18,Volume:21417900}, + {Date:1579176000000,Open:164.35,High:166.24,Low:164.03,Close:166.17,Volume:23865400}, + {Date:1579262400000,Open:167.42,High:167.47,Low:165.43,Close:167.1,Volume:34371700}, + {Date:1579608000000,Open:166.68,High:168.19,Low:166.43,Close:166.5,Volume:29517200}, + {Date:1579694400000,Open:167.4,High:167.49,Low:165.68,Close:165.7,Volume:24138800}, + {Date:1579780800000,Open:166.19,High:166.8,Low:165.27,Close:166.72,Volume:19680800}, + {Date:1579867200000,Open:167.51,High:167.53,Low:164.45,Close:165.04,Volume:24918100}, + {Date:1580126400000,Open:161.15,High:163.38,Low:160.2,Close:162.28,Volume:32078100}, + {Date:1580212800000,Open:163.78,High:165.76,Low:163.07,Close:165.46,Volume:24899900}, + {Date:1580299200000,Open:167.84,High:168.75,Low:165.69,Close:168.04,Volume:34754500}, + {Date:1580385600000,Open:174.05,High:174.05,Low:170.79,Close:172.78,Volume:51597500}, + {Date:1580472000000,Open:172.21,High:172.4,Low:169.58,Close:170.23,Volume:36142700}, + {Date:1580731200000,Open:170.43,High:174.5,Low:170.4,Close:174.38,Volume:30107000}, + {Date:1580817600000,Open:177.14,High:180.64,Low:176.31,Close:180.12,Volume:36433300}, + {Date:1580904000000,Open:184.03,High:184.2,Low:178.41,Close:179.9,Volume:39186300}, + {Date:1580990400000,Open:180.97,High:183.82,Low:180.06,Close:183.63,Volume:27751400}, + {Date:1581076800000,Open:182.85,High:185.63,Low:182.48,Close:183.89,Volume:33529100}, + {Date:1581336000000,Open:183.58,High:188.84,Low:183.25,Close:188.7,Volume:35844300}, + {Date:1581422400000,Open:190.65,High:190.7,Low:183.5,Close:184.44,Volume:53159900}, + {Date:1581508800000,Open:185.58,High:185.85,Low:181.85,Close:184.71,Volume:47062900}, + {Date:1581595200000,Open:183.08,High:186.23,Low:182.87,Close:183.71,Volume:35295800}, + {Date:1581681600000,Open:183.25,High:185.41,Low:182.65,Close:185.35,Volume:23149500}, + {Date:1582027200000,Open:185.61,High:187.7,Low:185.5,Close:187.23,Volume:27792200}, + {Date:1582113600000,Open:188.06,High:188.18,Low:186.47,Close:187.28,Volume:29997500}, + {Date:1582200000000,Open:186.95,High:187.25,Low:181.1,Close:184.42,Volume:36862400}, + {Date:1582286400000,Open:183.17,High:183.5,Low:177.25,Close:178.59,Volume:48572600}, + {Date:1582545600000,Open:167.77,High:174.55,Low:163.23,Close:170.89,Volume:68311100}, + {Date:1582632000000,Open:174.2,High:174.84,Low:167.65,Close:168.07,Volume:68073300}, + {Date:1582718400000,Open:169.71,High:173.26,Low:168.21,Close:170.17,Volume:56206100}, + {Date:1582804800000,Open:163.32,High:167.03,Low:157.98,Close:158.18,Volume:93174900}, + {Date:1582891200000,Open:152.41,High:163.71,Low:152,Close:162.01,Volume:97012700}, + {Date:1583150400000,Open:165.31,High:172.92,Low:162.31,Close:172.79,Volume:71030800}, + {Date:1583236800000,Open:173.8,High:175,Low:162.26,Close:164.51,Volume:71677000}, + {Date:1583323200000,Open:168.49,High:170.7,Low:165.62,Close:170.55,Volume:49814400}, + {Date:1583409600000,Open:166.05,High:170.87,Low:165.69,Close:166.27,Volume:47817300}, + {Date:1583496000000,Open:162.61,High:163.11,Low:156,Close:161.57,Volume:72821100}, + {Date:1583755200000,Open:151,High:157.75,Low:150,Close:150.62,Volume:70419300}, + {Date:1583841600000,Open:158.16,High:161.03,Low:152.58,Close:160.92,Volume:65354400}, + {Date:1583928000000,Open:157.13,High:157.7,Low:151.15,Close:153.63,Volume:56371600}, + {Date:1584014400000,Open:145.3,High:153.47,Low:138.58,Close:139.06,Volume:93226400}, + {Date:1584100800000,Open:147.5,High:161.91,Low:140.73,Close:158.83,Volume:92727400}, + {Date:1584360000000,Open:140,High:149.35,Low:135,Close:135.42,Volume:87905900}, + {Date:1584446400000,Open:140,High:147.5,Low:135,Close:146.57,Volume:81059800}, + {Date:1584532800000,Open:138,High:146,Low:135.02,Close:140.4,Volume:81593200}, + {Date:1584619200000,Open:142.77,High:150.15,Low:139,Close:142.71,Volume:85922700}, + {Date:1584705600000,Open:146,High:147.1,Low:135.86,Close:137.35,Volume:84866200}, + {Date:1584964800000,Open:137.01,High:140.57,Low:132.52,Close:135.98,Volume:78975200}, + {Date:1585051200000,Open:143.75,High:149.6,Low:141.27,Close:148.34,Volume:82516700}, + {Date:1585137600000,Open:148.91,High:154.33,Low:144.44,Close:146.92,Volume:75638200}, + {Date:1585224000000,Open:148.4,High:156.66,Low:148.37,Close:156.11,Volume:64568100}, + {Date:1585310400000,Open:151.75,High:154.89,Low:149.2,Close:149.7,Volume:57042300}, + {Date:1585569600000,Open:152.44,High:160.6,Low:150.01,Close:160.23,Volume:63420300}, + {Date:1585656000000,Open:159.4,High:164.78,Low:156.56,Close:157.71,Volume:77927200}, + {Date:1585742400000,Open:153,High:157.75,Low:150.82,Close:152.11,Volume:57969900}, + {Date:1585828800000,Open:151.86,High:155.48,Low:150.36,Close:155.26,Volume:49630700}, + {Date:1585915200000,Open:155.1,High:157.38,Low:152.19,Close:153.83,Volume:41243300}, + {Date:1586174400000,Open:160.32,High:166.5,Low:157.58,Close:165.27,Volume:67111700}, + {Date:1586260800000,Open:169.59,High:170,Low:163.26,Close:163.49,Volume:62769000}, + {Date:1586347200000,Open:165.67,High:166.67,Low:163.5,Close:165.13,Volume:48318200}, + {Date:1586433600000,Open:166.36,High:167.37,Low:163.33,Close:165.14,Volume:51385100}, + {Date:1586779200000,Open:164.35,High:165.57,Low:162.3,Close:165.51,Volume:41905300}, + {Date:1586865600000,Open:169,High:173.75,Low:168,Close:173.7,Volume:52874300}, + {Date:1586952000000,Open:171.2,High:173.57,Low:169.24,Close:171.88,Volume:40940800}, + {Date:1587038400000,Open:174.3,High:177.28,Low:172.9,Close:177.04,Volume:50479600}, + {Date:1587124800000,Open:179.5,High:180,Low:175.87,Close:178.6,Volume:52765600}, + {Date:1587384000000,Open:176.63,High:178.75,Low:174.99,Close:175.06,Volume:36669600}, + {Date:1587470400000,Open:173.5,High:173.67,Low:166.11,Close:167.82,Volume:56203700}, + {Date:1587556800000,Open:171.39,High:174,Low:170.82,Close:173.52,Volume:34620200}, + {Date:1587643200000,Open:174.11,High:175.06,Low:170.91,Close:171.42,Volume:32790800}, + {Date:1587729600000,Open:172.06,High:174.56,Low:170.71,Close:174.55,Volume:34277600}, + {Date:1587988800000,Open:176.59,High:176.9,Low:173.3,Close:174.05,Volume:33194400}, + {Date:1588075200000,Open:175.59,High:175.67,Low:169.39,Close:169.81,Volume:34392700}, + {Date:1588161600000,Open:173.22,High:177.68,Low:171.88,Close:177.43,Volume:51286600}, + {Date:1588248000000,Open:180,High:180.4,Low:176.23,Close:179.21,Volume:53875900}, + {Date:1588334400000,Open:175.8,High:178.64,Low:174.01,Close:174.57,Volume:39370500}, + {Date:1588593600000,Open:174.49,High:179,Low:173.8,Close:178.84,Volume:30372900}, + {Date:1588680000000,Open:180.62,High:183.65,Low:179.9,Close:180.76,Volume:36839200}, + {Date:1588766400000,Open:182.08,High:184.2,Low:181.63,Close:182.54,Volume:32139300}, + {Date:1588852800000,Open:184.17,High:184.55,Low:182.58,Close:183.6,Volume:28316000}, + {Date:1588939200000,Open:184.98,High:185,Low:183.36,Close:184.68,Volume:30877800}, + {Date:1589198400000,Open:183.15,High:187.51,Low:182.85,Close:186.74,Volume:30892700}, + {Date:1589284800000,Open:186.8,High:187.04,Low:182.3,Close:182.51,Volume:32038200}, + {Date:1589371200000,Open:182.55,High:184.05,Low:176.54,Close:179.75,Volume:44711500}, + {Date:1589457600000,Open:177.54,High:180.69,Low:175.68,Close:180.53,Volume:41873900}, + {Date:1589544000000,Open:179.06,High:187.06,Low:177,Close:183.16,Volume:46610400}, + {Date:1589803200000,Open:185.75,High:186.2,Low:183.96,Close:184.91,Volume:35264500}, + {Date:1589889600000,Open:185.03,High:186.6,Low:183.49,Close:183.63,Volume:26799100}, + {Date:1589976000000,Open:184.81,High:185.85,Low:183.94,Close:185.66,Volume:31261300}, + {Date:1590062400000,Open:185.4,High:186.67,Low:183.29,Close:183.43,Volume:29119500}, + {Date:1590148800000,Open:183.19,High:184.46,Low:182.54,Close:183.51,Volume:20826900}, + {Date:1590494400000,Open:186.34,High:186.5,Low:181.1,Close:181.57,Volume:36073600}, + {Date:1590580800000,Open:180.2,High:181.99,Low:176.6,Close:181.81,Volume:39517100}, + {Date:1590667200000,Open:180.74,High:184.15,Low:180.38,Close:181.4,Volume:33810200}, + {Date:1590753600000,Open:182.73,High:184.27,Low:180.41,Close:183.25,Volume:42130400}, + {Date:1591012800000,Open:182.54,High:183,Low:181.46,Close:182.83,Volume:22622400}, + {Date:1591099200000,Open:184.25,High:185,Low:181.35,Close:184.91,Volume:30794600}, + {Date:1591185600000,Open:184.82,High:185.94,Low:183.58,Close:185.36,Volume:27311000}, + {Date:1591272000000,Open:184.3,High:185.84,Low:182.3,Close:182.92,Volume:28761800}, + {Date:1591358400000,Open:182.62,High:187.73,Low:182.01,Close:187.2,Volume:39893600}, + {Date:1591617600000,Open:185.94,High:188.55,Low:184.44,Close:188.36,Volume:33211600}, + {Date:1591704000000,Open:188,High:190.7,Low:187.26,Close:189.8,Volume:29783900}, + {Date:1591790400000,Open:191.13,High:198.52,Low:191.01,Close:196.84,Volume:43872300}, + {Date:1591876800000,Open:193.13,High:195.76,Low:186.07,Close:186.27,Volume:52854700}, + {Date:1591963200000,Open:190.54,High:191.72,Low:185.18,Close:187.74,Volume:43373600}, + {Date:1592222400000,Open:184.58,High:190.82,Low:184.01,Close:188.94,Volume:32770200}, + {Date:1592308800000,Open:192.89,High:195.58,Low:191.46,Close:193.57,Volume:42556700}, + {Date:1592395200000,Open:195.03,High:196.32,Low:193.69,Close:194.24,Volume:25687800}, + {Date:1592481600000,Open:194,High:196.49,Low:194,Close:196.32,Volume:23061600}, + {Date:1592568000000,Open:198.59,High:199.29,Low:194.37,Close:195.15,Volume:44441100}, + {Date:1592827200000,Open:195.79,High:200.76,Low:195.23,Close:200.57,Volume:32818900}, + {Date:1592913600000,Open:202.09,High:203.95,Low:201.43,Close:201.91,Volume:30917400}, + {Date:1593000000000,Open:201.6,High:203.25,Low:196.56,Close:197.84,Volume:36740600}, + {Date:1593086400000,Open:197.8,High:200.61,Low:195.47,Close:200.34,Volume:27803900}, + {Date:1593172800000,Open:199.73,High:199.89,Low:194.88,Close:196.33,Volume:54675800}, + {Date:1593432000000,Open:195.78,High:198.53,Low:193.55,Close:198.44,Volume:26701600}, + {Date:1593518400000,Open:197.88,High:204.4,Low:197.74,Close:203.51,Volume:34310300}, + {Date:1593604800000,Open:203.14,High:206.35,Low:201.77,Close:204.7,Volume:32061200}, + {Date:1593691200000,Open:205.68,High:208.02,Low:205,Close:206.26,Volume:29315800}, + {Date:1594036800000,Open:208.83,High:211.13,Low:208.09,Close:210.7,Volume:31897600}, + {Date:1594123200000,Open:210.45,High:214.67,Low:207.99,Close:208.25,Volume:33600700}, + {Date:1594209600000,Open:210.07,High:213.26,Low:208.69,Close:212.83,Volume:33600000}, + {Date:1594296000000,Open:216.33,High:216.38,Low:211.47,Close:214.32,Volume:33121700}, + {Date:1594382400000,Open:213.62,High:214.08,Low:211.08,Close:213.67,Volume:26177600}, + {Date:1594641600000,Open:214.48,High:215.8,Low:206.5,Close:207.07,Volume:38135600}, + {Date:1594728000000,Open:206.13,High:208.85,Low:202.03,Close:208.35,Volume:37591800}, + {Date:1594814400000,Open:209.56,High:211.33,Low:205.03,Close:208.04,Volume:32179400}, + {Date:1594900800000,Open:205.4,High:205.7,Low:202.31,Close:203.92,Volume:29940700}, + {Date:1594987200000,Open:204.47,High:205.04,Low:201.39,Close:202.88,Volume:31635300}, + {Date:1595246400000,Open:205,High:212.3,Low:203.01,Close:211.6,Volume:36884800}, + {Date:1595332800000,Open:213.66,High:213.94,Low:208.03,Close:208.75,Volume:37990400}, + {Date:1595419200000,Open:209.2,High:212.3,Low:208.39,Close:211.75,Volume:49605700}, + {Date:1595505600000,Open:207.19,High:210.92,Low:202.15,Close:202.54,Volume:67457000}, + {Date:1595592000000,Open:200.42,High:202.86,Low:197.51,Close:201.3,Volume:39827000}, + {Date:1595851200000,Open:201.47,High:203.97,Low:200.86,Close:203.85,Volume:30160900}, + {Date:1595937600000,Open:203.61,High:204.7,Low:201.74,Close:202.02,Volume:23251400}, + {Date:1596024000000,Open:202.5,High:204.65,Low:202.01,Close:204.06,Volume:19632600}, + {Date:1596110400000,Open:201,High:204.46,Low:199.57,Close:203.9,Volume:25079600}, + {Date:1596196800000,Open:204.4,High:205.1,Low:199.01,Close:205.01,Volume:51044000}, + {Date:1596456000000,Open:211.52,High:217.64,Low:210.44,Close:216.54,Volume:78983000}, + {Date:1596542400000,Open:214.17,High:214.77,Low:210.31,Close:213.29,Volume:49280100}, + {Date:1596628800000,Open:214.9,High:215,Low:211.57,Close:212.94,Volume:28806400}, + {Date:1596715200000,Open:212.34,High:216.37,Low:211.55,Close:216.35,Volume:32656800}, + {Date:1596801600000,Open:214.85,High:215.7,Low:210.93,Close:212.48,Volume:27820400}, + {Date:1597060800000,Open:211.67,High:211.88,Low:206.35,Close:208.25,Volume:36716500}, + {Date:1597147200000,Open:207.16,High:207.65,Low:203.14,Close:203.38,Volume:36446500}, + {Date:1597233600000,Open:205.29,High:210.28,Low:204.75,Close:209.19,Volume:28013100}, + {Date:1597320000000,Open:209.44,High:211.35,Low:208.15,Close:208.7,Volume:22588900}, + {Date:1597406400000,Open:208.76,High:209.59,Low:207.51,Close:208.9,Volume:17958900}, + {Date:1597665600000,Open:209.6,High:211.19,Low:208.92,Close:210.28,Volume:20184800}, + {Date:1597752000000,Open:210.53,High:212.36,Low:209.21,Close:211.49,Volume:21336200}, + {Date:1597838400000,Open:211.49,High:212.1,Low:209.25,Close:209.7,Volume:27627600}, + {Date:1597924800000,Open:209.54,High:215,Low:208.91,Close:214.58,Volume:26981500}, + {Date:1598011200000,Open:213.86,High:216.25,Low:212.85,Close:213.02,Volume:36249300}, + {Date:1598270400000,Open:214.79,High:215.52,Low:212.43,Close:213.69,Volume:25460100}, + {Date:1598356800000,Open:213.1,High:216.61,Low:213.1,Close:216.47,Volume:23043700}, + {Date:1598443200000,Open:217.88,High:222.09,Low:217.36,Close:221.15,Volume:39600800}, + {Date:1598529600000,Open:222.89,High:231.15,Low:219.4,Close:226.58,Volume:57602200}, + {Date:1598616000000,Open:228.18,High:230.64,Low:226.58,Close:228.91,Volume:26292900}, + {Date:1598875200000,Open:227,High:228.7,Low:224.31,Close:225.53,Volume:28774200}, + {Date:1598961600000,Open:225.51,High:227.45,Low:224.43,Close:227.27,Volume:25725500}, + {Date:1599048000000,Open:227.97,High:232.86,Low:227.35,Close:231.65,Volume:34080800}, + {Date:1599134400000,Open:229.27,High:229.31,Low:214.96,Close:217.3,Volume:58400300}, + {Date:1599220800000,Open:215.1,High:218.36,Low:205.19,Close:214.25,Volume:59664100}, + {Date:1599566400000,Open:206.5,High:210.03,Low:202.2,Close:202.66,Volume:52924300}, + {Date:1599652800000,Open:207.6,High:214.84,Low:206.7,Close:211.29,Volume:45679000}, + {Date:1599739200000,Open:213.4,High:214.74,Low:204.11,Close:205.37,Volume:35461500}, + {Date:1599825600000,Open:207.2,High:208.63,Low:201.24,Close:204.03,Volume:33620100}, + {Date:1600084800000,Open:204.24,High:209.2,Low:204.03,Close:205.41,Volume:30375800}, + {Date:1600171200000,Open:208.42,High:209.78,Low:206.93,Close:208.78,Volume:21823900}, + {Date:1600257600000,Open:210.62,High:210.65,Low:204.64,Close:205.05,Volume:26328100}, + {Date:1600344000000,Open:200.05,High:204.33,Low:199.96,Close:202.91,Volume:34011300}, + {Date:1600430400000,Open:202.8,High:203.65,Low:196.25,Close:200.39,Volume:55225300}, + {Date:1600689600000,Open:197.19,High:202.71,Low:196.38,Close:202.54,Volume:39839700}, + {Date:1600776000000,Open:205.06,High:208.1,Low:202.08,Close:207.42,Volume:33517100}, + {Date:1600862400000,Open:207.9,High:208.1,Low:200.03,Close:200.59,Volume:30803800}, + {Date:1600948800000,Open:199.85,High:205.57,Low:199.2,Close:203.19,Volume:31202500}, + {Date:1601035200000,Open:203.55,High:209.04,Low:202.54,Close:207.82,Volume:29437300}, + {Date:1601294400000,Open:210.88,High:212.57,Low:208.06,Close:209.44,Volume:32004900}, + {Date:1601380800000,Open:209.35,High:210.07,Low:206.81,Close:207.26,Volume:24221900}, + {Date:1601467200000,Open:207.73,High:211.98,Low:206.54,Close:210.33,Volume:33829100}, + {Date:1601553600000,Open:213.49,High:213.99,Low:211.32,Close:212.46,Volume:27158400}, + {Date:1601640000000,Open:208,High:210.99,Low:205.54,Close:206.19,Volume:33154800}, + {Date:1601899200000,Open:207.22,High:210.41,Low:206.98,Close:210.38,Volume:21331600}, + {Date:1601985600000,Open:208.82,High:210.18,Low:204.82,Close:205.91,Volume:28554300}, + {Date:1602072000000,Open:207.06,High:210.11,Low:206.72,Close:209.83,Volume:25681100}, + {Date:1602158400000,Open:210.51,High:211.19,Low:208.32,Close:210.58,Volume:19925800}, + {Date:1602244800000,Open:211.23,High:215.86,Low:211.23,Close:215.81,Volume:26458000}, + {Date:1602504000000,Open:218.79,High:223.86,Low:216.81,Close:221.4,Volume:40461400}, + {Date:1602590400000,Open:222.72,High:225.21,Low:220.43,Close:222.86,Volume:28950800}, + {Date:1602676800000,Open:223,High:224.22,Low:219.13,Close:220.86,Volume:23421700}, + {Date:1602763200000,Open:217.1,High:220.36,Low:216.01,Close:219.66,Volume:22733100}, + {Date:1602849600000,Open:220.15,High:222.29,Low:219.32,Close:219.66,Volume:26057900}, + {Date:1603108800000,Open:220.42,High:222.3,Low:213.72,Close:214.22,Volume:27625800}, + {Date:1603195200000,Open:215.8,High:217.37,Low:213.09,Close:214.65,Volume:22753500}, + {Date:1603281600000,Open:213.12,High:216.92,Low:213.12,Close:214.8,Volume:22724900}, + {Date:1603368000000,Open:213.93,High:216.06,Low:211.7,Close:214.89,Volume:22351500}, + {Date:1603454400000,Open:215.03,High:216.28,Low:213.16,Close:216.23,Volume:18879600}, + {Date:1603713600000,Open:213.85,High:216.34,Low:208.1,Close:210.08,Volume:37111600}, + {Date:1603800000000,Open:211.59,High:214.67,Low:210.33,Close:213.25,Volume:36700300}, + {Date:1603886400000,Open:207.67,High:208.84,Low:202.1,Close:202.68,Volume:51195600}, + {Date:1603972800000,Open:204.07,High:207.36,Low:203.37,Close:204.72,Volume:31432600}, + {Date:1604059200000,Open:203.5,High:204.29,Low:199.62,Close:202.47,Volume:36953700}, + {Date:1604318400000,Open:204.29,High:205.28,Low:200.12,Close:202.33,Volume:30842200}, + {Date:1604404800000,Open:203.89,High:208.12,Low:203.12,Close:206.43,Volume:27512000}, + {Date:1604491200000,Open:214.02,High:218.32,Low:212.42,Close:216.39,Volume:42311800}, + {Date:1604577600000,Open:222.04,High:224.12,Low:221.15,Close:223.29,Volume:36080100}, + {Date:1604664000000,Open:222.26,High:224.36,Low:218.03,Close:223.72,Volume:25231900}, + {Date:1604923200000,Open:224.44,High:228.12,Low:217.88,Close:218.39,Volume:44395000}, + {Date:1605009600000,Open:214.5,High:216.5,Low:209.72,Close:211.01,Volume:44045100}, + {Date:1605096000000,Open:212.39,High:218.04,Low:212.2,Close:216.55,Volume:29440800}, + {Date:1605182400000,Open:217.21,High:219.11,Low:214.46,Close:215.44,Volume:21593900}, + {Date:1605268800000,Open:216.36,High:217.42,Low:214.16,Close:216.51,Volume:18621100}, + {Date:1605528000000,Open:214.87,High:217.74,Low:214.52,Close:217.23,Volume:24953300}, + {Date:1605614400000,Open:216.1,High:217.68,Low:214.08,Close:214.46,Volume:24154100}, + {Date:1605700800000,Open:213.65,High:215.17,Low:210.93,Close:211.08,Volume:28372800}, + {Date:1605787200000,Open:211.38,High:213.03,Low:209.93,Close:212.42,Volume:24792700}, + {Date:1605873600000,Open:212.2,High:213.29,Low:210,Close:210.39,Volume:22843100}, + {Date:1606132800000,Open:210.95,High:212.29,Low:208.16,Close:210.11,Volume:25683500}, + {Date:1606219200000,Open:209.59,High:214.25,Low:208.86,Close:213.86,Volume:33979700}, + {Date:1606305600000,Open:215.11,High:215.29,Low:212.46,Close:213.87,Volume:21012900}, + {Date:1606478400000,Open:214.85,High:216.27,Low:214.04,Close:215.23,Volume:14512200}, + {Date:1606737600000,Open:214.1,High:214.76,Low:210.84,Close:214.07,Volume:33064800}, + {Date:1606824000000,Open:214.51,High:217.32,Low:213.35,Close:216.21,Volume:30904500}, + {Date:1606910400000,Open:214.88,High:215.47,Low:212.8,Close:215.37,Volume:23724500}, + {Date:1606996800000,Open:214.61,High:216.38,Low:213.65,Close:214.24,Volume:25120900}, + {Date:1607083200000,Open:214.22,High:215.38,Low:213.18,Close:214.36,Volume:24666000}, + {Date:1607342400000,Open:214.37,High:215.54,Low:212.99,Close:214.29,Volume:24620000}, + {Date:1607428800000,Open:213.97,High:216.95,Low:212.89,Close:216.01,Volume:23284100}, + {Date:1607515200000,Open:215.16,High:215.23,Low:211.21,Close:211.8,Volume:32440600}, + {Date:1607601600000,Open:211.77,High:213.08,Low:210.36,Close:210.52,Volume:26733300}, + {Date:1607688000000,Open:210.05,High:213.32,Low:209.11,Close:213.26,Volume:30979400}, + {Date:1607947200000,Open:213.1,High:216.21,Low:212.88,Close:214.2,Volume:28798400}, + {Date:1608033600000,Open:215.17,High:215.42,Low:212.24,Close:214.13,Volume:27000600}, + {Date:1608120000000,Open:214.75,High:220.11,Low:214.72,Close:219.28,Volume:35023300}, + {Date:1608206400000,Open:219.87,High:220.89,Low:217.92,Close:219.42,Volume:32515800}, + {Date:1608292800000,Open:218.59,High:219.69,Low:216.02,Close:218.59,Volume:63354900}, + {Date:1608552000000,Open:217.55,High:224,Low:217.28,Close:222.59,Volume:37181900}, + {Date:1608638400000,Open:222.69,High:225.63,Low:221.85,Close:223.94,Volume:22612200}, + {Date:1608724800000,Open:223.11,High:223.56,Low:220.8,Close:221.02,Volume:18699600}, + {Date:1608811200000,Open:221.42,High:223.61,Low:221.2,Close:222.75,Volume:10550600}, + {Date:1609156800000,Open:224.45,High:226.03,Low:223.02,Close:224.96,Volume:17933500}, + {Date:1609243200000,Open:226.31,High:227.18,Low:223.58,Close:224.15,Volume:17403200}, + {Date:1609329600000,Open:225.23,High:225.63,Low:221.47,Close:221.68,Volume:20272300}, + {Date:1609416000000,Open:221.7,High:223,Low:219.68,Close:222.42,Volume:20942100}, + {Date:1609761600000,Open:222.53,High:223,Low:214.81,Close:217.69,Volume:37130100}, + {Date:1609848000000,Open:217.26,High:218.52,Low:215.7,Close:217.9,Volume:23823000}, + {Date:1609934400000,Open:212.17,High:216.49,Low:211.94,Close:212.25,Volume:35930700}, + {Date:1610020800000,Open:214.04,High:219.34,Low:213.71,Close:218.29,Volume:27694500}, + {Date:1610107200000,Open:218.68,High:220.58,Low:217.03,Close:219.62,Volume:22956200}, + {Date:1610366400000,Open:218.47,High:218.91,Low:216.73,Close:217.49,Volume:23031300}, + {Date:1610452800000,Open:216.5,High:217.1,Low:213.32,Close:214.93,Volume:23249300}, + {Date:1610539200000,Open:214.02,High:216.76,Low:213.93,Close:216.34,Volume:20087100}, + {Date:1610625600000,Open:215.91,High:217.46,Low:212.74,Close:213.02,Volume:29480800}, + {Date:1610712000000,Open:213.52,High:214.51,Low:212.03,Close:212.65,Volume:31746500}, + {Date:1611057600000,Open:213.75,High:216.98,Low:212.63,Close:216.44,Volume:30480900}, + {Date:1611144000000,Open:217.7,High:225.79,Low:217.29,Close:224.34,Volume:37777300}, + {Date:1611230400000,Open:224.7,High:226.3,Low:222.42,Close:224.97,Volume:30709400}, + {Date:1611316800000,Open:227.08,High:230.07,Low:225.8,Close:225.95,Volume:30172700}, + {Date:1611576000000,Open:229.12,High:229.78,Low:224.22,Close:229.53,Volume:33152100}, + {Date:1611662400000,Open:231.86,High:234.18,Low:230.08,Close:232.33,Volume:49169600}, + {Date:1611748800000,Open:238,High:240.44,Low:230.14,Close:232.9,Volume:69870600}, + {Date:1611835200000,Open:235.61,High:242.64,Low:235.09,Close:238.93,Volume:49111200}, + {Date:1611921600000,Open:235.99,High:238.02,Low:231.35,Close:231.96,Volume:42503100}, + {Date:1612180800000,Open:235.06,High:242.5,Low:232.43,Close:239.65,Volume:33314200}, + {Date:1612267200000,Open:241.3,High:242.31,Low:238.69,Close:239.51,Volume:25916300}, + {Date:1612353600000,Open:239.57,High:245.09,Low:239.26,Close:243,Volume:27158100}, + {Date:1612440000000,Open:242.66,High:243.24,Low:240.37,Close:242.01,Volume:25296100}, + {Date:1612526400000,Open:242.23,High:243.28,Low:240.42,Close:242.2,Volume:18054800}, + {Date:1612785600000,Open:243.15,High:243.68,Low:240.81,Close:242.47,Volume:22211900}, + {Date:1612872000000,Open:241.87,High:244.76,Low:241.38,Close:243.77,Volume:23565000}, + {Date:1612958400000,Open:245,High:245.92,Low:240.89,Close:242.82,Volume:22186700}, + {Date:1613044800000,Open:244.78,High:245.15,Low:242.15,Close:244.49,Volume:15751100}, + {Date:1613131200000,Open:243.93,High:245.3,Low:242.73,Close:244.99,Volume:16561100}, + {Date:1613476800000,Open:245.03,High:246.13,Low:242.92,Close:243.7,Volume:26728500}, + {Date:1613563200000,Open:241.32,High:244.31,Low:240.94,Close:244.2,Volume:21653500}, + {Date:1613649600000,Open:241.8,High:243.93,Low:240.86,Close:243.79,Volume:16925600}, + {Date:1613736000000,Open:243.75,High:243.86,Low:240.18,Close:240.97,Volume:25262600}, + {Date:1613995200000,Open:237.42,High:237.93,Low:232.4,Close:234.51,Volume:36446900}, + {Date:1614081600000,Open:230.33,High:234.83,Low:228.73,Close:233.27,Volume:30228700}, + {Date:1614168000000,Open:230.01,High:235.2,Low:229,Close:234.55,Volume:26339700}, + {Date:1614254400000,Open:232.08,High:234.59,Low:227.88,Close:228.99,Volume:39542200}, + {Date:1614340800000,Open:231.53,High:235.37,Low:229.54,Close:232.38,Volume:37819200}, + {Date:1614600000000,Open:235.9,High:237.47,Low:233.15,Close:236.94,Volume:25324000}, + {Date:1614686400000,Open:237.01,High:237.3,Low:233.45,Close:233.87,Volume:22812500}, + {Date:1614772800000,Open:232.16,High:233.58,Low:227.26,Close:227.56,Volume:34029500}, + {Date:1614859200000,Open:226.74,High:232.49,Low:224.26,Close:226.73,Volume:44727800}, + {Date:1614945600000,Open:229.52,High:233.27,Low:226.46,Close:231.6,Volume:41872800}, + {Date:1615204800000,Open:231.37,High:233.37,Low:227.13,Close:227.39,Volume:35267400}, + {Date:1615291200000,Open:232.88,High:235.38,Low:231.67,Close:233.78,Volume:33080500}, + {Date:1615377600000,Open:237,High:237,Low:232.04,Close:232.42,Volume:29746800}, + {Date:1615464000000,Open:234.96,High:239.17,Low:234.31,Close:237.13,Volume:29907600}, + {Date:1615550400000,Open:234.01,High:235.82,Low:233.23,Close:235.75,Volume:22653700}, + {Date:1615809600000,Open:234.96,High:235.19,Low:231.81,Close:234.81,Volume:26034900}, + {Date:1615896000000,Open:236.28,High:240.06,Low:235.94,Close:237.71,Volume:28092200}, + {Date:1615982400000,Open:236.15,High:238.55,Low:233.23,Close:237.04,Volume:29562100}, + {Date:1616068800000,Open:232.56,High:234.19,Low:230.33,Close:230.72,Volume:34833000}, + {Date:1616155200000,Open:231.02,High:232.47,Low:229.35,Close:230.35,Volume:46430700}, + {Date:1616414400000,Open:230.27,High:236.9,Low:230.14,Close:235.99,Volume:30127000}, + {Date:1616500800000,Open:237.49,High:241.05,Low:237.07,Close:237.58,Volume:31638400}, + {Date:1616587200000,Open:237.85,High:238,Low:235.32,Close:235.46,Volume:25620100}, + {Date:1616673600000,Open:235.3,High:236.94,Low:231.57,Close:232.34,Volume:34061900}, + {Date:1616760000000,Open:231.55,High:236.71,Low:231.55,Close:236.48,Volume:25479900}, + {Date:1617019200000,Open:236.59,High:236.8,Low:231.88,Close:235.24,Volume:25227500}, + {Date:1617105600000,Open:233.53,High:233.85,Low:231.1,Close:231.85,Volume:24792000}, + {Date:1617192000000,Open:232.91,High:239.1,Low:232.39,Close:235.77,Volume:43623500}, + {Date:1617278400000,Open:238.47,High:242.84,Low:238.05,Close:242.35,Volume:30338000}, + {Date:1617624000000,Open:242.76,High:249.96,Low:242.7,Close:249.07,Volume:36910600}, + {Date:1617710400000,Open:247.61,High:249.4,Low:246.88,Close:247.86,Volume:22931900}, + {Date:1617796800000,Open:247.81,High:250.93,Low:247.19,Close:249.9,Volume:22719800}, + {Date:1617883200000,Open:252.77,High:254.14,Low:252,Close:253.25,Volume:23625200}, + {Date:1617969600000,Open:252.87,High:255.99,Low:252.44,Close:255.85,Volume:24326800}, + {Date:1618228800000,Open:254.71,High:257.67,Low:254.62,Close:255.91,Volume:27148700}, + {Date:1618315200000,Open:257.26,High:259.19,Low:256.83,Close:258.49,Volume:23837500}, + {Date:1618401600000,Open:257.48,High:258.83,Low:255.16,Close:255.59,Volume:23070900}, + {Date:1618488000000,Open:257.93,High:259.93,Low:257.73,Close:259.5,Volume:25627500}, + {Date:1618574400000,Open:259.47,High:261,Low:257.6,Close:260.74,Volume:24878600}, + {Date:1618833600000,Open:260.19,High:261.48,Low:257.82,Close:258.74,Volume:23209300}, + {Date:1618920000000,Open:257.82,High:260.2,Low:256.84,Close:258.26,Volume:19722900}, + {Date:1619006400000,Open:258.94,High:260.68,Low:257.25,Close:260.58,Volume:24030400}, + {Date:1619092800000,Open:260.21,High:261.78,Low:255.64,Close:257.17,Volume:25606200}, + {Date:1619179200000,Open:257.88,High:261.51,Low:257.27,Close:261.15,Volume:21462600}, + {Date:1619438400000,Open:261.66,High:262.44,Low:260.17,Close:261.55,Volume:19763300}, + {Date:1619524800000,Open:261.58,High:263.19,Low:260.12,Close:261.97,Volume:31014200}, + {Date:1619611200000,Open:256.08,High:256.54,Low:252.95,Close:254.56,Volume:46903100}, + {Date:1619697600000,Open:255.46,High:256.1,Low:249,Close:252.51,Volume:40589000}, + {Date:1619784000000,Open:249.74,High:253.08,Low:249.6,Close:252.18,Volume:30945100}, + {Date:1620043200000,Open:253.4,High:254.35,Low:251.12,Close:251.86,Volume:19626600}, + {Date:1620129600000,Open:250.97,High:251.21,Low:245.76,Close:247.79,Volume:32756100}, + {Date:1620216000000,Open:249.06,High:249.5,Low:245.82,Close:246.47,Volume:21901300}, + {Date:1620302400000,Open:246.45,High:249.86,Low:244.69,Close:249.73,Volume:26491100}, + {Date:1620388800000,Open:252.15,High:254.3,Low:251.17,Close:252.46,Volume:27032900}, + {Date:1620648000000,Open:250.87,High:251.73,Low:247.12,Close:247.18,Volume:29299900}, + {Date:1620734400000,Open:244.55,High:246.6,Low:242.57,Close:246.23,Volume:33641600}, + {Date:1620820800000,Open:242.17,High:244.38,Low:238.07,Close:239,Volume:36684400}, + {Date:1620907200000,Open:241.8,High:245.6,Low:241.42,Close:243.03,Volume:29624300}, + {Date:1620993600000,Open:245.58,High:249.18,Low:245.49,Close:248.15,Volume:23901100}, + {Date:1621252800000,Open:246.55,High:246.59,Low:243.52,Close:245.18,Volume:24970200}, + {Date:1621339200000,Open:246.27,High:246.41,Low:242.9,Close:243.08,Volume:20168000}, + {Date:1621425600000,Open:239.31,High:243.23,Low:238.6,Close:243.12,Volume:25739800}, + {Date:1621512000000,Open:243.96,High:247.95,Low:243.86,Close:246.48,Volume:21800700}, + {Date:1621598400000,Open:247.57,High:248.33,Low:244.74,Close:245.17,Volume:21863100}, + {Date:1621857600000,Open:247.79,High:251.16,Low:247.51,Close:250.78,Volume:21411500}, + {Date:1621944000000,Open:251.77,High:252.75,Low:250.82,Close:251.72,Volume:17704300}, + {Date:1622030400000,Open:251.43,High:252.94,Low:250.75,Close:251.49,Volume:17771600}, + {Date:1622116800000,Open:251.17,High:251.48,Low:249.25,Close:249.31,Volume:24426200}, + {Date:1622203200000,Open:251,High:252.08,Low:249.56,Close:249.68,Volume:18270200}, + {Date:1622548800000,Open:251.23,High:251.29,Low:246.96,Close:247.4,Volume:23213300}, + {Date:1622635200000,Open:248.13,High:249.27,Low:245.84,Close:247.3,Volume:19406700}, + {Date:1622721600000,Open:245.22,High:246.34,Low:243,Close:245.71,Volume:25307700}, + {Date:1622808000000,Open:247.76,High:251.65,Low:247.51,Close:250.79,Volume:25281100}, + {Date:1623067200000,Open:249.98,High:254.09,Low:249.81,Close:253.81,Volume:23079200}, + {Date:1623153600000,Open:255.16,High:256.01,Low:252.51,Close:252.57,Volume:22455000}, + {Date:1623240000000,Open:253.81,High:255.53,Low:253.21,Close:253.59,Volume:17937600}, + {Date:1623326400000,Open:254.29,High:257.46,Low:253.67,Close:257.24,Volume:24563600}, + {Date:1623412800000,Open:257.99,High:258.49,Low:256.61,Close:257.89,Volume:18999700}, + {Date:1623672000000,Open:257.9,High:259.95,Low:256.8,Close:259.89,Volume:19150500}, + {Date:1623758400000,Open:259.77,High:259.99,Low:257.68,Close:258.36,Volume:18038900}, + {Date:1623844800000,Open:259.4,High:260.58,Low:254.42,Close:257.38,Volume:27220000}, + {Date:1623931200000,Open:256.07,High:261.75,Low:256.01,Close:260.9,Volume:27565500}, + {Date:1624017600000,Open:259.63,High:262.3,Low:258.75,Close:259.43,Volume:37202200}, + {Date:1624276800000,Open:259.82,High:263.52,Low:257.92,Close:262.63,Volume:26696100}, + {Date:1624363200000,Open:262.72,High:265.79,Low:262.4,Close:265.51,Volume:24694100}, + {Date:1624449600000,Open:265.99,High:266.83,Low:264.43,Close:265.27,Volume:19518700}, + {Date:1624536000000,Open:266.16,High:267.85,Low:265.47,Close:266.69,Volume:21446900}, + {Date:1624622400000,Open:266.23,High:267.25,Low:264.76,Close:265.02,Volume:25611100}, + {Date:1624881600000,Open:266.19,High:268.9,Low:265.91,Close:268.72,Volume:19590000}, + {Date:1624968000000,Open:268.87,High:271.65,Low:267.98,Close:271.4,Volume:19937800}, + {Date:1625054400000,Open:270.69,High:271.36,Low:269.6,Close:270.9,Volume:21656500}, + {Date:1625140800000,Open:269.61,High:271.84,Low:269.6,Close:271.6,Volume:16725300}, + {Date:1625227200000,Open:272.82,High:278,Low:272.5,Close:277.65,Volume:26458000}, + {Date:1625572800000,Open:278.03,High:279.37,Low:274.3,Close:277.66,Volume:31565600}, + {Date:1625659200000,Open:279.4,High:280.69,Low:277.15,Close:279.93,Volume:23260000}, + {Date:1625745600000,Open:276.9,High:278.73,Low:274.87,Close:277.42,Volume:24618600}, + {Date:1625832000000,Open:275.72,High:278.05,Low:275.32,Close:277.94,Volume:23916700}, + {Date:1626091200000,Open:279.16,High:279.77,Low:276.58,Close:277.32,Volume:18931700}, + {Date:1626177600000,Open:277.52,High:282.85,Low:277.39,Close:280.98,Volume:26120100}, + {Date:1626264000000,Open:282.35,High:283.66,Low:280.55,Close:282.51,Volume:23113700}, + {Date:1626350400000,Open:282,High:282.51,Low:279.83,Close:281.03,Volume:22604200}, + {Date:1626436800000,Open:282.07,High:284.1,Low:279.46,Close:280.75,Volume:26186800}, + {Date:1626696000000,Open:278.93,High:280.37,Low:274.45,Close:277.01,Volume:32935600}, + {Date:1626782400000,Open:278.03,High:280.97,Low:276.26,Close:279.32,Volume:26259700}, + {Date:1626868800000,Open:278.9,High:281.52,Low:277.29,Close:281.4,Volume:24364300}, + {Date:1626955200000,Open:283.84,High:286.42,Low:283.42,Close:286.14,Volume:23384100}, + {Date:1627041600000,Open:287.37,High:289.99,Low:286.5,Close:289.67,Volume:22768100}, + {Date:1627300800000,Open:289,High:289.69,Low:286.64,Close:289.05,Volume:23176100}, + {Date:1627387200000,Open:289.43,High:289.58,Low:282.95,Close:286.54,Volume:33604100}, + {Date:1627473600000,Open:288.99,High:290.15,Low:283.83,Close:286.22,Volume:33566900}, + {Date:1627560000000,Open:286.24,High:288.62,Low:286.08,Close:286.5,Volume:18168300}, + {Date:1627646400000,Open:285.17,High:286.66,Low:283.91,Close:284.91,Volume:20944800}, + {Date:1627905600000,Open:286.36,High:286.77,Low:283.74,Close:284.82,Volume:16267400}, + {Date:1627992000000,Open:285.42,High:287.23,Low:284,Close:287.12,Volume:17879000}, + {Date:1628078400000,Open:286.22,High:287.59,Low:284.65,Close:286.51,Volume:16191300}, + {Date:1628164800000,Open:286.88,High:289.63,Low:286.1,Close:289.52,Volume:13900200}, + {Date:1628251200000,Open:288.51,High:289.5,Low:287.62,Close:289.46,Volume:16589300}, + {Date:1628510400000,Open:289.75,High:291.55,Low:287.81,Close:288.33,Volume:16117600}, + {Date:1628596800000,Open:288.8,High:289.25,Low:285.2,Close:286.44,Volume:18616600}, + {Date:1628683200000,Open:287.21,High:288.66,Low:285.86,Close:286.95,Volume:13955900}, + {Date:1628769600000,Open:286.63,High:289.97,Low:286.34,Close:289.81,Volume:14561300}, + {Date:1628856000000,Open:289.48,High:292.9,Low:289.3,Close:292.85,Volume:18249000}, + {Date:1629115200000,Open:293.19,High:294.82,Low:290.02,Close:294.6,Volume:22507600}, + {Date:1629201600000,Open:292.39,High:293.43,Low:291.08,Close:293.08,Volume:20075300}, + {Date:1629288000000,Open:292.04,High:294.82,Low:290.27,Close:290.73,Volume:21813000}, + {Date:1629374400000,Open:288.69,High:297.47,Low:288.64,Close:296.77,Volume:29850500}, + {Date:1629460800000,Open:299.72,High:305.84,Low:298.06,Close:304.36,Volume:40817600}, + {Date:1629720000000,Open:303.25,High:305.4,Low:301.85,Close:304.65,Volume:22830200}, + {Date:1629806400000,Open:305.02,High:305.65,Low:302,Close:302.62,Volume:18175800}, + {Date:1629892800000,Open:304.3,High:304.59,Low:300.42,Close:302.01,Volume:20006100}, + {Date:1629979200000,Open:300.99,High:302.43,Low:298.95,Close:299.09,Volume:17666100}, + {Date:1630065600000,Open:298.99,High:300.87,Low:296.83,Close:299.72,Volume:22605700}, + {Date:1630324800000,Open:301.12,High:304.22,Low:301.06,Close:303.59,Volume:16348100}, + {Date:1630411200000,Open:304.42,High:304.5,Low:301.5,Close:301.88,Volume:26285300}, + {Date:1630497600000,Open:302.87,High:305.19,Low:301.49,Close:301.83,Volume:18983800}, + {Date:1630584000000,Open:302.2,High:303.36,Low:300.18,Close:301.15,Volume:16285600}, + {Date:1630670400000,Open:300.99,High:302.6,Low:300.26,Close:301.14,Volume:14747900}, + {Date:1631016000000,Open:301.01,High:301.09,Low:298.2,Close:300.18,Volume:17180400}, + {Date:1631102400000,Open:299.78,High:300.61,Low:297.47,Close:300.21,Volume:15046800}, + {Date:1631188800000,Open:300.82,High:302.14,Low:297,Close:297.25,Volume:19927000}, + {Date:1631275200000,Open:298.42,High:299.92,Low:295.38,Close:295.71,Volume:19633400}, + {Date:1631534400000,Open:297.55,High:298.54,Low:294.08,Close:296.99,Volume:23652900}, + {Date:1631620800000,Open:299.56,High:301.39,Low:298.1,Close:299.79,Volume:21853400}, + {Date:1631707200000,Open:303.26,High:305.32,Low:301.82,Close:304.82,Volume:28356300}, + {Date:1631793600000,Open:303.76,High:305.31,Low:300.76,Close:305.22,Volume:19550800}, + {Date:1631880000000,Open:304.17,High:304.5,Low:299.53,Close:299.87,Volume:41372500}, + {Date:1632139200000,Open:296.33,High:298.72,Low:289.52,Close:294.3,Volume:38278700}, + {Date:1632225600000,Open:295.69,High:297.54,Low:294.07,Close:294.8,Volume:22364100}, + {Date:1632312000000,Open:296.73,High:300.22,Low:294.51,Close:298.58,Volume:26626300}, + {Date:1632398400000,Open:298.85,High:300.9,Low:297.53,Close:299.56,Volume:18604600}, + {Date:1632484800000,Open:298.23,High:299.8,Low:296.93,Close:299.35,Volume:14999000}, + {Date:1632744000000,Open:296.14,High:296.47,Low:292.94,Close:294.17,Volume:23571700}, + {Date:1632830400000,Open:289.8,High:290.78,Low:282.75,Close:283.52,Volume:43186200}, + {Date:1632916800000,Open:285.1,High:286.77,Low:283.01,Close:284,Volume:26353700}, + {Date:1633003200000,Open:285.71,High:287.83,Low:281.62,Close:281.92,Volume:32343600}, + {Date:1633089600000,Open:282.12,High:289.98,Low:281.29,Close:289.1,Volume:30086300}, + {Date:1633348800000,Open:287.4,High:287.75,Low:280.25,Close:283.11,Volume:31350700}, + {Date:1633435200000,Open:284.05,High:290.4,Low:284.05,Close:288.76,Volume:24993000}, + {Date:1633521600000,Open:285.78,High:293.63,Low:285.51,Close:293.11,Volume:28002600}, + {Date:1633608000000,Open:295.18,High:296.64,Low:293.92,Close:294.85,Volume:20430500}, + {Date:1633694400000,Open:296.22,High:296.64,Low:293.76,Close:294.85,Volume:17685700}, + {Date:1633953600000,Open:292.92,High:297.97,Low:292.75,Close:294.23,Volume:19298600}, + {Date:1634040000000,Open:295.34,High:295.44,Low:292.35,Close:292.88,Volume:17974100}, + {Date:1634126400000,Open:294.91,High:297.28,Low:293.49,Close:296.31,Volume:23416300}, + {Date:1634212800000,Open:299.21,High:303.27,Low:297.83,Close:302.75,Volume:27262900}, + {Date:1634299200000,Open:302.34,High:304.45,Low:300.52,Close:304.21,Volume:25384800}, + {Date:1634558400000,Open:303.57,High:308.21,Low:302.69,Close:307.29,Volume:22729300}, + {Date:1634644800000,Open:308.35,High:309.3,Low:307.22,Close:308.23,Volume:17682100}, + {Date:1634731200000,Open:309.21,High:309.7,Low:306.11,Close:307.41,Volume:16537100}, + {Date:1634817600000,Open:307.17,High:311.02,Low:306.36,Close:310.76,Volume:16918100}, + {Date:1634904000000,Open:310.4,High:311.09,Low:307.8,Close:309.16,Volume:17449300}, + {Date:1635163200000,Open:309.36,High:309.4,Low:306.46,Close:308.13,Volume:17554500}, + {Date:1635249600000,Open:311,High:312.4,Low:308.6,Close:310.11,Volume:28107300}, + {Date:1635336000000,Open:316,High:326.1,Low:316,Close:323.17,Volume:52588700}, + {Date:1635422400000,Open:324.33,High:324.87,Low:321.36,Close:324.35,Volume:26297900}, + {Date:1635508800000,Open:324.13,High:332,Low:323.9,Close:331.62,Volume:34766000}, + {Date:1635768000000,Open:331.36,High:331.49,Low:326.37,Close:329.37,Volume:27073200}, + {Date:1635854400000,Open:330.31,High:333.45,Low:330,Close:333.13,Volume:26487100}, + {Date:1635940800000,Open:333.9,High:334.9,Low:330.65,Close:334,Volume:21500100}, + {Date:1636027200000,Open:332.89,High:336.54,Low:329.51,Close:336.44,Volume:23992200}, + {Date:1636113600000,Open:338.51,High:338.79,Low:334.42,Close:336.06,Volume:22570100}, + {Date:1636372800000,Open:337.3,High:337.65,Low:334.44,Close:336.99,Volume:20897000}, + {Date:1636459200000,Open:337.11,High:338.72,Low:334.53,Close:335.95,Volume:21307400}, + {Date:1636545600000,Open:334.57,High:334.63,Low:329.92,Close:330.8,Volume:25500900}, + {Date:1636632000000,Open:331.25,High:333.77,Low:330.51,Close:332.43,Volume:16849800}, + {Date:1636718400000,Open:333.92,High:337.23,Low:333.79,Close:336.72,Volume:23831000}, + {Date:1636977600000,Open:337.54,High:337.88,Low:334.03,Close:336.07,Volume:16723000}, + {Date:1637064000000,Open:335.68,High:340.67,Low:335.51,Close:339.51,Volume:20886800}, + {Date:1637150400000,Open:338.94,High:342.19,Low:338,Close:339.12,Volume:19053400}, + {Date:1637236800000,Open:338.18,High:342.45,Low:337.12,Close:341.27,Volume:22463500}, + {Date:1637323200000,Open:342.64,High:345.1,Low:342.2,Close:343.11,Volume:21963400}, + {Date:1637582400000,Open:344.62,High:349.67,Low:339.55,Close:339.83,Volume:31031100}, + {Date:1637668800000,Open:337.05,High:339.45,Low:333.56,Close:337.68,Volume:30427600}, + {Date:1637755200000,Open:336.28,High:338.16,Low:333.91,Close:337.91,Volume:21661300}, + {Date:1637928000000,Open:334.35,High:337.93,Low:328.12,Close:329.68,Volume:24217200}, + {Date:1638187200000,Open:334.94,High:339.03,Low:334.74,Close:336.63,Volume:28563500}, + {Date:1638273600000,Open:335.32,High:337.78,Low:328.99,Close:330.59,Volume:42885600}, + {Date:1638360000000,Open:335.13,High:339.28,Low:329.39,Close:330.08,Volume:33337600}, + {Date:1638446400000,Open:330.3,High:333.49,Low:327.8,Close:329.49,Volume:30766000}, + {Date:1638532800000,Open:331.99,High:332.7,Low:318.03,Close:323.01,Volume:41779300}, + {Date:1638792000000,Open:323.95,High:327.45,Low:319.23,Close:326.19,Volume:30032600}, + {Date:1638878400000,Open:331.64,High:335.8,Low:330.1,Close:334.92,Volume:31021900}, + {Date:1638964800000,Open:335.31,High:335.5,Low:330.8,Close:334.97,Volume:24761000}, + {Date:1639051200000,Open:334.41,High:336.49,Low:332.12,Close:333.1,Volume:22214200}, + {Date:1639137600000,Open:334.98,High:343,Low:334.79,Close:342.54,Volume:38095700}, + {Date:1639396800000,Open:340.68,High:343.79,Low:339.08,Close:339.4,Volume:28899400}, + {Date:1639483200000,Open:333.22,High:334.64,Low:324.11,Close:328.34,Volume:44438700}, + {Date:1639569600000,Open:328.61,High:335.19,Low:324.5,Close:334.65,Volume:35381100}, + {Date:1639656000000,Open:335.71,High:336.76,Low:323.02,Close:324.9,Volume:35034800}, + {Date:1639742400000,Open:320.88,High:324.92,Low:317.25,Close:323.8,Volume:47750300}, + {Date:1640001600000,Open:320.05,High:322.8,Low:317.57,Close:319.91,Volume:28326500}, + {Date:1640088000000,Open:323.29,High:327.73,Low:319.8,Close:327.29,Volume:24740600}, + {Date:1640174400000,Open:328.3,High:333.61,Low:325.75,Close:333.2,Volume:24831500}, + {Date:1640260800000,Open:332.75,High:336.39,Low:332.73,Close:334.69,Volume:19617800}, + {Date:1640606400000,Open:335.46,High:342.48,Low:335.43,Close:342.45,Volume:19947000}, + {Date:1640692800000,Open:343.15,High:343.81,Low:340.32,Close:341.25,Volume:15661500}, + {Date:1640779200000,Open:341.3,High:344.3,Low:339.68,Close:341.95,Volume:15042000}, + {Date:1640865600000,Open:341.91,High:343.13,Low:338.82,Close:339.32,Volume:15994500}, + {Date:1640952000000,Open:338.51,High:339.36,Low:335.85,Close:336.32,Volume:18000800}, + {Date:1641211200000,Open:335.35,High:338,Low:329.78,Close:334.75,Volume:28865100}, + {Date:1641297600000,Open:334.83,High:335.2,Low:326.12,Close:329.01,Volume:32674300}, + {Date:1641384000000,Open:325.86,High:326.07,Low:315.98,Close:316.38,Volume:40054300}, + {Date:1641470400000,Open:313.15,High:318.7,Low:311.49,Close:313.88,Volume:39646100}, + {Date:1641556800000,Open:314.15,High:316.5,Low:310.09,Close:314.04,Volume:32720000}, + {Date:1641816000000,Open:309.49,High:314.72,Low:304.69,Close:314.27,Volume:44289500}, + {Date:1641902400000,Open:313.38,High:316.61,Low:309.89,Close:314.98,Volume:29386800}, + {Date:1641988800000,Open:319.67,High:323.41,Low:317.08,Close:318.27,Volume:34372200}, + {Date:1642075200000,Open:320.47,High:320.88,Low:304,Close:304.8,Volume:45366000}, + {Date:1642161600000,Open:304.25,High:310.82,Low:303.75,Close:310.2,Volume:39846400}, + {Date:1642507200000,Open:304.07,High:309.8,Low:301.74,Close:302.65,Volume:42333200}, + {Date:1642593600000,Open:306.29,High:313.91,Low:302.7,Close:303.33,Volume:45933900}, + {Date:1642680000000,Open:309.07,High:311.65,Low:301.14,Close:301.6,Volume:35380700}, + {Date:1642766400000,Open:302.69,High:304.11,Low:295.61,Close:296.03,Volume:57984400}, + {Date:1643025600000,Open:292.2,High:297.11,Low:276.05,Close:296.37,Volume:85731500}, + {Date:1643112000000,Open:291.52,High:294.99,Low:285.17,Close:288.49,Volume:72848600}, + {Date:1643198400000,Open:307.99,High:308.5,Low:293.03,Close:296.71,Volume:90428900}, + {Date:1643284800000,Open:302.66,High:307.3,Low:297.93,Close:299.84,Volume:53481300}, + {Date:1643371200000,Open:300.23,High:308.48,Low:294.45,Close:308.26,Volume:49743700}, + {Date:1643630400000,Open:308.95,High:312.38,Low:306.37,Close:310.98,Volume:46444500}, + {Date:1643716800000,Open:310.41,High:310.63,Low:305.13,Close:308.76,Volume:40950400}, + {Date:1643803200000,Open:309.63,High:315.12,Low:308.88,Close:313.46,Volume:36636000}, + {Date:1643889600000,Open:309.49,High:311.23,Low:299.96,Close:301.25,Volume:43730000}, + {Date:1643976000000,Open:300.21,High:308.8,Low:299.97,Close:305.94,Volume:35096500}, + {Date:1644235200000,Open:306.17,High:307.84,Low:299.9,Close:300.95,Volume:28533300}, + {Date:1644321600000,Open:301.25,High:305.56,Low:299.95,Close:304.56,Volume:32421200}, + {Date:1644408000000,Open:309.87,High:311.93,Low:307.39,Close:311.21,Volume:31284700}, + {Date:1644494400000,Open:304.04,High:309.12,Low:300.7,Close:302.38,Volume:45386200}, + {Date:1644580800000,Open:303.19,High:304.29,Low:294.22,Close:295.04,Volume:39175600}, + {Date:1644840000000,Open:293.77,High:296.76,Low:291.35,Close:295,Volume:36359500}, + {Date:1644926400000,Open:300.01,High:300.8,Low:297.02,Close:300.47,Volume:27058300}, + {Date:1645012800000,Open:298.37,High:300.87,Low:293.68,Close:299.5,Volume:29982100}, + {Date:1645099200000,Open:296.36,High:296.8,Low:290,Close:290.73,Volume:32461600}, + {Date:1645185600000,Open:293.05,High:293.86,Low:286.31,Close:287.93,Volume:34264000}, + {Date:1645531200000,Open:285,High:291.54,Low:284.5,Close:287.72,Volume:41736100}, + {Date:1645617600000,Open:290.18,High:291.7,Low:280.1,Close:280.27,Volume:37811200}, + {Date:1645704000000,Open:272.51,High:295.16,Low:271.52,Close:294.59,Volume:56989700}, + {Date:1645790400000,Open:295.14,High:297.63,Low:291.65,Close:297.31,Volume:32546700}, + {Date:1646049600000,Open:294.31,High:299.14,Low:293,Close:298.79,Volume:34627500}, + {Date:1646136000000,Open:296.4,High:299.97,Low:292.15,Close:294.95,Volume:31217800}, + {Date:1646222400000,Open:295.36,High:301.47,Low:293.7,Close:300.19,Volume:31873000}, + {Date:1646308800000,Open:302.89,High:303.13,Low:294.05,Close:295.92,Volume:27314500}, + {Date:1646395200000,Open:294.29,High:295.66,Low:287.17,Close:289.86,Volume:32356500}, + {Date:1646654400000,Open:288.53,High:289.69,Low:278.53,Close:278.91,Volume:43157200}, + {Date:1646740800000,Open:277.8,High:283.96,Low:270,Close:275.85,Volume:48159500}, + {Date:1646827200000,Open:283.44,High:289.6,Low:280.78,Close:288.5,Volume:35204500}, + {Date:1646913600000,Open:283.02,High:286.6,Low:280.58,Close:285.59,Volume:30628000}, + {Date:1647000000000,Open:287.96,High:289.51,Low:279.43,Close:280.07,Volume:27209300}, + {Date:1647259200000,Open:280.34,High:285.4,Low:275.82,Close:276.44,Volume:30660700}, + {Date:1647345600000,Open:280.35,High:287.82,Low:278.73,Close:287.15,Volume:34245100}, + {Date:1647432000000,Open:289.11,High:294.57,Low:283.2,Close:294.39,Volume:37826300}, + {Date:1647518400000,Open:293.29,High:295.61,Low:289.37,Close:295.22,Volume:30816600}, + {Date:1647604800000,Open:295.37,High:301,Low:292.73,Close:300.43,Volume:43390600}, + {Date:1647864000000,Open:298.89,High:300.14,Low:294.9,Close:299.16,Volume:28351200}, + {Date:1647950400000,Open:299.8,High:305,Low:298.77,Close:304.06,Volume:27599700}, + {Date:1648036800000,Open:300.51,High:303.23,Low:297.72,Close:299.49,Volume:25715400}, + {Date:1648123200000,Open:299.14,High:304.2,Low:298.32,Close:304.1,Volume:24484500}, + {Date:1648209600000,Open:305.23,High:305.5,Low:299.29,Close:303.68,Volume:22566500}, + {Date:1648468800000,Open:304.33,High:310.8,Low:304.33,Close:310.7,Volume:29578200}, + {Date:1648555200000,Open:313.91,High:315.82,Low:309.05,Close:315.41,Volume:30393400}, + {Date:1648641600000,Open:313.76,High:315.95,Low:311.58,Close:313.86,Volume:28163600}, + {Date:1648728000000,Open:313.9,High:315.14,Low:307.89,Close:308.31,Volume:33422100}, + {Date:1648814400000,Open:309.37,High:310.13,Low:305.54,Close:309.42,Volume:27085100}, + {Date:1649073600000,Open:310.09,High:315.11,Low:309.71,Close:314.97,Volume:24289600}, + {Date:1649160000000,Open:313.27,High:314.87,Low:309.87,Close:310.88,Volume:23156700}, + {Date:1649246400000,Open:305.19,High:307,Low:296.71,Close:299.5,Volume:40110400}, + {Date:1649332800000,Open:296.66,High:303.65,Low:296.35,Close:301.37,Volume:31411200}, + {Date:1649419200000,Open:300.44,High:301.12,Low:296.28,Close:296.97,Volume:24347400}, + {Date:1649678400000,Open:291.79,High:292.61,Low:285,Close:285.26,Volume:34569300}, + {Date:1649764800000,Open:289.24,High:290.74,Low:280.49,Close:282.06,Volume:30966700}, + {Date:1649851200000,Open:282.73,High:288.58,Low:281.3,Close:287.62,Volume:21907200}, + {Date:1649937600000,Open:288.09,High:288.31,Low:279.32,Close:279.83,Volume:28107900}, + {Date:1650283200000,Open:278.91,High:282.46,Low:278.34,Close:280.52,Volume:20778000}, + {Date:1650369600000,Open:279.38,High:286.17,Low:278.41,Close:285.3,Volume:22297700}, + {Date:1650456000000,Open:289.4,High:289.7,Low:285.37,Close:286.36,Volume:22906700}, + {Date:1650542400000,Open:288.58,High:293.3,Low:280.06,Close:280.81,Volume:29454600}, + {Date:1650628800000,Open:281.68,High:283.2,Low:273.38,Close:274.03,Volume:29379300}, + {Date:1650888000000,Open:273.29,High:281.11,Low:270.77,Close:280.72,Volume:35678900}, + {Date:1650974400000,Open:277.5,High:278.36,Low:270,Close:270.22,Volume:46518400}, + {Date:1651060800000,Open:282.1,High:290.97,Low:279.16,Close:283.22,Volume:63388400} +] \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/index.css b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/index.html b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/index.html new file mode 100644 index 00000000..e6721238 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/index.html @@ -0,0 +1,18 @@ + + + + + amCharts 5 Example - stock-chart-data-grouping + + + +
+
+ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/index.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/index.js new file mode 100644 index 00000000..d00a1065 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-data-grouping/index.js @@ -0,0 +1,341 @@ +// Create root element +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create a stock chart +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Instantiating_the_chart +var stockChart = root.container.children.push(am5stock.StockChart.new(root, { +})); + + +// Set global number format +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/ +root.numberFormatter.set("numberFormat", "#,###.00"); + + +// Create a main stock panel (chart) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Adding_panels +var mainPanel = stockChart.panels.push(am5stock.StockPanel.new(root, { + wheelY: "zoomX", + height: am5.percent(70), + panX: true, + panY: true +})); + + +// Create value axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var valueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, { + pan: "zoom" + }), + tooltip: am5.Tooltip.new(root, {}), + numberFormat: "#,###.00", + extraTooltipPrecision: 2 +})); + +var dateAxis = mainPanel.xAxes.push(am5xy.GaplessDateAxis.new(root, { + groupData: true, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + + +// Add series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var valueSeries = mainPanel.series.push(am5xy.CandlestickSeries.new(root, { + name: "AMCH", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Close", + highValueYField: "High", + lowValueYField: "Low", + openValueYField: "Open", + calculateAggregates: true, + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "open: [bold]{openValueY}[/] high: [bold]{highValueY}[/] low: [bold]{lowValueY}[/] close: [bold]{valueY}[/]", + legendRangeValueText: "" +})); + + +// Set main value series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("stockSeries", valueSeries); + + +// Add a stock legend +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/stock-legend/ +var valueLegend = mainPanel.plotContainer.children.push(am5stock.StockLegend.new(root, { + stockChart: stockChart +})); + + +// Create a volume panel (chart) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Adding_panels +var volumePanel = stockChart.panels.push(am5stock.StockPanel.new(root, { + wheelY: "zoomX", + panX: true, + panY: false, + height: am5.percent(30), + paddingTop: 6 +})); + +// hide close button as we don't want this panel to be closed +volumePanel.panelControls.closeButton.set("forceHidden", true); + +var volumeDateAxis = volumePanel.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + groupData: true, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, { + forceHidden: true + }), + height: 0 +})); + +// we don't need it to be visible +volumeDateAxis.get("renderer").labels.template.set("forceHidden", true); + +// Create volume axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var volumeAxisRenderer = am5xy.AxisRendererY.new(root, {}); + +var volumeValueAxis = volumePanel.yAxes.push(am5xy.ValueAxis.new(root, { + numberFormat: "#.#a", + renderer: volumeAxisRenderer +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var volumeSeries = volumePanel.series.push(am5xy.ColumnSeries.new(root, { + name: "Volume", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Volume", + xAxis: volumeDateAxis, + yAxis: volumeValueAxis, + legendValueText: "[bold]{valueY.formatNumber('#,###.0a')}[/]" +})); + +volumeSeries.columns.template.setAll({ + strokeOpacity: 0, + fillOpacity: 0.5 +}); + +// color columns by stock rules +volumeSeries.columns.template.adapters.add("fill", function(fill, target) { + var dataItem = target.dataItem; + if (dataItem) { + return stockChart.getVolumeColor(dataItem); + } + return fill; +}) + +// Add a stock legend +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/stock-legend/ +var volumeLegend = volumePanel.plotContainer.children.push(am5stock.StockLegend.new(root, { + stockChart: stockChart +})); + + +// Set main series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("volumeSeries", volumeSeries); +valueLegend.data.setAll([valueSeries]); +volumeLegend.data.setAll([volumeSeries]); + + +// Add cursor(s) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +mainPanel.set("cursor", am5xy.XYCursor.new(root, { + yAxis: valueAxis, + xAxis: dateAxis, + snapToSeries: [valueSeries], + snapToSeriesBy: "y!" +})); + + +var volumeCursor = volumePanel.set("cursor", am5xy.XYCursor.new(root, { + yAxis: volumeValueAxis, + xAxis: volumeDateAxis, + snapToSeries: [volumeSeries], + snapToSeriesBy: "y!" +})); + +volumeCursor.lineY.set("forceHidden", true); + +// Add scrollbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = mainPanel.set("scrollbarX", am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +})); +stockChart.toolsContainer.children.push(scrollbar); + +var sbDateAxis = scrollbar.chart.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, {}) +})); + +var sbValueAxis = scrollbar.chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + +var sbSeries = scrollbar.chart.series.push(am5xy.LineSeries.new(root, { + valueYField: "Close", + valueXField: "Date", + xAxis: sbDateAxis, + yAxis: sbValueAxis +})); + +sbSeries.fills.template.setAll({ + visible: true, + fillOpacity: 0.3 +}); + + +// Function that dynamically loads data +function loadData(ticker, series, granularity) { + var data = (window)[ticker + "_" + granularity]; + am5.array.each(series, function(item) { + item.data.setAll(data); + }); +} + +// Load initial data for the first series +var currentGranularity = "day"; +loadData("MSFT", [valueSeries, volumeSeries, sbSeries], currentGranularity); + + +// Set up series type switcher +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/series-type-control/ +var seriesSwitcher = am5stock.SeriesTypeControl.new(root, { + stockChart: stockChart +}); + +seriesSwitcher.events.on("selected", function(ev) { + setSeriesType(ev.item.id); +}); + +function getNewSettings(series) { + var newSettings = []; + am5.array.each(["name", "valueYField", "highValueYField", "lowValueYField", "openValueYField", "calculateAggregates", "valueXField", "xAxis", "yAxis", "legendValueText", "legendRangeValueText", "stroke", "fill"], function(setting) { + newSettings[setting] = series.get(setting); + }); + return newSettings; +} + +function setSeriesType(seriesType) { + // Get current series and its settings + var currentSeries = stockChart.get("stockSeries"); + var newSettings = getNewSettings(currentSeries); + + // Remove previous series + var data = currentSeries.data.values; + mainPanel.series.removeValue(currentSeries); + + // Create new series + var series; + switch (seriesType) { + case "line": + series = mainPanel.series.push(am5xy.LineSeries.new(root, newSettings)); + break; + case "candlestick": + case "procandlestick": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.CandlestickSeries.new(root, newSettings)); + if (seriesType == "procandlestick") { + series.columns.template.get("themeTags").push("pro"); + } + break; + case "ohlc": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.OHLCSeries.new(root, newSettings)); + break; + } + + // Set new series as stockSeries + if (series) { + valueLegend.data.removeValue(currentSeries); + series.data.setAll(data); + stockChart.set("stockSeries", series); + var cursor = mainPanel.get("cursor"); + if (cursor) { + cursor.set("snapToSeries", [series]); + } + valueLegend.data.insertIndex(0, series); + } +} + + +// Stock toolbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/ +var toolbar = am5stock.StockToolbar.new(root, { + container: document.getElementById("chartcontrols"), + stockChart: stockChart, + controls: [ + am5stock.IndicatorControl.new(root, { + stockChart: stockChart, + legend: valueLegend + }), + am5stock.DateRangeSelector.new(root, { + stockChart: stockChart + }), + am5stock.PeriodSelector.new(root, { + stockChart: stockChart + }), + seriesSwitcher, + am5stock.DrawingControl.new(root, { + stockChart: stockChart + }), + am5stock.ResetControl.new(root, { + stockChart: stockChart + }), + am5stock.SettingsControl.new(root, { + stockChart: stockChart + }) + ] +}) diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/README.md b/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/index.css b/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/index.html b/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/index.html new file mode 100644 index 00000000..b1de314e --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/index.html @@ -0,0 +1,17 @@ + + + + + amCharts 5 Example - stock-chart-intraday + + + +
+
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/index.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/index.js new file mode 100644 index 00000000..ded61b28 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-intraday/index.js @@ -0,0 +1,676 @@ +// Create root element +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create a stock chart +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Instantiating_the_chart +var stockChart = root.container.children.push(am5stock.StockChart.new(root, { +})); + + +// Set global number format +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/ +root.numberFormatter.set("numberFormat", "#,###.00"); + + +// Create a main stock panel (chart) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Adding_panels +var mainPanel = stockChart.panels.push(am5stock.StockPanel.new(root, { + wheelY: "zoomX", + panX: true, + panY: true +})); + + +// Create value axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var valueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, { + pan: "zoom" + }), + extraMin: 0.1, // adds some space for for main series + tooltip: am5.Tooltip.new(root, {}), + numberFormat: "#,###.00", + extraTooltipPrecision: 2 +})); + +var dateAxis = mainPanel.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "minute", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + + +// Add series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var valueSeries = mainPanel.series.push(am5xy.CandlestickSeries.new(root, { + name: "AMCH", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Close", + highValueYField: "High", + lowValueYField: "Low", + openValueYField: "Open", + calculateAggregates: true, + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "open: [bold]{openValueY}[/] high: [bold]{highValueY}[/] low: [bold]{lowValueY}[/] close: [bold]{valueY}[/]", + legendRangeValueText: "" +})); + + +// Set main value series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("stockSeries", valueSeries); + + +// Add a stock legend +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/stock-legend/ +var valueLegend = mainPanel.plotContainer.children.push(am5stock.StockLegend.new(root, { + stockChart: stockChart +})); + + +// Create volume axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var volumeAxisRenderer = am5xy.AxisRendererY.new(root, { + inside: true +}); + +volumeAxisRenderer.labels.template.set("forceHidden", true); +volumeAxisRenderer.grid.template.set("forceHidden", true); + +var volumeValueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + numberFormat: "#.#a", + height: am5.percent(20), + y: am5.percent(100), + centerY: am5.percent(100), + renderer: volumeAxisRenderer +})); + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var volumeSeries = mainPanel.series.push(am5xy.ColumnSeries.new(root, { + name: "Volume", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Volume", + xAxis: dateAxis, + yAxis: volumeValueAxis, + legendValueText: "[bold]{valueY.formatNumber('#,###.0a')}[/]" +})); + +volumeSeries.columns.template.setAll({ + strokeOpacity: 0, + fillOpacity: 0.5 +}); + +// color columns by stock rules +volumeSeries.columns.template.adapters.add("fill", function(fill, target) { + var dataItem = target.dataItem; + if (dataItem) { + return stockChart.getVolumeColor(dataItem); + } + return fill; +}) + + +// Set main series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("volumeSeries", volumeSeries); +valueLegend.data.setAll([valueSeries, volumeSeries]); + + +// Add cursor(s) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +mainPanel.set("cursor", am5xy.XYCursor.new(root, { + yAxis: valueAxis, + xAxis: dateAxis, + snapToSeries: [valueSeries], + snapToSeriesBy: "y!" +})); + + +// Add scrollbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = mainPanel.set("scrollbarX", am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +})); +stockChart.toolsContainer.children.push(scrollbar); + +var sbDateAxis = scrollbar.chart.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "minute", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, {}) +})); + +var sbValueAxis = scrollbar.chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + +var sbSeries = scrollbar.chart.series.push(am5xy.LineSeries.new(root, { + valueYField: "Close", + valueXField: "Date", + xAxis: sbDateAxis, + yAxis: sbValueAxis +})); + +sbSeries.fills.template.setAll({ + visible: true, + fillOpacity: 0.3 +}); + +// Set up series type switcher +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/series-type-control/ +var seriesSwitcher = am5stock.SeriesTypeControl.new(root, { + stockChart: stockChart +}); + +seriesSwitcher.events.on("selected", function(ev) { + setSeriesType(ev.item.id); +}); + +function getNewSettings(series) { + var newSettings = []; + am5.array.each(["name", "valueYField", "highValueYField", "lowValueYField", "openValueYField", "calculateAggregates", "valueXField", "xAxis", "yAxis", "legendValueText", "legendRangeValueText", "stroke", "fill"], function(setting) { + newSettings[setting] = series.get(setting); + }); + return newSettings; +} + +function setSeriesType(seriesType) { + // Get current series and its settings + var currentSeries = stockChart.get("stockSeries"); + var newSettings = getNewSettings(currentSeries); + + // Remove previous series + var data = currentSeries.data.values; + mainPanel.series.removeValue(currentSeries); + + // Create new series + var series; + switch (seriesType) { + case "line": + series = mainPanel.series.push(am5xy.LineSeries.new(root, newSettings)); + break; + case "candlestick": + case "procandlestick": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.CandlestickSeries.new(root, newSettings)); + if (seriesType == "procandlestick") { + series.columns.template.get("themeTags").push("pro"); + } + break; + case "ohlc": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.OHLCSeries.new(root, newSettings)); + break; + } + + // Set new series as stockSeries + if (series) { + valueLegend.data.removeValue(currentSeries); + series.data.setAll(data); + stockChart.set("stockSeries", series); + var cursor = mainPanel.get("cursor"); + if (cursor) { + cursor.set("snapToSeries", [series]); + } + valueLegend.data.insertIndex(0, series); + } +} + + +// Stock toolbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/ +var toolbar = am5stock.StockToolbar.new(root, { + container: document.getElementById("chartcontrols"), + stockChart: stockChart, + controls: [ + am5stock.IndicatorControl.new(root, { + stockChart: stockChart, + legend: valueLegend + }), + seriesSwitcher, + am5stock.DrawingControl.new(root, { + stockChart: stockChart + }), + am5stock.ResetControl.new(root, { + stockChart: stockChart + }), + am5stock.SettingsControl.new(root, { + stockChart: stockChart + }) + ] +}) + +// data +var data = [ + {Date:1649842200000,Open:282.73,High:282.73,Low:281.92,Close:281.95,Volume:55522}, + {Date:1649842260000,Open:281.93,High:282.49,Low:281.69,Close:282.16,Volume:44862}, + {Date:1649842320000,Open:282.19,High:282.62,Low:281.6,Close:282.58,Volume:60104}, + {Date:1649842380000,Open:282.55,High:282.57,Low:281.77,Close:281.95,Volume:62857}, + {Date:1649842440000,Open:281.8,High:281.97,Low:281.61,Close:281.82,Volume:46548}, + {Date:1649842500000,Open:281.77,High:282.39,Low:281.75,Close:282,Volume:107311}, + {Date:1649842560000,Open:282.08,High:282.37,Low:281.85,Close:281.99,Volume:44348}, + {Date:1649842620000,Open:281.98,High:282.05,Low:281.8,Close:281.84,Volume:59741}, + {Date:1649842680000,Open:281.82,High:282.08,Low:281.7,Close:281.93,Volume:59910}, + {Date:1649842740000,Open:281.92,High:282.17,Low:281.74,Close:281.75,Volume:103366}, + {Date:1649842800000,Open:281.77,High:281.88,Low:281.3,Close:281.72,Volume:108402}, + {Date:1649842860000,Open:281.73,High:282.29,Low:281.65,Close:282.18,Volume:142668}, + {Date:1649842920000,Open:282.14,High:282.61,Low:282.1,Close:282.2,Volume:116732}, + {Date:1649842980000,Open:282.19,High:282.86,Low:282,Close:282.86,Volume:107624}, + {Date:1649843040000,Open:282.82,High:283.36,Low:282.77,Close:283.1,Volume:102217}, + {Date:1649843100000,Open:283.12,High:283.5,Low:282.9,Close:283.44,Volume:69037}, + {Date:1649843160000,Open:283.45,High:283.86,Low:283.25,Close:283.37,Volume:64511}, + {Date:1649843220000,Open:283.36,High:283.77,Low:283.2,Close:283.64,Volume:51860}, + {Date:1649843280000,Open:283.66,High:283.78,Low:283.5,Close:283.54,Volume:44270}, + {Date:1649843340000,Open:283.5,High:283.73,Low:283.21,Close:283.25,Volume:77339}, + {Date:1649843400000,Open:283.23,High:283.53,Low:283.08,Close:283.36,Volume:56200}, + {Date:1649843460000,Open:283.37,High:283.58,Low:283.27,Close:283.4,Volume:40796}, + {Date:1649843520000,Open:283.37,High:283.37,Low:282.92,Close:283.11,Volume:39419}, + {Date:1649843580000,Open:283.08,High:283.23,Low:282.93,Close:283.08,Volume:36623}, + {Date:1649843640000,Open:283.06,High:283.53,Low:283.05,Close:283.48,Volume:35163}, + {Date:1649843700000,Open:283.49,High:283.54,Low:283.08,Close:283.12,Volume:50792}, + {Date:1649843760000,Open:283.08,High:283.08,Low:282.5,Close:282.8,Volume:68439}, + {Date:1649843820000,Open:282.83,High:283.09,Low:282.81,Close:283.03,Volume:25099}, + {Date:1649843880000,Open:283.17,High:283.36,Low:283.12,Close:283.12,Volume:38277}, + {Date:1649843940000,Open:283.12,High:283.14,Low:282.17,Close:282.76,Volume:66937}, + {Date:1649844000000,Open:282.78,High:282.79,Low:282.5,Close:282.7,Volume:29629}, + {Date:1649844060000,Open:282.68,High:282.76,Low:282.36,Close:282.4,Volume:33094}, + {Date:1649844120000,Open:282.42,High:282.72,Low:282.4,Close:282.72,Volume:37719}, + {Date:1649844180000,Open:282.69,High:282.78,Low:282.51,Close:282.57,Volume:23199}, + {Date:1649844240000,Open:282.64,High:283.16,Low:282.62,Close:283.14,Volume:41676}, + {Date:1649844300000,Open:283.16,High:283.7,Low:283.16,Close:283.65,Volume:71061}, + {Date:1649844360000,Open:283.69,High:283.83,Low:283.44,Close:283.82,Volume:52597}, + {Date:1649844420000,Open:283.79,High:283.85,Low:283.48,Close:283.79,Volume:54694}, + {Date:1649844480000,Open:283.78,High:283.82,Low:283.23,Close:283.33,Volume:35363}, + {Date:1649844540000,Open:283.28,High:283.29,Low:282.85,Close:283,Volume:37211}, + {Date:1649844600000,Open:282.96,High:283.04,Low:282.68,Close:282.76,Volume:30244}, + {Date:1649844660000,Open:282.75,High:282.81,Low:282.62,Close:282.8,Volume:20986}, + {Date:1649844720000,Open:282.82,High:283.24,Low:282.81,Close:283.1,Volume:37861}, + {Date:1649844780000,Open:283.07,High:283.22,Low:282.86,Close:282.98,Volume:30877}, + {Date:1649844840000,Open:282.96,High:283.28,Low:282.85,Close:283.24,Volume:23297}, + {Date:1649844900000,Open:283.25,High:283.98,Low:283.25,Close:283.93,Volume:45930}, + {Date:1649844960000,Open:283.98,High:284.32,Low:283.94,Close:284.21,Volume:60952}, + {Date:1649845020000,Open:284.22,High:284.24,Low:283.87,Close:283.91,Volume:26137}, + {Date:1649845080000,Open:283.9,High:284.07,Low:283.82,Close:283.99,Volume:24452}, + {Date:1649845140000,Open:283.96,High:284.18,Low:283.9,Close:284.05,Volume:30367}, + {Date:1649845200000,Open:284.02,High:284.07,Low:283.89,Close:283.97,Volume:14544}, + {Date:1649845260000,Open:283.97,High:284.24,Low:283.92,Close:284.23,Volume:46323}, + {Date:1649845320000,Open:284.23,High:284.45,Low:284.17,Close:284.37,Volume:46267}, + {Date:1649845380000,Open:284.36,High:284.53,Low:284.2,Close:284.53,Volume:34193}, + {Date:1649845440000,Open:284.52,High:284.63,Low:284.42,Close:284.57,Volume:26571}, + {Date:1649845500000,Open:284.55,High:284.57,Low:284.19,Close:284.29,Volume:55144}, + {Date:1649845560000,Open:284.28,High:284.29,Low:284.05,Close:284.1,Volume:31951}, + {Date:1649845620000,Open:284.08,High:284.2,Low:284.05,Close:284.14,Volume:35332}, + {Date:1649845680000,Open:284.17,High:284.2,Low:283.94,Close:284.05,Volume:53518}, + {Date:1649845740000,Open:284.05,High:284.22,Low:283.96,Close:284.07,Volume:43175}, + {Date:1649845800000,Open:284.1,High:285.26,Low:283.99,Close:285.07,Volume:87031}, + {Date:1649845860000,Open:285.07,High:285.19,Low:284.84,Close:284.86,Volume:45023}, + {Date:1649845920000,Open:284.84,High:284.91,Low:284.53,Close:284.53,Volume:18505}, + {Date:1649845980000,Open:284.54,High:284.63,Low:284.34,Close:284.57,Volume:33079}, + {Date:1649846040000,Open:284.55,High:284.63,Low:284.41,Close:284.47,Volume:23419}, + {Date:1649846100000,Open:284.46,High:284.6,Low:284.29,Close:284.31,Volume:40430}, + {Date:1649846160000,Open:284.33,High:284.45,Low:284.18,Close:284.41,Volume:19354}, + {Date:1649846220000,Open:284.4,High:284.46,Low:284.05,Close:284.07,Volume:20545}, + {Date:1649846280000,Open:284.08,High:284.3,Low:284.04,Close:284.21,Volume:16342}, + {Date:1649846340000,Open:284.22,High:284.28,Low:283.8,Close:283.87,Volume:24988}, + {Date:1649846400000,Open:283.85,High:283.85,Low:283.51,Close:283.69,Volume:57977}, + {Date:1649846460000,Open:283.68,High:283.97,Low:283.6,Close:283.89,Volume:46137}, + {Date:1649846520000,Open:283.91,High:284.21,Low:283.91,Close:284.18,Volume:16234}, + {Date:1649846580000,Open:284.21,High:284.35,Low:284.14,Close:284.23,Volume:22813}, + {Date:1649846640000,Open:284.22,High:284.45,Low:284.22,Close:284.36,Volume:42546}, + {Date:1649846700000,Open:284.34,High:284.53,Low:284.34,Close:284.48,Volume:18541}, + {Date:1649846760000,Open:284.44,High:284.76,Low:284.24,Close:284.67,Volume:33107}, + {Date:1649846820000,Open:284.66,High:284.66,Low:284.14,Close:284.16,Volume:25193}, + {Date:1649846880000,Open:284.14,High:284.28,Low:284.1,Close:284.26,Volume:37239}, + {Date:1649846940000,Open:284.26,High:284.4,Low:284.09,Close:284.16,Volume:31077}, + {Date:1649847000000,Open:284.18,High:284.26,Low:284.04,Close:284.19,Volume:22293}, + {Date:1649847060000,Open:284.22,High:284.26,Low:284.06,Close:284.1,Volume:20200}, + {Date:1649847120000,Open:284.09,High:284.7,Low:283.96,Close:284.58,Volume:39355}, + {Date:1649847180000,Open:284.63,High:284.68,Low:284.34,Close:284.34,Volume:20627}, + {Date:1649847240000,Open:284.36,High:284.59,Low:284.34,Close:284.4,Volume:19732}, + {Date:1649847300000,Open:284.38,High:284.49,Low:284.16,Close:284.24,Volume:26977}, + {Date:1649847360000,Open:284.25,High:284.25,Low:283.91,Close:283.95,Volume:23927}, + {Date:1649847420000,Open:283.94,High:284.04,Low:283.69,Close:283.76,Volume:31329}, + {Date:1649847480000,Open:283.74,High:283.75,Low:283.59,Close:283.68,Volume:38368}, + {Date:1649847540000,Open:283.69,High:283.84,Low:283.6,Close:283.6,Volume:22433}, + {Date:1649847600000,Open:283.64,High:284.15,Low:283.62,Close:284.03,Volume:33964}, + {Date:1649847660000,Open:283.98,High:284.14,Low:283.91,Close:284.01,Volume:27711}, + {Date:1649847720000,Open:283.98,High:284.22,Low:283.9,Close:284.17,Volume:17090}, + {Date:1649847780000,Open:284.18,High:285.02,Low:284.14,Close:284.99,Volume:73585}, + {Date:1649847840000,Open:284.98,High:285.26,Low:284.81,Close:284.81,Volume:77582}, + {Date:1649847900000,Open:284.81,High:284.9,Low:284.67,Close:284.72,Volume:33368}, + {Date:1649847960000,Open:284.67,High:284.69,Low:284.47,Close:284.6,Volume:19578}, + {Date:1649848020000,Open:284.61,High:284.69,Low:284.54,Close:284.68,Volume:30905}, + {Date:1649848080000,Open:284.69,High:284.9,Low:284.62,Close:284.88,Volume:39504}, + {Date:1649848140000,Open:284.87,High:284.87,Low:284.61,Close:284.62,Volume:26355}, + {Date:1649848200000,Open:284.61,High:284.78,Low:284.52,Close:284.76,Volume:26386}, + {Date:1649848260000,Open:284.78,High:284.86,Low:284.63,Close:284.78,Volume:25872}, + {Date:1649848320000,Open:284.76,High:284.88,Low:284.71,Close:284.76,Volume:18526}, + {Date:1649848380000,Open:284.75,High:285.24,Low:284.74,Close:285.15,Volume:38250}, + {Date:1649848440000,Open:285.17,High:285.42,Low:285.05,Close:285.3,Volume:80991}, + {Date:1649848500000,Open:285.29,High:285.34,Low:285.08,Close:285.22,Volume:37712}, + {Date:1649848560000,Open:285.24,High:285.3,Low:285.1,Close:285.1,Volume:25697}, + {Date:1649848620000,Open:285.09,High:285.14,Low:284.89,Close:285.07,Volume:32478}, + {Date:1649848680000,Open:285.06,High:285.25,Low:285.05,Close:285.21,Volume:31950}, + {Date:1649848740000,Open:285.2,High:285.22,Low:285.07,Close:285.16,Volume:12448}, + {Date:1649848800000,Open:285.17,High:285.23,Low:284.99,Close:285.01,Volume:26271}, + {Date:1649848860000,Open:285,High:285.23,Low:284.99,Close:285.17,Volume:32554}, + {Date:1649848920000,Open:285.18,High:285.42,Low:285.15,Close:285.36,Volume:45911}, + {Date:1649848980000,Open:285.38,High:285.6,Low:285.38,Close:285.55,Volume:47816}, + {Date:1649849040000,Open:285.51,High:285.59,Low:285.44,Close:285.5,Volume:31700}, + {Date:1649849100000,Open:285.5,High:285.9,Low:285.5,Close:285.87,Volume:51563}, + {Date:1649849160000,Open:285.83,High:285.9,Low:285.68,Close:285.71,Volume:37968}, + {Date:1649849220000,Open:285.72,High:285.76,Low:285.6,Close:285.61,Volume:20678}, + {Date:1649849280000,Open:285.58,High:285.67,Low:285.4,Close:285.54,Volume:18607}, + {Date:1649849340000,Open:285.58,High:285.62,Low:285.49,Close:285.56,Volume:16850}, + {Date:1649849400000,Open:285.57,High:285.78,Low:285.53,Close:285.76,Volume:22000}, + {Date:1649849460000,Open:285.75,High:285.8,Low:285.68,Close:285.68,Volume:22715}, + {Date:1649849520000,Open:285.69,High:285.8,Low:285.65,Close:285.69,Volume:26349}, + {Date:1649849580000,Open:285.69,High:285.83,Low:285.67,Close:285.71,Volume:22740}, + {Date:1649849640000,Open:285.69,High:285.96,Low:285.48,Close:285.65,Volume:57494}, + {Date:1649849700000,Open:285.67,High:285.77,Low:285.56,Close:285.68,Volume:20805}, + {Date:1649849760000,Open:285.69,High:285.8,Low:285.65,Close:285.72,Volume:34365}, + {Date:1649849820000,Open:285.72,High:285.72,Low:285.58,Close:285.59,Volume:19158}, + {Date:1649849880000,Open:285.58,High:285.7,Low:285.57,Close:285.7,Volume:23436}, + {Date:1649849940000,Open:285.7,High:285.76,Low:285.61,Close:285.74,Volume:16478}, + {Date:1649850000000,Open:285.77,High:285.81,Low:285.64,Close:285.69,Volume:31069}, + {Date:1649850060000,Open:285.7,High:285.7,Low:285.62,Close:285.7,Volume:16625}, + {Date:1649850120000,Open:285.71,High:286,Low:285.71,Close:286,Volume:34302}, + {Date:1649850180000,Open:286,High:286.1,Low:285.82,Close:285.86,Volume:35727}, + {Date:1649850240000,Open:285.85,High:285.86,Low:285.56,Close:285.63,Volume:42080}, + {Date:1649850300000,Open:285.65,High:285.65,Low:285.19,Close:285.19,Volume:35268}, + {Date:1649850360000,Open:285.2,High:285.36,Low:285.18,Close:285.33,Volume:35098}, + {Date:1649850420000,Open:285.33,High:285.36,Low:285.17,Close:285.17,Volume:20557}, + {Date:1649850480000,Open:285.17,High:285.29,Low:285.1,Close:285.26,Volume:16803}, + {Date:1649850540000,Open:285.24,High:285.36,Low:285.2,Close:285.36,Volume:15292}, + {Date:1649850600000,Open:285.33,High:285.39,Low:285.27,Close:285.29,Volume:25898}, + {Date:1649850660000,Open:285.28,High:285.47,Low:285.26,Close:285.32,Volume:19607}, + {Date:1649850720000,Open:285.34,High:285.46,Low:285.26,Close:285.46,Volume:13002}, + {Date:1649850780000,Open:285.49,High:285.56,Low:285.48,Close:285.56,Volume:14955}, + {Date:1649850840000,Open:285.55,High:285.67,Low:285.55,Close:285.61,Volume:21725}, + {Date:1649850900000,Open:285.6,High:285.61,Low:285.5,Close:285.57,Volume:24164}, + {Date:1649850960000,Open:285.58,High:285.6,Low:285.41,Close:285.47,Volume:24789}, + {Date:1649851020000,Open:285.45,High:285.67,Low:285.44,Close:285.67,Volume:16814}, + {Date:1649851080000,Open:285.64,High:285.67,Low:285.53,Close:285.66,Volume:15273}, + {Date:1649851140000,Open:285.66,High:285.68,Low:285.54,Close:285.67,Volume:17328}, + {Date:1649851200000,Open:285.66,High:285.72,Low:285.35,Close:285.38,Volume:33397}, + {Date:1649851260000,Open:285.36,High:285.43,Low:285.26,Close:285.34,Volume:28198}, + {Date:1649851320000,Open:285.33,High:285.42,Low:285.23,Close:285.37,Volume:12687}, + {Date:1649851380000,Open:285.39,High:285.64,Low:285.39,Close:285.61,Volume:17180}, + {Date:1649851440000,Open:285.63,High:285.8,Low:285.63,Close:285.72,Volume:25027}, + {Date:1649851500000,Open:285.7,High:285.81,Low:285.64,Close:285.73,Volume:19857}, + {Date:1649851560000,Open:285.71,High:285.72,Low:285.48,Close:285.63,Volume:34650}, + {Date:1649851620000,Open:285.63,High:285.77,Low:285.63,Close:285.7,Volume:16469}, + {Date:1649851680000,Open:285.69,High:285.87,Low:285.59,Close:285.76,Volume:14704}, + {Date:1649851740000,Open:285.74,High:285.98,Low:285.73,Close:285.94,Volume:24354}, + {Date:1649851800000,Open:285.92,High:286.07,Low:285.63,Close:285.69,Volume:41856}, + {Date:1649851860000,Open:285.7,High:285.7,Low:285.43,Close:285.63,Volume:22231}, + {Date:1649851920000,Open:285.63,High:285.69,Low:285.52,Close:285.64,Volume:13064}, + {Date:1649851980000,Open:285.63,High:285.63,Low:285.5,Close:285.57,Volume:15223}, + {Date:1649852040000,Open:285.65,High:285.83,Low:285.56,Close:285.83,Volume:37501}, + {Date:1649852100000,Open:285.84,High:285.85,Low:285.69,Close:285.71,Volume:21245}, + {Date:1649852160000,Open:285.7,High:285.72,Low:285.62,Close:285.66,Volume:17972}, + {Date:1649852220000,Open:285.65,High:285.77,Low:285.59,Close:285.65,Volume:16845}, + {Date:1649852280000,Open:285.68,High:286.01,Low:285.68,Close:286.01,Volume:27338}, + {Date:1649852340000,Open:286.01,High:286.29,Low:285.99,Close:286.12,Volume:57536}, + {Date:1649852400000,Open:286.13,High:286.13,Low:285.83,Close:285.94,Volume:19150}, + {Date:1649852460000,Open:285.93,High:286.03,Low:285.86,Close:286.02,Volume:23586}, + {Date:1649852520000,Open:286.03,High:286.3,Low:286.02,Close:286.26,Volume:38761}, + {Date:1649852580000,Open:286.28,High:286.34,Low:286.13,Close:286.16,Volume:23405}, + {Date:1649852640000,Open:286.19,High:286.2,Low:286.07,Close:286.18,Volume:14660}, + {Date:1649852700000,Open:286.17,High:286.42,Low:286.15,Close:286.32,Volume:41203}, + {Date:1649852760000,Open:286.32,High:286.36,Low:286.19,Close:286.22,Volume:19782}, + {Date:1649852820000,Open:286.2,High:286.27,Low:285.9,Close:286.12,Volume:49183}, + {Date:1649852880000,Open:286.12,High:286.2,Low:286.12,Close:286.12,Volume:13620}, + {Date:1649852940000,Open:286.14,High:286.14,Low:286.05,Close:286.07,Volume:15096}, + {Date:1649853000000,Open:286.09,High:286.13,Low:285.91,Close:285.99,Volume:27396}, + {Date:1649853060000,Open:286,High:286.01,Low:285.89,Close:286,Volume:20352}, + {Date:1649853120000,Open:286.02,High:286.05,Low:285.87,Close:286.02,Volume:21114}, + {Date:1649853180000,Open:286.03,High:286.05,Low:285.83,Close:285.86,Volume:20378}, + {Date:1649853240000,Open:285.87,High:286,Low:285.84,Close:285.92,Volume:34398}, + {Date:1649853300000,Open:285.92,High:286.24,Low:285.92,Close:286.18,Volume:26062}, + {Date:1649853360000,Open:286.16,High:286.32,Low:286.11,Close:286.13,Volume:27939}, + {Date:1649853420000,Open:286.13,High:286.25,Low:286.13,Close:286.25,Volume:28972}, + {Date:1649853480000,Open:286.25,High:286.29,Low:286.06,Close:286.06,Volume:32361}, + {Date:1649853540000,Open:286.1,High:286.26,Low:286.04,Close:286.22,Volume:16056}, + {Date:1649853600000,Open:286.25,High:286.62,Low:286.16,Close:286.23,Volume:29015}, + {Date:1649853660000,Open:286.23,High:286.26,Low:286.14,Close:286.2,Volume:17686}, + {Date:1649853720000,Open:286.17,High:286.19,Low:286.1,Close:286.17,Volume:15480}, + {Date:1649853780000,Open:286.18,High:286.28,Low:286.17,Close:286.27,Volume:17654}, + {Date:1649853840000,Open:286.27,High:286.4,Low:286.24,Close:286.27,Volume:23426}, + {Date:1649853900000,Open:286.28,High:286.39,Low:286.19,Close:286.3,Volume:23571}, + {Date:1649853960000,Open:286.29,High:286.35,Low:286.25,Close:286.27,Volume:12630}, + {Date:1649854020000,Open:286.29,High:286.32,Low:286.23,Close:286.32,Volume:13372}, + {Date:1649854080000,Open:286.3,High:286.41,Low:286.27,Close:286.29,Volume:14142}, + {Date:1649854140000,Open:286.3,High:286.34,Low:286.16,Close:286.3,Volume:39928}, + {Date:1649854200000,Open:286.3,High:286.42,Low:286.28,Close:286.34,Volume:19423}, + {Date:1649854260000,Open:286.36,High:286.4,Low:286.23,Close:286.24,Volume:22212}, + {Date:1649854320000,Open:286.26,High:286.31,Low:286.16,Close:286.2,Volume:20930}, + {Date:1649854380000,Open:286.21,High:286.26,Low:286.14,Close:286.25,Volume:15616}, + {Date:1649854440000,Open:286.26,High:286.36,Low:286.22,Close:286.24,Volume:19106}, + {Date:1649854500000,Open:286.25,High:286.27,Low:286.18,Close:286.19,Volume:22496}, + {Date:1649854560000,Open:286.2,High:286.21,Low:286.1,Close:286.19,Volume:22694}, + {Date:1649854620000,Open:286.17,High:286.22,Low:286.1,Close:286.22,Volume:23774}, + {Date:1649854680000,Open:286.2,High:286.28,Low:286.06,Close:286.06,Volume:21255}, + {Date:1649854740000,Open:286.08,High:286.16,Low:286.02,Close:286.09,Volume:22495}, + {Date:1649854800000,Open:286.1,High:286.16,Low:286.04,Close:286.13,Volume:18638}, + {Date:1649854860000,Open:286.12,High:286.22,Low:286.01,Close:286.07,Volume:28439}, + {Date:1649854920000,Open:286.07,High:286.3,Low:285.97,Close:286.3,Volume:32658}, + {Date:1649854980000,Open:286.28,High:286.44,Low:286.24,Close:286.34,Volume:20654}, + {Date:1649855040000,Open:286.33,High:286.39,Low:286.23,Close:286.25,Volume:17270}, + {Date:1649855100000,Open:286.25,High:286.31,Low:286.21,Close:286.28,Volume:11596}, + {Date:1649855160000,Open:286.29,High:286.37,Low:286.06,Close:286.1,Volume:35632}, + {Date:1649855220000,Open:286.11,High:286.22,Low:286.05,Close:286.12,Volume:17587}, + {Date:1649855280000,Open:286.11,High:286.24,Low:286.1,Close:286.23,Volume:11695}, + {Date:1649855340000,Open:286.22,High:286.35,Low:286.2,Close:286.28,Volume:14107}, + {Date:1649855400000,Open:286.27,High:286.4,Low:286.23,Close:286.39,Volume:20065}, + {Date:1649855460000,Open:286.36,High:286.62,Low:286.36,Close:286.57,Volume:42629}, + {Date:1649855520000,Open:286.58,High:286.74,Low:286.57,Close:286.67,Volume:25175}, + {Date:1649855580000,Open:286.66,High:286.66,Low:286.52,Close:286.55,Volume:16457}, + {Date:1649855640000,Open:286.55,High:286.55,Low:286.34,Close:286.39,Volume:17989}, + {Date:1649855700000,Open:286.38,High:286.45,Low:286.32,Close:286.42,Volume:16288}, + {Date:1649855760000,Open:286.41,High:286.43,Low:286.35,Close:286.43,Volume:12470}, + {Date:1649855820000,Open:286.44,High:286.48,Low:286.33,Close:286.4,Volume:15141}, + {Date:1649855880000,Open:286.43,High:286.56,Low:286.41,Close:286.52,Volume:21990}, + {Date:1649855940000,Open:286.53,High:286.54,Low:286.38,Close:286.43,Volume:16585}, + {Date:1649856000000,Open:286.41,High:286.58,Low:286.37,Close:286.55,Volume:19651}, + {Date:1649856060000,Open:286.54,High:286.65,Low:286.52,Close:286.61,Volume:12811}, + {Date:1649856120000,Open:286.58,High:286.65,Low:286.57,Close:286.62,Volume:11652}, + {Date:1649856180000,Open:286.62,High:286.79,Low:286.62,Close:286.79,Volume:20925}, + {Date:1649856240000,Open:286.8,High:286.86,Low:286.59,Close:286.63,Volume:22225}, + {Date:1649856300000,Open:286.61,High:286.62,Low:286.31,Close:286.33,Volume:30324}, + {Date:1649856360000,Open:286.32,High:286.44,Low:286.27,Close:286.33,Volume:29903}, + {Date:1649856420000,Open:286.33,High:286.44,Low:286.28,Close:286.39,Volume:23032}, + {Date:1649856480000,Open:286.41,High:286.5,Low:286.33,Close:286.4,Volume:30054}, + {Date:1649856540000,Open:286.43,High:286.58,Low:286.43,Close:286.54,Volume:16300}, + {Date:1649856600000,Open:286.56,High:286.58,Low:286.35,Close:286.35,Volume:16773}, + {Date:1649856660000,Open:286.33,High:286.33,Low:286.26,Close:286.32,Volume:17825}, + {Date:1649856720000,Open:286.29,High:286.44,Low:286.28,Close:286.34,Volume:11774}, + {Date:1649856780000,Open:286.34,High:286.36,Low:286.15,Close:286.22,Volume:21540}, + {Date:1649856840000,Open:286.21,High:286.26,Low:286.11,Close:286.13,Volume:34196}, + {Date:1649856900000,Open:286.14,High:286.17,Low:286.08,Close:286.11,Volume:11905}, + {Date:1649856960000,Open:286.08,High:286.09,Low:285.93,Close:286.02,Volume:57100}, + {Date:1649857020000,Open:286.01,High:286.03,Low:285.83,Close:285.93,Volume:24832}, + {Date:1649857080000,Open:285.94,High:286,Low:285.94,Close:285.99,Volume:9228}, + {Date:1649857140000,Open:285.97,High:286.1,Low:285.95,Close:286.08,Volume:13612}, + {Date:1649857200000,Open:286.08,High:286.14,Low:286,Close:286.06,Volume:14908}, + {Date:1649857260000,Open:286.05,High:286.05,Low:285.92,Close:286.04,Volume:13503}, + {Date:1649857320000,Open:286.03,High:286.07,Low:285.89,Close:285.92,Volume:25104}, + {Date:1649857380000,Open:285.95,High:285.96,Low:285.85,Close:285.92,Volume:11515}, + {Date:1649857440000,Open:285.94,High:286.05,Low:285.93,Close:285.94,Volume:14407}, + {Date:1649857500000,Open:285.93,High:286.03,Low:285.92,Close:286.03,Volume:29697}, + {Date:1649857560000,Open:286.04,High:286.14,Low:285.95,Close:285.99,Volume:14550}, + {Date:1649857620000,Open:285.99,High:285.99,Low:285.75,Close:285.75,Volume:42672}, + {Date:1649857680000,Open:285.73,High:285.76,Low:285.58,Close:285.68,Volume:30775}, + {Date:1649857740000,Open:285.69,High:285.81,Low:285.68,Close:285.8,Volume:15785}, + {Date:1649857800000,Open:285.8,High:285.8,Low:285.62,Close:285.67,Volume:16283}, + {Date:1649857860000,Open:285.66,High:285.67,Low:285.56,Close:285.58,Volume:20315}, + {Date:1649857920000,Open:285.57,High:285.57,Low:285.36,Close:285.43,Volume:23877}, + {Date:1649857980000,Open:285.45,High:285.47,Low:285.28,Close:285.34,Volume:36273}, + {Date:1649858040000,Open:285.33,High:285.48,Low:285.28,Close:285.46,Volume:26077}, + {Date:1649858100000,Open:285.46,High:285.6,Low:285.46,Close:285.5,Volume:20545}, + {Date:1649858160000,Open:285.52,High:285.6,Low:285.45,Close:285.6,Volume:30858}, + {Date:1649858220000,Open:285.62,High:285.69,Low:285.6,Close:285.66,Volume:13738}, + {Date:1649858280000,Open:285.68,High:285.8,Low:285.68,Close:285.71,Volume:22668}, + {Date:1649858340000,Open:285.7,High:286.01,Low:285.69,Close:285.94,Volume:32283}, + {Date:1649858400000,Open:285.94,High:286,Low:285.86,Close:285.9,Volume:21954}, + {Date:1649858460000,Open:285.9,High:285.98,Low:285.84,Close:285.87,Volume:18435}, + {Date:1649858520000,Open:285.92,High:286,Low:285.87,Close:285.91,Volume:17877}, + {Date:1649858580000,Open:285.91,High:286.11,Low:285.9,Close:285.93,Volume:28928}, + {Date:1649858640000,Open:285.93,High:286.1,Low:285.86,Close:286.06,Volume:30313}, + {Date:1649858700000,Open:286.05,High:286.12,Low:285.95,Close:286.06,Volume:17560}, + {Date:1649858760000,Open:286.07,High:286.28,Low:286.06,Close:286.26,Volume:26634}, + {Date:1649858820000,Open:286.26,High:286.34,Low:286.21,Close:286.21,Volume:21552}, + {Date:1649858880000,Open:286.21,High:286.36,Low:286.19,Close:286.33,Volume:16173}, + {Date:1649858940000,Open:286.34,High:286.41,Low:286.27,Close:286.29,Volume:10113}, + {Date:1649859000000,Open:286.28,High:286.28,Low:286.1,Close:286.16,Volume:23948}, + {Date:1649859060000,Open:286.15,High:286.15,Low:286.03,Close:286.08,Volume:25395}, + {Date:1649859120000,Open:286.05,High:286.05,Low:285.78,Close:285.83,Volume:30288}, + {Date:1649859180000,Open:285.84,High:286.09,Low:285.79,Close:286.06,Volume:19991}, + {Date:1649859240000,Open:286.06,High:286.09,Low:285.98,Close:286,Volume:16041}, + {Date:1649859300000,Open:286,High:286.1,Low:285.95,Close:286.1,Volume:13064}, + {Date:1649859360000,Open:286.06,High:286.1,Low:286.02,Close:286.05,Volume:8628}, + {Date:1649859420000,Open:286.06,High:286.1,Low:285.99,Close:286.04,Volume:17819}, + {Date:1649859480000,Open:286.04,High:286.09,Low:285.98,Close:286.06,Volume:16794}, + {Date:1649859540000,Open:286.06,High:286.16,Low:286.03,Close:286.12,Volume:18364}, + {Date:1649859600000,Open:286.1,High:286.23,Low:286.1,Close:286.13,Volume:14573}, + {Date:1649859660000,Open:286.13,High:286.37,Low:286.11,Close:286.26,Volume:29790}, + {Date:1649859720000,Open:286.27,High:286.32,Low:286.21,Close:286.31,Volume:15409}, + {Date:1649859780000,Open:286.31,High:286.31,Low:286.09,Close:286.1,Volume:10858}, + {Date:1649859840000,Open:286.12,High:286.26,Low:286.12,Close:286.21,Volume:16660}, + {Date:1649859900000,Open:286.21,High:286.26,Low:286.01,Close:286.19,Volume:38241}, + {Date:1649859960000,Open:286.18,High:286.3,Low:286.14,Close:286.23,Volume:19257}, + {Date:1649860020000,Open:286.21,High:286.34,Low:286.18,Close:286.32,Volume:17021}, + {Date:1649860080000,Open:286.33,High:286.44,Low:286.33,Close:286.44,Volume:14404}, + {Date:1649860140000,Open:286.44,High:286.44,Low:286.33,Close:286.36,Volume:20730}, + {Date:1649860200000,Open:286.36,High:286.4,Low:286.3,Close:286.4,Volume:20346}, + {Date:1649860260000,Open:286.41,High:286.43,Low:286.15,Close:286.19,Volume:23709}, + {Date:1649860320000,Open:286.19,High:286.33,Low:286.19,Close:286.3,Volume:12125}, + {Date:1649860380000,Open:286.33,High:286.37,Low:286.27,Close:286.27,Volume:22493}, + {Date:1649860440000,Open:286.28,High:286.4,Low:286.27,Close:286.39,Volume:18132}, + {Date:1649860500000,Open:286.38,High:286.53,Low:286.35,Close:286.41,Volume:37205}, + {Date:1649860560000,Open:286.4,High:286.63,Low:286.38,Close:286.59,Volume:27489}, + {Date:1649860620000,Open:286.59,High:286.76,Low:286.58,Close:286.73,Volume:33522}, + {Date:1649860680000,Open:286.73,High:286.84,Low:286.71,Close:286.82,Volume:27767}, + {Date:1649860740000,Open:286.81,High:286.86,Low:286.66,Close:286.74,Volume:28545}, + {Date:1649860800000,Open:286.74,High:286.85,Low:286.71,Close:286.84,Volume:12483}, + {Date:1649860860000,Open:286.84,High:286.92,Low:286.83,Close:286.92,Volume:16485}, + {Date:1649860920000,Open:286.92,High:286.97,Low:286.81,Close:286.87,Volume:27154}, + {Date:1649860980000,Open:286.89,High:286.92,Low:286.86,Close:286.89,Volume:14502}, + {Date:1649861040000,Open:286.92,High:287.03,Low:286.87,Close:286.95,Volume:29184}, + {Date:1649861100000,Open:286.95,High:287,Low:286.87,Close:286.92,Volume:29174}, + {Date:1649861160000,Open:286.94,High:287,Low:286.81,Close:286.81,Volume:38363}, + {Date:1649861220000,Open:286.87,High:287.1,Low:286.87,Close:287.05,Volume:23032}, + {Date:1649861280000,Open:287.07,High:287.28,Low:287.05,Close:287.21,Volume:39755}, + {Date:1649861340000,Open:287.21,High:287.26,Low:287.15,Close:287.21,Volume:35864}, + {Date:1649861400000,Open:287.21,High:287.34,Low:287.05,Close:287.07,Volume:44299}, + {Date:1649861460000,Open:287.06,High:287.2,Low:287.03,Close:287.12,Volume:19374}, + {Date:1649861520000,Open:287.11,High:287.2,Low:287.06,Close:287.1,Volume:22775}, + {Date:1649861580000,Open:287.09,High:287.22,Low:287.07,Close:287.16,Volume:11901}, + {Date:1649861640000,Open:287.17,High:287.22,Low:287.05,Close:287.07,Volume:20224}, + {Date:1649861700000,Open:287.07,High:287.13,Low:287.03,Close:287.08,Volume:17358}, + {Date:1649861760000,Open:287.11,High:287.18,Low:287.08,Close:287.18,Volume:24833}, + {Date:1649861820000,Open:287.18,High:287.41,Low:287.18,Close:287.32,Volume:55834}, + {Date:1649861880000,Open:287.33,High:287.42,Low:287.3,Close:287.39,Volume:27115}, + {Date:1649861940000,Open:287.38,High:287.4,Low:287.2,Close:287.22,Volume:22168}, + {Date:1649862000000,Open:287.23,High:287.34,Low:287.05,Close:287.06,Volume:38061}, + {Date:1649862060000,Open:287.07,High:287.07,Low:286.86,Close:286.9,Volume:32873}, + {Date:1649862120000,Open:286.91,High:286.98,Low:286.77,Close:286.94,Volume:29357}, + {Date:1649862180000,Open:286.94,High:287,Low:286.77,Close:286.82,Volume:39595}, + {Date:1649862240000,Open:286.82,High:286.91,Low:286.78,Close:286.91,Volume:14471}, + {Date:1649862300000,Open:286.9,High:287.3,Low:286.9,Close:287.28,Volume:30883}, + {Date:1649862360000,Open:287.27,High:287.42,Low:287.22,Close:287.38,Volume:32260}, + {Date:1649862420000,Open:287.39,High:287.58,Low:287.37,Close:287.44,Volume:51364}, + {Date:1649862480000,Open:287.44,High:287.72,Low:287.43,Close:287.51,Volume:37347}, + {Date:1649862540000,Open:287.53,High:287.77,Low:287.51,Close:287.67,Volume:38998}, + {Date:1649862600000,Open:287.7,High:287.79,Low:287.64,Close:287.76,Volume:31985}, + {Date:1649862660000,Open:287.75,High:287.77,Low:287.58,Close:287.74,Volume:29039}, + {Date:1649862720000,Open:287.73,High:287.79,Low:287.65,Close:287.78,Volume:33026}, + {Date:1649862780000,Open:287.8,High:287.87,Low:287.76,Close:287.81,Volume:27689}, + {Date:1649862840000,Open:287.83,High:287.92,Low:287.8,Close:287.82,Volume:28882}, + {Date:1649862900000,Open:287.81,High:287.97,Low:287.8,Close:287.95,Volume:29592}, + {Date:1649862960000,Open:287.96,High:288.04,Low:287.92,Close:287.94,Volume:55121}, + {Date:1649863020000,Open:287.95,High:288.09,Low:287.93,Close:288.07,Volume:27560}, + {Date:1649863080000,Open:288.07,High:288.12,Low:287.99,Close:288.07,Volume:39048}, + {Date:1649863140000,Open:288.06,High:288.16,Low:288.01,Close:288.04,Volume:37496}, + {Date:1649863200000,Open:288.02,High:288.05,Low:287.76,Close:287.81,Volume:47843}, + {Date:1649863260000,Open:287.81,High:287.85,Low:287.67,Close:287.71,Volume:55392}, + {Date:1649863320000,Open:287.7,High:287.77,Low:287.68,Close:287.74,Volume:32702}, + {Date:1649863380000,Open:287.74,High:287.82,Low:287.72,Close:287.82,Volume:42327}, + {Date:1649863440000,Open:287.82,High:287.93,Low:287.81,Close:287.91,Volume:35473}, + {Date:1649863500000,Open:287.92,High:288.01,Low:287.89,Close:287.95,Volume:40552}, + {Date:1649863560000,Open:287.95,High:288.06,Low:287.94,Close:287.97,Volume:31570}, + {Date:1649863620000,Open:287.97,High:287.99,Low:287.76,Close:287.88,Volume:39974}, + {Date:1649863680000,Open:287.88,High:288.15,Low:287.87,Close:288.14,Volume:34060}, + {Date:1649863740000,Open:288.11,High:288.11,Low:288.04,Close:288.07,Volume:36172}, + {Date:1649863800000,Open:288.06,High:288.1,Low:287.91,Close:288,Volume:43323}, + {Date:1649863860000,Open:288,High:288.18,Low:287.97,Close:288.17,Volume:36531}, + {Date:1649863920000,Open:288.17,High:288.4,Low:288.14,Close:288.39,Volume:69299}, + {Date:1649863980000,Open:288.39,High:288.5,Low:288.32,Close:288.48,Volume:72362}, + {Date:1649864040000,Open:288.48,High:288.58,Low:288.41,Close:288.44,Volume:48394}, + {Date:1649864100000,Open:288.45,High:288.56,Low:288.35,Close:288.54,Volume:55393}, + {Date:1649864160000,Open:288.52,High:288.55,Low:288.11,Close:288.16,Volume:73083}, + {Date:1649864220000,Open:288.14,High:288.48,Low:288.14,Close:288.46,Volume:45926}, + {Date:1649864280000,Open:288.46,High:288.54,Low:288.36,Close:288.4,Volume:44675}, + {Date:1649864340000,Open:288.39,High:288.48,Low:288.32,Close:288.42,Volume:39451}, + {Date:1649864400000,Open:288.41,High:288.44,Low:288.31,Close:288.35,Volume:46241}, + {Date:1649864460000,Open:288.33,High:288.35,Low:288.18,Close:288.35,Volume:53960}, + {Date:1649864520000,Open:288.35,High:288.38,Low:288.18,Close:288.23,Volume:55907}, + {Date:1649864580000,Open:288.23,High:288.32,Low:288.12,Close:288.15,Volume:50229}, + {Date:1649864640000,Open:288.16,High:288.18,Low:288.06,Close:288.15,Volume:66863}, + {Date:1649864700000,Open:288.14,High:288.32,Low:288.09,Close:288.2,Volume:72523}, + {Date:1649864760000,Open:288.2,High:288.39,Low:288.19,Close:288.39,Volume:62308}, + {Date:1649864820000,Open:288.38,High:288.39,Low:288.19,Close:288.3,Volume:71194}, + {Date:1649864880000,Open:288.29,High:288.32,Low:287.99,Close:288.05,Volume:72909}, + {Date:1649864940000,Open:288.04,High:288.12,Low:287.87,Close:288.06,Volume:79361}, + {Date:1649865000000,Open:288.04,High:288.24,Low:287.65,Close:287.87,Volume:95362}, + {Date:1649865060000,Open:287.86,High:287.95,Low:287.73,Close:287.8,Volume:57193}, + {Date:1649865120000,Open:287.79,High:287.93,Low:287.58,Close:287.92,Volume:76699}, + {Date:1649865180000,Open:287.89,High:287.92,Low:287.61,Close:287.67,Volume:76323}, + {Date:1649865240000,Open:287.68,High:288.35,Low:287.47,Close:287.7,Volume:92112}, + {Date:1649865300000,Open:287.71,High:287.81,Low:287.57,Close:287.69,Volume:76299}, + {Date:1649865360000,Open:287.68,High:287.83,Low:287.56,Close:287.81,Volume:71957}, + {Date:1649865420000,Open:287.81,High:287.83,Low:287.64,Close:287.69,Volume:52673}, + {Date:1649865480000,Open:287.69,High:287.7,Low:287.57,Close:287.6,Volume:71778}, + {Date:1649865540000,Open:287.6,High:287.84,Low:287.3,Close:287.6,Volume:90524} +] +// set data to all series +valueSeries.data.setAll(data); +volumeSeries.data.setAll(data); +sbSeries.data.setAll(data); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-live/README.md b/src/main/resources/static/js/amcharts5/examples/stock-chart-live/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-live/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-live/index.css b/src/main/resources/static/js/amcharts5/examples/stock-chart-live/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-live/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-live/index.html b/src/main/resources/static/js/amcharts5/examples/stock-chart-live/index.html new file mode 100644 index 00000000..ff80bdd0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-live/index.html @@ -0,0 +1,17 @@ + + + + + amCharts 5 Example - stock-chart-live + + + +
+
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-live/index.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-live/index.js new file mode 100644 index 00000000..127ec255 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-live/index.js @@ -0,0 +1,359 @@ +// Create root element +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([am5themes_Animated.new(root)]); + +// Create a stock chart +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Instantiating_the_chart +var stockChart = root.container.children.push( + am5stock.StockChart.new(root, {}) +); + +// Set global number format +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/ +root.numberFormatter.set("numberFormat", "#,###.00"); + +// Create a main stock panel (chart) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Adding_panels +var mainPanel = stockChart.panels.push( + am5stock.StockPanel.new(root, { + wheelY: "zoomX", + panX: true, + panY: true + }) +); + +// Create value axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var valueAxis = mainPanel.yAxes.push( + am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, { + pan: "zoom" + }), + extraMin: 0.1, // adds some space for for main series + tooltip: am5.Tooltip.new(root, {}), + numberFormat: "#,###.00", + extraTooltipPrecision: 2 + }) +); + +var dateAxis = mainPanel.xAxes.push( + am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "minute", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) + }) +); + +// add range which will show current value +var currentValueDataItem = valueAxis.createAxisRange(valueAxis.makeDataItem({ value: 0 })); +var currentLabel = currentValueDataItem.get("label"); +if (currentLabel) { + currentLabel.setAll({ + fill: am5.color(0xffffff), + background: am5.Rectangle.new(root, { fill: am5.color(0x000000) }) + }) +} + +var currentGrid = currentValueDataItem.get("grid"); +if (currentGrid) { + currentGrid.setAll({ strokeOpacity: 0.5, strokeDasharray: [2, 5] }); +} + + +// Add series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var valueSeries = mainPanel.series.push( + am5xy.CandlestickSeries.new(root, { + name: "AMCH", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Close", + highValueYField: "High", + lowValueYField: "Low", + openValueYField: "Open", + calculateAggregates: true, + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: + "open: [bold]{openValueY}[/] high: [bold]{highValueY}[/] low: [bold]{lowValueY}[/] close: [bold]{valueY}[/]", + legendRangeValueText: "" + }) +); + +// Set main value series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("stockSeries", valueSeries); + +// Add a stock legend +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/stock-legend/ +var valueLegend = mainPanel.plotContainer.children.push( + am5stock.StockLegend.new(root, { + stockChart: stockChart + }) +); + +// Set main series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +valueLegend.data.setAll([valueSeries]); + +// Add cursor(s) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +mainPanel.set( + "cursor", + am5xy.XYCursor.new(root, { + yAxis: valueAxis, + xAxis: dateAxis, + snapToSeries: [valueSeries], + snapToSeriesBy: "y!" + }) +); + +// Add scrollbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = mainPanel.set( + "scrollbarX", + am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 + }) +); +stockChart.toolsContainer.children.push(scrollbar); + +var sbDateAxis = scrollbar.chart.xAxes.push( + am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "minute", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, {}) + }) +); + +var sbValueAxis = scrollbar.chart.yAxes.push( + am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) + }) +); + +var sbSeries = scrollbar.chart.series.push( + am5xy.LineSeries.new(root, { + valueYField: "Close", + valueXField: "Date", + xAxis: sbDateAxis, + yAxis: sbValueAxis + }) +); + +sbSeries.fills.template.setAll({ + visible: true, + fillOpacity: 0.3 +}); + +// Set up series type switcher +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/series-type-control/ +var seriesSwitcher = am5stock.SeriesTypeControl.new(root, { + stockChart: stockChart +}); + +seriesSwitcher.events.on("selected", function(ev) { + setSeriesType(ev.item.id); +}); + +function getNewSettings(series) { + var newSettings = []; + am5.array.each( + [ + "name", + "valueYField", + "highValueYField", + "lowValueYField", + "openValueYField", + "calculateAggregates", + "valueXField", + "xAxis", + "yAxis", + "legendValueText", + "legendRangeValueText", + "stroke", + "fill" + ], + function(setting) { + newSettings[setting] = series.get(setting); + } + ); + return newSettings; +} + +function setSeriesType(seriesType) { + // Get current series and its settings + var currentSeries = stockChart.get("stockSeries"); + var newSettings = getNewSettings(currentSeries); + + // Remove previous series + var data = currentSeries.data.values; + mainPanel.series.removeValue(currentSeries); + + // Create new series + var series; + switch (seriesType) { + case "line": + series = mainPanel.series.push(am5xy.LineSeries.new(root, newSettings)); + break; + case "candlestick": + case "procandlestick": + newSettings.clustered = false; + series = mainPanel.series.push( + am5xy.CandlestickSeries.new(root, newSettings) + ); + if (seriesType == "procandlestick") { + series.columns.template.get("themeTags").push("pro"); + } + break; + case "ohlc": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.OHLCSeries.new(root, newSettings)); + break; + } + + // Set new series as stockSeries + if (series) { + valueLegend.data.removeValue(currentSeries); + series.data.setAll(data); + stockChart.set("stockSeries", series); + var cursor = mainPanel.get("cursor"); + if (cursor) { + cursor.set("snapToSeries", [series]); + } + valueLegend.data.insertIndex(0, series); + } +} + +// Data generator +var firstDate = new Date(); +var lastDate; +var value = 1200; + +// data +function generateChartData() { + var chartData = []; + + for (var i = 0; i < 50; i++) { + var newDate = new Date(firstDate); + newDate.setMinutes(newDate.getMinutes() - i); + + value += Math.round((Math.random() < 0.49 ? 1 : -1) * Math.random() * 10); + + var open = value + Math.round(Math.random() * 16 - 8); + var low = Math.min(value, open) - Math.round(Math.random() * 5); + var high = Math.max(value, open) + Math.round(Math.random() * 5); + + chartData.unshift({ + Date: newDate.getTime(), + Close: value, + Open: open, + Low: low, + High: high + }); + + lastDate = newDate; + } + return chartData; +} + +var data = generateChartData(); + +// set data to all series +valueSeries.data.setAll(data); +sbSeries.data.setAll(data); + +// update data +var previousDate; + +setInterval(function() { + var date = Date.now(); + var lastDataObject = valueSeries.data.getIndex(valueSeries.data.length - 1); + if (lastDataObject) { + var previousDate = lastDataObject.Date; + var previousValue = lastDataObject.Close; + + value = am5.math.round(previousValue + (Math.random() < 0.5 ? 1 : -1) * Math.random() * 2, 2); + + var high = lastDataObject.High; + var low = lastDataObject.Low; + var open = lastDataObject.Open; + + if (am5.time.checkChange(date, previousDate, "minute")) { + open = value; + high = value; + low = value; + + var dObj1 = { + Date: date, + Close: value, + Open: value, + Low: value, + High: value + }; + + valueSeries.data.push(dObj1); + sbSeries.data.push(dObj1); + previousDate = date; + } else { + if (value > high) { + high = value; + } + + if (value < low) { + low = value; + } + + var dObj2 = { + Date: date, + Close: value, + Open: open, + Low: low, + High: high + }; + + valueSeries.data.setIndex(valueSeries.data.length - 1, dObj2); + sbSeries.data.setIndex(sbSeries.data.length - 1, dObj2); + } + // update current value + if (currentLabel) { + currentValueDataItem.animate({ key: "value", to: value, duration: 500, easing: am5.ease.out(am5.ease.cubic) }); + currentLabel.set("text", stockChart.getNumberFormatter().format(value)); + var bg = currentLabel.get("background"); + if (bg) { + if(value < open){ + bg.set("fill", root.interfaceColors.get("negative")); + } + else{ + bg.set("fill", root.interfaceColors.get("positive")); + } + } + } + } +}, 1000); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/README.md b/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/index.css b/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/index.html b/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/index.html new file mode 100644 index 00000000..62f0d703 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/index.html @@ -0,0 +1,17 @@ + + + + + amCharts 5 Example - stock-chart-volume-separate-panel + + + +
+
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/index.js b/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/index.js new file mode 100644 index 00000000..4131e477 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart-volume-separate-panel/index.js @@ -0,0 +1,590 @@ +// Create root element +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create a stock chart +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Instantiating_the_chart +var stockChart = root.container.children.push(am5stock.StockChart.new(root, { +})); + + +// Set global number format +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/ +root.numberFormatter.set("numberFormat", "#,###.00"); + + +// Create a main stock panel (chart) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Adding_panels +var mainPanel = stockChart.panels.push(am5stock.StockPanel.new(root, { + wheelY: "zoomX", + panX: true, + panY: false, + height: am5.percent(70) +})); + + +// Create value axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var valueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, { + pan: "zoom" + }), + extraMin: 0.1, // adds some space for for main series + tooltip: am5.Tooltip.new(root, {}), + numberFormat: "#,###.00", + extraTooltipPrecision: 2 +})); + +var dateAxis = mainPanel.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + + +// Add series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var valueSeries = mainPanel.series.push(am5xy.CandlestickSeries.new(root, { + name: "MSFT", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Close", + highValueYField: "High", + lowValueYField: "Low", + openValueYField: "Open", + calculateAggregates: true, + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "open: [bold]{openValueY}[/] high: [bold]{highValueY}[/] low: [bold]{lowValueY}[/] close: [bold]{valueY}[/]", + legendRangeValueText: "" +})); + + +// Set main value series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("stockSeries", valueSeries); + + +// Add a stock legend +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/stock-legend/ +var valueLegend = mainPanel.plotContainer.children.push(am5stock.StockLegend.new(root, { + stockChart: stockChart +})); + + +// Create a volume panel (chart) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Adding_panels +var volumePanel = stockChart.panels.push(am5stock.StockPanel.new(root, { + panX: true, + panY: true, + height: am5.percent(30), + paddingTop: 6 +})); + +// hide close button as we don't want this panel to be closed +volumePanel.panelControls.closeButton.set("forceHidden", true); + +var volumeDateAxis = volumePanel.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, { + forceHidden: true + }), + height: 0 +})); + +// we don't need it to be visible +volumeDateAxis.get("renderer").labels.template.set("forceHidden", true); + +// Create volume axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var volumeAxisRenderer = am5xy.AxisRendererY.new(root, {}); + +var volumeValueAxis = volumePanel.yAxes.push(am5xy.ValueAxis.new(root, { + numberFormat: "#.#a", + renderer: volumeAxisRenderer +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var volumeSeries = volumePanel.series.push(am5xy.ColumnSeries.new(root, { + name: "Volume", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Volume", + xAxis: volumeDateAxis, + yAxis: volumeValueAxis, + legendValueText: "[bold]{valueY.formatNumber('#,###.0a')}[/]" +})); + +volumeSeries.columns.template.setAll({ + strokeOpacity: 0, + fillOpacity: 0.5 +}); + +// color columns by stock rules +volumeSeries.columns.template.adapters.add("fill", function(fill, target) { + var dataItem = target.dataItem; + if (dataItem) { + return stockChart.getVolumeColor(dataItem); + } + return fill; +}) + +// Add a stock legend +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/stock-legend/ +var volumeLegend = volumePanel.plotContainer.children.push(am5stock.StockLegend.new(root, { + stockChart: stockChart +})); + + +// Set main series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("volumeSeries", volumeSeries); +valueLegend.data.setAll([valueSeries]); +volumeLegend.data.setAll([volumeSeries]); + + +// Add cursor(s) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +mainPanel.set("cursor", am5xy.XYCursor.new(root, { + yAxis: valueAxis, + xAxis: dateAxis, + snapToSeries: [valueSeries], + snapToSeriesBy: "y!" +})); + + +var volumeCursor = volumePanel.set("cursor", am5xy.XYCursor.new(root, { + yAxis: volumeValueAxis, + xAxis: volumeDateAxis, + snapToSeries: [volumeSeries], + snapToSeriesBy: "y!" +})); + +volumeCursor.lineY.set("forceHidden", true); + + +// Add scrollbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = mainPanel.set("scrollbarX", am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +})); +stockChart.toolsContainer.children.push(scrollbar); +// to move scrollbar to the bottom of the Stock chart, uncomment this line +//stockChart.children.moveValue(stockChart.toolsContainer, stockChart.children.length - 1); + +var sbDateAxis = scrollbar.chart.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, {}) +})); + +var sbValueAxis = scrollbar.chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + +var sbSeries = scrollbar.chart.series.push(am5xy.LineSeries.new(root, { + valueYField: "Close", + valueXField: "Date", + xAxis: sbDateAxis, + yAxis: sbValueAxis +})); + +sbSeries.fills.template.setAll({ + visible: true, + fillOpacity: 0.3 +}); + +// Set up series type switcher +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/series-type-control/ +var seriesSwitcher = am5stock.SeriesTypeControl.new(root, { + stockChart: stockChart +}); + +seriesSwitcher.events.on("selected", function(ev) { + setSeriesType(ev.item.id); +}); + +function getNewSettings(series) { + var newSettings = []; + am5.array.each(["name", "valueYField", "highValueYField", "lowValueYField", "openValueYField", "calculateAggregates", "valueXField", "xAxis", "yAxis", "legendValueText", "legendRangeValueText", "stroke", "fill"], function(setting) { + newSettings[setting] = series.get(setting); + }); + return newSettings; +} + +function setSeriesType(seriesType) { + // Get current series and its settings + var currentSeries = stockChart.get("stockSeries"); + var newSettings = getNewSettings(currentSeries); + + // Remove previous series + var data = currentSeries.data.values; + mainPanel.series.removeValue(currentSeries); + + // Create new series + var series; + switch (seriesType) { + case "line": + series = mainPanel.series.push(am5xy.LineSeries.new(root, newSettings)); + break; + case "candlestick": + case "procandlestick": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.CandlestickSeries.new(root, newSettings)); + if (seriesType == "procandlestick") { + series.columns.template.get("themeTags").push("pro"); + } + break; + case "ohlc": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.OHLCSeries.new(root, newSettings)); + break; + } + + // Set new series as stockSeries + if (series) { + valueLegend.data.removeValue(currentSeries); + series.data.setAll(data); + stockChart.set("stockSeries", series); + var cursor = mainPanel.get("cursor"); + if (cursor) { + cursor.set("snapToSeries", [series]); + } + valueLegend.data.insertIndex(0, series); + } +} + + +// Stock toolbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/ +var toolbar = am5stock.StockToolbar.new(root, { + container: document.getElementById("chartcontrols"), + stockChart: stockChart, + controls: [ + am5stock.IndicatorControl.new(root, { + stockChart: stockChart, + legend: valueLegend + }), + am5stock.DateRangeSelector.new(root, { + stockChart: stockChart + }), + am5stock.PeriodSelector.new(root, { + stockChart: stockChart + }), + seriesSwitcher, + am5stock.DrawingControl.new(root, { + stockChart: stockChart + }), + am5stock.ResetControl.new(root, { + stockChart: stockChart + }), + am5stock.SettingsControl.new(root, { + stockChart: stockChart + }) + ] +}) + +// data +var data = [ + { Date: 1617192000000, Open: 515.67, High: 528.13, Low: 515.44, Close: 521.66, Volume: 3503100 }, + { Date: 1617278400000, Open: 529.93, High: 540.5, Low: 527.03, Close: 539.42, Volume: 3938600 }, + { Date: 1617624000000, Open: 540.01, High: 542.85, Low: 529.23, Close: 540.67, Volume: 3355900 }, + { Date: 1617710400000, Open: 544.81, High: 554.17, Low: 543.3, Close: 544.53, Volume: 3474200 }, + { Date: 1617796800000, Open: 543.5, High: 549.64, Low: 541.45, Close: 546.99, Volume: 2151300 }, + { Date: 1617883200000, Open: 551.13, High: 556.9, Low: 547.57, Close: 554.58, Volume: 4309800 }, + { Date: 1617969600000, Open: 552.69, High: 556.9, Low: 547.11, Close: 555.31, Volume: 2894000 }, + { Date: 1618228800000, Open: 551.05, High: 557.98, Low: 549.58, Close: 552.78, Volume: 2944100 }, + { Date: 1618315200000, Open: 557, High: 559.75, Low: 550.3, Close: 553.73, Volume: 2720300 }, + { Date: 1618401600000, Open: 554.87, High: 554.87, Low: 538.53, Close: 540.02, Volume: 3740300 }, + { Date: 1618488000000, Open: 544.17, High: 553.49, Low: 542.66, Close: 549.22, Volume: 3139100 }, + { Date: 1618574400000, Open: 550.54, High: 551.98, Low: 539.51, Close: 546.54, Volume: 3209100 }, + { Date: 1618833600000, Open: 546.9, High: 556.44, Low: 545.53, Close: 554.44, Volume: 4288700 }, + { Date: 1618920000000, Open: 554.42, High: 563.56, Low: 546.3, Close: 549.57, Volume: 11257600 }, + { Date: 1619006400000, Open: 508, High: 515.46, Low: 503.6, Close: 508.9, Volume: 22897400 }, + { Date: 1619092800000, Open: 513.82, High: 513.96, Low: 500.55, Close: 508.78, Volume: 9061100 }, + { Date: 1619179200000, Open: 509.01, High: 509.7, Low: 500.7, Close: 505.55, Volume: 7307700 }, + { Date: 1619438400000, Open: 506.76, High: 510.48, Low: 503, Close: 510.3, Volume: 4388800 }, + { Date: 1619524800000, Open: 512.62, High: 512.99, Low: 504.58, Close: 505.55, Volume: 3761300 }, + { Date: 1619611200000, Open: 505.2, High: 508.4, Low: 503.34, Close: 506.52, Volume: 3193000 }, + { Date: 1619697600000, Open: 507.6, High: 509.29, Low: 499, Close: 509, Volume: 5127800 }, + { Date: 1619784000000, Open: 505, High: 514.55, Low: 505, Close: 513.47, Volume: 4413200 }, + { Date: 1620043200000, Open: 512.65, High: 518.95, Low: 505.2, Close: 509.11, Volume: 4091900 }, + { Date: 1620129600000, Open: 510.78, High: 511.63, Low: 496.79, Close: 503.18, Volume: 4349500 }, + { Date: 1620216000000, Open: 504.99, High: 507.78, Low: 494.63, Close: 496.08, Volume: 3129400 }, + { Date: 1620302400000, Open: 495.99, High: 499.55, Low: 491.37, Close: 499.55, Volume: 3783700 }, + { Date: 1620388800000, Open: 504.62, High: 508.55, Low: 501.12, Close: 503.84, Volume: 3132800 }, + { Date: 1620648000000, Open: 502, High: 503.15, Low: 486.11, Close: 486.69, Volume: 5131600 }, + { Date: 1620734400000, Open: 479.75, High: 497.99, Low: 478.63, Close: 495.08, Volume: 4401000 }, + { Date: 1620820800000, Open: 486.83, High: 493.54, Low: 482.7, Close: 484.98, Volume: 4121500 }, + { Date: 1620907200000, Open: 489.13, High: 490.78, Low: 482.71, Close: 486.66, Volume: 2712500 }, + { Date: 1620993600000, Open: 487.86, High: 494.85, Low: 486.59, Close: 493.37, Volume: 2882500 }, + { Date: 1621252800000, Open: 485.59, High: 492.71, Low: 482.81, Close: 488.94, Volume: 2705200 }, + { Date: 1621339200000, Open: 488.4, High: 493.48, Low: 486.19, Close: 486.28, Volume: 2350500 }, + { Date: 1621425600000, Open: 481.63, High: 488.57, Low: 478.54, Close: 487.7, Volume: 3349900 }, + { Date: 1621512000000, Open: 489.55, High: 502.7, Low: 488.98, Close: 501.67, Volume: 3721200 }, + { Date: 1621598400000, Open: 503.12, High: 505.4, Low: 497.26, Close: 497.89, Volume: 3322900 }, + { Date: 1621857600000, Open: 501.05, High: 504.25, Low: 499.51, Close: 502.9, Volume: 2412600 }, + { Date: 1621944000000, Open: 506, High: 506.37, Low: 499.22, Close: 501.34, Volume: 2699500 }, + { Date: 1622030400000, Open: 502.34, High: 504.14, Low: 500.5, Close: 502.36, Volume: 2465300 }, + { Date: 1622116800000, Open: 501.8, High: 505.1, Low: 498.54, Close: 503.86, Volume: 3253800 }, + { Date: 1622203200000, Open: 504.4, High: 511.76, Low: 502.53, Close: 502.81, Volume: 2910300 }, + { Date: 1622548800000, Open: 504.01, High: 505.41, Low: 497.74, Close: 499.08, Volume: 2482600 }, + { Date: 1622635200000, Open: 499.82, High: 503.22, Low: 495.82, Close: 499.24, Volume: 2269000 }, + { Date: 1622721600000, Open: 495.19, High: 496.66, Low: 487.25, Close: 489.43, Volume: 3887400 }, + { Date: 1622808000000, Open: 492, High: 501.86, Low: 490.95, Close: 494.74, Volume: 3160500 }, + { Date: 1623067200000, Open: 492.92, High: 496.7, Low: 490.55, Close: 494.66, Volume: 2791900 }, + { Date: 1623153600000, Open: 497, High: 498.82, Low: 489.37, Close: 492.39, Volume: 2374000 }, + { Date: 1623240000000, Open: 494.5, High: 496.09, Low: 484.65, Close: 485.81, Volume: 3055000 }, + { Date: 1623326400000, Open: 487.17, High: 490.21, Low: 482.14, Close: 487.27, Volume: 4382900 }, + { Date: 1623412800000, Open: 490, High: 491.41, Low: 487.78, Close: 488.77, Volume: 3124000 }, + { Date: 1623672000000, Open: 489.68, High: 503.5, Low: 486.91, Close: 499.89, Volume: 4400200 }, + { Date: 1623758400000, Open: 501.23, High: 501.23, Low: 490.4, Close: 491.9, Volume: 3104100 }, + { Date: 1623844800000, Open: 495, High: 496.46, Low: 486.28, Close: 492.41, Volume: 3533200 }, + { Date: 1623931200000, Open: 490.25, High: 501.8, Low: 490.15, Close: 498.34, Volume: 3198300 }, + { Date: 1624017600000, Open: 496.4, High: 504.49, Low: 495.24, Close: 500.77, Volume: 5197600 }, + { Date: 1624276800000, Open: 501.64, High: 502.05, Low: 492.28, Close: 497, Volume: 5277300 }, + { Date: 1624363200000, Open: 498.54, High: 513.55, Low: 495.8, Close: 508.82, Volume: 5809300 }, + { Date: 1624449600000, Open: 508.48, High: 516.63, Low: 508.2, Close: 512.74, Volume: 3944800 }, + { Date: 1624536000000, Open: 517.96, High: 520.96, Low: 514.4, Close: 518.06, Volume: 3361200 }, + { Date: 1624622400000, Open: 528.84, High: 533.06, Low: 525, Close: 527.07, Volume: 5299100 }, + { Date: 1624881600000, Open: 528.12, High: 533.94, Low: 524.56, Close: 533.03, Volume: 2820200 }, + { Date: 1624968000000, Open: 533.55, High: 536.13, Low: 528.57, Close: 533.5, Volume: 2314600 }, + { Date: 1625054400000, Open: 534.06, High: 534.38, Low: 526.82, Close: 528.21, Volume: 2773400 }, + { Date: 1625140800000, Open: 525.72, High: 537.04, Low: 525.72, Close: 533.54, Volume: 2805400 }, + { Date: 1625227200000, Open: 535.5, High: 538.54, Low: 529.39, Close: 533.98, Volume: 1975500 }, + { Date: 1625572800000, Open: 533, High: 542.86, Low: 533, Close: 541.64, Volume: 2775100 }, + { Date: 1625659200000, Open: 544.24, High: 544.64, Low: 531.66, Close: 535.96, Volume: 2722500 }, + { Date: 1625745600000, Open: 530.93, High: 535.5, Low: 529.09, Close: 530.76, Volume: 3269000 }, + { Date: 1625832000000, Open: 531, High: 538.26, Low: 528.58, Close: 535.98, Volume: 2777200 }, + { Date: 1626091200000, Open: 540.3, High: 540.65, Low: 532.92, Close: 537.31, Volume: 1780700 }, + { Date: 1626177600000, Open: 535.76, High: 545.33, Low: 535.76, Close: 540.68, Volume: 2751600 }, + { Date: 1626264000000, Open: 541.01, High: 554.1, Low: 541.01, Close: 547.95, Volume: 4659500 }, + { Date: 1626350400000, Open: 553.97, High: 557.54, Low: 538.2, Close: 542.95, Volume: 5713900 }, + { Date: 1626436800000, Open: 541.81, High: 544.06, Low: 527.05, Close: 530.31, Volume: 3442100 }, + { Date: 1626696000000, Open: 526.05, High: 534.91, Low: 522.24, Close: 532.28, Volume: 3885800 }, + { Date: 1626782400000, Open: 526.07, High: 536.64, Low: 520.3, Close: 531.05, Volume: 6930400 }, + { Date: 1626868800000, Open: 526.13, High: 530.99, Low: 505.61, Close: 513.63, Volume: 11906800 }, + { Date: 1626955200000, Open: 510.21, High: 513.68, Low: 507, Close: 511.77, Volume: 4328100 }, + { Date: 1627041600000, Open: 512.16, High: 517.41, Low: 504.66, Close: 515.41, Volume: 3820500 }, + { Date: 1627300800000, Open: 514.38, High: 521.13, Low: 509.01, Close: 516.49, Volume: 2254500 }, + { Date: 1627387200000, Open: 518.08, High: 521.95, Low: 512.05, Close: 518.91, Volume: 2759000 }, + { Date: 1627473600000, Open: 521.82, High: 524.47, Low: 516.98, Close: 519.3, Volume: 2390500 }, + { Date: 1627560000000, Open: 519.96, High: 520.78, Low: 513.79, Close: 514.25, Volume: 1736000 }, + { Date: 1627646400000, Open: 512.69, High: 519.79, Low: 510.96, Close: 517.57, Volume: 2537100 }, + { Date: 1627905600000, Open: 519, High: 519.85, Low: 510.51, Close: 515.15, Volume: 2096600 }, + { Date: 1627992000000, Open: 514.39, High: 515.63, Low: 505.37, Close: 510.82, Volume: 2579400 }, + { Date: 1628078400000, Open: 513, High: 517.98, Low: 510.37, Close: 517.35, Volume: 2039400 }, + { Date: 1628164800000, Open: 517.13, High: 525.41, Low: 514.02, Close: 524.89, Volume: 2556700 }, + { Date: 1628251200000, Open: 524, High: 526.84, Low: 519.39, Close: 520.55, Volume: 1919800 }, + { Date: 1628510400000, Open: 521.15, High: 522.67, Low: 517.99, Close: 519.97, Volume: 1367800 }, + { Date: 1628596800000, Open: 520, High: 520.79, Low: 512.97, Close: 515.84, Volume: 1960500 }, + { Date: 1628683200000, Open: 517, High: 519.57, Low: 509.77, Close: 512.4, Volume: 1673900 }, + { Date: 1628769600000, Open: 511.86, High: 513, Low: 507.2, Close: 510.72, Volume: 1685700 }, + { Date: 1628856000000, Open: 512.64, High: 521.44, Low: 511.51, Close: 515.92, Volume: 2177700 }, + { Date: 1629115200000, Open: 515.24, High: 523.38, Low: 512.3, Close: 517.92, Volume: 2032800 }, + { Date: 1629201600000, Open: 515.47, High: 520.79, Low: 514.2, Close: 518.91, Volume: 2309800 }, + { Date: 1629288000000, Open: 520, High: 526.38, Low: 518.65, Close: 521.87, Volume: 2582000 }, + { Date: 1629374400000, Open: 522.74, High: 548.39, Low: 521.87, Close: 543.71, Volume: 7497300 }, + { Date: 1629460800000, Open: 545.09, High: 551.39, Low: 539.1, Close: 546.88, Volume: 3776400 }, + { Date: 1629720000000, Open: 545.98, High: 555.55, Low: 543.74, Close: 553.33, Volume: 2602000 }, + { Date: 1629806400000, Open: 551.48, High: 555.31, Low: 549.27, Close: 553.41, Volume: 2109500 }, + { Date: 1629892800000, Open: 550.16, High: 552.84, Low: 545.45, Close: 547.58, Volume: 2065600 }, + { Date: 1629979200000, Open: 546.16, High: 552.6, Low: 545.9, Close: 550.12, Volume: 1595500 }, + { Date: 1630065600000, Open: 551.6, High: 564.17, Low: 549.25, Close: 558.92, Volume: 3252600 }, + { Date: 1630324800000, Open: 557.25, High: 567.16, Low: 556.45, Close: 566.18, Volume: 2434800 }, + { Date: 1630411200000, Open: 566.12, High: 569.48, Low: 561.61, Close: 569.19, Volume: 2431900 }, + { Date: 1630497600000, Open: 569, High: 591, Low: 569, Close: 582.07, Volume: 5626200 }, + { Date: 1630584000000, Open: 583.68, High: 598.76, Low: 583.68, Close: 588.55, Volume: 6179900 }, + { Date: 1630670400000, Open: 585.8, High: 591.88, Low: 583.14, Close: 590.53, Volume: 2681200 }, + { Date: 1631016000000, Open: 594.69, High: 613.85, Low: 593.99, Close: 606.71, Volume: 5821400 }, + { Date: 1631102400000, Open: 603.84, High: 615.6, Low: 595.71, Close: 606.05, Volume: 5424500 }, + { Date: 1631188800000, Open: 606.47, High: 609.44, Low: 596.55, Close: 597.54, Volume: 2954200 }, + { Date: 1631275200000, Open: 598.16, High: 609.45, Low: 593.67, Close: 598.72, Volume: 3950800 }, + { Date: 1631534400000, Open: 598.57, High: 598.57, Low: 582.78, Close: 589.29, Volume: 3062900 }, + { Date: 1631620800000, Open: 584.89, High: 587.28, Low: 575.56, Close: 577.76, Volume: 3457000 }, + { Date: 1631707200000, Open: 578.17, High: 584.62, Low: 575.37, Close: 582.87, Volume: 2755600 }, + { Date: 1631793600000, Open: 584.3, High: 587.48, Low: 577.72, Close: 586.5, Volume: 1832000 }, + { Date: 1631880000000, Open: 587.85, High: 590.28, Low: 580.85, Close: 589.35, Volume: 4145100 }, + { Date: 1632139200000, Open: 586.79, High: 591.53, Low: 568.08, Close: 575.43, Volume: 3732200 }, + { Date: 1632225600000, Open: 578.31, High: 581.88, Low: 569.37, Close: 573.14, Volume: 2250900 }, + { Date: 1632312000000, Open: 579.69, High: 595.65, Low: 579.69, Close: 590.65, Volume: 4021800 }, + { Date: 1632398400000, Open: 590.79, High: 599.32, Low: 589.13, Close: 593.26, Volume: 2526200 }, + { Date: 1632484800000, Open: 592.5, High: 592.98, Low: 583.64, Close: 592.39, Volume: 2126200 }, + { Date: 1632744000000, Open: 587.95, High: 593.58, Low: 576.93, Close: 592.64, Volume: 2504700 }, + { Date: 1632830400000, Open: 589, High: 599.54, Low: 580.16, Close: 583.85, Volume: 4431100 }, + { Date: 1632916800000, Open: 589.01, High: 609.88, Low: 588.01, Close: 599.06, Volume: 6221000 }, + { Date: 1633003200000, Open: 608.05, High: 619, Low: 608.05, Close: 610.34, Volume: 6612600 }, + { Date: 1633089600000, Open: 604.24, High: 614.99, Low: 597.51, Close: 613.15, Volume: 4090800 }, + { Date: 1633348800000, Open: 613.39, High: 626.13, Low: 594.68, Close: 603.35, Volume: 4995900 }, + { Date: 1633435200000, Open: 606.94, High: 640.39, Low: 606.89, Close: 634.81, Volume: 9534300 }, + { Date: 1633521600000, Open: 628.18, High: 639.87, Low: 626.36, Close: 639.1, Volume: 4580400 }, + { Date: 1633608000000, Open: 642.23, High: 646.84, Low: 630.45, Close: 631.85, Volume: 3556900 }, + { Date: 1633694400000, Open: 634.17, High: 643.8, Low: 630.86, Close: 632.66, Volume: 3272100 }, + { Date: 1633953600000, Open: 633.2, High: 639.42, Low: 626.78, Close: 627.04, Volume: 2862500 }, + { Date: 1634040000000, Open: 633.02, High: 637.66, Low: 621.99, Close: 624.94, Volume: 3227300 }, + { Date: 1634126400000, Open: 632.18, High: 632.18, Low: 622.1, Close: 629.76, Volume: 2420300 }, + { Date: 1634212800000, Open: 632.23, High: 636.88, Low: 626.79, Close: 633.8, Volume: 2671700 }, + { Date: 1634299200000, Open: 638, High: 639.42, Low: 625.16, Close: 628.29, Volume: 4116900 }, + { Date: 1634558400000, Open: 632.1, High: 638.41, Low: 620.59, Close: 637.97, Volume: 4669100 }, + { Date: 1634644800000, Open: 636.97, High: 641, Low: 632.3, Close: 639, Volume: 7633100 }, + { Date: 1634731200000, Open: 625.57, High: 637.4, Low: 617.15, Close: 625.14, Volume: 10622000 }, + { Date: 1634817600000, Open: 628.89, High: 654.01, Low: 628.65, Close: 653.16, Volume: 8437100 }, + { Date: 1634904000000, Open: 651.81, High: 665.46, Low: 651.81, Close: 664.78, Volume: 6186000 }, + { Date: 1635163200000, Open: 663.74, High: 675.88, Low: 657.07, Close: 671.66, Volume: 3833500 }, + { Date: 1635249600000, Open: 673.76, High: 676.49, Low: 662.77, Close: 668.52, Volume: 2904800 }, + { Date: 1635336000000, Open: 669, High: 671.41, Low: 661.85, Close: 662.92, Volume: 2276900 }, + { Date: 1635422400000, Open: 670.95, High: 676.8, Low: 668.03, Close: 674.05, Volume: 2859400 }, + { Date: 1635508800000, Open: 673.06, High: 690.97, Low: 671.24, Close: 690.31, Volume: 3825300 }, + { Date: 1635768000000, Open: 689.06, High: 689.97, Low: 676.54, Close: 681.17, Volume: 3110900 }, + { Date: 1635854400000, Open: 683.11, High: 687.68, Low: 673.82, Close: 677.72, Volume: 3888600 }, + { Date: 1635940800000, Open: 677.27, High: 689.39, Low: 677.27, Close: 688.29, Volume: 2334900 }, + { Date: 1636027200000, Open: 685.89, High: 685.94, Low: 665.5, Close: 668.4, Volume: 4865000 }, + { Date: 1636113600000, Open: 663.97, High: 665.64, Low: 645.01, Close: 645.72, Volume: 5283500 }, + { Date: 1636372800000, Open: 650.29, High: 656, Low: 643.79, Close: 651.45, Volume: 2887500 }, + { Date: 1636459200000, Open: 653.7, High: 660.5, Low: 650.52, Close: 655.99, Volume: 2415600 }, + { Date: 1636545600000, Open: 653.01, High: 660.33, Low: 642.11, Close: 646.91, Volume: 2405800 }, + { Date: 1636632000000, Open: 650.24, High: 665.82, Low: 649.71, Close: 657.58, Volume: 2868300 }, + { Date: 1636718400000, Open: 660.01, High: 683.34, Low: 653.82, Close: 682.61, Volume: 4198400 }, + { Date: 1636977600000, Open: 681.24, High: 685.26, Low: 671.49, Close: 679.33, Volume: 2872200 }, + { Date: 1637064000000, Open: 678.27, High: 688.36, Low: 676.9, Close: 687.4, Volume: 2077400 }, + { Date: 1637150400000, Open: 690, High: 700.99, Low: 686.09, Close: 691.69, Volume: 2732800 }, + { Date: 1637236800000, Open: 691.61, High: 691.74, Low: 679.74, Close: 682.02, Volume: 2012900 }, + { Date: 1637323200000, Open: 692.35, High: 694.16, Low: 675, Close: 678.8, Volume: 2613700 }, + { Date: 1637582400000, Open: 676.02, High: 679.48, Low: 656.47, Close: 659.2, Volume: 2764400 }, + { Date: 1637668800000, Open: 658.18, High: 666.43, Low: 646.05, Close: 654.06, Volume: 2320200 }, + { Date: 1637755200000, Open: 658.01, High: 661.44, Low: 651.1, Close: 658.29, Volume: 1867300 }, + { Date: 1637928000000, Open: 675, High: 676.41, Low: 660.67, Close: 665.64, Volume: 2872500 }, + { Date: 1638187200000, Open: 663.2, High: 667.99, Low: 658.29, Close: 663.84, Volume: 2529400 }, + { Date: 1638273600000, Open: 668.2, High: 675.38, Low: 640.01, Close: 641.9, Volume: 5608900 }, + { Date: 1638360000000, Open: 649.48, High: 654.52, Low: 617.07, Close: 617.77, Volume: 3882800 }, + { Date: 1638446400000, Open: 617.1, High: 625.36, Low: 612.88, Close: 616.47, Volume: 3331100 }, + { Date: 1638532800000, Open: 622.75, High: 625.5, Low: 594, Close: 602.13, Volume: 4829300 }, + { Date: 1638792000000, Open: 606.01, High: 617.29, Low: 601, Close: 612.69, Volume: 3075700 }, + { Date: 1638878400000, Open: 619.83, High: 628.89, Low: 611.4, Close: 625.58, Volume: 3125200 }, + { Date: 1638964800000, Open: 630, High: 632.46, Low: 623.2, Close: 628.08, Volume: 2220300 }, + { Date: 1639051200000, Open: 627.58, High: 630.24, Low: 610.44, Close: 611, Volume: 2376300 }, + { Date: 1639137600000, Open: 616.78, High: 617.74, Low: 605.88, Close: 611.66, Volume: 2748800 }, + { Date: 1639396800000, Open: 612, High: 612.64, Low: 599.52, Close: 604.56, Volume: 2517900 }, + { Date: 1639483200000, Open: 598.71, High: 602.29, Low: 588.13, Close: 597.99, Volume: 2984500 }, + { Date: 1639569600000, Open: 598.18, High: 605.69, Low: 584.51, Close: 605.04, Volume: 2866200 }, + { Date: 1639656000000, Open: 597.09, High: 602.83, Low: 588, Close: 591.06, Volume: 3143200 }, + { Date: 1639742400000, Open: 591.61, High: 593.25, Low: 581.74, Close: 586.73, Volume: 4386900 }, + { Date: 1640001600000, Open: 586.43, High: 602.88, Low: 584.26, Close: 593.74, Volume: 3358400 }, + { Date: 1640088000000, Open: 597.54, High: 607.82, Low: 593.86, Close: 604.92, Volume: 2319400 }, + { Date: 1640174400000, Open: 603.36, High: 614.82, Low: 602.63, Close: 614.24, Volume: 2335700 }, + { Date: 1640260800000, Open: 616.4, High: 616.88, Low: 607.57, Close: 614.09, Volume: 1621100 }, + { Date: 1640606400000, Open: 615, High: 615, Low: 609.25, Close: 613.12, Volume: 2061500 }, + { Date: 1640692800000, Open: 614.95, High: 618.41, Low: 609.69, Close: 610.71, Volume: 1882800 }, + { Date: 1640779200000, Open: 610.71, High: 613.98, Low: 604.68, Close: 610.54, Volume: 1287200 }, + { Date: 1640865600000, Open: 612.99, High: 620.61, Low: 611.24, Close: 612.09, Volume: 1625100 }, + { Date: 1640952000000, Open: 610.01, High: 614.08, Low: 602.05, Close: 602.44, Volume: 1995900 }, + { Date: 1641211200000, Open: 605.61, High: 609.99, Low: 590.56, Close: 597.37, Volume: 3067500 }, + { Date: 1641297600000, Open: 599.91, High: 600.41, Low: 581.6, Close: 591.15, Volume: 4393100 }, + { Date: 1641384000000, Open: 592, High: 592.84, Low: 566.88, Close: 567.52, Volume: 4148700 }, + { Date: 1641470400000, Open: 554.34, High: 563.36, Low: 542.01, Close: 553.29, Volume: 5711800 }, + { Date: 1641556800000, Open: 549.46, High: 553.43, Low: 538.22, Close: 541.06, Volume: 3382900 }, + { Date: 1641816000000, Open: 538.49, High: 543.69, Low: 526.32, Close: 539.85, Volume: 4486100 }, + { Date: 1641902400000, Open: 536.99, High: 543.91, Low: 530.07, Close: 540.84, Volume: 3077800 }, + { Date: 1641988800000, Open: 544.27, High: 544.27, Low: 532.02, Close: 537.22, Volume: 3787400 }, + { Date: 1642075200000, Open: 537.06, High: 540.79, Low: 518.26, Close: 519.2, Volume: 4475100 }, + { Date: 1642161600000, Open: 517.6, High: 538.37, Low: 511.88, Close: 525.69, Volume: 7861100 }, + { Date: 1642507200000, Open: 520.08, High: 521.75, Low: 508.68, Close: 510.8, Volume: 4839100 }, + { Date: 1642593600000, Open: 515, High: 523.21, Low: 510.51, Close: 515.86, Volume: 4353500 }, + { Date: 1642680000000, Open: 517.75, High: 526.64, Low: 506.93, Close: 508.25, Volume: 12659000 }, + { Date: 1642766400000, Open: 400.43, High: 409.15, Low: 379.99, Close: 397.5, Volume: 58904300 }, + { Date: 1643025600000, Open: 383.91, High: 387.26, Low: 351.46, Close: 387.15, Volume: 32346000 }, + { Date: 1643112000000, Open: 379.14, High: 387.71, Low: 365.13, Close: 366.42, Volume: 15145800 }, + { Date: 1643198400000, Open: 378.27, High: 382.66, Low: 356.62, Close: 359.7, Volume: 12684000 }, + { Date: 1643284800000, Open: 382.06, High: 394.8, Low: 378.1, Close: 386.7, Volume: 24324700 }, + { Date: 1643371200000, Open: 386.76, High: 387, Low: 372.08, Close: 384.36, Volume: 11966600 }, + { Date: 1643630400000, Open: 401.97, High: 427.7, Low: 398.2, Close: 427.14, Volume: 20047500 }, + { Date: 1643716800000, Open: 432.96, High: 458.48, Low: 425.54, Close: 457.13, Volume: 22568100 }, + { Date: 1643803200000, Open: 448.25, High: 451.98, Low: 426.48, Close: 429.48, Volume: 14346000 }, + { Date: 1643889600000, Open: 421.44, High: 429.26, Low: 404.28, Close: 405.6, Volume: 9905200 }, + { Date: 1643976000000, Open: 407.31, High: 412.77, Low: 396.64, Close: 410.17, Volume: 7789800 }, + { Date: 1644235200000, Open: 410.17, High: 412.35, Low: 393.55, Close: 402.1, Volume: 8232900 }, + { Date: 1644321600000, Open: 398.18, High: 406.61, Low: 395.83, Close: 403.53, Volume: 6818500 }, + { Date: 1644408000000, Open: 408.65, High: 412.98, Low: 398.79, Close: 412.89, Volume: 7738200 }, + { Date: 1644494400000, Open: 402.1, High: 408, Low: 396.36, Close: 406.27, Volume: 8452900 }, + { Date: 1644580800000, Open: 405.33, High: 411.61, Low: 387.65, Close: 391.31, Volume: 7558900 }, + { Date: 1644840000000, Open: 387.59, High: 409.36, Low: 386.89, Close: 396.57, Volume: 7202200 }, + { Date: 1644926400000, Open: 403.79, High: 409.16, Low: 401.01, Close: 407.46, Volume: 5392300 }, + { Date: 1645012800000, Open: 401.53, High: 401.56, Low: 390.38, Close: 398.08, Volume: 5277700 }, + { Date: 1645099200000, Open: 394.24, High: 399.11, Low: 385.7, Close: 386.67, Volume: 4669200 }, + { Date: 1645185600000, Open: 392.53, High: 402.87, Low: 389.05, Close: 391.29, Volume: 6801700 }, + { Date: 1645531200000, Open: 388.95, High: 392.42, Low: 373.02, Close: 377.38, Volume: 6697500 }, + { Date: 1645617600000, Open: 382.72, High: 386, Low: 366.66, Close: 367.46, Volume: 4614300 }, + { Date: 1645704000000, Open: 355.09, High: 390.73, Low: 354.72, Close: 390.03, Volume: 7068700 }, + { Date: 1645790400000, Open: 386.61, High: 391.29, Low: 375.58, Close: 390.8, Volume: 4841600 }, + { Date: 1646049600000, Open: 387.33, High: 397.75, Low: 382.13, Close: 394.52, Volume: 5030600 }, + { Date: 1646136000000, Open: 391.6, High: 395, Low: 383.71, Close: 386.24, Volume: 3290400 }, + { Date: 1646222400000, Open: 388.93, High: 389.22, Low: 375.21, Close: 380.03, Volume: 5356800 }, + { Date: 1646308800000, Open: 386, High: 386.12, Low: 364.65, Close: 368.07, Volume: 6076800 }, + { Date: 1646395200000, Open: 368, High: 374.82, Low: 357.17, Close: 361.73, Volume: 5325500 }, + { Date: 1646654400000, Open: 360.41, High: 362, Low: 350.2, Close: 350.26, Volume: 5708400 }, + { Date: 1646740800000, Open: 349.8, High: 358.86, Low: 340.67, Close: 341.76, Volume: 6428700 }, + { Date: 1646827200000, Open: 357.69, High: 364.14, Low: 350.51, Close: 358.79, Volume: 6520200 }, + { Date: 1646913600000, Open: 356.2, High: 367.02, Low: 353.3, Close: 356.77, Volume: 4807800 }, + { Date: 1647000000000, Open: 361.19, High: 363.36, Low: 340, Close: 340.32, Volume: 4815500 }, + { Date: 1647259200000, Open: 338.72, High: 341.32, Low: 329.82, Close: 331.01, Volume: 5907800 }, + { Date: 1647345600000, Open: 335.1, High: 345.36, Low: 332.36, Close: 343.75, Volume: 5460600 }, + { Date: 1647432000000, Open: 348.2, High: 359.99, Low: 343.06, Close: 357.53, Volume: 6982500 }, + { Date: 1647518400000, Open: 359.7, High: 373.31, Low: 354.88, Close: 371.4, Volume: 5818300 }, + { Date: 1647604800000, Open: 372, High: 381.8, Low: 368.47, Close: 380.6, Volume: 8309200 }, + { Date: 1647864000000, Open: 378.02, High: 381.82, Low: 368.94, Close: 374.59, Volume: 4866500 }, + { Date: 1647950400000, Open: 371.14, High: 386.66, Low: 366.76, Close: 382.92, Volume: 4242800 }, + { Date: 1648036800000, Open: 379.77, High: 382.46, Low: 374.49, Close: 374.49, Volume: 3729000 }, + { Date: 1648123200000, Open: 379.76, High: 379.76, Low: 368.9, Close: 375.71, Volume: 3888500 }, + { Date: 1648209600000, Open: 377.07, High: 377.64, Low: 366.43, Close: 373.85, Volume: 3574500 }, + { Date: 1648468800000, Open: 375.23, High: 380.28, Low: 366.73, Close: 378.51, Volume: 4323400 }, + { Date: 1648555200000, Open: 384.39, High: 396.5, Low: 380.33, Close: 391.82, Volume: 5880700 }, + { Date: 1648641600000, Open: 389.55, High: 392.7, Low: 378.63, Close: 381.47, Volume: 4023300 } +]; + +// set data to all series +valueSeries.data.setAll(data); +volumeSeries.data.setAll(data); +sbSeries.data.setAll(data); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart/README.md b/src/main/resources/static/js/amcharts5/examples/stock-chart/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart/index.css b/src/main/resources/static/js/amcharts5/examples/stock-chart/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart/index.html b/src/main/resources/static/js/amcharts5/examples/stock-chart/index.html new file mode 100644 index 00000000..8e776a17 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart/index.html @@ -0,0 +1,17 @@ + + + + + amCharts 5 Example - stock-chart + + + +
+
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/stock-chart/index.js b/src/main/resources/static/js/amcharts5/examples/stock-chart/index.js new file mode 100644 index 00000000..c836124a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/stock-chart/index.js @@ -0,0 +1,548 @@ +// Create root element +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create a stock chart +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Instantiating_the_chart +var stockChart = root.container.children.push(am5stock.StockChart.new(root, { +})); + + +// Set global number format +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/concepts/formatters/formatting-numbers/ +root.numberFormatter.set("numberFormat", "#,###.00"); + + +// Create a main stock panel (chart) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Adding_panels +var mainPanel = stockChart.panels.push(am5stock.StockPanel.new(root, { + wheelY: "zoomX", + panX: true, + panY: true +})); + + +// Create value axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var valueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, { + pan: "zoom" + }), + extraMin: 0.1, // adds some space for for main series + tooltip: am5.Tooltip.new(root, {}), + numberFormat: "#,###.00", + extraTooltipPrecision: 2 +})); + +var dateAxis = mainPanel.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + + +// Add series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var valueSeries = mainPanel.series.push(am5xy.CandlestickSeries.new(root, { + name: "MSFT", + clustered: false, + turboMode: true, + valueXField: "Date", + valueYField: "Close", + highValueYField: "High", + lowValueYField: "Low", + openValueYField: "Open", + calculateAggregates: true, + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "open: [bold]{openValueY}[/] high: [bold]{highValueY}[/] low: [bold]{lowValueY}[/] close: [bold]{valueY}[/]", + legendRangeValueText: "" +})); + + +// Set main value series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("stockSeries", valueSeries); + + +// Add a stock legend +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/stock-legend/ +var valueLegend = mainPanel.plotContainer.children.push(am5stock.StockLegend.new(root, { + stockChart: stockChart +})); + + +// Create volume axis +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var volumeAxisRenderer = am5xy.AxisRendererY.new(root, { + inside: true +}); + +volumeAxisRenderer.labels.template.set("forceHidden", true); +volumeAxisRenderer.grid.template.set("forceHidden", true); + +var volumeValueAxis = mainPanel.yAxes.push(am5xy.ValueAxis.new(root, { + numberFormat: "#.#a", + height: am5.percent(20), + y: am5.percent(100), + centerY: am5.percent(100), + renderer: volumeAxisRenderer +})); + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var volumeSeries = mainPanel.series.push(am5xy.ColumnSeries.new(root, { + name: "Volume", + turboMode: true, + clustered: false, + valueXField: "Date", + valueYField: "Volume", + xAxis: dateAxis, + yAxis: volumeValueAxis, + legendValueText: "[bold]{valueY.formatNumber('#,###.0a')}[/]" +})); + +volumeSeries.columns.template.setAll({ + strokeOpacity: 0, + fillOpacity: 0.5 +}); + +// color columns by stock rules +volumeSeries.columns.template.adapters.add("fill", function(fill, target) { + var dataItem = target.dataItem; + if (dataItem) { + return stockChart.getVolumeColor(dataItem); + } + return fill; +}) + + +// Set main series +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock-chart/#Setting_main_series +stockChart.set("volumeSeries", volumeSeries); +valueLegend.data.setAll([valueSeries, volumeSeries]); + + +// Add cursor(s) +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +mainPanel.set("cursor", am5xy.XYCursor.new(root, { + yAxis: valueAxis, + xAxis: dateAxis, + snapToSeries: [valueSeries], + snapToSeriesBy: "y!" +})); + + +// Add scrollbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = mainPanel.set("scrollbarX", am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +})); +stockChart.toolsContainer.children.push(scrollbar); + +var sbDateAxis = scrollbar.chart.xAxes.push(am5xy.GaplessDateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, {}) +})); + +var sbValueAxis = scrollbar.chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + +var sbSeries = scrollbar.chart.series.push(am5xy.LineSeries.new(root, { + valueYField: "Close", + valueXField: "Date", + xAxis: sbDateAxis, + yAxis: sbValueAxis +})); + +sbSeries.fills.template.setAll({ + visible: true, + fillOpacity: 0.3 +}); + +// Set up series type switcher +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/series-type-control/ +var seriesSwitcher = am5stock.SeriesTypeControl.new(root, { + stockChart: stockChart +}); + +seriesSwitcher.events.on("selected", function(ev) { + setSeriesType(ev.item.id); +}); + +function getNewSettings(series) { + var newSettings = []; + am5.array.each(["name", "valueYField", "highValueYField", "lowValueYField", "openValueYField", "calculateAggregates", "valueXField", "xAxis", "yAxis", "legendValueText", "legendRangeValueText", "stroke", "fill"], function(setting) { + newSettings[setting] = series.get(setting); + }); + return newSettings; +} + +function setSeriesType(seriesType) { + // Get current series and its settings + var currentSeries = stockChart.get("stockSeries"); + var newSettings = getNewSettings(currentSeries); + + // Remove previous series + var data = currentSeries.data.values; + mainPanel.series.removeValue(currentSeries); + + // Create new series + var series; + switch (seriesType) { + case "line": + series = mainPanel.series.push(am5xy.LineSeries.new(root, newSettings)); + break; + case "candlestick": + case "procandlestick": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.CandlestickSeries.new(root, newSettings)); + if (seriesType == "procandlestick") { + series.columns.template.get("themeTags").push("pro"); + } + break; + case "ohlc": + newSettings.clustered = false; + series = mainPanel.series.push(am5xy.OHLCSeries.new(root, newSettings)); + break; + } + + // Set new series as stockSeries + if (series) { + valueLegend.data.removeValue(currentSeries); + series.data.setAll(data); + stockChart.set("stockSeries", series); + var cursor = mainPanel.get("cursor"); + if (cursor) { + cursor.set("snapToSeries", [series]); + } + valueLegend.data.insertIndex(0, series); + } +} + + +// Stock toolbar +// ------------------------------------------------------------------------------- +// https://www.amcharts.com/docs/v5/charts/stock/toolbar/ +var toolbar = am5stock.StockToolbar.new(root, { + container: document.getElementById("chartcontrols"), + stockChart: stockChart, + controls: [ + am5stock.IndicatorControl.new(root, { + stockChart: stockChart, + legend: valueLegend + }), + am5stock.DateRangeSelector.new(root, { + stockChart: stockChart + }), + am5stock.PeriodSelector.new(root, { + stockChart: stockChart + }), + seriesSwitcher, + am5stock.DrawingControl.new(root, { + stockChart: stockChart + }), + am5stock.ResetControl.new(root, { + stockChart: stockChart + }), + am5stock.SettingsControl.new(root, { + stockChart: stockChart + }) + ] +}) + +// data +var data = [ + { Date: 1617192000000, Open: 515.67, High: 528.13, Low: 515.44, Close: 521.66, Volume: 3503100 }, + { Date: 1617278400000, Open: 529.93, High: 540.5, Low: 527.03, Close: 539.42, Volume: 3938600 }, + { Date: 1617624000000, Open: 540.01, High: 542.85, Low: 529.23, Close: 540.67, Volume: 3355900 }, + { Date: 1617710400000, Open: 544.81, High: 554.17, Low: 543.3, Close: 544.53, Volume: 3474200 }, + { Date: 1617796800000, Open: 543.5, High: 549.64, Low: 541.45, Close: 546.99, Volume: 2151300 }, + { Date: 1617883200000, Open: 551.13, High: 556.9, Low: 547.57, Close: 554.58, Volume: 4309800 }, + { Date: 1617969600000, Open: 552.69, High: 556.9, Low: 547.11, Close: 555.31, Volume: 2894000 }, + { Date: 1618228800000, Open: 551.05, High: 557.98, Low: 549.58, Close: 552.78, Volume: 2944100 }, + { Date: 1618315200000, Open: 557, High: 559.75, Low: 550.3, Close: 553.73, Volume: 2720300 }, + { Date: 1618401600000, Open: 554.87, High: 554.87, Low: 538.53, Close: 540.02, Volume: 3740300 }, + { Date: 1618488000000, Open: 544.17, High: 553.49, Low: 542.66, Close: 549.22, Volume: 3139100 }, + { Date: 1618574400000, Open: 550.54, High: 551.98, Low: 539.51, Close: 546.54, Volume: 3209100 }, + { Date: 1618833600000, Open: 546.9, High: 556.44, Low: 545.53, Close: 554.44, Volume: 4288700 }, + { Date: 1618920000000, Open: 554.42, High: 563.56, Low: 546.3, Close: 549.57, Volume: 11257600 }, + { Date: 1619006400000, Open: 508, High: 515.46, Low: 503.6, Close: 508.9, Volume: 22897400 }, + { Date: 1619092800000, Open: 513.82, High: 513.96, Low: 500.55, Close: 508.78, Volume: 9061100 }, + { Date: 1619179200000, Open: 509.01, High: 509.7, Low: 500.7, Close: 505.55, Volume: 7307700 }, + { Date: 1619438400000, Open: 506.76, High: 510.48, Low: 503, Close: 510.3, Volume: 4388800 }, + { Date: 1619524800000, Open: 512.62, High: 512.99, Low: 504.58, Close: 505.55, Volume: 3761300 }, + { Date: 1619611200000, Open: 505.2, High: 508.4, Low: 503.34, Close: 506.52, Volume: 3193000 }, + { Date: 1619697600000, Open: 507.6, High: 509.29, Low: 499, Close: 509, Volume: 5127800 }, + { Date: 1619784000000, Open: 505, High: 514.55, Low: 505, Close: 513.47, Volume: 4413200 }, + { Date: 1620043200000, Open: 512.65, High: 518.95, Low: 505.2, Close: 509.11, Volume: 4091900 }, + { Date: 1620129600000, Open: 510.78, High: 511.63, Low: 496.79, Close: 503.18, Volume: 4349500 }, + { Date: 1620216000000, Open: 504.99, High: 507.78, Low: 494.63, Close: 496.08, Volume: 3129400 }, + { Date: 1620302400000, Open: 495.99, High: 499.55, Low: 491.37, Close: 499.55, Volume: 3783700 }, + { Date: 1620388800000, Open: 504.62, High: 508.55, Low: 501.12, Close: 503.84, Volume: 3132800 }, + { Date: 1620648000000, Open: 502, High: 503.15, Low: 486.11, Close: 486.69, Volume: 5131600 }, + { Date: 1620734400000, Open: 479.75, High: 497.99, Low: 478.63, Close: 495.08, Volume: 4401000 }, + { Date: 1620820800000, Open: 486.83, High: 493.54, Low: 482.7, Close: 484.98, Volume: 4121500 }, + { Date: 1620907200000, Open: 489.13, High: 490.78, Low: 482.71, Close: 486.66, Volume: 2712500 }, + { Date: 1620993600000, Open: 487.86, High: 494.85, Low: 486.59, Close: 493.37, Volume: 2882500 }, + { Date: 1621252800000, Open: 485.59, High: 492.71, Low: 482.81, Close: 488.94, Volume: 2705200 }, + { Date: 1621339200000, Open: 488.4, High: 493.48, Low: 486.19, Close: 486.28, Volume: 2350500 }, + { Date: 1621425600000, Open: 481.63, High: 488.57, Low: 478.54, Close: 487.7, Volume: 3349900 }, + { Date: 1621512000000, Open: 489.55, High: 502.7, Low: 488.98, Close: 501.67, Volume: 3721200 }, + { Date: 1621598400000, Open: 503.12, High: 505.4, Low: 497.26, Close: 497.89, Volume: 3322900 }, + { Date: 1621857600000, Open: 501.05, High: 504.25, Low: 499.51, Close: 502.9, Volume: 2412600 }, + { Date: 1621944000000, Open: 506, High: 506.37, Low: 499.22, Close: 501.34, Volume: 2699500 }, + { Date: 1622030400000, Open: 502.34, High: 504.14, Low: 500.5, Close: 502.36, Volume: 2465300 }, + { Date: 1622116800000, Open: 501.8, High: 505.1, Low: 498.54, Close: 503.86, Volume: 3253800 }, + { Date: 1622203200000, Open: 504.4, High: 511.76, Low: 502.53, Close: 502.81, Volume: 2910300 }, + { Date: 1622548800000, Open: 504.01, High: 505.41, Low: 497.74, Close: 499.08, Volume: 2482600 }, + { Date: 1622635200000, Open: 499.82, High: 503.22, Low: 495.82, Close: 499.24, Volume: 2269000 }, + { Date: 1622721600000, Open: 495.19, High: 496.66, Low: 487.25, Close: 489.43, Volume: 3887400 }, + { Date: 1622808000000, Open: 492, High: 501.86, Low: 490.95, Close: 494.74, Volume: 3160500 }, + { Date: 1623067200000, Open: 492.92, High: 496.7, Low: 490.55, Close: 494.66, Volume: 2791900 }, + { Date: 1623153600000, Open: 497, High: 498.82, Low: 489.37, Close: 492.39, Volume: 2374000 }, + { Date: 1623240000000, Open: 494.5, High: 496.09, Low: 484.65, Close: 485.81, Volume: 3055000 }, + { Date: 1623326400000, Open: 487.17, High: 490.21, Low: 482.14, Close: 487.27, Volume: 4382900 }, + { Date: 1623412800000, Open: 490, High: 491.41, Low: 487.78, Close: 488.77, Volume: 3124000 }, + { Date: 1623672000000, Open: 489.68, High: 503.5, Low: 486.91, Close: 499.89, Volume: 4400200 }, + { Date: 1623758400000, Open: 501.23, High: 501.23, Low: 490.4, Close: 491.9, Volume: 3104100 }, + { Date: 1623844800000, Open: 495, High: 496.46, Low: 486.28, Close: 492.41, Volume: 3533200 }, + { Date: 1623931200000, Open: 490.25, High: 501.8, Low: 490.15, Close: 498.34, Volume: 3198300 }, + { Date: 1624017600000, Open: 496.4, High: 504.49, Low: 495.24, Close: 500.77, Volume: 5197600 }, + { Date: 1624276800000, Open: 501.64, High: 502.05, Low: 492.28, Close: 497, Volume: 5277300 }, + { Date: 1624363200000, Open: 498.54, High: 513.55, Low: 495.8, Close: 508.82, Volume: 5809300 }, + { Date: 1624449600000, Open: 508.48, High: 516.63, Low: 508.2, Close: 512.74, Volume: 3944800 }, + { Date: 1624536000000, Open: 517.96, High: 520.96, Low: 514.4, Close: 518.06, Volume: 3361200 }, + { Date: 1624622400000, Open: 528.84, High: 533.06, Low: 525, Close: 527.07, Volume: 5299100 }, + { Date: 1624881600000, Open: 528.12, High: 533.94, Low: 524.56, Close: 533.03, Volume: 2820200 }, + { Date: 1624968000000, Open: 533.55, High: 536.13, Low: 528.57, Close: 533.5, Volume: 2314600 }, + { Date: 1625054400000, Open: 534.06, High: 534.38, Low: 526.82, Close: 528.21, Volume: 2773400 }, + { Date: 1625140800000, Open: 525.72, High: 537.04, Low: 525.72, Close: 533.54, Volume: 2805400 }, + { Date: 1625227200000, Open: 535.5, High: 538.54, Low: 529.39, Close: 533.98, Volume: 1975500 }, + { Date: 1625572800000, Open: 533, High: 542.86, Low: 533, Close: 541.64, Volume: 2775100 }, + { Date: 1625659200000, Open: 544.24, High: 544.64, Low: 531.66, Close: 535.96, Volume: 2722500 }, + { Date: 1625745600000, Open: 530.93, High: 535.5, Low: 529.09, Close: 530.76, Volume: 3269000 }, + { Date: 1625832000000, Open: 531, High: 538.26, Low: 528.58, Close: 535.98, Volume: 2777200 }, + { Date: 1626091200000, Open: 540.3, High: 540.65, Low: 532.92, Close: 537.31, Volume: 1780700 }, + { Date: 1626177600000, Open: 535.76, High: 545.33, Low: 535.76, Close: 540.68, Volume: 2751600 }, + { Date: 1626264000000, Open: 541.01, High: 554.1, Low: 541.01, Close: 547.95, Volume: 4659500 }, + { Date: 1626350400000, Open: 553.97, High: 557.54, Low: 538.2, Close: 542.95, Volume: 5713900 }, + { Date: 1626436800000, Open: 541.81, High: 544.06, Low: 527.05, Close: 530.31, Volume: 3442100 }, + { Date: 1626696000000, Open: 526.05, High: 534.91, Low: 522.24, Close: 532.28, Volume: 3885800 }, + { Date: 1626782400000, Open: 526.07, High: 536.64, Low: 520.3, Close: 531.05, Volume: 6930400 }, + { Date: 1626868800000, Open: 526.13, High: 530.99, Low: 505.61, Close: 513.63, Volume: 11906800 }, + { Date: 1626955200000, Open: 510.21, High: 513.68, Low: 507, Close: 511.77, Volume: 4328100 }, + { Date: 1627041600000, Open: 512.16, High: 517.41, Low: 504.66, Close: 515.41, Volume: 3820500 }, + { Date: 1627300800000, Open: 514.38, High: 521.13, Low: 509.01, Close: 516.49, Volume: 2254500 }, + { Date: 1627387200000, Open: 518.08, High: 521.95, Low: 512.05, Close: 518.91, Volume: 2759000 }, + { Date: 1627473600000, Open: 521.82, High: 524.47, Low: 516.98, Close: 519.3, Volume: 2390500 }, + { Date: 1627560000000, Open: 519.96, High: 520.78, Low: 513.79, Close: 514.25, Volume: 1736000 }, + { Date: 1627646400000, Open: 512.69, High: 519.79, Low: 510.96, Close: 517.57, Volume: 2537100 }, + { Date: 1627905600000, Open: 519, High: 519.85, Low: 510.51, Close: 515.15, Volume: 2096600 }, + { Date: 1627992000000, Open: 514.39, High: 515.63, Low: 505.37, Close: 510.82, Volume: 2579400 }, + { Date: 1628078400000, Open: 513, High: 517.98, Low: 510.37, Close: 517.35, Volume: 2039400 }, + { Date: 1628164800000, Open: 517.13, High: 525.41, Low: 514.02, Close: 524.89, Volume: 2556700 }, + { Date: 1628251200000, Open: 524, High: 526.84, Low: 519.39, Close: 520.55, Volume: 1919800 }, + { Date: 1628510400000, Open: 521.15, High: 522.67, Low: 517.99, Close: 519.97, Volume: 1367800 }, + { Date: 1628596800000, Open: 520, High: 520.79, Low: 512.97, Close: 515.84, Volume: 1960500 }, + { Date: 1628683200000, Open: 517, High: 519.57, Low: 509.77, Close: 512.4, Volume: 1673900 }, + { Date: 1628769600000, Open: 511.86, High: 513, Low: 507.2, Close: 510.72, Volume: 1685700 }, + { Date: 1628856000000, Open: 512.64, High: 521.44, Low: 511.51, Close: 515.92, Volume: 2177700 }, + { Date: 1629115200000, Open: 515.24, High: 523.38, Low: 512.3, Close: 517.92, Volume: 2032800 }, + { Date: 1629201600000, Open: 515.47, High: 520.79, Low: 514.2, Close: 518.91, Volume: 2309800 }, + { Date: 1629288000000, Open: 520, High: 526.38, Low: 518.65, Close: 521.87, Volume: 2582000 }, + { Date: 1629374400000, Open: 522.74, High: 548.39, Low: 521.87, Close: 543.71, Volume: 7497300 }, + { Date: 1629460800000, Open: 545.09, High: 551.39, Low: 539.1, Close: 546.88, Volume: 3776400 }, + { Date: 1629720000000, Open: 545.98, High: 555.55, Low: 543.74, Close: 553.33, Volume: 2602000 }, + { Date: 1629806400000, Open: 551.48, High: 555.31, Low: 549.27, Close: 553.41, Volume: 2109500 }, + { Date: 1629892800000, Open: 550.16, High: 552.84, Low: 545.45, Close: 547.58, Volume: 2065600 }, + { Date: 1629979200000, Open: 546.16, High: 552.6, Low: 545.9, Close: 550.12, Volume: 1595500 }, + { Date: 1630065600000, Open: 551.6, High: 564.17, Low: 549.25, Close: 558.92, Volume: 3252600 }, + { Date: 1630324800000, Open: 557.25, High: 567.16, Low: 556.45, Close: 566.18, Volume: 2434800 }, + { Date: 1630411200000, Open: 566.12, High: 569.48, Low: 561.61, Close: 569.19, Volume: 2431900 }, + { Date: 1630497600000, Open: 569, High: 591, Low: 569, Close: 582.07, Volume: 5626200 }, + { Date: 1630584000000, Open: 583.68, High: 598.76, Low: 583.68, Close: 588.55, Volume: 6179900 }, + { Date: 1630670400000, Open: 585.8, High: 591.88, Low: 583.14, Close: 590.53, Volume: 2681200 }, + { Date: 1631016000000, Open: 594.69, High: 613.85, Low: 593.99, Close: 606.71, Volume: 5821400 }, + { Date: 1631102400000, Open: 603.84, High: 615.6, Low: 595.71, Close: 606.05, Volume: 5424500 }, + { Date: 1631188800000, Open: 606.47, High: 609.44, Low: 596.55, Close: 597.54, Volume: 2954200 }, + { Date: 1631275200000, Open: 598.16, High: 609.45, Low: 593.67, Close: 598.72, Volume: 3950800 }, + { Date: 1631534400000, Open: 598.57, High: 598.57, Low: 582.78, Close: 589.29, Volume: 3062900 }, + { Date: 1631620800000, Open: 584.89, High: 587.28, Low: 575.56, Close: 577.76, Volume: 3457000 }, + { Date: 1631707200000, Open: 578.17, High: 584.62, Low: 575.37, Close: 582.87, Volume: 2755600 }, + { Date: 1631793600000, Open: 584.3, High: 587.48, Low: 577.72, Close: 586.5, Volume: 1832000 }, + { Date: 1631880000000, Open: 587.85, High: 590.28, Low: 580.85, Close: 589.35, Volume: 4145100 }, + { Date: 1632139200000, Open: 586.79, High: 591.53, Low: 568.08, Close: 575.43, Volume: 3732200 }, + { Date: 1632225600000, Open: 578.31, High: 581.88, Low: 569.37, Close: 573.14, Volume: 2250900 }, + { Date: 1632312000000, Open: 579.69, High: 595.65, Low: 579.69, Close: 590.65, Volume: 4021800 }, + { Date: 1632398400000, Open: 590.79, High: 599.32, Low: 589.13, Close: 593.26, Volume: 2526200 }, + { Date: 1632484800000, Open: 592.5, High: 592.98, Low: 583.64, Close: 592.39, Volume: 2126200 }, + { Date: 1632744000000, Open: 587.95, High: 593.58, Low: 576.93, Close: 592.64, Volume: 2504700 }, + { Date: 1632830400000, Open: 589, High: 599.54, Low: 580.16, Close: 583.85, Volume: 4431100 }, + { Date: 1632916800000, Open: 589.01, High: 609.88, Low: 588.01, Close: 599.06, Volume: 6221000 }, + { Date: 1633003200000, Open: 608.05, High: 619, Low: 608.05, Close: 610.34, Volume: 6612600 }, + { Date: 1633089600000, Open: 604.24, High: 614.99, Low: 597.51, Close: 613.15, Volume: 4090800 }, + { Date: 1633348800000, Open: 613.39, High: 626.13, Low: 594.68, Close: 603.35, Volume: 4995900 }, + { Date: 1633435200000, Open: 606.94, High: 640.39, Low: 606.89, Close: 634.81, Volume: 9534300 }, + { Date: 1633521600000, Open: 628.18, High: 639.87, Low: 626.36, Close: 639.1, Volume: 4580400 }, + { Date: 1633608000000, Open: 642.23, High: 646.84, Low: 630.45, Close: 631.85, Volume: 3556900 }, + { Date: 1633694400000, Open: 634.17, High: 643.8, Low: 630.86, Close: 632.66, Volume: 3272100 }, + { Date: 1633953600000, Open: 633.2, High: 639.42, Low: 626.78, Close: 627.04, Volume: 2862500 }, + { Date: 1634040000000, Open: 633.02, High: 637.66, Low: 621.99, Close: 624.94, Volume: 3227300 }, + { Date: 1634126400000, Open: 632.18, High: 632.18, Low: 622.1, Close: 629.76, Volume: 2420300 }, + { Date: 1634212800000, Open: 632.23, High: 636.88, Low: 626.79, Close: 633.8, Volume: 2671700 }, + { Date: 1634299200000, Open: 638, High: 639.42, Low: 625.16, Close: 628.29, Volume: 4116900 }, + { Date: 1634558400000, Open: 632.1, High: 638.41, Low: 620.59, Close: 637.97, Volume: 4669100 }, + { Date: 1634644800000, Open: 636.97, High: 641, Low: 632.3, Close: 639, Volume: 7633100 }, + { Date: 1634731200000, Open: 625.57, High: 637.4, Low: 617.15, Close: 625.14, Volume: 10622000 }, + { Date: 1634817600000, Open: 628.89, High: 654.01, Low: 628.65, Close: 653.16, Volume: 8437100 }, + { Date: 1634904000000, Open: 651.81, High: 665.46, Low: 651.81, Close: 664.78, Volume: 6186000 }, + { Date: 1635163200000, Open: 663.74, High: 675.88, Low: 657.07, Close: 671.66, Volume: 3833500 }, + { Date: 1635249600000, Open: 673.76, High: 676.49, Low: 662.77, Close: 668.52, Volume: 2904800 }, + { Date: 1635336000000, Open: 669, High: 671.41, Low: 661.85, Close: 662.92, Volume: 2276900 }, + { Date: 1635422400000, Open: 670.95, High: 676.8, Low: 668.03, Close: 674.05, Volume: 2859400 }, + { Date: 1635508800000, Open: 673.06, High: 690.97, Low: 671.24, Close: 690.31, Volume: 3825300 }, + { Date: 1635768000000, Open: 689.06, High: 689.97, Low: 676.54, Close: 681.17, Volume: 3110900 }, + { Date: 1635854400000, Open: 683.11, High: 687.68, Low: 673.82, Close: 677.72, Volume: 3888600 }, + { Date: 1635940800000, Open: 677.27, High: 689.39, Low: 677.27, Close: 688.29, Volume: 2334900 }, + { Date: 1636027200000, Open: 685.89, High: 685.94, Low: 665.5, Close: 668.4, Volume: 4865000 }, + { Date: 1636113600000, Open: 663.97, High: 665.64, Low: 645.01, Close: 645.72, Volume: 5283500 }, + { Date: 1636372800000, Open: 650.29, High: 656, Low: 643.79, Close: 651.45, Volume: 2887500 }, + { Date: 1636459200000, Open: 653.7, High: 660.5, Low: 650.52, Close: 655.99, Volume: 2415600 }, + { Date: 1636545600000, Open: 653.01, High: 660.33, Low: 642.11, Close: 646.91, Volume: 2405800 }, + { Date: 1636632000000, Open: 650.24, High: 665.82, Low: 649.71, Close: 657.58, Volume: 2868300 }, + { Date: 1636718400000, Open: 660.01, High: 683.34, Low: 653.82, Close: 682.61, Volume: 4198400 }, + { Date: 1636977600000, Open: 681.24, High: 685.26, Low: 671.49, Close: 679.33, Volume: 2872200 }, + { Date: 1637064000000, Open: 678.27, High: 688.36, Low: 676.9, Close: 687.4, Volume: 2077400 }, + { Date: 1637150400000, Open: 690, High: 700.99, Low: 686.09, Close: 691.69, Volume: 2732800 }, + { Date: 1637236800000, Open: 691.61, High: 691.74, Low: 679.74, Close: 682.02, Volume: 2012900 }, + { Date: 1637323200000, Open: 692.35, High: 694.16, Low: 675, Close: 678.8, Volume: 2613700 }, + { Date: 1637582400000, Open: 676.02, High: 679.48, Low: 656.47, Close: 659.2, Volume: 2764400 }, + { Date: 1637668800000, Open: 658.18, High: 666.43, Low: 646.05, Close: 654.06, Volume: 2320200 }, + { Date: 1637755200000, Open: 658.01, High: 661.44, Low: 651.1, Close: 658.29, Volume: 1867300 }, + { Date: 1637928000000, Open: 675, High: 676.41, Low: 660.67, Close: 665.64, Volume: 2872500 }, + { Date: 1638187200000, Open: 663.2, High: 667.99, Low: 658.29, Close: 663.84, Volume: 2529400 }, + { Date: 1638273600000, Open: 668.2, High: 675.38, Low: 640.01, Close: 641.9, Volume: 5608900 }, + { Date: 1638360000000, Open: 649.48, High: 654.52, Low: 617.07, Close: 617.77, Volume: 3882800 }, + { Date: 1638446400000, Open: 617.1, High: 625.36, Low: 612.88, Close: 616.47, Volume: 3331100 }, + { Date: 1638532800000, Open: 622.75, High: 625.5, Low: 594, Close: 602.13, Volume: 4829300 }, + { Date: 1638792000000, Open: 606.01, High: 617.29, Low: 601, Close: 612.69, Volume: 3075700 }, + { Date: 1638878400000, Open: 619.83, High: 628.89, Low: 611.4, Close: 625.58, Volume: 3125200 }, + { Date: 1638964800000, Open: 630, High: 632.46, Low: 623.2, Close: 628.08, Volume: 2220300 }, + { Date: 1639051200000, Open: 627.58, High: 630.24, Low: 610.44, Close: 611, Volume: 2376300 }, + { Date: 1639137600000, Open: 616.78, High: 617.74, Low: 605.88, Close: 611.66, Volume: 2748800 }, + { Date: 1639396800000, Open: 612, High: 612.64, Low: 599.52, Close: 604.56, Volume: 2517900 }, + { Date: 1639483200000, Open: 598.71, High: 602.29, Low: 588.13, Close: 597.99, Volume: 2984500 }, + { Date: 1639569600000, Open: 598.18, High: 605.69, Low: 584.51, Close: 605.04, Volume: 2866200 }, + { Date: 1639656000000, Open: 597.09, High: 602.83, Low: 588, Close: 591.06, Volume: 3143200 }, + { Date: 1639742400000, Open: 591.61, High: 593.25, Low: 581.74, Close: 586.73, Volume: 4386900 }, + { Date: 1640001600000, Open: 586.43, High: 602.88, Low: 584.26, Close: 593.74, Volume: 3358400 }, + { Date: 1640088000000, Open: 597.54, High: 607.82, Low: 593.86, Close: 604.92, Volume: 2319400 }, + { Date: 1640174400000, Open: 603.36, High: 614.82, Low: 602.63, Close: 614.24, Volume: 2335700 }, + { Date: 1640260800000, Open: 616.4, High: 616.88, Low: 607.57, Close: 614.09, Volume: 1621100 }, + { Date: 1640606400000, Open: 615, High: 615, Low: 609.25, Close: 613.12, Volume: 2061500 }, + { Date: 1640692800000, Open: 614.95, High: 618.41, Low: 609.69, Close: 610.71, Volume: 1882800 }, + { Date: 1640779200000, Open: 610.71, High: 613.98, Low: 604.68, Close: 610.54, Volume: 1287200 }, + { Date: 1640865600000, Open: 612.99, High: 620.61, Low: 611.24, Close: 612.09, Volume: 1625100 }, + { Date: 1640952000000, Open: 610.01, High: 614.08, Low: 602.05, Close: 602.44, Volume: 1995900 }, + { Date: 1641211200000, Open: 605.61, High: 609.99, Low: 590.56, Close: 597.37, Volume: 3067500 }, + { Date: 1641297600000, Open: 599.91, High: 600.41, Low: 581.6, Close: 591.15, Volume: 4393100 }, + { Date: 1641384000000, Open: 592, High: 592.84, Low: 566.88, Close: 567.52, Volume: 4148700 }, + { Date: 1641470400000, Open: 554.34, High: 563.36, Low: 542.01, Close: 553.29, Volume: 5711800 }, + { Date: 1641556800000, Open: 549.46, High: 553.43, Low: 538.22, Close: 541.06, Volume: 3382900 }, + { Date: 1641816000000, Open: 538.49, High: 543.69, Low: 526.32, Close: 539.85, Volume: 4486100 }, + { Date: 1641902400000, Open: 536.99, High: 543.91, Low: 530.07, Close: 540.84, Volume: 3077800 }, + { Date: 1641988800000, Open: 544.27, High: 544.27, Low: 532.02, Close: 537.22, Volume: 3787400 }, + { Date: 1642075200000, Open: 537.06, High: 540.79, Low: 518.26, Close: 519.2, Volume: 4475100 }, + { Date: 1642161600000, Open: 517.6, High: 538.37, Low: 511.88, Close: 525.69, Volume: 7861100 }, + { Date: 1642507200000, Open: 520.08, High: 521.75, Low: 508.68, Close: 510.8, Volume: 4839100 }, + { Date: 1642593600000, Open: 515, High: 523.21, Low: 510.51, Close: 515.86, Volume: 4353500 }, + { Date: 1642680000000, Open: 517.75, High: 526.64, Low: 506.93, Close: 508.25, Volume: 12659000 }, + { Date: 1642766400000, Open: 400.43, High: 409.15, Low: 379.99, Close: 397.5, Volume: 58904300 }, + { Date: 1643025600000, Open: 383.91, High: 387.26, Low: 351.46, Close: 387.15, Volume: 32346000 }, + { Date: 1643112000000, Open: 379.14, High: 387.71, Low: 365.13, Close: 366.42, Volume: 15145800 }, + { Date: 1643198400000, Open: 378.27, High: 382.66, Low: 356.62, Close: 359.7, Volume: 12684000 }, + { Date: 1643284800000, Open: 382.06, High: 394.8, Low: 378.1, Close: 386.7, Volume: 24324700 }, + { Date: 1643371200000, Open: 386.76, High: 387, Low: 372.08, Close: 384.36, Volume: 11966600 }, + { Date: 1643630400000, Open: 401.97, High: 427.7, Low: 398.2, Close: 427.14, Volume: 20047500 }, + { Date: 1643716800000, Open: 432.96, High: 458.48, Low: 425.54, Close: 457.13, Volume: 22568100 }, + { Date: 1643803200000, Open: 448.25, High: 451.98, Low: 426.48, Close: 429.48, Volume: 14346000 }, + { Date: 1643889600000, Open: 421.44, High: 429.26, Low: 404.28, Close: 405.6, Volume: 9905200 }, + { Date: 1643976000000, Open: 407.31, High: 412.77, Low: 396.64, Close: 410.17, Volume: 7789800 }, + { Date: 1644235200000, Open: 410.17, High: 412.35, Low: 393.55, Close: 402.1, Volume: 8232900 }, + { Date: 1644321600000, Open: 398.18, High: 406.61, Low: 395.83, Close: 403.53, Volume: 6818500 }, + { Date: 1644408000000, Open: 408.65, High: 412.98, Low: 398.79, Close: 412.89, Volume: 7738200 }, + { Date: 1644494400000, Open: 402.1, High: 408, Low: 396.36, Close: 406.27, Volume: 8452900 }, + { Date: 1644580800000, Open: 405.33, High: 411.61, Low: 387.65, Close: 391.31, Volume: 7558900 }, + { Date: 1644840000000, Open: 387.59, High: 409.36, Low: 386.89, Close: 396.57, Volume: 7202200 }, + { Date: 1644926400000, Open: 403.79, High: 409.16, Low: 401.01, Close: 407.46, Volume: 5392300 }, + { Date: 1645012800000, Open: 401.53, High: 401.56, Low: 390.38, Close: 398.08, Volume: 5277700 }, + { Date: 1645099200000, Open: 394.24, High: 399.11, Low: 385.7, Close: 386.67, Volume: 4669200 }, + { Date: 1645185600000, Open: 392.53, High: 402.87, Low: 389.05, Close: 391.29, Volume: 6801700 }, + { Date: 1645531200000, Open: 388.95, High: 392.42, Low: 373.02, Close: 377.38, Volume: 6697500 }, + { Date: 1645617600000, Open: 382.72, High: 386, Low: 366.66, Close: 367.46, Volume: 4614300 }, + { Date: 1645704000000, Open: 355.09, High: 390.73, Low: 354.72, Close: 390.03, Volume: 7068700 }, + { Date: 1645790400000, Open: 386.61, High: 391.29, Low: 375.58, Close: 390.8, Volume: 4841600 }, + { Date: 1646049600000, Open: 387.33, High: 397.75, Low: 382.13, Close: 394.52, Volume: 5030600 }, + { Date: 1646136000000, Open: 391.6, High: 395, Low: 383.71, Close: 386.24, Volume: 3290400 }, + { Date: 1646222400000, Open: 388.93, High: 389.22, Low: 375.21, Close: 380.03, Volume: 5356800 }, + { Date: 1646308800000, Open: 386, High: 386.12, Low: 364.65, Close: 368.07, Volume: 6076800 }, + { Date: 1646395200000, Open: 368, High: 374.82, Low: 357.17, Close: 361.73, Volume: 5325500 }, + { Date: 1646654400000, Open: 360.41, High: 362, Low: 350.2, Close: 350.26, Volume: 5708400 }, + { Date: 1646740800000, Open: 349.8, High: 358.86, Low: 340.67, Close: 341.76, Volume: 6428700 }, + { Date: 1646827200000, Open: 357.69, High: 364.14, Low: 350.51, Close: 358.79, Volume: 6520200 }, + { Date: 1646913600000, Open: 356.2, High: 367.02, Low: 353.3, Close: 356.77, Volume: 4807800 }, + { Date: 1647000000000, Open: 361.19, High: 363.36, Low: 340, Close: 340.32, Volume: 4815500 }, + { Date: 1647259200000, Open: 338.72, High: 341.32, Low: 329.82, Close: 331.01, Volume: 5907800 }, + { Date: 1647345600000, Open: 335.1, High: 345.36, Low: 332.36, Close: 343.75, Volume: 5460600 }, + { Date: 1647432000000, Open: 348.2, High: 359.99, Low: 343.06, Close: 357.53, Volume: 6982500 }, + { Date: 1647518400000, Open: 359.7, High: 373.31, Low: 354.88, Close: 371.4, Volume: 5818300 }, + { Date: 1647604800000, Open: 372, High: 381.8, Low: 368.47, Close: 380.6, Volume: 8309200 }, + { Date: 1647864000000, Open: 378.02, High: 381.82, Low: 368.94, Close: 374.59, Volume: 4866500 }, + { Date: 1647950400000, Open: 371.14, High: 386.66, Low: 366.76, Close: 382.92, Volume: 4242800 }, + { Date: 1648036800000, Open: 379.77, High: 382.46, Low: 374.49, Close: 374.49, Volume: 3729000 }, + { Date: 1648123200000, Open: 379.76, High: 379.76, Low: 368.9, Close: 375.71, Volume: 3888500 }, + { Date: 1648209600000, Open: 377.07, High: 377.64, Low: 366.43, Close: 373.85, Volume: 3574500 }, + { Date: 1648468800000, Open: 375.23, High: 380.28, Low: 366.73, Close: 378.51, Volume: 4323400 }, + { Date: 1648555200000, Open: 384.39, High: 396.5, Low: 380.33, Close: 391.82, Volume: 5880700 }, + { Date: 1648641600000, Open: 389.55, High: 392.7, Low: 378.63, Close: 381.47, Volume: 4023300 } +]; + +// set data to all series +valueSeries.data.setAll(data); +volumeSeries.data.setAll(data); +sbSeries.data.setAll(data); + +stockChart.appear(500); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/README.md b/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/index.css b/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/index.html b/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/index.html new file mode 100644 index 00000000..5942030a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - timeline-horizontal-serpentine-chart + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/index.js b/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/index.js new file mode 100644 index 00000000..a558f164 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-horizontal-serpentine-chart/index.js @@ -0,0 +1,263 @@ +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +var chart = root.container.children.push(am5timeline.SerpentineChart.new(root, { + orientation: "horizontal", + levelCount: 6, + startLocation: 0.2, + endLocation: 1, + wheelY: "zoomX" +})); + +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +var yRenderer = am5timeline.AxisRendererCurveY.new(root, { + rotateLabels: true +}) + +yRenderer.labels.template.setAll({ + centerY: am5.p50, + centerX: am5.p100, + fontSize: 11 +}); + +yRenderer.grid.template.set("forceHidden", true); + +// Create axes and their renderers +var xRenderer = am5timeline.AxisRendererCurveX.new(root, { + yRenderer: yRenderer, + strokeDasharray: [2, 3], + strokeOpacity: 0.5, + stroke: am5.color(0x000000) +}); + +xRenderer.labels.template.setAll({ + centerY: am5.p50, + fontSize: 11, + minPosition: 0.01 +}); + +xRenderer.labels.template.setup = function(target) { + target.set("layer", 30); + target.set("background", am5.Rectangle.new(root, { + fill: am5.color(0xffffff), + fillOpacity: 1 + })); +} + +var yAxis = chart.yAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0, + categoryField: "category", + renderer: yRenderer +})); + +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + baseInterval: { timeUnit: "day", count: 1 }, + renderer: xRenderer, + tooltip: am5.Tooltip.new(root, {}) +})); + +// Data +var colorSet = chart.get("colors"); + +var data = [{ + "category": "Module #1", + "start": new Date("2019-01-10").getTime(), + "end": new Date("2019-01-13").getTime(), + "color": colorSet.getIndex(0), + "task": "Gathering requirements" +}, { + "category": "Module #1", + "start": new Date("2019-02-05").getTime(), + "end": new Date("2019-04-18").getTime(), + "color": colorSet.getIndex(0), + "task": "Development" +}, { + "category": "Module #2", + "start": new Date("2019-01-08").getTime(), + "end": new Date("2019-01-10").getTime(), + "color": colorSet.getIndex(5), + "task": "Gathering requirements" +}, { + "category": "Module #2", + "start": new Date("2019-01-12").getTime(), + "end": new Date("2019-01-15").getTime(), + "color": colorSet.getIndex(5), + "task": "Producing specifications" +}, { + "category": "Module #2", + "start": new Date("2019-01-16").getTime(), + "end": new Date("2019-02-05").getTime(), + "color": colorSet.getIndex(5), + "task": "Development" +}, { + "category": "Module #2", + "start": new Date("2019-02-10").getTime(), + "end": new Date("2019-02-18").getTime(), + "color": colorSet.getIndex(5), + "task": "Testing and QA" +}, { + "category": "" +}, { + "category": "Module #3", + "start": new Date("2019-01-01").getTime(), + "end": new Date("2019-01-19").getTime(), + "color": colorSet.getIndex(9), + "task": "Gathering requirements" +}, { + "category": "Module #3", + "start": new Date("2019-02-01").getTime(), + "end": new Date("2019-02-10").getTime(), + "color": colorSet.getIndex(9), + "task": "Producing specifications" +}, { + "category": "Module #3", + "start": new Date("2019-03-10").getTime(), + "end": new Date("2019-04-15").getTime(), + "color": colorSet.getIndex(9), + "task": "Development" +}, { + "category": "Module #3", + "start": new Date("2019-04-20").getTime(), + "end": new Date("2019-04-30").getTime(), + "color": colorSet.getIndex(9), + "task": "Testing and QA", + "disabled2": false, + "image2": "/wp-content/uploads/assets/timeline/rachel.jpg", + "location": 0 +}, { + "category": "Module #4", + "start": new Date("2019-01-15").getTime(), + "end": new Date("2019-02-12").getTime(), + "color": colorSet.getIndex(15), + "task": "Gathering requirements", + "disabled1": false, + "image1": "/wp-content/uploads/assets/timeline/monica.jpg" +}, { + "category": "Module #4", + "start": new Date("2019-02-25").getTime(), + "end": new Date("2019-03-10").getTime(), + "color": colorSet.getIndex(15), + "task": "Development" +}, { + "category": "Module #4", + "start": new Date("2019-03-23").getTime(), + "end": new Date("2019-04-29").getTime(), + "color": colorSet.getIndex(15), + "task": "Testing and QA" +}]; + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5timeline.CurveColumnSeries.new(root, { + xAxis: xAxis, + yAxis: yAxis, + baseAxis: yAxis, + valueXField: "end", + openValueXField: "start", + categoryYField: "category", + layer: 30 +})); + +series.columns.template.setAll({ + height: am5.percent(10), + strokeOpacity: 0 +}) + +series.bullets.push(function(root, series, dataItem) { + var circle = am5.Circle.new(root, { + radius: 4, + fill: chart.get("colors").getIndex(series.dataItems.indexOf(dataItem)), + strokeWidth: 2, + strokeOpacity: 0.5, + layer: 30 + }); + + return am5.Bullet.new(root, { + sprite: circle, + locationX: 0, + locationY: 0.5 + }) +}) + +series.bullets.push(function(root, series, dataItem) { + var circle = am5.Circle.new(root, { + radius: 4, + fill: chart.get("colors").getIndex(series.dataItems.indexOf(dataItem)), + strokeWidth: 2, + strokeOpacity: 0.5, + layer: 30 + }); + + return am5.Bullet.new(root, { + sprite: circle, locationX: 1 + }) +}) + +series.columns.template.adapters.add("fill", function(fill, target) { + return chart.get("colors").getIndex(series.dataItems.indexOf(target.dataItem)); +}) + +// line series for flags +var lineSeries = chart.series.push(am5timeline.CurveLineSeries.new(root, { + xAxis: xAxis, yAxis: yAxis, categoryYField: "category", valueXField: "date" +})); + +lineSeries.strokes.template.set("forceHidden", true); + +lineSeries.bullets.push(function(root, series, dataItem) { + var flag = am5.Tooltip.new(root, { + centerY: 28, + paddingBottom: 4, paddingLeft: 7, paddingRight: 7, paddingTop: 4, layer: 30 + }) + + flag.get("background")?.setAll({ + stroke: am5.color(0x000000), cornerRadius: 0 + }) + + flag.label.setAll({ + fill: am5.color(0x000000), + text: dataItem.dataContext.letter, + fontSize: "0.8em" + }); + + flag.show(); + + return am5.Bullet.new(root, { + sprite: flag, + locationX: 0.5, locationY: 0.5 + }) +}) + +lineSeries.data.setAll([{ category: "", eventDate: "2019-01-15", letter: "A", description: "Something happened here" }, +{ category: "", date: new Date("2019-01-23").getTime(), letter: "B", description: "Something happened here" }, +{ category: "", date: new Date("2019-02-10").getTime(), letter: "C", description: "Something happened here" }, +{ category: "", date: new Date("2019-02-29").getTime(), letter: "D", description: "Something happened here" }, +{ category: "", date: new Date("2019-03-06").getTime(), letter: "E", description: "Something happened here" }, +{ category: "", date: new Date("2019-03-12").getTime(), letter: "F", description: "Something happened here" }, +{ category: "", date: new Date("2019-03-22").getTime(), letter: "G", description: "Something happened here" }]) + + +var cursor = chart.set("cursor", am5timeline.CurveCursor.new(root, { + behavior: "zoomX", + xAxis: xAxis, + yAxis: yAxis +})); + +series.data.setAll(data); +yAxis.data.setAll([{ category: "Module #1" }, { category: "Module #2" }, { category: "" }, { category: "Module #3" }, { category: "Module #4" }]); + +// Animate chart and series in +// https://www.amcharts.com/docs/v5/concepts/animations/#Initial_animation +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/README.md b/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/index.css b/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/index.html b/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/index.html new file mode 100644 index 00000000..9b289356 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - timeline-linear-process-diagram + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/index.js b/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/index.js new file mode 100644 index 00000000..4738fef8 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-linear-process-diagram/index.js @@ -0,0 +1,359 @@ +var alarm = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1Ljc3M3B4IiBoZWlnaHQ9IjQ1Ljc3M3B4IiB2aWV3Qm94PSIwIDAgNDUuNzczIDQ1Ljc3MyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNzczIDQ1Ljc3MzsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik01LjA4MSwxMy43MzdjMi41ODItMy45NDIsNi42MDktNi44NDksMTEuMzItNy45ODhjMC4zNjMtMC4wODcsMC42NjItMC4zNDQsMC44MDItMC42ODkNCgkJCWMwLjE0MS0wLjM0NiwwLjEwNy0wLjczOC0wLjA5MS0xLjA1NUMxNS42MDQsMS42MDEsMTIuOTM2LDAsOS44ODgsMEM1LjE3NiwwLDEuMzU0LDMuODIsMS4zNTQsOC41MzJjMCwyLDAuNjkxLDMuODM3LDEuODQ1LDUuMjkNCgkJCWMwLjIzMSwwLjI5MywwLjU4OSwwLjQ1NSwwLjk2MiwwLjQzOFM0Ljg3NywxNC4wNDgsNS4wODEsMTMuNzM3eiIvPg0KCQk8cGF0aCBkPSJNMzUuODg2LDBjLTMuMDM0LDAtNS42OTMsMS41ODYtNy4yMDQsMy45NzRjLTAuMiwwLjMxNi0wLjIzNSwwLjcxMS0wLjA5NCwxLjA1OWMwLjE0MiwwLjM0OSwwLjQ0MiwwLjYwNSwwLjgwOSwwLjY5MQ0KCQkJYzQuNzI0LDEuMTEyLDguNzY1LDMuOTk5LDExLjM2OSw3LjkyOGMwLjIwNywwLjMxMiwwLjU1MiwwLjUwNSwwLjkyNywwLjUxOGMwLjM3NSwwLjAxNCwwLjczMS0wLjE1NCwwLjk2MS0wLjQ1MQ0KCQkJYzEuMTA1LTEuNDM2LDEuNzY2LTMuMjMyLDEuNzY2LTUuMTg2QzQ0LjQxNywzLjgyLDQwLjU5OCwwLDM1Ljg4NiwweiIvPg0KCQk8cGF0aCBkPSJNNDEuNzUyLDI2LjEzMmMwLTMuMjk0LTAuODU3LTYuMzktMi4zNTEtOS4wODRjLTIuNzY5LTQuOTktNy43NDItOC41NzctMTMuNTk1LTkuNDc1Yy0wLjkzMy0wLjE0My0xLjg4LTAuMjQtMi44NTMtMC4yNA0KCQkJYy0xLjAxNiwwLTIuMDA2LDAuMTA0LTIuOTc5LDAuMjZDMTQuMTQ2LDguNTI4LDkuMTk4LDEyLjEzLDYuNDU4LDE3LjEyNmMtMS40NjcsMi42NzYtMi4zMDQsNS43NDQtMi4zMDQsOS4wMDYNCgkJCWMwLDUuNTg2LDIuNDYzLDEwLjU5Nyw2LjM0MywxNC4wNDFsLTEuNTg0LDIuMjMxYy0wLjY4MiwwLjk2MS0wLjQ1NiwyLjI5MSwwLjUwNSwyLjk3NWMwLjM3NSwwLjI2NiwwLjgwNiwwLjM5NSwxLjIzMywwLjM5NQ0KCQkJYzAuNjY4LDAsMS4zMjYtMC4zMTMsMS43NDEtMC44OThsMS41ODMtMi4yM2MyLjY2OSwxLjQ1Nyw1LjcyOCwyLjI4Nyw4Ljk3OCwyLjI4N2MzLjI0OSwwLDYuMzA4LTAuODMsOC45NzctMi4yODdsMS41ODMsMi4yMw0KCQkJYzAuNDE2LDAuNTg2LDEuMDczLDAuODk4LDEuNzQxLDAuODk4YzAuNDI3LDAsMC44NTctMC4xMjksMS4yMzItMC4zOTVjMC45NjEtMC42ODQsMS4xODgtMi4wMTQsMC41MDYtMi45NzVsLTEuNTg0LTIuMjMxDQoJCQlDMzkuMjg4LDM2LjcyOSw0MS43NTIsMzEuNzE4LDQxLjc1MiwyNi4xMzJ6IE0yMi45NTQsMzkuNjc0Yy03LjQ2OCwwLTEzLjU0Mi02LjA3NC0xMy41NDItMTMuNTQyDQoJCQljMC0yLjMyOCwwLjU5MS00LjUxOSwxLjYyOS02LjQzNWMxLjk3Ni0zLjY0NCw1LjU4LTYuMjY5LDkuODI2LTYuOTNjMC42ODItMC4xMDYsMS4zNzUtMC4xNzgsMi4wODctMC4xNzgNCgkJCWMwLjY3LDAsMS4zMjUsMC4wNjUsMS45NywwLjE2YzQuMjgyLDAuNjI4LDcuOTI1LDMuMjUzLDkuOTI0LDYuOTEzYzEuMDUsMS45MjMsMS42NDcsNC4xMjYsMS42NDcsNi40NjkNCgkJCUMzNi40OTUsMzMuNiwzMC40MjEsMzkuNjc0LDIyLjk1NCwzOS42NzR6Ii8+DQoJCTxwYXRoIGQ9Ik0zMC41NCwyOS4zbC01LjE2Ni0zLjE5Yy0wLjEwNy0wLjYwNC0wLjQzNC0xLjEyNS0wLjg5My0xLjQ5NGwwLjIzNi02LjQ4MmMwLjAyOS0wLjgyOC0wLjYxNy0xLjUyMy0xLjQ0NC0xLjU1NA0KCQkJYy0wLjgyNS0wLjAzOC0xLjUyMywwLjYxNi0xLjU1NCwxLjQ0NGwtMC4yMzcsNi40ODljLTAuNjQxLDAuNDUyLTEuMDYzLDEuMTk2LTEuMDYzLDIuMDQxYzAsMS4zODEsMS4xMTksMi40OTksMi41LDIuNDk5DQoJCQljMC4zOTMsMCwwLjc2LTAuMDk5LDEuMDktMC4yNmw0Ljk1NSwzLjA2MmMwLjI0NiwwLjE1LDAuNTE5LDAuMjIzLDAuNzg3LDAuMjIzYzAuNTAzLDAsMC45OTMtMC4yNTIsMS4yNzgtMC43MTENCgkJCUMzMS40NjUsMzAuNjYsMzEuMjQ1LDI5LjczNiwzMC41NCwyOS4zeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"; +var water = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyIDUxMiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTEyIDUxMjsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik00NDMuODgyLDUuMjhDNDQwLjg0MiwxLjkyLDQzNi41NTQsMCw0MzIuMDEsMGgtMzUyYy00LjUxMiwwLTguODMyLDEuOTItMTEuODcyLDUuMjgNCgkJCWMtMy4wMDgsMy4zMjgtNC41MTIsNy44MDgtNC4wNjQsMTIuMzJsNDgsNDgwYzAuODMyLDguMTkyLDcuNzEyLDE0LjQsMTUuOTM2LDE0LjRoMjU2YzguMjI0LDAsMTUuMTA0LTYuMjA4LDE1LjkwNC0xNC40bDQ4LTQ4MA0KCQkJQzQ0OC4zOTQsMTMuMDg4LDQ0Ni45MjIsOC42MDgsNDQzLjg4Miw1LjI4eiBNNDAxLjI5LDE2Mi40OTZjLTQwLjY3MiwxMy4xNTItOTMuNiwxOS4yMzItMTM1LjEzNi0xNC44NDgNCgkJCWMtNTIuMDY0LTQyLjcyLTExNS44NzItMzUuMzYtMTU5LjEzNi0yMi40OTZMOTcuNzA2LDMyaDMxNi42MDhMNDAxLjI5LDE2Mi40OTZ6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="; +var exercise = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNjEuODU4IDYxLjg1OCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjEuODU4IDYxLjg1ODsiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIHN0eWxlPSJmaWxsOiMwMTAwMDI7IiBkPSJNNTAuMDk3LDAuMDE0Yy05LjkxNywwLjg3NC0xNy4yMzUsNS44MjQtMjEuNTAxLDEyLjk4Yy0yLjg1OSwzLjU4NC04LjU3LDE0LjUyNi0xMC42NDcsMjAuMjU0DQoJCQljLTMuNzY2LDcuMTIzLTcuMDUsMTUuNTk4LTkuNjIsMjMuMjM4Yy0xLjU3MSw0LjY3Miw1LjQ4Myw3LjcyLDcuMDYzLDMuMDI3YzEuOTIyLTUuNzE2LDQuMjQ0LTExLjg5Niw2Ljg2OC0xNy42MzENCgkJCWMyLjYwNCw1LjgyOCw1LjI1LDExLjYzNyw4LjA5MSwxNy4zNTRjMi4yMDIsNC40MzgsOC44MjgsMC41NDYsNi42MzQtMy44NzdjLTIuOTI1LTUuODg1LTUuNjQyLTExLjg2NC04LjMxOS0xNy44NjMNCgkJCWMwLjAzNC0wLjExNiwwLjA3Ny0wLjIyOSwwLjExMy0wLjM0NGMwLjQ0NiwwLjEyNywwLjkzOCwwLjE2NiwxLjQ4LDAuMDYzYzQuMDk2LTAuNzY5LDguMTkyLTEuNTM2LDEyLjI5MS0yLjMwNQ0KCQkJYzEuNzUxLTAuMzI5LDIuNDIyLTIuMjQ1LDIuMTQ2LTMuNzc5Yy0wLjgyOC00LjU5Ny0zLjQ0Ny03Ljc5NS02LjcwNy0xMC44MjFjLTAuNDg0LTEuNjQ2LTIuMDk4LTMuMTAyLTMuODg5LTQuNTQ5DQoJCQljMy42MzEtNS44Nyw5LjU1OS05LjA1NiwxNy4yNzUtOS43MzZDNTUuMzEzLDUuNjgsNTQuMDAxLTAuMzI5LDUwLjA5NywwLjAxNHogTTM1LjE3MywyNi4xNDMNCgkJCWMxLjAxMywxLjA1NCwxLjg3NSwyLjE2MywyLjUyNiwzLjQ0N2MtMS45ODIsMC4zNzItMy45NjUsMC43NDMtNS45NDcsMS4xMTVDMzIuNzUyLDI5LjA5NSwzMy45MDMsMjcuNTc1LDM1LjE3MywyNi4xNDN6Ii8+DQoJCTxjaXJjbGUgc3R5bGU9ImZpbGw6IzAxMDAwMjsiIGN4PSI0My42NTMiIGN5PSIxNS42MzUiIHI9IjUuMjc1Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="; +var breakfast = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjQ1LjY5MnB4IiBoZWlnaHQ9IjQ1LjY5MXB4IiB2aWV3Qm94PSIwIDAgNDUuNjkyIDQ1LjY5MSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDUuNjkyIDQ1LjY5MTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0yOS40MywyNi42NDVjLTAuMzY5LTAuNDI1LTAuOTA2LTAuNzg1LTEuNDctMC43ODVIMTcuNzg5Yy0wLjU2NCwwLTEuMTAxLDAuMzYtMS40NzEsMC43ODUNCgkJCWMtMC4zNjksMC40MjYtMC41MzUsMS4wNDktMC40NTYsMS42MDdsMS43MDEsMTEuOTE3YzAuMTM3LDAuOTU4LDAuOTU3LDEuNjkyLDEuOTI0LDEuNjkyaDYuNzczYzAuOTY3LDAsMS43ODktMC43MDUsMS45MjQtMS42NjQNCgkJCWwxLjcwMS0xMS45NDhDMjkuOTY0LDI3LjY5MSwyOS43OTcsMjcuMDcsMjkuNDMsMjYuNjQ1eiIvPg0KCQk8cGF0aCBkPSJNMTQuMDY2LDMwLjQyOGMtMC42MTgtMC4yNzEtMS4zMzMtMC4yMDUtMS44ODksMC4xNzhsLTQuNTU0LDMuMTQxYy0wLjg4NSwwLjYwOS0xLjEwNiwxLjgyLTAuNDk3LDIuNzAzbDMuOTMxLDUuNzAxDQoJCQljMC41NjgsMC44MjQsMS42NzEsMS4wODIsMi41NDcsMC41OTRsMS43MDEtMC45NDhjMC42OTgtMC4zOSwxLjA4OC0xLjE2OCwwLjk3OS0xLjk2MWwtMS4wNzgtNy44OTINCgkJCUMxNS4xMTcsMzEuMjc1LDE0LjY4NCwzMC43MDEsMTQuMDY2LDMwLjQyOHoiLz4NCgkJPHBhdGggZD0iTTcuNzg0LDM5Ljg1NWMtMC4yMTctMC4yOTEtMC41ODUtMC40MjctMC45MzktMC4zNDZjLTAuMzUzLDAuMDgxLTAuNjI3LDAuMzYxLTAuNjk4LDAuNzE3bC0wLjg3OCw0LjM2MQ0KCQkJYy0wLjA3MiwwLjM1NywwLjA3NCwwLjcyMywwLjM3LDAuOTM0YzAuMjk5LDAuMjExLDAuNjksMC4yMjcsMS4wMDQsMC4wNDFsMi44Ny0xLjcwN2MwLjIyNS0wLjEzMywwLjM4My0wLjM1NSwwLjQzNC0wLjYxMQ0KCQkJYzAuMDUyLTAuMjU4LTAuMDA5LTAuNTIzLTAuMTY2LTAuNzMyTDcuNzg0LDM5Ljg1NXoiLz4NCgkJPHBhdGggZD0iTTM4LjA2NywzMy43NDZsLTQuNTU1LTMuMTQxYy0wLjU1Ny0wLjM4My0xLjI3MS0wLjQ1MS0xLjg5LTAuMTc4Yy0wLjYxNywwLjI3MS0xLjA0OSwwLjg0OC0xLjE0MiwxLjUxNmwtMS4wNzcsNy44OTINCgkJCWMtMC4xMDgsMC43OTMsMC4yOCwxLjU3MSwwLjk3OSwxLjk2MWwxLjcsMC45NDhjMC44NzYsMC40ODgsMS45NzksMC4yMywyLjU0Ny0wLjU5NGwzLjkzMS01LjcwMQ0KCQkJQzM5LjE3MiwzNS41NjYsMzguOTUsMzQuMzU1LDM4LjA2NywzMy43NDZ6Ii8+DQoJCTxwYXRoIGQ9Ik00MC40MjIsNDQuNTg3bC0wLjg3OC00LjM2Yy0wLjA3MS0wLjM1Ny0wLjM0NS0wLjYzNy0wLjY5OC0wLjcxOHMtMC43MjMsMC4wNTYtMC45MzgsMC4zNDVsLTEuOTk2LDIuNjU1DQoJCQljLTAuMTU2LDAuMjA5LTAuMjE4LDAuNDc2LTAuMTY2LDAuNzMxYzAuMDUxLDAuMjU3LDAuMjA5LDAuNDc5LDAuNDM1LDAuNjEzbDIuODY5LDEuNzA3YzAuMzEzLDAuMTg2LDAuNzA1LDAuMTcsMS4wMDQtMC4wNDENCgkJCUM0MC4zNSw0NS4zMTEsNDAuNDk1LDQ0Ljk0Myw0MC40MjIsNDQuNTg3eiIvPg0KCQk8cGF0aCBkPSJNMjMuMDE4LDIzLjk0NWMxLjQzMywwLDEzLjk4OC0wLjEyMywxMy45ODgtNC40MWMwLTEuOTEtMi40OTUtMi45OTMtNS4zODktMy42MDZjMC4xMTItMC4xODUsMC4yMTgtMC4zNzYsMC4zMTctMC41Nw0KCQkJbDEuOTg1LTAuMTc4YzEuNTkzLTAuMDM4LDIuOTIxLTEuMjM2LDMuMDk5LTIuNzk5bDAuMzk4LTMuNDAyYzAuMTAyLTAuODgxLTAuMTU2LTEuNjA0LTAuNzktMi4zMTQNCgkJCWMtMC43MjgtMC44MTMtMS43MjYtMC43NjgtMi4zODctMC43NjhoLTAuOTA3bDAuMTk1LTIuNzk2YzAuMDAyLTAuMDE0LDAuMDAyLTAuMDU2LDAuMDAzLTAuMDY5DQoJCQljMC4wMDEtMC4wMjMsMC4wMDMtMC4wNjIsMC4wMDMtMC4wODVDMzMuNTM0LDEuMzI0LDI4LjgyNSwwLDIzLjAxNywwUzEyLjUwMiwxLjMxNCwxMi41MDIsMi45MzljMCwwLjAyNCwwLDAuMDQ2LDAuMDAzLDAuMDY5DQoJCQljMCwwLjAxNCwwLDAuMDI2LDAuMDAyLDAuMDM5bDAuNjMyLDguODQ0YzAuMTA0LDEuNDc2LDAuNTYsMi44NDgsMS4yNzgsNC4wMzljLTIuODkxLDAuNjE0LTUuMzg4LDEuNjk3LTUuMzg4LDMuNjA2DQoJCQlDOS4wMywyMy44MjIsMjEuNTg2LDIzLjk0NSwyMy4wMTgsMjMuOTQ1eiBNMzIuODk3LDEyLjAwN0wzMy4yLDcuOTA2aDEuMzMzYzAuODMyLDAsMS4wODYsMC44MTEsMS4wNTMsMS4xMDNsLTAuNDExLDMuMjg3DQoJCQljLTAuMDc4LDAuNjY3LTAuNjAyLDAuOTQ1LTEuMjk2LDAuOTczYy0wLjI5OCwwLjAxMi0xLjE5LDAuMDgyLTEuMTksMC4wODJDMzIuODExLDEyLjg0OSwzMi44NTgsMTIuNTQxLDMyLjg5NywxMi4wMDd6DQoJCQkgTTIzLjAxOCwyLjE0YzMuODA4LDAsNi44OTQsMC42NDYsNi44OTQsMS40NDRjMCwwLjgtMy4wODYsMS40NDYtNi44OTQsMS40NDZjLTMuODA2LDAtNi44OTQtMC42NDYtNi44OTQtMS40NDYNCgkJCUMxNi4xMjQsMi43ODcsMTkuMjExLDIuMTQsMjMuMDE4LDIuMTR6IE0xNi4yNDIsMTcuODg1YzEuNTk2LDEuMzg0LDMuNjc2LDIuMDA5LDUuOTM4LDIuMDA5aDEuNjc1DQoJCQljMi4yNjQsMCw0LjM0NC0wLjYyNSw1LjkzOS0yLjAwOWMyLjUxLDAuNDExLDQuMTIyLDEuMSw0LjY0NSwxLjU0N2MtMC44OTksMC43NzEtNS4wMzQsMi4wMDMtMTEuNDIsMi4wMDMNCgkJCWMtNi4zODQsMC0xMC41MjEtMS4yNTItMTEuNDE4LTIuMDI0QzEyLjExOSwxOC45NjMsMTMuNzMsMTguMjk2LDE2LjI0MiwxNy44ODV6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="; +var work = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9Ijc3OS4xMXB4IiBoZWlnaHQ9Ijc3OS4xMXB4IiB2aWV3Qm94PSIwIDAgNzc5LjExIDc3OS4xMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNzc5LjExIDc3OS4xMTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik02NjIuOTE0LDYzMi4zNTFINTMwLjA3SDI1NC40NzRjLTExLjQ5LDAtMjAuODA2LDkuMzE1LTIwLjgwNiwyMC44MDZ2MTIuODA1YzAsMTEuNDksOS4zMTUsMjAuODEsMjAuODA2LDIwLjgxaDI3NS41OTgNCgkJCWgxMzIuODQ0aDY4Ljgydi01NC40MThMNjYyLjkxNCw2MzIuMzUxTDY2Mi45MTQsNjMyLjM1MXoiLz4NCgkJPGNpcmNsZSBjeD0iMjExLjE4NyIgY3k9IjE4OS42MjUiIHI9IjExNS4xOSIvPg0KCQk8cGF0aCBkPSJNNDkyLjIzNCw0NzIuMTQ3bC0yNjMuOTY5LTAuMTQ2bC02LjI1LTAuMDJ2LTMwLjYzMmwtMC4yMTctMjUuNjRjMC02MS4yNDUtNDkuNjUxLTExMC44OTgtMTEwLjg5OS0xMTAuODk4DQoJCQljLTIuMDc1LDAtNC4xMzYsMC4wNy02LjE4NCwwLjE4MmwtMC4xNTYtMC4xODJDNDYuODEzLDMwNC44MTMsMCwzNTEuNjI1LDAsNDA5LjM3MnYyOTUuMzAzaDIyMi4wMTVWNTc4Ljg3NmwtMi45MzctMC4yMzENCgkJCWMtMC4yMDktMC4wMTktMC4yNjEsMC4wMDItMC4zOTEsMC4wMDJjLTE1LjAyMSwwLTI5LjQxNy02LjMyNC0zOS41NjItMTcuMzk5bC05MC4xMTItOTguMzYzDQoJCQljLTIuODczLTMuMTM1LTIuNjYtOC4wMDMsMC40NzYtMTAuODc0YzMuMTMzLTIuODczLDguMDAzLTIuNjU5LDEwLjg3NCwwLjQ3Nmw5MC4xMTEsOTguMzYyDQoJCQljNy4zMjIsNy45OTMsMTcuNjQ4LDEyLjg4MSwyOC41MjEsMTMuMDM5YzAuNzIzLDAuMDEsMTAuNTk0LDAuMTUyLDEwLjU5NCwwLjE1MmgyNjIuNjQ1YzI1LjM3NSwwLDQ1Ljk0Ny0yMC41NzEsNDUuOTQ3LTQ1Ljk0Nw0KCQkJQzUzOC4xODIsNDkyLjcxNyw1MTcuNjA5LDQ3Mi4xNDcsNDkyLjIzNCw0NzIuMTQ3eiIvPg0KCQk8cGF0aCBkPSJNNzY1LjE5NywzMDkuMTExYy0xMC43NDQtMy42ODEtMjIuNDM5LDIuMDQ5LTI2LjEyMywxMi43OTRsLTg3LjIwOSwyNTQuNTlIMzM5LjgwM2MtMTEuMzU2LDAtMjAuNTY3LDkuMjA2LTIwLjU2NywyMC41NjQNCgkJCXM5LjIxMSwyMC41NjYsMjAuNTY3LDIwLjU2NmgzMjYuNTA3YzYuOTk0LDAsMTMuMTY4LTMuNTAzLDE2Ljg3OS04Ljg0MWMxLjI4My0xLjY5NCwyLjMzLTMuNjA3LDMuMDU5LTUuNzI5TDc3OCwzMzUuMjI1DQoJCQlDNzgxLjY3LDMyNC40ODYsNzc1Ljk0NywzMTIuNzksNzY1LjE5NywzMDkuMTExeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"; +var car = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNjEyLjAwMSA2MTIuMDAxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA2MTIuMDAxIDYxMi4wMDE7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxwYXRoIGQ9Ik01ODkuMzMzLDI3Ni4wMzNjLTExLjIzNC0zLjc1Ni04OS4zNzgtMjAuODM0LTg5LjM3OC0yMC44MzRzLTE0NC44Ni04Mi4zNzUtMTYyLjI0NS04Mi4zNzVzLTEzNi42MzksMC4wNTMtMTM2LjYzOSwwLjA1Mw0KCQljLTI5LjEzNywwLTUzLjQ4NywyMi4yMDMtODEuNjgsNDcuOTA5Yy0xMy4yODcsMTIuMTEyLTI3Ljk1MywyNS40NDItNDQuMTMsMzcuMjk5bC02MC4yNDksOC4wMTENCgkJQzYuMzA2LDI2OC44NzIsMCwyNzcuMDE4LDAsMjg2LjY0M3Y2OS4wM2MwLDExLjkxMyw5LjY1NiwyMS41NzEsMjEuNTcsMjEuNTcxaDQxLjQwMWMzLjAwNywzNC42NSwzMi4xNTMsNjEuOTMyLDY3LjU3LDYxLjkzMg0KCQljMzUuNDE1LDAsNjQuNTYzLTI3LjI4Myw2Ny41Ny02MS45MzFoMTk3LjY4N2MzLjAwNywzNC42NSwzMi4xNTMsNjEuOTMxLDY3LjU3LDYxLjkzMXM2NC41NjMtMjcuMjgzLDY3LjU3LTYxLjkzMWgzNC4wMTMNCgkJYzI2Ljk1LDAsNDAuMTE5LTExLjY0LDQzLjQyNi0yMi41NjZDNjE2LjczOSwzMjcuMDMsNjEwLjcyNCwyODMuMTg1LDU4OS4zMzMsMjc2LjAzM3ogTTEzMC41NDEsNDA2LjQ4DQoJCWMtMTkuMzgsMC0zNS4xNDgtMTUuNzY2LTM1LjE0OC0zNS4xNDZzMTUuNzY2LTM1LjE0OCwzNS4xNDgtMzUuMTQ4YzE5LjM4LDAsMzUuMTQ2LDE1Ljc2NiwzNS4xNDYsMzUuMTQ4DQoJCUMxNjUuNjg4LDM5MC43MTQsMTQ5LjkyMSw0MDYuNDgsMTMwLjU0MSw0MDYuNDh6IE0yNjEuMDA4LDI1NS4yMDFIMTQzLjEzNGM4LjUyNi02LjczNiwxNi40MDktMTMuODg2LDIzLjY3MS0yMC41MDUNCgkJYzE5LjA4Ni0xNy40MDIsMzUuNTctMzIuNDMyLDU1LjI5NC0zMi40MzJjMCwwLDE3Ljg1LTAuMDA4LDM4LjkxLTAuMDE3VjI1NS4yMDF6IE0yODkuNzExLDIwMi4yMzYNCgkJYzE0LjU4OC0wLjAwNSwyNy41OTItMC4wMDksMzQuMTE2LTAuMDA5YzE2LjI0NSwwLDgyLjEzNSwzOC4yNjQsMTA2Ljg2NCw1Mi45NzVoLTE0MC45OEwyODkuNzExLDIwMi4yMzZMMjg5LjcxMSwyMDIuMjM2eg0KCQkgTTQ2My4zNjcsNDA2LjQ4Yy0xOS4zOCwwLTM1LjE0Ni0xNS43NjYtMzUuMTQ2LTM1LjE0NnMxNS43NjYtMzUuMTQ4LDM1LjE0Ni0zNS4xNDhjMTkuMzgsMCwzNS4xNDgsMTUuNzY2LDM1LjE0OCwzNS4xNDgNCgkJQzQ5OC41MTUsMzkwLjcxNCw0ODIuNzQ3LDQwNi40OCw0NjMuMzY3LDQwNi40OHoiLz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"; +var coffee = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDUxMS45OTkgNTExLjk5OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNTExLjk5OSA1MTEuOTk5OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8Zz4NCgkJPHBhdGggZD0iTTE3OS4zNjEsOTkuOTAzYy0xMS40MS0xMS40MS0xNi40NTQtMTcuMDA1LTE2LjQ1Mi0zMC4wODljLTAuMDAyLTEzLjA3OSw1LjA0NC0xOC42NzQsMTYuNDU3LTMwLjA4OQ0KCQkJYzkuMDg5LTkuMDg3LDkuMDg5LTIzLjgyLDAuMDAyLTMyLjkwOWMtOS4wODctOS4wOS0yMy44MjUtOS4wODctMzIuOTE0LTAuMDAyYy0xMi42OTksMTIuNjk4LTMwLjA5NSwzMC4wOS0zMC4wOSw2Mi45OTkNCgkJCWMtMC4wMDUsMzIuOTE0LDE3LjM4OCw1MC4zMDUsMzAuMDg5LDYzLjAwMWMxMS40MTEsMTEuNDEzLDE2LjQ1NywxNy4wMTEsMTYuNDU3LDMwLjA5MmMwLDEyLjg1NCwxMC40MiwyMy4yNzMsMjMuMjczLDIzLjI3Mw0KCQkJczIzLjI3My0xMC40MTgsMjMuMjczLTIzLjI3M0MyMDkuNDU0LDEyOS45OTMsMTkyLjA2MiwxMTIuNjAxLDE3OS4zNjEsOTkuOTAzeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KCTxnPg0KCQk8cGF0aCBkPSJNMjg3Ljk2Nyw5OS45MDNjLTExLjQxLTExLjQxLTE2LjQ1NC0xNy4wMDUtMTYuNDUyLTMwLjA4OWMtMC4wMDItMTMuMDc5LDUuMDQ0LTE4LjY3NCwxNi40NTctMzAuMDg5DQoJCQljOS4wODktOS4wODcsOS4wODktMjMuODIsMC4wMDItMzIuOTA5Yy05LjA4Ny05LjA5LTIzLjgyNS05LjA4Ny0zMi45MTQtMC4wMDJjLTEyLjY5OSwxMi42OTgtMzAuMDk1LDMwLjA5Mi0zMC4wOSw2Mi45OTkNCgkJCWMtMC4wMDUsMzIuOTE0LDE3LjM4OCw1MC4zMDUsMzAuMDg5LDYzLjAwMWMxMS40MTEsMTEuNDEzLDE2LjQ1NywxNy4wMTEsMTYuNDU3LDMwLjA5MmMwLDEyLjg1NCwxMC40MiwyMy4yNzMsMjMuMjczLDIzLjI3Mw0KCQkJczIzLjI3My0xMC40MTgsMjMuMjczLTIzLjI3M0MzMTguMDYxLDEyOS45OTMsMzAwLjY2OCwxMTIuNjAxLDI4Ny45NjcsOTkuOTAzeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KCTxnPg0KCQk8cGF0aCBkPSJNMzgxLjQwMSw0MDMuMzkzaDIxLjk5M2MwLjAyMiwwLDAuMDM5LTAuMDAzLDAuMDYxLTAuMDAzYzQ3LjAyMy0wLjAzMSw4NS4yNzMtMzguMjk4LDg1LjI3My04NS4zMzENCgkJCWMwLTQ3LjA1My0zOC4yODEtODUuMzM0LTg1LjMzNC04NS4zMzRoLTMxLjAzSDYyLjA2Yy0xMi44NTMsMC0yMy4yNzMsMTAuNDIyLTIzLjI3MywyMy4yNzN2NzcuNTc2DQoJCQljMCw1Mi4xOTMsMjIuNTI4LDk5LjIyMSw1OC4zNywxMzEuODc5SDQ2LjU0NWMtMTIuODUzLDAtMjMuMjczLDEwLjQxOC0yMy4yNzMsMjMuMjczYzAsMTIuODUxLDEwLjQyLDIzLjI3MywyMy4yNzMsMjMuMjczDQoJCQloMTcwLjY2N2gxNzAuNjY3YzEyLjg1MywwLDIzLjI3My0xMC40MjIsMjMuMjczLTIzLjI3M2MwLTEyLjg1NC0xMC40Mi0yMy4yNzMtMjMuMjczLTIzLjI3M2gtNTAuNjEyDQoJCQlDMzU2LjEwNCw0NDguMjg5LDM3MS4yNTcsNDI3LjE1OCwzODEuNDAxLDQwMy4zOTN6IE0zOTUuNjM3LDMzMy41NzV2LTU0LjMwM2g3Ljc1OGMyMS4zODgsMCwzOC43ODgsMTcuNCwzOC43ODgsMzguNzg4DQoJCQlzLTE3LjQsMzguNzg4LTM4Ljc4OCwzOC43ODhjLTAuMDExLDAtMC4wMiwwLTAuMDMxLDBoLTkuMjQ1QzM5NS4xMTUsMzQ5LjIyOSwzOTUuNjM3LDM0MS40NjEsMzk1LjYzNywzMzMuNTc1eiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"; +var dinner = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDUxMiA1MTIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDUxMiA1MTI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxnPg0KCTxnPg0KCQk8cGF0aCBkPSJNMjY0LjE4MSw3Ni45MDljLTkzLjY0NiwwLTE2OS41NjEsNzUuOTE1LTE2OS41NjEsMTY5LjU2MXM3NS45MTUsMTY5LjU2MSwxNjkuNTYxLDE2OS41NjENCgkJCXMxNjkuNTYxLTc1LjkxNSwxNjkuNTYxLTE2OS41NjFTMzU3LjgyNyw3Ni45MDksMjY0LjE4MSw3Ni45MDl6IE0yNjQuMTgsMzc1LjEyOWMtNzAuOTQyLDAtMTI4LjY1OC01Ny43MTYtMTI4LjY1OC0xMjguNjU4DQoJCQlzNTcuNzE2LTEyOC42NTgsMTI4LjY1OC0xMjguNjU4czEyOC42NTgsNTcuNzE2LDEyOC42NTgsMTI4LjY1OFMzMzUuMTIzLDM3NS4xMjksMjY0LjE4LDM3NS4xMjl6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0yNjQuMTgsMTUyLjI5OWMtNTEuOTI2LDAtOTQuMTcxLDQyLjI0NS05NC4xNzEsOTQuMTcxYzAsNTEuOTI2LDQyLjI0NSw5NC4xNzEsOTQuMTcxLDk0LjE3MQ0KCQkJYzUxLjkyNiwwLDk0LjE3MS00Mi4yNDUsOTQuMTcxLTk0LjE3MVMzMTYuMTA3LDE1Mi4yOTksMjY0LjE4LDE1Mi4yOTl6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik01MDEuMzE1LDI2MC42ODdWNTQuNjRjMC0xLjk4OC0xLjI2OS0zLjc1NS0zLjE1NS00LjM5Yy0xLjg4NC0wLjYzNC0zLjk2MywwLjAwNy01LjE2NiwxLjU5MQ0KCQkJYy0yNS43MDgsMzMuOTAzLTM5LjYyMiw3NS4yODMtMzkuNjIyLDExNy44M3Y3NS4zNzhjMCw4LjY0NSw3LjAwOCwxNS42NTQsMTUuNjU0LDE1LjY1NGg2LjUyNg0KCQkJYy02LjQzMyw2Ni40NDMtMTAuNjg0LDE1OS4zNy0xMC42ODQsMTcwLjI1MWMwLDE3LjE0MiwxMC41NTEsMzEuMDM4LDIzLjU2NiwzMS4wMzhjMTMuMDE1LDAsMjMuNTY2LTEzLjg5NywyMy41NjYtMzEuMDM4DQoJCQlDNTEyLDQyMC4wNzIsNTA3Ljc0OSwzMjcuMTMsNTAxLjMxNSwyNjAuNjg3eiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KCTxnPg0KCQk8cGF0aCBkPSJNNjguNDE3LDIxOS44NDNjMTMuMDQyLTcuOSwyMS43NTktMjIuMjI0LDIxLjc1OS0zOC41ODZsLTYuNDYtMTA1LjYyMWMtMC4yNDctNC4wMjYtMy41ODQtNy4xNjUtNy42MTgtNy4xNjUNCgkJCWMtNC4zNjMsMC03LjgzOSwzLjY1NS03LjYyMiw4LjAxbDQuMjAxLDg0LjcwOWMwLDQuNzYyLTMuODYxLDguNjIxLTguNjIxLDguNjIxYy00Ljc2MSwwLTguNjIxLTMuODYxLTguNjIxLTguNjIxbC0yLjA5OS04NC42NzQNCgkJCWMtMC4xMTEtNC40NzUtMy43Ny04LjA0NC04LjI0Ny04LjA0NGMtNC40NzcsMC04LjEzNSwzLjU3LTguMjQ3LDguMDQ0bC0yLjA5OSw4NC42NzRjMCw0Ljc2Mi0zLjg2MSw4LjYyMS04LjYyMSw4LjYyMQ0KCQkJYy00Ljc2MSwwLTguNjIxLTMuODYxLTguNjIxLTguNjIxbDQuMjAxLTg0LjcwOWMwLjIxNi00LjM1Ny0zLjI2Mi04LjAxLTcuNjIyLTguMDFjLTQuMDM0LDAtNy4zNzEsMy4xMzktNy42MTcsNy4xNjVMMCwxODEuMjU4DQoJCQljMCwxNi4zNjIsOC43MTYsMzAuNjg1LDIxLjc1OSwzOC41ODZjOC40ODgsNS4xNDEsMTMuMjIsMTQuNzUzLDEyLjEyNiwyNC42MTdjLTcuMzYzLDY2LjM1OC0xMi4zNjMsMTc0LjY5My0xMi4zNjMsMTg2LjQ5NA0KCQkJYzAsMTcuMTQyLDEwLjU1MSwzMS4wMzgsMjMuNTY2LDMxLjAzOGMxMy4wMTUsMCwyMy41NjYtMTMuODk3LDIzLjU2Ni0zMS4wMzhjMC0xMS44MDEtNS4wMDEtMTIwLjEzNi0xMi4zNjMtMTg2LjQ5NA0KCQkJQzU1LjE5NiwyMzQuNjAyLDU5LjkzMywyMjQuOTgyLDY4LjQxNywyMTkuODQzeiIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"; +var book = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDI5Ni45OTkgMjk2Ljk5OSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjk2Ljk5OSAyOTYuOTk5OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8Zz4NCgkJPGc+DQoJCQk8cGF0aCBkPSJNNDUuNDMyLDM1LjA0OWMtMC4wMDgsMC0wLjAxNywwLTAuMDI1LDBjLTIuODA5LDAtNS40NTEsMS4wOTUtNy40NDYsMy4wODVjLTIuMDE3LDIuMDEyLTMuMTI4LDQuNjkxLTMuMTI4LDcuNTQzDQoJCQkJdjE1OS4zNjVjMCw1Ljg0NCw0Ljc3MywxMC42MSwxMC42NDEsMTAuNjI1YzI0LjczOCwwLjA1OSw2Ni4xODQsNS4yMTUsOTQuNzc2LDM1LjEzNlY4NC4wMjNjMC0xLjk4MS0wLjUwNi0zLjg0Mi0xLjQ2MS01LjM4Mg0KCQkJCUMxMTUuMzIyLDQwLjg0OSw3MC4yMjYsMzUuMTA3LDQ1LjQzMiwzNS4wNDl6Ii8+DQoJCQk8cGF0aCBkPSJNMjYyLjE2NywyMDUuMDQyVjQ1LjY3NmMwLTIuODUyLTEuMTExLTUuNTMxLTMuMTI4LTcuNTQzYy0xLjk5NS0xLjk5LTQuNjM5LTMuMDg1LTcuNDQ1LTMuMDg1Yy0wLjAwOSwwLTAuMDE4LDAtMC4wMjYsMA0KCQkJCWMtMjQuNzkzLDAuMDU5LTY5Ljg4OSw1LjgwMS05My4zNTcsNDMuNTkzYy0wLjk1NSwxLjU0LTEuNDYsMy40MDEtMS40Niw1LjM4MnYxNjYuNzc5DQoJCQkJYzI4LjU5Mi0yOS45MjEsNzAuMDM4LTM1LjA3Nyw5NC43NzYtMzUuMTM2QzI1Ny4zOTQsMjE1LjY1MSwyNjIuMTY3LDIxMC44ODUsMjYyLjE2NywyMDUuMDQyeiIvPg0KCQkJPHBhdGggZD0iTTI4Ni4zNzMsNzEuODAxaC03LjcwNnYxMzMuMjQxYzAsMTQuOTIxLTEyLjE1NywyNy4wODgtMjcuMTAxLDI3LjEyNWMtMjAuOTgzLDAuMDUtNTUuNTgxLDQuMTUzLTgwLjA4NCwyNy4zNDQNCgkJCQljNDIuMzc4LTEwLjM3Niw4Ny4wNTItMy42MzEsMTEyLjUxMiwyLjE3MWMzLjE3OSwwLjcyNCw2LjQ2NC0wLjAyNCw5LjAxMS0yLjA1NGMyLjUzOC0yLjAyNSwzLjk5NC01LjA1MiwzLjk5NC04LjMwMVY4Mi40MjcNCgkJCQlDMjk3LDc2LjU2OCwyOTIuMjMyLDcxLjgwMSwyODYuMzczLDcxLjgwMXoiLz4NCgkJCTxwYXRoIGQ9Ik0xOC4zMzIsMjA1LjA0MlY3MS44MDFoLTcuNzA2QzQuNzY4LDcxLjgwMSwwLDc2LjU2OCwwLDgyLjQyN3YxNjguODk3YzAsMy4yNSwxLjQ1Niw2LjI3NiwzLjk5NCw4LjMwMQ0KCQkJCWMyLjU0NSwyLjAyOSw1LjgyNywyLjc4LDkuMDExLDIuMDU0YzI1LjQ2LTUuODAzLDcwLjEzNS0xMi41NDcsMTEyLjUxMS0yLjE3MWMtMjQuNTAyLTIzLjE5LTU5LjEtMjcuMjkyLTgwLjA4My0yNy4zNDINCgkJCQlDMzAuNDksMjMyLjEzLDE4LjMzMiwyMTkuOTYzLDE4LjMzMiwyMDUuMDQyeiIvPg0KCQk8L2c+DQoJPC9nPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPC9zdmc+DQo="; +var home = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE4LjEuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMjcuMDIgMjcuMDIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDI3LjAyIDI3LjAyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8cGF0aCBzdHlsZT0iZmlsbDojMDMwMTA0OyIgZD0iTTMuNjc0LDI0Ljg3NmMwLDAtMC4wMjQsMC42MDQsMC41NjYsMC42MDRjMC43MzQsMCw2LjgxMS0wLjAwOCw2LjgxMS0wLjAwOGwwLjAxLTUuNTgxDQoJCWMwLDAtMC4wOTYtMC45MiwwLjc5Ny0wLjkyaDIuODI2YzEuMDU2LDAsMC45OTEsMC45MiwwLjk5MSwwLjkybC0wLjAxMiw1LjU2M2MwLDAsNS43NjIsMCw2LjY2NywwDQoJCWMwLjc0OSwwLDAuNzE1LTAuNzUyLDAuNzE1LTAuNzUyVjE0LjQxM2wtOS4zOTYtOC4zNThsLTkuOTc1LDguMzU4QzMuNjc0LDE0LjQxMywzLjY3NCwyNC44NzYsMy42NzQsMjQuODc2eiIvPg0KCTxwYXRoIHN0eWxlPSJmaWxsOiMwMzAxMDQ7IiBkPSJNMCwxMy42MzVjMCwwLDAuODQ3LDEuNTYxLDIuNjk0LDBsMTEuMDM4LTkuMzM4bDEwLjM0OSw5LjI4YzIuMTM4LDEuNTQyLDIuOTM5LDAsMi45MzksMA0KCQlMMTMuNzMyLDEuNTRMMCwxMy42MzV6Ii8+DQoJPHBvbHlnb24gc3R5bGU9ImZpbGw6IzAzMDEwNDsiIHBvaW50cz0iMjMuODMsNC4yNzUgMjEuMTY4LDQuMjc1IDIxLjE3OSw3LjUwMyAyMy44Myw5Ljc1MiAJIi8+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="; +var beer = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjIwLjQ5NXB4IiBoZWlnaHQ9IjIwLjQ5NXB4IiB2aWV3Qm94PSIwIDAgMjAuNDk1IDIwLjQ5NSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjAuNDk1IDIwLjQ5NTsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0xNi4xOTcsOC41NWgtMC45MTFjLTAuMTg4LDAtMC4zNywwLjAxOS0wLjU0OCwwLjA1MlY2LjU0NWMwLTAuMTEyLTAuMDEzLTAuMjIxLTAuMDMzLTAuMzI3DQoJCQljMC41OTktMC40NDMsMC45OTEtMS4xNDgsMC45OTEtMS45NDhjMC0xLjQ5LTEuMzcyLTIuNjg1LTIuODgzLTIuMzg2Yy0wLjUtMC41MjYtMS4yMTMtMC44MjMtMS45NDYtMC43ODYNCgkJCUMxMC4zOTksMC40Miw5LjYyLDAsOC43ODksMEM4LjExNCwwLDcuNDc2LDAuMjY4LDcuMDA2LDAuNzM0QzYuODgxLDAuNjgzLDYuNzUzLDAuNjQyLDYuNjIzLDAuNjEyTDYuNDU5LDAuNTgNCgkJCUM2LjMzMywwLjU2LDYuMjA3LDAuNTQ5LDYuMDc4LDAuNTQ3Yy0wLjE4OS0wLjAxNS0wLjM3MS0wLjAxNC0wLjU1LDAuMDAxSDUuNDc5djAuMDA0QzQuNDA1LDAuNjYsMy41LDEuMjk2LDMuMTQ1LDIuMTgzDQoJCQlDMi4wOSwyLjM4MywxLjI5LDMuMzEyLDEuMjksNC40MjJjMCwwLjc3NSwwLjM5LDEuNDU4LDAuOTgyLDEuODdDMi4yNiw2LjM3NSwyLjI0Nyw2LjQ1OCwyLjI0Nyw2LjU0NXYxMi4zMDkNCgkJCWMwLDAuOTA1LDAuNzM2LDEuNjQyLDEuNjQxLDEuNjQyaDkuMjA4YzAuOTA1LDAsMS42NDItMC43MzYsMS42NDItMS42NDJWMTYuMzRjMC4xNzgsMC4wMzMsMC4zNiwwLjA1MywwLjU0OCwwLjA1M2gwLjkxMQ0KCQkJYzEuNjU5LDAsMy4wMDktMS4zNTEsMy4wMDktMy4wMXYtMS44MjJDMTkuMjA2LDkuOTAxLDE3Ljg1Niw4LjU1LDE2LjE5Nyw4LjU1eiBNMTMuNjQzLDE4Ljg1NGMwLDAuMzAyLTAuMjQ0LDAuNTQ3LTAuNTQ3LDAuNTQ3DQoJCQlIMy44ODhjLTAuMzAyLDAtMC41NDctMC4yNDUtMC41NDctMC41NDdWNi41NDVjMC0wLjMwMiwwLjI0NS0wLjU0NywwLjU0Ny0wLjU0N2g5LjIwOGMwLjMwMywwLDAuNTQ3LDAuMjQ1LDAuNTQ3LDAuNTQ3VjE4Ljg1NHoNCgkJCSBNMTQuMTMsNS4yOEwxNC4xMyw1LjI4Yy0wLjI4Mi0wLjIzMi0wLjY0LTAuMzc3LTEuMDM0LTAuMzc3SDMuODg4Yy0wLjQxNywwLTAuNzkzLDAuMTYxLTEuMDgzLDAuNDE3DQoJCQlDMi41NDksNS4xMDMsMi4zODQsNC43ODMsMi4zODQsNC40MjJjMC0wLjY1MSwwLjUyOS0xLjE4MiwxLjE4MS0xLjE4NGwwLjQ0OC0wLjAwMkw0LjEsMi43OTdDNC4yMDIsMi4yODMsNC43MzUsMS43NCw1LjU1MiwxLjY0NQ0KCQkJaDAuNjAzYzAuMjQ1LDAuMDE3LDAuNDgxLDAuMDk3LDAuNjg5LDAuMjM0bDAuNDUyLDAuMjk5bDAuMzAzLTAuNDQ5QzcuODY3LDEuMzMyLDguMzEyLDEuMDk0LDguNzksMS4wOTQNCgkJCWMwLjU1NiwwLDEuMDUsMC4zMTUsMS4yOTIsMC44MjNsMC4xODQsMC4zODdsMC40Mi0wLjA4NmMwLjU3MS0wLjExNSwxLjE1NCwwLjEyNCwxLjQ3OCwwLjU5N2wwLjIzOSwwLjM1MmwwLjQtMC4xNDcNCgkJCWMwLjE2MS0wLjA1OSwwLjMxMi0wLjA4OCwwLjQ2MS0wLjA4OGMwLjczNywwLDEuMzM4LDAuNiwxLjMzOCwxLjMzOEMxNC42MDIsNC42NzUsMTQuNDE2LDUuMDM1LDE0LjEzLDUuMjh6IE0xNy41NjUsMTMuMzgzDQoJCQljMCwwLjc1NC0wLjYxMywxLjM2OC0xLjM2OCwxLjM2OGgtMC45MTFjLTAuMTk1LDAtMC4zOC0wLjA0Mi0wLjU0OC0wLjExNnYtNC4zMjZjMC4xNjgtMC4wNzQsMC4zNTMtMC4xMTYsMC41NDgtMC4xMTZoMC45MTENCgkJCWMwLjc1NCwwLDEuMzY4LDAuNjEzLDEuMzY4LDEuMzY4VjEzLjM4M3oiLz4NCgkJPHJlY3QgeD0iMy44ODgiIHk9IjguMDAzIiB3aWR0aD0iOS4yMSIgaGVpZ2h0PSIxMC44NTEiLz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="; +var dance = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE2LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgd2lkdGg9IjI0OC45MTRweCIgaGVpZ2h0PSIyNDguOTE0cHgiIHZpZXdCb3g9IjAgMCAyNDguOTE0IDI0OC45MTQiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDI0OC45MTQgMjQ4LjkxNDsiDQoJIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPGc+DQoJPGc+DQoJCTxwYXRoIGQ9Ik0yMDEuNzExLDQ5LjU4M2MtNS40NiwwLTkuODk1LDMuNzcxLTkuODk1LDguNDE5YzAsNC42NTMsNC40MzUsOC40MTksOS44OTUsOC40MTljNS4zMTYsMCw5LjY0My0zLjU2Niw5Ljg3Ni04LjAzMg0KCQkJYzUuMTA1LTEzLjYsNC4xMDYtMjQuMDc4LDMuMDQzLTI5LjEzN2MtMC43NDctMy41MzMtNC4yLTYuMjk1LTcuODUxLTYuMjk1bC0yMy4yNy0wLjAxYy0xLjg1NywwLTMuNTk0LDAuNzI0LTQuOSwyLjAzDQoJCQljLTEuMzgyLDEuMzkxLTIuMTM4LDMuMjc2LTIuMTI5LDUuMzJjMC4wMzgsNS42OTktMS4yMjMsMTMuMzA2LTIuMzA1LDE4Ljc3NmMtMC45MDYtMC4yMzMtMS44NzctMC4zNjQtMi44ODUtMC4zNjQNCgkJCWMtNS40NjEsMC05Ljg5NSwzLjc3MS05Ljg5NSw4LjQyNGMwLDQuNjQ4LDQuNDM4LDguNDE5LDkuODk1LDguNDE5YzUuMDU1LDAsOS4yMTMtMy4yMiw5LjgxOS03LjM3OGwwLjA3NSwwLjAxOQ0KCQkJYzAuMTYzLTAuNjUzLDMuODI2LTE1LjUyMyw0LjA3OS0yNi40NTNsMjAuODk4LDAuMDA5YzAuNjY4LDMuNjE3LDEuMTExLDkuOTgzLTEuMTI0LDE4LjMyMw0KCQkJQzIwMy45ODgsNDkuNzY1LDIwMi44NzgsNDkuNTgzLDIwMS43MTEsNDkuNTgzeiIvPg0KCQk8cGF0aCBkPSJNMzUuODY0LDEzNy44MzJjMi4wMjEsNC4xOTEsNy42NDksNS42NjEsMTIuNTY4LDMuMjk1YzQuNzkzLTIuMzAxLDcuMTQxLTcuMzkzLDUuNDE0LTExLjUxOQ0KCQkJYy0xLjMtMTQuNDcyLTYuNzQ0LTIzLjQ3NS05Ljg5Ni0yNy41NzdjLTIuMjA4LTIuODUyLTYuNTE1LTMuODUxLTkuODA4LTIuMjY0bC0yMC45NjksMTAuMDg1DQoJCQljLTEuNjczLDAuODAzLTIuOTI2LDIuMjA4LTMuNTMzLDMuOTU4Yy0wLjY0NCwxLjg0OS0wLjUwMSwzLjg4MywwLjM5Miw1LjcxN2MyLjUwNCw1LjEyLDQuNjY5LDEyLjUyMiw2LjA2LDE3LjkyMQ0KCQkJYy0wLjkyMSwwLjE4My0xLjg1MSwwLjQ4NS0yLjc1MywwLjkyNWMtNC45MTcsMi4zNjYtNy4yNzMsNy42ODctNS4yNTUsMTEuODc3YzIuMDIxLDQuMTkxLDcuNjQ1LDUuNjY2LDEyLjU2OSwzLjI5NQ0KCQkJYzQuNTQ4LTIuMTg4LDYuOS02LjkwMiw1LjY0Mi0xMC45MDZsMC4wNzctMC4wMTVjLTAuMTMzLTAuNjYyLTMuMjg4LTE1LjY0NC03Ljc5OS0yNS42MDhsMTguODMtOS4wNTQNCgkJCWMyLjE3LDIuOTczLDUuMzM0LDguNTEzLDYuOTM1LDE2Ljk5OGMtMS4wNzYsMC4xNjgtMi4xNTYsMC40OS0zLjIwOCwwLjk5NEMzNi4yMDIsMTI4LjMyLDMzLjg0NiwxMzMuNjQyLDM1Ljg2NCwxMzcuODMyeiIvPg0KCQk8Y2lyY2xlIGN4PSIxMTAuNTY1IiBjeT0iMzguMTM2IiByPSIyMS4wMDQiLz4NCgkJPHBhdGggZD0iTTE0LjMzNywyMzIuODY4aDIyMC4yMzljNy45MjEsMCwxNC4zMzgtNi4yNzIsMTQuMzM4LTE0LjAyMWMwLTcuNzQ3LTYuNDE3LTE0LjAyNC0xNC4zMzgtMTQuMDI0aC02Ny4yNjINCgkJCWMwLjM5My0wLjE0NSwwLjc5NC0wLjI4LDEuMTc2LTAuNTA0YzMuMjkxLTEuOTkzLDQuMzUxLTYuMjc3LDIuMzU3LTkuNTcybC0zOS4yNzgtNjUuMDE3di0zMi4xMQ0KCQkJYzE3Ljg4LDE2LjEzOSwyNi41MjMsNDEuOTg1LDI2LjY3Nyw0Mi40NTdjMC45NTcsMi45NDksMy42OTIsNC44MjUsNi42MzcsNC44MjVjMC43MDUsMCwxLjQzNC0wLjEwNiwyLjEzOC0wLjMzNg0KCQkJYzMuNjczLTEuMTgxLDUuNjgtNS4xMTUsNC40OTQtOC43NzNjLTAuNTg4LTEuODA3LTEyLjY2MS0zOC4yNjEtMzkuOTY5LTU1LjY5N2MtMC4xMTEtOS41MjUtNy44NTItMTcuMjE3LTE3LjQwNi0xNy4yMTdoLTcuMTU5DQoJCQljLTQuNTg3LDAtOC43MzIsMS44MTEtMTEuODQzLDQuNzA5Yy0yMS40NjQtMTUuMzIyLTMxLjc5LTQ2LjE5NC0zMS45NjItNDYuNzE3Yy0xLjE5LTMuNjU0LTUuMTA4LTUuNjctOC43NzQtNC40ODUNCgkJCWMtMy42NzEsMS4xODUtNS42NzgsNS4xMTUtNC40OTIsOC43NzRjMC41ODEsMS44MDEsMTIuNTY0LDM3Ljk4LDM5LjY0Miw1NS41MDF2NTUuNzkxTDc2LjA0NSwxNjAuMTUNCgkJCWMtMS4xMDQsMS45MzctMS4yMTgsNC4yNzktMC4yOTYsNi4zMTlsMTUuNjgxLDM0Ljc1MWMwLjc5MywxLjc2LDIuMjQ1LDIuOTc4LDMuOTE4LDMuNjAzSDE0LjMzNw0KCQkJQzYuNDE5LDIwNC44MjMsMCwyMTEuMTA1LDAsMjE4Ljg0OEMwLDIyNi41OTEsNi40MTksMjMyLjg2OCwxNC4zMzcsMjMyLjg2OHogTTg5LjkxNCwxNjMuOTY4bDEzLjMwMS0yMy4zMzVoMTguNjQ3bDM3LjA0Nyw2MS4zMjUNCgkJCWMwLjg0NSwxLjM5NiwyLjExNCwyLjMzOCwzLjUyOCwyLjg3aC02Mi4xNTZjMC4xMTktMC4wNDcsMC4yNDgtMC4wNjUsMC4zNjctMC4xMTdjMy41MDctMS41ODIsNS4wNzUtNS43MTIsMy40ODktOS4yMjINCgkJCUw4OS45MTQsMTYzLjk2OHoiLz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="; +var drink = "data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMyIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNjQgNjQiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNjQgNjQiIHdpZHRoPSI1MTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTE3LjYwNiAxLjIwNS0xLjIxMiAxLjU5IDEzLjM5MyAxMC4yMDVoMy4zMDF6Ii8+PHBhdGggZD0ibTIzIDI0YzAgNC45NjIgNC4wMzcgOSA5IDlzOS00LjAzOCA5LTl2LTJjMC0uNTUyLjQ0Ny0xIDEtMSA0LjYyNSAwIDguNDQ1LTMuNTA2IDguOTQ0LThoLTE3Ljg1Nmw1LjUxOCA0LjIwNS0xLjIxMyAxLjU5MS03LjYwNi01Ljc5NmgtMTYuNzMxYy40OTkgNC40OTQgNC4zMTkgOCA4Ljk0NCA4IC41NTMgMCAxIC40NDggMSAxem02LThjMi4yMDYgMCA0IDEuNzk0IDQgNHMtMS43OTQgNC00IDQtNC0xLjc5NC00LTQgMS43OTQtNCA0LTR6Ii8+PHBhdGggZD0ibTMzIDU3di0yMi4wNTFjLS4zMy4wMy0uNjYyLjA1MS0xIC4wNTFzLS42Ny0uMDIxLTEtLjA1MXYyMi4wNTFjMCAuNDA0LS4yNDMuNzY4LS42MTUuOTIzbC03LjM4NSAzLjA3N2gxOGwtNy4zODUtMy4wNzdjLS4zNzItLjE1NS0uNjE1LS41MTktLjYxNS0uOTIzeiIvPjxjaXJjbGUgY3g9IjI5IiBjeT0iMjAiIHI9IjIiLz48Y2lyY2xlIGN4PSI0MyIgY3k9IjQ5IiByPSIyIi8+PGNpcmNsZSBjeD0iNTIiIGN5PSIzOCIgcj0iNSIvPjxjaXJjbGUgY3g9IjE3IiBjeT0iNDQiIHI9IjIiLz48Y2lyY2xlIGN4PSI4IiBjeT0iMzMiIHI9IjUiLz48L3N2Zz4="; +var drunk = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCINCgkgdmlld0JveD0iMCAwIDI5OS40NTMgMjk5LjQ1MyIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjk5LjQ1MyAyOTkuNDUzOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8ZyBpZD0iWE1MSURfMTQ1NF8iPg0KCTxnPg0KCQk8Zz4NCgkJCTxjaXJjbGUgY3g9IjE3Ny42NjciIGN5PSIzMy41MDciIHI9IjMzLjUwOCIvPg0KCQkJPHBhdGggZD0iTTIzNC4xOTQsOTYuNjE1bC00OS43MzIsMTYuODY2bC0zOC45Ny0zMC4wNzZsMzQuMjI0LDE0LjQxMmMtMC4xMDctOS44ODUtNi43MjMtMTguODk3LTE2LjczNi0yMS41OTlsLTM4Ljk3Mi0xMC41MTUNCgkJCQljLTEyLjA2OS0zLjI1Ny0yNC40OTMsMy44ODgtMjcuNzUsMTUuOTU4Yy0wLjY5NCwyLjU3Mi0xNi44NDQsNjEuMjktMjcuMDgzLDk4LjU0MmMtMi40MTEsOC43NzQtMi41MDEsMTguMDY0LTAuMjE4LDI2Ljg3Mw0KCQkJCWMzLjMxOCwxMi44MDQsNy45NzksMzAuNzk0LDE0LjQ2NCw1NS44MTlsLTUxLjc1NS0wLjI3MWMtMC4wMzIsMC0wLjA2NSwwLTAuMDk3LDBjLTEwLjAxNiwwLTE4LjE2Miw4LjA5My0xOC4yMTUsMTguMTIxDQoJCQkJYy0wLjA1MywxMC4wNjEsOC4wNjEsMTguMjYsMTguMTIxLDE4LjMxMmw3NS40MjEsMC4zOTVjMC4wMzEsMCwwLjA2NCwwLDAuMDk1LDBjMTEuOTE3LTAuMDAxLDIwLjYxOS0xMS4yNjksMTcuNjM1LTIyLjc4Ng0KCQkJCWwtMTguNjg0LTcyLjEwNmwxMi42ODYsMy40MjNsMTcuMDU1LDY1LjgxOGMyLjI4LDguOCwwLjMyNSwxOC4zMzMtNS4yMjMsMjUuNTMxbDIyLjc5NiwwLjEyYzAuMDMxLDAsMC4wNjQsMCwwLjA5NSwwDQoJCQkJYzExLjkxNi0wLjAwMSwyMC42MTktMTEuMjY5LDE3LjYzNS0yMi43ODZsLTE4LjkzMS03My4wNjJsMTIuNzI5LTQ3LjE3OWMtMS40MTktMS40MTksMS40NDcsMi4xODUtMzcuODQtNDguOTg1bDQ1LjQxMywzNS4wNDkNCgkJCQljNC4wMjksMy4xMSw5LjM0MSwzLjk4OSwxNC4xNTEsMi4zNTlsNTcuNDM5LTE5LjQ4MWM3Ljk0MS0yLjY5MiwxMi4xOTUtMTEuMzExLDkuNTAyLTE5LjI1Mg0KCQkJCUMyNTAuNzUzLDk4LjE3NywyNDIuMTM0LDkzLjkyMywyMzQuMTk0LDk2LjYxNXoiLz4NCgkJCTxwYXRoIGQ9Ik0yODAuNzI2LDYzLjgxM2gtNDEuNjU3Yy0yLjk2OSwwLTUuMzc1LDIuNDA2LTUuMzc1LDUuMzc1YzAsMi45NjksMi40MDcsNS4zNzUsNS4zNzUsNS4zNzVoMC40NjRsMC41MjYsNi4wODENCgkJCQljMTIuMjc1LDAuNDAzLDIzLjU4NSw4LjI3OSwyNy43NjMsMjAuNTk3YzMuNjYxLDEwLjc5NiwwLjg5NiwyMi4yMTYtNi4yMzYsMzAuMTE3aDEwLjA2NmMyLjA5MiwwLDMuODM2LTEuNiw0LjAxNi0zLjY4NA0KCQkJCWw0LjU5Mi01My4xMTFoMC40NjVjMi45NjksMCw1LjM3NS0yLjQwNiw1LjM3NS01LjM3NVMyODMuNjk0LDYzLjgxMywyODAuNzI2LDYzLjgxM3oiLz4NCgkJPC9nPg0KCTwvZz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjwvc3ZnPg0K"; +var bed = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDkwLjcgNDkwLjciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDQ5MC43IDQ5MC43OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8Zz4NCgk8Zz4NCgkJPHBhdGggZD0iTTQzNi4yLDE1NC42SDE4Mi40Yy0xMi40LDAtMzMuMSw0LjctMzMuMSwzNi42VjI0MGgzMjB2LTQ4LjhDNDY5LjMsMTU5LjQsNDQ4LjYsMTU0LjYsNDM2LjIsMTU0LjZ6Ii8+DQoJPC9nPg0KPC9nPg0KPGc+DQoJPGc+DQoJCTxwb2x5Z29uIHBvaW50cz0iODAuMywyNTAuNiAzMiwyNTAuNiAzMiw4MCAwLDgwIDAsNDEwLjcgMzIsNDEwLjcgMzIsMzI1LjMgNDU4LjcsMzI1LjMgNDU4LjcsNDEwLjYgNDkwLjcsNDEwLjYgNDkwLjcsMjUwLjYgCQkNCgkJCSIvPg0KCTwvZz4NCjwvZz4NCjxnPg0KCTxnPg0KCQk8Y2lyY2xlIGN4PSI4NS4zIiBjeT0iMTk3LjMiIHI9IjQ0LjciLz4NCgk8L2c+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=="; + + +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +var chart = root.container.children.push(am5timeline.CurveChart.new(root, { + wheelY: "zoomX" +})); + +var scrollbarX = chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "vertical", + height: am5.percent(25), + position: "absolute", + x: am5.percent(58), + centerY: am5.p50 +})); + +scrollbarX.adapters.add("y", function(y) { + return chart.curveContainer.y(); +}) + +chart.plotContainer.children.push(scrollbarX); + + +var yRenderer = am5timeline.AxisRendererCurveY.new(root, { + axisLocation: -0.1 +}) + +yRenderer.labels.template.setAll({ + forceHidden: true +}); + +yRenderer.grid.template.set("forceHidden", true); + +// Create axes and their renderers +var xRenderer = am5timeline.AxisRendererCurveX.new(root, { + points: getPoints(), + yRenderer: yRenderer, + strokeDasharray: [2, 3], + strokeOpacity: 0.5, + stroke: am5.color(0x000000) +}); + +xRenderer.labels.template.setAll({ + centerY: am5.p50, + fontSize: 11, + minPosition: 0.01 +}); + +xRenderer.labels.template.setup = function(target) { + target.set("layer", 30); + target.set("background", am5.Rectangle.new(root, { + fill: am5.color(0xffffff), + fillOpacity: 1 + })); +} + +var yAxis = chart.yAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0, + categoryField: "category", + renderer: yRenderer +})); + +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + baseInterval: { timeUnit: "minute", count: 1 }, + renderer: xRenderer, + tooltip: am5.Tooltip.new(root, {}) +})); + +// Data +var colorSet = chart.get("colors"); + +var series = chart.series.push(am5timeline.CurveColumnSeries.new(root, { + xAxis: xAxis, + yAxis: yAxis, + baseAxis: yAxis, + categoryYField: "category", + valueXField: "end", + openValueXField: "start", + maskBullets: false +})); + +series.columns.template.setAll({ + height: am5.percent(20), + templateField: "settings", + strokeOpacity: 0 +}) + +series.bullets.push(function(root, series, dataItem) { + var container = am5.Container.new(root, { + centerY: am5.p100 + }); + + container.children.push(am5.PointedRectangle.new(root, { + cornerRadius: 5, + width: 32, + height: 32, + pointerBaseWidth: 16, + centerY: am5.p100, + centerX: am5.p50, + templateField: "settings", + pointerX: 16, + pointerY: 40, + strokeOpacity: 0, + shadowColor: am5.color(0x000000), + shadowBlur: 5, + shadowOffsetX: 2, + shadowOffsetY: 2, + tooltipText: dataItem.dataContext.text, + tooltipY: 0 + })) + + container.children.push(am5.Picture.new(root, { + centerY: 32, + centerX: am5.p50, + width: 20, + height: 20, + src: dataItem.dataContext.icon + })); + + return am5.Bullet.new(root, { + sprite: container + }); +}) + +series.data.setAll([{ + "category": "a", + "start": new Date("2019-01-10 06:00").getTime(), + "end": new Date("2019-01-10 06:15").getTime(), + "settings": { "fill": colorSet.getIndex(15) }, + "icon": alarm, + "text": "Wake up!" +}, { + "category": "a", + "start": new Date("2019-01-10 06:15").getTime(), + "end": new Date("2019-01-10 06:30").getTime(), + "settings": { "fill": colorSet.getIndex(14) }, + "icon": water, + "text": "Drink water" +}, +{ + "category": "a", + "start": new Date("2019-01-10 06:30").getTime(), + "end": new Date("2019-01-10 07:00").getTime(), + "settings": { "fill": colorSet.getIndex(13) }, + "icon": exercise, + "text": "Exercise" +}, +{ + "category": "a", + "start": new Date("2019-01-10 07:00").getTime(), + "end": new Date("2019-01-10 07:30").getTime(), + "settings": { "fill": colorSet.getIndex(12) }, + "icon": breakfast, + "text": "Have breakfast" +}, +{ + "category": "a", + "start": new Date("2019-01-10 07:30").getTime(), + "end": new Date("2019-01-10 08:00").getTime(), + "settings": { "fill": colorSet.getIndex(11) }, + "icon": car, + "text": "Drive to work" +}, +{ + "category": "a", + "start": new Date("2019-01-10 08:00").getTime(), + "end": new Date("2019-01-10 17:30").getTime(), + "settings": { "fill": colorSet.getIndex(10) }, + "icon": work, + "text": "Work" +}, +{ + "category": "b", + "start": new Date("2019-01-10 10:00").getTime(), + "end": new Date("2019-01-10 10:15").getTime(), + "settings": { "fill": colorSet.getIndex(10) }, + "icon": coffee, + "text": "Coffee" +}, +{ + "category": "b", + "start": new Date("2019-01-10 12:00").getTime(), + "end": new Date("2019-01-10 13:00").getTime(), + "settings": { "fill": colorSet.getIndex(10) }, + "icon": dinner, + "text": "Dinner" +}, +{ + "category": "b", + "start": new Date("2019-01-10 14:00").getTime(), + "end": new Date("2019-01-10 14:15").getTime(), + "settings": { "fill": colorSet.getIndex(10) }, + "icon": coffee, + "text": "Coffee" +}, +{ + "category": "a", + "start": new Date("2019-01-10 17:30").getTime(), + "end": new Date("2019-01-10 18:00").getTime(), + "settings": { "fill": colorSet.getIndex(8) }, + "icon": car, + "text": "Drive home" +}, +{ + "category": "a", + "start": new Date("2019-01-10 18:00").getTime(), + "end": new Date("2019-01-10 21:30").getTime(), + "settings": { "fill": colorSet.getIndex(7) }, + "icon": home, + "text": "Home!" +}, +{ + "category": "b", + "start": new Date("2019-01-10 19:30").getTime(), + "end": new Date("2019-01-10 20:30").getTime(), + "settings": { "fill": colorSet.getIndex(7) }, + "icon": book, + "text": "Read a bit" +}, +{ + "category": "a", + "start": new Date("2019-01-10 21:30").getTime(), + "end": new Date("2019-01-10 22:00").getTime(), + "settings": { "fill": colorSet.getIndex(6) }, + "icon": beer, + "text": "Have a beer" +}, +{ + "category": "a", + "start": new Date("2019-01-10 22:00").getTime(), + "end": new Date("2019-01-10 22:15").getTime(), + "settings": { "fill": colorSet.getIndex(5) }, + "icon": beer, + "text": "Have another beer" +}, +{ + "category": "a", + "start": new Date("2019-01-10 22:15").getTime(), + "end": new Date("2019-01-10 23:00").getTime(), + "settings": { "fill": colorSet.getIndex(4) }, + "icon": dance, + "text": "Dance!" +}, +{ + "category": "a", + "start": new Date("2019-01-10 23:00").getTime(), + "end": new Date("2019-01-11 00:00").getTime(), + "settings": { "fill": colorSet.getIndex(4) }, + "icon": drink, + "text": "Martini!" +}, +{ + "category": "a", + "start": new Date("2019-01-11 00:00").getTime(), + "end": new Date("2019-01-11 01:00").getTime(), + "settings": { "fill": colorSet.getIndex(2) }, + "icon": drunk, + "text": "Damn..." +}, +{ + "category": "a", + "start": new Date("2019-01-11 01:00").getTime(), + "end": new Date("2019-01-11 02:00").getTime(), + "settings": { "fill": colorSet.getIndex(1) }, + "icon": bed, + "text": "Bye bye" +}].sort(function(a, b) { + return (a.category < b.category) ? -1 : (a.category > b.category) ? 1 : 0; +})) + + +yAxis.data.setAll([{ category: "a" }, { category: "b" }]); + +// Animate chart and series in +// https://www.amcharts.com/docs/v5/concepts/animations/#Initial_animation +series.appear(1000); +chart.appear(1000, 100); + +// function which generates points for the chart +function getPoints() { + + var points = [{ x: -800, y: 200 }, { x: 0, y: 200 }]; + + var w = 400; + var h = 400; + var levelCount = 4; + + var radius = Math.min(w / (levelCount - 1) / 2, h / 2); + var startX = radius; + + for (var i = 0; i < 25; i++) { + var angle = 0 + i / 25 * 90; + var centerPoint = { y: 200 - radius, x: 0 } + points.push({ y: centerPoint.y + radius * am5.math.cos(angle), x: centerPoint.x + radius * am5.math.sin(angle) }); + } + + for (var i = 0; i < levelCount; i++) { + if (i % 2 != 0) { + points.push({ y: -h / 2 + radius, x: startX + w / (levelCount - 1) * i }) + points.push({ y: h / 2 - radius, x: startX + w / (levelCount - 1) * i }) + + var centerPoint = { y: h / 2 - radius, x: startX + w / (levelCount - 1) * (i + 0.5) } + if (i < levelCount - 1) { + for (var k = 0; k < 50; k++) { + var angle = -90 + k / 50 * 180; + points.push({ y: centerPoint.y + radius * am5.math.cos(angle), x: centerPoint.x + radius * am5.math.sin(angle) }); + } + } + + if (i == levelCount - 1) { + points.pop(); + points.push({ y: -radius, x: startX + w / (levelCount - 1) * i }) + var centerPoint = { y: -radius, x: startX + w / (levelCount - 1) * (i + 0.5) } + for (var k = 0; k < 25; k++) { + var angle = -90 + k / 25 * 90; + points.push({ y: centerPoint.y + radius * am5.math.cos(angle), x: centerPoint.x + radius * am5.math.sin(angle) }); + } + points.push({ y: 0, x: 800 }); + } + + } + else { + points.push({ y: h / 2 - radius, x: startX + w / (levelCount - 1) * i }) + points.push({ y: -h / 2 + radius, x: startX + w / (levelCount - 1) * i }) + var centerPoint = { y: -h / 2 + radius, x: startX + w / (levelCount - 1) * (i + 0.5) } + if (i < levelCount - 1) { + for (var k = 0; k < 50; k++) { + var angle = -90 - k / 50 * 180; + points.push({ y: centerPoint.y + radius * am5.math.cos(angle), x: centerPoint.x + radius * am5.math.sin(angle) }); + } + } + } + } + + return points; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/README.md b/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/index.css b/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/index.html b/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/index.html new file mode 100644 index 00000000..074f5a8d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - timeline-serpentine-chart + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/index.js b/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/index.js new file mode 100644 index 00000000..1b41b823 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-serpentine-chart/index.js @@ -0,0 +1,269 @@ +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +var chart = root.container.children.push(am5timeline.SerpentineChart.new(root, { + bendCount: 3, + startLocation: 0.2, + endLocation: 1, + wheelY: "zoomX" +})); + +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +var yRenderer = am5timeline.AxisRendererCurveY.new(root, {}); + +yRenderer.labels.template.setAll({ + centerY: am5.p50, + centerX: am5.p100, + fontSize: 11 +}); + +yRenderer.grid.template.set("forceHidden", true); + +// Create axes and their renderers +var xRenderer = am5timeline.AxisRendererCurveX.new(root, { + yRenderer: yRenderer, + strokeDasharray: [2, 3], + strokeOpacity: 0.5, + stroke: am5.color(0x000000) +}); + +xRenderer.labels.template.setAll({ + centerY: am5.p50, + fontSize: 11, + minPosition: 0.01 +}); + +xRenderer.labels.template.setup = function(target) { + target.set("layer", 30); + target.set("background", am5.Rectangle.new(root, { + fill: am5.color(0xffffff), + fillOpacity: 1 + })); +} + +var yAxis = chart.yAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0, + categoryField: "category", + renderer: yRenderer +})); + +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + baseInterval: { timeUnit: "day", count: 1 }, + renderer: xRenderer, + tooltip: am5.Tooltip.new(root, {}) +})); + +// Data +var colorSet = chart.get("colors"); + +var data = [{ + "category": "Module #1", + "start": new Date("2019-01-10").getTime(), + "end": new Date("2019-01-13").getTime(), + "color": colorSet.getIndex(0), + "task": "Gathering requirements" +}, { + "category": "Module #1", + "start": new Date("2019-02-05").getTime(), + "end": new Date("2019-04-18").getTime(), + "color": colorSet.getIndex(0), + "task": "Development" +}, { + "category": "Module #2", + "start": new Date("2019-01-08").getTime(), + "end": new Date("2019-01-10").getTime(), + "color": colorSet.getIndex(5), + "task": "Gathering requirements" +}, { + "category": "Module #2", + "start": new Date("2019-01-12").getTime(), + "end": new Date("2019-01-15").getTime(), + "color": colorSet.getIndex(5), + "task": "Producing specifications" +}, { + "category": "Module #2", + "start": new Date("2019-01-16").getTime(), + "end": new Date("2019-02-05").getTime(), + "color": colorSet.getIndex(5), + "task": "Development" +}, { + "category": "Module #2", + "start": new Date("2019-02-10").getTime(), + "end": new Date("2019-02-18").getTime(), + "color": colorSet.getIndex(5), + "task": "Testing and QA" +}, { + "category": "" +}, { + "category": "Module #3", + "start": new Date("2019-01-01").getTime(), + "end": new Date("2019-01-19").getTime(), + "color": colorSet.getIndex(9), + "task": "Gathering requirements" +}, { + "category": "Module #3", + "start": new Date("2019-02-01").getTime(), + "end": new Date("2019-02-10").getTime(), + "color": colorSet.getIndex(9), + "task": "Producing specifications" +}, { + "category": "Module #3", + "start": new Date("2019-03-10").getTime(), + "end": new Date("2019-04-15").getTime(), + "color": colorSet.getIndex(9), + "task": "Development" +}, { + "category": "Module #3", + "start": new Date("2019-04-20").getTime(), + "end": new Date("2019-04-30").getTime(), + "color": colorSet.getIndex(9), + "task": "Testing and QA", + "disabled2": false, + "image2": "/wp-content/uploads/assets/timeline/rachel.jpg", + "location": 0 +}, { + "category": "Module #4", + "start": new Date("2019-01-15").getTime(), + "end": new Date("2019-02-12").getTime(), + "color": colorSet.getIndex(15), + "task": "Gathering requirements", + "disabled1": false, + "image1": "/wp-content/uploads/assets/timeline/monica.jpg" +}, { + "category": "Module #4", + "start": new Date("2019-02-25").getTime(), + "end": new Date("2019-03-10").getTime(), + "color": colorSet.getIndex(15), + "task": "Development" +}, { + "category": "Module #4", + "start": new Date("2019-03-23").getTime(), + "end": new Date("2019-04-29").getTime(), + "color": colorSet.getIndex(15), + "task": "Testing and QA" +}]; + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5timeline.CurveColumnSeries.new(root, { + xAxis: xAxis, + yAxis: yAxis, + baseAxis: yAxis, + valueXField: "end", + openValueXField: "start", + categoryYField: "category", + layer: 30 +})); + +series.columns.template.setAll({ + height: am5.percent(10), + strokeOpacity: 0 +}) + +series.bullets.push(function(root, series, dataItem) { + var circle = am5.Circle.new(root, { + radius: 4, + fill: chart.get("colors").getIndex(series.dataItems.indexOf(dataItem)), + strokeWidth: 2, + strokeOpacity: 0.5, + layer: 30 + }); + + return am5.Bullet.new(root, { + sprite: circle, + locationX: 0, + locationY: 0.5 + }) +}) + +series.bullets.push(function(root, series, dataItem) { + var circle = am5.Circle.new(root, { + radius: 4, + fill: chart.get("colors").getIndex(series.dataItems.indexOf(dataItem)), + strokeWidth: 2, + strokeOpacity: 0.5, + layer: 30 + }); + + return am5.Bullet.new(root, { + sprite: circle, locationX: 1 + }) +}) + +series.columns.template.adapters.add("fill", function(fill, target) { + return chart.get("colors").getIndex(series.dataItems.indexOf(target.dataItem)); +}) + +// line series for flags +var lineSeries = chart.series.push(am5timeline.CurveLineSeries.new(root, { + xAxis: xAxis, yAxis: yAxis, categoryYField: "category", valueXField: "date" +})); + +lineSeries.strokes.template.set("forceHidden", true); + +lineSeries.bullets.push(function(root, series, dataItem) { + var flag = am5.Tooltip.new(root, { + centerY: 28, + paddingBottom: 4, paddingLeft: 7, paddingRight: 7, paddingTop: 4, layer: 30 + }) + + flag.get("background")?.setAll({ + stroke: am5.color(0x000000), cornerRadius: 0 + }) + + flag.label.setAll({ + fill: am5.color(0x000000), + text: dataItem.dataContext.letter, + fontSize: "0.8em" + }); + + flag.show(); + + return am5.Bullet.new(root, { + sprite: flag, + locationX: 0.5, locationY: 0.5 + }) +}) + +lineSeries.data.setAll([ + { category: "", eventDate: "2019-01-15", letter: "A", description: "Something happened here" }, + { category: "", date: new Date("2019-01-23").getTime(), letter: "B", description: "Something happened here" }, + { category: "", date: new Date("2019-02-10").getTime(), letter: "C", description: "Something happened here" }, + { category: "", date: new Date("2019-02-29").getTime(), letter: "D", description: "Something happened here" }, + { category: "", date: new Date("2019-03-06").getTime(), letter: "E", description: "Something happened here" }, + { category: "", date: new Date("2019-03-12").getTime(), letter: "F", description: "Something happened here" }, + { category: "", date: new Date("2019-03-22").getTime(), letter: "G", description: "Something happened here" } +]); + + +var cursor = chart.set("cursor", am5timeline.CurveCursor.new(root, { + behavior: "zoomX", + xAxis: xAxis, + yAxis: yAxis +})); + +series.data.setAll(data); + +yAxis.data.setAll([ + { category: "Module #1" }, + { category: "Module #2" }, + { category: "" }, + { category: "Module #3" }, + { category: "Module #4" } +]); + +// Animate chart and series in +// https://www.amcharts.com/docs/v5/concepts/animations/#Initial_animation +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/README.md b/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/index.css b/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/index.html b/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/index.html new file mode 100644 index 00000000..0183ba73 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/index.html @@ -0,0 +1,16 @@ + + + + + amCharts 5 Example - timeline-spiral-chart + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/index.js b/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/index.js new file mode 100644 index 00000000..4fade9ad --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/timeline-spiral-chart/index.js @@ -0,0 +1,269 @@ +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +var chart = root.container.children.push(am5timeline.SpiralChart.new(root, { + levelCount: 2, + wheelY: "zoomX" +})); + +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +var yRenderer = am5timeline.AxisRendererCurveY.new(root, { + +}) + +yRenderer.labels.template.setAll({ + centerY: am5.p50, + centerX: am5.p100, + fontSize: 11 +}); + +yRenderer.grid.template.set("forceHidden", true); + +// Create axes and their renderers +var xRenderer = am5timeline.AxisRendererCurveX.new(root, { + yRenderer: yRenderer, + strokeDasharray: [2, 3], + strokeOpacity: 0.5, + stroke: am5.color(0x000000) +}); + +xRenderer.labels.template.setAll({ + centerY: am5.p50, + fontSize: 11, + minPosition: 0.01 +}); + +xRenderer.labels.template.setup = function(target) { + target.set("layer", 30); + target.set("background", am5.Rectangle.new(root, { + fill: am5.color(0xffffff), + fillOpacity: 1 + })); +} + +var yAxis = chart.yAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0, + categoryField: "category", + renderer: yRenderer +})); + +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + baseInterval: { timeUnit: "day", count: 1 }, + renderer: xRenderer, + tooltip: am5.Tooltip.new(root, {}) +})); + +// Data +var colorSet = chart.get("colors"); + +var data = [{ + "category": "Module #1", + "start": new Date("2019-01-10").getTime(), + "end": new Date("2019-01-13").getTime(), + "color": colorSet.getIndex(0), + "task": "Gathering requirements" +}, { + "category": "Module #1", + "start": new Date("2019-02-05").getTime(), + "end": new Date("2019-04-18").getTime(), + "color": colorSet.getIndex(0), + "task": "Development" +}, { + "category": "Module #2", + "start": new Date("2019-01-08").getTime(), + "end": new Date("2019-01-10").getTime(), + "color": colorSet.getIndex(5), + "task": "Gathering requirements" +}, { + "category": "Module #2", + "start": new Date("2019-01-12").getTime(), + "end": new Date("2019-01-15").getTime(), + "color": colorSet.getIndex(5), + "task": "Producing specifications" +}, { + "category": "Module #2", + "start": new Date("2019-01-16").getTime(), + "end": new Date("2019-02-05").getTime(), + "color": colorSet.getIndex(5), + "task": "Development" +}, { + "category": "Module #2", + "start": new Date("2019-02-10").getTime(), + "end": new Date("2019-02-18").getTime(), + "color": colorSet.getIndex(5), + "task": "Testing and QA" +}, { + "category": "" +}, { + "category": "Module #3", + "start": new Date("2019-01-01").getTime(), + "end": new Date("2019-01-19").getTime(), + "color": colorSet.getIndex(9), + "task": "Gathering requirements" +}, { + "category": "Module #3", + "start": new Date("2019-02-01").getTime(), + "end": new Date("2019-02-10").getTime(), + "color": colorSet.getIndex(9), + "task": "Producing specifications" +}, { + "category": "Module #3", + "start": new Date("2019-03-10").getTime(), + "end": new Date("2019-04-15").getTime(), + "color": colorSet.getIndex(9), + "task": "Development" +}, { + "category": "Module #3", + "start": new Date("2019-04-20").getTime(), + "end": new Date("2019-04-30").getTime(), + "color": colorSet.getIndex(9), + "task": "Testing and QA", + "disabled2": false, + "image2": "/wp-content/uploads/assets/timeline/rachel.jpg", + "location": 0 +}, { + "category": "Module #4", + "start": new Date("2019-01-15").getTime(), + "end": new Date("2019-02-12").getTime(), + "color": colorSet.getIndex(15), + "task": "Gathering requirements", + "disabled1": false, + "image1": "/wp-content/uploads/assets/timeline/monica.jpg" +}, { + "category": "Module #4", + "start": new Date("2019-02-25").getTime(), + "end": new Date("2019-03-10").getTime(), + "color": colorSet.getIndex(15), + "task": "Development" +}, { + "category": "Module #4", + "start": new Date("2019-03-23").getTime(), + "end": new Date("2019-04-29").getTime(), + "color": colorSet.getIndex(15), + "task": "Testing and QA" +}]; + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5timeline.CurveColumnSeries.new(root, { + xAxis: xAxis, + yAxis: yAxis, + baseAxis: yAxis, + valueXField: "end", + openValueXField: "start", + categoryYField: "category", + layer: 30 +})); + +series.columns.template.setAll({ + height: am5.percent(10), + strokeOpacity: 0 +}) + +series.bullets.push(function(root, series, dataItem) { + var circle = am5.Circle.new(root, { + radius: 4, + fill: chart.get("colors").getIndex(series.dataItems.indexOf(dataItem)), + strokeWidth: 2, + strokeOpacity: 0.5, + layer: 30 + }); + + return am5.Bullet.new(root, { + sprite: circle, + locationX: 0, + locationY: 0.5 + }) +}) + +series.bullets.push(function(root, series, dataItem) { + var circle = am5.Circle.new(root, { + radius: 4, + fill: chart.get("colors").getIndex(series.dataItems.indexOf(dataItem)), + strokeWidth: 2, + strokeOpacity: 0.5, + layer: 30 + }); + + return am5.Bullet.new(root, { + sprite: circle, locationX: 1 + }) +}) + +series.columns.template.adapters.add("fill", function(fill, target) { + return chart.get("colors").getIndex(series.dataItems.indexOf(target.dataItem)); +}) + +// Line series for flags +var lineSeries = chart.series.push(am5timeline.CurveLineSeries.new(root, { + xAxis: xAxis, yAxis: yAxis, categoryYField: "category", valueXField: "date" +})); + +lineSeries.strokes.template.set("forceHidden", true); + +lineSeries.bullets.push(function(root, series, dataItem) { + var flag = am5.Tooltip.new(root, { + centerY: 28, + paddingBottom: 4, paddingLeft: 7, paddingRight: 7, paddingTop: 4, layer: 30 + }) + + flag.get("background")?.setAll({ + stroke: am5.color(0x000000), cornerRadius: 0 + }) + + flag.label.setAll({ + fill: am5.color(0x000000), + text: dataItem.dataContext.letter, + fontSize: "0.8em" + }); + + flag.show(); + + return am5.Bullet.new(root, { + sprite: flag, + locationX: 0.5, locationY: 0.5 + }) +}); + +lineSeries.data.setAll([ + { category: "", eventDate: "2019-01-15", letter: "A", description: "Something happened here" }, + { category: "", date: new Date("2019-01-23").getTime(), letter: "B", description: "Something happened here" }, + { category: "", date: new Date("2019-02-10").getTime(), letter: "C", description: "Something happened here" }, + { category: "", date: new Date("2019-02-29").getTime(), letter: "D", description: "Something happened here" }, + { category: "", date: new Date("2019-03-06").getTime(), letter: "E", description: "Something happened here" }, + { category: "", date: new Date("2019-03-12").getTime(), letter: "F", description: "Something happened here" }, + { category: "", date: new Date("2019-03-22").getTime(), letter: "G", description: "Something happened here" } +]); + + +var cursor = chart.set("cursor", am5timeline.CurveCursor.new(root, { + behavior: "zoomX", + xAxis: xAxis, + yAxis: yAxis +})); + +series.data.setAll(data); + +yAxis.data.setAll([ + { category: "Module #1" }, + { category: "Module #2" }, + { category: "" }, + { category: "Module #3" }, + { category: "Module #4" } +]); + +// Animate chart and series in +// https://www.amcharts.com/docs/v5/concepts/animations/#Initial_animation +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/venn-diagram/README.md b/src/main/resources/static/js/amcharts5/examples/venn-diagram/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/venn-diagram/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/venn-diagram/index.css b/src/main/resources/static/js/amcharts5/examples/venn-diagram/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/venn-diagram/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/venn-diagram/index.html b/src/main/resources/static/js/amcharts5/examples/venn-diagram/index.html new file mode 100644 index 00000000..51fba8ff --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/venn-diagram/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - venn-diagram + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/venn-diagram/index.js b/src/main/resources/static/js/amcharts5/examples/venn-diagram/index.js new file mode 100644 index 00000000..0af17b81 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/venn-diagram/index.js @@ -0,0 +1,55 @@ +// Create root +var root = am5.Root.new("chartdiv"); + +// Set themes +root.setThemes([ + am5themes_Animated.new(root) +]); + +// Create wrapper container +var container = root.container.children.push(am5.Container.new(root, { + width: am5.p100, + height: am5.p100, + layout: root.verticalLayout +})); + +// Create venn series +var series = container.children.push(am5venn.Venn.new(root, { + categoryField: "name", + valueField: "value", + intersectionsField: "sets", + paddingTop: 40, + paddingBottom: 40, + paddingLeft: 40, + paddingRight: 40 +})); + +// Set data +series.data.setAll([ + { name: "A", value: 10 }, + { name: "B", value: 10 }, + { name: "C", value: 5 }, + { name: "X", value: 4, sets: ["A", "B"] }, + { name: "Y", value: 2, sets: ["A", "C"] }, + { name: "Z", value: 2, sets: ["B", "C"] }, + { name: "Q", value: 1, sets: ["A", "B", "C"] +}]); + +// Set tooltip content +series.slices.template.set("tooltipText", "{category}: {value}"); + +// Set up hover appearance +series.hoverGraphics.setAll({ + strokeDasharray: [3, 3], + stroke: am5.color(0xffffff), + strokeWidth: 2 +}); + +// Add legend +var legend = container.children.push( + am5.Legend.new(root, { + centerX: am5.p50, + x: am5.p50 + }) +); +legend.data.setAll(series.dataItems); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/README.md b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/index.css b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/index.html b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/index.html new file mode 100644 index 00000000..a56342a1 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - wordcloud-with-data + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/index.js b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/index.js new file mode 100644 index 00000000..04eedc94 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-data/index.js @@ -0,0 +1,110 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Add wrapper container +var container = root.container.children.push(am5.Container.new(root, { + width: am5.percent(100), + height: am5.percent(100), + layout: root.verticalLayout +})); + + +// Add chart title +var title = container.children.push(am5.Label.new(root, { + text: "Most popular languages on StackOverflow", + fontSize: 20, + x: am5.percent(50), + centerX: am5.percent(50) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/word-cloud/ +var series = container.children.push(am5wc.WordCloud.new(root, { + categoryField: "tag", + valueField: "weight", + calculateAggregates: true // this is needed for heat rules to work +})); + + +// Set up heat rules +// https://www.amcharts.com/docs/v5/charts/word-cloud/#Via_heat_rules +series.set("heatRules", [{ + target: series.labels.template, + dataField: "value", + min: am5.color(0xFFD4C2), + max: am5.color(0xFF621F), + key: "fill" +}]); + + +// Configure labels +series.labels.template.setAll({ + paddingTop: 5, + paddingBottom: 5, + paddingLeft: 5, + paddingRight: 5, + fontFamily: "Courier New", + cursorOverStyle: "pointer" +}); + + +// Add click event on words +// https://www.amcharts.com/docs/v5/charts/word-cloud/#Events +series.labels.template.events.on("click", function (ev) { + var category = ev.target.dataItem.get("category"); + window.open("https://stackoverflow.com/questions/tagged/" + encodeURIComponent(category)); +}); + + +// Data from: +// https://insights.stackoverflow.com/survey/2021#section-most-popular-technologies-programming-scripting-and-markup-languages +series.data.setAll([ + { tag: "JavaScript", weight: 64.96 }, + { tag: "HTML/CSS", weight: 56.07 }, + { tag: "Python", weight: 48.24 }, + { tag: "SQL", weight: 47.08 }, + { tag: "Java", weight: 35.35 }, + { tag: "Node.js", weight: 33.91 }, + { tag: "TypeScript", weight: 30.19 }, + { tag: "C#", weight: 27.86 }, + { tag: "Bash/Shell", weight: 27.13 }, + { tag: "C++", weight: 24.31 }, + { tag: "PHP", weight: 21.98 }, + { tag: "C", weight: 21.01 }, + { tag: "PowerShell", weight: 10.75 }, + { tag: "Go", weight: 9.55 }, + { tag: "Kotlin", weight: 8.32 }, + { tag: "Rust", weight: 7.03 }, + { tag: "Ruby", weight: 6.75 }, + { tag: "Dart", weight: 6.02 }, + { tag: "Assembly", weight: 5.61 }, + { tag: "Swift", weight: 5.1 }, + { tag: "R", weight: 5.07 }, + { tag: "VBA", weight: 4.66 }, + { tag: "Matlab", weight: 4.66 }, + { tag: "Groovy", weight: 3.01 }, + { tag: "Objective-C", weight: 2.8 }, + { tag: "Scala", weight: 2.6 }, + { tag: "Perl", weight: 2.46 }, + { tag: "Haskell", weight: 2.12 }, + { tag: "Delphi", weight: 2.1 }, + { tag: "Clojure", weight: 1.88 }, + { tag: "Elixir", weight: 1.74 }, + { tag: "LISP", weight: 1.33 }, + { tag: "Julia", weight: 1.29 }, + { tag: "F#", weight: 0.97 }, + { tag: "Erlang", weight: 0.79 }, + { tag: "APL", weight: 0.65 }, + { tag: "Crystal", weight: 0.56 }, + { tag: "COBOL", weight: 0.53 }, +]); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/README.md b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/index.css b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/index.html b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/index.html new file mode 100644 index 00000000..e0455090 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - wordcloud-with-text + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/index.js b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/index.js new file mode 100644 index 00000000..65af5b08 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/wordcloud-with-text/index.js @@ -0,0 +1,30 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/word-cloud/ +var series = root.container.children.push(am5wc.WordCloud.new(root, { + maxCount: 150, + maxFontSize: am5.percent(25), + minWordLength: 2, + text: "Though yet of Hamlet our dear brother's death The memory be green, and that it us befitted To bear our hearts in grief and our whole kingdom To be contracted in one brow of woe, Yet so far hath discretion fought with nature That we with wisest sorrow think on him, Together with remembrance of ourselves. Therefore our sometime sister, now our queen, The imperial jointress to this warlike state, Have we, as 'twere with a defeated joy,-- With an auspicious and a dropping eye, With mirth in funeral and with dirge in marriage, In equal scale weighing delight and dole,-- Taken to wife: nor have we herein barr'd Your better wisdoms, which have freely gone With this affair along. For all, our thanks. Now follows, that you know, young Fortinbras, Holding a weak supposal of our worth, Or thinking by our late dear brother's death Our state to be disjoint and out of frame, Colleagued with the dream of his advantage, He hath not fail'd to pester us with message, Importing the surrender of those lands Lost by his father, with all bonds of law, To our most valiant brother. So much for him. Now for ourself and for this time of meeting: Thus much the business is: we have here writ To Norway, uncle of young Fortinbras,-- Who, impotent and bed-rid, scarcely hears Of this his nephew's purpose,--to suppress His further gait herein; in that the levies, The lists and full proportions, are all made Out of his subject: and we here dispatch You, good Cornelius, and you, Voltimand, For bearers of this greeting to old Norway; Giving to you no further personal power To business with the king, more than the scope Of these delated articles allow. Farewell, and let your haste commend your duty. Tis sweet and commendable in your nature, Hamlet,To give these mourning duties to your father: But, you must know, your father lost a father; That father lost, lost his, and the survivor bound In filial obligation for some term To do obsequious sorrow: but to persever In obstinate condolement is a course Of impious stubbornness; 'tis unmanly grief; It shows a will most incorrect to heaven, A heart unfortified, a mind impatient, An understanding simple and unschool'd: For what we know must be and is as common As any the most vulgar thing to sense, Why should we in our peevish opposition Take it to heart? Fie! 'tis a fault to heaven, A fault against the dead, a fault to nature, To reason most absurd: whose common theme Is death of fathers, and who still hath cried, From the first corse till he that died to-day, 'This must be so.' We pray you, throw to earth This unprevailing woe, and think of us As of a father: for let the world take note, You are the most immediate to our throne; And with no less nobility of love Than that which dearest father bears his son, Do I impart toward you. For your intent In going back to school in Wittenberg, It is most retrograde to our desire: And we beseech you, bend you to remain Here, in the cheer and comfort of our eye, Our chiefest courtier, cousin, and our son.", +})); + + +// Configure labels +series.labels.template.setAll({ + paddingTop: 5, + paddingBottom: 5, + paddingLeft: 5, + paddingRight: 5, + fontFamily: "Courier New" +}); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/README.md b/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/index.css b/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/index.html b/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/index.html new file mode 100644 index 00000000..8ca8e2c2 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-100-percent-stacked-column + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/index.js b/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/index.js new file mode 100644 index 00000000..21e719f4 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-100-percent-stacked-column/index.js @@ -0,0 +1,128 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + layout: root.verticalLayout +})); + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +var data = [{ + "year": "2021", + "europe": 2.5, + "namerica": 2.5, + "asia": 2.1, + "lamerica": 1, + "meast": 0.8, + "africa": 0.4 +}, { + "year": "2022", + "europe": 2.6, + "namerica": 2.7, + "asia": 2.2, + "lamerica": 0.5, + "meast": 0.4, + "africa": 0.3 +}, { + "year": "2023", + "europe": 2.8, + "namerica": 2.9, + "asia": 2.4, + "lamerica": 0.3, + "meast": 0.9, + "africa": 0.5 +}] + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { + categoryField: "year", + renderer: am5xy.AxisRendererX.new(root, {}), + tooltip: am5.Tooltip.new(root, {}) +})); + +xAxis.data.setAll(data); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + min: 0, + max: 100, + numberFormat: "#'%'", + strictMinMax: true, + calculateTotals: true, + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add legend +// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/ +var legend = chart.children.push(am5.Legend.new(root, { + centerX: am5.p50, + x: am5.p50 +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +function makeSeries(name, fieldName) { + var series = chart.series.push(am5xy.ColumnSeries.new(root, { + name: name, + stacked: true, + xAxis: xAxis, + yAxis: yAxis, + valueYField: fieldName, + valueYShow: "valueYTotalPercent", + categoryXField: "year" + })); + + series.data.setAll(data); + + // Make stuff animate on load + // https://www.amcharts.com/docs/v5/concepts/animations/ + series.appear(); + + series.bullets.push(function () { + return am5.Bullet.new(root, { + sprite: am5.Label.new(root, { + text: "{valueYTotalPercent.formatNumber('#.#p')}", + fill: root.interfaceColors.get("alternativeText"), + centerY: am5.p50, + centerX: am5.p50, + populateText: true + }) + }); + }); + + legend.data.push(series); +} + +makeSeries("Europe", "europe"); +makeSeries("North America", "namerica"); +makeSeries("Asia", "asia"); +makeSeries("Latin America", "lamerica"); +makeSeries("Middle East", "meast"); +makeSeries("Africa", "africa"); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/README.md b/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/index.css b/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/index.html b/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/index.html new file mode 100644 index 00000000..1a2011fe --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-animated-bullet-at-the-end-of-the-series + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/index.js b/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/index.js new file mode 100644 index 00000000..de3f85ea --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-animated-bullet-at-the-end-of-the-series/index.js @@ -0,0 +1,162 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push( + am5xy.XYChart.new(root, { + panX: true, + panY: true, + wheelX: "panX", + wheelY: "zoomX" + }) +); + +chart.get("colors").set("step", 3); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, {})); +cursor.lineY.set("visible", false); + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push( + am5xy.DateAxis.new(root, { + maxDeviation: 0.3, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) + }) +); + +var yAxis = chart.yAxes.push( + am5xy.ValueAxis.new(root, { + maxDeviation: 0.3, + renderer: am5xy.AxisRendererY.new(root, {}) + }) +); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series 1", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); +series.strokes.template.setAll({ + strokeWidth: 2, + strokeDasharray: [3, 3] +}); + +// Create animating bullet by adding two circles in a bullet container and +// animating radius and opacity of one of them. +series.bullets.push(function() { + var container = am5.Container.new(root, { + templateField: "bulletSettings" + }); + var circle0 = container.children.push(am5.Circle.new(root, { + radius: 5, + fill: am5.color(0xff0000) + })); + var circle1 = container.children.push(am5.Circle.new(root, { + radius: 5, + fill: am5.color(0xff0000) + })); + + circle1.animate({ + key: "radius", + to: 20, + duration: 1000, + easing: am5.ease.out(am5.ease.cubic), + loops: Infinity + }); + circle1.animate({ + key: "opacity", + to: 0, + from: 1, + duration: 1000, + easing: am5.ease.out(am5.ease.cubic), + loops: Infinity + }); + + return am5.Bullet.new(root, { + sprite: container + }) +}) + + +// Set data +var data = [{ + date: new Date(2021, 5, 12).getTime(), + value: 50, + bulletSettings: { + visible: false + } +}, { + date: new Date(2021, 5, 13).getTime(), + value: 53, + bulletSettings: { + visible: false + } +}, { + date: new Date(2021, 5, 14).getTime(), + value: 56, + bulletSettings: { + visible: false + } +}, { + date: new Date(2021, 5, 15).getTime(), + value: 52, + bulletSettings: { + visible: false + } +}, { + date: new Date(2021, 5, 16).getTime(), + value: 48, + bulletSettings: { + visible: false + } +}, { + date: new Date(2021, 5, 17).getTime(), + value: 47, + bulletSettings: { + visible: false + } +}, { + date: new Date(2021, 5, 18).getTime(), + value: 59, + bulletSettings: { + visible: true + } +}] + +series.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-bubble/README.md b/src/main/resources/static/js/amcharts5/examples/xy-bubble/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-bubble/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-bubble/index.css b/src/main/resources/static/js/amcharts5/examples/xy-bubble/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-bubble/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-bubble/index.html b/src/main/resources/static/js/amcharts5/examples/xy-bubble/index.html new file mode 100644 index 00000000..27a97376 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-bubble/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-bubble + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-bubble/index.js b/src/main/resources/static/js/amcharts5/examples/xy-bubble/index.js new file mode 100644 index 00000000..f5f8a478 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-bubble/index.js @@ -0,0 +1,1654 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: true, + panY: true, + wheelY: "zoomXY" +})); + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation:1, + renderer: am5xy.AxisRendererX.new(root, { + pan:"zoom" + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +xAxis.children.moveValue(am5.Label.new(root, { + text: "GDP per Capita, USD", + x: am5.p50, + centerX: am5.p50 +}), xAxis.children.length - 1); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation:1, + renderer: am5xy.AxisRendererY.new(root, { + pan:"zoom" + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +yAxis.children.moveValue(am5.Label.new(root, { + rotation: -90, + text: "Life expectancy, years", + y: am5.p50, + centerX: am5.p50 +}), 0); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.LineSeries.new(root, { + calculateAggregates: true, + xAxis: xAxis, + yAxis: yAxis, + valueYField: "y", + valueXField: "x", + valueField: "value", + tooltip: am5.Tooltip.new(root, { + pointerOrientation: "horizontal", + labelText: "[bold]{title}[/]\nLife expectancy: {valueY.formatNumber('#.0')}\nGDP: {valueX.formatNumber('#,###.')}\nPopulation: {value.formatNumber('#,###.')}" + }) +})); + +series.strokes.template.set("visible", false); + +// Add bullet +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/#Bullets +var circleTemplate = am5.Template.new({}); +circleTemplate.adapters.add("fill", function (fill, target) { + var dataItem = target.dataItem; + if (dataItem) { + return am5.Color.fromString(dataItem.dataContext.color); + } + return fill +}); +series.bullets.push(function () { + var bulletCircle = am5.Circle.new(root, { + radius: 5, + fill: series.get("fill"), + fillOpacity: 0.8 + }, circleTemplate); + return am5.Bullet.new(root, { + sprite: bulletCircle + }); +}); + + +// Add heat rule +// https://www.amcharts.com/docs/v5/concepts/settings/heat-rules/ +series.set("heatRules", [{ + target: circleTemplate, + min: 3, + max: 60, + dataField: "value", + key: "radius" +}]); + +// Set data +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/#Setting_data +series.data.setAll([ + { + "title": "Afghanistan", + "id": "AF", + "color": "#eea638", + "continent": "asia", + "x": 1349.69694102398, + "y": 60.524, + "value": 33397058 + }, + { + "title": "Albania", + "id": "AL", + "color": "#d8854f", + "continent": "europe", + "x": 6969.30628256456, + "y": 77.185, + "value": 3227373 + }, + { + "title": "Algeria", + "id": "DZ", + "color": "#de4c4f", + "continent": "africa", + "x": 6419.12782939372, + "y": 70.874, + "value": 36485828 + }, + { + "title": "Angola", + "id": "AO", + "color": "#de4c4f", + "continent": "africa", + "x": 5838.15537582502, + "y": 51.498, + "value": 20162517 + }, + { + "title": "Argentina", + "id": "AR", + "color": "#86a965", + "continent": "south_america", + "x": 15714.1031814398, + "y": 76.128, + "value": 41118986 + }, + { + "title": "Armenia", + "id": "AM", + "color": "#d8854f", + "continent": "europe", + "x": 5059.0879636443, + "y": 74.469, + "value": 3108972 + }, + { + "title": "Australia", + "id": "AU", + "color": "#8aabb0", + "continent": "australia", + "x": 36064.7372768548, + "y": 82.364, + "value": 22918688 + }, + { + "title": "Austria", + "id": "AT", + "color": "#d8854f", + "continent": "europe", + "x": 36731.6287741081, + "y": 80.965, + "value": 8428915 + }, + { + "title": "Azerbaijan", + "id": "AZ", + "color": "#d8854f", + "continent": "europe", + "x": 9291.02626998762, + "y": 70.686, + "value": 9421233 + }, + { + "title": "Bahrain", + "id": "BH", + "color": "#eea638", + "continent": "asia", + "x": 24472.896235865, + "y": 76.474, + "value": 1359485 + }, + { + "title": "Bangladesh", + "id": "BD", + "color": "#eea638", + "continent": "asia", + "x": 1792.55023464123, + "y": 70.258, + "value": 152408774 + }, + { + "title": "Belarus", + "id": "BY", + "color": "#d8854f", + "continent": "europe", + "x": 13515.1610255056, + "y": 69.829, + "value": 9527498 + }, + { + "title": "Belgium", + "id": "BE", + "color": "#d8854f", + "continent": "europe", + "x": 32585.0119650436, + "y": 80.373, + "value": 10787788 + }, + { + "title": "Benin", + "id": "BJ", + "color": "#de4c4f", + "continent": "africa", + "x": 1464.13825459126, + "y": 59.165, + "value": 9351838 + }, + { + "title": "Bhutan", + "id": "BT", + "color": "#eea638", + "continent": "asia", + "x": 6130.86235464324, + "y": 67.888, + "value": 750443 + }, + { + "title": "Bolivia", + "id": "BO", + "color": "#86a965", + "continent": "south_america", + "x": 4363.43264453337, + "y": 66.969, + "value": 10248042 + }, + { + "title": "Bosnia and Herzegovina", + "id": "BA", + "color": "#d8854f", + "continent": "europe", + "x": 7664.15281166303, + "y": 76.211, + "value": 3744235 + }, + { + "title": "Botswana", + "id": "BW", + "color": "#de4c4f", + "continent": "africa", + "x": 14045.9403255843, + "y": 47.152, + "value": 2053237 + }, + { + "title": "Brazil", + "id": "BR", + "color": "#86a965", + "continent": "south_america", + "x": 10383.5405937283, + "y": 73.667, + "value": 198360943 + }, + { + "title": "Brunei", + "id": "BN", + "color": "#eea638", + "continent": "asia", + "x": 45658.2532642054, + "y": 78.35, + "value": 412892 + }, + { + "title": "Bulgaria", + "id": "BG", + "color": "#d8854f", + "continent": "europe", + "x": 11669.7223127119, + "y": 73.448, + "value": 7397873 + }, + { + "title": "Burkina Faso", + "id": "BF", + "color": "#de4c4f", + "continent": "africa", + "x": 1363.77981282077, + "y": 55.932, + "value": 17481984 + }, + { + "title": "Burundi", + "id": "BI", + "color": "#de4c4f", + "continent": "africa", + "x": 484.090924612833, + "y": 53.637, + "value": 8749387 + }, + { + "title": "Cambodia", + "id": "KH", + "color": "#eea638", + "continent": "asia", + "x": 2076.68958647462, + "y": 71.577, + "value": 14478320 + }, + { + "title": "Cameroon", + "id": "CM", + "color": "#de4c4f", + "continent": "africa", + "x": 2094.09541317011, + "y": 54.61, + "value": 20468943 + }, + { + "title": "Canada", + "id": "CA", + "color": "#a7a737", + "continent": "north_america", + "x": 35992.8327204722, + "y": 81.323, + "value": 34674708 + }, + { + "title": "Cape Verde", + "id": "CV", + "color": "#de4c4f", + "continent": "africa", + "x": 3896.04113919638, + "y": 74.771, + "value": 505335 + }, + { + "title": "Central African Rep.", + "id": "CF", + "color": "#de4c4f", + "continent": "africa", + "x": 718.264633200085, + "y": 49.517, + "value": 4575586 + }, + { + "title": "Chad", + "id": "TD", + "color": "#de4c4f", + "continent": "africa", + "x": 1768.88201756553, + "y": 50.724, + "value": 11830573 + }, + { + "title": "Chile", + "id": "CL", + "color": "#86a965", + "continent": "south_america", + "x": 15403.7608144625, + "y": 79.691, + "value": 17423214 + }, + { + "title": "China", + "id": "CN", + "color": "#eea638", + "continent": "asia", + "x": 9501.57424554247, + "y": 75.178, + "value": 1353600687 + }, + { + "title": "Colombia", + "id": "CO", + "color": "#86a965", + "continent": "south_america", + "x": 8035.65638212719, + "y": 73.835, + "value": 47550708 + }, + { + "title": "Comoros", + "id": "KM", + "color": "#de4c4f", + "continent": "africa", + "x": 1027.40854349726, + "y": 60.661, + "value": 773344 + }, + { + "title": "Congo, Dem. Rep.", + "id": "CD", + "color": "#de4c4f", + "continent": "africa", + "x": 403.164594003407, + "y": 49.643, + "value": 69575394 + }, + { + "title": "Congo, Rep.", + "id": "CG", + "color": "#de4c4f", + "continent": "africa", + "x": 4106.51173855966, + "y": 58.32, + "value": 4233063 + }, + { + "title": "Costa Rica", + "id": "CR", + "color": "#a7a737", + "continent": "north_america", + "x": 10827.6787293035, + "y": 79.712, + "value": 4793725 + }, + { + "title": "Cote d'Ivoire", + "id": "CI", + "color": "#de4c4f", + "continent": "africa", + "x": 1491.51631215108, + "y": 50.367, + "value": 20594615 + }, + { + "title": "Croatia", + "id": "HR", + "color": "#d8854f", + "continent": "europe", + "x": 13388.9902780816, + "y": 76.881, + "value": 4387376 + }, + { + "title": "Cuba", + "id": "CU", + "color": "#a7a737", + "continent": "north_america", + "x": 10197.4191892126, + "y": 79.088, + "value": 11249266 + }, + { + "title": "Cyprus", + "id": "CY", + "color": "#d8854f", + "continent": "europe", + "x": 23092.089792339, + "y": 79.674, + "value": 1129166 + }, + { + "title": "Czech Rep.", + "id": "CZ", + "color": "#d8854f", + "continent": "europe", + "x": 22565.2975367042, + "y": 77.552, + "value": 10565678 + }, + { + "title": "Denmark", + "id": "DK", + "color": "#d8854f", + "continent": "europe", + "x": 32731.2903910132, + "y": 79.251, + "value": 5592738 + }, + { + "title": "Djibouti", + "id": "DJ", + "color": "#de4c4f", + "continent": "africa", + "x": 2244.60241376688, + "y": 61.319, + "value": 922708 + }, + { + "title": "Dominican Rep.", + "id": "DO", + "color": "#a7a737", + "continent": "north_america", + "x": 6978.89657264408, + "y": 73.181, + "value": 10183339 + }, + { + "title": "Ecuador", + "id": "EC", + "color": "#86a965", + "continent": "south_america", + "x": 7903.09487034651, + "y": 76.195, + "value": 14864987 + }, + { + "title": "Egypt", + "id": "EG", + "color": "#de4c4f", + "continent": "africa", + "x": 6013.821462967, + "y": 70.933, + "value": 83958369 + }, + { + "title": "El Salvador", + "id": "SV", + "color": "#a7a737", + "continent": "north_america", + "x": 5833.63022804714, + "y": 72.361, + "value": 6264129 + }, + { + "title": "Equatorial Guinea", + "id": "GQ", + "color": "#de4c4f", + "continent": "africa", + "x": 13499.2115504397, + "y": 52.562, + "value": 740471 + }, + { + "title": "Eritrea", + "id": "ER", + "color": "#de4c4f", + "continent": "africa", + "x": 613.716963797415, + "y": 62.329, + "value": 5580862 + }, + { + "title": "Estonia", + "id": "EE", + "color": "#d8854f", + "continent": "europe", + "x": 18858.0538247661, + "y": 74.335, + "value": 1339762 + }, + { + "title": "Ethiopia", + "id": "ET", + "color": "#de4c4f", + "continent": "africa", + "x": 958.694705985043, + "y": 62.983, + "value": 86538534 + }, + { + "title": "Fiji", + "id": "FJ", + "color": "#8aabb0", + "continent": "australia", + "x": 4195.03497178682, + "y": 69.626, + "value": 875822 + }, + { + "title": "Finland", + "id": "FI", + "color": "#d8854f", + "continent": "europe", + "x": 31551.9534459533, + "y": 80.362, + "value": 5402627 + }, + { + "title": "France", + "id": "FR", + "color": "#d8854f", + "continent": "europe", + "x": 29896.4182238854, + "y": 81.663, + "value": 63457777 + }, + { + "title": "Gabon", + "id": "GA", + "color": "#de4c4f", + "continent": "africa", + "x": 13853.4616556007, + "y": 63.115, + "value": 1563873 + }, + { + "title": "Gambia", + "id": "GM", + "color": "#de4c4f", + "continent": "africa", + "x": 747.68096900917, + "y": 58.59, + "value": 1824777 + }, + { + "title": "Georgia", + "id": "GE", + "color": "#d8854f", + "continent": "europe", + "x": 4943.23814339098, + "y": 74.162, + "value": 4304363 + }, + { + "title": "Germany", + "id": "DE", + "color": "#d8854f", + "continent": "europe", + "x": 34131.8745974324, + "y": 80.578, + "value": 81990837 + }, + { + "title": "Ghana", + "id": "GH", + "color": "#de4c4f", + "continent": "africa", + "x": 1728.47847396661, + "y": 60.979, + "value": 25545939 + }, + { + "title": "Greece", + "id": "GR", + "color": "#d8854f", + "continent": "europe", + "x": 21811.3302462212, + "y": 80.593, + "value": 11418878 + }, + { + "title": "Guatemala", + "id": "GT", + "color": "#a7a737", + "continent": "north_america", + "x": 5290.75202738533, + "y": 71.77, + "value": 15137569 + }, + { + "title": "Guinea", + "id": "GN", + "color": "#de4c4f", + "continent": "africa", + "x": 965.699260160386, + "y": 55.865, + "value": 10480710 + }, + { + "title": "Guinea-Bissau", + "id": "GW", + "color": "#de4c4f", + "continent": "africa", + "x": 593.074251034428, + "y": 54.054, + "value": 1579632 + }, + { + "title": "Guyana", + "id": "GY", + "color": "#86a965", + "continent": "south_america", + "x": 4265.10644905906, + "y": 66.134, + "value": 757623 + }, + { + "title": "Haiti", + "id": "HT", + "color": "#a7a737", + "continent": "north_america", + "x": 1180.36719611488, + "y": 62.746, + "value": 10255644 + }, + { + "title": "Honduras", + "id": "HN", + "color": "#a7a737", + "continent": "north_america", + "x": 3615.1565803195, + "y": 73.503, + "value": 7912032 + }, + { + "title": "Hong Kong, China", + "id": "HK", + "color": "#eea638", + "continent": "asia", + "x": 43854.4129062733, + "y": 83.199, + "value": 7196450 + }, + { + "title": "Hungary", + "id": "HU", + "color": "#d8854f", + "continent": "europe", + "x": 17065.6047342876, + "y": 74.491, + "value": 9949589 + }, + { + "title": "Iceland", + "id": "IS", + "color": "#d8854f", + "continent": "europe", + "x": 34371.1793657215, + "y": 81.96, + "value": 328290 + }, + { + "title": "India", + "id": "IN", + "color": "#eea638", + "continent": "asia", + "x": 3229.14788745778, + "y": 66.168, + "value": 1258350971 + }, + { + "title": "Indonesia", + "id": "ID", + "color": "#eea638", + "continent": "asia", + "x": 4379.69981934714, + "y": 70.624, + "value": 244769110 + }, + { + "title": "Iran", + "id": "IR", + "color": "#eea638", + "continent": "asia", + "x": 12325.1280322371, + "y": 73.736, + "value": 75611798 + }, + { + "title": "Iraq", + "id": "IQ", + "color": "#eea638", + "continent": "asia", + "x": 4160.84708826172, + "y": 69.181, + "value": 33703068 + }, + { + "title": "Ireland", + "id": "IE", + "color": "#d8854f", + "continent": "europe", + "x": 35856.1099094562, + "y": 80.531, + "value": 4579498 + }, + { + "title": "Israel", + "id": "IL", + "color": "#eea638", + "continent": "asia", + "x": 27321.205182135, + "y": 81.641, + "value": 7694670 + }, + { + "title": "Italy", + "id": "IT", + "color": "#d8854f", + "continent": "europe", + "x": 25811.7393303661, + "y": 82.235, + "value": 60964145 + }, + { + "title": "Jamaica", + "id": "JM", + "color": "#a7a737", + "continent": "north_america", + "x": 6945.70274711582, + "y": 73.338, + "value": 2761331 + }, + { + "title": "Japan", + "id": "JP", + "color": "#eea638", + "continent": "asia", + "x": 31273.9932002261, + "y": 83.418, + "value": 126434653 + }, + { + "title": "Jordan", + "id": "JO", + "color": "#eea638", + "continent": "asia", + "x": 5242.51826246118, + "y": 73.7, + "value": 6457260 + }, + { + "title": "Kazakhstan", + "id": "KZ", + "color": "#eea638", + "continent": "asia", + "x": 11982.6526657273, + "y": 66.394, + "value": 16381297 + }, + { + "title": "Kenya", + "id": "KE", + "color": "#de4c4f", + "continent": "africa", + "x": 1517.69754383602, + "y": 61.115, + "value": 42749418 + }, + { + "title": "Korea, Dem. Rep.", + "id": "KP", + "color": "#eea638", + "continent": "asia", + "x": 1540.44018783769, + "y": 69.701, + "value": 24553672 + }, + { + "title": "Korea, Rep.", + "id": "KR", + "color": "#eea638", + "continent": "asia", + "x": 26199.4035642374, + "y": 81.294, + "value": 48588326 + }, + { + "title": "Kuwait", + "id": "KW", + "color": "#eea638", + "continent": "asia", + "x": 42045.05923634, + "y": 74.186, + "value": 2891553 + }, + { + "title": "Kyrgyzstan", + "id": "KG", + "color": "#eea638", + "continent": "asia", + "x": 2078.20824171434, + "y": 67.37, + "value": 5448085 + }, + { + "title": "Laos", + "id": "LA", + "color": "#eea638", + "continent": "asia", + "x": 2807.04752629832, + "y": 67.865, + "value": 6373934 + }, + { + "title": "Latvia", + "id": "LV", + "color": "#d8854f", + "continent": "europe", + "x": 15575.2762808015, + "y": 72.045, + "value": 2234572 + }, + { + "title": "Lebanon", + "id": "LB", + "color": "#eea638", + "continent": "asia", + "x": 13711.975683994, + "y": 79.716, + "value": 4291719 + }, + { + "title": "Lesotho", + "id": "LS", + "color": "#de4c4f", + "continent": "africa", + "x": 1970.47114938861, + "y": 48.947, + "value": 2216850 + }, + { + "title": "Liberia", + "id": "LR", + "color": "#de4c4f", + "continent": "africa", + "x": 499.809082037359, + "y": 60.23, + "value": 4244684 + }, + { + "title": "Libya", + "id": "LY", + "color": "#de4c4f", + "continent": "africa", + "x": 9136.34462458268, + "y": 75.13, + "value": 6469497 + }, + { + "title": "Lithuania", + "id": "LT", + "color": "#d8854f", + "continent": "europe", + "x": 18469.9748244583, + "y": 71.942, + "value": 3292454 + }, + { + "title": "Macedonia, FYR", + "id": "MK", + "color": "#d8854f", + "continent": "europe", + "x": 8918.81131421927, + "y": 75.041, + "value": 2066785 + }, + { + "title": "Madagascar", + "id": "MG", + "color": "#de4c4f", + "continent": "africa", + "x": 981.478674981018, + "y": 64.28, + "value": 21928518 + }, + { + "title": "Malawi", + "id": "MW", + "color": "#de4c4f", + "continent": "africa", + "x": 848.191013907702, + "y": 54.798, + "value": 15882815 + }, + { + "title": "Malaysia", + "id": "MY", + "color": "#eea638", + "continent": "asia", + "x": 14202.2119391177, + "y": 74.836, + "value": 29321798 + }, + { + "title": "Mali", + "id": "ML", + "color": "#de4c4f", + "continent": "africa", + "x": 1070.55152828447, + "y": 54.622, + "value": 16318897 + }, + { + "title": "Mauritania", + "id": "MR", + "color": "#de4c4f", + "continent": "africa", + "x": 1898.35192059663, + "y": 61.39, + "value": 3622961 + }, + { + "title": "Mauritius", + "id": "MU", + "color": "#de4c4f", + "continent": "africa", + "x": 13082.7750766535, + "y": 73.453, + "value": 1313803 + }, + { + "title": "Mexico", + "id": "MX", + "color": "#a7a737", + "continent": "north_america", + "x": 12030.3862129571, + "y": 77.281, + "value": 116146768 + }, + { + "title": "Moldova", + "id": "MD", + "color": "#d8854f", + "continent": "europe", + "x": 2963.99305976246, + "y": 68.779, + "value": 3519266 + }, + { + "title": "Mongolia", + "id": "MN", + "color": "#eea638", + "continent": "asia", + "x": 4300.13326887206, + "y": 67.286, + "value": 2844081 + }, + { + "title": "Montenegro", + "id": "ME", + "color": "#d8854f", + "continent": "europe", + "x": 10064.1609429569, + "y": 74.715, + "value": 632796 + }, + { + "title": "Morocco", + "id": "MA", + "color": "#de4c4f", + "continent": "africa", + "x": 4514.51993561297, + "y": 70.714, + "value": 32598536 + }, + { + "title": "Mozambique", + "id": "MZ", + "color": "#de4c4f", + "continent": "africa", + "x": 1058.44192915498, + "y": 49.91, + "value": 24475186 + }, + { + "title": "Myanmar", + "id": "MM", + "color": "#eea638", + "continent": "asia", + "x": 1657.04593430092, + "y": 65.009, + "value": 48724387 + }, + { + "title": "Namibia", + "id": "NA", + "color": "#de4c4f", + "continent": "africa", + "x": 5535.83674233219, + "y": 64.014, + "value": 2364433 + }, + { + "title": "Nepal", + "id": "NP", + "color": "#eea638", + "continent": "asia", + "x": 1264.49264527071, + "y": 67.989, + "value": 31011137 + }, + { + "title": "Netherlands", + "id": "NL", + "color": "#d8854f", + "continent": "europe", + "x": 36257.0874018501, + "y": 80.906, + "value": 16714228 + }, + { + "title": "New Zealand", + "id": "NZ", + "color": "#8aabb0", + "continent": "australia", + "x": 25223.5351395532, + "y": 80.982, + "value": 4461257 + }, + { + "title": "Nicaragua", + "id": "NI", + "color": "#a7a737", + "continent": "north_america", + "x": 3098.48351674394, + "y": 74.515, + "value": 5954898 + }, + { + "title": "Niger", + "id": "NE", + "color": "#de4c4f", + "continent": "africa", + "x": 706.79424834157, + "y": 57.934, + "value": 16644339 + }, + { + "title": "Nigeria", + "id": "NG", + "color": "#de4c4f", + "continent": "africa", + "x": 2483.98940927953, + "y": 52.116, + "value": 166629383 + }, + { + "title": "Norway", + "id": "NO", + "color": "#d8854f", + "continent": "europe", + "x": 47383.6245293861, + "y": 81.367, + "value": 4960482 + }, + { + "title": "Oman", + "id": "OM", + "color": "#eea638", + "continent": "asia", + "x": 26292.8480723207, + "y": 76.287, + "value": 2904037 + }, + { + "title": "Pakistan", + "id": "PK", + "color": "#eea638", + "continent": "asia", + "x": 2681.12078190231, + "y": 66.42, + "value": 179951140 + }, + { + "title": "Panama", + "id": "PA", + "color": "#a7a737", + "continent": "north_america", + "x": 13607.1433621853, + "y": 77.342, + "value": 3624991 + }, + { + "title": "Papua New Guinea", + "id": "PG", + "color": "#8aabb0", + "continent": "australia", + "x": 2391.5795121997, + "y": 62.288, + "value": 7170112 + }, + { + "title": "Paraguay", + "id": "PY", + "color": "#86a965", + "continent": "south_america", + "x": 4467.15872465943, + "y": 72.181, + "value": 6682943 + }, + { + "title": "Peru", + "id": "PE", + "color": "#86a965", + "continent": "south_america", + "x": 9277.57076044381, + "y": 74.525, + "value": 29733829 + }, + { + "title": "Philippines", + "id": "PH", + "color": "#eea638", + "continent": "asia", + "x": 3677.10197520058, + "y": 68.538, + "value": 96471461 + }, + { + "title": "Poland", + "id": "PL", + "color": "#d8854f", + "continent": "europe", + "x": 17851.9477668397, + "y": 76.239, + "value": 38317090 + }, + { + "title": "Portugal", + "id": "PT", + "color": "#d8854f", + "continent": "europe", + "x": 19576.4108427574, + "y": 79.732, + "value": 10699333 + }, + { + "title": "Romania", + "id": "RO", + "color": "#d8854f", + "continent": "europe", + "x": 11058.1809744544, + "y": 73.718, + "value": 21387517 + }, + { + "title": "Russia", + "id": "RU", + "color": "#d8854f", + "continent": "europe", + "x": 15427.6167470064, + "y": 67.874, + "value": 142703181 + }, + { + "title": "Rwanda", + "id": "RW", + "color": "#de4c4f", + "continent": "africa", + "x": 1223.52570881561, + "y": 63.563, + "value": 11271786 + }, + { + "title": "Saudi Arabia", + "id": "SA", + "color": "#eea638", + "continent": "asia", + "x": 26259.6213479005, + "y": 75.264, + "value": 28705133 + }, + { + "title": "Senegal", + "id": "SN", + "color": "#de4c4f", + "continent": "africa", + "x": 1753.48800936096, + "y": 63.3, + "value": 13107945 + }, + { + "title": "Serbia", + "id": "RS", + "color": "#d8854f", + "continent": "europe", + "x": 9335.95911484282, + "y": 73.934, + "value": 9846582 + }, + { + "title": "Sierra Leone", + "id": "SL", + "color": "#de4c4f", + "continent": "africa", + "x": 1072.95787930719, + "y": 45.338, + "value": 6126450 + }, + { + "title": "Singapore", + "id": "SG", + "color": "#eea638", + "continent": "asia", + "x": 49381.9560054179, + "y": 82.155, + "value": 5256278 + }, + { + "title": "Slovak Republic", + "id": "SK", + "color": "#d8854f", + "continent": "europe", + "x": 20780.9857840812, + "y": 75.272, + "value": 5480332 + }, + { + "title": "Slovenia", + "id": "SI", + "color": "#d8854f", + "continent": "europe", + "x": 23986.8506836646, + "y": 79.444, + "value": 2040057 + }, + { + "title": "Solomon Islands", + "id": "SB", + "color": "#8aabb0", + "continent": "australia", + "x": 2024.23067334134, + "y": 67.465, + "value": 566481 + }, + { + "title": "Somalia", + "id": "SO", + "color": "#de4c4f", + "continent": "africa", + "x": 953.275713662563, + "y": 54, + "value": 9797445 + }, + { + "title": "South Africa", + "id": "ZA", + "color": "#de4c4f", + "continent": "africa", + "x": 9657.25275417241, + "y": 56.271, + "value": 50738255 + }, + { + "title": "South Sudan", + "id": "SS", + "color": "#de4c4f", + "continent": "africa", + "x": 1433.03720057714, + "y": 54.666, + "value": 10386101 + }, + { + "title": "Spain", + "id": "ES", + "color": "#d8854f", + "continent": "europe", + "x": 26457.7572559653, + "y": 81.958, + "value": 46771596 + }, + { + "title": "Sri Lanka", + "id": "LK", + "color": "#eea638", + "continent": "asia", + "x": 5182.66658831813, + "y": 74.116, + "value": 21223550 + }, + { + "title": "Sudan", + "id": "SD", + "color": "#de4c4f", + "continent": "africa", + "x": 2917.61641581811, + "y": 61.875, + "value": 35335982 + }, + { + "title": "Suriname", + "id": "SR", + "color": "#86a965", + "continent": "south_america", + "x": 8979.80549248675, + "y": 70.794, + "value": 534175 + }, + { + "title": "Swaziland", + "id": "SZ", + "color": "#de4c4f", + "continent": "africa", + "x": 4979.704126513, + "y": 48.91, + "value": 1220408 + }, + { + "title": "Sweden", + "id": "SE", + "color": "#d8854f", + "continent": "europe", + "x": 34530.2628238397, + "y": 81.69, + "value": 9495392 + }, + { + "title": "Switzerland", + "id": "CH", + "color": "#d8854f", + "continent": "europe", + "x": 37678.3928108684, + "y": 82.471, + "value": 7733709 + }, + { + "title": "Syria", + "id": "SY", + "color": "#eea638", + "continent": "asia", + "x": 4432.01553897559, + "y": 71, + "value": 21117690 + }, + { + "title": "Taiwan", + "id": "TW", + "color": "#eea638", + "continent": "asia", + "x": 32840.8623523232, + "y": 79.45, + "value": 23114000 + }, + { + "title": "Tajikistan", + "id": "TJ", + "color": "#eea638", + "continent": "asia", + "x": 1952.10042735043, + "y": 67.118, + "value": 7078755 + }, + { + "title": "Tanzania", + "id": "TZ", + "color": "#de4c4f", + "continent": "africa", + "x": 1330.05614548839, + "y": 60.885, + "value": 47656367 + }, + { + "title": "Thailand", + "id": "TH", + "color": "#eea638", + "continent": "asia", + "x": 8451.15964058768, + "y": 74.225, + "value": 69892142 + }, + { + "title": "Timor-Leste", + "id": "TL", + "color": "#eea638", + "continent": "asia", + "x": 3466.08281224683, + "y": 67.033, + "value": 1187194 + }, + { + "title": "Togo", + "id": "TG", + "color": "#de4c4f", + "continent": "africa", + "x": 975.396852535221, + "y": 56.198, + "value": 6283092 + }, + { + "title": "Trinidad and Tobago", + "id": "TT", + "color": "#a7a737", + "continent": "north_america", + "x": 17182.0954558471, + "y": 69.761, + "value": 1350999 + }, + { + "title": "Tunisia", + "id": "TN", + "color": "#de4c4f", + "continent": "africa", + "x": 7620.47056462131, + "y": 75.632, + "value": 10704948 + }, + { + "title": "Türkiye", + "id": "TR", + "color": "#d8854f", + "continent": "europe", + "x": 9287.29312549815, + "y": 74.938, + "value": 74508771 + }, + { + "title": "Turkmenistan", + "id": "TM", + "color": "#eea638", + "continent": "asia", + "x": 7921.2740619558, + "y": 65.299, + "value": 5169660 + }, + { + "title": "Uganda", + "id": "UG", + "color": "#de4c4f", + "continent": "africa", + "x": 1251.09807015907, + "y": 58.668, + "value": 35620977 + }, + { + "title": "Ukraine", + "id": "UA", + "color": "#d8854f", + "continent": "europe", + "x": 6389.58597273257, + "y": 68.414, + "value": 44940268 + }, + { + "title": "United Arab Emirates", + "id": "AE", + "color": "#eea638", + "continent": "asia", + "x": 31980.24143802, + "y": 76.671, + "value": 8105873 + }, + { + "title": "United Kingdom", + "id": "GB", + "color": "#d8854f", + "continent": "europe", + "x": 31295.1431522074, + "y": 80.396, + "value": 62798099 + }, + { + "title": "United States", + "id": "US", + "color": "#a7a737", + "continent": "north_america", + "x": 42296.2316492477, + "y": 78.797, + "value": 315791284 + }, + { + "title": "Uruguay", + "id": "UY", + "color": "#86a965", + "continent": "south_america", + "x": 13179.2310803465, + "y": 77.084, + "value": 3391428 + }, + { + "title": "Uzbekistan", + "id": "UZ", + "color": "#eea638", + "continent": "asia", + "x": 3117.27386553102, + "y": 68.117, + "value": 28077486 + }, + { + "title": "Venezuela", + "id": "VE", + "color": "#86a965", + "continent": "south_america", + "x": 11685.1771941737, + "y": 74.477, + "value": 29890694 + }, + { + "title": "West Bank and Gaza", + "id": "PS", + "color": "#eea638", + "continent": "asia", + "x": 4328.39115760087, + "y": 73.018, + "value": 4270791 + }, + { + "title": "Vietnam", + "id": "VN", + "color": "#eea638", + "continent": "asia", + "x": 3073.64961158389, + "y": 75.793, + "value": 89730274 + }, + { + "title": "Yemen, Rep.", + "id": "YE", + "color": "#eea638", + "continent": "asia", + "x": 2043.7877761328, + "y": 62.923, + "value": 25569263 + }, + { + "title": "Zambia", + "id": "ZM", + "color": "#de4c4f", + "continent": "africa", + "x": 1550.92385858124, + "y": 57.037, + "value": 13883577 + }, + { + "title": "Zimbabwe", + "id": "ZW", + "color": "#de4c4f", + "continent": "africa", + "x": 545.344601005788, + "y": 58.142, + "value": 13013678 + } +]); + +var background = series.get("tooltip").get("background"); +background.set("stroke", root.interfaceColors.get("alternativeBackground")); +background.adapters.add("fill", function (fill, target) { + var dataItem = target.dataItem; + if (dataItem && dataItem.dataContext) { + return am5.Color.fromString(dataItem.dataContext.color); + } + return fill +}); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +chart.set("cursor", am5xy.XYCursor.new(root, { + xAxis: xAxis, + yAxis: yAxis, + snapToSeries: [series] +})); + + +// Add scrollbars +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +chart.set("scrollbarY", am5.Scrollbar.new(root, { + orientation: "vertical" +})); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-candlestick/README.md b/src/main/resources/static/js/amcharts5/examples/xy-candlestick/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-candlestick/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-candlestick/index.css b/src/main/resources/static/js/amcharts5/examples/xy-candlestick/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-candlestick/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-candlestick/index.html b/src/main/resources/static/js/amcharts5/examples/xy-candlestick/index.html new file mode 100644 index 00000000..6e2a996e --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-candlestick/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-candlestick + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-candlestick/index.js b/src/main/resources/static/js/amcharts5/examples/xy-candlestick/index.js new file mode 100644 index 00000000..f384693d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-candlestick/index.js @@ -0,0 +1,178 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([am5themes_Animated.new(root)]); + +function generateChartData() { + var chartData = []; + var firstDate = new Date(); + firstDate.setDate(firstDate.getDate() - 1000); + firstDate.setHours(0, 0, 0, 0); + var value = 1200; + for (var i = 0; i < 5000; i++) { + var newDate = new Date(firstDate); + newDate.setDate(newDate.getDate() + i); + + value += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 10); + var open = value + Math.round(Math.random() * 16 - 8); + var low = Math.min(value, open) - Math.round(Math.random() * 5); + var high = Math.max(value, open) + Math.round(Math.random() * 5); + + chartData.push({ + date: newDate.getTime(), + value: value, + open: open, + low: low, + high: high + }); + } + return chartData; +} + +var data = generateChartData(); + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push( + am5xy.XYChart.new(root, { + focusable: true, + panX: true, + panY: true, + wheelX: "panX", + wheelY: "zoomX" + }) +); + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push( + am5xy.DateAxis.new(root, { + groupData: true, + maxDeviation:1, + baseInterval: { timeUnit: "day", count: 1 }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true, + pan:"zoom" + }), + tooltip: am5.Tooltip.new(root, {}) + }) +); + +var yAxis = chart.yAxes.push( + am5xy.ValueAxis.new(root, { + maxDeviation:1, + renderer: am5xy.AxisRendererY.new(root, { + pan:"zoom" + }) + }) +); + +var color = root.interfaceColors.get("background"); + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push( + am5xy.CandlestickSeries.new(root, { + turboMode: true, + fill: color, + calculateAggregates: true, + stroke: color, + name: "MDXI", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + openValueYField: "open", + lowValueYField: "low", + highValueYField: "high", + valueXField: "date", + lowValueYGrouped: "low", + highValueYGrouped: "high", + openValueYGrouped: "open", + valueYGrouped: "close", + legendValueText: + "open: {openValueY} low: {lowValueY} high: {highValueY} close: {valueY}", + legendRangeValueText: "{valueYClose}", + tooltip: am5.Tooltip.new(root, { + pointerOrientation: "horizontal", + labelText: "open: {openValueY}\nlow: {lowValueY}\nhigh: {highValueY}\nclose: {valueY}" + }) + }) +); + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set( + "cursor", + am5xy.XYCursor.new(root, { + xAxis: xAxis + }) +); +cursor.lineY.set("visible", false); + +// Stack axes vertically +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/#Stacked_axes +chart.leftAxesContainer.set("layout", root.verticalLayout); + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +}); +chart.set("scrollbarX", scrollbar); + +var sbxAxis = scrollbar.chart.xAxes.push( + am5xy.DateAxis.new(root, { + groupData: true, + groupIntervals: [{ timeUnit: "week", count: 1 }], + baseInterval: { timeUnit: "day", count: 1 }, + renderer: am5xy.AxisRendererX.new(root, { + opposite: false, + strokeOpacity: 0 + }) + }) +); + +var sbyAxis = scrollbar.chart.yAxes.push( + am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) + }) +); + +var sbseries = scrollbar.chart.series.push( + am5xy.LineSeries.new(root, { + xAxis: sbxAxis, + yAxis: sbyAxis, + valueYField: "value", + valueXField: "date" + }) +); + +// Add legend +// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/ +var legend = yAxis.axisHeader.children.push(am5.Legend.new(root, {})); + +legend.data.push(series); + +legend.markers.template.setAll({ + width: 10 +}); + +legend.markerRectangles.template.setAll({ + cornerRadiusTR: 0, + cornerRadiusBR: 0, + cornerRadiusTL: 0, + cornerRadiusBL: 0 +}); + +// set data +series.data.setAll(data); +sbseries.data.setAll(data); + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +series.appear(1000); +chart.appear(1000, 100); diff --git a/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/README.md b/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/index.css b/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/index.html b/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/index.html new file mode 100644 index 00000000..5fb8a236 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-clustered-column + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/index.js b/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/index.js new file mode 100644 index 00000000..cc1f02d8 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-clustered-column/index.js @@ -0,0 +1,139 @@ +/** + * --------------------------------------- + * This demo was created using amCharts 5. + * + * For more information visit: + * https://www.amcharts.com/ + * + * Documentation is available at: + * https://www.amcharts.com/docs/v5/ + * --------------------------------------- + */ + +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + layout: root.verticalLayout +})); + + +// Add legend +// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/ +var legend = chart.children.push( + am5.Legend.new(root, { + centerX: am5.p50, + x: am5.p50 + }) +); + +var data = [{ + "year": "2021", + "europe": 2.5, + "namerica": 2.5, + "asia": 2.1, + "lamerica": 1, + "meast": 0.8, + "africa": 0.4 +}, { + "year": "2022", + "europe": 2.6, + "namerica": 2.7, + "asia": 2.2, + "lamerica": 0.5, + "meast": 0.4, + "africa": 0.3 +}, { + "year": "2023", + "europe": 2.8, + "namerica": 2.9, + "asia": 2.4, + "lamerica": 0.3, + "meast": 0.9, + "africa": 0.5 +}] + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { + categoryField: "year", + renderer: am5xy.AxisRendererX.new(root, { + cellStartLocation: 0.1, + cellEndLocation: 0.9 + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +xAxis.data.setAll(data); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +function makeSeries(name, fieldName) { + var series = chart.series.push(am5xy.ColumnSeries.new(root, { + name: name, + xAxis: xAxis, + yAxis: yAxis, + valueYField: fieldName, + categoryXField: "year" + })); + + series.columns.template.setAll({ + tooltipText: "{name}, {categoryX}:{valueY}", + width: am5.percent(90), + tooltipY: 0 + }); + + series.data.setAll(data); + + // Make stuff animate on load + // https://www.amcharts.com/docs/v5/concepts/animations/ + series.appear(); + + series.bullets.push(function () { + return am5.Bullet.new(root, { + locationY: 0, + sprite: am5.Label.new(root, { + text: "{valueY}", + fill: root.interfaceColors.get("alternativeText"), + centerY: 0, + centerX: am5.p50, + populateText: true + }) + }); + }); + + legend.data.push(series); +} + +makeSeries("Europe", "europe"); +makeSeries("North America", "namerica"); +makeSeries("Asia", "asia"); +makeSeries("Latin America", "lamerica"); +makeSeries("Middle East", "meast"); +makeSeries("Africa", "africa"); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-column/README.md b/src/main/resources/static/js/amcharts5/examples/xy-column/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-column/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-column/index.css b/src/main/resources/static/js/amcharts5/examples/xy-column/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-column/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-column/index.html b/src/main/resources/static/js/amcharts5/examples/xy-column/index.html new file mode 100644 index 00000000..45f2d6cf --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-column/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-column + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-column/index.js b/src/main/resources/static/js/amcharts5/examples/xy-column/index.js new file mode 100644 index 00000000..98e62717 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-column/index.js @@ -0,0 +1,98 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX" +})); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, { + behavior: "zoomX" +})); +cursor.lineY.set("visible", false); + +var date = new Date(); +date.setHours(0, 0, 0, 0); +var value = 100; + +function generateData() { + value = Math.round((Math.random() * 10 - 5) + value); + am5.time.add(date, "day", 1); + return { + date: date.getTime(), + value: value + }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + maxDeviation: 0, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.ColumnSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +var data = generateDatas(50); +series.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/README.md b/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/index.css b/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/index.html b/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/index.html new file mode 100644 index 00000000..87955a84 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-comparing-series-google-analytics-style + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/index.js b/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/index.js new file mode 100644 index 00000000..2b9e0e4c --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-comparing-series-google-analytics-style/index.js @@ -0,0 +1,136 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: true, + panY: true, + wheelX: "panX", + wheelY: "zoomX" +})); + +chart.get("colors").set("step", 3); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, {})); +cursor.lineY.set("visible", false); + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + maxDeviation: 0.3, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation: 0.3, + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series 1", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value1", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueX}: {valueY}\n{previousDate}: {value2}" + }) +})); + +series.strokes.template.setAll({ + strokeWidth: 2 +}); + +series.get("tooltip").get("background").set("fillOpacity", 0.5); + +var series2 = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series 2", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value2", + valueXField: "date" +})); +series2.strokes.template.setAll({ + strokeDasharray: [2, 2], + strokeWidth: 2 +}); + +// Set date fields +// https://www.amcharts.com/docs/v5/concepts/data/#Parsing_dates +root.dateFormatter.setAll({ + dateFormat: "yyyy-MM-dd", + dateFields: ["valueX"] +}); + + +// Set data +var data = [{ + date: new Date(2019, 5, 12).getTime(), + value1: 50, + value2: 48, + previousDate: new Date(2019, 5, 5) +}, { + date: new Date(2019, 5, 13).getTime(), + value1: 53, + value2: 51, + previousDate: "2019-05-06" +}, { + date: new Date(2019, 5, 14).getTime(), + value1: 56, + value2: 58, + previousDate: "2019-05-07" +}, { + date: new Date(2019, 5, 15).getTime(), + value1: 52, + value2: 53, + previousDate: "2019-05-08" +}, { + date: new Date(2019, 5, 16).getTime(), + value1: 48, + value2: 44, + previousDate: "2019-05-09" +}, { + date: new Date(2019, 5, 17).getTime(), + value1: 47, + value2: 42, + previousDate: "2019-05-10" +}, { + date: new Date(2019, 5, 18).getTime(), + value1: 59, + value2: 55, + previousDate: "2019-05-11" +}] + +series.data.setAll(data); +series2.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +series.appear(1000); +series2.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/README.md b/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/index.css b/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/index.html b/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/index.html new file mode 100644 index 00000000..231ddde1 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-data-grouping + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/index.js b/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/index.js new file mode 100644 index 00000000..6719b24f --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-data-grouping/index.js @@ -0,0 +1,104 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX" +})); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, { + behavior: "zoomX" +})); +cursor.lineY.set("visible", false); + + +// Generate random data +var date = new Date(); +date.setHours(0, 0, 0, 0); +var value = 100; + +function generateData() { + value = Math.round((Math.random() * 10 - 5) + value); + am5.time.add(date, "day", 1); + return { + date: date.getTime(), + value: value + }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + groupData: true, + maxDeviation: 0.2, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true, + pan:"zoom" + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation: 1, + renderer: am5xy.AxisRendererY.new(root, { + pan:"zoom" + }) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +var data = generateDatas(50000); +series.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/README.md b/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/index.css b/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/index.html b/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/index.html new file mode 100644 index 00000000..c40fbe74 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-draggable-range + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/index.js b/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/index.js new file mode 100644 index 00000000..cf38b718 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-draggable-range/index.js @@ -0,0 +1,177 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: true, + panY: true, + wheelX: "panX", + wheelY: "zoomX" +})); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, {})); +cursor.lineX.set("forceHidden", true); +cursor.lineY.set("forceHidden", true); + +// Generate random data +var date = new Date(); +date.setHours(0, 0, 0, 0); +var value = 100; + +function generateData() { + value = Math.round((Math.random() * 10 - 5) + value); + am5.time.add(date, "day", 1); + return { + date: date.getTime(), + value: value + }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); + +series.fills.template.setAll({ + fillOpacity: 0.2, + visible: true +}); + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + + +// Set data +var data = generateDatas(1200); +series.data.setAll(data); + + +var rangeDate = new Date(); +am5.time.add(rangeDate, "day", Math.round(series.dataItems.length / 2)); +var rangeTime = rangeDate.getTime(); + +// add series range +var seriesRangeDataItem = xAxis.makeDataItem({}); +var seriesRange = series.createAxisRange(seriesRangeDataItem); +seriesRange.fills.template.setAll({ + visible: true, + opacity: 0.3 +}); + +seriesRange.fills.template.set("fillPattern", am5.LinePattern.new(root, { + color: am5.color(0xff0000), + rotation: 45, + strokeWidth: 2, + width: 2000, + height: 2000, + fill: am5.color(0xffffff) +})); + +seriesRange.strokes.template.set("stroke", am5.color(0xff0000)); + +xAxis.onPrivate("max", function (value) { + seriesRangeDataItem.set("endValue", value); + seriesRangeDataItem.set("value", rangeTime); +}); + +// add axis range +var range = xAxis.createAxisRange(xAxis.makeDataItem({})); +var color = root.interfaceColors.get("primaryButton"); + +range.set("value", rangeDate.getTime()); +range.get("grid").setAll({ + strokeOpacity: 1, + stroke: color +}); + +var resizeButton = am5.Button.new(root, { + themeTags: ["resize", "horizontal"], + icon: am5.Graphics.new(root, { + themeTags: ["icon"] + }) +}); + +// restrict from being dragged vertically +resizeButton.adapters.add("y", function () { + return 0; +}); + +// restrict from being dragged outside of plot +resizeButton.adapters.add("x", function (x) { + return Math.max(0, Math.min(chart.plotContainer.width(), x)); +}); + +// change range when x changes +resizeButton.events.on("dragged", function () { + var x = resizeButton.x(); + var position = xAxis.toAxisPosition(x / chart.plotContainer.width()); + + var value = xAxis.positionToValue(position); + + range.set("value", value); + + seriesRangeDataItem.set("value", value); + seriesRangeDataItem.set("endValue", xAxis.getPrivate("max")); +}); + +// set bullet for the range +range.set("bullet", am5xy.AxisBullet.new(root, { + sprite: resizeButton +})); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/README.md b/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/index.css b/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/index.html b/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/index.html new file mode 100644 index 00000000..a283ae5b --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-drawing-series-with-mouse-or-touch + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/index.js b/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/index.js new file mode 100644 index 00000000..c64642dc --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-drawing-series-with-mouse-or-touch/index.js @@ -0,0 +1,201 @@ +/** + * --------------------------------------- + * This demo was created using amCharts 5. + * + * For more information visit: + * https://www.amcharts.com/ + * + * Documentation is available at: + * https://www.amcharts.com/docs/v5/ + * --------------------------------------- + */ + +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: true, + panY: true, + wheelX: "panX", + wheelY: "zoomX" +})); + +chart.get("colors").set("step", 3); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, {})); +cursor.lineY.set("visible", false); + + +// Generate random data +var date = new Date(); +date.setHours(0, 0, 0, 0); +var value = 100; + +function generateData() { + value = Math.round((Math.random() * 10 - 5) + value); + am5.time.add(date, "day", 1); + return { + date: date.getTime(), + value: value + }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + maxDeviation: 0.3, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation: 0.3, + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +var series = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); + +var drawingSeries = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date" +})); + +// Invisible bullet which will be dragged (to avoid some conflicting between +// drag position and bullet position which results flicker) +drawingSeries.bullets.push(function() { + var bulletCircle = am5.Circle.new(root, { + radius: 6, + fillOpacity: 0, + fill: drawingSeries.get("fill"), + draggable: true, + cursorOverStyle: "pointer" + }); + bulletCircle.events.on("dragged", function(e) { + handleDrag(e); + }) + return am5.Bullet.new(root, { + sprite: bulletCircle + }) +}) + +// Actual bullet +drawingSeries.bullets.push(function() { + var bulletCircle = am5.Circle.new(root, { + radius: 5, + fill: drawingSeries.get("fill") + }); + return am5.Bullet.new(root, { + sprite: bulletCircle + }) +}) + +// Drag handler +function handleDrag(e) { + var point = chart.plotContainer.toLocal(e.point); + var date = xAxis.positionToValue(xAxis.coordinateToPosition(point.x)); + var value = yAxis.positionToValue(yAxis.coordinateToPosition(point.y)); + + var dataItem = e.target.dataItem; + dataItem.set("valueX", date); + dataItem.set("valueXWorking", date); + dataItem.set("valueY", value); + dataItem.set("valueYWorking", value); +} + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + + +// Set data +var data = generateDatas(1200); +series.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +series.appear(1000); +chart.appear(1000, 100); + +// Interactivity +chart.plotContainer.get("background").events.on("click", function(e) { + var point = chart.plotContainer.toLocal(e.point); + var date = xAxis.positionToValue(xAxis.coordinateToPosition(point.x)); + var value = yAxis.positionToValue(yAxis.coordinateToPosition(point.y)); + drawingSeries.data.push({ + date: date, + value: value + }); + + sortData(); +}) + + +// Sort data so that if clicked between existing data items, the item would +// be added between +function sortData() { + drawingSeries.dataItems.sort(function(a, b) { + var atime = a.get("valueX"); + var btime = b.get("valueX"); + + if (atime < btime) { + return -1; + } else if (atime == btime) { + return 0; + } else { + return 1; + } + }) +} + +// Explanatory labels +chart.plotContainer.children.push(am5.Label.new(root, { + x: 10, + y: 10, + text: "Click on plot area to draw a series" +})); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/README.md b/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/index.css b/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/index.html b/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/index.html new file mode 100644 index 00000000..d6086c43 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-dumbbell plot + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/index.js b/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/index.js new file mode 100644 index 00000000..be4be62e --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-dumbbell plot/index.js @@ -0,0 +1,148 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: true, + panY: true, + wheelX: "panX", + wheelY: "zoomX" +})); + +chart.get("colors").set("step", 3); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, {})); +cursor.lineY.set("visible", false); + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xRenderer = am5xy.AxisRendererX.new(root, { + minGridDistance: 30, + minorGridEnabled: true +}); +xRenderer.labels.template.setAll({ + rotation: -90, + centerY: am5.p50, + centerX: 0 +}); + +var xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0.3, + categoryField: "category", + renderer: xRenderer, + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation: 0.3, + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Create series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.ColumnSeries.new(root, { + name: "Series 1", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "close", + openValueYField: "open", + categoryXField: "category", + tooltip: am5.Tooltip.new(root, { + labelText: "{openValueY} - {valueY}" + }) +})); +series.columns.template.setAll({ + width: 0.5 +}); + +series.bullets.push(function() { + return am5.Bullet.new(root, { + locationY: 0, + sprite: am5.Circle.new(root, { + radius: 5, + fill: series.get("fill") + }) + }) +}) + +var nextColor = chart.get("colors").getIndex(1); + +series.bullets.push(function() { + return am5.Bullet.new(root, { + locationY: 1, + sprite: am5.Circle.new(root, { + radius: 5, + fill: nextColor + }) + }) +}) + +// Set data +var data = []; +var open = 100; +var close = 120; + +var names = ["Raina", + "Demarcus", + "Carlo", + "Jacinda", + "Richie", + "Antony", + "Amada", + "Idalia", + "Janella", + "Marla", + "Curtis", + "Shellie", + "Meggan", + "Nathanael", + "Jannette", + "Tyrell", + "Sheena", + "Maranda", + "Briana", + "Rosa", + "Rosanne", + "Herman", + "Wayne", + "Shamika", + "Suk", + "Clair", + "Olivia", + "Hans", + "Glennie", +]; + +for (var i = 0; i < names.length; i++) { + open += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 5); + close = open + Math.round(Math.random() * 10) + 3; + data.push({ + category: names[i], + open: open, + close: close + }); +} + +xAxis.data.setAll(data); +series.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/README.md b/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/index.css b/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/index.html b/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/index.html new file mode 100644 index 00000000..a45f15e4 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-evenly-spaced-date-axis + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/index.js b/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/index.js new file mode 100644 index 00000000..881d3a09 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-evenly-spaced-date-axis/index.js @@ -0,0 +1,119 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX" +})); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, { + behavior: "zoomX" +})); +cursor.lineY.set("visible", false); + +// Generate random data +var date = new Date(); +date.setHours(0, 0, 0, 0); +var value = 1; + +function generateData() { + value = Math.round((Math.random() * 10 - 5) + value); + if (date.getDay() == 5) { + am5.time.add(date, "day", 3); + } else { + am5.time.add(date, "day", 1); + } + + return { + date: date.getTime(), + value: value + }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/category-date-axis/ +var xRenderer = am5xy.AxisRendererX.new(root, { + pan:"zoom", + minorGridEnabled: true +}); +xRenderer.labels.template.set("minPosition", 0.01); +xRenderer.labels.template.set("maxPosition", 0.99); + +var xAxis = chart.xAxes.push( + am5xy.GaplessDateAxis.new(root, { + maxDeviation:0.5, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: xRenderer, + tooltip: am5.Tooltip.new(root, {}) + }) +); + +var yAxis = chart.yAxes.push( + am5xy.ValueAxis.new(root, { + maxDeviation:1, + renderer: am5xy.AxisRendererY.new(root, { + pan:"zoom" + }) + }) +); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + + +// Set data +var data = generateDatas(200); +series.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/README.md b/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/index.css b/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/index.html b/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/index.html new file mode 100644 index 00000000..55b82580 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-line-highlight-on-legend-hover + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/index.js b/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/index.js new file mode 100644 index 00000000..74f2702d --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-line-highlight-on-legend-hover/index.js @@ -0,0 +1,176 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push( + am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + maxTooltipDistance: 0 + }) +); + + +var date = new Date(); +date.setHours(0, 0, 0, 0); +var value = 100; + +function generateData() { + value = Math.round((Math.random() * 10 - 4.2) + value); + am5.time.add(date, "day", 1); + return { + date: date.getTime(), + value: value + }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push( + am5xy.DateAxis.new(root, { + maxDeviation: 0, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) + }) +); + +var yAxis = chart.yAxes.push( + am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) + }) +); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +for (var i = 0; i < 10; i++) { + var series = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series " + i, + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + legendValueText: "{valueY}", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}", + pointerOrientation: "horizontal" + }) + })); + + date = new Date(); + date.setHours(0, 0, 0, 0); + value = 0; + + var data = generateDatas(100); + series.data.setAll(data); + + // Make stuff animate on load + // https://www.amcharts.com/docs/v5/concepts/animations/ + series.appear(); +} + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, { + behavior: "zoomX" +})); +cursor.lineY.set("visible", false); + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +chart.set("scrollbarY", am5.Scrollbar.new(root, { + orientation: "vertical" +})); + + +// Add legend +// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/ +var legend = chart.rightAxesContainer.children.push( + am5.Legend.new(root, { + width: 200, + paddingLeft: 15, + height: am5.percent(100) + }) +); + +// When legend item container is hovered, dim all the series except the hovered one +legend.itemContainers.template.events.on("pointerover", function(e) { + var itemContainer = e.target; + + // As series list is data of a legend, dataContext is series + var series = itemContainer.dataItem.dataContext; + + chart.series.each(function(chartSeries) { + if (chartSeries != series) { + chartSeries.strokes.template.setAll({ + strokeOpacity: 0.15, + stroke: am5.color(0x000000) + }); + } else { + chartSeries.strokes.template.setAll({ + strokeWidth: 3 + }); + } + }) +}) + +// When legend item container is unhovered, make all series as they are +legend.itemContainers.template.events.on("pointerout", function(e) { + var itemContainer = e.target; + var series = itemContainer.dataItem.dataContext; + + chart.series.each(function(chartSeries) { + chartSeries.strokes.template.setAll({ + strokeOpacity: 1, + strokeWidth: 1, + stroke: chartSeries.get("fill") + }); + }); +}) + +legend.itemContainers.template.set("width", am5.p100); +legend.valueLabels.template.setAll({ + width: am5.p100, + textAlign: "right" +}); + +// It's is important to set legend data after all the events are set on template, otherwise events won't be copied +legend.data.setAll(chart.series.values); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-line/README.md b/src/main/resources/static/js/amcharts5/examples/xy-line/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-line/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-line/index.css b/src/main/resources/static/js/amcharts5/examples/xy-line/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-line/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-line/index.html b/src/main/resources/static/js/amcharts5/examples/xy-line/index.html new file mode 100644 index 00000000..c278115e --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-line/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-line + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-line/index.js b/src/main/resources/static/js/amcharts5/examples/xy-line/index.js new file mode 100644 index 00000000..57cc9bdc --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-line/index.js @@ -0,0 +1,111 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + +// Specify date fields, so that they are formatted accordingly in tooltips +// https://www.amcharts.com/docs/v5/concepts/formatters/data-placeholders/#Formatting_placeholders +root.dateFormatter.setAll({ + dateFields: ["valueX"] +}); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX" +})); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, { + behavior: "zoomX" +})); +cursor.lineY.set("visible", false); + + +// Generate random data +var date = new Date(); +date.setHours(0, 0, 0, 0); +var value = 100; + +function generateData() { + value = Math.round((Math.random() * 10 - 5) + value); + am5.time.add(date, "day", 1); + return { + date: date.getTime(), + value: value + }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + maxDeviation: 0.5, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true, + pan:"zoom" + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation:1, + renderer: am5xy.AxisRendererY.new(root, { + pan:"zoom" + }) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.LineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueX}: {valueY}" + }) +})); + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + + +// Set data +var data = generateDatas(1200); +series.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-live-data/README.md b/src/main/resources/static/js/amcharts5/examples/xy-live-data/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-live-data/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-live-data/index.css b/src/main/resources/static/js/amcharts5/examples/xy-live-data/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-live-data/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-live-data/index.html b/src/main/resources/static/js/amcharts5/examples/xy-live-data/index.html new file mode 100644 index 00000000..21b428f3 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-live-data/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-live-data + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-live-data/index.js b/src/main/resources/static/js/amcharts5/examples/xy-live-data/index.js new file mode 100644 index 00000000..a6888994 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-live-data/index.js @@ -0,0 +1,167 @@ +/** + * --------------------------------------- + * This demo was created using amCharts 5. + * + * For more information visit: + * https://www.amcharts.com/ + * + * Documentation is available at: + * https://www.amcharts.com/docs/v5/ + * --------------------------------------- + */ + +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Generate random data +var value = 100; + +function generateChartData() { + var chartData = []; + var firstDate = new Date(); + firstDate.setDate(firstDate.getDate() - 1000); + firstDate.setHours(0, 0, 0, 0); + + for (var i = 0; i < 16; i++) { + var newDate = new Date(firstDate); + newDate.setDate(newDate.getDate() + i); + + value += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 10); + + chartData.push({ + date: newDate.getTime(), + value: value + }); + } + return chartData; +} + +var data = generateChartData(); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + focusable: true, + panX: true, + panY: true, + wheelX: "panX", + wheelY: "zoomX" +})); + +var easing = am5.ease.linear; + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + maxDeviation: 0.5, + groupData: false, + extraMin:-0.05, + extraMax:0.1, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minGridDistance: 50 + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.LineSeries.new(root, { + minBulletDistance: 10, + name: "Series 1", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + pointerOrientation: "horizontal", + labelText: "{valueY}" + }) +})); +series.data.setAll(data); + +series.bullets.push(function () { + return am5.Bullet.new(root, { + locationX:undefined, + sprite: am5.Circle.new(root, { + radius: 4, + fill: series.get("fill") + }) + }) +}); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, { + xAxis: xAxis +})); +cursor.lineY.set("visible", false); + + +// Update data every second +setInterval(function () { + addData(); +}, 1000) + + +function addData() { + var lastDataItem = series.dataItems[series.dataItems.length - 1]; + var lastValue = lastDataItem.get("valueY"); + var newValue = value + Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 2); + var lastDate = new Date(lastDataItem.get("valueX")); + var time = am5.time.add(new Date(lastDate), "day", 1).getTime(); + series.data.removeIndex(0); + series.data.push({ + date: time, + value: newValue + }) + + var newDataItem = series.dataItems[series.dataItems.length - 1]; + newDataItem.animate({ + key: "valueYWorking", + to: newValue, + from: lastValue, + duration: 600, + easing: easing + }); + + var animation = newDataItem.animate({ + key: "locationX", + to: 0.5, + from: -0.5, + duration: 600 + }); + if (animation) { + var tooltip = xAxis.get("tooltip"); + if (tooltip && !tooltip.isHidden()) { + animation.events.on("stopped", function () { + xAxis.updateTooltip(); + }) + } + } +} + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/README.md b/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/index.css b/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/index.html b/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/index.html new file mode 100644 index 00000000..1050e873 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-multiple-synced-value-axes + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/index.js b/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/index.js new file mode 100644 index 00000000..fdeb061e --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-multiple-synced-value-axes/index.js @@ -0,0 +1,163 @@ +/** + * --------------------------------------- + * This demo was created using amCharts 5. + * + * For more information visit: + * https://www.amcharts.com/ + * + * Documentation is available at: + * https://www.amcharts.com/docs/v5/ + * --------------------------------------- + */ + + +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([am5themes_Animated.new(root)]); + + +// Set global date format +// https://www.amcharts.com/docs/v5/concepts/formatters/formatting-dates/#Global_date_format +root.dateFormatter.setAll({ + dateFormat: "yyyy", + dateFields: ["valueX"] +}); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + focusable: true, + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX" +})); + +var easing = am5.ease.linear; +chart.get("colors").set("step", 3); + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + maxDeviation: 0.1, + groupData: false, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, { + animationDuration: 300 + }) +})); + +function createAxisAndSeries(startValue, opposite) { + var yRenderer = am5xy.AxisRendererY.new(root, { + opposite: opposite + }); + var yAxis = chart.yAxes.push( + am5xy.ValueAxis.new(root, { + maxDeviation: 1, + renderer: yRenderer + }) + ); + + // sync each axis with the first one + if (chart.yAxes.indexOf(yAxis) > 0) { + yAxis.set("syncWithAxis", chart.yAxes.getIndex(0)); + } + + // Add series + // https://www.amcharts.com/docs/v5/charts/xy-chart/series/ + var series = chart.series.push(am5xy.LineSeries.new(root, { + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}", + pointerOrientation: "horizontal" + }) + })); + + //series.fills.template.setAll({ fillOpacity: 0.2, visible: true }); + series.strokes.template.setAll({ strokeWidth: 1 }); + + yRenderer.grid.template.set("strokeOpacity", 0.05); + yRenderer.labels.template.set("fill", series.get("fill")); + yRenderer.setAll({ + stroke: series.get("fill"), + strokeOpacity: 1, + opacity: 1 + }); + + // Set up data processor to parse string dates + // https://www.amcharts.com/docs/v5/concepts/data/#Pre_processing_data + series.data.processor = am5.DataProcessor.new(root, { + dateFormat: "yyyy-MM-dd", + dateFields: ["date"] + }); + + series.data.setAll(generateChartData(startValue)); +} + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set( + "cursor", + am5xy.XYCursor.new(root, { + xAxis: xAxis, + behavior: "zoomX" + }) +); +cursor.lineY.set("visible", false); + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +createAxisAndSeries(100, false); +createAxisAndSeries(1000, true); +createAxisAndSeries(8000, true); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +chart.appear(1000, 100); + + +// Generate some random data, quite different range +function generateChartData(value) { + var data = []; + var firstDate = new Date(); + firstDate.setDate(firstDate.getDate() - 100); + firstDate.setHours(0, 0, 0, 0); + + for (var i = 0; i < 200; i++) { + var newDate = new Date(firstDate); + newDate.setDate(newDate.getDate() + i); + + value += Math.round( + ((Math.random() < 0.5 ? 1 : -1) * Math.random() * value) / 20 + ); + + data.push({ + date: newDate, + value: value + }); + } + return data; +} diff --git a/src/main/resources/static/js/amcharts5/examples/xy-ohlc/README.md b/src/main/resources/static/js/amcharts5/examples/xy-ohlc/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-ohlc/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-ohlc/index.css b/src/main/resources/static/js/amcharts5/examples/xy-ohlc/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-ohlc/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-ohlc/index.html b/src/main/resources/static/js/amcharts5/examples/xy-ohlc/index.html new file mode 100644 index 00000000..ee2bb9fb --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-ohlc/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-ohlc + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-ohlc/index.js b/src/main/resources/static/js/amcharts5/examples/xy-ohlc/index.js new file mode 100644 index 00000000..d5046d90 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-ohlc/index.js @@ -0,0 +1,166 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + +function generateChartData() { + var chartData = []; + var firstDate = new Date(); + firstDate.setDate(firstDate.getDate() - 1000); + firstDate.setHours(0, 0, 0, 0); + var value = 1200; + for (var i = 0; i < 5000; i++) { + var newDate = new Date(firstDate); + newDate.setDate(newDate.getDate() + i); + + value += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 10); + var open = value + Math.round(Math.random() * 16 - 8); + var low = Math.min(value, open) - Math.round(Math.random() * 5); + var high = Math.max(value, open) + Math.round(Math.random() * 5); + + chartData.push({ + date: newDate.getTime(), + value: value, + open: open, + low: low, + high: high, + }); + } + return chartData; +} + +var data = generateChartData(); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + focusable: true, + panX: true, + panY: true, + wheelX: "panX", + wheelY: "zoomX" +})); + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + groupData: true, + baseInterval: { timeUnit: "day", count: 1 }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +var color = root.interfaceColors.get("background"); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.OHLCSeries.new(root, { + fill: color, + calculateAggregates: true, + stroke: color, + name: "MDXI", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + openValueYField: "open", + lowValueYField: "low", + highValueYField: "high", + valueXField: "date", + lowValueYGrouped: "low", + highValueYGrouped: "high", + openValueYGrouped: "open", + valueYGrouped: "close", + legendValueText: "open: {openValueY} low: {lowValueY} high: {highValueY} close: {valueY}", + legendRangeValueText: "{valueYClose}", + tooltip: am5.Tooltip.new(root, { + pointerOrientation: "horizontal", + labelText: "open: {openValueY}\nlow: {lowValueY}\nhigh: {highValueY}\nclose: {valueY}" + }) +})); + + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, { + xAxis: xAxis +})); +cursor.lineY.set("visible", false); + + +// Stack axes vertically +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/#Stacked_axes +chart.leftAxesContainer.set("layout", root.verticalLayout); + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +}); +chart.set("scrollbarX", scrollbar); + +var sbxAxis = scrollbar.chart.xAxes.push(am5xy.DateAxis.new(root, { + groupData: true, + groupIntervals: [{ timeUnit: "week", count: 1 }], + baseInterval: { timeUnit: "day", count: 1 }, + renderer: am5xy.AxisRendererX.new(root, { + opposite: false, + strokeOpacity: 0 + }) +})); + +var sbyAxis = scrollbar.chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + +var sbseries = scrollbar.chart.series.push(am5xy.LineSeries.new(root, { + xAxis: sbxAxis, + yAxis: sbyAxis, + valueYField: "value", + valueXField: "date" +})); + +// Add legend +// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/ +var legend = yAxis.axisHeader.children.push( + am5.Legend.new(root, {}) +); + +legend.data.push(series); + +legend.markers.template.setAll({ + width: 10 +}); + +legend.markerRectangles.template.setAll({ + cornerRadiusTR: 0, + cornerRadiusBR: 0, + cornerRadiusTL: 0, + cornerRadiusBL: 0 +}); + +series.data.setAll(data); +sbseries.data.setAll(data); + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/README.md b/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/index.css b/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/index.html b/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/index.html new file mode 100644 index 00000000..5d2e7e62 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-real-time-data-sorting + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/index.js b/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/index.js new file mode 100644 index 00000000..ccdb94bb --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-real-time-data-sorting/index.js @@ -0,0 +1,215 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: true, + panY: true, + wheelX: "none", + wheelY: "none" +})); + +// We don't want zoom-out button to appear while animating, so we hide it +chart.zoomOutButton.set("forceHidden", true); + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xRenderer = am5xy.AxisRendererX.new(root, { + minGridDistance: 30 +}); +xRenderer.labels.template.setAll({ + rotation: -90, + centerY: am5.p50, + centerX: 0, + paddingRight: 15 +}); +xRenderer.grid.template.set("visible", false); + +var xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { + maxDeviation: 0.3, + categoryField: "country", + renderer: xRenderer +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + maxDeviation: 0.3, + min: 0, + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.ColumnSeries.new(root, { + name: "Series 1", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + categoryXField: "country" +})); + +// Rounded corners for columns +series.columns.template.setAll({ + cornerRadiusTL: 5, + cornerRadiusTR: 5 +}); + +// Make each column to be of a different color +series.columns.template.adapters.add("fill", function (fill, target) { + return chart.get("colors").getIndex(series.columns.indexOf(target )); +}); + +series.columns.template.adapters.add("stroke", function (stroke, target) { + return chart.get("colors").getIndex(series.columns.indexOf(target )); +}); + +// Add Label bullet +series.bullets.push(function () { + return am5.Bullet.new(root, { + locationY: 1, + sprite: am5.Label.new(root, { + text: "{valueYWorking.formatNumber('#.')}", + fill: root.interfaceColors.get("alternativeText"), + centerY: 0, + centerX: am5.p50, + populateText: true + }) + }); +}); + + +// Set data +var data = [{ + "country": "USA", + "value": 2025 +}, { + "country": "China", + "value": 1882 +}, { + "country": "Japan", + "value": 1809 +}, { + "country": "Germany", + "value": 1322 +}, { + "country": "UK", + "value": 1122 +}, { + "country": "France", + "value": 1114 +}, { + "country": "India", + "value": 984 +}, { + "country": "Spain", + "value": 711 +}, { + "country": "Netherlands", + "value": 665 +}, { + "country": "Russia", + "value": 580 +}, { + "country": "South Korea", + "value": 443 +}, { + "country": "Canada", + "value": 441 +}]; + +xAxis.data.setAll(data); +series.data.setAll(data); + +// update data with random values each 1.5 sec +setInterval(function () { + updateData(); +}, 1500) + +function updateData() { + am5.array.each(series.dataItems, function (dataItem) { + var value = dataItem.get("valueY") + Math.round(Math.random() * 300 - 150); + if (value < 0) { + value = 10; + } + // both valueY and workingValueY should be changed, we only animate workingValueY + dataItem.set("valueY", value); + dataItem.animate({ + key: "valueYWorking", + to: value, + duration: 600, + easing: am5.ease.out(am5.ease.cubic) + }); + }) + + sortCategoryAxis(); +} + + +// Get series item by category +function getSeriesItem(category) { + for (var i = 0; i < series.dataItems.length; i++) { + var dataItem = series.dataItems[i]; + if (dataItem.get("categoryX") == category) { + return dataItem; + } + } +} + + +// Axis sorting +function sortCategoryAxis() { + + // Sort by value + series.dataItems.sort(function (x, y) { + return y.get("valueY") - x.get("valueY"); // descending + //return y.get("valueY") - x.get("valueY"); // ascending + }) + + // Go through each axis item + am5.array.each(xAxis.dataItems, function (dataItem) { + // get corresponding series item + var seriesDataItem = getSeriesItem(dataItem.get("category")); + + if (seriesDataItem) { + // get index of series data item + var index = series.dataItems.indexOf(seriesDataItem); + // calculate delta position + var deltaPosition = (index - dataItem.get("index", 0)) / series.dataItems.length; + // set index to be the same as series data item index + dataItem.set("index", index); + // set deltaPosition instanlty + dataItem.set("deltaPosition", -deltaPosition); + // animate delta position to 0 + dataItem.animate({ + key: "deltaPosition", + to: 0, + duration: 1000, + easing: am5.ease.out(am5.ease.cubic) + }) + } + }); + + // Sort axis items by index. + // This changes the order instantly, but as deltaPosition is set, + // they keep in the same places and then animate to true positions. + xAxis.dataItems.sort(function (x, y) { + return x.get("index") - y.get("index"); + }); +} + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/README.md b/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/index.css b/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/index.html b/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/index.html new file mode 100644 index 00000000..389d7af9 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-smoothed-line + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/index.js b/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/index.js new file mode 100644 index 00000000..a820d5f2 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-smoothed-line/index.js @@ -0,0 +1,117 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX" +})); + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, { + behavior: "zoomX" +})); +cursor.lineY.set("visible", false); + + +// Generate random data +var date = new Date(); +date.setHours(0, 0, 0, 0); +var value = 100; + +function generateData() { + value = Math.round((Math.random() * 10 - 5) + value); + am5.time.add(date, "day", 1); + return { + date: date.getTime(), + value: value + }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + maxDeviation: 0, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series = chart.series.push(am5xy.SmoothedXLineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); + +series.fills.template.setAll({ + visible: true, + fillOpacity: 0.2 +}); + +series.bullets.push(function() { + return am5.Bullet.new(root, { + locationY: 0, + sprite: am5.Circle.new(root, { + radius: 4, + stroke: root.interfaceColors.get("background"), + strokeWidth: 2, + fill: series.get("fill") + }) + }); +}); + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + + +var data = generateDatas(50); +series.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +series.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/README.md b/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/index.css b/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/index.html b/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/index.html new file mode 100644 index 00000000..1757cb00 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-stacked-and-clustered-column + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/index.js b/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/index.js new file mode 100644 index 00000000..831c75ef --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-and-clustered-column/index.js @@ -0,0 +1,126 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + layout: root.verticalLayout +})); + + +// Add legend +// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/ +var legend = chart.children.push(am5.Legend.new(root, { + centerX: am5.p50, + x: am5.p50 +})); + +var data = [{ + "year": "2021", + "europe": 2.5, + "namerica": 2.5, + "asia": 2.1, + "lamerica": 1, + "meast": 0.8, + "africa": 0.4 +}, { + "year": "2022", + "europe": 2.6, + "namerica": 2.7, + "asia": 2.2, + "lamerica": 0.5, + "meast": 0.4, + "africa": 0.3 +}, { + "year": "2023", + "europe": 2.8, + "namerica": 2.9, + "asia": 2.4, + "lamerica": 0.3, + "meast": 0.9, + "africa": 0.5 +}]; + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { + categoryField: "year", + renderer: am5xy.AxisRendererX.new(root, { + cellStartLocation: 0.1, + cellEndLocation: 0.9 + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +xAxis.data.setAll(data); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + min: 0, + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +function makeSeries(name, fieldName, stacked) { + var series = chart.series.push(am5xy.ColumnSeries.new(root, { + stacked: stacked, + name: name, + xAxis: xAxis, + yAxis: yAxis, + valueYField: fieldName, + categoryXField: "year" + })); + + series.columns.template.setAll({ + tooltipText: "{name}, {categoryX}:{valueY}", + width: am5.percent(90), + tooltipY: am5.percent(10) + }); + series.data.setAll(data); + + // Make stuff animate on load + // https://www.amcharts.com/docs/v5/concepts/animations/ + series.appear(); + + series.bullets.push(function () { + return am5.Bullet.new(root, { + locationY: 0.5, + sprite: am5.Label.new(root, { + text: "{valueY}", + fill: root.interfaceColors.get("alternativeText"), + centerY: am5.percent(50), + centerX: am5.percent(50), + populateText: true + }) + }); + }); + + legend.data.push(series); +} + +makeSeries("Europe", "europe", false); +makeSeries("North America", "namerica", true); +makeSeries("Asia", "asia", false); +makeSeries("Latin America", "lamerica", true); +makeSeries("Middle East", "meast", true); +makeSeries("Africa", "africa", true); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/README.md b/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/index.css b/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/index.html b/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/index.html new file mode 100644 index 00000000..fb2d459f --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-stacked-column + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/index.js b/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/index.js new file mode 100644 index 00000000..c1526246 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-column/index.js @@ -0,0 +1,139 @@ +/** + * --------------------------------------- + * This demo was created using amCharts 5. + * + * For more information visit: + * https://www.amcharts.com/ + * + * Documentation is available at: + * https://www.amcharts.com/docs/v5/ + * --------------------------------------- + */ + +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: false, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + layout: root.verticalLayout +})); + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +var data = [{ + "year": "2021", + "europe": 2.5, + "namerica": 2.5, + "asia": 2.1, + "lamerica": 1, + "meast": 0.8, + "africa": 0.4 +}, { + "year": "2022", + "europe": 2.6, + "namerica": 2.7, + "asia": 2.2, + "lamerica": 0.5, + "meast": 0.4, + "africa": 0.3 +}, { + "year": "2023", + "europe": 2.8, + "namerica": 2.9, + "asia": 2.4, + "lamerica": 0.3, + "meast": 0.9, + "africa": 0.5 +}] + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.CategoryAxis.new(root, { + categoryField: "year", + renderer: am5xy.AxisRendererX.new(root, {}), + tooltip: am5.Tooltip.new(root, {}) +})); + +xAxis.data.setAll(data); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + min: 0, + renderer: am5xy.AxisRendererY.new(root, {}) +})); + + +// Add legend +// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/ +var legend = chart.children.push(am5.Legend.new(root, { + centerX: am5.p50, + x: am5.p50 +})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +function makeSeries(name, fieldName) { + var series = chart.series.push(am5xy.ColumnSeries.new(root, { + name: name, + stacked: true, + xAxis: xAxis, + yAxis: yAxis, + valueYField: fieldName, + categoryXField: "year" + })); + + series.columns.template.setAll({ + tooltipText: "{name}, {categoryX}: {valueY}", + tooltipY: am5.percent(10) + }); + series.data.setAll(data); + + // Make stuff animate on load + // https://www.amcharts.com/docs/v5/concepts/animations/ + series.appear(); + + series.bullets.push(function () { + return am5.Bullet.new(root, { + sprite: am5.Label.new(root, { + text: "{valueY}", + fill: root.interfaceColors.get("alternativeText"), + centerY: am5.p50, + centerX: am5.p50, + populateText: true + }) + }); + }); + + legend.data.push(series); +} + +makeSeries("Europe", "europe"); +makeSeries("North America", "namerica"); +makeSeries("Asia", "asia"); +makeSeries("Latin America", "lamerica"); +makeSeries("Middle East", "meast"); +makeSeries("Africa", "africa"); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/ +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/README.md b/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/index.css b/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/index.html b/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/index.html new file mode 100644 index 00000000..85494f78 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-stacked-step + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/index.js b/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/index.js new file mode 100644 index 00000000..8d7864e6 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stacked-step/index.js @@ -0,0 +1,125 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: true, + panY: true, + wheelX: "panX", + wheelY: "zoomX" +})); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +var cursor = chart.set("cursor", am5xy.XYCursor.new(root, {})); +cursor.lineY.set("visible", false); + + +// Generate random data +var date = new Date(); +date.setHours(0, 0, 0, 0); +var value1 = 100; +var value2 = 20; + +function generateData() { + value1 = Math.round((Math.random() * 10 - 5) + value1); + value2 = Math.round((Math.random() * 4 - 2) + value2); + + if (value1 < 10) { + value1 = 10; + } + + if (value2 < 1) { + value2 = 1; + } + + am5.time.add(date, "day", 1); + return { date: date.getTime(), value1: value1, value2: value2 }; +} + +function generateDatas(count) { + var data = []; + for (var i = 0; i < count; ++i) { + data.push(generateData()); + } + return data; +} + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var xAxis = chart.xAxes.push(am5xy.DateAxis.new(root, { + baseInterval: { timeUnit: "day", count: 1 }, + renderer: am5xy.AxisRendererX.new(root, { + minorGridEnabled: true + }), + tooltip: am5.Tooltip.new(root, {}) +})); + +var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, { + minorGridEnabled: true, + minGridDistance:70 + }) +})); + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var series1 = chart.series.push(am5xy.StepLineSeries.new(root, { + name: "Series", + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value1", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); +series1.fills.template.setAll({ + fillOpacity: 0.5, + visible: true +}); + +var series2 = chart.series.push(am5xy.StepLineSeries.new(root, { + name: "Series", + stacked: true, + xAxis: xAxis, + yAxis: yAxis, + valueYField: "value2", + valueXField: "date", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); +series2.fills.template.setAll({ + fillOpacity: 0.5, + visible: true +}); + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +chart.set("scrollbarX", am5.Scrollbar.new(root, { + orientation: "horizontal" +})); + +var data = generateDatas(200); +series1.data.setAll(data); +series2.data.setAll(data); + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +series1.appear(1000); +series2.appear(1000); +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/README.md b/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/index.css b/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/index.html b/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/index.html new file mode 100644 index 00000000..b7fe4d13 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-stock-comparing + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/index.js b/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/index.js new file mode 100644 index 00000000..498f42e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stock-comparing/index.js @@ -0,0 +1,273 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push(am5xy.XYChart.new(root, { + panX: true, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + layout: root.verticalLayout +})); + +chart.get("colors").set("step", 2); + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ + +// Y axis #1 +var valueAxisRenderer = am5xy.AxisRendererY.new(root, { + inside: true +}); + +valueAxisRenderer.labels.template.setAll({ + centerY: am5.percent(100), + maxPosition: 0.98 +}); + +var valueAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: valueAxisRenderer, + height: am5.percent(70) +})); + +valueAxis.axisHeader.children.push(am5.Label.new(root, { + text: "Value", + fontWeight: "bold", + paddingBottom: 5, + paddingTop: 5 +})); + + +// Y axis #2 +var volumeAxisRenderer = am5xy.AxisRendererY.new(root, { + inside: true +}); + +volumeAxisRenderer.labels.template.setAll({ + centerY: am5.percent(100), + maxPosition: 0.98 +}); + +var volumeAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: volumeAxisRenderer, + height: am5.percent(30), + layer: 5 +})); + +volumeAxis.axisHeader.set("paddingTop", 10); + +volumeAxis.axisHeader.children.push(am5.Label.new(root, { + text: "Volume", + fontWeight: "bold", + paddingTop: 5, + paddingBottom: 5 +})); + + +// X axis +var dateAxisRenderer = am5xy.AxisRendererX.new(root, { + minorGridEnabled: true +}); + +dateAxisRenderer.labels.template.setAll({ + minPosition: 0.01, + maxPosition: 0.99 +}); + +var dateAxis = chart.xAxes.push(am5xy.GaplessDateAxis.new(root, { + groupData: true, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: dateAxisRenderer +})); + +dateAxis.set("tooltip", am5.Tooltip.new(root, {})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var valueSeries1 = chart.series.push(am5xy.LineSeries.new(root, { + name: "XTD", + valueYField: "price1", + calculateAggregates: true, + valueYShow: "valueYChangeSelectionPercent", + valueXField: "date", + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "{valueY}" +})); + +var valueSeries2 = chart.series.push(am5xy.LineSeries.new(root, { + name: "BTD", + valueYField: "price2", + calculateAggregates: true, + valueYShow: "valueYChangeSelectionPercent", + valueXField: "date", + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "{valueY}" +})); + + +// Add series tooltips +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/#Tooltips +var valueTooltip = valueSeries1.set("tooltip", am5.Tooltip.new(root, { + getFillFromSprite: false, + getStrokeFromSprite: true, + getLabelFillFromSprite: true, + autoTextColor: false, + pointerOrientation: "horizontal", + labelText: "{name}: {valueY} {valueYChangePercent.formatNumber('[#00ff00]+#,###.##p|[#ff0000]#,###.##p|[#999999]0')}" +})); +valueTooltip.get("background").set("fill", root.interfaceColors.get("background")); + +var valueTooltip2 = valueSeries2.set("tooltip", am5.Tooltip.new(root, { + getFillFromSprite: false, + getStrokeFromSprite: true, + getLabelFillFromSprite: true, + autoTextColor: false, + pointerOrientation: "horizontal", + labelText: "{name}: {valueY} {valueYChangePercent.formatNumber('[#00ff00]+#,###.##p|[#ff0000]#,###.##p|[#999999]0')}" +})); +valueTooltip2.get("background").set("fill", root.interfaceColors.get("background")); + + +var firstColor = chart.get("colors").getIndex(0); +var volumeSeries = chart.series.push(am5xy.ColumnSeries.new(root, { + name: "XTD", + fill: firstColor, + stroke: firstColor, + valueYField: "quantity", + valueXField: "date", + valueYGrouped: "sum", + xAxis: dateAxis, + yAxis: volumeAxis, + legendValueText: "{valueY}", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); +volumeSeries.columns.template.setAll({ + strokeWidth: 0.2, + strokeOpacity: 1, + stroke: am5.color(0xffffff) +}); + + +// Add legend to axis header +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-headers/ +// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/ +var valueLegend = valueAxis.axisHeader.children.push(am5.Legend.new(root, { + useDefaultMarker: true +})); +valueLegend.data.setAll([valueSeries1, valueSeries2]); + + +var volumeLegend = volumeAxis.axisHeader.children.push(am5.Legend.new(root, { + useDefaultMarker: true +})); +volumeLegend.data.setAll([volumeSeries]); + + +// Stack axes vertically +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/#Stacked_axes +chart.leftAxesContainer.set("layout", root.verticalLayout); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +chart.set("cursor", am5xy.XYCursor.new(root, {})) + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = chart.set("scrollbarX", am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +})); + +var sbDateAxis = scrollbar.chart.xAxes.push(am5xy.DateAxis.new(root, { + groupData: true, + groupIntervals: [{ + timeUnit: "week", + count: 1 + }], + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, {}) +})); + +var sbValueAxis = scrollbar.chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) +})); + +var sbSeries = scrollbar.chart.series.push(am5xy.LineSeries.new(root, { + valueYField: "price1", + valueXField: "date", + xAxis: sbDateAxis, + yAxis: sbValueAxis +})); + +sbSeries.fills.template.setAll({ + visible: true, + fillOpacity: 0.3 +}); + + +// Generate random data and set on series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/#Setting_data +var data = []; +var price1 = 1000; +var price2 = 2000; +var quantity = 10000; + +for (var i = 1; i < 5000; i++) { + price1 += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 20); + price2 += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 20); + + if (price1 < 100) { + price1 = 100; + } + + if (price2 < 100) { + price2 = 100; + } + + quantity += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 500); + + if (quantity < 0) { + quantity *= -1; + } + data.push({ + date: new Date(2010, 0, i).getTime(), + price1: price1, + price2: price2, + quantity: quantity + }); +} + +valueSeries1.data.setAll(data); +valueSeries2.data.setAll(data); + +volumeSeries.data.setAll(data); +sbSeries.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stock/README.md b/src/main/resources/static/js/amcharts5/examples/xy-stock/README.md new file mode 100644 index 00000000..9c60d51a --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stock/README.md @@ -0,0 +1,4 @@ +Steps to use +============ + +1. Open `index.html` in a browser \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stock/index.css b/src/main/resources/static/js/amcharts5/examples/xy-stock/index.css new file mode 100644 index 00000000..0dea22e0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stock/index.css @@ -0,0 +1,11 @@ +body { + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + padding: 0; + margin: 0; + background-color: #ffffff; +} + +#chartdiv { + width: 100%; + height: 80vh; +} \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stock/index.html b/src/main/resources/static/js/amcharts5/examples/xy-stock/index.html new file mode 100644 index 00000000..424d0e95 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stock/index.html @@ -0,0 +1,15 @@ + + + + + amCharts 5 Example - xy-stock + + + +
+ + + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/examples/xy-stock/index.js b/src/main/resources/static/js/amcharts5/examples/xy-stock/index.js new file mode 100644 index 00000000..87b3f950 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/examples/xy-stock/index.js @@ -0,0 +1,236 @@ +// Create root element +// https://www.amcharts.com/docs/v5/getting-started/#Root_element +var root = am5.Root.new("chartdiv"); + + +// Set themes +// https://www.amcharts.com/docs/v5/concepts/themes/ +root.setThemes([ + am5themes_Animated.new(root) +]); + + +// Create chart +// https://www.amcharts.com/docs/v5/charts/xy-chart/ +var chart = root.container.children.push( + am5xy.XYChart.new(root, { + panX: true, + panY: false, + wheelX: "panX", + wheelY: "zoomX", + layout: root.verticalLayout + }) +); + +chart.get("colors").set("step", 2); + + +// Create axes +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/ +var valueAxisRenderer = am5xy.AxisRendererY.new(root, { + inside: true +}); +valueAxisRenderer.labels.template.setAll({ + centerY: am5.percent(100), + maxPosition: 0.98 +}); +var valueAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: valueAxisRenderer, + height: am5.percent(70) +})); +valueAxis.axisHeader.children.push(am5.Label.new(root, { + text: "Value", + fontWeight: "bold", + paddingBottom: 5, + paddingTop: 5 +})); + +var volumeAxisRenderer = am5xy.AxisRendererY.new(root, { + inside: true +}); +volumeAxisRenderer.labels.template.setAll({ + centerY: am5.percent(100), + maxPosition: 0.98 +}); +var volumeAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, { + renderer: volumeAxisRenderer, + height: am5.percent(30), + layer: 5 +})); +volumeAxis.axisHeader.set("paddingTop", 10); +volumeAxis.axisHeader.children.push(am5.Label.new(root, { + text: "Volume", + fontWeight: "bold", + paddingTop: 5, + paddingBottom: 5 +})); + + +var dateAxisRenderer = am5xy.AxisRendererX.new(root, { + minorGridEnabled: true +}); + +dateAxisRenderer.labels.template.setAll({ + minPosition: 0.01, + maxPosition: 0.99 +}); +var dateAxis = chart.xAxes.push(am5xy.GaplessDateAxis.new(root, { + groupData: true, + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: dateAxisRenderer +})); +dateAxis.set("tooltip", am5.Tooltip.new(root, {})); + + +// Add series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ +var valueSeries1 = chart.series.push(am5xy.LineSeries.new(root, { + name: "XTD", + valueYField: "price1", + calculateAggregates: true, + valueYShow: "valueYChangeSelectionPercent", + valueXField: "date", + xAxis: dateAxis, + yAxis: valueAxis, + legendValueText: "{valueY}" +})); + +var valueTooltip = valueSeries1.set("tooltip", am5.Tooltip.new(root, { + getFillFromSprite: false, + getStrokeFromSprite: true, + getLabelFillFromSprite: true, + autoTextColor: false, + pointerOrientation: "horizontal", + labelText: "{name}: {valueY} {valueYChangePercent.formatNumber('[#00ff00]+#,###.##p|[#ff0000]#,###.##p|[#999999]0')}" +})); + +valueTooltip.get("background").set("fill", root.interfaceColors.get("background")); + +var firstColor = chart.get("colors").getIndex(0); +var volumeSeries = chart.series.push(am5xy.ColumnSeries.new(root, { + name: "XTD", + fill: firstColor, + stroke: firstColor, + valueYField: "quantity", + valueXField: "date", + valueYGrouped: "sum", + xAxis: dateAxis, + yAxis: volumeAxis, + legendValueText: "{valueY}", + tooltip: am5.Tooltip.new(root, { + labelText: "{valueY}" + }) +})); +volumeSeries.columns.template.setAll({ + strokeWidth: 0.2, + strokeOpacity: 1, + stroke: am5.color(0xffffff) +}); + +// Add legend to axis header +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/axis-headers/ +// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/ +var valueLegend = valueAxis.axisHeader.children.push( + am5.Legend.new(root, { + useDefaultMarker: true + }) +); +valueLegend.data.setAll([valueSeries1]); + +var volumeLegend = volumeAxis.axisHeader.children.push( + am5.Legend.new(root, { + useDefaultMarker: true + }) +); +volumeLegend.data.setAll([volumeSeries]); + + +// Stack axes vertically +// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/#Stacked_axes +chart.leftAxesContainer.set("layout", root.verticalLayout); + + +// Add cursor +// https://www.amcharts.com/docs/v5/charts/xy-chart/cursor/ +chart.set("cursor", am5xy.XYCursor.new(root, {})) + + +// Add scrollbar +// https://www.amcharts.com/docs/v5/charts/xy-chart/scrollbars/ +var scrollbar = chart.set("scrollbarX", am5xy.XYChartScrollbar.new(root, { + orientation: "horizontal", + height: 50 +})); + +var sbDateAxis = scrollbar.chart.xAxes.push( + am5xy.DateAxis.new(root, { + groupData: true, + groupIntervals: [{ + timeUnit: "week", + count: 1 + }], + baseInterval: { + timeUnit: "day", + count: 1 + }, + renderer: am5xy.AxisRendererX.new(root, {}) + }) +); + +var sbValueAxis = scrollbar.chart.yAxes.push( + am5xy.ValueAxis.new(root, { + renderer: am5xy.AxisRendererY.new(root, {}) + }) +); + +var sbSeries = scrollbar.chart.series.push( + am5xy.LineSeries.new(root, { + valueYField: "price1", + valueXField: "date", + xAxis: sbDateAxis, + yAxis: sbValueAxis + }) +); + +sbSeries.fills.template.setAll({ + visible: true, + fillOpacity: 0.3 +}); + + +// Generate random data and set on series +// https://www.amcharts.com/docs/v5/charts/xy-chart/series/#Setting_data +var data = []; +var price1 = 1000; +var quantity = 10000; + +for (var i = 1; i < 5000; i++) { + price1 += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 20); + + if (price1 < 100) { + price1 = 100; + } + + quantity += Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 500); + + if (quantity < 0) { + quantity *= -1; + } + data.push({ + date: new Date(2010, 0, i).getTime(), + price1: price1, + quantity: quantity + }); +} + +valueSeries1.data.setAll(data); +volumeSeries.data.setAll(data); +sbSeries.data.setAll(data); + + +// Make stuff animate on load +// https://www.amcharts.com/docs/v5/concepts/animations/#Forcing_appearance_animation +chart.appear(1000, 100); \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/flow.js b/src/main/resources/static/js/amcharts5/flow.js new file mode 100644 index 00000000..fd69a9c0 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/flow.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunk_am5=self.webpackChunk_am5||[]).push([[1239],{2924:function(e,t,n){n.r(t),n.d(t,{ArcDiagram:function(){return We},ArcDiagramLink:function(){return Fe},ArcDiagramNodes:function(){return Ge},Chord:function(){return ae},ChordDirected:function(){return oe},ChordLink:function(){return ie},ChordLinkDirected:function(){return re},ChordNodes:function(){return ee},ChordNonRibbon:function(){return le},DefaultTheme:function(){return u},Flow:function(){return p},FlowLink:function(){return ne},FlowNode:function(){return q},FlowNodes:function(){return Z},Sankey:function(){return Re},SankeyLink:function(){return he},SankeyNodes:function(){return ue}});var i=n(7582),s=n(3409),a=n(6245),r=n(2754),o=n(3783),l=n(5071),c=n(9395);class u extends s.Q{setupDefaultRules(){super.setupDefaultRules();const e=this._root.interfaceColors,t=this.rule.bind(this);t("Flow").setAll({width:a.AQ,height:a.AQ,paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,hiddenSize:.05,minSize:0,minHiddenValue:0}),t("FlowNodes").setAll({colors:r.U.new(this._root,{}),legendLabelText:"{name}",legendValueText:"{sumOutgoing.formatNumber('#.#')}"}),t("FlowNode").setAll({setStateOnChildren:!0,cursorOverStyle:"pointer",toggleKey:"disabled"}),t("FlowNode").states.create("disabled",{}),t("FlowNode",["unknown"]).setAll({draggable:!1,opacity:0}),t("Label",["flow"]).states.create("disabled",{fill:e.get("disabled")}),t("RadialLabel",["flow","node"]).setAll({text:"{name}",populateText:!0}),t("FlowLink").setAll({fillStyle:"gradient",strokeStyle:"gradient"}),t("FlowLink",["source","unknown"]).setAll({}),t("FlowLink",["target","unknown"]).setAll({}),t("FlowNode").events.on("pointerover",(e=>{const t=e.target.dataItem;if(t){const e=t.get("outgoingLinks");e&&l.each(e,(e=>{const t=e.get("link");t.hover(),t.hideTooltip()}));const n=t.get("incomingLinks");n&&l.each(n,(e=>{const t=e.get("link");t.hover(),t.hideTooltip()}))}let n=t.get("slice")||t.get("rectangle");n&&n.get("tooltipText")&&n.showTooltip()})),t("FlowNode").events.on("pointerout",(e=>{const t=e.target.dataItem;if(t){const e=t.get("outgoingLinks");e&&l.each(e,(e=>{e.get("link").unhover()}));const n=t.get("incomingLinks");n&&l.each(n,(e=>{e.get("link").unhover()}))}})),t("Sankey").setAll({orientation:"horizontal",nodeAlign:"justify",linkTension:.5,nodePadding:10,nodeWidth:10}),t("RoundedRectangle",["sankey","node","shape"]).setAll({cornerRadiusTL:0,cornerRadiusBL:0,cornerRadiusTR:0,cornerRadiusBR:0}),t("RoundedRectangle",["shape"]).states.create("disabled",{fill:e.get("disabled")}),t("SankeyLink").setAll({controlPointDistance:.2}),t("FlowNode",["sankey"]).setAll({draggable:!0});{const n=t("Graphics",["sankey","link"]);n.setAll({fillOpacity:.2,strokeOpacity:0,interactive:!0,tooltipText:"{sourceId} - {targetId}: {value}"}),(0,o.v)(n,"fill",e,"grid")}t("Graphics",["sankey","link"]).states.create("hover",{fillOpacity:.5}),t("Label",["sankey","node"]).setAll({text:"{name}",populateText:!0}),t("Label",["sankey","horizontal"]).setAll({y:a.CI,centerY:a.CI,paddingLeft:15}),t("Label",["sankey","vertical"]).setAll({x:a.CI,centerX:a.CI,paddingTop:15}),t("Chord").setAll({radius:(0,a.aQ)(90),nodeWidth:10,padAngle:1,startAngle:0,sort:"none"}),t("ChordDirected").setAll({linkHeadRadius:10}),t("ChordNodes").setAll({x:a.CI,y:a.CI}),t("FlowNode",["chord"]).setAll({draggable:!0}),t("ChordLink").setAll({sourceRadius:a.AQ,targetRadius:a.AQ,fillStyle:"solid",strokeStyle:"solid",tooltipText:"{sourceId} - {targetId}: {value}"}),t("Slice",["chord","node","shape"]).setAll({cornerRadius:0}),t("Slice",["shape"]).states.create("disabled",{fill:e.get("disabled")}),t("RadialLabel",["chord","node"]).setAll({radius:5,textType:"circular"}),t("ChordLinkDirected").setAll({headRadius:10});{const n=t("Graphics",["chord","link","shape"]);n.setAll({fillOpacity:.2,strokeOpacity:0,interactive:!0}),(0,o.v)(n,"fill",e,"grid"),(0,o.v)(n,"stroke",e,"grid")}t("Graphics",["chord","link","shape"]).states.create("hover",{fillOpacity:.5}),t("ChordNonRibbon").setAll({linkType:"curve"}),t("ChordLink",["basic"]).setAll({fillStyle:"none",strokeStyle:"source"}),t("Graphics",["chord","link","shape","basic"]).setAll({strokeOpacity:.4}),t("Graphics",["chord","link","shape","basic"]).states.create("hover",{strokeWidth:2,strokeOpacity:1}),t("ArcDiagram").setAll({orientation:"horizontal",nodePadding:5,minRadius:5,radiusKey:"sum",animationEasing:c.out(c.cubic)}),t("ArcDiagramNodes",["horizontal"]).setAll({y:a.AQ,centerY:a.AQ}),t("ArcDiagramNodes",["vertical"]).setAll({centerX:0}),t("Circle",["arcdiagram","node","shape"]).setAll({tooltipText:"{name}: {sum}"}),t("Circle",["arcdiagram","node","shape"]).states.create("disabled",{fill:e.get("disabled")});{const n=t("ArcDiagramLink",["link","shape"]);n.setAll({strokeOpacity:.15,strokeStyle:"solid",fillStyle:"none",isMeasured:!1}),(0,o.v)(n,"stroke",e,"grid")}t("ArcDiagramLink",["link","shape"]).states.create("hover",{strokeOpacity:1}),t("Label",["arcdiagram","node"]).setAll({text:"{name}",populateText:!0}),t("Label",["arcdiagram","horizontal"]).setAll({y:0,centerY:a.CI,centerX:a.AQ,rotation:-90}),t("Label",["arcdiagram","vertical"]).setAll({centerY:a.CI,centerX:a.AQ,paddingRight:15})}}var h=n(3399),d=n(8777),g=n(1747),f=n(5040);class p extends h.F{constructor(){super(...arguments),Object.defineProperty(this,"linksContainer",{enumerable:!0,configurable:!0,writable:!0,value:this.children.push(d.W.new(this._root,{}))}),Object.defineProperty(this,"_nodesData",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_linksData",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_index",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"_nodesDataSet",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"_linksByIndex",{enumerable:!0,configurable:!0,writable:!0,value:{}})}_afterNew(){this._defaultThemes.push(u.new(this._root)),this.fields.push("disabled","sourceId","targetId"),this.nodes&&(this.nodes.flow=this),super._afterNew(),this.children.push(this.bulletsContainer)}processDataItem(e){super.processDataItem(e);const t=this.nodes;if(t){let n=!1,i=e.get("sourceId"),s=t.getDataItemById(i);s||(null==i&&(i="undefined"+this._index,this._index++,n=!0),t.data.push({id:i,unknown:n}),s=t.getDataItemById(i),n||s.set("name",i)),n=!1;let a=e.get("targetId"),r=t.getDataItemById(a);r||(null==a&&(a="undefined"+this._index,this._index++,n=!0),t.data.push({id:a,unknown:n}),r=t.getDataItemById(a),n||r.set("name",a)),s&&(e.set("source",s),t.addOutgoingLink(s,e)),r&&(e.set("target",r),t.addincomingLink(r,e)),e.set("link",this.makeLink(e));const o=this.nodes.dataItems.indexOf(s),l=this.nodes.dataItems.indexOf(r);this._linksByIndex[o+"_"+l]=e,s.get("unknown")&&(r&&s.set("fill",r.get("fill")),e.get("link").set("fillStyle","gradient")),r.get("unknown")&&(s&&r.set("fill",s.get("fill")),e.get("link").set("fillStyle","gradient")),this._updateLinkColor(e)}}_onDataClear(){this.nodes._userDataSet||(this.nodes.data.setAll([]),this.nodes._userDataSet=!1)}_prepareChildren(){super._prepareChildren();let e=1/0,t=-1/0,n=0;if(this._valuesDirty){this._nodesData=[];const i=this.nodes;i&&l.each(i.dataItems,(e=>{const t=e.get("d3SankeyNode");this._nodesData.push(t);const n=e.get("incomingLinks");let s=0,a=0;n&&l.each(n,(e=>{const t=e.get("value"),n=e.get("valueWorking");s+=t,a+=n})),e.set("sumIncoming",s),e.set("sumIncomingWorking",a);const r=e.get("outgoingLinks");let o=0,c=0;r&&l.each(r,(e=>{const t=e.get("value"),n=e.get("valueWorking");o+=t,c+=n})),e.set("sumOutgoing",o),e.set("sumOutgoingWorking",c),e.set("sum",s+o),e.set("sumWorking",a+c),i.updateLegendValue(e)})),this._linksData=[],l.each(this.dataItems,(i=>{let s=i.get("value");f.isNumber(s)&&(st&&(t=s),n+=s)})),l.each(this.dataItems,(e=>{let t=e.get("value");if(f.isNumber(t)){let t=e.get("valueWorking"),i=this.get("minSize",0);i>0&&tsuper.hideDataItem}});return(0,i.mG)(this,void 0,void 0,(function*(){const i=[n.hideDataItem.call(this,e,t)],s=this.states.create("hidden",{}),a="stateAnimationDuration",r="stateAnimationEasing";f.isNumber(t)||(t=s.get(a,this.get(a,0)));const o=s.get(r,this.get(r));i.push(e.animate({key:"valueWorking",to:Math.max(this.get("minHiddenValue",0),this.get("hiddenSize",0)*e.get("value")),duration:t,easing:o}).waitForStop()),e.get("link").hide(),yield Promise.all(i)}))}showDataItem(e,t){const n=Object.create(null,{showDataItem:{get:()=>super.showDataItem}});return(0,i.mG)(this,void 0,void 0,(function*(){const i=[n.showDataItem.call(this,e,t)];f.isNumber(t)||(t=this.get("stateAnimationDuration",0));const s=this.get("stateAnimationEasing");i.push(e.animate({key:"valueWorking",to:e.get("value"),duration:t,easing:s}).waitForStop()),e.get("link").show(),yield Promise.all(i)}))}_positionBullet(e){const t=e.get("sprite");if(t){const n=t.dataItem;if(n){const t=n.get("link"),i=e.get("sprite");if(i){const n=t.getPoint(this._getBulletLocation(e));i.setAll({x:n.x,y:n.y}),e.get("autoRotate")&&i.set("rotation",n.angle+e.get("autoRotateAngle",0))}}}}_getBulletLocation(e){return e.get("locationY",0)}}Object.defineProperty(p,"className",{enumerable:!0,configurable:!0,writable:!0,value:"Flow"}),Object.defineProperty(p,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:h.F.classNames.concat([p.className])});var m=Math.abs,b=Math.cos,y=Math.sin,k=Math.PI,_=k/2,w=2*k,v=Math.max,x=1e-12;function D(e,t){return Array.from({length:t-e},((t,n)=>e+n))}function A(e,t){var n=0,i=null,s=null,a=null;function r(r){var o,l=r.length,c=new Array(l),u=D(0,l),h=new Array(l*l),d=new Array(l),g=0;r=Float64Array.from({length:l*l},t?(e,t)=>r[t%l][t/l|0]:(e,t)=>r[t/l|0][t%l]);for(let t=0;ti(c[e],c[t])));for(const n of u){const i=t;if(e){const e=D(1+~l,l).filter((e=>e<0?r[~e*l+n]:r[n*l+e]));s&&e.sort(((e,t)=>s(e<0?-r[~e*l+n]:r[n*l+e],t<0?-r[~t*l+n]:r[n*l+t])));for(const i of e)i<0?(h[~i*l+n]||(h[~i*l+n]={source:null,target:null})).target={index:n,startAngle:t,endAngle:t+=r[~i*l+n]*g,value:r[~i*l+n]}:(h[n*l+i]||(h[n*l+i]={source:null,target:null})).source={index:n,startAngle:t,endAngle:t+=r[n*l+i]*g,value:r[n*l+i]};d[n]={index:n,startAngle:i,endAngle:t,value:c[n]}}else{const e=D(0,l).filter((e=>r[n*l+e]||r[e*l+n]));s&&e.sort(((e,t)=>s(r[n*l+e],r[n*l+t])));for(const i of e){let e;if(nx&&(m(k-p)>2*d+x?k>p?(p+=d,k-=d):(p-=d,k+=d):p=k=(p+k)/2,m(D-v)>2*d+x?D>v?(v+=d,D-=d):(v-=d,D+=d):v=D=(v+D)/2),l.moveTo(f*b(p),f*y(p)),l.arc(0,0,f,p,k),p!==v||k!==D)if(e){var A=w-+e.apply(this,arguments),I=(v+D)/2;l.quadraticCurveTo(0,0,A*b(v),A*y(v)),l.lineTo(w*b(I),w*y(I)),l.lineTo(A*b(D),A*y(D))}else l.quadraticCurveTo(0,0,w*b(v),w*y(v)),l.arc(0,0,w,v,D);if(l.quadraticCurveTo(0,0,f*b(p),f*y(p)),l.closePath(),c)return l=null,c+""||null}return e&&(c.headRadius=function(t){return arguments.length?(e="function"==typeof t?t:I(+t),c):e}),c.radius=function(e){return arguments.length?(i=s="function"==typeof e?e:I(+e),c):i},c.sourceRadius=function(e){return arguments.length?(i="function"==typeof e?e:I(+e),c):i},c.targetRadius=function(e){return arguments.length?(s="function"==typeof e?e:I(+e),c):s},c.startAngle=function(e){return arguments.length?(a="function"==typeof e?e:I(+e),c):a},c.endAngle=function(e){return arguments.length?(r="function"==typeof e?e:I(+e),c):r},c.padAngle=function(e){return arguments.length?(o="function"==typeof e?e:I(+e),c):o},c.source=function(e){return arguments.length?(t=e,c):t},c.target=function(e){return arguments.length?(n=e,c):n},c.context=function(e){return arguments.length?(l=null==e?null:e,c):l},c}function G(){return M()}function F(){return M(R)}function W(e,t){return null==e||null==t?NaN:et?1:e>=t?0:NaN}function Y(e,t){return null==e||null==t?NaN:te?1:t>=e?0:NaN}n(7896);const{abs:z,max:B,min:V}=Math;function E(e){return{type:e}}function Q(e,t,n){this.k=e,this.x=t,this.y=n}["w","e"].map(E),["n","s"].map(E),["n","w","e","s","nw","ne","sw","se"].map(E),Q.prototype={constructor:Q,scale:function(e){return 1===e?this:new Q(this.k*e,this.x,this.y)},translate:function(e,t){return 0===e&0===t?this:new Q(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},new Q(1,0,0),Q.prototype;var X=n(5769),H=n(7144),K=n(962);class q extends d.W{constructor(){super(...arguments),Object.defineProperty(this,"series",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}}Object.defineProperty(q,"className",{enumerable:!0,configurable:!0,writable:!0,value:"FlowNode"}),Object.defineProperty(q,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:d.W.classNames.concat([q.className])});class Z extends h.F{constructor(){super(...arguments),Object.defineProperty(this,"labels",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>K._._new(this._root,{themeTags:["flow"]},[this.labels.template]))))}),Object.defineProperty(this,"nodes",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>q._new(this._root,{themeTags:["node"]},[this.nodes.template]))))}),Object.defineProperty(this,"_userDataSet",{enumerable:!0,configurable:!0,writable:!0,value:!1})}_afterNew(){this.fields.push("unknown","name","fill"),this.set("idField","id"),this.set("nameField","id"),this.set("fillField","fill"),this.set("unknownField","unknown"),this.children.push(this.bulletsContainer),super._afterNew()}_onDataClear(){const e=this.get("colors");e&&e.reset();const t=this.get("patterns");t&&t.reset(),this._userDataSet=!0}processDataItem(e){if(super.processDataItem(e),e.setRaw("d3SankeyNode",{name:e.get("id"),dataItem:e}),null==e.get("fill")){let t=this.get("colors");t&&e.setRaw("fill",t.next())}if(null==e.get("fillPattern")){let t=this.get("patterns");t&&e.setRaw("fillPattern",t.next())}const t=this.makeNode(e);e.setRaw("node",t);const n=this.get("disabledField");if(n){const t=e.dataContext;t&&t[n]&&this.root.events.once("frameended",(()=>{this.disableDataItem(e,0)}))}}makeNode(e,t){const n=this.nodes.make();return this.nodes.push(n),t&&n.addTag(t),e.get("unknown")&&n.addTag("unknown"),this.children.push(n),n._setDataItem(e),n.series=this,n.events.on("click",(e=>{const t=e.target;if("disabled"==t.get("toggleKey")){const e=t.dataItem;e&&(e.isHidden()?this.enableDataItem(e):this.disableDataItem(e))}})),e.on("fill",(()=>{this._updateNodeColor(e)})),e.on("fillPattern",(()=>{this._updateNodeColor(e)})),e.set("node",n),n}_updateNodeColor(e){}disposeDataItem(e){super.disposeDataItem(e);let t=e.get("node");t&&(this.nodes.removeValue(t),t.dispose());let n=e.get("label");n&&(this.labels.removeValue(n),n.dispose())}addincomingLink(e,t){let n=e.get("incomingLinks");n||(n=[],e.set("incomingLinks",n)),n.push(t)}addOutgoingLink(e,t){let n=e.get("outgoingLinks");n||(n=[],e.set("outgoingLinks",n)),n.push(t)}showDataItem(e,t){const n=Object.create(null,{showDataItem:{get:()=>super.showDataItem}});return(0,i.mG)(this,void 0,void 0,(function*(){const i=[n.showDataItem.call(this,e,t)],s=this.flow;if(s){const n=e.get("node");n&&n.show();let i=e.get("label");i&&i.show(t);let a=e.get("outgoingLinks");a&&l.each(a,(e=>{s.showDataItem(e,t)})),a=e.get("incomingLinks"),a&&l.each(a,(e=>{s.showDataItem(e,t)}))}yield i}))}hideDataItem(e,t){const n=Object.create(null,{hideDataItem:{get:()=>super.hideDataItem}});return(0,i.mG)(this,void 0,void 0,(function*(){const i=[n.hideDataItem.call(this,e,t)],s=this.flow;if(s){const n=e.get("node");n&&n.hide();let i=e.get("label");i&&i.hide(t);let a=e.get("outgoingLinks");a&&l.each(a,(e=>{s.hideDataItem(e,t)})),a=e.get("incomingLinks"),a&&l.each(a,(e=>{s.hideDataItem(e,t)}))}yield i}))}enableDataItem(e,t){const n=Object.create(null,{showDataItem:{get:()=>super.showDataItem}});return(0,i.mG)(this,void 0,void 0,(function*(){const i=[n.showDataItem.call(this,e,t)],s=this.flow;if(s){const n=e.get("node");n&&this.root.events.once("frameended",(()=>{n.set("disabled",!1)}));let i=e.get("label");i&&i.set("disabled",!1);let a=e.get("outgoingLinks");a&&l.each(a,(e=>{s.showDataItem(e,t)})),a=e.get("incomingLinks"),a&&l.each(a,(e=>{s.showDataItem(e,t)}))}yield i}))}disableDataItem(e,t){const n=Object.create(null,{hideDataItem:{get:()=>super.hideDataItem}});return(0,i.mG)(this,void 0,void 0,(function*(){const i=[n.hideDataItem.call(this,e,t)],s=this.flow;if(s){const n=e.get("node");n&&this.root.events.once("frameended",(()=>{n.set("disabled",!0)}));let i=e.get("label");i&&i.set("disabled",!0);let a=e.get("outgoingLinks");a&&l.each(a,(e=>{s.hideDataItem(e,t)})),a=e.get("incomingLinks"),a&&l.each(a,(e=>{s.hideDataItem(e,t)}))}yield i}))}}Object.defineProperty(Z,"className",{enumerable:!0,configurable:!0,writable:!0,value:"FlowNodes"}),Object.defineProperty(Z,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:h.F.classNames.concat([Z.className])});var $=n(5863),U=n(815),J=n(751);class ee extends Z{constructor(){super(...arguments),Object.defineProperty(this,"labels",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>U.x._new(this._root,{},[this.labels.template]))))}),Object.defineProperty(this,"flow",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_dAngle",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"slices",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>$.p._new(this._root,{themeTags:["shape"]},[this.slices.template]))))}),Object.defineProperty(this,"rectangles",{enumerable:!0,configurable:!0,writable:!0,value:this.slices})}makeNode(e){const t=super.makeNode(e,"chord"),n=t.children.insertIndex(0,this.slices.make());e.set("slice",n),n._setSoft("fill",e.get("fill")),n._setSoft("fillPattern",e.get("fillPattern"));const i=this.labels.make();return this.labels.push(i),i.addTag("flow"),i.addTag("chord"),i.addTag("node"),t.children.push(i),e.set("label",i),t.events.on("dragstart",(e=>{let t=this.toLocal(e.point);const n=J.getAngle({x:0,y:0},t);this.flow&&(this._dAngle=this.flow.get("startAngle",0)-n)})),t.events.on("dragged",(e=>{let n=this.toLocal(e.point);const i=J.getAngle({x:0,y:0},n);t.setAll({x:0,y:0}),this.flow&&this.flow.set("startAngle",i+this._dAngle)})),i._setDataItem(e),n._setDataItem(e),t}_positionBullet(e){const t=e.get("sprite");if(t){const n=t.dataItem;if(n){const t=e.get("sprite");if(t){const i=n.get("slice"),s=e.get("locationX",.5),a=e.get("locationY",.5);if(i){const e=i.get("radius",0),n=i.get("innerRadius",0),r=n+(e-n)*a,o=i.get("startAngle",0)+i.get("arc",0)*s;t.setAll({x:r*J.cos(o),y:r*J.sin(o)})}}}}}_updateNodeColor(e){const t=e.get("slice");t&&(t.set("fill",e.get("fill")),t.set("fillPattern",e.get("fillPattern")))}disposeDataItem(e){super.disposeDataItem(e);let t=e.get("slice");t&&(this.slices.removeValue(t),t.dispose())}}Object.defineProperty(ee,"className",{enumerable:!0,configurable:!0,writable:!0,value:"ChordNodes"}),Object.defineProperty(ee,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:Z.classNames.concat([ee.className])});var te=n(1479);class ne extends te.T{constructor(){super(...arguments),Object.defineProperty(this,"series",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_fillGradient",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_strokeGradient",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}_changed(){if(super._changed(),this.isDirty("fillStyle")){const e=this.series,t=this.dataItem;e&&t&&e._updateLinkColor(t)}}_getTooltipPoint(){let e=this.get("tooltipY"),t=.5;return e instanceof a.gG&&(t=e.value),this.getPoint(t)}}Object.defineProperty(ne,"className",{enumerable:!0,configurable:!0,writable:!0,value:"FlowLink"}),Object.defineProperty(ne,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:te.T.classNames.concat([ne.className])});class ie extends ne{constructor(){super(...arguments),Object.defineProperty(this,"_p0",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_p1",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_type",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}getPoint(e){if(this._p0&&this._p1){if("line"===this._type){let t=J.getPointOnLine(this._p0,this._p1,e);return{x:t.x,y:t.y,angle:J.getAngle(this._p0,this._p1)}}{let t=J.getPointOnQuadraticCurve(this._p0,this._p1,{x:0,y:0},Math.max(0,e-.01)),n=J.getPointOnQuadraticCurve(this._p0,this._p1,{x:0,y:0},Math.min(1,e+.01)),i=J.getPointOnQuadraticCurve(this._p0,this._p1,{x:0,y:0},e);return{x:i.x,y:i.y,angle:J.getAngle(t,n)}}}return{x:0,y:0,angle:0}}}Object.defineProperty(ie,"className",{enumerable:!0,configurable:!0,writable:!0,value:"ChordLink"}),Object.defineProperty(ie,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:ne.classNames.concat([ie.className])});var se=n(7652);class ae extends p{constructor(){super(...arguments),Object.defineProperty(this,"links",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>ie._new(this._root,{themeTags:["link","shape"]},[this.links.template]))))}),Object.defineProperty(this,"nodes",{enumerable:!0,configurable:!0,writable:!0,value:this.children.push(ee.new(this._root,{}))}),Object.defineProperty(this,"_d3chord",{enumerable:!0,configurable:!0,writable:!0,value:A(!1,!1)}),Object.defineProperty(this,"_chordLayout",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"_ribbon",{enumerable:!0,configurable:!0,writable:!0,value:G()})}_afterNew(){this._settings.themeTags=se.mergeTags(this._settings.themeTags,["chord"]),this.linksContainer.setAll({x:a.CI,y:a.CI}),this.bulletsContainer.setAll({x:a.CI,y:a.CI}),super._afterNew()}_fixRibbon(e){e.startAngle((e=>e.startAngle+this.get("startAngle",0)*J.RADIANS+Math.PI/2)),e.endAngle((e=>e.endAngle+this.get("startAngle",0)*J.RADIANS+Math.PI/2))}makeLink(e){const t=this.linksContainer.children.push(this.links.make());return this.links.push(t),t._setDataItem(e),t.set("source",e.get("source")),t.set("target",e.get("target")),t.series=this,t}_makeMatrix(){const e=[];return l.each(this.nodes.dataItems,(t=>{const n=[];e.push(n);let i=t.get("outgoingLinks");l.each(this.nodes.dataItems,(e=>{let t=0;i&&l.each(i,(n=>{n.get("target")===e&&(t=n.get("valueWorking"));let i=this.getPrivate("valueSum",0),s=this.get("minSize",0);t>0&&s>0&&t{const a=s.get("slice"),r=this._chordLayout.groups[t],o=r.startAngle*J.DEGREES+n,l=r.endAngle*J.DEGREES+n;a.setAll({radius:e,innerRadius:e-i,startAngle:o,arc:l-o});const c=s.get("label");c.setAll({labelAngle:o+(l-o)/2}),c.setPrivate("radius",e),c.setPrivate("innerRadius",.1),t++}));const s=e-this.get("nodeWidth",0);l.each(this._chordLayout,(e=>{let t=this._linksByIndex[e.source.index+"_"+e.target.index];if(t||(t=this._linksByIndex[e.target.index+"_"+e.source.index]),t){const n=t.get("link");this._getLinkPoints(n,s,e),this._updateLink(this._ribbon,n,s,e)}}))}}_getLinkPoints(e,t,n){const i=n.source,s=n.target,a=this.get("startAngle",0)*J.RADIANS;if(i&&s){const n=i.startAngle,r=n+(i.endAngle-n)/2+a,o=s.startAngle,l=o+(s.endAngle-o)/2+a;e._p0={x:t*Math.cos(r),y:t*Math.sin(r)},e._p1={x:t*Math.cos(l),y:t*Math.sin(l)}}}_updateLink(e,t,n,i){i&&(e.sourceRadius(se.relativeToValue(t.get("sourceRadius",a.AQ),n)),e.targetRadius(se.relativeToValue(t.get("targetRadius",a.AQ),n)),t.set("draw",(t=>{e.context(t),e(i)})))}}Object.defineProperty(ae,"className",{enumerable:!0,configurable:!0,writable:!0,value:"Chord"}),Object.defineProperty(ae,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:p.classNames.concat([ae.className])});class re extends ie{_afterNew(){this._settings.themeTags=se.mergeTags(this._settings.themeTags,["chord","link","directed"]),super._afterNew()}}Object.defineProperty(re,"className",{enumerable:!0,configurable:!0,writable:!0,value:"ChordLinkDirected"}),Object.defineProperty(re,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:ie.classNames.concat([re.className])});class oe extends ae{constructor(){super(...arguments),Object.defineProperty(this,"_d3chord",{enumerable:!0,configurable:!0,writable:!0,value:A(!0,!1)}),Object.defineProperty(this,"_ribbonArrow",{enumerable:!0,configurable:!0,writable:!0,value:F()}),Object.defineProperty(this,"links",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>re._new(this._root,{themeTags:["link","shape"]},[this.links.template]))))})}makeLink(e){const t=this.linksContainer.children.push(this.links.make());return t._setDataItem(e),t.set("source",e.get("source")),t.set("target",e.get("target")),t.series=this,t}_afterNew(){this._settings.themeTags=se.mergeTags(this._settings.themeTags,["directed"]),super._afterNew(),this._markDirtyKey("linkHeadRadius")}_prepareChildren(){const e="linkHeadRadius";if(this.isDirty(e)){const t=this.get(e);if(null==t)this._ribbon=G();else{let e=F();e.headRadius(t),this._ribbon=e}}super._prepareChildren()}}Object.defineProperty(oe,"className",{enumerable:!0,configurable:!0,writable:!0,value:"ChordDirected"}),Object.defineProperty(oe,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:ae.classNames.concat([oe.className])});class le extends ae{_afterNew(){this._settings.themeTags=se.mergeTags(this._settings.themeTags,["chord","basic"]),super._afterNew()}_makeMatrix(){const e=[];return l.each(this.nodes.dataItems,(t=>{const n=[];e.push(n),l.each(this.nodes.dataItems,(e=>{let i=1;t===e&&(i=0),n.push(i)}))})),e}_updateLink(e,t,n,i){if(t._type=this.get("linkType"),i){const e=this.get("linkType");t.set("draw",(n=>{let i=t._p0,s=t._p1;i&&s&&(n.moveTo(i.x,i.y),"line"==e?n.lineTo(s.x,s.y):n.quadraticCurveTo(0,0,s.x,s.y))}))}}_getLinkPoints(e,t,n){const i=e.get("source"),s=e.get("target");if(i&&s){const n=i.get("slice"),a=s.get("slice"),r=n.get("startAngle",0)+n.get("arc",0)/2,o=a.get("startAngle",0)+a.get("arc",0)/2;e._p0={x:t*J.cos(r),y:t*J.sin(r)},e._p1={x:t*J.cos(o),y:t*J.sin(o)}}}}Object.defineProperty(le,"className",{enumerable:!0,configurable:!0,writable:!0,value:"ChordNonRibbon"}),Object.defineProperty(le,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:ae.classNames.concat([le.className])});var ce=n(3497);class ue extends Z{constructor(){super(...arguments),Object.defineProperty(this,"rectangles",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>ce.c._new(this._root,{themeTags:["shape"]},[this.rectangles.template]))))}),Object.defineProperty(this,"flow",{enumerable:!0,configurable:!0,writable:!0,value:void 0})}makeNode(e){const t=this.flow,n=super.makeNode(e,"sankey"),i=n.children.insertIndex(0,this.rectangles.make());this.rectangles.push(i),i._setSoft("fill",e.get("fill")),i._setSoft("fillPattern",e.get("fillPattern")),e.set("rectangle",i),n.events.on("dragged",(()=>{const e=n.dataItem.get("d3SankeyNode");e&&t&&("horizontal"==t.get("orientation")?(e.x0=n.x(),e.y0=n.y()):(e.x0=n.y(),e.y0=n.x()),t.updateSankey())}));const s=this.labels.make();return this.labels.push(s),t&&s.addTag(t.get("orientation","")),n.children.push(s),e.set("label",s),s._setDataItem(e),i._setDataItem(e),n}_positionBullet(e){const t=e.get("sprite");if(t){const n=t.dataItem;if(n){const t=e.get("sprite");if(t){const i=n.get("rectangle"),s=n.get("node"),a=e.get("locationX",.5),r=e.get("locationY",.5);i&&t.setAll({x:s.x()+i.width()*a,y:s.y()+i.height()*r})}}}}disposeDataItem(e){super.disposeDataItem(e);let t=e.get("rectangle");t&&(this.rectangles.removeValue(t),t.dispose())}_updateNodeColor(e){const t=e.get("rectangle");t&&(t.set("fill",e.get("fill")),t.set("fillPattern",e.get("fillPattern")))}}Object.defineProperty(ue,"className",{enumerable:!0,configurable:!0,writable:!0,value:"SankeyNodes"}),Object.defineProperty(ue,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:Z.classNames.concat([ue.className])});class he extends ne{constructor(){super(...arguments),Object.defineProperty(this,"_svgPath",{enumerable:!0,configurable:!0,writable:!0,value:document.createElementNS("http://www.w3.org/2000/svg","path")}),Object.defineProperty(this,"_totalLength",{enumerable:!0,configurable:!0,writable:!0,value:0})}_beforeChanged(){if(super._beforeChanged(),this.isDirty("source")){const e=this.get("source");if(e){const t=e.get("node");this._disposers.push(t.events.on("positionchanged",(()=>{this.markDirty()})))}}if(this.isDirty("target")){const e=this.get("target");if(e){const t=e.get("node");this._disposers.push(t.events.on("positionchanged",(()=>{this.markDirty()})))}}if(this.isPrivateDirty("orientation")){const e=this.series,t=this.dataItem;t&&e&&e._updateLinkColor(t)}const e=this.get("target"),t=this.get("source");let n,i;if(t&&e){this._clear=!0,n=t.get("node"),i=e.get("node");let s=0,a=0,r=0,o=0,l=0,c=0,u=0,h=0,d=0,g=0,f=0,p=0,m=0,b=0,y=0,k=0,_=0,w=0;const v=this.dataItem;if(v){const x=v.get("d3SankeyLink");if(x){let v=x.width||0,D=this.getPrivate("orientation");"vertical"==D?(n&&(r=n.y()+n.get("dy",0)),i&&(o=i.y()+i.get("dy",0)),_=90,w=90,s=x.y0||0,a=x.y1||0,s+=n.get("dx",0),a+=i.get("dx",0),o{const t=this.series;t._fillGenerator.context(e),t._fillGenerator(z)}));let B=[[m,y],[O,j],[S,C],[b,k]];const V=this.series._strokeGenerator(B);V&&(this._svgPath.setAttribute("d",V),this._totalLength=this._svgPath.getTotalLength())}}}this.series&&this.dataItem&&this.series._positionBullets(this.dataItem)}getPoint(e){if(this._svgPath&&this._svgPath.getAttribute("d")){let t=this._svgPath.getPointAtLength(e*this._totalLength-.1),n=this._svgPath.getPointAtLength(e*this._totalLength+.1),i=this.toGlobal(this._svgPath.getPointAtLength(e*this._totalLength));return{x:i.x,y:i.y,angle:J.getAngle(t,n)}}return{x:0,y:0,angle:0}}_getTooltipPoint(){return this.toLocal(super._getTooltipPoint())}}Object.defineProperty(he,"className",{enumerable:!0,configurable:!0,writable:!0,value:"SankeyLink"}),Object.defineProperty(he,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:ne.classNames.concat([he.className])});var de=n(3794),ge=n(774),fe=n(8289),pe=n(5892);function me(e,t){let n=0;if(void 0===t)for(let t of e)(t=+t)&&(n+=t);else{let i=-1;for(let s of e)(s=+t(s,++i,e))&&(n+=s)}return n}function be(e,t){let n;if(void 0===t)for(const t of e)null!=t&&(n=t)&&(n=t);else{let i=-1;for(let s of e)null!=(s=t(s,++i,e))&&(n=s)&&(n=s)}return n}function ye(e,t){let n;if(void 0===t)for(const t of e)null!=t&&(n>t||void 0===n&&t>=t)&&(n=t);else{let i=-1;for(let s of e)null!=(s=t(s,++i,e))&&(n>s||void 0===n&&s>=s)&&(n=s)}return n}function ke(e){return e.target.depth}function _e(e){return e.depth}function we(e,t){return t-1-e.height}function ve(e,t){return e.sourceLinks.length?e.depth:t-1}function xe(e){return e.targetLinks.length?e.depth:e.sourceLinks.length?ye(e.sourceLinks,ke)-1:0}function De(e){return function(){return e}}function Ae(e,t){return Ne(e.source,t.source)||e.index-t.index}function Pe(e,t){return Ne(e.target,t.target)||e.index-t.index}function Ne(e,t){return e.y0-t.y0}function Ie(e){return e.value}function Le(e){return e.index}function Oe(e){return e.nodes}function je(e){return e.links}function Se(e,t){const n=e.get(t);if(!n)throw new Error("missing: "+t);return n}function Ce({nodes:e}){for(const t of e){let e=t.y0,n=e;for(const n of t.sourceLinks)n.y0=e+n.width/2,e+=n.width;for(const e of t.targetLinks)e.y1=n+e.width/2,n+=e.width}}function Te(){let e,t,n,i=0,s=0,a=1,r=1,o=24,l=8,c=Le,u=ve,h=Oe,d=je,g=6;function f(){const f={nodes:h.apply(null,arguments),links:d.apply(null,arguments)};return function({nodes:e,links:t}){for(const[t,n]of e.entries())n.index=t,n.sourceLinks=[],n.targetLinks=[];const i=new Map(e.map(((t,n)=>[c(t,n,e),t])));for(const[e,n]of t.entries()){n.index=e;let{source:t,target:s}=n;"object"!=typeof t&&(t=n.source=Se(i,t)),"object"!=typeof s&&(s=n.target=Se(i,s)),t.sourceLinks.push(n),s.targetLinks.push(n)}if(null!=n)for(const{sourceLinks:t,targetLinks:i}of e)t.sort(n),i.sort(n)}(f),function({nodes:e}){for(const t of e)t.value=void 0===t.fixedValue?Math.max(me(t.sourceLinks,Ie),me(t.targetLinks,Ie)):t.fixedValue}(f),function({nodes:e}){const t=e.length;let n=new Set(e),i=new Set,s=0;for(;n.size;){for(const e of n){e.depth=s;for(const{target:t}of e.sourceLinks)i.add(t)}if(++s>t)throw new Error("circular link");n=i,i=new Set}}(f),function({nodes:e}){const t=e.length;let n=new Set(e),i=new Set,s=0;for(;n.size;){for(const e of n){e.height=s;for(const{source:t}of e.targetLinks)i.add(t)}if(++s>t)throw new Error("circular link");n=i,i=new Set}}(f),function(n){const c=function({nodes:e}){const n=be(e,(e=>e.depth))+1,s=(a-i-o)/(n-1),r=new Array(n);for(const t of e){const e=Math.max(0,Math.min(n-1,Math.floor(u.call(null,t,n))));t.layer=e,t.x0=i+e*s,t.x1=t.x0+o,r[e]?r[e].push(t):r[e]=[t]}if(t)for(const e of r)e.sort(t);return r}(n);e=Math.min(l,(r-s)/(be(c,(e=>e.length))-1)),function(t){const n=ye(t,(t=>(r-s-(t.length-1)*e)/me(t,Ie)));for(const i of t){let t=s;for(const s of i){s.y0=t,s.y1=t+s.value*n,t=s.y1+e;for(const e of s.sourceLinks)e.width=e.value*n}t=(r-t+e)/(i.length+1);for(let e=0;e0))continue;let s=(t/i-e.y0)*n;e.y0+=s,e.y1+=s,_(e)}void 0===t&&a.sort(Ne),b(a,i)}}function m(e,n,i){for(let s=e.length-2;s>=0;--s){const a=e[s];for(const e of a){let t=0,i=0;for(const{target:n,value:s}of e.sourceLinks){let a=s*(n.layer-e.layer);t+=x(e,n)*a,i+=a}if(!(i>0))continue;let s=(t/i-e.y0)*n;e.y0+=s,e.y1+=s,_(e)}void 0===t&&a.sort(Ne),b(a,i)}}function b(t,n){const i=t.length>>1,a=t[i];k(t,a.y0-e,i-1,n),y(t,a.y1+e,i+1,n),k(t,r,t.length-1,n),y(t,s,0,n)}function y(t,n,i,s){for(;i1e-6&&(a.y0+=r,a.y1+=r),n=a.y1+e}}function k(t,n,i,s){for(;i>=0;--i){const a=t[i],r=(a.y1-n)*s;r>1e-6&&(a.y0-=r,a.y1-=r),n=a.y0-e}}function _({sourceLinks:e,targetLinks:t}){if(void 0===n){for(const{source:{sourceLinks:e}}of t)e.sort(Pe);for(const{target:{targetLinks:t}}of e)t.sort(Ae)}}function w(e){if(void 0===n)for(const{sourceLinks:t,targetLinks:n}of e)t.sort(Pe),n.sort(Ae)}function v(t,n){let i=t.y0-(t.sourceLinks.length-1)*e/2;for(const{target:s,width:a}of t.sourceLinks){if(s===n)break;i+=a+e}for(const{source:e,width:s}of n.targetLinks){if(e===t)break;i-=s}return i}function x(t,n){let i=n.y0-(n.targetLinks.length-1)*e/2;for(const{source:s,width:a}of n.targetLinks){if(s===t)break;i+=a+e}for(const{target:e,width:s}of t.sourceLinks){if(e===n)break;i-=s}return i}return f.update=function(e){return Ce(e),e},f.nodeId=function(e){return arguments.length?(c="function"==typeof e?e:De(e),f):c},f.nodeAlign=function(e){return arguments.length?(u="function"==typeof e?e:De(e),f):u},f.nodeSort=function(e){return arguments.length?(t=e,f):t},f.nodeWidth=function(e){return arguments.length?(o=+e,f):o},f.nodePadding=function(t){return arguments.length?(l=e=+t,f):l},f.nodes=function(e){return arguments.length?(h="function"==typeof e?e:De(e),f):h},f.links=function(e){return arguments.length?(d="function"==typeof e?e:De(e),f):d},f.linkSort=function(e){return arguments.length?(n=e,f):n},f.size=function(e){return arguments.length?(i=s=0,a=+e[0],r=+e[1],f):[a-i,r-s]},f.extent=function(e){return arguments.length?(i=+e[0][0],a=+e[1][0],s=+e[0][1],r=+e[1][1],f):[[i,s],[a,r]]},f.iterations=function(e){return arguments.length?(g=+e,f):g},f}class Re extends p{constructor(){super(...arguments),Object.defineProperty(this,"links",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>he._new(this._root,{themeTags:["link","shape"]},[this.links.template]))))}),Object.defineProperty(this,"nodes",{enumerable:!0,configurable:!0,writable:!0,value:this.children.push(ue.new(this._root,{}))}),Object.defineProperty(this,"_d3Sankey",{enumerable:!0,configurable:!0,writable:!0,value:Te()}),Object.defineProperty(this,"_d3Graph",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_fillGenerator",{enumerable:!0,configurable:!0,writable:!0,value:(0,de.Z)()}),Object.defineProperty(this,"_strokeGenerator",{enumerable:!0,configurable:!0,writable:!0,value:(0,ge.Z)()})}_afterNew(){this._settings.themeTags=se.mergeTags(this._settings.themeTags,["sankey",this._settings.orientation||"horizontal"]),this._fillGenerator.y0((function(e){return e[3]})),this._fillGenerator.x0((function(e){return e[2]})),this._fillGenerator.y1((function(e){return e[1]})),this._fillGenerator.x1((function(e){return e[0]})),super._afterNew()}makeLink(e){const t=e.get("source"),n=e.get("target"),i=this.links.make();return t.get("unknown")&&(i.addTag("source"),i.addTag("unknown")),n.get("unknown")&&(i.addTag("target"),i.addTag("unknown")),this.linksContainer.children.push(i),i._setDataItem(e),i.set("source",t),i.set("target",n),i.series=this,this.links.push(i),i}updateSankey(){const e=this._d3Graph;e&&(this._d3Sankey.update(e),l.each(this.dataItems,(e=>{const t=e.get("link");t.setPrivate("orientation",this.get("orientation")),t.markDirty()})))}_updateLinkColor(e){super._updateLinkColor(e);const t=this.get("orientation"),n=e.get("link")._fillGradient,i=e.get("link")._strokeGradient;"vertical"==t?(n&&n.set("rotation",90),i&&i.set("rotation",90)):(n&&n.set("rotation",0),i&&i.set("rotation",0))}_getBulletLocation(e){return"vertical"==this.get("orientation")?e.get("locationY",0):e.get("locationX",0)}_prepareChildren(){super._prepareChildren();let e=!1;if("vertical"==this.get("orientation")&&(e=!0),this.isDirty("orientation")||this.isDirty("linkTension")){const t=this.get("linkTension",.5);e?(this._fillGenerator.curve((0,pe.$)(t)),this._strokeGenerator.curve((0,pe.$)(t))):(this._fillGenerator.curve((0,fe.G)(t)),this._strokeGenerator.curve((0,fe.G)(t)))}if((this._valuesDirty||this._sizeDirty||this.isDirty("nodePadding")||this.isDirty("nodeWidth")||this.isDirty("nodeAlign")||this.isDirty("nodeSort")||this.isDirty("orientation")||this.isDirty("linkTension")||this.isDirty("linkSort"))&&this._nodesData.length>0){const t=this._d3Sankey;let n=this.innerWidth(),i=this.innerHeight();switch(e&&([n,i]=[i,n]),t.size([n,i]),t.nodePadding(this.get("nodePadding",10)),t.nodeWidth(this.get("nodeWidth",10)),t.nodeSort(this.get("nodeSort",null)),t.linkSort(this.get("linkSort")),this.get("nodeAlign")){case"right":t.nodeAlign(we);break;case"justify":t.nodeAlign(ve);break;case"center":t.nodeAlign(xe);break;default:t.nodeAlign(_e)}this._d3Graph=t({nodes:this._nodesData,links:this._linksData}),l.each(this.dataItems,(e=>{const t=e.get("link");t.setPrivate("orientation",this.get("orientation")),t.markDirty()}));const s=this._d3Graph;if(s){const t=s.nodes;l.each(t,(t=>{const n=t.dataItem,i=n.get("node");let s,a,r,o;e?(s=t.y0,a=t.y1,r=t.x0,o=t.x1):(s=t.x0,a=t.x1,r=t.y0,o=t.y1),f.isNumber(s)&&f.isNumber(a)&&f.isNumber(r)&&f.isNumber(o)&&(i.setAll({x:s,y:r,width:a-s,height:o-r}),n.get("rectangle").setAll({width:a-s,height:o-r}))}))}}}}Object.defineProperty(Re,"className",{enumerable:!0,configurable:!0,writable:!0,value:"Sankey"}),Object.defineProperty(Re,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:p.classNames.concat([Re.className])});var Me=n(8035);class Ge extends Z{constructor(){super(...arguments),Object.defineProperty(this,"labels",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>K._._new(this._root,{},[this.labels.template]))))}),Object.defineProperty(this,"flow",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_dAngle",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"circles",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>Me.C._new(this._root,{themeTags:["shape"]},[this.circles.template]))))})}makeNode(e){const t=super.makeNode(e,"ArcDiagram"),n=t.children.insertIndex(0,this.circles.make());e.set("circle",n),n._setSoft("fill",e.get("fill")),n._setSoft("fillPattern",e.get("fillPattern"));const i=this.labels.make();return this.labels.push(i),i.addTag("flow"),i.addTag("arcdiagram"),i.addTag("node"),t.children.push(i),e.set("label",i),i._setDataItem(e),n._setDataItem(e),t}disposeDataItem(e){super.disposeDataItem(e);let t=e.get("circle");t&&(this.circles.removeValue(t),t.dispose())}_updateNodeColor(e){const t=e.get("circle");t&&(t.set("fill",e.get("fill")),t.set("fillPattern",e.get("fillPattern")))}}Object.defineProperty(Ge,"className",{enumerable:!0,configurable:!0,writable:!0,value:"ArcDiagramNodes"}),Object.defineProperty(Ge,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:Z.classNames.concat([Ge.className])});class Fe extends ne{constructor(){super(...arguments),Object.defineProperty(this,"_p0",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_p1",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"_radius",{enumerable:!0,configurable:!0,writable:!0,value:0})}_beforeChanged(){if(super._beforeChanged(),this.isDirty("source")){const e=this.get("source");if(e){const t=e.get("node");this._disposers.push(t.events.on("positionchanged",(()=>{this._markDirtyKey("stroke")})))}}if(this.isDirty("target")){const e=this.get("target");if(e){const t=e.get("node");this._disposers.push(t.events.on("positionchanged",(()=>{this._markDirtyKey("stroke")})))}}if(this.isPrivateDirty("orientation")){const e=this.series,t=this.dataItem;t&&e&&e._updateLinkColor(t)}this.series&&this.dataItem&&this.series._positionBullets(this.dataItem),"gradient"==this.get("strokeStyle")?this.set("isMeasured",!0):this.set("isMeasured",!1)}_changed(){super._changed(),this._clear&&this._draw()}_draw(){const e=this.get("target"),t=this.get("source");if(t&&e){let n=t.get("node"),i=e.get("node");const s=n.x(),a=n.y(),r=i.x(),o=i.y();this._p0={x:s,y:a},this._p1={x:r,y:o};let l=0;if("vertical"==this.getPrivate("orientation")){l=(o-a)/2;let e=1;a>o&&(e=-1),this._display.arc(s,a+l,l*e,-Math.PI/2,Math.PI/2)}else{l=(r-s)/2;let e=1;s>r&&(e=-1),this._display.arc(s+l,a,l*e,-Math.PI,0)}this._radius=l}}getPoint(e){if(this._p0&&this._p1){const t=this._radius;if("vertical"==this.getPrivate("orientation")){let n=180*e-90;return{y:this._p0.y+t+t*J.sin(n),x:t*J.cos(n),angle:n+90}}{let n=180+180*e;return{x:this._p0.x+t+t*J.cos(n),y:t*J.sin(n),angle:n+90}}}return{x:0,y:0,angle:0}}}Object.defineProperty(Fe,"className",{enumerable:!0,configurable:!0,writable:!0,value:"ArcDiagramLink"}),Object.defineProperty(Fe,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:ne.classNames.concat([Fe.className])});class We extends p{constructor(){super(...arguments),Object.defineProperty(this,"links",{enumerable:!0,configurable:!0,writable:!0,value:this.addDisposer(new H.o(X.YS.new({}),(()=>Fe._new(this._root,{themeTags:["link","shape"]},[this.links.template]))))}),Object.defineProperty(this,"nodes",{enumerable:!0,configurable:!0,writable:!0,value:this.children.push(Ge.new(this._root,{}))})}_afterNew(){this._settings.themeTags=se.mergeTags(this._settings.themeTags,["arcdiagram",this._settings.orientation||"horizontal"]),super._afterNew(),this.nodes.children.push(this.bulletsContainer)}makeLink(e){const t=this.nodes.children.moveValue(this.links.make(),0);return this.links.push(t),t._setDataItem(e),t.set("source",e.get("source")),t.set("target",e.get("target")),t.series=this,t}_prepareChildren(){if(super._prepareChildren(),this._valuesDirty||this._sizeDirty||this.isDirty("orientation")){let e=1;const t=this.get("orientation");l.each(this.dataItems,(e=>{e.get("link").setPrivate("orientation",this.get("orientation"))})),e="vertical"==t?this.innerHeight():this.innerWidth();let n=0,i=1/0,s=this.get("radiusKey");"none"!=s&&l.each(this.nodes.dataItems,(e=>{let t=e.get(s+"Working");n+=t,i=Math.min(i,t)}));const a=this.nodes.dataItems.length,r=this.get("nodePadding",10),o=this.get("minRadius",5);e-=a*(r+2*o),e<=0&&(e=0);let c=e/(n-a*i),u=0;const h=this.get("animationDuration",0),d=this.get("animationEasing");l.each(this.nodes.dataItems,(n=>{let l=n.get(s+"Working");const g=n.get("node");let f=o+c*(l-i)/2;if("none"==s&&(f=o+e/a/2),"vertical"==t){g.set("x",0);const e=u+r+f;0==g.y()?g.set("y",e):g.animate({key:"y",to:e,duration:h,easing:d})}else{g.set("y",0);const e=u+r+f;0==g.x()?g.set("x",e):g.animate({key:"x",to:e,duration:h,easing:d})}u=u+r+2*f,n.get("circle").set("radius",f)}))}}_updateLinkColor(e){super._updateLinkColor(e);const t=this.get("orientation"),n=e.get("link")._fillGradient,i=e.get("link")._strokeGradient;"vertical"==t?(n&&n.set("rotation",90),i&&i.set("rotation",90)):(n&&n.set("rotation",0),i&&i.set("rotation",0))}}Object.defineProperty(We,"className",{enumerable:!0,configurable:!0,writable:!0,value:"ArcDiagram"}),Object.defineProperty(We,"classNames",{enumerable:!0,configurable:!0,writable:!0,value:p.classNames.concat([We.className])})},906:function(e,t,n){n.r(t),n.d(t,{am5flow:function(){return i}});const i=n(2924)}},function(e){var t=(906,e(e.s=906)),n=window;for(var i in t)n[i]=t[i];t.__esModule&&Object.defineProperty(n,"__esModule",{value:!0})}]); +//# sourceMappingURL=flow.js.map \ No newline at end of file diff --git a/src/main/resources/static/js/amcharts5/flow.js.map b/src/main/resources/static/js/amcharts5/flow.js.map new file mode 100644 index 00000000..0ed9c477 --- /dev/null +++ b/src/main/resources/static/js/amcharts5/flow.js.map @@ -0,0 +1 @@ +{"version":3,"file":"flow.js","mappings":"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","sources":["webpack://@amcharts/amcharts5/./src/.internal/charts/flow/FlowDefaultTheme.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/Flow.ts","webpack://@amcharts/amcharts5/./node_modules/d3-chord/src/math.js","webpack://@amcharts/amcharts5/./node_modules/d3-chord/src/chord.js","webpack://@amcharts/amcharts5/./node_modules/d3-chord/src/array.js","webpack://@amcharts/amcharts5/./node_modules/d3-chord/src/constant.js","webpack://@amcharts/amcharts5/./node_modules/d3-chord/src/ribbon.js","webpack://@amcharts/amcharts5/./node_modules/d3-array/src/ascending.js","webpack://@amcharts/amcharts5/./node_modules/d3-array/src/descending.js","webpack://@amcharts/amcharts5/./node_modules/d3-brush/src/brush.js","webpack://@amcharts/amcharts5/./node_modules/d3-zoom/src/transform.js","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/FlowNode.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/FlowNodes.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/ChordNodes.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/FlowLink.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/ChordLink.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/Chord.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/ChordLinkDirected.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/ChordDirected.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/ChordNonRibbon.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/SankeyNodes.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/SankeyLink.ts","webpack://@amcharts/amcharts5/./node_modules/d3-sankey/node_modules/d3-array/src/sum.js","webpack://@amcharts/amcharts5/./node_modules/d3-sankey/node_modules/d3-array/src/max.js","webpack://@amcharts/amcharts5/./node_modules/d3-sankey/node_modules/d3-array/src/min.js","webpack://@amcharts/amcharts5/./node_modules/d3-sankey/src/align.js","webpack://@amcharts/amcharts5/./node_modules/d3-sankey/src/constant.js","webpack://@amcharts/amcharts5/./node_modules/d3-sankey/src/sankey.js","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/Sankey.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/ArcDiagramNodes.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/ArcDiagramLink.ts","webpack://@amcharts/amcharts5/./src/.internal/charts/flow/ArcDiagram.ts","webpack://@amcharts/amcharts5/./tmp/webpack/flow.js"],"sourcesContent":["import type { DataItem } from \"../../core/render/Component\";\r\nimport type { IFlowNodesDataItem } from \"../../charts/flow/FlowNodes\";\r\n\r\nimport { Theme } from \"../../core/Theme\";\r\nimport { percent, p100, p50 } from \"../../core/util/Percent\";\r\nimport { ColorSet } from \"../../core/util/ColorSet\";\r\nimport { setColor } from \"../../themes/DefaultTheme\";\r\n\r\nimport * as $array from \"../../core/util/Array\";\r\nimport * as $ease from \"../../core/util/Ease\";\r\n\r\n\r\n/**\r\n * @ignore\r\n */\r\nexport class FlowDefaultTheme extends Theme {\r\n\tprotected setupDefaultRules() {\r\n\t\tsuper.setupDefaultRules();\r\n\r\n\t\tconst ic = this._root.interfaceColors;\r\n\t\tconst r = this.rule.bind(this);\r\n\t\t/**\r\n\t\t * ========================================================================\r\n\t\t * charts/flow\r\n\t\t * ========================================================================\r\n\t\t */\r\n\r\n\t\tr(\"Flow\").setAll({\r\n\t\t\twidth: p100,\r\n\t\t\theight: p100,\r\n\t\t\tpaddingLeft: 10,\r\n\t\t\tpaddingRight: 10,\r\n\t\t\tpaddingTop: 10,\r\n\t\t\tpaddingBottom: 10,\r\n\t\t\thiddenSize: 0.05,\r\n\t\t\tminSize: 0,\r\n\t\t\tminHiddenValue: 0\r\n\t\t});\r\n\r\n\t\tr(\"FlowNodes\").setAll({\r\n\t\t\tcolors: ColorSet.new(this._root, {}),\r\n\t\t\tlegendLabelText: \"{name}\",\r\n\t\t\tlegendValueText: \"{sumOutgoing.formatNumber('#.#')}\"\r\n\t\t});\r\n\r\n\r\n\t\tr(\"FlowNode\").setAll({\r\n\t\t\tsetStateOnChildren: true,\r\n\t\t\tcursorOverStyle: \"pointer\",\r\n\t\t\ttoggleKey: \"disabled\"\r\n\t\t})\r\n\r\n\r\n\t\tr(\"FlowNode\").states.create(\"disabled\", {}); // do not remove\r\n\r\n\t\tr(\"FlowNode\", [\"unknown\"]).setAll({\r\n\t\t\tdraggable: false,\r\n\t\t\topacity: 0\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"flow\"]).states.create(\"disabled\", {\r\n\t\t\tfill: ic.get(\"disabled\")\r\n\t\t})\r\n\r\n\t\tr(\"RadialLabel\", [\"flow\", \"node\"]).setAll({\r\n\t\t\ttext: \"{name}\",\r\n\t\t\tpopulateText: true\r\n\t\t});\r\n\r\n\t\tr(\"FlowLink\").setAll({\r\n\t\t\tfillStyle: \"gradient\",\r\n\t\t\tstrokeStyle: \"gradient\"\r\n\t\t});\r\n\r\n\t\tr(\"FlowLink\", [\"source\", \"unknown\"]).setAll({\r\n\t\t});\r\n\r\n\t\tr(\"FlowLink\", [\"target\", \"unknown\"]).setAll({\r\n\t\t});\r\n\r\n\r\n\t\tr(\"FlowNode\").events.on(\"pointerover\", (e) => {\r\n\t\t\tconst dataItem = e.target.dataItem as DataItem;\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tconst outgoing = dataItem.get(\"outgoingLinks\")\r\n\t\t\t\tif (outgoing) {\r\n\t\t\t\t\t$array.each(outgoing, (linkDataItem) => {\r\n\t\t\t\t\t\tconst link = (linkDataItem as any).get(\"link\");\r\n\t\t\t\t\t\tlink.hover();\r\n\t\t\t\t\t\tlink.hideTooltip();\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\tconst incoming = dataItem.get(\"incomingLinks\")\r\n\t\t\t\tif (incoming) {\r\n\t\t\t\t\t$array.each(incoming, (linkDataItem) => {\r\n\t\t\t\t\t\tconst link = (linkDataItem as any).get(\"link\");\r\n\t\t\t\t\t\tlink.hover();\r\n\t\t\t\t\t\tlink.hideTooltip();\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlet rectangle = (dataItem).get(\"slice\") || (dataItem).get(\"rectangle\");\r\n\t\t\tif (rectangle && rectangle.get(\"tooltipText\")) {\r\n\t\t\t\trectangle.showTooltip();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tr(\"FlowNode\").events.on(\"pointerout\", (e) => {\r\n\t\t\tconst dataItem = e.target.dataItem as DataItem;\r\n\t\t\tif (dataItem) {\r\n\t\t\t\tconst outgoing = dataItem.get(\"outgoingLinks\")\r\n\t\t\t\tif (outgoing) {\r\n\t\t\t\t\t$array.each(outgoing, (linkDataItem) => {\r\n\t\t\t\t\t\t(linkDataItem as any).get(\"link\").unhover();\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t\tconst incoming = dataItem.get(\"incomingLinks\")\r\n\t\t\t\tif (incoming) {\r\n\t\t\t\t\t$array.each(incoming, (linkDataItem) => {\r\n\t\t\t\t\t\t(linkDataItem as any).get(\"link\").unhover();\r\n\t\t\t\t\t})\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t/**\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t * charts/flow: Sankey\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\tr(\"Sankey\").setAll({\r\n\t\t\torientation: \"horizontal\",\r\n\t\t\tnodeAlign: \"justify\",\r\n\t\t\tlinkTension: 0.5,\r\n\t\t\tnodePadding: 10,\r\n\t\t\tnodeWidth: 10\r\n\t\t});\r\n\r\n\t\t// Class: RoundedRectangle\r\n\t\tr(\"RoundedRectangle\", [\"sankey\", \"node\", \"shape\"]).setAll({\r\n\t\t\tcornerRadiusTL: 0,\r\n\t\t\tcornerRadiusBL: 0,\r\n\t\t\tcornerRadiusTR: 0,\r\n\t\t\tcornerRadiusBR: 0\r\n\t\t});\r\n\r\n\t\tr(\"RoundedRectangle\", [\"shape\"]).states.create(\"disabled\", {\r\n\t\t\tfill: ic.get(\"disabled\")\r\n\t\t})\r\n\r\n\t\tr(\"SankeyLink\").setAll({\r\n\t\t\tcontrolPointDistance: 0.2\r\n\t\t});\r\n\r\n\t\tr(\"FlowNode\", [\"sankey\"]).setAll({\r\n\t\t\tdraggable: true\r\n\t\t});\r\n\r\n\t\t{\r\n\t\t\tconst rule = r(\"Graphics\", [\"sankey\", \"link\"]);\r\n\r\n\t\t\trule.setAll({\r\n\t\t\t\tfillOpacity: 0.2,\r\n\t\t\t\tstrokeOpacity: 0,\r\n\t\t\t\tinteractive: true,\r\n\t\t\t\ttooltipText: \"{sourceId} - {targetId}: {value}\"\r\n\t\t\t});\r\n\r\n\t\t\tsetColor(rule, \"fill\", ic, \"grid\");\r\n\t\t}\r\n\r\n\t\tr(\"Graphics\", [\"sankey\", \"link\"]).states.create(\"hover\", { fillOpacity: 0.5 });\r\n\r\n\t\tr(\"Label\", [\"sankey\", \"node\"]).setAll({\r\n\t\t\ttext: \"{name}\",\r\n\t\t\tpopulateText: true\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"sankey\", \"horizontal\"]).setAll({\r\n\t\t\ty: p50,\r\n\t\t\tcenterY: p50,\r\n\t\t\tpaddingLeft: 15\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"sankey\", \"vertical\"]).setAll({\r\n\t\t\tx: p50,\r\n\t\t\tcenterX: p50,\r\n\t\t\tpaddingTop: 15\r\n\t\t});\r\n\r\n\r\n\t\t/**\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t * charts/flow: Chord\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\tr(\"Chord\").setAll({\r\n\t\t\tradius: percent(90),\r\n\t\t\tnodeWidth: 10,\r\n\t\t\tpadAngle: 1,\r\n\t\t\tstartAngle: 0,\r\n\t\t\tsort:\"none\"\r\n\t\t});\r\n\r\n\t\tr(\"ChordDirected\").setAll({\r\n\t\t\tlinkHeadRadius: 10\r\n\t\t});\r\n\r\n\t\tr(\"ChordNodes\").setAll({\r\n\t\t\tx: p50,\r\n\t\t\ty: p50\r\n\t\t});\r\n\r\n\t\tr(\"FlowNode\", [\"chord\"]).setAll({\r\n\t\t\tdraggable: true\r\n\t\t});\r\n\r\n\t\tr(\"ChordLink\").setAll({\r\n\t\t\tsourceRadius: p100,\r\n\t\t\ttargetRadius: p100,\r\n\t\t\tfillStyle: \"solid\",\r\n\t\t\tstrokeStyle: \"solid\",\r\n\t\t\ttooltipText: \"{sourceId} - {targetId}: {value}\"\r\n\t\t});\r\n\r\n\t\tr(\"Slice\", [\"chord\", \"node\", \"shape\"]).setAll({\r\n\t\t\tcornerRadius: 0\r\n\t\t})\r\n\r\n\t\tr(\"Slice\", [\"shape\"]).states.create(\"disabled\", {\r\n\t\t\tfill: ic.get(\"disabled\")\r\n\t\t})\r\n\r\n\t\tr(\"RadialLabel\", [\"chord\", \"node\"]).setAll({\r\n\t\t\tradius: 5,\r\n\t\t\ttextType: \"circular\"\r\n\t\t});\r\n\r\n\t\tr(\"ChordLinkDirected\").setAll({\r\n\t\t\theadRadius: 10\r\n\t\t});\r\n\r\n\t\t// Class: Graphics\r\n\t\t{\r\n\t\t\tconst rule = r(\"Graphics\", [\"chord\", \"link\", \"shape\"]);\r\n\r\n\t\t\trule.setAll({\r\n\t\t\t\tfillOpacity: 0.2,\r\n\t\t\t\tstrokeOpacity: 0,\r\n\t\t\t\tinteractive: true\r\n\t\t\t});\r\n\r\n\t\t\tsetColor(rule, \"fill\", ic, \"grid\");\r\n\t\t\tsetColor(rule, \"stroke\", ic, \"grid\");\r\n\t\t}\r\n\r\n\t\tr(\"Graphics\", [\"chord\", \"link\", \"shape\"]).states.create(\"hover\", { fillOpacity: 0.5 });\r\n\r\n\t\tr(\"ChordNonRibbon\").setAll({\r\n\t\t\tlinkType: \"curve\" // \"line\" | \"curve\"\r\n\t\t})\r\n\r\n\t\tr(\"ChordLink\", [\"basic\"]).setAll({\r\n\t\t\tfillStyle: \"none\",\r\n\t\t\tstrokeStyle: \"source\"\r\n\t\t});\r\n\r\n\t\tr(\"Graphics\", [\"chord\", \"link\", \"shape\", \"basic\"]).setAll({\r\n\t\t\tstrokeOpacity: 0.4\r\n\t\t});\r\n\r\n\t\tr(\"Graphics\", [\"chord\", \"link\", \"shape\", \"basic\"]).states.create(\"hover\", { strokeWidth: 2, strokeOpacity: 1 });\r\n\r\n\r\n\t\t/**\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t * charts/flow: ArcDiagram\r\n\t\t * ------------------------------------------------------------------------\r\n\t\t */\r\n\r\n\t\tr(\"ArcDiagram\").setAll({\r\n\t\t\torientation: \"horizontal\",\r\n\t\t\tnodePadding: 5,\r\n\t\t\tminRadius: 5,\r\n\t\t\tradiusKey: \"sum\",\r\n\t\t\tanimationEasing: $ease.out($ease.cubic)\r\n\t\t});\r\n\r\n\t\tr(\"ArcDiagramNodes\", [\"horizontal\"]).setAll({\r\n\t\t\ty: p100,\r\n\t\t\tcenterY: p100\r\n\t\t});\r\n\r\n\t\tr(\"ArcDiagramNodes\", [\"vertical\"]).setAll({\r\n\t\t\tcenterX: 0\r\n\t\t});\r\n\r\n\t\tr(\"Circle\", [\"arcdiagram\", \"node\", \"shape\"]).setAll({\r\n\t\t\ttooltipText: \"{name}: {sum}\"\r\n\t\t});\r\n\r\n\t\tr(\"Circle\", [\"arcdiagram\", \"node\", \"shape\"]).states.create(\"disabled\", {\r\n\t\t\tfill: ic.get(\"disabled\")\r\n\t\t})\r\n\r\n\t\t{\r\n\t\t\tconst rule = r(\"ArcDiagramLink\", [\"link\", \"shape\"]);\r\n\r\n\t\t\trule.setAll({\r\n\t\t\t\tstrokeOpacity: 0.15,\r\n\t\t\t\tstrokeStyle: \"solid\",\r\n\t\t\t\tfillStyle: \"none\",\r\n\t\t\t\tisMeasured: false\r\n\t\t\t});\r\n\r\n\t\t\tsetColor(rule, \"stroke\", ic, \"grid\");\r\n\t\t}\r\n\r\n\t\tr(\"ArcDiagramLink\", [\"link\", \"shape\"]).states.create(\"hover\", {\r\n\t\t\tstrokeOpacity: 1\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"arcdiagram\", \"node\"]).setAll({\r\n\t\t\ttext: \"{name}\",\r\n\t\t\tpopulateText: true\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"arcdiagram\", \"horizontal\"]).setAll({\r\n\t\t\ty: 0,\r\n\t\t\tcenterY: p50,\r\n\t\t\tcenterX: p100,\r\n\t\t\trotation: -90\r\n\t\t});\r\n\r\n\t\tr(\"Label\", [\"arcdiagram\", \"vertical\"]).setAll({\r\n\t\t\tcenterY: p50,\r\n\t\t\tcenterX: p100,\r\n\t\t\tpaddingRight: 15\r\n\t\t});\r\n\t}\r\n}\r\n","import type { DataItem } from \"../../core/render/Component\";\nimport type { Color } from \"../../core/util/Color\";\nimport type { FlowLink } from \"./FlowLink\";\nimport type { FlowNodes, IFlowNodesDataItem } from \"./FlowNodes\";\nimport type { ListTemplate } from \"../../core/util/List\";\nimport type { Bullet } from \"../../core/render/Bullet\";\nimport type * as d3sankey from \"d3-sankey\";\n\nimport { FlowDefaultTheme } from \"./FlowDefaultTheme\";\nimport { Series, ISeriesSettings, ISeriesDataItem, ISeriesPrivate, ISeriesEvents } from \"../../core/render/Series\";\nimport { Container } from \"../../core/render/Container\";\nimport { LinearGradient } from \"../../core/render/gradients/LinearGradient\";\n\nimport * as $array from \"../../core/util/Array\";\nimport * as $type from \"../../core/util/Type\";\n\nexport interface IFlowDataItem extends ISeriesDataItem {\n\n\t/**\n\t * Link value.\n\t */\n\tvalue: number;\n\n\t/**\n\t * @ignore\n\t */\n\tvalueWorking: number;\n\n\t/**\n\t * Associated link element.\n\t */\n\tlink: FlowLink;\n\n\t/**\n\t * Link's color.\n\t */\n\tfill: Color;\n\n\t/**\n\t * @ignore\n\t */\n\td3SankeyLink: d3sankey.SankeyLink;\n\n\t/**\n\t * An ID of the target node.\n\t */\n\ttargetId: string;\n\n\t/**\n\t * An ID of the source node.\n\t */\n\tsourceId: string;\n\n\t/**\n\t * A data item of the source node.\n\t */\n\tsource: DataItem;\n\n\t/**\n\t * A data item of the target node.\n\t */\n\ttarget: DataItem;\n\n}\n\nexport interface IFlowSettings extends ISeriesSettings {\n\n\t/**\n\t * A field in data which holds source node ID.\n\t */\n\tsourceIdField?: string;\n\n\t/**\n\t * A field in data which holds target node ID.\n\t */\n\ttargetIdField?: string;\n\n\t/**\n\t * The thickness of node strip in pixels.\n\t *\n\t * @default 10\n\t */\n\tnodeWidth?: number;\n\n\t/**\n\t * Minimum gap between adjacent nodes.\n\t *\n\t * @default 10\n\t */\n\tnodePadding?: number;\n\n\t/**\n\t * Minimum size of the link.\n\t * \n\t * It's a relative value to the sum of all values in the series. If set,\n\t * this relative value will be used for small value nodes when calculating\n\t * their size. For example, if it's set to `0.01`, small nodes will be\n\t * sized like their value is 1% of the total sum of all values in series.\n\t * \n\t * @default 0\n\t * @since 5.1.5\n\t */\n\tminSize?: number;\n\n\t/**\n\t * Relative size of hidden links.\n\t * \n\t * Links are hidden when user clicks on nodes (if `toggleKey` on nodes is set\n\t * to `\"disabled\"`).\n\t * \n\t * This allows hidden node to remain visible so that user could click on it\n\t * again to show it and its links.\n\t * \n\t * @default 0.05\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/flow-charts/#Node_toggling} for more info\n\t * @since 5.4.1\n\t */\n\thiddenSize?: number;\n\n\t/**\n\t * Minimum value of hidden links.\n\t * \n\t * Links are hidden when user clicks on nodes (if `toggleKey` on nodes is set\n\t * to `\"disabled\"`).\n\t * \n\t * @default 0\n\t * @see {@link https://www.amcharts.com/docs/v5/charts/flow-charts/#Node_toggling} for more info\n\t * @since 5.4.1\n\t */\n\tminHiddenValue?: number;\n}\n\nexport interface IFlowPrivate extends ISeriesPrivate {\n\tvalueSum?: number;\n\tvalueLow?: number;\n\tvalueHigh?: number;\n}\n\nexport interface IFlowEvents extends ISeriesEvents {\n}\n\n/**\n * A base class for all flow type series: [[Sankey]] and [[Chord]].\n *\n * @see {@link https://www.amcharts.com/docs/v5/charts/flow-charts/} for more info\n */\nexport abstract class Flow extends Series {\n\tpublic static className: string = \"Flow\";\n\tpublic static classNames: Array = Series.classNames.concat([Flow.className]);\n\n\tdeclare public _settings: IFlowSettings;\n\tdeclare public _privateSettings: IFlowPrivate;\n\tdeclare public _dataItemSettings: IFlowDataItem;\n\tdeclare public _events: IFlowEvents;\n\n\t/**\n\t * @ignore\n\t */\n\tdeclare public readonly nodes: FlowNodes;\n\n\t/**\n\t * Container series will place their links in.\n\t *\n\t * @default Container.new()\n\t */\n\tpublic readonly linksContainer = this.children.push(Container.new(this._root, {}));\n\n\t/**\n\t * @ignore\n\t */\n\tpublic abstract readonly links: ListTemplate;\n\n\tprotected _nodesData: d3sankey.SankeyNodeMinimal<{}, {}>[] = [];\n\tprotected _linksData: { source: d3sankey.SankeyNodeMinimal<{}, {}>, target: d3sankey.SankeyNodeMinimal<{}, {}>, value: number }[] = [];\n\tprotected _index = 0;\n\tprotected _nodesDataSet: boolean = false;\n\n\tprotected _linksByIndex: { [index: string]: any } = {};\n\tprotected _afterNew() {\n\t\tthis._defaultThemes.push(FlowDefaultTheme.new(this._root));\n\n\t\tthis.fields.push(\"disabled\", \"sourceId\", \"targetId\");\n\n\t\tif (this.nodes) {\n\t\t\tthis.nodes.flow = this;\n\t\t}\n\n\t\tsuper._afterNew();\n\n\t\tthis.children.push(this.bulletsContainer);\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic abstract makeLink(dataItem: DataItem): FlowLink;\n\n\tprotected processDataItem(dataItem: DataItem) {\n\t\tsuper.processDataItem(dataItem);\n\n\t\tconst nodes = this.nodes;\n\t\tif (nodes) {\n\t\t\tlet unknown = false;\n\t\t\tlet sourceId = dataItem.get(\"sourceId\");\n\t\t\tlet sourceDataItem = nodes.getDataItemById(sourceId);\n\n\t\t\tif (!sourceDataItem) {\n\t\t\t\tif (sourceId == null) {\n\t\t\t\t\tsourceId = \"undefined\" + this._index;\n\t\t\t\t\tthis._index++;\n\t\t\t\t\tunknown = true;\n\t\t\t\t}\n\t\t\t\tnodes.data.push({ id: sourceId, unknown: unknown });\n\t\t\t\tsourceDataItem = nodes.getDataItemById(sourceId)!;\n\t\t\t\tif (!unknown) {\n\t\t\t\t\tsourceDataItem.set(\"name\", sourceId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tunknown = false;\n\t\t\tlet targetId = dataItem.get(\"targetId\");\n\n\t\t\tlet targetDataItem = nodes.getDataItemById(targetId);\n\t\t\tif (!targetDataItem) {\n\t\t\t\tif (targetId == null) {\n\t\t\t\t\ttargetId = \"undefined\" + this._index;\n\t\t\t\t\tthis._index++;\n\t\t\t\t\tunknown = true;\n\t\t\t\t}\n\n\t\t\t\tnodes.data.push({ id: targetId, unknown: unknown });\n\t\t\t\ttargetDataItem = nodes.getDataItemById(targetId)!;\n\t\t\t\tif (!unknown) {\n\t\t\t\t\ttargetDataItem.set(\"name\", targetId);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (sourceDataItem) {\n\t\t\t\tdataItem.set(\"source\", sourceDataItem);\n\t\t\t\tnodes.addOutgoingLink(sourceDataItem, dataItem);\n\t\t\t}\n\n\t\t\tif (targetDataItem) {\n\t\t\t\tdataItem.set(\"target\", targetDataItem);\n\t\t\t\tnodes.addincomingLink(targetDataItem, dataItem);\n\t\t\t}\n\n\t\t\tdataItem.set(\"link\", this.makeLink(dataItem));\n\n\t\t\tconst sourceIndex = this.nodes.dataItems.indexOf(sourceDataItem);\n\t\t\tconst targetIndex = this.nodes.dataItems.indexOf(targetDataItem);\n\n\t\t\tthis._linksByIndex[sourceIndex + \"_\" + targetIndex] = dataItem;\n\n\t\t\tif (sourceDataItem.get(\"unknown\")) {\n\t\t\t\tif (targetDataItem) {\n\t\t\t\t\tsourceDataItem.set(\"fill\", targetDataItem.get(\"fill\"));\n\t\t\t\t}\n\n\t\t\t\tdataItem.get(\"link\").set(\"fillStyle\", \"gradient\");\n\t\t\t}\n\n\n\t\t\tif (targetDataItem.get(\"unknown\")) {\n\t\t\t\tif (sourceDataItem) {\n\t\t\t\t\ttargetDataItem.set(\"fill\", sourceDataItem.get(\"fill\"));\n\t\t\t\t}\n\n\t\t\t\tdataItem.get(\"link\").set(\"fillStyle\", \"gradient\");\n\t\t\t}\n\n\t\t\tthis._updateLinkColor(dataItem);\n\t\t}\n\t}\n\n\tprotected _onDataClear() {\n\t\tif (!this.nodes._userDataSet) {\n\t\t\tthis.nodes.data.setAll([]);\n\t\t\tthis.nodes._userDataSet = false;\n\t\t}\n\n\t}\n\n\tpublic _prepareChildren() {\n\t\tsuper._prepareChildren();\n\n\t\tlet valueLow = Infinity;\n\t\tlet valueHigh = -Infinity;\n\t\tlet valueSum = 0;\n\n\t\tif (this._valuesDirty) {\n\t\t\tthis._nodesData = [];\n\t\t\tconst nodes = this.nodes;\n\t\t\tif (nodes) {\n\t\t\t\t$array.each(nodes.dataItems, (dataItem) => {\n\t\t\t\t\tconst d3SankeyNode = dataItem.get(\"d3SankeyNode\");\n\t\t\t\t\tthis._nodesData.push(d3SankeyNode);\n\n\t\t\t\t\tconst incoming = dataItem.get(\"incomingLinks\")\n\n\t\t\t\t\tlet sumIncoming = 0;\n\t\t\t\t\tlet sumIncomingWorking = 0;\n\t\t\t\t\tif (incoming) {\n\t\t\t\t\t\t$array.each(incoming, (link) => {\n\t\t\t\t\t\t\tconst value = link.get(\"value\");\n\t\t\t\t\t\t\tconst workingValue = link.get(\"valueWorking\");\n\t\t\t\t\t\t\tsumIncoming += value;\n\t\t\t\t\t\t\tsumIncomingWorking += workingValue;\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tdataItem.set(\"sumIncoming\", sumIncoming);\n\t\t\t\t\tdataItem.set(\"sumIncomingWorking\", sumIncomingWorking);\n\n\t\t\t\t\tconst outgoing = dataItem.get(\"outgoingLinks\")\n\t\t\t\t\tlet sumOutgoing = 0;\n\t\t\t\t\tlet sumOutgoingWorking = 0;\n\t\t\t\t\tif (outgoing) {\n\t\t\t\t\t\t$array.each(outgoing, (link) => {\n\t\t\t\t\t\t\tconst value = link.get(\"value\");\n\t\t\t\t\t\t\tconst workingValue = link.get(\"valueWorking\");\n\t\t\t\t\t\t\tsumOutgoing += value;\n\t\t\t\t\t\t\tsumOutgoingWorking += workingValue;\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tdataItem.set(\"sumOutgoing\", sumOutgoing);\n\t\t\t\t\tdataItem.set(\"sumOutgoingWorking\", sumOutgoingWorking);\n\n\t\t\t\t\tdataItem.set(\"sum\", sumIncoming + sumOutgoing);\n\t\t\t\t\tdataItem.set(\"sumWorking\", sumIncomingWorking + sumOutgoingWorking);\n\n\t\t\t\t\tnodes.updateLegendValue(dataItem);\n\t\t\t\t})\n\t\t\t}\n\t\t\tthis._linksData = [];\n\n\t\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\t\tlet value = dataItem.get(\"value\");\n\t\t\t\tif ($type.isNumber(value)) {\n\t\t\t\t\tif (value < valueLow) {\n\t\t\t\t\t\tvalueLow = value;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (value > valueHigh) {\n\t\t\t\t\t\tvalueHigh = value;\n\t\t\t\t\t}\n\t\t\t\t\tvalueSum += value;\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t$array.each(this.dataItems, (dataItem) => {\n\t\t\t\tlet value = dataItem.get(\"value\");\n\t\t\t\tif ($type.isNumber(value)) {\n\t\t\t\t\tlet valueWorking = dataItem.get(\"valueWorking\");\n\t\t\t\t\tlet minSize = this.get(\"minSize\", 0);\n\t\t\t\t\tif (minSize > 0) {\n\t\t\t\t\t\tif (valueWorking < minSize * valueSum) {\n\t\t\t\t\t\t\tvalueWorking = minSize * valueSum;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tlet d3SankeyLink = { source: dataItem.get(\"source\").get(\"d3SankeyNode\"), target: dataItem.get(\"target\").get(\"d3SankeyNode\"), value: valueWorking };\n\t\t\t\t\tdataItem.setRaw(\"d3SankeyLink\", d3SankeyLink);\n\t\t\t\t\tthis._linksData.push(d3SankeyLink);\n\t\t\t\t\tthis.updateLegendValue(dataItem);\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tthis.setPrivateRaw(\"valueHigh\", valueHigh);\n\t\t\tthis.setPrivateRaw(\"valueLow\", valueLow);\n\t\t\tthis.setPrivateRaw(\"valueSum\", valueSum);\n\t\t}\n\t}\n\n\tpublic _updateLinkColor(dataItem: DataItem) {\n\t\tconst link = dataItem.get(\"link\");\n\n\t\tconst fillStyle = link.get(\"fillStyle\");\n\t\tconst strokeStyle = link.get(\"strokeStyle\");\n\t\tconst source = dataItem.get(\"source\");\n\t\tconst target = dataItem.get(\"target\");\n\t\tconst sourceFill = source.get(\"fill\");\n\t\tconst targetFill = target.get(\"fill\");\n\t\tlink.remove(\"fillGradient\");\n\t\tlink.remove(\"strokeGradient\");\n\n\t\tswitch (fillStyle) {\n\n\t\t\tcase \"solid\":\n\t\t\t\tlink._applyTemplates();\n\t\t\t\tbreak;\n\t\t\tcase \"source\":\n\t\t\t\tlink.set(\"fill\", sourceFill);\n\t\t\t\tbreak;\n\n\t\t\tcase \"target\":\n\t\t\t\tlink.set(\"fill\", targetFill);\n\t\t\t\tbreak;\n\n\t\t\tcase \"gradient\":\n\t\t\t\tlet gradient = link._fillGradient;\n\t\t\t\tif (!gradient) {\n\t\t\t\t\tgradient = LinearGradient.new(this._root, {});\n\t\t\t\t}\n\t\t\t\tconst sourceStop: any = { color: sourceFill }\n\t\t\t\tif (source.get(\"unknown\")) {\n\t\t\t\t\tsourceStop.opacity = 0;\n\t\t\t\t}\n\t\t\t\tconst targetStop: any = { color: targetFill };\n\t\t\t\tif (target.get(\"unknown\")) {\n\t\t\t\t\ttargetStop.opacity = 0;\n\t\t\t\t}\n\n\t\t\t\tgradient.set(\"stops\", [sourceStop, targetStop]);\n\t\t\t\tlink._fillGradient = gradient;\n\n\t\t\t\tlink.set(\"fillGradient\", gradient);\n\t\t\t\tbreak;\n\t\t\tcase \"none\":\n\t\t\t\tlink.set(\"fill\", undefined); // do not use remove!\n\t\t\t\tbreak;\n\t\t}\n\n\t\tswitch (strokeStyle) {\n\t\t\tcase \"solid\":\n\t\t\t\tlink._applyTemplates();\n\t\t\t\tbreak;\n\n\t\t\tcase \"source\":\n\t\t\t\tlink.set(\"stroke\", sourceFill);\n\t\t\t\tbreak;\n\n\t\t\tcase \"target\":\n\t\t\t\tlink.set(\"stroke\", targetFill);\n\t\t\t\tbreak;\n\t\t\tcase \"gradient\":\n\t\t\t\tlet gradient = link._strokeGradient;\n\t\t\t\tif (!gradient) {\n\t\t\t\t\tgradient = LinearGradient.new(this._root, {});\n\t\t\t\t\tconst sourceStop: any = { color: sourceFill }\n\t\t\t\t\tif (source.get(\"unknown\")) {\n\t\t\t\t\t\tsourceStop.opacity = 0;\n\t\t\t\t\t}\n\t\t\t\t\tconst targetStop: any = { color: targetFill };\n\t\t\t\t\tif (target.get(\"unknown\")) {\n\t\t\t\t\t\ttargetStop.opacity = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tgradient.set(\"stops\", [sourceStop, targetStop]);\n\t\t\t\t\tlink._strokeGradient = gradient;\n\t\t\t\t}\n\t\t\t\tlink.set(\"strokeGradient\", gradient);\n\t\t\t\tbreak;\n\n\t\t\tcase \"none\":\n\t\t\t\tlink.remove(\"stroke\");\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/**\n\t * @ignore\n\t */\n\tpublic disposeDataItem(dataItem: DataItem) {\n\t\tsuper.disposeDataItem(dataItem);\n\t\tlet link = dataItem.get(\"link\");\n\t\tif (link) {\n\t\t\tthis.links.removeValue(link);\n\t\t\tlink.dispose();\n\t\t}\n\t}\n\n\t/**\n\t * Shows diagram's data item.\n\t *\n\t * @param dataItem Data item\n\t * @param duration Animation duration in milliseconds\n\t * @return Promise\n\t */\n\tpublic async hideDataItem(dataItem: DataItem, duration?: number): Promise {\n\t\tconst promises = [super.hideDataItem(dataItem, duration)];\n\t\tconst hiddenState = this.states.create(\"hidden\", {})\n\n\t\tconst stateAnimationDuration = \"stateAnimationDuration\";\n\t\tconst stateAnimationEasing = \"stateAnimationEasing\";\n\n\t\tif (!$type.isNumber(duration)) {\n\t\t\tduration = hiddenState.get(stateAnimationDuration, this.get(stateAnimationDuration, 0));\n\t\t}\n\n\t\tconst easing = hiddenState.get(stateAnimationEasing, this.get(stateAnimationEasing));\n\n\t\tpromises.push(dataItem.animate({\n\t\t\tkey: \"valueWorking\" as any,\n\t\t\tto: Math.max(this.get(\"minHiddenValue\", 0), this.get(\"hiddenSize\", 0) * dataItem.get(\"value\")),\n\t\t\tduration: duration,\n\t\t\teasing: easing\n\t\t}).waitForStop());\n\n\t\tconst linkGraphics = dataItem.get(\"link\");\n\t\tlinkGraphics.hide();\n\n\t\tawait Promise.all(promises);\n\t}\n\n\t/**\n\t * Shows diagram's data item.\n\t *\n\t * @param dataItem Data item\n\t * @param duration Animation duration in milliseconds\n\t * @return Promise\n\t */\n\tpublic async showDataItem(dataItem: DataItem, duration?: number): Promise {\n\t\tconst promises = [super.showDataItem(dataItem, duration)];\n\n\t\tif (!$type.isNumber(duration)) {\n\t\t\tduration = this.get(\"stateAnimationDuration\", 0);\n\t\t}\n\n\t\tconst easing = this.get(\"stateAnimationEasing\");\n\n\t\tpromises.push(dataItem.animate({ key: \"valueWorking\" as any, to: dataItem.get(\"value\"), duration: duration, easing: easing }).waitForStop());\n\n\t\tconst linkGraphics = dataItem.get(\"link\");\n\t\tlinkGraphics.show();\n\n\t\tawait Promise.all(promises);\n\t}\n\n\tpublic _positionBullet(bullet: Bullet) {\n\t\tconst sprite = bullet.get(\"sprite\");\n\n\t\tif (sprite) {\n\t\t\tconst dataItem = sprite.dataItem as DataItem;\n\t\t\tif (dataItem) {\n\t\t\t\tconst link = dataItem.get(\"link\");\n\t\t\t\tconst sprite = bullet.get(\"sprite\");\n\n\t\t\t\tif (sprite) {\n\t\t\t\t\tconst point = link.getPoint(this._getBulletLocation(bullet));\n\t\t\t\t\tsprite.setAll({ x: point.x, y: point.y });\n\n\t\t\t\t\tif (bullet.get(\"autoRotate\")) {\n\t\t\t\t\t\tsprite.set(\"rotation\", point.angle + bullet.get(\"autoRotateAngle\", 0));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _getBulletLocation(bullet: Bullet): number {\n\t\treturn bullet.get(\"locationY\", 0);\n\t}\n}\n","export var abs = Math.abs;\nexport var cos = Math.cos;\nexport var sin = Math.sin;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = pi * 2;\nexport var max = Math.max;\nexport var epsilon = 1e-12;\n","import {max, tau} from \"./math.js\";\n\nfunction range(i, j) {\n return Array.from({length: j - i}, (_, k) => i + k);\n}\n\nfunction compareValue(compare) {\n return function(a, b) {\n return compare(\n a.source.value + a.target.value,\n b.source.value + b.target.value\n );\n };\n}\n\nexport default function() {\n return chord(false, false);\n}\n\nexport function chordTranspose() {\n return chord(false, true);\n}\n\nexport function chordDirected() {\n return chord(true, false);\n}\n\nfunction chord(directed, transpose) {\n var padAngle = 0,\n sortGroups = null,\n sortSubgroups = null,\n sortChords = null;\n\n function chord(matrix) {\n var n = matrix.length,\n groupSums = new Array(n),\n groupIndex = range(0, n),\n chords = new Array(n * n),\n groups = new Array(n),\n k = 0, dx;\n\n matrix = Float64Array.from({length: n * n}, transpose\n ? (_, i) => matrix[i % n][i / n | 0]\n : (_, i) => matrix[i / n | 0][i % n]);\n\n // Compute the scaling factor from value to angle in [0, 2pi].\n for (let i = 0; i < n; ++i) {\n let x = 0;\n for (let j = 0; j < n; ++j) x += matrix[i * n + j] + directed * matrix[j * n + i];\n k += groupSums[i] = x;\n }\n k = max(0, tau - padAngle * n) / k;\n dx = k ? padAngle : tau / n;\n\n // Compute the angles for each group and constituent chord.\n {\n let x = 0;\n if (sortGroups) groupIndex.sort((a, b) => sortGroups(groupSums[a], groupSums[b]));\n for (const i of groupIndex) {\n const x0 = x;\n if (directed) {\n const subgroupIndex = range(~n + 1, n).filter(j => j < 0 ? matrix[~j * n + i] : matrix[i * n + j]);\n if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(a < 0 ? -matrix[~a * n + i] : matrix[i * n + a], b < 0 ? -matrix[~b * n + i] : matrix[i * n + b]));\n for (const j of subgroupIndex) {\n if (j < 0) {\n const chord = chords[~j * n + i] || (chords[~j * n + i] = {source: null, target: null});\n chord.target = {index: i, startAngle: x, endAngle: x += matrix[~j * n + i] * k, value: matrix[~j * n + i]};\n } else {\n const chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n }\n }\n groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n } else {\n const subgroupIndex = range(0, n).filter(j => matrix[i * n + j] || matrix[j * n + i]);\n if (sortSubgroups) subgroupIndex.sort((a, b) => sortSubgroups(matrix[i * n + a], matrix[i * n + b]));\n for (const j of subgroupIndex) {\n let chord;\n if (i < j) {\n chord = chords[i * n + j] || (chords[i * n + j] = {source: null, target: null});\n chord.source = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n } else {\n chord = chords[j * n + i] || (chords[j * n + i] = {source: null, target: null});\n chord.target = {index: i, startAngle: x, endAngle: x += matrix[i * n + j] * k, value: matrix[i * n + j]};\n if (i === j) chord.source = chord.target;\n }\n if (chord.source && chord.target && chord.source.value < chord.target.value) {\n const source = chord.source;\n chord.source = chord.target;\n chord.target = source;\n }\n }\n groups[i] = {index: i, startAngle: x0, endAngle: x, value: groupSums[i]};\n }\n x += dx;\n }\n }\n\n // Remove empty chords.\n chords = Object.values(chords);\n chords.groups = groups;\n return sortChords ? chords.sort(sortChords) : chords;\n }\n\n chord.padAngle = function(_) {\n return arguments.length ? (padAngle = max(0, _), chord) : padAngle;\n };\n\n chord.sortGroups = function(_) {\n return arguments.length ? (sortGroups = _, chord) : sortGroups;\n };\n\n chord.sortSubgroups = function(_) {\n return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;\n };\n\n chord.sortChords = function(_) {\n return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;\n };\n\n return chord;\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {path} from \"d3-path\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport {abs, cos, epsilon, halfPi, sin} from \"./math.js\";\n\nfunction defaultSource(d) {\n return d.source;\n}\n\nfunction defaultTarget(d) {\n return d.target;\n}\n\nfunction defaultRadius(d) {\n return d.radius;\n}\n\nfunction defaultStartAngle(d) {\n return d.startAngle;\n}\n\nfunction defaultEndAngle(d) {\n return d.endAngle;\n}\n\nfunction defaultPadAngle() {\n return 0;\n}\n\nfunction defaultArrowheadRadius() {\n return 10;\n}\n\nfunction ribbon(headRadius) {\n var source = defaultSource,\n target = defaultTarget,\n sourceRadius = defaultRadius,\n targetRadius = defaultRadius,\n startAngle = defaultStartAngle,\n endAngle = defaultEndAngle,\n padAngle = defaultPadAngle,\n context = null;\n\n function ribbon() {\n var buffer,\n s = source.apply(this, arguments),\n t = target.apply(this, arguments),\n ap = padAngle.apply(this, arguments) / 2,\n argv = slice.call(arguments),\n sr = +sourceRadius.apply(this, (argv[0] = s, argv)),\n sa0 = startAngle.apply(this, argv) - halfPi,\n sa1 = endAngle.apply(this, argv) - halfPi,\n tr = +targetRadius.apply(this, (argv[0] = t, argv)),\n ta0 = startAngle.apply(this, argv) - halfPi,\n ta1 = endAngle.apply(this, argv) - halfPi;\n\n if (!context) context = buffer = path();\n\n if (ap > epsilon) {\n if (abs(sa1 - sa0) > ap * 2 + epsilon) sa1 > sa0 ? (sa0 += ap, sa1 -= ap) : (sa0 -= ap, sa1 += ap);\n else sa0 = sa1 = (sa0 + sa1) / 2;\n if (abs(ta1 - ta0) > ap * 2 + epsilon) ta1 > ta0 ? (ta0 += ap, ta1 -= ap) : (ta0 -= ap, ta1 += ap);\n else ta0 = ta1 = (ta0 + ta1) / 2;\n }\n\n context.moveTo(sr * cos(sa0), sr * sin(sa0));\n context.arc(0, 0, sr, sa0, sa1);\n if (sa0 !== ta0 || sa1 !== ta1) {\n if (headRadius) {\n var hr = +headRadius.apply(this, arguments), tr2 = tr - hr, ta2 = (ta0 + ta1) / 2;\n context.quadraticCurveTo(0, 0, tr2 * cos(ta0), tr2 * sin(ta0));\n context.lineTo(tr * cos(ta2), tr * sin(ta2));\n context.lineTo(tr2 * cos(ta1), tr2 * sin(ta1));\n } else {\n context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));\n context.arc(0, 0, tr, ta0, ta1);\n }\n }\n context.quadraticCurveTo(0, 0, sr * cos(sa0), sr * sin(sa0));\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n if (headRadius) ribbon.headRadius = function(_) {\n return arguments.length ? (headRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : headRadius;\n };\n\n ribbon.radius = function(_) {\n return arguments.length ? (sourceRadius = targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n };\n\n ribbon.sourceRadius = function(_) {\n return arguments.length ? (sourceRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : sourceRadius;\n };\n\n ribbon.targetRadius = function(_) {\n return arguments.length ? (targetRadius = typeof _ === \"function\" ? _ : constant(+_), ribbon) : targetRadius;\n };\n\n ribbon.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : startAngle;\n };\n\n ribbon.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : endAngle;\n };\n\n ribbon.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), ribbon) : padAngle;\n };\n\n ribbon.source = function(_) {\n return arguments.length ? (source = _, ribbon) : source;\n };\n\n ribbon.target = function(_) {\n return arguments.length ? (target = _, ribbon) : target;\n };\n\n ribbon.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;\n };\n\n return ribbon;\n}\n\nexport default function() {\n return ribbon();\n}\n\nexport function ribbonArrow() {\n return ribbon(defaultArrowheadRadius);\n}\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolate} from \"d3-interpolate\";\nimport {pointer, select} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport BrushEvent from \"./event.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\nvar MODE_DRAG = {name: \"drag\"},\n MODE_SPACE = {name: \"space\"},\n MODE_HANDLE = {name: \"handle\"},\n MODE_CENTER = {name: \"center\"};\n\nconst {abs, max, min} = Math;\n\nfunction number1(e) {\n return [+e[0], +e[1]];\n}\n\nfunction number2(e) {\n return [number1(e[0]), number1(e[1])];\n}\n\nvar X = {\n name: \"x\",\n handles: [\"w\", \"e\"].map(type),\n input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },\n output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }\n};\n\nvar Y = {\n name: \"y\",\n handles: [\"n\", \"s\"].map(type),\n input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },\n output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }\n};\n\nvar XY = {\n name: \"xy\",\n handles: [\"n\", \"w\", \"e\", \"s\", \"nw\", \"ne\", \"sw\", \"se\"].map(type),\n input: function(xy) { return xy == null ? null : number2(xy); },\n output: function(xy) { return xy; }\n};\n\nvar cursors = {\n overlay: \"crosshair\",\n selection: \"move\",\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n};\n\nvar flipX = {\n e: \"w\",\n w: \"e\",\n nw: \"ne\",\n ne: \"nw\",\n se: \"sw\",\n sw: \"se\"\n};\n\nvar flipY = {\n n: \"s\",\n s: \"n\",\n nw: \"sw\",\n ne: \"se\",\n se: \"ne\",\n sw: \"nw\"\n};\n\nvar signsX = {\n overlay: +1,\n selection: +1,\n n: null,\n e: +1,\n s: null,\n w: -1,\n nw: -1,\n ne: +1,\n se: +1,\n sw: -1\n};\n\nvar signsY = {\n overlay: +1,\n selection: +1,\n n: -1,\n e: null,\n s: +1,\n w: null,\n nw: -1,\n ne: -1,\n se: +1,\n sw: +1\n};\n\nfunction type(t) {\n return {type: t};\n}\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultExtent() {\n var svg = this.ownerSVGElement || this;\n if (svg.hasAttribute(\"viewBox\")) {\n svg = svg.viewBox.baseVal;\n return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];\n }\n return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\n// Like d3.local, but with the name “__brush” rather than auto-generated.\nfunction local(node) {\n while (!node.__brush) if (!(node = node.parentNode)) return;\n return node.__brush;\n}\n\nfunction empty(extent) {\n return extent[0][0] === extent[1][0]\n || extent[0][1] === extent[1][1];\n}\n\nexport function brushSelection(node) {\n var state = node.__brush;\n return state ? state.dim.output(state.selection) : null;\n}\n\nexport function brushX() {\n return brush(X);\n}\n\nexport function brushY() {\n return brush(Y);\n}\n\nexport default function() {\n return brush(XY);\n}\n\nfunction brush(dim) {\n var extent = defaultExtent,\n filter = defaultFilter,\n touchable = defaultTouchable,\n keys = true,\n listeners = dispatch(\"start\", \"brush\", \"end\"),\n handleSize = 6,\n touchending;\n\n function brush(group) {\n var overlay = group\n .property(\"__brush\", initialize)\n .selectAll(\".overlay\")\n .data([type(\"overlay\")]);\n\n overlay.enter().append(\"rect\")\n .attr(\"class\", \"overlay\")\n .attr(\"pointer-events\", \"all\")\n .attr(\"cursor\", cursors.overlay)\n .merge(overlay)\n .each(function() {\n var extent = local(this).extent;\n select(this)\n .attr(\"x\", extent[0][0])\n .attr(\"y\", extent[0][1])\n .attr(\"width\", extent[1][0] - extent[0][0])\n .attr(\"height\", extent[1][1] - extent[0][1]);\n });\n\n group.selectAll(\".selection\")\n .data([type(\"selection\")])\n .enter().append(\"rect\")\n .attr(\"class\", \"selection\")\n .attr(\"cursor\", cursors.selection)\n .attr(\"fill\", \"#777\")\n .attr(\"fill-opacity\", 0.3)\n .attr(\"stroke\", \"#fff\")\n .attr(\"shape-rendering\", \"crispEdges\");\n\n var handle = group.selectAll(\".handle\")\n .data(dim.handles, function(d) { return d.type; });\n\n handle.exit().remove();\n\n handle.enter().append(\"rect\")\n .attr(\"class\", function(d) { return \"handle handle--\" + d.type; })\n .attr(\"cursor\", function(d) { return cursors[d.type]; });\n\n group\n .each(redraw)\n .attr(\"fill\", \"none\")\n .attr(\"pointer-events\", \"all\")\n .on(\"mousedown.brush\", started)\n .filter(touchable)\n .on(\"touchstart.brush\", started)\n .on(\"touchmove.brush\", touchmoved)\n .on(\"touchend.brush touchcancel.brush\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n brush.move = function(group, selection, event) {\n if (group.tween) {\n group\n .on(\"start.brush\", function(event) { emitter(this, arguments).beforestart().start(event); })\n .on(\"interrupt.brush end.brush\", function(event) { emitter(this, arguments).end(event); })\n .tween(\"brush\", function() {\n var that = this,\n state = that.__brush,\n emit = emitter(that, arguments),\n selection0 = state.selection,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(this, arguments) : selection, state.extent),\n i = interpolate(selection0, selection1);\n\n function tween(t) {\n state.selection = t === 1 && selection1 === null ? null : i(t);\n redraw.call(that);\n emit.brush();\n }\n\n return selection0 !== null && selection1 !== null ? tween : tween(1);\n });\n } else {\n group\n .each(function() {\n var that = this,\n args = arguments,\n state = that.__brush,\n selection1 = dim.input(typeof selection === \"function\" ? selection.apply(that, args) : selection, state.extent),\n emit = emitter(that, args).beforestart();\n\n interrupt(that);\n state.selection = selection1 === null ? null : selection1;\n redraw.call(that);\n emit.start(event).brush(event).end(event);\n });\n }\n };\n\n brush.clear = function(group, event) {\n brush.move(group, null, event);\n };\n\n function redraw() {\n var group = select(this),\n selection = local(this).selection;\n\n if (selection) {\n group.selectAll(\".selection\")\n .style(\"display\", null)\n .attr(\"x\", selection[0][0])\n .attr(\"y\", selection[0][1])\n .attr(\"width\", selection[1][0] - selection[0][0])\n .attr(\"height\", selection[1][1] - selection[0][1]);\n\n group.selectAll(\".handle\")\n .style(\"display\", null)\n .attr(\"x\", function(d) { return d.type[d.type.length - 1] === \"e\" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })\n .attr(\"y\", function(d) { return d.type[0] === \"s\" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })\n .attr(\"width\", function(d) { return d.type === \"n\" || d.type === \"s\" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })\n .attr(\"height\", function(d) { return d.type === \"e\" || d.type === \"w\" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });\n }\n\n else {\n group.selectAll(\".selection,.handle\")\n .style(\"display\", \"none\")\n .attr(\"x\", null)\n .attr(\"y\", null)\n .attr(\"width\", null)\n .attr(\"height\", null);\n }\n }\n\n function emitter(that, args, clean) {\n var emit = that.__brush.emitter;\n return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);\n }\n\n function Emitter(that, args, clean) {\n this.that = that;\n this.args = args;\n this.state = that.__brush;\n this.active = 0;\n this.clean = clean;\n }\n\n Emitter.prototype = {\n beforestart: function() {\n if (++this.active === 1) this.state.emitter = this, this.starting = true;\n return this;\n },\n start: function(event, mode) {\n if (this.starting) this.starting = false, this.emit(\"start\", event, mode);\n else this.emit(\"brush\", event);\n return this;\n },\n brush: function(event, mode) {\n this.emit(\"brush\", event, mode);\n return this;\n },\n end: function(event, mode) {\n if (--this.active === 0) delete this.state.emitter, this.emit(\"end\", event, mode);\n return this;\n },\n emit: function(type, event, mode) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new BrushEvent(type, {\n sourceEvent: event,\n target: brush,\n selection: dim.output(this.state.selection),\n mode,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function started(event) {\n if (touchending && !event.touches) return;\n if (!filter.apply(this, arguments)) return;\n\n var that = this,\n type = event.target.__data__.type,\n mode = (keys && event.metaKey ? type = \"overlay\" : type) === \"selection\" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),\n signX = dim === Y ? null : signsX[type],\n signY = dim === X ? null : signsY[type],\n state = local(that),\n extent = state.extent,\n selection = state.selection,\n W = extent[0][0], w0, w1,\n N = extent[0][1], n0, n1,\n E = extent[1][0], e0, e1,\n S = extent[1][1], s0, s1,\n dx = 0,\n dy = 0,\n moving,\n shifting = signX && signY && keys && event.shiftKey,\n lockX,\n lockY,\n points = Array.from(event.touches || [event], t => {\n const i = t.identifier;\n t = pointer(t, that);\n t.point0 = t.slice();\n t.identifier = i;\n return t;\n });\n\n interrupt(that);\n var emit = emitter(that, arguments, true).beforestart();\n\n if (type === \"overlay\") {\n if (selection) moving = true;\n const pts = [points[0], points[1] || points[0]];\n state.selection = selection = [[\n w0 = dim === Y ? W : min(pts[0][0], pts[1][0]),\n n0 = dim === X ? N : min(pts[0][1], pts[1][1])\n ], [\n e0 = dim === Y ? E : max(pts[0][0], pts[1][0]),\n s0 = dim === X ? S : max(pts[0][1], pts[1][1])\n ]];\n if (points.length > 1) move(event);\n } else {\n w0 = selection[0][0];\n n0 = selection[0][1];\n e0 = selection[1][0];\n s0 = selection[1][1];\n }\n\n w1 = w0;\n n1 = n0;\n e1 = e0;\n s1 = s0;\n\n var group = select(that)\n .attr(\"pointer-events\", \"none\");\n\n var overlay = group.selectAll(\".overlay\")\n .attr(\"cursor\", cursors[type]);\n\n if (event.touches) {\n emit.moved = moved;\n emit.ended = ended;\n } else {\n var view = select(event.view)\n .on(\"mousemove.brush\", moved, true)\n .on(\"mouseup.brush\", ended, true);\n if (keys) view\n .on(\"keydown.brush\", keydowned, true)\n .on(\"keyup.brush\", keyupped, true)\n\n dragDisable(event.view);\n }\n\n redraw.call(that);\n emit.start(event, mode.name);\n\n function moved(event) {\n for (const p of event.changedTouches || [event]) {\n for (const d of points)\n if (d.identifier === p.identifier) d.cur = pointer(p, that);\n }\n if (shifting && !lockX && !lockY && points.length === 1) {\n const point = points[0];\n if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))\n lockY = true;\n else\n lockX = true;\n }\n for (const point of points)\n if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];\n moving = true;\n noevent(event);\n move(event);\n }\n\n function move(event) {\n const point = points[0], point0 = point.point0;\n var t;\n\n dx = point[0] - point0[0];\n dy = point[1] - point0[1];\n\n switch (mode) {\n case MODE_SPACE:\n case MODE_DRAG: {\n if (signX) dx = max(W - w0, min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;\n if (signY) dy = max(N - n0, min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;\n break;\n }\n case MODE_HANDLE: {\n if (points[1]) {\n if (signX) w1 = max(W, min(E, points[0][0])), e1 = max(W, min(E, points[1][0])), signX = 1;\n if (signY) n1 = max(N, min(S, points[0][1])), s1 = max(N, min(S, points[1][1])), signY = 1;\n } else {\n if (signX < 0) dx = max(W - w0, min(E - w0, dx)), w1 = w0 + dx, e1 = e0;\n else if (signX > 0) dx = max(W - e0, min(E - e0, dx)), w1 = w0, e1 = e0 + dx;\n if (signY < 0) dy = max(N - n0, min(S - n0, dy)), n1 = n0 + dy, s1 = s0;\n else if (signY > 0) dy = max(N - s0, min(S - s0, dy)), n1 = n0, s1 = s0 + dy;\n }\n break;\n }\n case MODE_CENTER: {\n if (signX) w1 = max(W, min(E, w0 - dx * signX)), e1 = max(W, min(E, e0 + dx * signX));\n if (signY) n1 = max(N, min(S, n0 - dy * signY)), s1 = max(N, min(S, s0 + dy * signY));\n break;\n }\n }\n\n if (e1 < w1) {\n signX *= -1;\n t = w0, w0 = e0, e0 = t;\n t = w1, w1 = e1, e1 = t;\n if (type in flipX) overlay.attr(\"cursor\", cursors[type = flipX[type]]);\n }\n\n if (s1 < n1) {\n signY *= -1;\n t = n0, n0 = s0, s0 = t;\n t = n1, n1 = s1, s1 = t;\n if (type in flipY) overlay.attr(\"cursor\", cursors[type = flipY[type]]);\n }\n\n if (state.selection) selection = state.selection; // May be set by brush.move!\n if (lockX) w1 = selection[0][0], e1 = selection[1][0];\n if (lockY) n1 = selection[0][1], s1 = selection[1][1];\n\n if (selection[0][0] !== w1\n || selection[0][1] !== n1\n || selection[1][0] !== e1\n || selection[1][1] !== s1) {\n state.selection = [[w1, n1], [e1, s1]];\n redraw.call(that);\n emit.brush(event, mode.name);\n }\n }\n\n function ended(event) {\n nopropagation(event);\n if (event.touches) {\n if (event.touches.length) return;\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n } else {\n dragEnable(event.view, moving);\n view.on(\"keydown.brush keyup.brush mousemove.brush mouseup.brush\", null);\n }\n group.attr(\"pointer-events\", \"all\");\n overlay.attr(\"cursor\", cursors.overlay);\n if (state.selection) selection = state.selection; // May be set by brush.move (on start)!\n if (empty(selection)) state.selection = null, redraw.call(that);\n emit.end(event, mode.name);\n }\n\n function keydowned(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n shifting = signX && signY;\n break;\n }\n case 18: { // ALT\n if (mode === MODE_HANDLE) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n move(event);\n }\n break;\n }\n case 32: { // SPACE; takes priority over ALT\n if (mode === MODE_HANDLE || mode === MODE_CENTER) {\n if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;\n if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;\n mode = MODE_SPACE;\n overlay.attr(\"cursor\", cursors.selection);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n\n function keyupped(event) {\n switch (event.keyCode) {\n case 16: { // SHIFT\n if (shifting) {\n lockX = lockY = shifting = false;\n move(event);\n }\n break;\n }\n case 18: { // ALT\n if (mode === MODE_CENTER) {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n move(event);\n }\n break;\n }\n case 32: { // SPACE\n if (mode === MODE_SPACE) {\n if (event.altKey) {\n if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;\n if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;\n mode = MODE_CENTER;\n } else {\n if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;\n if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;\n mode = MODE_HANDLE;\n }\n overlay.attr(\"cursor\", cursors[type]);\n move(event);\n }\n break;\n }\n default: return;\n }\n noevent(event);\n }\n }\n\n function touchmoved(event) {\n emitter(this, arguments).moved(event);\n }\n\n function touchended(event) {\n emitter(this, arguments).ended(event);\n }\n\n function initialize() {\n var state = this.__brush || {selection: null};\n state.extent = number2(extent.apply(this, arguments));\n state.dim = dim;\n return state;\n }\n\n brush.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant(number2(_)), brush) : extent;\n };\n\n brush.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), brush) : filter;\n };\n\n brush.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), brush) : touchable;\n };\n\n brush.handleSize = function(_) {\n return arguments.length ? (handleSize = +_, brush) : handleSize;\n };\n\n brush.keyModifiers = function(_) {\n return arguments.length ? (keys = !!_, brush) : keys;\n };\n\n brush.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? brush : value;\n };\n\n return brush;\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","import type { DataItem } from \"../../core/render/Component\";\nimport type { IFlowNodesDataItem, FlowNodes } from \"./FlowNodes\";\n\nimport { Container, IContainerPrivate, IContainerSettings } from \"../../core/render/Container\";\n\nexport interface IFlowNodeSettings extends IContainerSettings {\n}\n\nexport interface IFlowNodePrivate extends IContainerPrivate {\n}\n\n/**\n * Base class for flow chart nodes.\n */\nexport class FlowNode extends Container {\n\n\t/**\n\t * Related series.\n\t */\n\tpublic series: FlowNodes | undefined;\n\n\tdeclare public _settings: IFlowNodeSettings;\n\tdeclare public _privateSettings: IFlowNodePrivate;\n\n\tpublic static className: string = \"FlowNode\";\n\tpublic static classNames: Array = Container.classNames.concat([FlowNode.className]);\n\n\tdeclare protected _dataItem: DataItem | undefined;\n}\n","import type { DataItem } from \"../../core/render/Component\";\nimport type { Color } from \"../../core/util/Color\";\nimport type { Time } from \"../../core/util/Animation\";\nimport type { Flow, IFlowDataItem } from \"./Flow\";\nimport type { ColorSet } from \"../../core/util/ColorSet\";\nimport type { PatternSet } from \"../../core/util/PatternSet\";\nimport type { Pattern } from \"../../core/render/patterns/Pattern\";\n\nimport type * as d3sankey from \"d3-sankey\";\n\nimport { Label } from \"../../core/render/Label\";\nimport { Series, ISeriesSettings, ISeriesDataItem, ISeriesPrivate, ISeriesEvents } from \"../../core/render/Series\";\nimport { Template } from \"../../core/util/Template\";\nimport { ListTemplate } from \"../../core/util/List\";\nimport { FlowNode } from \"./FlowNode\";\n\nimport * as $array from \"../../core/util/Array\";\n\nexport interface IFlowNodesDataItem extends ISeriesDataItem {\n\n\t/**\n\t * Node name.\n\t */\n\tname: string;\n\n\t/**\n\t * An associated node instance.\n\t */\n\tnode: FlowNode;\n\n\t/**\n\t * Node label.\n\t */\n\tlabel: Label;\n\n\t/**\n\t * Node color.\n\t */\n\tfill: Color;\n\n\t/**\n\t * Node pattern.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/} for more info\n\t * @since 5.10.0\n\t */\n\tfillPattern: Pattern;\n\n\t/**\n\t * Indicates \"unknown\" node.\n\t */\n\tunknown: boolean;\n\n\t/**\n\t * @ignore\n\t */\n\td3SankeyNode: d3sankey.SankeyNode;\n\n\t/**\n\t * Sum of values of all incoming links.\n\t */\n\tsumIncoming: number;\n\n\t/**\n\t * Sum of values of all outgoing links.\n\t */\n\tsumOutgoing: number;\n\n\t/**\n\t * @ignore\n\t */\n\tsumIncomingWorking: number;\n\n\t/**\n\t * @ignore\n\t */\n\tsumOutgoingWorking: number;\n\n\t/**\n\t * Sum of values of all links: incoming and outgoing.\n\t */\n\tsum: number;\n\n\t/**\n\t * @ignore\n\t */\n\tsumWorking: number;\n\n\t/**\n\t * A list of incoming link data items.\n\t */\n\tincomingLinks: Array>;\n\n\t/**\n\t * A list of outgoing link data items.\n\t */\n\toutgoingLinks: Array>;\n\n\t/**\n\t * Depth of the node.\n\t */\n\tdepth: number;\n\n}\n\nexport interface IFlowNodesSettings extends ISeriesSettings {\n\n\t/**\n\t * A field in data boolean setting if the node is \"unknown\".\n\t *\n\t * @default \"unknown\"\n\t */\n\tunknownField?: string;\n\n\t/**\n\t * A field in data that holds name for the node.\n\t *\n\t * @default \"id\"\n\t */\n\tnameField?: string;\n\n\t/**\n\t * A field in data that holds boolean value indicating if node is\n\t * disabled (collapsed).\n\t *\n\t * @since 5.4.2\n\t */\n\tdisabledField?: string;\n\n\t/**\n\t * A field in data that holds color used for fills nodes.\n\t *\n\t * @default \"fill\"\n\t */\n\tfillField?: string;\n\n\t/**\n\t * A [[ColorSet]] that series will use to apply to its nodes.\n\t */\n\tcolors?: ColorSet;\n\n\t/**\n\t * A [[PatternSet]] that series will use to apply to its nodes.\n\t *\n\t * @see {@link https://www.amcharts.com/docs/v5/concepts/colors-gradients-and-patterns/patterns/#Pattern_sets} for more info\n\t * @since 5.10.0\n\t */\n\tpatterns?: PatternSet;\n\n\t/**\n\t * Animation duration in ms.\n\t */\n\tanimationDuration?: number;\n\n\t/**\n\t * Easing function to use for node animations.\n\t */\n\tanimationEasing?: (t: Time) => Time;\n}\n\nexport interface IFlowNodesPrivate extends ISeriesPrivate {\n}\n\nexport interface IFlowNodesEvents extends ISeriesEvents {\n}\n\n\n/**\n * Holds instances of nodes for a [[Flow]] series.\n */\nexport abstract class FlowNodes extends Series {\n\tpublic static className: string = \"FlowNodes\";\n\tpublic static classNames: Array = Series.classNames.concat([FlowNodes.className]);\n\n\tdeclare public _settings: IFlowNodesSettings;\n\tdeclare public _privateSettings: IFlowNodesPrivate;\n\tdeclare public _dataItemSettings: IFlowNodesDataItem;\n\tdeclare public _events: IFlowNodesEvents;\n\n\t/**\n\t * List of label elements.\n\t *\n\t * @default new ListTemplate